use std::time::Duration;
use serde::{Deserialize, Serialize};
use crate::types::{Algorithm, ComputeLane};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum SolverEvent {
SolveRequested {
algorithm: Algorithm,
matrix_rows: usize,
matrix_nnz: usize,
lane: ComputeLane,
},
IterationCompleted {
iteration: usize,
residual: f64,
elapsed: Duration,
},
SolveConverged {
algorithm: Algorithm,
iterations: usize,
residual: f64,
wall_time: Duration,
},
AlgorithmFallback {
from: Algorithm,
to: Algorithm,
reason: String,
},
BudgetExhausted {
algorithm: Algorithm,
limit: BudgetLimit,
elapsed: Duration,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum BudgetLimit {
WallTime,
Iterations,
Memory,
}