#![allow(clippy::too_many_arguments)]
#![allow(dead_code)]
use super::core::ClassMetrics;
use crate::error::{MetricsError, Result};
use scirs2_core::ndarray::{Array1, Array2, ArrayView1, ArrayView2};
use scirs2_core::numeric::Float;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct GraphLevelMetrics {
pub classification: GraphClassificationMetrics,
pub regression: GraphRegressionMetrics,
pub property_prediction: GraphPropertyMetrics,
pub similarity_metrics: GraphSimilarityMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphClassificationMetrics {
pub accuracy: f64,
pub macro_f1: f64,
pub micro_f1: f64,
pub per_class_metrics: HashMap<String, ClassMetrics>,
pub roc_auc: Option<f64>,
pub cv_scores: Vec<f64>,
}
impl Default for GraphClassificationMetrics {
fn default() -> Self {
Self {
accuracy: 0.0,
macro_f1: 0.0,
micro_f1: 0.0,
per_class_metrics: HashMap::new(),
roc_auc: None,
cv_scores: Vec::new(),
}
}
}
impl GraphClassificationMetrics {
pub fn new() -> Self {
Self::default()
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphRegressionMetrics {
pub mse: f64,
pub rmse: f64,
pub mae: f64,
pub r2_score: f64,
pub mape: f64,
pub explained_variance: f64,
}
impl Default for GraphRegressionMetrics {
fn default() -> Self {
Self {
mse: 0.0,
rmse: 0.0,
mae: 0.0,
r2_score: 0.0,
mape: 0.0,
explained_variance: 0.0,
}
}
}
impl GraphRegressionMetrics {
pub fn new() -> Self {
Self::default()
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct GraphPropertyMetrics {
pub structural_accuracy: HashMap<String, f64>, pub spectral_accuracy: HashMap<String, f64>,
pub topological_accuracy: HashMap<String, f64>,
}
impl GraphPropertyMetrics {
pub fn new() -> Self {
Self::default()
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphSimilarityMetrics {
pub ged_correlation: f64,
pub subgraph_isomorphism_accuracy: f64,
pub mcs_ratio: f64,
pub spectral_distance_correlation: f64,
}
impl Default for GraphSimilarityMetrics {
fn default() -> Self {
Self {
ged_correlation: 0.0,
subgraph_isomorphism_accuracy: 0.0,
mcs_ratio: 0.0,
spectral_distance_correlation: 0.0,
}
}
}
impl GraphSimilarityMetrics {
pub fn new() -> Self {
Self::default()
}
}
impl GraphLevelMetrics {
pub fn new() -> Self {
Self {
classification: GraphClassificationMetrics::new(),
regression: GraphRegressionMetrics::new(),
property_prediction: GraphPropertyMetrics::new(),
similarity_metrics: GraphSimilarityMetrics::new(),
}
}
}
impl Default for GraphLevelMetrics {
fn default() -> Self {
Self::new()
}
}