Skip to content

Tags: ylucet/CCA2

Tags

v0.1

Toggle v0.1's commit message
CCA2 v0.1

First tagged release. Cut so the SCIP feasibility spike (AI/spike/SCIP) can
run its benchmark testset against a fixed, named commit.

WHAT THIS RELEASE IS FOR

SCIP uses exactly one entry point -- convEnvCPLQ, the convex ENVELOPE of a
bivariate PLQ function over a bounded domain -- reached through the MATLAB
Engine via its own glue, and consumes the returned RatPol's V/E/F/f/den as
plain arrays. That path is the mature part of this toolbox and is what v0.1
is warranted for.

SUPPORTED

  convEnvCPLQ    convex envelope: full-domain convex quadratic; any convex
                 face; concave or indefinite quadratic over a BOUNDED
                 triangle; multi-piece bounded faces by fan triangulation.
  conj           full-domain strictly convex quadratic -> QuaPol;
                 single bounded triangle -> QuaPar;
                 general bounded or unbounded multi-face domain ->
                 QuaParCPLQ, where every face's convex envelope is affine or
                 convex.
  biconj         full-domain quadratic, and any bounded triangle (via Step
                 1's envelope, not conj-of-conj).
  Arithmetic     add, scalarMul, addQuadratic, addScaledEnergy, eval;
                 infConv, moreau, proxAverage, lasryLions.

All results are RatPar; kind() discriminates. See RETURN_TYPE.md.

NOT SUPPORTED -- see SUPPORT_MATRIX.md, which is generated from the actual
error guards and cites each by file and identifier

  partialConj for every engine and type.
  The 'pqp' and 'graph' engines.
  RatPol.conj / biconj / add.
  Case C's biconjugate (a chain of latent bugs in conjugateOfPiecePoly).
  Step 3's cross-piece maximum drops cells on SOME unbounded assemblies --
    caught by conjCPLQ's own cross-check and raised, not returned.
  Cross-case composition: QuaParCPLQ.add refuses a QuaPol/QuaPar operand.

KNOWN DEFECTS THAT RETURN A WRONG ANSWER RATHER THAN ERRORING

  mergeL / removeTangent at exact symmetric tie points.
  QuaPar.eval exactly AT a result vertex: a relative tolerance was added for
    the recorded mechanism, but the ~1.4% measurement behind it came from an
    uncommitted sweep with no recorded seed and could not be reproduced, so
    the defect is OPEN and the fix unproven. Neither defect is on the
    convex-envelope path SCIP uses.

PERFORMANCE

  General bounded domains route through the symbolic pipeline and are slow:
  conjCPLQTest is around an hour, of which one test is ~33 minutes. The
  convex-envelope path SCIP uses is fast (sub-second per call, ~7-80 ms warm
  across the bridge).

COMPATIBILITY

  QuaPoly and PLQVC are retained as aliases of QuaPol. Do not remove them
  without checking SUPPORT_MATRIX.md section 0.0 first -- SCIP depends on
  QuaPoly, and the earlier assumption that nothing external did was wrong.

Suite at the tag: 292 pass / 1 fail over 25 suites on the last full sweep,
that one failure since fixed and verified (expected 293/0). Runner:
.claude/suite.sh, per-suite timeout, CCA2_TEST_TIMEOUT to override.