use mgrad::nn;
fn main() {
let x = nn::variable(1);
let y = nn::variable(2);
let m = &x + &y;
let z = &m.sin() + &m.cos();
z.abs().backward(1);
let mut g = nn::Graph::from_trace(&z).unwrap();
println!("{}", g.to_graphviz());
let z_value_record = z.value;
let step = 1e-3;
g.apply_grad(-step);
g.forward();
assert!(z.value.abs() < z_value_record.abs());
}