pub trait AutoDiffable<StaticArgs>: Diffable<StaticArgs>{
// 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§
Sourcefn 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)
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§
Sourcefn eval(
&self,
x: &<Self as Diffable<StaticArgs>>::Input,
static_args: &StaticArgs,
) -> <Self as Diffable<StaticArgs>>::Output
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
Sourcefn grad(
&self,
x: &<Self as Diffable<StaticArgs>>::Input,
static_args: &StaticArgs,
) -> <<Self as Diffable<StaticArgs>>::Input as GradientType<<Self as Diffable<StaticArgs>>::Output>>::GradientType
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§
impl<S, I, P: InstOne> AutoDiffable<S> for Monomial<S, I, P>
impl<S, I: GradientType<O, GradientType = O>, O> AutoDiffable<S> for Polynomial<S, I, O>
impl<S, I: Clone + InstOne + GradientType<I, GradientType = G> + GradientIdentity, G> AutoDiffable<S> for Identity<S, I>
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>,
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>,
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>,
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>,
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,
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>,
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,
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,
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,
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,
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>,
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>,
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>,
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>,
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