pounce-common
Common primitives used across the POUNCE workspace. Port of Ipopt's
src/Common/.
This is an internal crate — most users interact with POUNCE through
pounce-cli, pounce-nlp, or
pounce-cinterface. The types re-exported
here surface in those public APIs.
What's in it
| Module | Purpose | Ipopt counterpart |
|---|---|---|
types |
Number = f64, Index = i32, NLP_{LOWER,UPPER}_BOUND_INF |
IpTypes.hpp |
exception |
SolverException + ExceptionKind — no panic! in the algorithm path |
IpException.hpp |
journalist |
Journalist, Journal, FileJournal, StringJournal — log routing |
IpJournalist.{hpp,cpp} |
options_list |
OptionsList — typed get/set with default fallback |
IpOptionsList.{hpp,cpp} |
reg_options |
RegisteredOptions — option registry with types, ranges, defaults |
IpRegOptions.{hpp,cpp} |
tagged |
TaggedObject + TaggedCell — change-tracking for cached quantities |
IpTaggedObject.hpp |
cached |
Cache<T> — tagged-key lookup for IpoptCalculatedQuantities |
IpCachedResults.hpp |
timing |
TimedTask — wall-clock accumulator |
IpTimingStatistics.{hpp,cpp} |
utils |
small helpers (string parsing, etc.) | IpUtils.{hpp,cpp} |
Conventions
Indexisi32to match upstream'sipindex. Sizes that exceedi32are not supported (mirrors upstream).Numberisf64. No generics over scalar type.- The
tagged/cachedpair is the workhorse for invalidation: when any iterate component changes, itsTagbumps and downstream caches miss automatically. This is how the algorithm avoids re-evaluating callbacks unnecessarily.
License
EPL-2.0, matching upstream Ipopt.