@@ -29,7 +29,7 @@ optimization_problem_solution_t<i_t, f_t>::optimization_problem_solution_t(
2929 dual_solution_ (std::make_unique<rmm::device_uvector<f_t >>(0 , stream_view)),
3030 reduced_cost_(std::make_unique<rmm::device_uvector<f_t >>(0 , stream_view)),
3131 is_device_memory_(true ),
32- termination_status_( termination_status) ,
32+ termination_status_{{ termination_status}} ,
3333 error_status_ (cuopt::logic_error(" " , cuopt::error_type_t ::Success))
3434{
3535 cuopt_assert (termination_stats_.size () == termination_status_.size (),
@@ -43,7 +43,7 @@ optimization_problem_solution_t<i_t, f_t>::optimization_problem_solution_t(
4343 dual_solution_ (std::make_unique<rmm::device_uvector<f_t >>(0 , stream_view)),
4444 reduced_cost_(std::make_unique<rmm::device_uvector<f_t >>(0 , stream_view)),
4545 is_device_memory_(true ),
46- termination_status_( pdlp_termination_status_t ::NoTermination) ,
46+ termination_status_{{ pdlp_termination_status_t ::NoTermination}} ,
4747 error_status_ (error_status_)
4848{
4949 cuopt_assert (termination_stats_.size () == termination_status_.size (),
@@ -58,7 +58,7 @@ optimization_problem_solution_t<i_t, f_t>::optimization_problem_solution_t(
5858 dual_solution_host_ (std::make_unique<std::vector<f_t >>()),
5959 reduced_cost_host_(std::make_unique<std::vector<f_t >>()),
6060 is_device_memory_(false ),
61- termination_status_( termination_status) ,
61+ termination_status_{{ termination_status}} ,
6262 error_status_ (cuopt::logic_error(" " , cuopt::error_type_t ::Success))
6363{
6464}
@@ -71,7 +71,7 @@ optimization_problem_solution_t<i_t, f_t>::optimization_problem_solution_t(
7171 dual_solution_host_ (std::make_unique<std::vector<f_t >>()),
7272 reduced_cost_host_(std::make_unique<std::vector<f_t >>()),
7373 is_device_memory_(false ),
74- termination_status_( pdlp_termination_status_t ::NoTermination) ,
74+ termination_status_{{ pdlp_termination_status_t ::NoTermination}} ,
7575 error_status_ (error_status)
7676{
7777}
@@ -85,8 +85,8 @@ optimization_problem_solution_t<i_t, f_t>::optimization_problem_solution_t(
8585 const std::string objective_name,
8686 const std::vector<std::string>& var_names,
8787 const std::vector<std::string>& row_names,
88- additional_termination_information_t & termination_stats,
89- pdlp_termination_status_t termination_status)
88+ std::vector< additional_termination_information_t >& & termination_stats,
89+ std::vector< pdlp_termination_status_t >&& termination_status)
9090 : primal_solution_(std::make_unique<rmm::device_uvector<f_t >>(std::move(final_primal_solution))),
9191 dual_solution_ (std::make_unique<rmm::device_uvector<f_t >>(std::move(final_dual_solution))),
9292 reduced_cost_(std::make_unique<rmm::device_uvector<f_t >>(std::move(final_reduced_cost))),
@@ -95,8 +95,8 @@ optimization_problem_solution_t<i_t, f_t>::optimization_problem_solution_t(
9595 objective_name_(objective_name),
9696 var_names_(std::move(var_names)),
9797 row_names_(std::move(row_names)),
98- termination_stats_(termination_stats),
99- termination_status_(termination_status),
98+ termination_stats_(std::move( termination_stats) ),
99+ termination_status_(std::move( termination_status) ),
100100 error_status_(cuopt::logic_error(" " , cuopt::error_type_t ::Success))
101101{
102102 cuopt_assert (termination_stats_.size () == termination_status_.size (),
@@ -111,13 +111,13 @@ optimization_problem_solution_t<i_t, f_t>::optimization_problem_solution_t(
111111 const std::string objective_name,
112112 const std::vector<std::string>& var_names,
113113 const std::vector<std::string>& row_names,
114- additional_termination_information_t & termination_stats,
115- pdlp_termination_status_t termination_status)
114+ std::vector< additional_termination_information_t >& & termination_stats,
115+ std::vector< pdlp_termination_status_t >&& termination_status)
116116 : primal_solution_(std::make_unique<rmm::device_uvector<f_t >>(std::move(final_primal_solution))),
117117 dual_solution_ (std::make_unique<rmm::device_uvector<f_t >>(std::move(final_dual_solution))),
118118 reduced_cost_(std::make_unique<rmm::device_uvector<f_t >>(std::move(final_reduced_cost))),
119119 is_device_memory_(true ),
120- termination_status_(termination_status),
120+ termination_status_(std::move( termination_status) ),
121121 termination_stats_(std::move(termination_stats)),
122122 objective_name_(objective_name),
123123 var_names_(std::move(var_names)),
@@ -147,8 +147,8 @@ optimization_problem_solution_t<i_t, f_t>::optimization_problem_solution_t(
147147 reduced_cost_(
148148 std::make_unique<rmm::device_uvector<f_t >>(final_reduced_cost, handler_ptr->get_stream ())),
149149 is_device_memory_(true ),
150- termination_status_( termination_status) ,
151- termination_stats_( termination_stats) ,
150+ termination_status_{{ termination_status}} ,
151+ termination_stats_{{ termination_stats}} ,
152152 objective_name_ (objective_name),
153153 var_names_(var_names),
154154 row_names_(row_names),
@@ -171,8 +171,8 @@ optimization_problem_solution_t<i_t, f_t>::optimization_problem_solution_t(
171171 dual_solution_host_(std::make_unique<std::vector<f_t >>(std::move(dual_solution))),
172172 reduced_cost_host_(std::make_unique<std::vector<f_t >>(std::move(reduced_cost))),
173173 is_device_memory_(false ),
174- termination_status_( termination_status) ,
175- termination_stats_(std::move( termination_stats)) ,
174+ termination_status_{{ termination_status}} ,
175+ termination_stats_{{ termination_stats}} ,
176176 objective_name_ (objective_name),
177177 var_names_(var_names),
178178 row_names_(row_names),
@@ -625,7 +625,7 @@ template <typename i_t, typename f_t>
625625void optimization_problem_solution_t <i_t , f_t >::set_termination_stats(
626626 const additional_termination_information_t & stats)
627627{
628- termination_stats_ = stats;
628+ termination_stats_[ 0 ] = stats;
629629}
630630
631631// ============================================================================
@@ -635,43 +635,43 @@ void optimization_problem_solution_t<i_t, f_t>::set_termination_stats(
635635template <typename i_t , typename f_t >
636636f_t optimization_problem_solution_t <i_t , f_t >::get_l2_primal_residual() const
637637{
638- return termination_stats_.l2_primal_residual ;
638+ return termination_stats_[ 0 ] .l2_primal_residual ;
639639}
640640
641641template <typename i_t , typename f_t >
642642f_t optimization_problem_solution_t <i_t , f_t >::get_l2_dual_residual() const
643643{
644- return termination_stats_.l2_dual_residual ;
644+ return termination_stats_[ 0 ] .l2_dual_residual ;
645645}
646646
647647template <typename i_t , typename f_t >
648648f_t optimization_problem_solution_t <i_t , f_t >::get_primal_objective() const
649649{
650- return termination_stats_.primal_objective ;
650+ return termination_stats_[ 0 ] .primal_objective ;
651651}
652652
653653template <typename i_t , typename f_t >
654654f_t optimization_problem_solution_t <i_t , f_t >::get_dual_objective() const
655655{
656- return termination_stats_.dual_objective ;
656+ return termination_stats_[ 0 ] .dual_objective ;
657657}
658658
659659template <typename i_t , typename f_t >
660660f_t optimization_problem_solution_t <i_t , f_t >::get_gap() const
661661{
662- return termination_stats_.gap ;
662+ return termination_stats_[ 0 ] .gap ;
663663}
664664
665665template <typename i_t , typename f_t >
666666i_t optimization_problem_solution_t <i_t , f_t >::get_nb_iterations() const
667667{
668- return termination_stats_.number_of_steps_taken ;
668+ return termination_stats_[ 0 ] .number_of_steps_taken ;
669669}
670670
671671template <typename i_t , typename f_t >
672672bool optimization_problem_solution_t <i_t , f_t >::get_solved_by_pdlp() const
673673{
674- return termination_stats_.solved_by_pdlp ;
674+ return termination_stats_[ 0 ] .solved_by_pdlp ;
675675}
676676
677677// ============================================================================
@@ -681,43 +681,43 @@ bool optimization_problem_solution_t<i_t, f_t>::get_solved_by_pdlp() const
681681template <typename i_t , typename f_t >
682682void optimization_problem_solution_t <i_t , f_t >::set_l2_primal_residual(f_t value)
683683{
684- termination_stats_.l2_primal_residual = value;
684+ termination_stats_[ 0 ] .l2_primal_residual = value;
685685}
686686
687687template <typename i_t , typename f_t >
688688void optimization_problem_solution_t <i_t , f_t >::set_l2_dual_residual(f_t value)
689689{
690- termination_stats_.l2_dual_residual = value;
690+ termination_stats_[ 0 ] .l2_dual_residual = value;
691691}
692692
693693template <typename i_t , typename f_t >
694694void optimization_problem_solution_t <i_t , f_t >::set_primal_objective(f_t value)
695695{
696- termination_stats_.primal_objective = value;
696+ termination_stats_[ 0 ] .primal_objective = value;
697697}
698698
699699template <typename i_t , typename f_t >
700700void optimization_problem_solution_t <i_t , f_t >::set_dual_objective(f_t value)
701701{
702- termination_stats_.dual_objective = value;
702+ termination_stats_[ 0 ] .dual_objective = value;
703703}
704704
705705template <typename i_t , typename f_t >
706706void optimization_problem_solution_t <i_t , f_t >::set_gap(f_t value)
707707{
708- termination_stats_.gap = value;
708+ termination_stats_[ 0 ] .gap = value;
709709}
710710
711711template <typename i_t , typename f_t >
712712void optimization_problem_solution_t <i_t , f_t >::set_nb_iterations(i_t value)
713713{
714- termination_stats_.number_of_steps_taken = value;
714+ termination_stats_[ 0 ] .number_of_steps_taken = value;
715715}
716716
717717template <typename i_t , typename f_t >
718718void optimization_problem_solution_t <i_t , f_t >::set_solved_by_pdlp(bool value)
719719{
720- termination_stats_.solved_by_pdlp = value;
720+ termination_stats_[ 0 ] .solved_by_pdlp = value;
721721}
722722
723723template <typename i_t , typename f_t >
0 commit comments