Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .github/workflows/warp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,25 @@ jobs:
exit 1
fi

- name: Check the build without AVX-512
env:
NPY_DISABLE_CPU_FEATURES: "X86_V4 AVX512_ICL AVX512_SKX AVX512F"
Comment thread
ricardofrantz marked this conversation as resolved.
Resolved
RAYON_NUM_THREADS: "2"
run: |
# On a runner without AVX-512 this build repeats the first one and
# proves nothing new; the CPU tests in pytest cover that case.
if grep -qw avx512f /proc/cpuinfo; then
echo "AVX-512 is present: this build uses the other NumPy code path."
else
echo "::warning::This runner has no AVX-512, so this build repeats the default build."
fi
scripts/build.sh
if [ -n "$(git -C .. status --porcelain -- fonts/warp)" ]; then
git -C .. status --short -- fonts/warp
echo "::error::fonts/warp differs from a fresh build without AVX-512."
exit 1
fi

- name: Check the outlines against the pen sweep (fidelity report)
run: |
python tools/fidelity.py --gate
Expand Down
Binary file modified fonts/warp/otf/MachineMadeWarp-Bold.otf
Binary file not shown.
Binary file modified fonts/warp/otf/MachineMadeWarp-BoldItalic.otf
Binary file not shown.
Binary file modified fonts/warp/otf/MachineMadeWarp-Regular.otf
Binary file not shown.
Binary file modified fonts/warp/ttf/MachineMadeWarp-Bold.ttf
Binary file not shown.
Binary file modified fonts/warp/ttf/MachineMadeWarp-BoldItalic.ttf
Binary file not shown.
Binary file modified fonts/warp/ttf/MachineMadeWarp-Regular.ttf
Binary file not shown.
Binary file modified fonts/warp/webfonts/MachineMadeWarp-Bold.woff2
Binary file not shown.
Binary file modified fonts/warp/webfonts/MachineMadeWarp-BoldItalic.woff2
Binary file not shown.
Binary file modified fonts/warp/webfonts/MachineMadeWarp-Regular.woff2
Binary file not shown.
64 changes: 32 additions & 32 deletions proofs/warp/fidelity.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"16": {
"max": 0.03938,
"max_glyph": "underscore",
"mean": 0.00982,
"mean": 0.00983,
"p95": 0.01643,
"pass": true
},
Expand Down Expand Up @@ -1699,10 +1699,10 @@
"128": 0.02046
},
"brevecomb.case": {
"16": 0.00722,
"32": 0.01218,
"64": 0.01606,
"128": 0.0169
"16": 0.00774,
"32": 0.01233,
"64": 0.01654,
"128": 0.01813
},
"hungarumlautcomb": {
"16": 0.01047,
Expand Down Expand Up @@ -6781,16 +6781,16 @@
},
"glyphs": {
"exclam": {
"16": 0.00628,
"32": 0.00663,
"64": 0.0074,
"128": 0.00769
"16": 0.00634,
"32": 0.00669,
"64": 0.00748,
"128": 0.00771
},
"quotedbl": {
"16": 0.00991,
"32": 0.01192,
"64": 0.01289,
"128": 0.01321
"16": 0.01003,
"32": 0.01203,
"64": 0.01285,
"128": 0.01323
},
"numbersign": {
"16": 0.00579,
Expand All @@ -6817,10 +6817,10 @@
"128": 0.00847
},
"quotesingle": {
"16": 0.01098,
"32": 0.01185,
"64": 0.01301,
"128": 0.0133
"16": 0.01121,
"32": 0.01208,
"64": 0.01294,
"128": 0.01334
},
"parenleft": {
"16": 0.00505,
Expand Down Expand Up @@ -7003,10 +7003,10 @@
"128": 0.00879
},
"F": {
"16": 0.0064,
"32": 0.0067,
"16": 0.00639,
"32": 0.00668,
"64": 0.00727,
"128": 0.00775
"128": 0.00769
},
"G": {
"16": 0.00741,
Expand Down Expand Up @@ -7489,10 +7489,10 @@
"128": 0.01116
},
"sterling": {
"16": 0.0073,
"32": 0.00886,
"64": 0.00959,
"128": 0.0099
"16": 0.00727,
"32": 0.00888,
"64": 0.00962,
"128": 0.00994
},
"yen": {
"16": 0.00536,
Expand Down Expand Up @@ -8107,10 +8107,10 @@
"128": 0.0101
},
"universal": {
"16": 0.01083,
"32": 0.01149,
"64": 0.01172,
"128": 0.01184
"16": 0.01093,
"32": 0.01153,
"64": 0.01176,
"128": 0.01185
},
"existential": {
"16": 0.00959,
Expand Down Expand Up @@ -11473,10 +11473,10 @@
"128": 0.0101
},
"universal": {
"16": 0.01083,
"32": 0.01149,
"64": 0.01172,
"128": 0.01184
"16": 0.01093,
"32": 0.01153,
"64": 0.01176,
"128": 0.01185
},
"existential": {
"16": 0.00959,
Expand Down
4 changes: 2 additions & 2 deletions proofs/warp/sketch-compare.json
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@
"C": 0.7934,
"D": 0.7719,
"E": 0.8016,
"F": 0.843,
"F": 0.8434,
"G": 0.7972,
"H": 0.7912,
"I": 0.9375,
Expand Down Expand Up @@ -331,7 +331,7 @@
";": 0.9129,
"!": 0.9881,
"?": 0.8079,
"'": 0.9886,
"'": 0.9915,
"’": 0.9115,
"-": 0.8907,
"–": 0.9456,
Expand Down
Binary file modified proofs/warp/warp-charset-bold.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified proofs/warp/warp-charset-bolditalic.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified proofs/warp/warp-charset-regular.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified proofs/warp/warp-kerning.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified proofs/warp/warp-latin-ext.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified proofs/warp/warp-sketch-vs-font-bold.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified proofs/warp/warp-smallcaps-figures.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions warp/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@

### Changed

- The build output no longer depends on the CPU path used by NumPy. `fonts/warp` and the fidelity, sketch and charset proofs in `proofs/warp` were rebuilt. The OCR report and the MATH image were not rebuilt and still come from the 28 October build. Most outlines change only in the last bits of their coordinates; the largest known change is in the Xi (Regular) outline, which moved by up to 2 font units because of the CPU-dependent curve fit.
- g: the lower loop closes on the link (OCR read it as a comma).
- f, ff: a firmer hook with a larger drop. fi fl: the bar stops short of
the i and the l; the f of fl ends in its own drop.
Expand Down
54 changes: 49 additions & 5 deletions warp/STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,54 @@
| --- | --- |
| Family | machine-made Warp, machine-made Warp Display |
| Version | 0.2 (font version 0.200) |
| Pull request | branch `warp/v0.2` (PR open for review) |
| Pull request | CPU build fix prepared for review |
| Stage | Warp 0.2 built: 6 static styles (TTF hinted, OTF, WOFF2) with an OpenType MATH table |
| Gate now | Jac reviews the PR; the founder reviews the proofs by eye |
| Gate now | The founder reviews the rebuilt proof sheets by eye. The OCR gate runs on the hosted workflow. The MATH proof stays an open local check: it is not run in CI, and this machine cannot load `luaotfload` |
| Next | Release 0.2 (tag `warp-v0.2.0`). Then 0.3 (variable font, branch `warp/v0.3`) |
| Last local run | 2026-10-28: build twice (byte-identical), fidelity (max 4.0 %), OCR gate, Fontspector 1.9.0 (0 FAIL, 0 ERROR), LuaLaTeX maths proof, site build, pytest (88 passed) |
| Last green CI | see the PR |
| Last local run | 2026-11-07: pytest (90 passed), 3 full builds, both CPU comparisons byte-identical, fidelity (max 4.016 %), Fontspector 1.9.0 (0 FAIL, 0 ERROR), proof sheets rebuilt except MATH; OCR and MATH checks blocked by missing tools |
| Last green CI | Pending for the CPU build fix |

## CPU build check (2026-11-07)

The outline fit uses products for powers, scalar math for distances and
angles, and a fixed order for sums. It does not use BLAS. The pen model
and the fit limits stay the same.

The build is reproducible across the two tested CPU paths. A fresh build
with the default features and a fresh build with AVX-512 off each matched
all 18 rebuilt font files, byte for byte. This was checked on one machine.
The hosted CI run is still needed as a check on another machine.

The outline fidelity gate passes: the maximum ink difference is 4.016 %
(limit 5 %). Fontspector 1.9.0 passes on all 12 TTF and OTF files, with
0 FAIL and 0 ERROR. The checks used the universal profile with network
checks off. JSON reports were written; Markdown export could not write
its template cache.

The proof sheets were rebuilt. Two local checks remain open: Tesseract
Comment thread
ricardofrantz marked this conversation as resolved.
Resolved
is not installed, so the OCR gate could not run. LuaLaTeX cannot load
`luaotfload-main`, so the MATH proof could not be rebuilt. The old OCR
report and MATH image stay in place; they are not evidence for this run.

Two tests use separate processes with the default CPU features and with
AVX-512 off. One checks curve points, the fit, and corner angles. The
other builds the small glyph set needed to check the Greek capital Xi:
Xi, .notdef, and o for hinting. It compares every byte of the hinted TTF,
OTF, and WOFF2 files. Both tests fail with the old arithmetic and pass
with the fixed code.

From the repo root, with the build tools on PATH, run:

```sh
RAYON_NUM_THREADS=2 WARP_JOBS=1 warp/scripts/build.sh
NPY_DISABLE_CPU_FEATURES="X86_V4 AVX512_ICL AVX512_SKX AVX512F" \
RAYON_NUM_THREADS=2 WARP_JOBS=1 warp/scripts/build.sh
RAYON_NUM_THREADS=2 python -m pytest warp/tests -k cpu_features
```

CI checks each build against the committed fonts. Any byte change fails
the check. GNU cmp has no recursive mode: for a local folder check,
compare the file lists, then run `cmp` on each pair of files.

## Proven (local run, 2026-10-28)

Expand All @@ -25,7 +67,7 @@
- Fontspector 1.9.0, universal profile: 0 FAIL, 0 ERROR on the 6 TTF and
the 6 OTF (accepted WARNs below).
- Outline fidelity (`proofs/warp/fidelity.json`): every drawn glyph of
every style against an independent fill of its pen sweep; FIDMAX.
every style against an independent fill of its pen sweep.
Limit 5 %.
- OCR readability gate (`proofs/warp/readability.json`): see below.
- LuaLaTeX and unicode-math set a page of formulas with the MATH table
Expand All @@ -36,6 +78,8 @@

## Readability (OCR)

Results of 2026-10-28, from the 0.2 build before the CPU-independent rebuild of 2026-11-07. The hosted workflow reruns the gate on every change.

| Style | Warp 0.2 CER | Warp 0.1 CER | DejaVu Serif | Limit | Result |
| --- | --- | --- | --- | --- | --- |
| Regular | 0.0018 | 0.0234 | 0.0012 | 0.0312 | pass |
Expand Down
Loading
Loading