mod build;
mod render;
pub use build::{RunDir, build_report};
pub use render::render_text;
use launchbound_bench::Summary;
use serde::{Deserialize, Serialize};
#[derive(Debug, thiserror::Error)]
pub enum ReportError {
#[error("run dir: {0}")]
RunDir(String),
#[error("report io: {0}")]
Io(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Report {
pub schema: String,
pub kernel: String,
pub gate_cc: String,
pub measurement_kind: String,
pub convergence_gate: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub device: Option<DeviceInfo>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub allow_unsafe_reason: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub chosen: Option<ChosenInfo>,
#[serde(default)]
pub indistinguishable_from_chosen: Vec<String>,
#[serde(default)]
pub rejected_faster: Vec<RejectedFaster>,
pub candidates: Vec<CandidateReport>,
pub totals: Totals,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeviceInfo {
pub name: String,
pub cc: String,
pub driver_version: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChosenInfo {
pub id: String,
pub config: String,
pub summary: Summary,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RejectedFaster {
pub id: String,
pub config: String,
pub summary: Summary,
pub speedup_vs_chosen: f64,
pub rules: Vec<RuleRef>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RuleRef {
pub rule: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub span: Option<String>,
pub reason: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CandidateReport {
pub id: String,
pub config: String,
pub verdict: String,
#[serde(default)]
pub rules: Vec<RuleRef>,
pub measurement_status: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub summary: Option<Summary>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub measurement_error: Option<String>,
pub gpu_seconds: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Totals {
pub candidates: usize,
pub admitted: usize,
pub refused: usize,
pub measured_ok: usize,
pub gpu_seconds: f64,
}