use std::path::PathBuf;
use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(version)]
#[command(propagate_version = true)]
pub struct Cli {
#[command(subcommand)]
pub command: Option<Commands>,
}
#[derive(Subcommand)]
pub enum Commands {
Fit {
#[arg(long = "log-likelihoods", required = true, help_heading = "Input", help = "Tab-separated `n_observations x n_categories` log-likelihood matrix file.")]
logl_path: PathBuf,
#[arg(long = "weights", required = true, help_heading = "Input", help = "File with `n_observations` lines containing weights for each row of `--log-likelihood`.")]
weights_path: PathBuf,
#[arg(long = "device", required = false, help = "Which backend to run on (default: NdArray with 64 bit floats on CPU).")]
device: Option<mixt::BurnBackend>,
#[arg(long = "algorithm", required = false, help = "Optimizer algorithm to use (default: rcg)")]
algorithm: Option<mixt::optimizer::Algorithm>,
#[arg(long = "tolerance", default_value_t = 1e-7, help_heading = "RCG parameters", help = "Tolerance when checking for convergence in RCG.")]
tolerance: f64,
#[arg(long = "max-iters", default_value_t = 100, help_heading = "RCG parameters", help = "Maximum number of iterations to run RCG for.")]
max_iters: usize,
#[arg(short = 't', long = "threads", default_value_t = 1)]
num_threads: usize,
#[arg(long = "verbose", default_value_t = false)]
verbose: bool,
},
}