libitofin 0.41.0

A ground-up Rust port of QuantLib: quantitative-finance primitives for pricing, risk, and numerical methods.
Documentation
use libitofin::math::statistics::SequenceStatistics;

fn main() -> libitofin::errors::QlResult<()> {
    let mut statistics = SequenceStatistics::new(2)?;
    statistics.add_weighted(&[1.0, 4.0], 1.0)?;
    statistics.add_weighted(&[3.0, 2.0], 3.0)?;
    statistics.add_weighted(&[100.0, -20.0], 0.0)?;
    let mean = statistics.mean()?;
    let covariance = statistics.covariance()?;
    let correlation = statistics.correlation()?;
    let maximum = statistics.max()?;
    assert_eq!(mean, [2.5, 2.5]);
    for (actual, expected) in covariance.iter().zip([1.125, -1.125, -1.125, 1.125]) {
        assert!((actual - expected).abs() < 1e-12);
    }
    for (actual, expected) in correlation.iter().zip([1.0, -1.0, -1.0, 1.0]) {
        assert!((actual - expected).abs() < 1e-12);
    }
    assert_eq!(maximum, [100.0, 4.0]);
    println!("mean: {mean:?}");
    println!("covariance: {covariance:?}");
    println!("correlation: {correlation:?}");
    println!("maximum: {maximum:?}");
    Ok(())
}