Releases: mooreneural/ProteinTensor
Release list
v0.4.0 Sparse pair storage + ProteinTensor rename
v0.4.0
Added
- Sparse (COO) pair feature storage. Store pair tensors as a radius graph instead of a dense N×N array. New API:
add_pair_feature_sparse,compute_and_store_distances_sparse,compute_and_store_contacts_sparse,read_pair_feature_sparse,list_pair_features_sparse, andSparsePairFeature.to_dense()(rehydrate for dense-only adapters). Symmetric features store the upper triangle only.
Performance (measured, lossless within cutoff)
Ca-Ca distance matrix on disk - dense vs sparse radius graph (cutoff 15 Å). The reduction grows with N because real proteins have local contact structure:
| Structure | Res | Dense | Sparse | Reduction |
|---|---|---|---|---|
| 4HHB | 574 | 1.03 MB | 81 KB | 12.9x |
| 6M0J | 791 | 1.94 MB | 112 KB | 17.4x |
| 6VXX | 2,916 | 25.0 MB | 384 KB | 65.2x |
| 6OHW | 3,525 | 36.4 MB | 481 KB | 75.6x |
Full table in benchmarks/SPARSE_PAIRS_RESULTS.md. Honest nuance: sparse is not universally smaller - dense boolean contact maps compress so well that COO index overhead can lose at small N. The win is float distance matrices and large proteins.
Changed
- Repository renamed HelixDB → ProteinTensor; all repo URLs updated.
- Benchmark tables re-run and unified on a single machine with current code.
Tests
157 passing (was 150).
Install: pip install proteintensor
v0.3.0
v0.3.0
Added
- Ligand / small-molecule support: CCD extraction from structures (
include_ligands=True),from_smiles(RDKit),read_ligands,list_ligands,add_ligand. convert-dirCLI: parallel batch conversion of a directory with progress, skip-existing, and error reporting.- Sequence-only entries can be batched with structure entries in
ProteinDataset(newhas_structuremask).
Changed
- Vectorized the
from_a3mMSA parser (up to ~4x faster).
Fixed (integrity)
- Corrected the feature-assembly speedup from a claimed 34x to the measured ~4x — the 34x came from a hardcoded A3M-cost estimate in
boltz_benchmark.py, now replaced with a realfrom_a3mmeasurement. - All README benchmark tables re-run and unified on a single machine with current code.
Tests
150 passing (was 106).
Install: pip install proteintensor
v0.2.0
v0.2.0 - Sequence input, benchmark harness, and Boltz GPU verification
Added
- Sequence →
.pttconversion. Build a sequence-only.ptt(no structure
required) - the primary input form for AlphaFold- and Boltz-style predictors:pt.from_sequence("MKT...")andpt.from_fasta("file.fasta")(single record
→ one chain; multi-record FASTA → multi-chain complex)- New CLI command:
proteintensor convert-seq <sequence|fasta> out.ptt
- Sequence-only format support. Structure tensors are now optional; entries
carry ahas_structureflag and the reader/writer skip atom/structure groups
cleanly. Format version 0.6 → 0.7. - Benchmark harness (
benchmarks/run.py) that records timestamped results to
benchmarks/results/and regeneratesbenchmarks/RESULTS.md.
Fixed
AA_1LETTERwas misaligned withAA_VOCAB(token 19, VAL, rendered asX).
Corrected and guarded with a regression test.- Synced
__version__to match the published package.
Benchmarks (measured, not projected)
- CPU format path:
.pttread is 2.2x–94.8x faster than mmCIF parsing across
16 structures, with bitwise-lossless round-trip on every one. - Boltz input-prep from
.pttis 4.0x faster than the mmCIF parse path. - Verified end-to-end Boltz-2 prediction from
.ptton an RTX 5080 (1UBQ,
102.8 s, confidence 0.92).
Note: the end-to-end Boltz time is GPU-diffusion-bound and therefore
format-independent - it is a correctness/verification result, not a format
speedup. The format's measured wins are in input prep and loading. The
MSA-caching-at-scale advantage is not yet measured on hardware and is the
target of a future update.
Tests
118 → 132 (14 new sequence tests).
Install: pip install proteintensor