///|
/// Compact diagnostic exports used by CI benchmark artifacts.
pub fn diagnostic_report_header() -> String {
"total,inliers,outliers,inlier_ratio,mean_inlier,rms,maximum,label"
}
///|
pub fn diagnostic_report_csv_full(report : DiagnosticReport) -> String {
report.total.to_string() +
"," +
report.inliers.to_string() +
"," +
report.outliers.to_string() +
"," +
report.inlier_ratio.to_string() +
"," +
report.mean_inlier.to_string() +
"," +
report.rms.to_string() +
"," +
report.maximum.to_string() +
"," +
report.label
}
///|
pub fn diagnostic_report_json_full(report : DiagnosticReport) -> String {
"{\"total\":" +
report.total.to_string() +
",\"inliers\":" +
report.inliers.to_string() +
",\"outliers\":" +
report.outliers.to_string() +
",\"ratio\":" +
report.inlier_ratio.to_string() +
",\"rms\":" +
report.rms.to_string() +
",\"label\":\"" +
report.label +
"\"}"
}
///|
pub fn diagnostic_report_error_ratio(report : DiagnosticReport) -> Double {
if report.total <= 0 {
0.0
} else {
report.outliers.to_double() / report.total.to_double()
}
}
///|
pub fn diagnostic_report_signal_to_error(report : DiagnosticReport) -> Double {
report.inlier_ratio / (1.0 + diagnostic_report_error_ratio(report))
}
///|
pub fn diagnostic_report_acceptable(
report : DiagnosticReport,
minimum_ratio : Double,
maximum_rms : Double,
) -> Bool {
report.inlier_ratio >= minimum_ratio && report.rms <= maximum_rms
}
///|
pub fn diagnostic_report_margin(
report : DiagnosticReport,
minimum_ratio : Double,
maximum_rms : Double,
) -> Double {
(report.inlier_ratio - minimum_ratio).min(maximum_rms - report.rms)
}
///|
pub fn diagnostic_report_health(
report : DiagnosticReport,
minimum_ratio : Double,
maximum_rms : Double,
) -> Double {
let ratio = (report.inlier_ratio / minimum_ratio.max(0.000000000001)).min(1.0)
let rms = (maximum_rms / report.rms.max(0.000000000001)).min(1.0)
ratio * rms
}
///|
pub fn diagnostic_report_health_label(
report : DiagnosticReport,
minimum_ratio : Double,
maximum_rms : Double,
) -> String {
let health = diagnostic_report_health(report, minimum_ratio, maximum_rms)
if health >= 0.8 {
"healthy"
} else if health >= 0.5 {
"degraded"
} else {
"failed"
}
}
///|
pub fn diagnostic_reports_csv(reports : ArrayView[DiagnosticReport]) -> String {
let mut result = diagnostic_report_header()
for report in reports {
result += "\n" + diagnostic_report_csv_full(report)
}
result
}
///|
pub fn diagnostic_reports_json(reports : ArrayView[DiagnosticReport]) -> String {
let mut result = "["
for i in 0.. 0 {
result += ","
}
result += diagnostic_report_json_full(reports[i])
}
result + "]"
}