use std::path::PathBuf;
use clap::Parser;
use super::{InputFormat, version_string};
#[derive(Parser)]
#[command(
name = "holos cohomology",
version = version_string(),
about = "Compute canonical fixed-scale cohomology and an optional exact relation"
)]
pub(crate) struct CohomologyCli {
pub(crate) input: PathBuf,
pub(crate) other: Option<PathBuf>,
#[arg(long = "at", value_name = "T")]
pub(crate) scale: f64,
#[arg(long = "homology-dim", value_name = "D")]
pub(crate) dimension: usize,
#[arg(long, value_name = "P", default_value_t = 2)]
pub(crate) modulus: u32,
#[arg(long, value_enum)]
pub(crate) format: Option<InputFormat>,
#[arg(long, value_name = "N", default_value_t = 1)]
pub(crate) threads: usize,
}
#[derive(Parser)]
#[command(
name = "holos circular",
version = version_string(),
about = "Build and certify a class-aware circular coordinate",
after_help = "COCYCLE contains `u v coefficient` rows in Ripser orientation. With --class, it is the JSON written by --representatives. --integral-lift accepts signed `u v coefficient` rows. Automatic lifting needs an odd prime; a supplied lift also supports modulus 2 without --continue-to. Check OUTPUT with: holos-check OUTPUT"
)]
pub(crate) struct CircularCli {
pub(crate) input: PathBuf,
pub(crate) cocycle: PathBuf,
pub(crate) output: PathBuf,
#[arg(long = "at", value_name = "T")]
pub(crate) scale: Option<f64>,
#[arg(long, value_name = "P")]
pub(crate) modulus: Option<u32>,
#[arg(long = "integral-lift", value_name = "FILE")]
pub(crate) integral_lift: Option<PathBuf>,
#[arg(long, value_names = ["SPACE", "BASIS"], num_args = 2)]
pub(crate) class: Option<Vec<usize>>,
#[arg(long = "continue-to", value_name = "GRAPH")]
pub(crate) other: Option<PathBuf>,
#[arg(long, value_name = "FILE")]
pub(crate) phases: Option<PathBuf>,
#[arg(long, value_name = "FILE", requires = "other")]
pub(crate) continued_phases: Option<PathBuf>,
#[arg(long, value_name = "R", default_value_t = 1e-10)]
pub(crate) tolerance: f64,
#[arg(long, value_name = "N", default_value_t = 10_000)]
pub(crate) max_iterations: usize,
#[arg(long, value_enum)]
pub(crate) format: Option<InputFormat>,
#[arg(long, value_name = "N", default_value_t = 1)]
pub(crate) threads: usize,
#[arg(long, value_name = "BYTES", default_value_t = 1usize << 30)]
pub(crate) max_record_bytes: usize,
}
#[derive(Parser)]
#[command(
name = "holos kinetic",
version = version_string(),
about = "Certify events in an affine edge-weight trajectory"
)]
pub(crate) struct KineticCli {
pub(crate) input: PathBuf,
#[arg(long, value_name = "N")]
pub(crate) vertices: usize,
#[arg(long)]
pub(crate) start: f64,
#[arg(long)]
pub(crate) end: f64,
#[arg(long = "at", value_name = "T")]
pub(crate) scale: Option<f64>,
#[arg(long = "homology-dim", value_name = "D", requires = "scale")]
pub(crate) dimension: Option<usize>,
#[arg(long, value_name = "P", default_value_t = 2)]
pub(crate) modulus: u32,
#[arg(long, value_name = "FILE", requires = "scale", requires = "dimension")]
pub(crate) zigzag: Option<PathBuf>,
#[arg(long, value_name = "BYTES", default_value_t = 1usize << 30)]
pub(crate) max_artifact_bytes: usize,
}