pub mod build;
pub mod eval;
pub mod query;
pub mod summary;
pub mod validate;
use clap::Args;
use lineprior::BuildConfig;
use std::process::ExitCode;
pub fn exit_code_for_lineprior_error(err: &lineprior::Error) -> ExitCode {
match err {
lineprior::Error::NoObservations => ExitCode::from(2),
lineprior::Error::Io(_) => ExitCode::from(4),
_ => ExitCode::from(3),
}
}
#[derive(Args)]
pub struct BuildConfigArgs {
#[arg(long, default_value_t = 1)]
pub min_count: u64,
#[arg(long, default_value_t = 0.0)]
pub min_weighted_count: f64,
#[arg(long, default_value_t = 0.0)]
pub min_confidence: f64,
#[arg(long)]
pub max_step: Option<u32>,
#[arg(long, default_value_t = 5.0)]
pub smoothing_alpha: f64,
#[arg(long)]
pub max_actions_per_state: Option<usize>,
#[arg(long, default_value_t = lineprior::DEFAULT_CONFIDENCE_K)]
pub confidence_k: f64,
#[arg(long, value_delimiter = ',')]
pub tags: Vec<String>,
#[arg(long, default_value_t = lineprior::DEFAULT_DRAW_VALUE)]
pub draw_value: f64,
}
impl BuildConfigArgs {
pub fn into_build_config(self) -> BuildConfig {
BuildConfig {
min_count: self.min_count,
min_weighted_count: self.min_weighted_count,
min_confidence: self.min_confidence,
max_step: self.max_step,
smoothing_alpha: self.smoothing_alpha,
max_actions_per_state: self.max_actions_per_state,
confidence_k: self.confidence_k,
draw_value: self.draw_value,
tag_filter: if self.tags.is_empty() {
None
} else {
Some(self.tags)
},
..BuildConfig::default()
}
}
}