use std::time::Instant;
use crate::methods::nmf_hals::*;
use crate::prelude::*;
use crate::single_cell::sc_analysis::nmf_sc::{nmf_multiple_run_sparse, nmf_single_run_sparse};
#[allow(clippy::too_many_arguments)]
pub fn nmf_single_run_mc(
data: CompressedSparseData2<f32>,
k: usize,
preprocessing: &str,
use_second_layer: bool,
nmf_hals_params: Option<HalsOpts<f32>>,
verbose: usize,
) -> Result<NmfResult<f32>, BixverseErrors> {
let start_total = Instant::now();
let verbosity = parse_verbosity_level(verbose);
let data = if data.cs_type.is_csr() {
if verbosity.detailed_verbosity() {
println!("NMF: meta cell data was provided as CSR. Transposing to CSC.")
}
data.transform()
} else {
data
};
if verbosity.normal_verbosity() {
println!("NMF: Running NMF for metacells cells ...")
}
let res = nmf_single_run_sparse(
data,
k,
preprocessing,
use_second_layer,
nmf_hals_params,
verbose,
)?;
if verbosity.normal_verbosity() {
println!(" ... done in {:.2?}", start_total.elapsed())
}
Ok(res)
}
#[allow(clippy::too_many_arguments)]
pub fn nmf_multiple_run_mc(
data: CompressedSparseData2<f32>,
k: usize,
preprocessing: &str,
use_second_layer: bool,
nmf_hals_params: Option<HalsOpts<f32>>,
n_runs: usize,
base_seed: usize,
verbose: usize,
) -> Result<StabilisedNmfResult<f32>, BixverseErrors> {
let verbosity = parse_verbosity_level(verbose);
let start_total = Instant::now();
let data = if data.cs_type.is_csr() {
if verbosity.detailed_verbosity() {
println!("NMF: meta cell data was provided as CSR. Transposing to CSC.")
}
data.transform()
} else {
data
};
if verbosity.normal_verbosity() {
println!("NMF: Running multiple NMF runs for meta cells ...")
}
let res = nmf_multiple_run_sparse(
data,
k,
preprocessing,
use_second_layer,
nmf_hals_params,
n_runs,
base_seed,
verbose,
)?;
if verbosity.normal_verbosity() {
println!(" ... done in {:.2?}", start_total.elapsed())
}
Ok(res)
}