tensorlogic_infer/
traits.rs1use tensorlogic_ir::EinsumGraph;
4
5use crate::ops::{ElemOp, ReduceOp};
6
7pub trait TlExecutor {
12 type Tensor;
13 type Error;
14
15 fn einsum(&mut self, spec: &str, inputs: &[Self::Tensor]) -> Result<Self::Tensor, Self::Error>;
17
18 fn elem_op(&mut self, op: ElemOp, x: &Self::Tensor) -> Result<Self::Tensor, Self::Error>;
20
21 fn elem_op_binary(
23 &mut self,
24 op: ElemOp,
25 x: &Self::Tensor,
26 y: &Self::Tensor,
27 ) -> Result<Self::Tensor, Self::Error>;
28
29 fn reduce(
31 &mut self,
32 op: ReduceOp,
33 x: &Self::Tensor,
34 axes: &[usize],
35 ) -> Result<Self::Tensor, Self::Error>;
36}
37
38pub trait TlAutodiff: TlExecutor {
42 type Tape;
43
44 fn forward(&mut self, graph: &EinsumGraph) -> Result<Self::Tensor, Self::Error>;
46
47 fn backward(
49 &mut self,
50 graph: &EinsumGraph,
51 loss: &Self::Tensor,
52 ) -> Result<Self::Tape, Self::Error>;
53}