use pounce_common::types::{Index, Number};
#[derive(Debug, Default, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct IterRecord {
pub iter: Index,
pub objective: Number,
pub inf_pr: Number,
pub inf_du: Number,
pub mu: Number,
pub d_norm: Number,
pub regularization: Number,
pub alpha_dual: Number,
pub alpha_primal: Number,
pub alpha_primal_char: char,
pub ls_trials: Index,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SolveStatistics {
pub iteration_count: Index,
pub total_cpu_time_secs: Number,
pub total_sys_time_secs: Number,
pub total_wallclock_time_secs: Number,
pub num_obj_evals: Index,
pub num_constr_evals: Index,
pub num_obj_grad_evals: Index,
pub num_constr_jac_evals: Index,
pub num_hess_evals: Index,
pub final_objective: Number,
pub final_scaled_objective: Number,
pub final_dual_inf: Number,
pub final_constr_viol: Number,
pub final_compl: Number,
pub final_kkt_error: Number,
pub final_unscaled_dual_inf: Number,
pub final_unscaled_constr_viol: Number,
pub final_unscaled_compl: Number,
pub final_unscaled_kkt_error: Number,
pub final_kkt_error_above_noise: Number,
pub final_mu: Number,
pub restoration_calls: Index,
pub restoration_inner_iters: Index,
pub restoration_outer_iters: Index,
pub restoration_wall_secs: Number,
pub sqp_qp_solves: Index,
pub sqp_qp_working_set_changes: Index,
pub iterations: Vec<IterRecord>,
}
impl Default for SolveStatistics {
fn default() -> Self {
Self {
iteration_count: 0,
total_cpu_time_secs: 0.0,
total_sys_time_secs: 0.0,
total_wallclock_time_secs: 0.0,
num_obj_evals: 0,
num_constr_evals: 0,
num_obj_grad_evals: 0,
num_constr_jac_evals: 0,
num_hess_evals: 0,
final_objective: Number::NAN,
final_scaled_objective: Number::NAN,
final_dual_inf: Number::NAN,
final_constr_viol: Number::NAN,
final_compl: Number::NAN,
final_kkt_error: Number::NAN,
final_unscaled_dual_inf: Number::NAN,
final_unscaled_constr_viol: Number::NAN,
final_unscaled_compl: Number::NAN,
final_unscaled_kkt_error: Number::NAN,
final_kkt_error_above_noise: Number::NAN,
final_mu: 0.0,
restoration_calls: 0,
restoration_inner_iters: 0,
restoration_outer_iters: 0,
restoration_wall_secs: 0.0,
sqp_qp_solves: 0,
sqp_qp_working_set_changes: 0,
iterations: Vec::new(),
}
}
}
impl SolveStatistics {
pub fn new() -> Self {
Self::default()
}
}