use std::path::PathBuf;
use clap::Parser;
use super::{InputFormat, version_string};
#[derive(Parser)]
#[command(
name = "holos persistent-class",
version = version_string(),
about = "Build a checked persistent H1 class artifact",
after_help = "OUTPUT is a HOLOSPC artifact. Check it with: holos-check OUTPUT"
)]
pub(crate) struct PersistentClassCli {
pub(crate) input: PathBuf,
pub(crate) output: PathBuf,
#[arg(long, value_name = "N")]
pub(crate) space: usize,
#[arg(long, value_name = "N")]
pub(crate) basis: usize,
#[arg(long, value_name = "P", default_value_t = 47)]
pub(crate) modulus: u32,
#[arg(long, value_name = "T")]
pub(crate) threshold: Option<f64>,
#[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_artifact_bytes: usize,
#[arg(long, value_name = "FILE")]
pub(crate) record: Option<PathBuf>,
}
#[derive(Parser)]
#[command(
name = "holos persistent-circular",
version = version_string(),
about = "Build a checked circular coordinate for one persistent H1 class",
after_help = "OUTPUT is a HOLOSPH artifact. Check it with: holos-check OUTPUT"
)]
pub(crate) struct PersistentCircularCli {
pub(crate) input: PathBuf,
pub(crate) output: PathBuf,
#[arg(long, value_name = "N")]
pub(crate) space: usize,
#[arg(long, value_name = "N")]
pub(crate) basis: usize,
#[arg(long, value_name = "P", default_value_t = 47)]
pub(crate) modulus: u32,
#[arg(long, value_name = "T")]
pub(crate) threshold: Option<f64>,
#[arg(long = "integral-lift", value_name = "FILE")]
pub(crate) integral_lift: Option<PathBuf>,
#[arg(long, value_name = "FILE")]
pub(crate) 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_name = "BYTES", default_value_t = 1usize << 30)]
pub(crate) max_artifact_bytes: 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 = "FILE")]
pub(crate) record: Option<PathBuf>,
}