use clap::Args;
use std::path::PathBuf;
#[derive(Debug, Args)]
pub struct ConvertArgs {
#[arg(short, long)]
pub input: PathBuf,
#[arg(short, long)]
pub output: PathBuf,
#[arg(short, long)]
pub format: String,
#[arg(long, default_value = "1")]
pub optimization_level: u8,
#[arg(long)]
pub preserve_metadata: bool,
#[arg(long, default_value = "cpu")]
pub target_device: String,
#[arg(long)]
pub verbose: bool,
}
#[derive(Debug, Args)]
pub struct OptimizeArgs {
#[arg(short, long)]
pub input: PathBuf,
#[arg(short, long)]
pub output: PathBuf,
#[arg(long, default_value = "2")]
pub level: u8,
#[arg(long, default_value = "cpu")]
pub target: String,
#[arg(long)]
pub fusion: bool,
#[arg(long)]
pub constant_folding: bool,
#[arg(long)]
pub dead_code_elimination: bool,
#[arg(long)]
pub memory_optimization: bool,
}
#[derive(Debug, Args)]
pub struct QuantizeArgs {
#[arg(short, long)]
pub input: PathBuf,
#[arg(short, long)]
pub output: PathBuf,
#[arg(short, long, default_value = "dynamic")]
pub method: String,
#[arg(long, default_value = "int8")]
pub precision: String,
#[arg(long)]
pub calibration_data: Option<PathBuf>,
#[arg(long, default_value = "100")]
pub calibration_samples: usize,
#[arg(long, default_value = "0.95")]
pub accuracy_threshold: f64,
}
#[derive(Debug, Args)]
pub struct PruneArgs {
#[arg(short, long)]
pub input: PathBuf,
#[arg(short, long)]
pub output: PathBuf,
#[arg(short, long, default_value = "magnitude")]
pub method: String,
#[arg(short, long, default_value = "0.5")]
pub sparsity: f64,
#[arg(long)]
pub structured: bool,
#[arg(long, default_value = "10")]
pub finetune_epochs: usize,
#[arg(long)]
pub validation_data: Option<PathBuf>,
}
#[derive(Debug, Args)]
pub struct InspectArgs {
#[arg(short, long)]
pub input: PathBuf,
#[arg(long)]
pub detailed: bool,
#[arg(long)]
pub stats: bool,
#[arg(long)]
pub memory: bool,
#[arg(long)]
pub complexity: bool,
#[arg(long)]
pub export: Option<PathBuf>,
}
#[derive(Debug, Args)]
pub struct ValidateArgs {
#[arg(short, long)]
pub input: PathBuf,
#[arg(short, long)]
pub dataset: PathBuf,
#[arg(short, long, default_value = "1000")]
pub samples: usize,
#[arg(long, default_value = "cpu")]
pub device: String,
#[arg(long, default_value = "32")]
pub batch_size: usize,
#[arg(long, default_value = "0.9")]
pub accuracy_threshold: f64,
}
#[derive(Debug, Args)]
pub struct BenchmarkArgs {
#[arg(short, long)]
pub input: PathBuf,
#[arg(long, default_value = "cpu")]
pub device: String,
#[arg(long, value_delimiter = ',')]
pub input_shape: Vec<usize>,
#[arg(long, value_delimiter = ',', default_values = ["1", "4", "8", "16"])]
pub batch_sizes: Vec<usize>,
#[arg(long, default_value = "10")]
pub warmup: usize,
#[arg(long, default_value = "100")]
pub iterations: usize,
#[arg(long)]
pub profile_memory: bool,
#[arg(long)]
pub export: Option<PathBuf>,
}
#[derive(Debug, Args)]
pub struct CompressArgs {
#[arg(short, long)]
pub input: PathBuf,
#[arg(short, long)]
pub output: PathBuf,
#[arg(short, long, default_value = "gzip")]
pub algorithm: String,
#[arg(long, default_value = "6")]
pub level: u8,
}
#[derive(Debug, Args)]
pub struct ExtractArgs {
#[arg(short, long)]
pub input: PathBuf,
#[arg(short = 'x', long)]
pub component: String,
#[arg(short, long)]
pub output: PathBuf,
}
#[derive(Debug, Args)]
pub struct MergeArgs {
#[arg(short, long)]
pub inputs: Vec<PathBuf>,
#[arg(short, long)]
pub output: PathBuf,
#[arg(short, long, default_value = "average")]
pub strategy: String,
#[arg(long, value_delimiter = ',')]
pub weights: Vec<f64>,
}