mod calc;
mod errors;
mod file;
mod matrix;
pub mod r;
mod transform;
use rayon::prelude::*;
pub use crate::{calc::*, errors::*, file::*, matrix::*, transform::*};
pub fn convert_file(
from: &str,
to: &str,
item_type: TransitoryType,
) -> Result<(), ConvertFileError> {
let from: File = from.parse()?;
let to: File = to.parse()?;
let mat = from.read_transitory(item_type)?;
to.write_transitory(&mat)?;
Ok(())
}
pub fn calculate_r2<'a>(
data: impl Transform<'a>,
outcomes: impl Transform<'a>,
) -> Result<Vec<R2>, ReadMatrixError> {
let data = data.transform()?;
let outcomes = outcomes.transform()?;
let data = data.as_mat_ref()?;
let outcomes = outcomes.as_mat_ref()?;
Ok(get_r2s(data, outcomes))
}
pub fn calculate_r2s<'a>(
data: Vec<impl Transform<'a> + Send>,
outcomes: impl Transform<'a>,
) -> Result<Vec<R2>, ReadMatrixError> {
let outcomes = outcomes.transform()?;
let outcomes = outcomes.as_mat_ref()?;
let data = data
.into_iter()
.map(|i| i.make_parallel_safe())
.collect::<Result<Vec<_>, _>>()?;
Ok(data
.into_par_iter()
.map(|i| {
let i = i.transform()?;
let i = i.as_mat_ref()?;
Ok(get_r2s(i, outcomes).into_iter())
})
.collect::<Result<Vec<_>, ReadMatrixError>>()?
.into_iter()
.flatten()
.collect())
}