Struct easy_ml::differentiation::Trace
source · [−]pub struct Trace<T: Primitive> {
pub number: T,
pub derivative: T,
}
Expand description
A dual number which traces a real number and keeps track of its derivative. This is used to perform Forward Automatic Differentiation
Trace implements only first order differentiation. For example, given a function
3x2, you can use calculus to work out that its derivative with respect
to x is 6x. You can also take the derivative of 6x with respect to x and work out
that the second derivative is 6. By instead writing the function 3x2 in
code using Trace types as your numbers you can compute the first order derivative
for a given value of x by passing your function Trace { number: x, derivative: 1.0 }
.
use easy_ml::differentiation::Trace;
let x = Trace { number: 3.2, derivative: 1.0 };
let dx = Trace::constant(3.0) * x * x;
assert_eq!(dx.derivative, 3.2 * 6.0);
Why the one for the starting derivative? Because δx/δx = 1, as with symbolic differentiation.
Acknowledgments
The wikipedia page on Automatic Differentiation provided a very useful overview and explanation for understanding Forward Mode Automatic Differentiation as well as the implementation rules.
Fields
number: T
The real number
derivative: T
The first order derivative of this number.
Implementations
sourceimpl<T: Numeric + Primitive> Trace<T>
impl<T: Numeric + Primitive> Trace<T>
The main set of methods for using Trace types for Forward Differentiation.
The general steps are
- create one variable
- create as many constants as needed
- do operations on the variable and constants
- the outputs will have derivatives computed which can be accessed from
the
.derivative
field, with each derivative being the output with respect to the input variable. - if you need derivatives for a different input then do everything all over again or do them all in parallel
sourcepub fn constant(c: T) -> Trace<T>
pub fn constant(c: T) -> Trace<T>
Constants are lifted to Traces with a derivative of 0
Why zero for the starting derivative? Because for any constant C δC/δx = 0, as with symbolic differentiation.
sourcepub fn variable(x: T) -> Trace<T>
pub fn variable(x: T) -> Trace<T>
To lift a variable that you want to find the derivative of a function to, the Trace starts with a derivative of 1
Why the one for the starting derivative? Because δx/δx = 1, as with symbolic differentiation.
sourcepub fn derivative(function: impl FnOnce(Trace<T>) -> Trace<T>, x: T) -> T
pub fn derivative(function: impl FnOnce(Trace<T>) -> Trace<T>, x: T) -> T
Computes the derivative of a function with respect to its input x.
This is a shorthand for (function(Trace::variable(x))).derivative
In the more general case, if you provide a function with an input x and it returns N outputs y1 to yN then you have computed all the derivatives δyi/δx for i = 1 to N.
sourceimpl<T: Numeric + Primitive> Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Trace<T> where
for<'a> &'a T: NumericRef<T>,
sourcepub fn unary(&self, fx: impl Fn(T) -> T, dfx_dx: impl Fn(T) -> T) -> Trace<T>
pub fn unary(&self, fx: impl Fn(T) -> T, dfx_dx: impl Fn(T) -> T) -> Trace<T>
Creates a new Trace from a reference to an existing Trace by applying some unary function to it which operates on the type the Trace wraps.
To compute the new trace, the unary function of some input x to some output y is needed along with its derivative with respect to its input x.
For example, tanh is a commonly used activation function, but the Real trait does not include this operation and Trace has no operations for it specifically. However, you can use this function to compute the tanh of a Trace like so:
use easy_ml::differentiation::Trace;
let x = Trace::variable(0.7f32);
// the derivative of tanh(x) is sech(x) * sech(x) which is equivalent to
// 1 / (cosh(x) * cosh(x))
let y = x.unary(|x| x.tanh(), |x| 1.0 / (x.cosh() * x.cosh()));
assert_eq!(y.derivative, 1.0f32 / (0.7f32.cosh() * 0.7f32.cosh()));
sourcepub fn binary(
&self,
rhs: &Trace<T>,
fxy: impl Fn(T, T) -> T,
dfxy_dx: impl Fn(T, T) -> T,
dfxy_dy: impl Fn(T, T) -> T
) -> Trace<T>
pub fn binary(
&self,
rhs: &Trace<T>,
fxy: impl Fn(T, T) -> T,
dfxy_dx: impl Fn(T, T) -> T,
dfxy_dy: impl Fn(T, T) -> T
) -> Trace<T>
Creates a new Trace from a reference to two existing Traces by applying some binary function to them which operates on two arguments of the type the Traces wrap.
To compute the new trace, the binary function of some inputs x and y to some output z is needed along with its derivative with respect to its first input x and its derivative with respect to its second input y.
For example, atan2 takes two arguments, but the Real trait does not include this operation and Trace has no operations for it specifically. However, you can use this function to compute the atan2 of two Traces like so:
use easy_ml::differentiation::Trace;
let x = Trace::variable(3.0f32);
let y = Trace::variable(3.0f32);
// the derivative of atan2 with respect to x is y/(x*x + y*y)
// https://www.wolframalpha.com/input/?i=d%28atan2%28x%2Cy%29%29%2Fdx
// the derivative of atan2 with respect to y is -x/(x*x + y*y)
// https://www.wolframalpha.com/input/?i=d%28atan2%28x%2Cy%29%29%2Fdy
let z = x.binary(&y,
|x, y| x.atan2(y),
|x, y| y/((x*x) + (y*y)),
|x, y| -x/((x*x) + (y*y))
);
Trait Implementations
sourceimpl<T: Numeric + Primitive> Add<&'_ T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Add<&'_ T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
Addition for a trace and a constant of the same type with both referenced.
sourceimpl<T: Numeric + Primitive> Add<&'_ T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Add<&'_ T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for a trace and a constant of the same type with the right referenced.
sourceimpl<T: Numeric + Primitive> Add<&'_ Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Add<&'_ Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for two traces of the same type with the right referenced.
sourceimpl<'l, 'r, T: Numeric + Primitive> Add<&'r Trace<T>> for &'l Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<'l, 'r, T: Numeric + Primitive> Add<&'r Trace<T>> for &'l Trace<T> where
for<'a> &'a T: NumericRef<T>,
Addition for two traces of the same type with both referenced.
sourceimpl<T: Numeric + Primitive> Add<T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Add<T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for a trace and a constant of the same type.
sourceimpl<T: Numeric + Primitive> Add<T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Add<T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for a trace and a constant of the same type with the left referenced.
sourceimpl<T: Numeric + Primitive> Add<Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Add<Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for two traces of the same type.
sourceimpl<T: Numeric + Primitive> Add<Trace<T>> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Add<Trace<T>> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for two traces of the same type with the left referenced.
sourceimpl<T: Numeric + Real + Primitive> Cos for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Cos for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Cosine of a Trace by reference.
sourceimpl<T: Numeric + Real + Primitive> Cos for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Cos for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Operation for a trace by value.
sourceimpl<T: Display + Primitive> Display for Trace<T>
impl<T: Display + Primitive> Display for Trace<T>
A trace is displayed by showing its number component.
sourceimpl<T: Numeric + Primitive> Div<&'_ T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Div<&'_ T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
Dvision for a trace and a constant of the same type with both referenced.
sourceimpl<T: Numeric + Primitive> Div<&'_ T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Div<&'_ T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for a trace and a constant of the same type with the right referenced.
sourceimpl<T: Numeric + Primitive> Div<&'_ Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Div<&'_ Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for two traces of the same type with the right referenced.
sourceimpl<'l, 'r, T: Numeric + Primitive> Div<&'r Trace<T>> for &'l Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<'l, 'r, T: Numeric + Primitive> Div<&'r Trace<T>> for &'l Trace<T> where
for<'a> &'a T: NumericRef<T>,
Division for two referenced traces of the same type.
sourceimpl<T: Numeric + Primitive> Div<T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Div<T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for a trace and a constant of the same type.
sourceimpl<T: Numeric + Primitive> Div<T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Div<T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for a trace and a constant of the same type with the left referenced.
sourceimpl<T: Numeric + Primitive> Div<Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Div<Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for two traces of the same type.
sourceimpl<T: Numeric + Primitive> Div<Trace<T>> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Div<Trace<T>> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for two traces of the same type with the left referenced.
sourceimpl<T: Numeric + Real + Primitive> Exp for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Exp for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Exponential, ie ex of a Trace by reference.
sourceimpl<T: Numeric + Real + Primitive> Exp for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Exp for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Operation for a trace by value.
sourceimpl<T: Numeric + Primitive> FromUsize for Trace<T>
impl<T: Numeric + Primitive> FromUsize for Trace<T>
fn from_usize(n: usize) -> Option<Trace<T>>
sourceimpl<T: Numeric + Real + Primitive> Ln for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Ln for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Natural logarithm, ie ln(x) of a Trace by reference.
sourceimpl<T: Numeric + Real + Primitive> Ln for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Ln for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Operation for a trace by value.
sourceimpl<T: Numeric + Primitive> Mul<&'_ T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Mul<&'_ T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
Multiplication for a trace and a constant of the same type with both referenced.
sourceimpl<T: Numeric + Primitive> Mul<&'_ T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Mul<&'_ T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for a trace and a constant of the same type with the right referenced.
sourceimpl<T: Numeric + Primitive> Mul<&'_ Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Mul<&'_ Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for two traces of the same type with the right referenced.
sourceimpl<'l, 'r, T: Numeric + Primitive> Mul<&'r Trace<T>> for &'l Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<'l, 'r, T: Numeric + Primitive> Mul<&'r Trace<T>> for &'l Trace<T> where
for<'a> &'a T: NumericRef<T>,
Multiplication for two referenced traces of the same type.
sourceimpl<T: Numeric + Primitive> Mul<T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Mul<T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for a trace and a constant of the same type.
sourceimpl<T: Numeric + Primitive> Mul<T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Mul<T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for a trace and a constant of the same type with the left referenced.
sourceimpl<T: Numeric + Primitive> Mul<Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Mul<Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for two traces of the same type.
sourceimpl<T: Numeric + Primitive> Mul<Trace<T>> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Mul<Trace<T>> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for two traces of the same type with the left referenced.
sourceimpl<T: Numeric + Primitive> Neg for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Neg for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
Negation for a referenced Trace of some type.
sourceimpl<T: Numeric + Primitive> Neg for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Neg for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Negation for a Trace by value of some type.
sourceimpl<T: PartialEq + Primitive> PartialEq<Trace<T>> for Trace<T>
impl<T: PartialEq + Primitive> PartialEq<Trace<T>> for Trace<T>
Any trace of a PartialEq type implements PartialEq
Note that as a Trace is intended to be substitutable with its type T only the number parts of the trace are compared. Hence the following is true
use easy_ml::differentiation::Trace;
assert_eq!(Trace { number: 0, derivative: 1 }, Trace { number: 0, derivative: 2 })
sourceimpl<T: PartialOrd + Primitive> PartialOrd<Trace<T>> for Trace<T>
impl<T: PartialOrd + Primitive> PartialOrd<Trace<T>> for Trace<T>
Any trace of a PartialOrd type implements PartialOrd
Note that as a Trace is intended to be substitutable with its type T only the number parts of the trace are compared. Hence the following is true
use easy_ml::differentiation::Trace;
assert!(Trace { number: 1, derivative: 1 } > Trace { number: 0, derivative: 2 })
sourcefn partial_cmp(&self, other: &Self) -> Option<Ordering>
fn partial_cmp(&self, other: &Self) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
sourceimpl<T: Numeric + Real + Primitive> Pow<&'_ T> for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Pow<&'_ T> for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Power of a trace to a constant of the same type with both referenced.
sourceimpl<T: Numeric + Real + Primitive> Pow<&'_ T> for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Pow<&'_ T> for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Operation for a trace and a constant of the same type with the right referenced.
sourceimpl<T: Numeric + Real + Primitive> Pow<&'_ Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Pow<&'_ Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Operation for two traces of the same type with the right referenced.
sourceimpl<T: Numeric + Real + Primitive> Pow<&'_ Trace<T>> for &T where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Pow<&'_ Trace<T>> for &T where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Power of a constant to a trace of the same type with both referenced.
sourceimpl<T: Numeric + Real + Primitive> Pow<&'_ Trace<T>> for T where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Pow<&'_ Trace<T>> for T where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Operation for a trace and a constant of the same type with the right referenced.
sourceimpl<'l, 'r, T: Numeric + Real + Primitive> Pow<&'r Trace<T>> for &'l Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<'l, 'r, T: Numeric + Real + Primitive> Pow<&'r Trace<T>> for &'l Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Power of one Trace to another, ie self^rhs for two traces of the same type with both referenced.
sourceimpl<T: Numeric + Real + Primitive> Pow<T> for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Pow<T> for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Operation for a trace and a constant of the same type.
sourceimpl<T: Numeric + Real + Primitive> Pow<T> for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Pow<T> for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Operation for a trace and a constant of the same type with the left referenced.
sourceimpl<T: Numeric + Real + Primitive> Pow<Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Pow<Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Operation for two traces of the same type.
sourceimpl<T: Numeric + Real + Primitive> Pow<Trace<T>> for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Pow<Trace<T>> for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Operation for two traces of the same type with the left referenced.
sourceimpl<T: Numeric + Real + Primitive> Pow<Trace<T>> for T where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Pow<Trace<T>> for T where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Operation for a trace and a constant of the same type.
sourceimpl<T: Numeric + Real + Primitive> Pow<Trace<T>> for &T where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Pow<Trace<T>> for &T where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Operation for a trace and a constant of the same type with the left referenced.
sourceimpl<T: Numeric + Real + Primitive> Sin for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Sin for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Sine of a Trace by reference.
sourceimpl<T: Numeric + Real + Primitive> Sin for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Sin for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Operation for a trace by value.
sourceimpl<T: Numeric + Real + Primitive> Sqrt for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Sqrt for &Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Square root of a Trace by reference.
sourceimpl<T: Numeric + Real + Primitive> Sqrt for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
impl<T: Numeric + Real + Primitive> Sqrt for Trace<T> where
for<'a> &'a T: NumericRef<T> + RealRef<T>,
Operation for a trace by value.
sourceimpl<T: Numeric + Primitive> Sub<&'_ T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Sub<&'_ T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
Subtraction for a trace and a constant of the same type with both referenced.
sourceimpl<T: Numeric + Primitive> Sub<&'_ T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Sub<&'_ T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for a trace and a constant of the same type with the right referenced.
sourceimpl<T: Numeric + Primitive> Sub<&'_ Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Sub<&'_ Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for two traces of the same type with the right referenced.
sourceimpl<'l, 'r, T: Numeric + Primitive> Sub<&'r Trace<T>> for &'l Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<'l, 'r, T: Numeric + Primitive> Sub<&'r Trace<T>> for &'l Trace<T> where
for<'a> &'a T: NumericRef<T>,
Subtraction for two referenced traces of the same type.
sourceimpl<T: Numeric + Primitive> Sub<T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Sub<T> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for a trace and a constant of the same type.
sourceimpl<T: Numeric + Primitive> Sub<T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Sub<T> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for a trace and a constant of the same type with the left referenced.
sourceimpl<T: Numeric + Primitive> Sub<Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Sub<Trace<T>> for Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for two traces of the same type.
sourceimpl<T: Numeric + Primitive> Sub<Trace<T>> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
impl<T: Numeric + Primitive> Sub<Trace<T>> for &Trace<T> where
for<'a> &'a T: NumericRef<T>,
Operation for two traces of the same type with the left referenced.
sourceimpl<T: Numeric + Primitive> Sum<Trace<T>> for Trace<T>
impl<T: Numeric + Primitive> Sum<Trace<T>> for Trace<T>
Any trace of a Numeric type implements Sum, which is the same as adding a bunch of Trace types together.
impl<T: Copy + Primitive> Copy for Trace<T>
Any trace of a Copy type implements Copy
Auto Trait Implementations
impl<T> RefUnwindSafe for Trace<T> where
T: RefUnwindSafe,
impl<T> Send for Trace<T> where
T: Send,
impl<T> Sync for Trace<T> where
T: Sync,
impl<T> Unpin for Trace<T> where
T: Unpin,
impl<T> UnwindSafe for Trace<T> where
T: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<'_, T> Pow<&'_ Trace<T>> for T where
T: Numeric + Real + Primitive,
&'a T: for<'a> NumericRef<T>,
&'a T: for<'a> RealRef<T>,
impl<'_, T> Pow<&'_ Trace<T>> for T where
T: Numeric + Real + Primitive,
&'a T: for<'a> NumericRef<T>,
&'a T: for<'a> RealRef<T>,
sourceimpl<'_, T> Pow<&'_ Trace<T>> for T where
T: Numeric + Real + Primitive,
&'a T: for<'a> NumericRef<T>,
&'a T: for<'a> RealRef<T>,
impl<'_, T> Pow<&'_ Trace<T>> for T where
T: Numeric + Real + Primitive,
&'a T: for<'a> NumericRef<T>,
&'a T: for<'a> RealRef<T>,
sourceimpl<T> Pow<Trace<T>> for T where
T: Numeric + Real + Primitive,
&'a T: for<'a> NumericRef<T>,
&'a T: for<'a> RealRef<T>,
impl<T> Pow<Trace<T>> for T where
T: Numeric + Real + Primitive,
&'a T: for<'a> NumericRef<T>,
&'a T: for<'a> RealRef<T>,
sourceimpl<T> Pow<Trace<T>> for T where
T: Numeric + Real + Primitive,
&'a T: for<'a> NumericRef<T>,
&'a T: for<'a> RealRef<T>,
impl<T> Pow<Trace<T>> for T where
T: Numeric + Real + Primitive,
&'a T: for<'a> NumericRef<T>,
&'a T: for<'a> RealRef<T>,
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcepub fn to_owned(&self) -> T
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
sourcepub fn clone_into(&self, target: &mut T)
pub fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more