From fa75b43acf6bf4d27ea4e79704eb7fb520d28830 Mon Sep 17 00:00:00 2001 From: Christoph Hansknecht Date: Sat, 23 Sep 2023 12:27:08 +0200 Subject: [PATCH] Replace types deprecated by Ipopt --- cyipopt/cython/ipopt.pxd | 186 +++++++++++++++---------------- cyipopt/cython/ipopt_wrapper.pyx | 144 ++++++++++++------------ 2 files changed, 164 insertions(+), 166 deletions(-) diff --git a/cyipopt/cython/ipopt.pxd b/cyipopt/cython/ipopt.pxd index 8031e9b6..6981f423 100644 --- a/cyipopt/cython/ipopt.pxd +++ b/cyipopt/cython/ipopt.pxd @@ -29,28 +29,28 @@ cdef extern from "IpStdCInterface.h": Bool GetIpoptCurrentIterate( IpoptProblem ipopt_problem, Bool scaled, - Index n, - Number* x, - Number* z_L, - Number* z_U, - Index m, - Number* g, - Number* lambd + int n, + ipnumber* x, + ipnumber* z_L, + ipnumber* z_U, + ipindex m, + ipnumber* g, + ipnumber* lambd ){ return 0; } Bool GetIpoptCurrentViolations( IpoptProblem ipopt_problem, Bool scaled, - Index n, - Number* x_L_violation, - Number* x_U_violation, - Number* compl_x_L, - Number* compl_x_U, - Number* grad_lag_x, - Index m, - Number* nlp_constraint_violation, - Number* compl_g + ipindex n, + ipnumber* x_L_violation, + ipnumber* x_U_violation, + ipnumber* compl_x_L, + ipnumber* compl_x_U, + ipnumber* grad_lag_x, + ipindex m, + ipnumber* nlp_constraint_violation, + ipnumber* compl_g ){ return 0; } @@ -82,11 +82,9 @@ cdef extern from "IpStdCInterface.h": #endif """ - ctypedef double Number + ctypedef double ipnumber - ctypedef int Index - - ctypedef int Int + ctypedef int ipindex ctypedef struct IpoptProblemInfo: pass @@ -123,82 +121,82 @@ cdef extern from "IpStdCInterface.h": RestorationPhaseMode=1 ctypedef Bool (*Eval_F_CB)( - Index n, - Number* x, + ipindex n, + ipnumber* x, Bool new_x, - Number* obj_value, + ipnumber* obj_value, UserDataPtr user_data ) ctypedef Bool (*Eval_Grad_F_CB)( - Index n, - Number* x, + ipindex n, + ipnumber* x, Bool new_x, - Number* grad_f, + ipnumber* grad_f, UserDataPtr user_data ) ctypedef Bool (*Eval_G_CB)( - Index n, - Number* x, + ipindex n, + ipnumber* x, Bool new_x, - Index m, - Number* g, + ipindex m, + ipnumber* g, UserDataPtr user_data ) ctypedef Bool (*Eval_Jac_G_CB)( - Index n, - Number *x, + ipindex n, + ipnumber *x, Bool new_x, - Index m, - Index nele_jac, - Index *iRow, - Index *jCol, - Number *values, + ipindex m, + ipindex nele_jac, + ipindex *iRow, + ipindex *jCol, + ipnumber *values, UserDataPtr user_data ) ctypedef Bool (*Eval_H_CB)( - Index n, - Number *x, + ipindex n, + ipnumber *x, Bool new_x, - Number obj_factor, - Index m, - Number *lambd, + ipnumber obj_factor, + ipindex m, + ipnumber *lambd, Bool new_lambda, - Index nele_hess, - Index *iRow, - Index *jCol, - Number *values, + ipindex nele_hess, + ipindex *iRow, + ipindex *jCol, + ipnumber *values, UserDataPtr user_data ) ctypedef Bool (*Intermediate_CB)( - Index alg_mod, - Index iter_count, - Number obj_value, - Number inf_pr, - Number inf_du, - Number mu, - Number d_norm, - Number regularization_size, - Number alpha_du, - Number alpha_pr, - Index ls_trials, + ipindex alg_mod, + ipindex iter_count, + ipnumber obj_value, + ipnumber inf_pr, + ipnumber inf_du, + ipnumber mu, + ipnumber d_norm, + ipnumber regularization_size, + ipnumber alpha_du, + ipnumber alpha_pr, + ipindex ls_trials, UserDataPtr user_data ) IpoptProblem CreateIpoptProblem( - Index n, - Number* x_L, - Number* x_U, - Index m, - Number* g_L, - Number* g_U, - Index nele_jac, - Index nele_hess, - Index index_style, + ipindex n, + ipnumber* x_L, + ipnumber* x_U, + ipindex m, + ipnumber* g_L, + ipnumber* g_U, + ipindex nele_jac, + ipindex nele_hess, + ipindex index_style, Eval_F_CB eval_f, Eval_G_CB eval_g, Eval_Grad_F_CB eval_grad_f, @@ -210,17 +208,17 @@ cdef extern from "IpStdCInterface.h": Bool AddIpoptStrOption(IpoptProblem ipopt_problem, char* keyword, char* val) - Bool AddIpoptNumOption(IpoptProblem ipopt_problem, char* keyword, Number val) + Bool AddIpoptNumOption(IpoptProblem ipopt_problem, char* keyword, ipnumber val) - Bool AddIpoptIntOption(IpoptProblem ipopt_problem, char* keyword, Int val) + Bool AddIpoptIntOption(IpoptProblem ipopt_problem, char* keyword, int val) - Bool OpenIpoptOutputFile(IpoptProblem ipopt_problem, char* file_name, Int print_level) + Bool OpenIpoptOutputFile(IpoptProblem ipopt_problem, char* file_name, int print_level) Bool SetIpoptProblemScaling( IpoptProblem ipopt_problem, - Number obj_scaling, - Number* x_scaling, - Number* g_scaling + ipnumber obj_scaling, + ipnumber* x_scaling, + ipnumber* g_scaling ) Bool SetIntermediateCallback( @@ -230,12 +228,12 @@ cdef extern from "IpStdCInterface.h": ApplicationReturnStatus IpoptSolve( IpoptProblem ipopt_problem, - Number* x, - Number* g, - Number* obj_val, - Number* mult_g, - Number* mult_x_L, - Number* mult_x_U, + ipnumber* x, + ipnumber* g, + ipnumber* obj_val, + ipnumber* mult_g, + ipnumber* mult_x_L, + ipnumber* mult_x_U, UserDataPtr user_data ) @@ -244,13 +242,13 @@ cdef extern from "IpStdCInterface.h": Bool CyGetCurrentIterate "_ip_get_iter" ( IpoptProblem ipopt_problem, Bool scaled, - Index n, - Number* x, - Number* z_L, - Number* z_U, - Index m, - Number* g, - Number* lambd + ipindex n, + ipnumber* x, + ipnumber* z_L, + ipnumber* z_U, + ipindex m, + ipnumber* g, + ipnumber* lambd ) # Wrapper around GetIpoptCurrentViolations with a dummy implementation in @@ -258,13 +256,13 @@ cdef extern from "IpStdCInterface.h": Bool CyGetCurrentViolations "_ip_get_viol" ( IpoptProblem ipopt_problem, Bool scaled, - Index n, - Number* x_L_violation, - Number* x_U_violation, - Number* compl_x_L, - Number* compl_x_U, - Number* grad_lag_x, - Index m, - Number* nlp_constraint_violation, - Number* compl_g + ipindex n, + ipnumber* x_L_violation, + ipnumber* x_U_violation, + ipnumber* compl_x_L, + ipnumber* compl_x_U, + ipnumber* grad_lag_x, + ipindex m, + ipnumber* nlp_constraint_violation, + ipnumber* compl_g ) diff --git a/cyipopt/cython/ipopt_wrapper.pyx b/cyipopt/cython/ipopt_wrapper.pyx index e0737f28..053fb680 100644 --- a/cyipopt/cython/ipopt_wrapper.pyx +++ b/cyipopt/cython/ipopt_wrapper.pyx @@ -277,8 +277,8 @@ cdef class Problem: cdef public object __hessian cdef public object __hessianstructure cdef public object __intermediate - cdef public Index __n - cdef public Index __m + cdef public ipindex __n + cdef public ipindex __m cdef public object __exception cdef Bool __in_ipopt_solve @@ -369,8 +369,8 @@ cdef class Problem: "be defined.") raise ValueError(msg) - cdef Index nele_jac = self.__m * self.__n - cdef Index nele_hess = (self.__n * (self.__n + 1) / 2) + cdef ipindex nele_jac = self.__m * self.__n + cdef ipindex nele_hess = (self.__n * (self.__n + 1) / 2) if self.__jacobianstructure: ret_val = self.__jacobianstructure() @@ -412,11 +412,11 @@ cdef class Problem: # TODO: verify that the numpy arrays use C order self.__nlp = CreateIpoptProblem(self.__n, - np_lb.data, - np_ub.data, + np_lb.data, + np_ub.data, self.__m, - np_cl.data, - np_cu.data, + np_cl.data, + np_cu.data, nele_jac, nele_hess, 0, @@ -548,8 +548,8 @@ cdef class Problem: msg = "obj_scaling should be convertible to float type." raise ValueError(msg) - cdef Number *x_scaling_p - cdef Number *g_scaling_p + cdef ipnumber *x_scaling_p + cdef ipnumber *g_scaling_p cdef np.ndarray[DTYPEd_t, ndim=1] np_x_scaling cdef np.ndarray[DTYPEd_t, ndim=1] np_g_scaling @@ -561,7 +561,7 @@ cdef class Problem: raise ValueError(msg) np_x_scaling = np.array(x_scaling, dtype=DTYPEd).flatten() - x_scaling_p = np_x_scaling.data + x_scaling_p = np_x_scaling.data if g_scaling is None: g_scaling_p = NULL @@ -571,7 +571,7 @@ cdef class Problem: raise ValueError(msg) np_g_scaling = np.array(g_scaling, dtype=DTYPEd).flatten() - g_scaling_p = np_g_scaling.data + g_scaling_p = np_g_scaling.data ret_val = SetIpoptProblemScaling(self.__nlp, obj_scaling, @@ -637,18 +637,18 @@ cdef class Problem: cdef np.ndarray[DTYPEd_t, ndim=1] mult_x_U = np.array(zu, dtype=DTYPEd).flatten() - cdef Number obj_val = 0 + cdef ipnumber obj_val = 0 # Set flag that we are in a solve, so __nlp->tnlp references (e.g. in # get_current_iterate) are valid. self.__in_ipopt_solve = True stat = IpoptSolve(self.__nlp, - np_x.data, - g.data, + np_x.data, + g.data, &obj_val, - mult_g.data, - mult_x_L.data, - mult_x_U.data, + mult_g.data, + mult_x_L.data, + mult_x_U.data, self ) # Unset flag @@ -723,11 +723,11 @@ cdef class Problem: np_mult_g = np.zeros((self.__m,), dtype=DTYPEd).flatten() # Cast to C data types - x = np_x.data - mult_x_L = np_mult_x_L.data - mult_x_U = np_mult_x_U.data - g = np_g.data - mult_g = np_mult_g.data + x = np_x.data + mult_x_L = np_mult_x_L.data + mult_x_U = np_mult_x_U.data + g = np_g.data + mult_g = np_mult_g.data successful = CyGetCurrentIterate( self.__nlp, @@ -812,13 +812,13 @@ cdef class Problem: np_compl_g = np.zeros((self.__m,), dtype=DTYPEd).flatten() # Cast to C data types - x_L_viol = np_x_L_viol.data - x_U_viol = np_x_U_viol.data - compl_x_L = np_compl_x_L.data - compl_x_U = np_compl_x_U.data - grad_lag_x = np_grad_lag_x.data - g_viol = np_g_viol.data - compl_g = np_compl_g.data + x_L_viol = np_x_L_viol.data + x_U_viol = np_x_U_viol.data + compl_x_L = np_compl_x_L.data + compl_x_U = np_compl_x_U.data + grad_lag_x = np_grad_lag_x.data + g_viol = np_g_viol.data + compl_g = np_compl_g.data successful = CyGetCurrentViolations( self.__nlp, @@ -853,17 +853,17 @@ cdef class Problem: # # Callback functions # -cdef Bool objective_cb(Index n, - Number* x, +cdef Bool objective_cb(ipindex n, + ipnumber* x, Bool new_x, - Number* obj_value, + ipnumber* obj_value, UserDataPtr user_data ): log(b"objective_cb", logging.INFO) cdef object self = user_data - cdef Index i + cdef ipindex i cdef np.ndarray[DTYPEd_t, ndim=1] _x = np.zeros((n,), dtype=DTYPEd) for i in range(n): _x[i] = x[i] @@ -876,17 +876,17 @@ cdef Bool objective_cb(Index n, return True -cdef Bool gradient_cb(Index n, - Number* x, +cdef Bool gradient_cb(ipindex n, + ipnumber* x, Bool new_x, - Number* grad_f, + ipnumber* grad_f, UserDataPtr user_data ): log(b"gradient_cb", logging.INFO) cdef object self = user_data - cdef Index i + cdef ipindex i cdef np.ndarray[DTYPEd_t, ndim=1] _x = np.zeros((n,), dtype=DTYPEd) cdef np.ndarray[DTYPEd_t, ndim=1] np_grad_f @@ -909,18 +909,18 @@ cdef Bool gradient_cb(Index n, return True -cdef Bool constraints_cb(Index n, - Number* x, +cdef Bool constraints_cb(ipindex n, + ipnumber* x, Bool new_x, - Index m, - Number* g, + ipindex m, + ipnumber* g, UserDataPtr user_data ): log(b"constraints_cb", logging.INFO) cdef object self = user_data - cdef Index i + cdef ipindex i cdef np.ndarray[DTYPEd_t, ndim=1] _x = np.zeros((n,), dtype=DTYPEd) cdef np.ndarray[DTYPEd_t, ndim=1] np_g @@ -947,21 +947,21 @@ cdef Bool constraints_cb(Index n, return True -cdef Bool jacobian_cb(Index n, - Number* x, +cdef Bool jacobian_cb(ipindex n, + ipnumber* x, Bool new_x, - Index m, - Index nele_jac, - Index *iRow, - Index *jCol, - Number *values, + ipindex m, + ipindex nele_jac, + ipindex *iRow, + ipindex *jCol, + ipnumber *values, UserDataPtr user_data ): log(b"jacobian_cb", logging.INFO) cdef object self = user_data - cdef Index i + cdef ipindex i cdef np.ndarray[DTYPEd_t, ndim=1] _x = np.zeros((n,), dtype=DTYPEd) cdef np.ndarray[DTYPEi_t, ndim=1] np_iRow cdef np.ndarray[DTYPEi_t, ndim=1] np_jCol @@ -1043,24 +1043,24 @@ cdef Bool jacobian_cb(Index n, return True -cdef Bool hessian_cb(Index n, - Number* x, +cdef Bool hessian_cb(ipindex n, + ipnumber* x, Bool new_x, - Number obj_factor, - Index m, - Number *lambd, + ipnumber obj_factor, + ipindex m, + ipnumber *lambd, Bool new_lambda, - Index nele_hess, - Index *iRow, - Index *jCol, - Number *values, + ipindex nele_hess, + ipindex *iRow, + ipindex *jCol, + ipnumber *values, UserDataPtr user_data ): log(b"hessian_cb", logging.INFO) cdef object self = user_data - cdef Index i + cdef ipindex i cdef np.ndarray[DTYPEd_t, ndim=1] _x = np.zeros((n,), dtype=DTYPEd) cdef np.ndarray[DTYPEd_t, ndim=1] _lambda = np.zeros((m,), dtype=DTYPEd) cdef np.ndarray[DTYPEi_t, ndim=1] np_iRow @@ -1155,17 +1155,17 @@ cdef Bool hessian_cb(Index n, return True -cdef Bool intermediate_cb(Index alg_mod, - Index iter_count, - Number obj_value, - Number inf_pr, - Number inf_du, - Number mu, - Number d_norm, - Number regularization_size, - Number alpha_du, - Number alpha_pr, - Index ls_trials, +cdef Bool intermediate_cb(ipindex alg_mod, + ipindex iter_count, + ipnumber obj_value, + ipnumber inf_pr, + ipnumber inf_du, + ipnumber mu, + ipnumber d_norm, + ipnumber regularization_size, + ipnumber alpha_du, + ipnumber alpha_pr, + ipindex ls_trials, UserDataPtr user_data ):