rsdiff_core/ops/traits/
evaluate.rs1use crate::ops::{Operator, Params};
6
7pub trait Evaluate<Args>
8where
9 Self: Operator,
10 Args: Params,
11{
12 type Output;
13
14 fn eval(&self, args: Args) -> Self::Output;
15}
16
17pub trait Differentiable<Args>
18where
19 Self: Evaluate<Args>,
20 Args: Params,
21{
22 type Grad;
23
24 fn grad(&self, args: Args) -> Self::Grad;
25}
26
27pub trait FnArgs {
28 type Kind;
29}
30
31pub struct Partial<T, F> {
32 pub args: T,
33 pub func: F,
34}
35
36impl<T, F> Partial<T, F>
37where
38 F: for<'a> Fn(&'a T) -> T,
39{
40 pub fn new(args: T, func: F) -> Self {
41 Self { args, func }
42 }
43}