use std::time::Duration;
use thousands::Separable;
pub use crate::core::math::MAD_SCALE;
pub use crate::core::math::sparse::{
CompressedSparseData2, CompressedSparseFormat, LanczosParams, SparseAxis, SparseFromDense,
parse_compressed_sparse_format,
};
pub use crate::errors::*;
pub use crate::utils::heap_structures::RevOrderedFloat;
pub use crate::utils::matrix_utils::*;
pub use crate::utils::simd::BixverseSimd;
pub use crate::utils::traits::*;
pub use crate::utils::vec_utils::*;
pub use crate::{assert_nrows, assert_same_len, assert_symmetric_mat};
const PROGRESS_STEP_PCT: usize = 10;
pub use bixverse_sparse::verbosity::{Verbosity, parse_verbosity_level};
pub fn report_decile_progress(
done: usize,
prev_done: usize,
total: usize,
unit: &str,
elapsed: Duration,
) {
if total == 0 {
return;
}
let pct = done * 100 / total;
let prev_pct = prev_done * 100 / total;
if pct / PROGRESS_STEP_PCT > prev_pct / PROGRESS_STEP_PCT || done == total {
println!(
" Progress: {pct}% ({} / {} {unit}, {elapsed:.2?})",
done.separate_with_underscores(),
total.separate_with_underscores()
);
}
}