Function

Trait Function 

Source
pub trait Function<C: Context>: Node {
    type Value: Buffer;
    type Error: Error;

    // Required method
    fn evaluate<CR: AsRef<C>>(&self, ctx: CR) -> AegirResult<Self, C>;

    // Provided methods
    fn evaluate_spec<CR: AsRef<C>>(
        &self,
        ctx: CR,
    ) -> Result<Spec<Self::Value>, Self::Error> { ... }
    fn evaluate_shape<CR: AsRef<C>>(
        &self,
        ctx: CR,
    ) -> Result<ShapeOf<Self::Value>, Self::Error> { ... }
}
Expand description

Trait for operator Nodes that can be evaluated against a Context.

Required Associated Types§

Source

type Value: Buffer

The codomain of the function.

Source

type Error: Error

The error type of the function.

Required Methods§

Source

fn evaluate<CR: AsRef<C>>(&self, ctx: CR) -> AegirResult<Self, C>

Evaluate the function and return its Value.

§Examples
let x = X.into_var();

assert_eq!(x.evaluate(ctx!{X = 1.0}).unwrap(), 1.0);

Provided Methods§

Source

fn evaluate_spec<CR: AsRef<C>>( &self, ctx: CR, ) -> Result<Spec<Self::Value>, Self::Error>

Evaluate the function and return its lifted Value.

§Examples
let x = X.into_var().adjoint(X);
let jx = X.into_var().adjoint(X);

assert_eq!(jx.evaluate_spec(ctx!{X = [1.0, 2.0]}).unwrap(), Spec::Diagonal(S2, 1.0));
Source

fn evaluate_shape<CR: AsRef<C>>( &self, ctx: CR, ) -> Result<ShapeOf<Self::Value>, Self::Error>

Evaluate the function and return the shape of the Value.

Note: by default, this method performs a full evaluation and calls the shape method on the buffer. This should be overridden in your implementation for better efficiency.

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<C, F, L, LV, R, RV, OS, OC, OV> Function<C> for Mul<L, R>
where C: Context, F: Scalar, L: Function<C, Value = LV>, LV: Buffer<Field = F> + ZipMap<RV, Output<F> = OV>, LV::Shape: Broadcast<RV::Shape, Shape = OV::Shape>, R: Function<C, Value = RV>, RV: Buffer<Field = F> + ZipMap<LV, Output<F> = OV>, RV::Shape: Broadcast<LV::Shape, Shape = OV::Shape>, OS: Shape, OC: Class<OS, Buffer<F> = OV>, OV: Buffer<Field = F, Class = OC, Shape = OS>,

Source§

type Error = BinaryError<<L as Function<C>>::Error, <R as Function<C>>::Error, IncompatibleShapes<<<L as Function<C>>::Value as Shaped>::Shape, <<R as Function<C>>::Value as Shaped>::Shape>>

Source§

type Value = OV

Source§

impl<C, F, L, LV, R, RV, OV> Function<C> for Add<L, R>
where C: Context, F: Scalar, L: Function<C, Value = LV>, LV: Buffer<Field = F> + ZipMap<RV, Output<F> = OV>, LV::Shape: Broadcast<RV::Shape, Shape = OV::Shape>, R: Function<C, Value = RV>, RV: Buffer<Field = F> + ZipMap<LV, Output<F> = OV>, RV::Shape: Broadcast<LV::Shape, Shape = OV::Shape>, OV: Buffer<Field = F>,

Source§

type Error = BinaryError<<L as Function<C>>::Error, <R as Function<C>>::Error, IncompatibleShapes<<<L as Function<C>>::Value as Shaped>::Shape, <<R as Function<C>>::Value as Shaped>::Shape>>

Source§

type Value = OV

Source§

impl<C, F, L, LV, R, RV, OV> Function<C> for Div<L, R>
where C: Context, F: Scalar, L: Function<C, Value = LV>, LV: Buffer<Field = F> + ZipMap<RV, Output<F> = OV>, LV::Shape: Broadcast<RV::Shape, Shape = OV::Shape>, R: Function<C, Value = RV>, RV: Buffer<Field = F> + ZipMap<LV, Output<F> = OV>, RV::Shape: Broadcast<LV::Shape, Shape = OV::Shape>, OV: Buffer<Field = F>,

Source§

type Error = BinaryError<<L as Function<C>>::Error, <R as Function<C>>::Error, IncompatibleShapes<<<L as Function<C>>::Value as Shaped>::Shape, <<R as Function<C>>::Value as Shaped>::Shape>>

Source§

type Value = OV

Source§

impl<C, F, L, LV, R, RV, OV> Function<C> for Sub<L, R>
where C: Context, F: Scalar + Neg<Output = F>, L: Function<C, Value = LV>, LV: Buffer<Field = F> + ZipMap<RV, Output<F> = OV>, LV::Shape: Broadcast<RV::Shape, Shape = OV::Shape>, R: Function<C, Value = RV>, RV: Buffer<Field = F>, OV: Buffer<Field = F>,

