Skip to content

v0.6.0

Latest

Choose a tag to compare

@timodonnell timodonnell released this 04 Jun 00:33

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.