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;
#[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()
}
}
#[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()
}
}
#[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()
}
}
#[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(),
}
}
#[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(),
}
}