Force progress bar to output to stderr even when not a terminal
This commit is contained in:
parent
9893657bb0
commit
f6f44c64ab
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -312,6 +312,7 @@ name = "hpstat"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"console",
|
||||
"indicatif",
|
||||
"nalgebra",
|
||||
"prettytable-rs",
|
||||
|
@ -5,6 +5,7 @@ edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
clap = { version = "4.2.1", features = ["derive"] }
|
||||
console = "0.15.5"
|
||||
indicatif = {version = "0.17.3", features = ["rayon"]}
|
||||
nalgebra = "0.32.2"
|
||||
prettytable-rs = "0.10.0"
|
||||
|
@ -20,12 +20,14 @@ use std::fs;
|
||||
use std::io;
|
||||
|
||||
use clap::{Args, ValueEnum};
|
||||
use indicatif::{ParallelProgressIterator, ProgressBar, ProgressStyle};
|
||||
use indicatif::{ParallelProgressIterator, ProgressBar, ProgressDrawTarget, ProgressStyle};
|
||||
use nalgebra::{DMatrix, DVector, Matrix1xX};
|
||||
use prettytable::{Table, format, row};
|
||||
use rayon::prelude::*;
|
||||
use serde::{Serialize, Deserialize};
|
||||
|
||||
use crate::term::UnconditionalTermLike;
|
||||
|
||||
#[derive(Args)]
|
||||
pub struct IntCoxArgs {
|
||||
/// Path to CSV input file containing the observations
|
||||
@ -98,10 +100,7 @@ pub fn main(args: IntCoxArgs) {
|
||||
}
|
||||
|
||||
// Fit regression
|
||||
let progress_bar = match args.output {
|
||||
OutputFormat::Text => ProgressBar::new(0),
|
||||
OutputFormat::Json => ProgressBar::hidden(),
|
||||
};
|
||||
let progress_bar = ProgressBar::with_draw_target(Some(0), ProgressDrawTarget::term_like(Box::new(UnconditionalTermLike::stderr())));
|
||||
let result = fit_interval_censored_cox(data_times, data_indep, args.max_iterations, args.tolerance, args.reduced, progress_bar);
|
||||
|
||||
// Display output
|
||||
|
@ -1 +1,3 @@
|
||||
pub mod intcox;
|
||||
|
||||
mod term;
|
||||
|
74
src/term.rs
Normal file
74
src/term.rs
Normal file
@ -0,0 +1,74 @@
|
||||
// hpstat: High-performance statistics implementations
|
||||
// Copyright © 2023 Lee Yingtong Li (RunasSudo)
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
use std::io;
|
||||
|
||||
use console::Term;
|
||||
use indicatif::TermLike;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct UnconditionalTermLike {
|
||||
term: Term
|
||||
}
|
||||
|
||||
impl UnconditionalTermLike {
|
||||
//pub fn new(term: Term) -> UnconditionalTermLike {
|
||||
// return UnconditionalTermLike { term: term };
|
||||
//}
|
||||
|
||||
pub fn stderr() -> UnconditionalTermLike {
|
||||
return UnconditionalTermLike { term: Term::stderr() };
|
||||
}
|
||||
}
|
||||
|
||||
impl TermLike for UnconditionalTermLike {
|
||||
fn width(&self) -> u16 {
|
||||
return self.term.width();
|
||||
}
|
||||
|
||||
fn move_cursor_up(&self, n: usize) -> io::Result<()> {
|
||||
return self.term.move_cursor_up(n);
|
||||
}
|
||||
|
||||
fn move_cursor_down(&self, n: usize) -> io::Result<()> {
|
||||
return self.term.move_cursor_down(n);
|
||||
}
|
||||
|
||||
fn move_cursor_right(&self, n: usize) -> io::Result<()> {
|
||||
return self.term.move_cursor_right(n);
|
||||
}
|
||||
|
||||
fn move_cursor_left(&self, n: usize) -> io::Result<()> {
|
||||
return self.term.move_cursor_left(n);
|
||||
}
|
||||
|
||||
fn write_line(&self, s: &str) -> io::Result<()> {
|
||||
return self.term.write_line(s);
|
||||
}
|
||||
|
||||
fn write_str(&self, s: &str) -> io::Result<()> {
|
||||
return self.term.write_str(s);
|
||||
}
|
||||
|
||||
fn clear_line(&self) -> io::Result<()> {
|
||||
return self.term.clear_line();
|
||||
}
|
||||
|
||||
fn flush(&self) -> io::Result<()> {
|
||||
return self.term.flush();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user