pounce-cinterface 0.4.0

C ABI for POUNCE (port of Ipopt's Interfaces/IpStdCInterface.{h,cpp}). Provides CreateIpoptProblem / IpoptSolve / FreeIpoptProblem so existing PyIpopt / cyipopt / JuMP / AMPL clients link without source changes. Feature-complete for the upstream Ipopt C ABI surface.
Documentation

pounce-cinterface

C ABI for POUNCE. Port of Ipopt's Interfaces/IpStdCInterface.{h,cpp}.

Provides the CreateIpoptProblem / IpoptSolve / FreeIpoptProblem entry points so existing PyIpopt, cyipopt, JuMP, and AMPL wrappers can link against POUNCE without source changes. Function names and signatures match upstream exactly: consumers swap libipopt.{dylib,so} for libpounce_cinterface.{dylib,so}.

Crate type

[lib]
crate-type = ["lib", "cdylib"]

The cdylib is what wrappers link against. The make install target in the workspace root drops libpounce_cinterface.{dylib,so} into $PREFIX/lib (default $HOME/.local/lib).

Surface

  • CreateIpoptProblem(n, x_L, x_U, m, g_L, g_U, nele_jac, nele_hess, index_style, eval_f, eval_grad_f, eval_g, eval_jac_g, eval_h)IpoptProblem handle.
  • IpoptSolve(problem, x, g, obj_val, mult_g, mult_x_L, mult_x_U, user_data)ApplicationReturnStatus.
  • FreeIpoptProblem(problem).
  • AddIpoptStrOption / AddIpoptIntOption / AddIpoptNumOption — forward to the application's OptionsList.
  • SetIntermediateCallback.
  • Post-solve accessors: GetIpoptIterCount, GetIpoptSolveTime, termination-detail getters.
  • IpoptWriteSolveReport — emits the structured pounce.solve-report/v1 JSON (see pounce-solve-report) from the most recent solve. Schema-compatible with the CLI's --json-output.
  • Working-set warm start: IpoptGetWorkingSet, IpoptSetWarmStartWorkingSet, IpoptClearWarmStartWorkingSet, IpoptSolveWarmStart.
  • Factor-once / solve-many session: IpoptCreateSolver, IpoptSolverSolve, IpoptSolverGetKktDim, IpoptSolverKktSolve, IpoptSolverParametricStep, IpoptSolverReducedHessian, IpoptFreeSolver. Reuses the converged KKT factor across parametric sweeps, reduced-Hessian queries, and raw back-solves. The classic IpoptSolve API is unchanged and unaffected. See docs/src/sessions.md for the walkthrough.

All entry points are extern "C" and #[no_mangle]. Pointers are raw and the caller owns lifetimes; the IpoptProblem handle is opaque (void* from C).

Status

Feature-complete for the upstream Ipopt C ABI surface. End-to-end solves run via IpoptSolve through the regular algorithm path; option forwarding, intermediate callback, post-solve stats, and the JSON solve-report writer are all wired. The C ABI is the path PyIpopt / cyipopt / JuMP / AMPL drivers take when they link libpounce_cinterface in place of libipopt.

License

EPL-2.0.