Source§

type Error = BinaryError<<L as Function<C>>::Error, <R as Function<C>>::Error, IncompatibleShapes<<<L as Function<C>>::Value as Shaped>::Shape, <<R as Function<C>>::Value as Shaped>::Shape>>

Source§

type Value = OV

Source§

impl<C, I> Function<C> for Variable<I>
where C: Read<I>, I: Identifier,

Source§

impl<C, L, R, const AXES: usize> Function<C> for Contract<AXES, L, R>
where C: Context, L: Function<C>, R: Function<C>, L::Value: CTrait<R::Value, AXES>, R::Value: Buffer<Field = FieldOf<L::Value>>,

Source§

type Error = BinaryError<<L as Function<C>>::Error, <R as Function<C>>::Error, IncompatibleShapes<<<L as Function<C>>::Value as Shaped>::Shape, <<R as Function<C>>::Value as Shaped>::Shape>>

Source§

type Value = <<L as Function<C>>::Value as Contract<<R as Function<C>>::Value, AXES>>::Output

Source§

impl<C, N, F> Function<C> for DiGamma<N>
where C: Context, N: Function<C>, F: Scalar + FloatSpecial, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Erf<N>
where C: Context, N: Function<C>, F: Scalar + FloatSpecial, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Gamma<N>
where C: Context, N: Function<C>, F: Scalar + FloatSpecial, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for LogGamma<N>
where C: Context, N: Function<C>, F: Scalar + FloatSpecial, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Abs<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for AddOne<N>
where C: Context, N: Function<C>, F: Scalar + Scalar, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Dirac<N>
where C: Context, N: Function<C>, F: Scalar + Float, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Double<N>
where C: Context, N: Function<C>, F: Scalar + Scalar, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Exp<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Ln<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Negate<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for OneSub<N>
where C: Context, N: Function<C>, F: Scalar + Scalar, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Rabbit<N>
where C: Context, N: Function<C>, F: Scalar, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Sigmoid<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Sign<N>
where C: Context, N: Function<C>, F: Scalar + Float, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Square<N>
where C: Context, N: Function<C>, F: Scalar + Pow<F, Output = F>, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for SubOne<N>
where C: Context, N: Function<C>, F: Scalar + Scalar, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Sum<N>
where C: Context, N: Function<C>, F: Scalar + FromPrimitive, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = F

Source§

impl<C, N, F> Function<C> for XLnX<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for ArcCos<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for ArcCosh<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for ArcSin<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for ArcSinh<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for ArcTan<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for ArcTanh<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Cos<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Cosh<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Sin<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Sinh<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Tan<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, N, F> Function<C> for Tanh<N>
where C: Context, N: Function<C>, F: Scalar + Real, N::Value: Buffer<Field = F>,

Source§

type Error = <N as Function<C>>::Error

Source§

type Value = <N as Function<C>>::Value

Source§

impl<C, S> Function<C> for Constant<S>
where C: Context, S: Clone + Shaped + IntoSpec, S::Buffer: Shaped<Shape = S::Shape>,

Source§

impl<F, C, N, E> Function<C> for Power<N, E>
where F: Scalar + Pow<F, Output = F>, C: Context, N: Function<C, Value = F>, E: Function<C, Value = F>,

Source§

type Error = BinaryError<<N as Function<C>>::Error, <E as Function<C>>::Error, NoError>

Source§

type Value = <N as Function<C>>::Value

Source§

impl<I, T, C, F, SI, CI, ST, CT, SA, CA> Function<C> for VariableAdjoint<I, T>
where I: Identifier + PartialEq<T>, T: Identifier, C: Read<I> + Read<T>, F: Scalar, SI: Concat<SI> + Concat<ST, Shape = SA>, ST: Shape, SA: Shape, CI: Class<SI>, CT: Class<ST>, CA: Class<SA>, Prec: Precedence<CI, CT, Class = CA>, <C as Read<I>>::Buffer: Buffer<Class = CI, Shape = SI, Field = F>, <C as Read<T>>::Buffer: Buffer<Class = CT, Shape = ST, Field = F>, <CA as Class<SA>>::Buffer<F>: Buffer<Shape = SA>,

Source§

impl<N, T, C, F, SN, CN, ST, CT, SA, CA> Function<C> for ConstantAdjoint<N, T>
where F: Scalar, SN: Concat<ST, Shape = SA>, ST: Shape, SA: Shape, CN: Class<SN>, CT: Class<ST>, CA: Class<SA>, Prec: Precedence<CN, CT, Class = CA>, N: Function<C>, N::Value: Buffer<Field = F, Shape = SN, Class = CN>, T: Identifier, C: Read<T>, C::Buffer: Buffer<Field = F, Shape = ST, Class = CT>, <CA as Class<SA>>::Buffer<F>: Buffer<Shape = SA>,

Source§

type Error = BinaryError<<N as Function<C>>::Error, SourceError<T>, NoError>

Source§

type Value = <CA as Class<SA>>::Buffer<F>