einsum_rrule

Function einsum_rrule 

Source
pub fn einsum_rrule<Alg, Backend>(
    ctx: &mut BackendContext<Alg, Backend>,
    subscripts: &str,
    operands: &[&Tensor<Alg::Scalar>],
    cotangent: &Tensor<Alg::Scalar>,
) -> Result<Vec<Tensor<Alg::Scalar>>>
where Alg: Semiring, Alg::Scalar: Scalar + Conjugate + HasAlgebra<Algebra = Alg>, Backend: EinsumBackend<Alg>, BackendContext<Alg, Backend>: TensorTempPoolContext,
Expand description

Reverse-mode rule (rrule) for einsum without building a global tape.

§Examples

use tenferro_algebra::Standard;
use tenferro_einsum::einsum_rrule;
use tenferro_prims::{CpuBackend, CpuContext};

let mut ctx = CpuContext::new(1);
let grads = einsum_rrule::<Standard<f64>, CpuBackend>(&mut ctx, "ij,jk->ik", &[&a, &b], &dc)
    .unwrap();
assert_eq!(grads.len(), 2);