Release · v3.6.0
Add TPP fitter core + optimizer substrate, pinned…
Add TPP fitter core + optimizer substrate, pinned against Python goldens
Details
- tpp-optim.ts: numpy MT19937 RandomState (uniform + masked-rejection randint / Fisher-Yates shuffle / permutation), numpy pairwise summation, scipy 2-point finite-difference gradient, a faithful bound-constrained L-BFGS, and scipy's best1bin / latinhypercube differential_evolution. - tpp-core.ts: the four law forms, SSE + Huber objectives, samplers/bounds, the multi-start L-BFGS-B + DE procedure (sync + cooperative/chunked), epoch-mode array prep, TPP bins/snap/coverage-step builders, R²/RMSE, V_K/tau_K regime, and a schema-v1 dataset validator. Fidelity, honestly bounded: the RNG, pairwise sum, FD gradient and DE init are bit-exact vs Python (one 1-ULP libm-pow case documented), and predict + R²/RMSE reproduce the shipped goldens to <=1e-15 on all 524 metric checks. The iterative optimizer cannot bit-match Python (V8 Math.pow vs glibc pow, 1 ULP, compounds on the paper's proven-ill-conditioned landscape), so the widget treats the goldens as authoritative and the in-browser fit as a watch-it-converge reproduction. tests: 16 node tests (streams, pairwise, FD, DE init, the metric layer on every shipped case, TPP mechanics, regime, schema, and the procedure within theory-justified tolerances). All green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014c7dbCGbQxtWedKRSx4sJi
Files changed (4)
| frontend/client/tests/tpp-core.fixtures.json | +1 | −0 |
| frontend/client/tests/tpp-core.test.mjs | +429 | −0 |
| frontend/client/ts/effects/tpp-core.ts | +707 | −0 |
| frontend/client/ts/effects/tpp-optim.ts | +579 | −0 |