Skip to main content

Module print

Module print 

Source
Expand description

Ipopt-style banner / problem-stats / final-summary printing for the pounce CLI. Output is structured to match upstream Ipopt’s console layout closely enough that anyone familiar with ipopt can spot at a glance whether POUNCE is converging similarly.

Structs§

ProblemStats

Functions§

collect_stats
Gather everything the banner block needs, reported over the reduced problem that the algorithm actually solves — i.e. after fixed_variable_treatment removes fixed (x_l == x_u) variables under make_parameter. This mirrors Ipopt, whose banner is computed from the post-IpTNLPAdapter problem; computing it from the raw TNLP instead made pounce over-report variables and bucket fixed vars as “lower and upper bounds” (#140).
fmt_ipopt
Format a number in Ipopt’s scientific notation: 16-digit mantissa, signed 2-digit exponent (e.g. 3.7952009505566139e+03). Rust’s {:.16e} is close but emits a 1-digit exponent without leading sign, which makes side-by-side diffs against ipopt output messy.
logo_rows
Render the POUNCE wordmark as styled rows (one String per line): steel-sheen letters with three molten claw slashes, in the project palette. Emits ANSI styling only when color; otherwise plain #// block characters. Shared by the solve header (print_logo) and the interactive debugger’s open banner (rendered to stderr).
print_banner
print_convex_summary
Emit an Ipopt-style end-of-run summary for the dedicated convex (LP / QP / conic) IPM path. That path otherwise prints only a compact one-line result, so the Number of Iterations....: and Objective...............: lines the general NLP path emits are missing. Downstream consumers that parse Ipopt’s summary block — notably the benchmark harness’s extract_obj/extract_iters in benchmarks/scripts/run_nl_bench.sh — then see a null objective and zero iterations even though the solve succeeded. This prints the same labelled lines (objective + KKT residual rows) so those consumers capture the real values. The convex solver reports a single (unscaled, user-sense) objective and residuals, so the “(scaled)”/“(unscaled)” columns carry the same value.
print_logo
Print the branded POUNCE ASCII wordmark, mimicking the project logo.
print_problem_stats
print_summary
status_message