use crate::classification::curves::roc_curve;
use crate::visualization::roc_curve::roc_curve_visualization;
use crate::visualization::MetricVisualizer;
use scirs2_core::ndarray::{Array, Ix1, IxDyn};
use std::error::Error;
#[allow(dead_code)]
pub fn neural_roc_curve_visualization<F: scirs2_core::numeric::Float + std::fmt::Debug>(
y_true: &Array<F, IxDyn>,
y_pred: &Array<F, IxDyn>,
auc: Option<f64>,
) -> Result<Box<dyn MetricVisualizer>, Box<dyn Error>> {
let y_true_f64 = y_true
.clone()
.mapv(|x| x.to_f64().unwrap_or(0.0))
.into_dimensionality::<Ix1>()?;
let y_pred_f64 = y_pred
.clone()
.mapv(|x| x.to_f64().unwrap_or(0.0))
.into_dimensionality::<Ix1>()?;
let (fpr, tpr, thresholds) = roc_curve(&y_true_f64, &y_pred_f64)?;
let visualizer =
roc_curve_visualization(fpr.to_vec(), tpr.to_vec(), Some(thresholds.to_vec()), auc);
Ok(Box::new(visualizer))
}