warp: make the build independent of the CPU, rebuild the fonts

Merged
RI
2d ago
+263-71

What

Makes the Warp build give the same fonts on every CPU. This replaces #21, which changed only the Bézier terms and left fonts/warp unchanged, so the check "fonts/warp differs from a fresh build" kept failing.

  • NumPy chooses SIMD or BLAS kernels per CPU for powers, hypot, arctan2, sums, cumulative sums and dot products. The last bits change the curve fit. warp/loom/outline.py now uses products, scalar math calls and sums in a fixed order.
  • Tests run the fit with AVX-512 on and off (they fail on main and pass here).
  • The workflow builds a second time without AVX-512 and checks fonts/warp.
  • Second commit: fonts/warp and proofs/warp rebuilt with the new code (18 files, net +105 bytes).

Proof

pytest warp/tests                              90 passed
CPU tests on origin/main                       2 failed
CPU tests on this branch                       2 passed
build default vs AVX-512 disabled              18/18 files byte-identical
Fontspector 1.9.0 (universal)                  894 PASS, 28 WARN, 0 FAIL, 0 ERROR
fidelity maximum                               4.016 % (limit 5 %)

Notes

The OCR gate and the MATH proof need Tesseract and LuaLaTeX, which this machine lacks. The hosted warp workflow runs both. Tags (warp-v0.2.0) stay with the founder.

Summary by CodeRabbit

  • Reliability
    • Font build results are now consistent across different CPU configurations, with automated checks comparing generated files.
  • Quality
    • Updated glyph fidelity and sketch-comparison measurements. Most outline changes are limited to the final coordinate bits, though the Regular Xi outline differs by up to 2 font units.
  • Documentation
    • Updated build and validation notes, including local results and pending hosted OCR and MATH checks.