rssn 0.2.9

A comprehensive scientific computing library for Rust, aiming for feature parity with NumPy and SymPy.
Documentation
//! Bincode-based FFI API for symbolic statistics functions.

use crate::ffi_apis::common::BincodeBuffer;
use crate::ffi_apis::common::from_bincode_buffer;
use crate::ffi_apis::common::to_bincode_buffer;
use crate::symbolic::core::Expr;
use crate::symbolic::stats;

/// Computes the symbolic mean of a set of expressions using Bincode.
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_mean(data_buf: BincodeBuffer) -> BincodeBuffer {
    let data: Option<Vec<Expr>> = from_bincode_buffer(&data_buf);

    if let Some(d) = data {
        to_bincode_buffer(&stats::mean(&d))
    } else {
        BincodeBuffer::empty()
    }
}

/// Computes the symbolic variance of a set of expressions using Bincode.
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_variance(data_buf: BincodeBuffer) -> BincodeBuffer {
    let data: Option<Vec<Expr>> = from_bincode_buffer(&data_buf);

    if let Some(d) = data {
        to_bincode_buffer(&stats::variance(&d))
    } else {
        BincodeBuffer::empty()
    }
}

/// Computes the symbolic standard deviation of a set of expressions using Bincode.
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_std_dev(data_buf: BincodeBuffer) -> BincodeBuffer {
    let data: Option<Vec<Expr>> = from_bincode_buffer(&data_buf);

    if let Some(d) = data {
        to_bincode_buffer(&stats::std_dev(&d))
    } else {
        BincodeBuffer::empty()
    }
}

/// Computes the symbolic covariance of two sets of expressions using Bincode.
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_covariance(
    data1_buf: BincodeBuffer,
    data2_buf: BincodeBuffer,
) -> BincodeBuffer {
    let data1: Option<Vec<Expr>> = from_bincode_buffer(&data1_buf);

    let data2: Option<Vec<Expr>> = from_bincode_buffer(&data2_buf);

    match (data1, data2) {
        | (Some(d1), Some(d2)) => to_bincode_buffer(&stats::covariance(&d1, &d2)),
        | _ => BincodeBuffer::empty(),
    }
}

/// Computes the symbolic Pearson correlation coefficient using Bincode.
#[unsafe(no_mangle)]
pub extern "C" fn rssn_bincode_correlation(
    data1_buf: BincodeBuffer,
    data2_buf: BincodeBuffer,
) -> BincodeBuffer {
    let data1: Option<Vec<Expr>> = from_bincode_buffer(&data1_buf);

    let data2: Option<Vec<Expr>> = from_bincode_buffer(&data2_buf);

    match (data1, data2) {
        | (Some(d1), Some(d2)) => to_bincode_buffer(&stats::correlation(&d1, &d2)),
        | _ => BincodeBuffer::empty(),
    }
}