///|
pub(all) struct ClassMetrics {
  class_index : Int
  support : Int
  true_positive : Int
  false_positive : Int
  false_negative : Int
  true_negative : Int
  precision : Double
  recall : Double
  specificity : Double
  f1 : Double
} derive(Eq, Debug)

///|
pub(all) struct ClassificationReport {
  accuracy : Double
  macro_precision : Double
  macro_recall : Double
  macro_f1 : Double
  weighted_precision : Double
  weighted_recall : Double
  weighted_f1 : Double
  classes : Array[ClassMetrics]
} derive(Eq, Debug)

///|
pub(all) struct RegressionReport {
  mse : Double
  mae : Double
  rmse : Double
  r2 : Double
  max_error : Double
  mean_error : Double
  explained_variance : Double
} derive(Eq, Debug)