dfdx 0.13.0

Ergonomic auto differentiation in Rust, with pytorch like apis.
Documentation
use crate::tensor_ops::cpu_kernels::{BinaryDerivative, UnaryDerivative};

impl<F: num_traits::Float> UnaryDerivative<F> for super::ScalarSubKernelOp<F> {
    const DF_USES_FX: bool = false;
    const HAS_CONST_DF: bool = true;
    #[inline(always)]
    fn f(&self, &x: &F) -> F {
        x - self.scalar
    }
    #[inline(always)]
    fn df(&self, _: &F) -> F {
        F::one()
    }
    #[inline(always)]
    fn const_df(&self) -> F {
        F::one()
    }
}

impl<F: num_traits::Float> BinaryDerivative<F> for super::BinarySubKernelOp {
    const HAS_CONST_DF: bool = true;
    #[inline(always)]
    fn f(&self, &x: &F, &y: &F) -> F {
        x - y
    }
    #[inline(always)]
    fn dfdx(&self, _: &F, _: &F) -> F {
        self.const_dfdx()
    }
    #[inline(always)]
    fn dfdy(&self, _: &F, _: &F) -> F {
        self.const_dfdy()
    }
    #[inline(always)]
    fn const_dfdx(&self) -> F {
        F::one()
    }
    #[inline(always)]
    fn const_dfdy(&self) -> F {
        -F::one()
    }
}