1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
//! Eligibility trace types.
use std::ops::{Deref, DerefMut};

pub trait Trace<G: crate::linalg::MatrixLike>: Deref<Target = G> + DerefMut {
    fn update(&mut self, grad: &G);

    fn scale(&mut self, factor: f64) { self.map_inplace(|g| g * factor); }

    fn scaled_update(&mut self, factor: f64, grad: &G) {
        self.scale(factor);
        self.update(grad);
    }

    fn reset(&mut self) { self.scale(0.0) }
}

import_all!(accumulating);
import_all!(dutch);
import_all!(replacing);