Upstream PR drafts (plan task 6-T10)¶
SPEC §6.3 ("Upstream where possible") and plans/phase-6.md owner decision D5 (b): the conductor drafts these pull requests, the owner opens them. Nothing here has been opened, forked or pushed to an upstream repository.
| Folder | Upstream | Proposed PR | Target |
|---|---|---|---|
mace-block-linear/ |
ACEsuit/mace | Block and grouped linear: cuEquivariance Linear as per-l GEMMs with frozen weights |
main at e37c858 (19 October 2026) |
mace-reassociate-first/ |
ACEsuit/mace | Reassociated first interaction: per-(receiver, sender species) edge sums before the radial projection | main at e37c858 |
oeq-no-nvcc-build/ |
PASSIONLab/OpenEquivariance | JIT host-extension build from the NVIDIA runtime wheels, without a CUDA toolkit or nvcc |
main at dc99790 (27 September 2026) |
Each folder has the PR title and description (README.md) and one self-contained .patch made with
git diff against the named upstream files. Apply with git apply <patch> from the upstream
repository root.
How the patches were made and what was verified (25 October 2026)¶
The upstream repositories were not cloned. The files each patch touches were fetched from
raw.githubusercontent.com at the commits above into scratch git repositories, edited there, and
diffed. The new modules were then run against the installed packages on the local PC (WSL2,
RTX 5060 Ti), which are older than upstream main:
| Patch | Run against | Result |
|---|---|---|
| MACE block linear | fastmace_cpu venv: MACE 0.3.16, cuEquivariance 0.13.0, torch 2.14.1+cpu; the new module loaded from the patch, tests/unit/test_block_linear.py |
13 passed (with the reassociation tests: 19 passed, run_mace_tests.py) |
| MACE reassociation | same venv; tests/unit/test_reassociate.py builds small float64 MACE models (Residual, DensityResidual, ResidualNonLinear first blocks) and compares energy and forces |
6 passed |
| OEq wheel build | tests/wheel_cuda_test.py in mace_cueq_latest: 3 passed, 1 skipped (the end-to-end test needs OEQ_TEST_WHEEL_BUILD=1). check_wheel_build.py in mace_cueq_oeq (OEq 0.7.0, torch 2.14.1+cu130): built OEq 0.7.0's host-extension sources with only the patch's flags, CUDA_HOME/CUDA_PATH unset and no nvcc on PATH, in 18–20 s; the library loaded and ldd resolved cudart, nvrtc, cublas to the nvidia/cu13 wheel and libcuda.so.1 to the driver |
pass |
Not verified:
- the patches applied to and tested inside the upstream trees (MACE main has dropped Python 3.10;
our environments are Python 3.10, so MACE main's test suite was not run). The MACE patches only add
new files and do not touch existing ones, so they apply to
e37c858by construction; the OEq patch was diffed againstdc99790'sextlib/__init__.py, which differs from 0.7.0's (SYCL backend), and its edited branch was exercised only throughcheck_wheel_build.py, not by importing the patchedopenequivariancepackage; - GPU runs of the upstream-style modules. The speed and accuracy numbers in the READMEs are FastMACE's and the research engine's measurements of the same algorithms (cited per row), not of these drafts. The drafts are plain PyTorch, without FastMACE's Triton kernels, CUDA graphs or shape rules;
- CUDA 12 wheel layouts (
nvidia/cuda_runtimeand siblings) for the OEq patch: covered by code paths only, no CUDA 12 environment was built.
run_mace_tests.py is the small runner used for the MACE tests (it loads the new modules from the
patch files into an installed MACE 0.3.16).