use crate::prelude::*;
pub mod apl;
pub mod cox_reid;
pub mod estimate;
pub(crate) fn filter_by_min_row_sum<T: EdgeFloat>(
counts: &[T],
n_genes: usize,
n_samples: usize,
min_row_sum: f64,
) -> Result<Vec<usize>, EdgeErrors> {
let kept: Vec<usize> = counts
.chunks_exact(n_samples)
.enumerate()
.filter(|(_, row)| {
row.iter().map(|v| v.to_f64().unwrap_or(0.0)).sum::<f64>() >= min_row_sum
})
.map(|(gene, _)| gene)
.collect();
if kept.is_empty() {
return Err(EdgeErrors::NoGenesAfterFiltering { n_genes });
}
Ok(kept)
}