use crate::core::ExitStatus;
use num::Float;
use std::time;
#[derive(Debug, PartialEq, Copy, Clone)]
pub struct SolverStatus<T = f64>
where
T: Float,
{
exit_status: ExitStatus,
num_iter: usize,
solve_time: time::Duration,
fpr_norm: T,
cost_value: T,
}
impl<T: Float> SolverStatus<T> {
pub fn new(
exit_status: ExitStatus,
num_iter: usize,
solve_time: time::Duration,
fpr_norm: T,
cost_value: T,
) -> SolverStatus<T> {
SolverStatus {
exit_status,
num_iter,
solve_time,
fpr_norm,
cost_value,
}
}
pub fn has_converged(&self) -> bool {
self.exit_status == ExitStatus::Converged
}
pub fn iterations(&self) -> usize {
self.num_iter
}
pub fn solve_time(&self) -> time::Duration {
self.solve_time
}
pub fn norm_fpr(&self) -> T {
self.fpr_norm
}
pub fn cost_value(&self) -> T {
self.cost_value
}
pub fn exit_status(&self) -> ExitStatus {
self.exit_status
}
}