Torch as a package, and a GPU step under PyTorch's eager CUDA
Python without torch becomes a smaller WebAssembly variant with torch as a verified package, the Python parser becomes hand-written and then Zipp's own, and a prepared GPU step falls to 0.27 ms against PyTorch's 0.78.
The torch work had made the Python module heavy, so this day took weight out. eb2baa1e embeds the Python library comment-stripped, token for token (57 KB smaller on the wire). 76a1f721 replaced the vendored parser's generated tables with a hand-written recursive-descent parser checked over 1.3 million mutated token streams, and c112164c replaced that with Zipp's own front end, zipp-pyparse. 7ee10b51 compiles bundled modules on first import, so a program that imports torch in the browser starts in about 300 ms instead of 560. 8e9e5d2e split torch out: the python variant is 1.68 MB on the wire, below 0.0.20's 1.71 MB, and zipp_torch.wasm (0.38 MB) adds torch at run time after the engine checks its format, ABI hash and every file's SHA-256.
On the native GPU, c3b1c38f replays a prepared step's recorded command list itself, one submit and one readback per run. 8ceb6f91 took a small MLP's step from 0.94 to 0.53 ms, under PyTorch's eager CUDA on the same RTX 5090. f6254f56 fuses kernels only where each element's arithmetic is unchanged and adds a 128x128 matmul tile (48 TFLOP/s on a 4096³ product), and 45764899 sends steps in binary and cuts a small step to 12 dispatches: 0.27 ms, 0.12 ms at eight per run, against 0.78 ms for PyTorch's eager CUDA and 0.17 ms for its CUDA graph, bit for bit the same on Vulkan, Direct3D 12 and Chrome. eaeab1f3 stopped a dxcompiler.dll on PATH from silently changing Direct3D 12's float results.