pub trait Gradients: Dimwhere
DefaultAllocator: Allocator<Self>,{
type Dual<T: DualNum<F> + Copy, F: DualNumFloat>: DualNum<F, Inner = T> + Copy;
type Dual2<T: DualNum<F> + Copy, F: DualNumFloat>: DualNum<F, Inner = T> + Copy;
type HyperDual<T: DualNum<F> + Copy, F: DualNumFloat>: DualNum<F, Inner = T> + Copy;
// Required methods
fn gradient<G, T: DualNum<F> + Copy, F: DualNumFloat, A: DualStruct<Self::Dual<T, F>, F>>(
g: G,
x: &OVector<T, Self>,
args: &A::Inner,
) -> (T, OVector<T, Self>)
where G: Fn(OVector<Self::Dual<T, F>, Self>, &A) -> Self::Dual<T, F>;
fn hessian<G, T: DualNum<F> + Copy, F: DualNumFloat, A: DualStruct<Self::Dual2<T, F>, F>>(
g: G,
x: &OVector<T, Self>,
args: &A::Inner,
) -> (T, OVector<T, Self>, OMatrix<T, Self, Self>)
where G: Fn(OVector<Self::Dual2<T, F>, Self>, &A) -> Self::Dual2<T, F>,
DefaultAllocator: Allocator<Self, Self>;
fn partial_hessian<G, T: DualNum<F> + Copy, F: DualNumFloat, A: DualStruct<Self::HyperDual<T, F>, F>>(
g: G,
x: &OVector<T, Self>,
y: T,
args: &A::Inner,
) -> (T, OVector<T, Self>, T, OVector<T, Self>)
where G: Fn(OVector<Self::HyperDual<T, F>, Self>, Self::HyperDual<T, F>, &A) -> Self::HyperDual<T, F>;
fn jacobian<G, T: DualNum<F> + Copy, F: DualNumFloat, A: DualStruct<Self::Dual<T, F>, F>>(
g: G,
x: &OVector<T, Self>,
args: &A::Inner,
) -> (OVector<T, Self>, OMatrix<T, Self, Self>)
where G: Fn(OVector<Self::Dual<T, F>, Self>, &A) -> OVector<Self::Dual<T, F>, Self>,
DefaultAllocator: Allocator<Self, Self>;
}
Expand description
Evaluation of gradients, hessians, and partial (Nx1) hessians that is generic over the dimensionality of the input vector.
Required Associated Types§
type Dual<T: DualNum<F> + Copy, F: DualNumFloat>: DualNum<F, Inner = T> + Copy
type Dual2<T: DualNum<F> + Copy, F: DualNumFloat>: DualNum<F, Inner = T> + Copy
type HyperDual<T: DualNum<F> + Copy, F: DualNumFloat>: DualNum<F, Inner = T> + Copy
Required Methods§
fn gradient<G, T: DualNum<F> + Copy, F: DualNumFloat, A: DualStruct<Self::Dual<T, F>, F>>( g: G, x: &OVector<T, Self>, args: &A::Inner, ) -> (T, OVector<T, Self>)
fn hessian<G, T: DualNum<F> + Copy, F: DualNumFloat, A: DualStruct<Self::Dual2<T, F>, F>>( g: G, x: &OVector<T, Self>, args: &A::Inner, ) -> (T, OVector<T, Self>, OMatrix<T, Self, Self>)
fn partial_hessian<G, T: DualNum<F> + Copy, F: DualNumFloat, A: DualStruct<Self::HyperDual<T, F>, F>>( g: G, x: &OVector<T, Self>, y: T, args: &A::Inner, ) -> (T, OVector<T, Self>, T, OVector<T, Self>)
fn jacobian<G, T: DualNum<F> + Copy, F: DualNumFloat, A: DualStruct<Self::Dual<T, F>, F>>( g: G, x: &OVector<T, Self>, args: &A::Inner, ) -> (OVector<T, Self>, OMatrix<T, Self, Self>)
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.