Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e0800ad

Browse files
committed
Refactor success to be part of the result struct
1 parent a08db54 commit e0800ad

3 files changed

Lines changed: 8 additions & 14 deletions

File tree

c/include/prima/prima.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,9 @@ typedef struct {
272272
// status: return code
273273
prima_rc_t status;
274274

275+
// success: whether the solver returned normally or ran into abnormal conditions
276+
bool success;
277+
275278
// message: exit message
276279
const char *message;
277280

@@ -298,10 +301,6 @@ PRIMAC_API
298301
prima_rc_t prima_minimize(const prima_algorithm_t algorithm, const prima_problem_t problem, const prima_options_t options, prima_result_t *const result);
299302

300303

301-
// Function to check if PRIMA returned normally or ran into abnormal conditions
302-
PRIMAC_API
303-
bool prima_is_success(const prima_result_t result, const prima_options_t options);
304-
305304
#ifdef __cplusplus
306305
}
307306
#endif

c/prima.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -263,13 +263,9 @@ prima_rc_t prima_minimize(const prima_algorithm_t algorithm, const prima_problem
263263
}
264264

265265
result->status = info;
266+
result->success = ((result->status == PRIMA_SMALL_TR_RADIUS && result->cstrv <= options.ctol) ||
267+
(result->status == PRIMA_FTARGET_ACHIEVED));
266268
result->message = prima_get_rc_string(info);
267269

268270
return info;
269271
}
270-
271-
bool prima_is_success(const prima_result_t result, const prima_options_t options)
272-
{
273-
return ((result.status == PRIMA_SMALL_TR_RADIUS && result.cstrv <= options.ctol) ||
274-
(result.status == PRIMA_FTARGET_ACHIEVED));
275-
}

python/_prima.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,9 @@ class SelfCleaningPyObject {
3030

3131
struct PRIMAResult {
3232
// Construct PRIMAResult from prima_result_t
33-
PRIMAResult(const prima_result_t& result, const int num_vars, const int num_constraints, const std::string method,
34-
const prima_options_t& options) :
33+
PRIMAResult(const prima_result_t& result, const int num_vars, const int num_constraints, const std::string method) :
3534
x(num_vars, result.x),
36-
success(prima_is_success(result, options)),
35+
success(result.success),
3736
status(result.status),
3837
message(result.message),
3938
fun(result.f),
@@ -326,7 +325,7 @@ PYBIND11_MODULE(_prima, m) {
326325
// Initialize the result, call the function, convert the return type, and return it.
327326
prima_result_t result;
328327
const prima_rc_t rc = prima_minimize(algorithm, problem, options, &result);
329-
PRIMAResult result_copy(result, py_x0.size(), problem.m_nlcon, method.cast<std::string>(), options);
328+
PRIMAResult result_copy(result, py_x0.size(), problem.m_nlcon, method.cast<std::string>());
330329
prima_free_result(&result);
331330
return result_copy;
332331
}, "fun"_a, "x0"_a, "args"_a=py::tuple(), "method"_a=py::none(),

0 commit comments

Comments
 (0)