What's new
Numba IC builder — ~10× over the C++ binary in full mode
Hand-scalarized numba kernel for geometry.place_batch (the inner IC
placement that runs once per rotamer × position). Combined with the
phi/psi numba kernel introduced last release, this lifts the full-mode
numba backend from ~7.8× to ~10.2× over the C++ binary (range 7.3-11.0×)
and shaves another ~25% median off native_only=True calls — every
structure in the 11-PDB bench set (88-555 residues) now finishes in
under 0.36 s in native-only mode.
Byte-identity guarantee preserved
The IC kernel was held back from previous releases because the
backbone-clash prune compares atom distances against a hard 2.0 Å
threshold — any FP reordering that flips a borderline decision changes
which rotamers survive. The new kernel uses fastmath=False and the
same arithmetic order as the NumPy form; for length-3 vectors,
cross/dot/norm reduce to exactly the scalar ops the kernel
performs. Validation:
- All 96 in-repo byte-identity tests pass.
- Wider sweep over 77 real structures (mixed PDB + AlphaFold DB,
88-876 residues): 77/77 outputs byte-identical to the pure-NumPy IC
builder on prior releases.
Bug fix
The numba-less fallback in 0.5.0 would have routed through a Python loop
(very slow). 0.6.0 routes back to the vectorized NumPy form when numba
isn't installed — so users on a pure-Python install get the same speed
as 0.4.0.
Docs & plot
Refreshed docs/benchmark.md with new per-PDB tables (full + native-only)
and the validation note; docs/timing_vs_length.png regenerated.