DualStruct

Trait DualStruct 

Source
pub trait DualStruct<D, F> {
    type Real;
    type Inner;

    // Required methods
    fn re(&self) -> Self::Real;
    fn from_inner(inner: &Self::Inner) -> Self;
}
Expand description

A struct that contains dual numbers. Needed for arbitrary arguments in ImplicitFunction.

The trait is implemented for all dual types themselves, and common data types (tuple, vec, array, …) and can be implemented for custom data types to achieve full flexibility.

Required Associated Types§

Required Methods§

Source

fn re(&self) -> Self::Real

Source

fn from_inner(inner: &Self::Inner) -> 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.

Implementations on Foreign Types§

Source§

impl DualStruct<f32, f32> for f32

Source§

type Real = f32

Source§

type Inner = f32

Source§

fn re(&self) -> f32

Source§

fn from_inner(inner: &Self::Inner) -> Self

Source§

impl DualStruct<f64, f64> for f64

Source§

type Real = f64

Source§

type Inner = f64

Source§

fn re(&self) -> f64

Source§

fn from_inner(inner: &Self::Inner) -> Self

Source§

impl<D, F> DualStruct<D, F> for ()

Source§

type Real = ()

Source§

type Inner = ()

Source§

fn re(&self)

Source§

fn from_inner(_: &Self::Inner) -> Self

Source§

impl<D, F, T1: DualStruct<D, F>, T2: DualStruct<D, F>> DualStruct<D, F> for (T1, T2)

Source§

type Real = (<T1 as DualStruct<D, F>>::Real, <T2 as DualStruct<D, F>>::Real)

Source§

type Inner = (<T1 as DualStruct<D, F>>::Inner, <T2 as DualStruct<D, F>>::Inner)

Source§

fn re(&self) -> Self::Real

Source§

fn from_inner(re: &Self::Inner) -> Self

Source§

impl<D, F, T1: DualStruct<D, F>, T2: DualStruct<D, F>, T3: DualStruct<D, F>> DualStruct<D, F> for (T1, T2, T3)

Source§

type Real = (<T1 as DualStruct<D, F>>::Real, <T2 as DualStruct<D, F>>::Real, <T3 as DualStruct<D, F>>::Real)

Source§

type Inner = (<T1 as DualStruct<D, F>>::Inner, <T2 as DualStruct<D, F>>::Inner, <T3 as DualStruct<D, F>>::Inner)

Source§

fn re(&self) -> Self::Real

Source§

fn from_inner(inner: &Self::Inner) -> Self

Source§

impl<D, F, T1: DualStruct<D, F>, T2: DualStruct<D, F>, T3: DualStruct<D, F>, T4: DualStruct<D, F>> DualStruct<D, F> for (T1, T2, T3, T4)

Source§

type Real = (<T1 as DualStruct<D, F>>::Real, <T2 as DualStruct<D, F>>::Real, <T3 as DualStruct<D, F>>::Real, <T4 as DualStruct<D, F>>::Real)

Source§

type Inner = (<T1 as DualStruct<D, F>>::Inner, <T2 as DualStruct<D, F>>::Inner, <T3 as DualStruct<D, F>>::Inner, <T4 as DualStruct<D, F>>::Inner)

Source§

fn re(&self) -> Self::Real

Source§

fn from_inner(inner: &Self::Inner) -> Self

Source§

impl<D, F, T1: DualStruct<D, F>, T2: DualStruct<D, F>, T3: DualStruct<D, F>, T4: DualStruct<D, F>, T5: DualStruct<D, F>> DualStruct<D, F> for (T1, T2, T3, T4, T5)

Source§

type Real = (<T1 as DualStruct<D, F>>::Real, <T2 as DualStruct<D, F>>::Real, <T3 as DualStruct<D, F>>::Real, <T4 as DualStruct<D, F>>::Real, <T5 as DualStruct<D, F>>::Real)

Source§

type Inner = (<T1 as DualStruct<D, F>>::Inner, <T2 as DualStruct<D, F>>::Inner, <T3 as DualStruct<D, F>>::Inner, <T4 as DualStruct<D, F>>::Inner, <T5 as DualStruct<D, F>>::Inner)

