#![cfg(feature = "nalgebra")]
use nalgebra::SMatrix;
use num_dual::*;
fn f<D: DualNum>(x: D, y: D) -> D {
x.powi(3) * y.powi(2)
}
#[test]
fn main() {
let (x, y) = (5.0, 4.0);
let x_dual = Dual64::from(x).derivative();
let y_dual = Dual64::from(y);
println!("{}", f(x_dual, y_dual));
let (_, df) = first_derivative(|x| f(x, y.into()), x);
println!("{df}");
let (value, grad) = gradient(|v| f(v[0], v[1]), &SMatrix::from([x, y]));
println!("{value} {grad}");
let (_, _, hess) = hessian(|v| f(v[0], v[1]), &SMatrix::from([x, y]));
println!("{hess}");
let (_, _, _, d3f) = third_derivative(|t| f(t.cos(), t.sin()), 1.0);
println!("{d3f}"); }