use std::path::PathBuf;
use clap::Parser;
use super::{InputFormat, version_string};
#[derive(Parser)]
#[command(
name = "holos intervene-cohomology",
version = version_string(),
about = "Certify a minimum-cost fixed-scale cohomology intervention",
after_help = "Check the result with: holos-check ARTIFACT"
)]
pub(crate) struct CohomologyInterventionCli {
pub(crate) input: PathBuf,
pub(crate) output: 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 = "N")]
pub(crate) target: usize,
#[arg(long = "candidate", value_names = ["U", "V", "COST"], num_args = 3)]
pub(crate) candidates: Vec<usize>,
#[arg(long, value_name = "N")]
pub(crate) max_edits: usize,
#[arg(long, value_name = "N", default_value_t = 1_000_000)]
pub(crate) oracle_limit: usize,
#[arg(long, value_name = "N", default_value_t = 1_000_000)]
pub(crate) node_limit: 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 plan-links",
version = version_string(),
about = "Plan one minimum-cost link set across network scenarios",
after_help = "Check the result with: holos-check ARTIFACT"
)]
pub(crate) struct LinkPlanCli {
pub(crate) output: PathBuf,
#[arg(long = "scenario", value_name = "GRAPH", required = true)]
pub(crate) scenarios: Vec<PathBuf>,
#[arg(long = "target", value_name = "N", required = true)]
pub(crate) targets: Vec<usize>,
#[arg(long, value_name = "N")]
pub(crate) vertices: usize,
#[arg(long = "at", value_name = "T")]
pub(crate) scale: f64,
#[arg(long = "homology-dim", value_name = "D")]
pub(crate) dimension: usize,
#[arg(long = "candidate", value_names = ["U", "V", "COST"], num_args = 3)]
pub(crate) candidates: Vec<usize>,
#[arg(long, value_name = "N")]
pub(crate) max_edits: usize,
#[arg(long, value_name = "N", default_value_t = 1_000_000)]
pub(crate) oracle_limit: usize,
#[arg(long, value_name = "N", default_value_t = 1_000_000)]
pub(crate) node_limit: usize,
#[arg(long, value_name = "P", default_value_t = 2)]
pub(crate) modulus: u32,
#[arg(long, value_name = "N", default_value_t = 1)]
pub(crate) threads: usize,
}
#[derive(Parser)]
#[command(
name = "holos intervene",
version = version_string(),
about = "Certify a finite H1 lifetime intervention"
)]
pub(crate) struct InterveneCli {
pub(crate) input: PathBuf,
pub(crate) program: PathBuf,
pub(crate) output: PathBuf,
#[arg(long, value_name = "N")]
pub(crate) space: usize,
#[arg(long, value_name = "T")]
pub(crate) before: f64,
#[arg(long, value_name = "N", default_value_t = 1)]
pub(crate) budget: 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_artifact_bytes: usize,
}