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);