use std::time::Duration;
use thousands::Separable;
pub use crate::core::math::MAD_SCALE;
pub use crate::core::math::sparse::{
CompressedSparseData2, CompressedSparseFormat, LanczosParams, SparseAxis,
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;
#[derive(Clone, Copy, Debug, Default)]
pub enum Verbosity {
#[default]
Quiet,
Normal,
Detailed,
}
impl Verbosity {
pub fn normal_verbosity(&self) -> bool {
matches!(self, Verbosity::Normal | Verbosity::Detailed)
}
pub fn detailed_verbosity(&self) -> bool {
matches!(self, Verbosity::Detailed)
}
}
pub fn parse_verbosity_level(level: usize) -> Verbosity {
match level {
0 => Verbosity::Quiet,
1 => Verbosity::Normal,
2 => Verbosity::Detailed,
_ => Verbosity::Quiet,
}
}
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()
);
}
}