AMPL .nl reader, reverse-mode AD tape, and TNLP evaluator.
This crate holds the .nl pipeline that used to live in pounce-cli:
- [
nl_reader] parses a.nlfile into an [nl_reader::NlProblem] (theExprDAG, linear parts, bounds, names, starting point) and provides [nl_reader::NlTnlp], a [pounce_nlp::tnlp::TNLP] implementation that evaluates objective/gradient/Hessian and constraints/Jacobian. - [
nl_tape] flattens anExprDAG into a reverse-mode AD tape with colored forward-over-reverse Hessian products. - [
nl_external] supports AMPL imported (external) functions via thefuncadd_ASLABI. - [
nl_fbbt_translate] lowers anExprto anFbbtTapefor feasibility-based bound tightening. - [
sol_writer] is the reader's inverse: it formats a solve's primals, duals, and suffixes as an AMPL.solfile. It lives here (rather than in the CLI, which owned it until the browser frontend needed it too) so every frontend emits the same file — same dual sign convention, same suffix headers.
It is a leaf crate (depends only on pounce-common and pounce-nlp) so
both the CLI and the Python bindings can read and evaluate .nl models
without depending on each other.