@@ -79,6 +79,7 @@ static void print_summary(ScsWork *w, scs_int i, SCS(timer) * solve_timer);
7979static void print_footer (ScsInfo * info );
8080static void free_residuals (ScsResiduals * r );
8181static ScsResiduals * init_residuals (const ScsData * d );
82+ static void set_info_aa_stats (ScsInfo * info , const AaWork * accel );
8283static void populate_on_failure (scs_int m , scs_int n , ScsSolution * sol ,
8384 ScsInfo * info , scs_int status_val ,
8485 const char * msg );
@@ -299,6 +300,31 @@ static ScsResiduals *init_residuals(const ScsData *d) {
299300 return r ;
300301}
301302
303+ static void set_info_aa_stats (ScsInfo * info , const AaWork * accel ) {
304+ ScsAaStats * dst ;
305+ AaStats src ;
306+ if (!info ) {
307+ return ;
308+ }
309+ dst = & info -> aa_stats ;
310+ memset (dst , 0 , sizeof (* dst ));
311+ dst -> last_aa_norm = NAN ;
312+ if (!accel ) {
313+ return ;
314+ }
315+ src = aa_get_stats (accel );
316+ dst -> iter = src .iter ;
317+ dst -> n_accept = src .n_accept ;
318+ dst -> n_reject_lapack = src .n_reject_lapack ;
319+ dst -> n_reject_rank0 = src .n_reject_rank0 ;
320+ dst -> n_reject_nonfinite = src .n_reject_nonfinite ;
321+ dst -> n_reject_weight_cap = src .n_reject_weight_cap ;
322+ dst -> n_safeguard_reject = src .n_safeguard_reject ;
323+ dst -> last_rank = src .last_rank ;
324+ dst -> last_aa_norm = src .last_aa_norm ;
325+ dst -> last_regularization = src .last_regularization ;
326+ }
327+
302328/* ==================== Error / Failure Handling ===================== */
303329
304330static void populate_on_failure (scs_int m , scs_int n , ScsSolution * sol ,
@@ -340,6 +366,7 @@ static scs_int failure(ScsWork *w, scs_int m, scs_int n, ScsSolution *sol,
340366 const char * ststr ) {
341367 scs_int status = stint ;
342368 populate_on_failure (m , n , sol , info , status , ststr );
369+ set_info_aa_stats (info , w ? w -> accel : SCS_NULL );
343370 scs_printf ("Failure:%s\n" , msg );
344371 scs_end_interrupt_listener ();
345372 return status ;
@@ -865,6 +892,7 @@ static void finalize(ScsWork *w, ScsSolution *sol, ScsInfo *info,
865892 info -> scale_updates = w -> scale_updates ;
866893 info -> rejected_accel_steps = w -> rejected_accel_steps ;
867894 info -> accepted_accel_steps = w -> accepted_accel_steps ;
895+ set_info_aa_stats (info , w -> accel );
868896 info -> comp_slack = ABS (sty );
869897#ifdef SPECTRAL_TIMING_FLAG
870898 info -> ave_time_matrix_cone_proj = w -> cone_work -> tot_time_mat_cone_proj / iter ;
0 commit comments