Source§

fn re(&self) -> Self::Real

Source§

fn from_inner(inner: &Self::Inner) -> Self

Source§

impl<D, F, T: DualStruct<D, F>> DualStruct<D, F> for Option<T>

Source§

type Real = Option<<T as DualStruct<D, F>>::Real>

Source§

type Inner = Option<<T as DualStruct<D, F>>::Inner>

Source§

fn re(&self) -> Self::Real

Source§

fn from_inner(inner: &Self::Inner) -> Self

Source§

impl<D, F, T: DualStruct<D, F>> DualStruct<D, F> for Vec<T>

Source§

type Real = Vec<<T as DualStruct<D, F>>::Real>

Source§

type Inner = Vec<<T as DualStruct<D, F>>::Inner>

Source§

fn re(&self) -> Self::Real

Source§

fn from_inner(inner: &Self::Inner) -> Self

Source§

impl<D, F, T: DualStruct<D, F>, K: Clone + Eq + Hash> DualStruct<D, F> for HashMap<K, T>

Source§

type Real = HashMap<K, <T as DualStruct<D, F>>::Real>

Source§

type Inner = HashMap<K, <T as DualStruct<D, F>>::Inner>

Source§

fn re(&self) -> Self::Real

Source§

fn from_inner(inner: &Self::Inner) -> Self

Source§

impl<D, F, T: DualStruct<D, F>, const N: usize> DualStruct<D, F> for [T; N]

Source§

type Real = [<T as DualStruct<D, F>>::Real; N]

Source§

type Inner = [<T as DualStruct<D, F>>::Inner; N]

Source§

fn re(&self) -> Self::Real

Source§

fn from_inner(re: &Self::Inner) -> Self

Source§

impl<D: DualNum<F>, F: DualNumFloat, R: Dim, C: Dim> DualStruct<D, F> for OMatrix<D, R, C>
where DefaultAllocator: Allocator<R, C>, D::Inner: DualNum<F>,

Source§

type Real = Matrix<F, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<F>>

Source§

type Inner = Matrix<<D as DualStruct<D, F>>::Inner, R, C, <DefaultAllocator as Allocator<R, C>>::Buffer<<D as DualStruct<D, F>>::Inner>>

Source§

fn re(&self) -> Self::Real

Source§

fn from_inner(inner: &Self::Inner) -> Self

Implementors§

Source§

impl<T: DualNum<F>, F> DualStruct<Dual2<T, F>, F> for Dual2<T, F>

Source§

type Real = F

Source§

type Inner = T

Source§

impl<T: DualNum<F>, F> DualStruct<Dual3<T, F>, F> for Dual3<T, F>

Source§

type Real = F

Source§

type Inner = T

Source§

impl<T: DualNum<F>, F> DualStruct<Dual<T, F>, F> for Dual<T, F>

Source§

type Real = F

Source§

type Inner = T

Source§

impl<T: DualNum<F>, F> DualStruct<HyperDual<T, F>, F> for HyperDual<T, F>

Source§

type Real = F

Source§

type Inner = T

Source§

impl<T: DualNum<F>, F> DualStruct<HyperHyperDual<T, F>, F> for HyperHyperDual<T, F>

Source§

type Real = F

Source§

type Inner = T

Source§

impl<T: DualNum<F>, F> DualStruct<Real<T, F>, F> for Real<T, F>

Source§

type Real = F

Source§

type Inner = T

Source§

impl<T: DualNum<F>, F, D: Dim> DualStruct<Dual2Vec<T, F, D>, F> for Dual2Vec<T, F, D>

Source§

type Real = F

Source§

type Inner = T

Source§

impl<T: DualNum<F>, F, D: Dim> DualStruct<DualVec<T, F, D>, F> for DualVec<T, F, D>

Source§

type Real = F

Source§

type Inner = T

Source§

impl<T: DualNum<F>, F, M: Dim, N: Dim> DualStruct<HyperDualVec<T, F, M, N>, F> for HyperDualVec<T, F, M, N>

Source§

type Real = F

Source§

type Inner = T