PEP-1-1 Parity Coverage Matrix

Coverage for the pep2 dataset — the PEP-1-1 v2.1 CGE model ported to Pyomo (equilibria.templates.pep_pyomo). Every row compares the Pyomo solve against a GAMS reference solved by the same engine (IPOPT vs IPOPT, or PATH vs PATH), so the solver’s equality tolerance cancels and the cell-by-cell match reflects model fidelity, not solver noise.

match is the measured snapshot; the named pytest gate re-measures and enforces itlocal every row needs PATH/IPOPT + GAMS refs — no solver-free CI gate (the PEP reference is a solved GDX, not a .nl dump)

NLP vs NLP

The Pyomo model solved as an NLP (IPOPT on the raw model, nlp_scaling_method=none, faithful to GAMS’s raw solve) against the GAMS CNS reference Results.gdx. The benchmark BASE reproduces the SAM, so the seeded point is the calibration answer. Run: phase1_nlp.py --model pep --dataset pep2 --period BASE.

Scenario · formCellsMatchGateReference
basenlp317
100%local
phase1_nlp.py --form nlp / test_faithful_at_benchmarkResults.gdx (GAMS CNS, val*)

MCP vs MCP

The Pyomo model solved as a complementarity problem via PATH against the GAMS-native MCP reference (PEP-1-1_v2_1_mcp_solve.gms: MODEL /ALL/ + SOLVE USING MCP, so GAMS infers the equation↔variable pairing). The sim1 row is the reference counterfactual — a 25% export-tax cut (ttix.fx=ttixO*0.75) — applied faithfully in Python by scaling the ttixO benchmark before build. Run: phase1_nlp.py --model pep --dataset pep2 --form mcp.

Scenario · formCellsMatchGateReference
basemcp367
100%local
test_mcp_matches_gams_native_mcpResults_mcp.gdx (GAMS /ALL/ MCP)
sim1mcp314
100% (GDP_BP 46707→46748.2)local
test_mcp_sim1_shock_matches_gamsResults_mcp_sim1.gdx (GAMS MCP, ttix·0.75)

NLP↔MCP mirror

The two Pyomo forms, solved from the same feasible benchmark seed, land on the identical point (LEON, the form-defining Walras slack, is excluded). The one historical gap — PD['othind'], filled from its *O benchmark (1.132) rather than a blind 1.0 — closed the mirror to a clean 100%.

Scenario · formCellsMatchGateReference
baseboth466
100%local
test_nlp_mcp_mirrorself (NLP vs MCP, LEON excl)

objdef variant

The objdef variant adds a dummy objective (OBJDEF: OBJ==0, minimize OBJ) — the SOLVE NLP MINIMIZING OBJ lineage. A constant objective cannot move the equilibrium, so objdef-NLP lands on the exact base-NLP point; in the MCP form OBJ is not declared, keeping the system square.

Scenario · formCellsMatchGateReference
basenlp467
100% (== base-NLP)local
test_objdef_variant_equals_base_nlpself (objdef vs base)
basemcp358
square, code=1local
test_objdef_mcp_is_square_and_solvesself (objdef+MCP squareness)