num-dual

Generalized, recursive, scalar and vector (hyper) dual numbers for the automatic and exact calculation of (partial) derivatives.
Usage
Add this to your Cargo.toml:
[dependencies]
num-dual = "0.1"
Example
This example defines a generic function that can be called using any (hyper) dual number and automatically calculates derivatives.
use num_dual::*;
fn f<D: DualNum<f64>>(x: D, y: D) -> D {
x.powi(3) * y.powi(2)
}
fn main() {
let (x, y) = (5.0, 4.0);
let x_dual = Dual64::from(x).derive();
let y_dual = Dual64::from(y);
println!("{}", f(x_dual, y_dual)); let xy_dual_vec = StaticVec::new_vec([x,y]).map(DualVec64::<2>::from).derive();
println!("{}", f(xy_dual_vec[0], xy_dual_vec[1]).eps); let xy_dual2 = StaticVec::new_vec([x,y]).map(Dual2Vec64::<2>::from).derive();
println!("{}", f(xy_dual2[0], xy_dual2[1]).v2); let t = Dual3_64::from(1.0).derive();
println!("{}", f(t.cos(), t.sin()).v3); }