boltz2-python-client 0.3.0__tar.gz → 0.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {boltz2_python_client-0.3.0/boltz2_python_client.egg-info → boltz2_python_client-0.3.2}/PKG-INFO +116 -1
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/README.md +115 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_client/__init__.py +35 -1
- boltz2_python_client-0.3.2/boltz2_client/a3m_to_csv_converter.py +1661 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_client/cli.py +394 -0
- boltz2_python_client-0.3.2/boltz2_client/data/__init__.py +3 -0
- boltz2_python_client-0.3.2/boltz2_client/data/speclist.txt +59804 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2/boltz2_python_client.egg-info}/PKG-INFO +116 -1
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_python_client.egg-info/SOURCES.txt +26 -2
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/12_msa_affinity_prediction.py +16 -8
- boltz2_python_client-0.3.2/examples/15_a3m_to_multimer_csv.py +367 -0
- boltz2_python_client-0.3.2/examples/barnase_barstar_with_msa.py +214 -0
- boltz2_python_client-0.3.2/examples/cdk4_msa_affinity/cdk4_direct.a3m +202 -0
- boltz2_python_client-0.3.2/examples/cdk4_msa_affinity/cdk4_msa.a3m +2 -0
- boltz2_python_client-0.3.2/examples/cdk4_msa_affinity/cdk4_simple.a3m +202 -0
- boltz2_python_client-0.3.2/examples/cdk4_msa_affinity_example.py +307 -0
- boltz2_python_client-0.3.2/examples/debug_msa_conversion.py +201 -0
- boltz2_python_client-0.3.2/examples/dimer_examples.py +145 -0
- boltz2_python_client-0.3.2/examples/fix_cdk4_msa_search.py +201 -0
- boltz2_python_client-0.3.2/examples/multimer_file_output_example.py +119 -0
- boltz2_python_client-0.3.2/examples/multimer_msa_example.py +214 -0
- boltz2_python_client-0.3.2/examples/quick_barnase_barstar.py +76 -0
- boltz2_python_client-0.3.2/examples/quick_barnase_barstar_msa.py +157 -0
- boltz2_python_client-0.3.2/examples/quick_gcn4_homodimer.py +62 -0
- boltz2_python_client-0.3.2/examples/quick_heterodimer_example.py +57 -0
- boltz2_python_client-0.3.2/examples/quick_msa_test.py +51 -0
- boltz2_python_client-0.3.2/examples/simple_dimer_examples.py +125 -0
- boltz2_python_client-0.3.2/examples/test_boltz2_server.py +195 -0
- boltz2_python_client-0.3.2/examples/test_cdk4_msa_fixed.py +178 -0
- boltz2_python_client-0.3.2/examples/test_cdk4_msa_simple.py +73 -0
- boltz2_python_client-0.3.2/examples/test_msa_a3m_simple.py +165 -0
- boltz2_python_client-0.3.2/examples/test_msa_endpoint.py +76 -0
- boltz2_python_client-0.3.2/examples/test_notebook_fixes.py +98 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/pyproject.toml +2 -1
- boltz2_python_client-0.3.0/INSTALL_TESTPYPI.md +0 -122
- boltz2_python_client-0.3.0/examples/boltz2_complete_demo.py +0 -247
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/ASYNC_GUIDE.md +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/COVALENT_COMPLEX_GUIDE.md +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/LICENSE +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/MANIFEST.in +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/PARAMETERS.md +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/YAML_GUIDE.md +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_client/__main__.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_client/client.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_client/exceptions.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_client/models.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_client/models_affinity.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_client/msa_search.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_client/multi_endpoint_client.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_client/utils.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_client/virtual_screening.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_python_client.egg-info/dependency_links.txt +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_python_client.egg-info/entry_points.txt +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_python_client.egg-info/requires.txt +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/boltz2_python_client.egg-info/top_level.txt +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/01_basic_protein_folding.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/02_protein_structure_prediction_with_msa.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/03_protein_ligand_complex.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/04_covalent_bonding.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/05_dna_protein_complex.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/06_yaml_configurations.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/07_advanced_parameters.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/08_affinity_prediction_simple.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/09_virtual_screening.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/10_msa_search_integration.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/11_msa_search_large_protein.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/comprehensive_multi_endpoint_demo.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/msa-kras-g12c_combined.a3m +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/msa_search_simple_demo.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/multi_endpoint_screening.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/multi_protein_complex.yaml +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/protein_ligand.yaml +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/examples/sars_cov2_mpro_nirmatrelvir.yaml +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/licenses/PyYAML-LICENSE +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/licenses/README.md +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/licenses/aiofiles-LICENSE +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/licenses/click-LICENSE +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/licenses/httpx-LICENSE +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/licenses/py3Dmol-LICENSE +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/licenses/pydantic-LICENSE +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/licenses/rich-LICENSE +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/licenses/typing-extensions-LICENSE +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/setup.cfg +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/tests/__init__.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/tests/conftest.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/tests/test_basic.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/tests/test_cli_multi_endpoint.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/tests/test_comprehensive_stress.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/tests/test_examples_syntax.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/tests/test_integration_scenarios.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/tests/test_msa_search.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/tests/test_multi_endpoint_functionality.py +0 -0
- {boltz2_python_client-0.3.0 → boltz2_python_client-0.3.2}/tests/test_real_endpoints.py +0 -0
{boltz2_python_client-0.3.0/boltz2_python_client.egg-info → boltz2_python_client-0.3.2}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boltz2-python-client
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: Python client for Boltz-2 protein structure prediction API with covalent complex and multi-endpoint support
|
|
5
5
|
Author-email: NVIDIA Corporation <bionemo-support@nvidia.com>
|
|
6
6
|
Maintainer-email: NVIDIA Corporation <bionemo-support@nvidia.com>
|
|
@@ -58,6 +58,8 @@ A comprehensive Python client for NVIDIA's Boltz-2 biomolecular structure predic
|
|
|
58
58
|
- ✅ **Affinity Prediction** - Predict binding affinity (IC50) for protein-ligand complexes
|
|
59
59
|
- ✅ **Virtual Screening** - High-level API for drug discovery campaigns
|
|
60
60
|
- ✅ **MSA Search Integration** - GPU-accelerated MSA generation with NVIDIA MSA Search NIM
|
|
61
|
+
- ✅ **A3M to Multimer MSA** - Convert ColabFold A3M files to paired multimer format (NEW)
|
|
62
|
+
- ✅ **Multi-Endpoint Load Balancing** - Distribute predictions across multiple NIMs
|
|
61
63
|
- ✅ **Comprehensive Examples** - Ready-to-use code samples
|
|
62
64
|
|
|
63
65
|
## 📦 **Installation**
|
|
@@ -109,6 +111,7 @@ async def quick_prediction():
|
|
|
109
111
|
|
|
110
112
|
if __name__ == "__main__":
|
|
111
113
|
asyncio.run(quick_prediction())
|
|
114
|
+
```
|
|
112
115
|
|
|
113
116
|
### CLI Usage
|
|
114
117
|
|
|
@@ -139,6 +142,16 @@ boltz2 msa-predict "PROTEIN_SEQUENCE" --databases Uniref30_2302 --max-sequences
|
|
|
139
142
|
|
|
140
143
|
# MSA search + ligand affinity
|
|
141
144
|
boltz2 msa-ligand "PROTEIN_SEQUENCE" --smiles "LIGAND_SMILES" --predict-affinity
|
|
145
|
+
|
|
146
|
+
# Convert ColabFold A3M files to paired multimer CSV
|
|
147
|
+
boltz2 convert-msa chain_A.a3m chain_B.a3m -c A,B -o paired.csv
|
|
148
|
+
|
|
149
|
+
# One-command multimer prediction from A3M files (NEW)
|
|
150
|
+
boltz2 multimer-msa chain_A.a3m chain_B.a3m -c A,B -o complex.cif
|
|
151
|
+
|
|
152
|
+
# Multi-endpoint multimer prediction
|
|
153
|
+
boltz2 --multi-endpoint --base-url "http://gpu1:8000,http://gpu2:8000" \
|
|
154
|
+
multimer-msa chain_A.a3m chain_B.a3m -c A,B -o complex.cif
|
|
142
155
|
```
|
|
143
156
|
|
|
144
157
|
### Affinity Prediction
|
|
@@ -203,6 +216,103 @@ msa_path = await client.search_msa(
|
|
|
203
216
|
|
|
204
217
|
See the [MSA Search Guide](MSA_SEARCH_GUIDE.md) for detailed usage and parameters.
|
|
205
218
|
|
|
219
|
+
### A3M to Multimer MSA Conversion (NEW)
|
|
220
|
+
|
|
221
|
+
Convert ColabFold-generated A3M monomer MSA files to paired multimer format for Boltz2:
|
|
222
|
+
|
|
223
|
+
```python
|
|
224
|
+
from boltz2_client import (
|
|
225
|
+
Boltz2Client,
|
|
226
|
+
convert_a3m_to_multimer_csv,
|
|
227
|
+
create_paired_msa_per_chain,
|
|
228
|
+
Polymer, PredictionRequest
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
# Convert A3M files to paired MSA (auto-detects pairing mode)
|
|
232
|
+
result = convert_a3m_to_multimer_csv(
|
|
233
|
+
a3m_files={'A': 'chain_A.a3m', 'B': 'chain_B.a3m'}
|
|
234
|
+
)
|
|
235
|
+
print(f"Paired {result.num_pairs} sequences")
|
|
236
|
+
|
|
237
|
+
# Create per-chain MSA structures for Boltz2
|
|
238
|
+
msa_per_chain = create_paired_msa_per_chain(result)
|
|
239
|
+
|
|
240
|
+
# Create polymers with paired MSA
|
|
241
|
+
protein_A = Polymer(id="A", molecule_type="protein",
|
|
242
|
+
sequence=result.query_sequences['A'],
|
|
243
|
+
msa=msa_per_chain['A'])
|
|
244
|
+
protein_B = Polymer(id="B", molecule_type="protein",
|
|
245
|
+
sequence=result.query_sequences['B'],
|
|
246
|
+
msa=msa_per_chain['B'])
|
|
247
|
+
|
|
248
|
+
# Predict complex structure
|
|
249
|
+
client = Boltz2Client(base_url="http://localhost:8000")
|
|
250
|
+
response = await client.predict(PredictionRequest(
|
|
251
|
+
polymers=[protein_A, protein_B],
|
|
252
|
+
recycling_steps=3,
|
|
253
|
+
sampling_steps=200
|
|
254
|
+
))
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
#### CLI One-Command Prediction
|
|
258
|
+
```bash
|
|
259
|
+
# Predict directly from A3M files (converts + predicts in one step)
|
|
260
|
+
boltz2 --base-url http://localhost:8000 multimer-msa \
|
|
261
|
+
chain_A.a3m chain_B.a3m \
|
|
262
|
+
-c A,B \
|
|
263
|
+
-o complex.cif
|
|
264
|
+
|
|
265
|
+
# Save all outputs: structure, paired CSVs, and confidence scores
|
|
266
|
+
boltz2 --base-url http://localhost:8000 multimer-msa \
|
|
267
|
+
chain_A.a3m chain_B.a3m \
|
|
268
|
+
-c A,B \
|
|
269
|
+
-o complex.cif \
|
|
270
|
+
--save-csv \ # Save paired CSV files
|
|
271
|
+
--save-all # Save scores JSON (confidence, pLDDT, pTM, etc.)
|
|
272
|
+
|
|
273
|
+
# With multi-endpoint load balancing
|
|
274
|
+
boltz2 --multi-endpoint \
|
|
275
|
+
--base-url "http://gpu1:8000,http://gpu2:8000,http://gpu3:8000" \
|
|
276
|
+
multimer-msa chain_A.a3m chain_B.a3m -c A,B -o complex.cif --save-all
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
**Output files with `--save-all --save-csv`:**
|
|
280
|
+
```
|
|
281
|
+
output/
|
|
282
|
+
├── complex.cif # 3D structure (mmCIF)
|
|
283
|
+
├── complex.scores.json # Confidence scores, pLDDT, pTM, metrics
|
|
284
|
+
├── complex_chain_A.csv # Paired MSA for chain A
|
|
285
|
+
└── complex_chain_B.csv # Paired MSA for chain B
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
#### Save All Outputs (Python API)
|
|
289
|
+
```python
|
|
290
|
+
from boltz2_client import save_prediction_outputs, get_prediction_summary
|
|
291
|
+
|
|
292
|
+
# Save all outputs with one function call
|
|
293
|
+
paths = save_prediction_outputs(
|
|
294
|
+
response=response,
|
|
295
|
+
output_dir=Path("results"),
|
|
296
|
+
base_name="my_complex",
|
|
297
|
+
save_structure=True, # Save CIF file(s)
|
|
298
|
+
save_scores=True, # Save scores JSON
|
|
299
|
+
save_csv=True, # Save paired CSVs
|
|
300
|
+
conversion_result=result # From convert_a3m_to_multimer_csv
|
|
301
|
+
)
|
|
302
|
+
print(paths)
|
|
303
|
+
# {'structure': Path('results/my_complex.cif'),
|
|
304
|
+
# 'scores': Path('results/my_complex.scores.json'),
|
|
305
|
+
# 'csv_A': Path('results/my_complex_chain_A.csv'),
|
|
306
|
+
# 'csv_B': Path('results/my_complex_chain_B.csv')}
|
|
307
|
+
|
|
308
|
+
# Get a quick summary of prediction quality
|
|
309
|
+
summary = get_prediction_summary(response)
|
|
310
|
+
print(f"Confidence: {summary['confidence']:.2f}")
|
|
311
|
+
print(f"Quality: {summary['quality_assessment']}") # Very High/High/Medium/Low
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
See the [A3M to Multimer MSA Guide](examples/A3M_TO_MULTIMER_MSA.md) for detailed usage.
|
|
315
|
+
|
|
206
316
|
### Virtual Screening
|
|
207
317
|
|
|
208
318
|
```python
|
|
@@ -420,6 +530,9 @@ The `examples/` directory contains comprehensive examples:
|
|
|
420
530
|
- **06_yaml_configurations.py** - YAML config files
|
|
421
531
|
- **07_advanced_parameters.py** - Advanced API parameters
|
|
422
532
|
- **08_affinity_prediction.py** - Binding affinity prediction (IC50/pIC50)
|
|
533
|
+
- **15_a3m_to_multimer_csv.py** - A3M to multimer MSA conversion
|
|
534
|
+
- **16_colabfold_a3m_to_multimer.ipynb** - Interactive notebook for multimer MSA (NEW)
|
|
535
|
+
- **A3M_TO_MULTIMER_MSA.md** - Comprehensive guide for A3M conversion (NEW)
|
|
423
536
|
|
|
424
537
|
## 🧪 **Supported Prediction Types**
|
|
425
538
|
|
|
@@ -595,10 +708,12 @@ Third-party dependencies are licensed under their respective licenses - see the
|
|
|
595
708
|
|
|
596
709
|
### Guides
|
|
597
710
|
- **[MSA Search Guide](MSA_SEARCH_GUIDE.md)** - GPU-accelerated MSA generation with NVIDIA MSA Search NIM
|
|
711
|
+
- **[A3M to Multimer MSA Guide](examples/A3M_TO_MULTIMER_MSA.md)** - Convert ColabFold A3M files to paired multimer format (NEW)
|
|
598
712
|
- **[Affinity Prediction Guide](AFFINITY_PREDICTION_GUIDE.md)** - Comprehensive guide for binding affinity prediction
|
|
599
713
|
- **[YAML Configuration Guide](YAML_GUIDE.md)** - Working with YAML configuration files
|
|
600
714
|
- **[Async Programming Guide](ASYNC_GUIDE.md)** - Best practices for async operations
|
|
601
715
|
- **[Covalent Complex Guide](COVALENT_COMPLEX_GUIDE.md)** - Predicting covalent bonds
|
|
716
|
+
- **[Multi-Endpoint Guide](MULTI_ENDPOINT_GUIDE.md)** - Load balancing across multiple NIMs
|
|
602
717
|
- **[Parameters Guide](PARAMETERS.md)** - Detailed parameter documentation
|
|
603
718
|
|
|
604
719
|
## 🔗 **Links**
|
|
@@ -20,6 +20,8 @@ A comprehensive Python client for NVIDIA's Boltz-2 biomolecular structure predic
|
|
|
20
20
|
- ✅ **Affinity Prediction** - Predict binding affinity (IC50) for protein-ligand complexes
|
|
21
21
|
- ✅ **Virtual Screening** - High-level API for drug discovery campaigns
|
|
22
22
|
- ✅ **MSA Search Integration** - GPU-accelerated MSA generation with NVIDIA MSA Search NIM
|
|
23
|
+
- ✅ **A3M to Multimer MSA** - Convert ColabFold A3M files to paired multimer format (NEW)
|
|
24
|
+
- ✅ **Multi-Endpoint Load Balancing** - Distribute predictions across multiple NIMs
|
|
23
25
|
- ✅ **Comprehensive Examples** - Ready-to-use code samples
|
|
24
26
|
|
|
25
27
|
## 📦 **Installation**
|
|
@@ -71,6 +73,7 @@ async def quick_prediction():
|
|
|
71
73
|
|
|
72
74
|
if __name__ == "__main__":
|
|
73
75
|
asyncio.run(quick_prediction())
|
|
76
|
+
```
|
|
74
77
|
|
|
75
78
|
### CLI Usage
|
|
76
79
|
|
|
@@ -101,6 +104,16 @@ boltz2 msa-predict "PROTEIN_SEQUENCE" --databases Uniref30_2302 --max-sequences
|
|
|
101
104
|
|
|
102
105
|
# MSA search + ligand affinity
|
|
103
106
|
boltz2 msa-ligand "PROTEIN_SEQUENCE" --smiles "LIGAND_SMILES" --predict-affinity
|
|
107
|
+
|
|
108
|
+
# Convert ColabFold A3M files to paired multimer CSV
|
|
109
|
+
boltz2 convert-msa chain_A.a3m chain_B.a3m -c A,B -o paired.csv
|
|
110
|
+
|
|
111
|
+
# One-command multimer prediction from A3M files (NEW)
|
|
112
|
+
boltz2 multimer-msa chain_A.a3m chain_B.a3m -c A,B -o complex.cif
|
|
113
|
+
|
|
114
|
+
# Multi-endpoint multimer prediction
|
|
115
|
+
boltz2 --multi-endpoint --base-url "http://gpu1:8000,http://gpu2:8000" \
|
|
116
|
+
multimer-msa chain_A.a3m chain_B.a3m -c A,B -o complex.cif
|
|
104
117
|
```
|
|
105
118
|
|
|
106
119
|
### Affinity Prediction
|
|
@@ -165,6 +178,103 @@ msa_path = await client.search_msa(
|
|
|
165
178
|
|
|
166
179
|
See the [MSA Search Guide](MSA_SEARCH_GUIDE.md) for detailed usage and parameters.
|
|
167
180
|
|
|
181
|
+
### A3M to Multimer MSA Conversion (NEW)
|
|
182
|
+
|
|
183
|
+
Convert ColabFold-generated A3M monomer MSA files to paired multimer format for Boltz2:
|
|
184
|
+
|
|
185
|
+
```python
|
|
186
|
+
from boltz2_client import (
|
|
187
|
+
Boltz2Client,
|
|
188
|
+
convert_a3m_to_multimer_csv,
|
|
189
|
+
create_paired_msa_per_chain,
|
|
190
|
+
Polymer, PredictionRequest
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
# Convert A3M files to paired MSA (auto-detects pairing mode)
|
|
194
|
+
result = convert_a3m_to_multimer_csv(
|
|
195
|
+
a3m_files={'A': 'chain_A.a3m', 'B': 'chain_B.a3m'}
|
|
196
|
+
)
|
|
197
|
+
print(f"Paired {result.num_pairs} sequences")
|
|
198
|
+
|
|
199
|
+
# Create per-chain MSA structures for Boltz2
|
|
200
|
+
msa_per_chain = create_paired_msa_per_chain(result)
|
|
201
|
+
|
|
202
|
+
# Create polymers with paired MSA
|
|
203
|
+
protein_A = Polymer(id="A", molecule_type="protein",
|
|
204
|
+
sequence=result.query_sequences['A'],
|
|
205
|
+
msa=msa_per_chain['A'])
|
|
206
|
+
protein_B = Polymer(id="B", molecule_type="protein",
|
|
207
|
+
sequence=result.query_sequences['B'],
|
|
208
|
+
msa=msa_per_chain['B'])
|
|
209
|
+
|
|
210
|
+
# Predict complex structure
|
|
211
|
+
client = Boltz2Client(base_url="http://localhost:8000")
|
|
212
|
+
response = await client.predict(PredictionRequest(
|
|
213
|
+
polymers=[protein_A, protein_B],
|
|
214
|
+
recycling_steps=3,
|
|
215
|
+
sampling_steps=200
|
|
216
|
+
))
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
#### CLI One-Command Prediction
|
|
220
|
+
```bash
|
|
221
|
+
# Predict directly from A3M files (converts + predicts in one step)
|
|
222
|
+
boltz2 --base-url http://localhost:8000 multimer-msa \
|
|
223
|
+
chain_A.a3m chain_B.a3m \
|
|
224
|
+
-c A,B \
|
|
225
|
+
-o complex.cif
|
|
226
|
+
|
|
227
|
+
# Save all outputs: structure, paired CSVs, and confidence scores
|
|
228
|
+
boltz2 --base-url http://localhost:8000 multimer-msa \
|
|
229
|
+
chain_A.a3m chain_B.a3m \
|
|
230
|
+
-c A,B \
|
|
231
|
+
-o complex.cif \
|
|
232
|
+
--save-csv \ # Save paired CSV files
|
|
233
|
+
--save-all # Save scores JSON (confidence, pLDDT, pTM, etc.)
|
|
234
|
+
|
|
235
|
+
# With multi-endpoint load balancing
|
|
236
|
+
boltz2 --multi-endpoint \
|
|
237
|
+
--base-url "http://gpu1:8000,http://gpu2:8000,http://gpu3:8000" \
|
|
238
|
+
multimer-msa chain_A.a3m chain_B.a3m -c A,B -o complex.cif --save-all
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**Output files with `--save-all --save-csv`:**
|
|
242
|
+
```
|
|
243
|
+
output/
|
|
244
|
+
├── complex.cif # 3D structure (mmCIF)
|
|
245
|
+
├── complex.scores.json # Confidence scores, pLDDT, pTM, metrics
|
|
246
|
+
├── complex_chain_A.csv # Paired MSA for chain A
|
|
247
|
+
└── complex_chain_B.csv # Paired MSA for chain B
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
#### Save All Outputs (Python API)
|
|
251
|
+
```python
|
|
252
|
+
from boltz2_client import save_prediction_outputs, get_prediction_summary
|
|
253
|
+
|
|
254
|
+
# Save all outputs with one function call
|
|
255
|
+
paths = save_prediction_outputs(
|
|
256
|
+
response=response,
|
|
257
|
+
output_dir=Path("results"),
|
|
258
|
+
base_name="my_complex",
|
|
259
|
+
save_structure=True, # Save CIF file(s)
|
|
260
|
+
save_scores=True, # Save scores JSON
|
|
261
|
+
save_csv=True, # Save paired CSVs
|
|
262
|
+
conversion_result=result # From convert_a3m_to_multimer_csv
|
|
263
|
+
)
|
|
264
|
+
print(paths)
|
|
265
|
+
# {'structure': Path('results/my_complex.cif'),
|
|
266
|
+
# 'scores': Path('results/my_complex.scores.json'),
|
|
267
|
+
# 'csv_A': Path('results/my_complex_chain_A.csv'),
|
|
268
|
+
# 'csv_B': Path('results/my_complex_chain_B.csv')}
|
|
269
|
+
|
|
270
|
+
# Get a quick summary of prediction quality
|
|
271
|
+
summary = get_prediction_summary(response)
|
|
272
|
+
print(f"Confidence: {summary['confidence']:.2f}")
|
|
273
|
+
print(f"Quality: {summary['quality_assessment']}") # Very High/High/Medium/Low
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
See the [A3M to Multimer MSA Guide](examples/A3M_TO_MULTIMER_MSA.md) for detailed usage.
|
|
277
|
+
|
|
168
278
|
### Virtual Screening
|
|
169
279
|
|
|
170
280
|
```python
|
|
@@ -382,6 +492,9 @@ The `examples/` directory contains comprehensive examples:
|
|
|
382
492
|
- **06_yaml_configurations.py** - YAML config files
|
|
383
493
|
- **07_advanced_parameters.py** - Advanced API parameters
|
|
384
494
|
- **08_affinity_prediction.py** - Binding affinity prediction (IC50/pIC50)
|
|
495
|
+
- **15_a3m_to_multimer_csv.py** - A3M to multimer MSA conversion
|
|
496
|
+
- **16_colabfold_a3m_to_multimer.ipynb** - Interactive notebook for multimer MSA (NEW)
|
|
497
|
+
- **A3M_TO_MULTIMER_MSA.md** - Comprehensive guide for A3M conversion (NEW)
|
|
385
498
|
|
|
386
499
|
## 🧪 **Supported Prediction Types**
|
|
387
500
|
|
|
@@ -557,10 +670,12 @@ Third-party dependencies are licensed under their respective licenses - see the
|
|
|
557
670
|
|
|
558
671
|
### Guides
|
|
559
672
|
- **[MSA Search Guide](MSA_SEARCH_GUIDE.md)** - GPU-accelerated MSA generation with NVIDIA MSA Search NIM
|
|
673
|
+
- **[A3M to Multimer MSA Guide](examples/A3M_TO_MULTIMER_MSA.md)** - Convert ColabFold A3M files to paired multimer format (NEW)
|
|
560
674
|
- **[Affinity Prediction Guide](AFFINITY_PREDICTION_GUIDE.md)** - Comprehensive guide for binding affinity prediction
|
|
561
675
|
- **[YAML Configuration Guide](YAML_GUIDE.md)** - Working with YAML configuration files
|
|
562
676
|
- **[Async Programming Guide](ASYNC_GUIDE.md)** - Best practices for async operations
|
|
563
677
|
- **[Covalent Complex Guide](COVALENT_COMPLEX_GUIDE.md)** - Predicting covalent bonds
|
|
678
|
+
- **[Multi-Endpoint Guide](MULTI_ENDPOINT_GUIDE.md)** - Load balancing across multiple NIMs
|
|
564
679
|
- **[Parameters Guide](PARAMETERS.md)** - Detailed parameter documentation
|
|
565
680
|
|
|
566
681
|
## 🔗 **Links**
|
|
@@ -26,7 +26,7 @@ Example:
|
|
|
26
26
|
>>> print(f"Confidence: {result.confidence_scores[0]:.3f}")
|
|
27
27
|
"""
|
|
28
28
|
|
|
29
|
-
__version__ = "0.3.
|
|
29
|
+
__version__ = "0.3.2"
|
|
30
30
|
__author__ = "NVIDIA Corporation"
|
|
31
31
|
__email__ = "bionemo-support@nvidia.com"
|
|
32
32
|
|
|
@@ -71,6 +71,23 @@ from .msa_search import (
|
|
|
71
71
|
MSASearchResponse,
|
|
72
72
|
MSAFormatConverter,
|
|
73
73
|
)
|
|
74
|
+
from .a3m_to_csv_converter import (
|
|
75
|
+
A3MToCSVConverter,
|
|
76
|
+
A3MParser,
|
|
77
|
+
A3MMSA,
|
|
78
|
+
A3MSequence,
|
|
79
|
+
convert_a3m_to_multimer_csv,
|
|
80
|
+
create_multimer_msa_request,
|
|
81
|
+
create_paired_msa_per_chain,
|
|
82
|
+
save_prediction_outputs,
|
|
83
|
+
get_prediction_summary,
|
|
84
|
+
ConversionResult,
|
|
85
|
+
GreedyPairingStrategy,
|
|
86
|
+
CompletePairingStrategy,
|
|
87
|
+
TaxonomyPairingStrategy,
|
|
88
|
+
SpeciesMapper,
|
|
89
|
+
SPECIES_TO_TAXID,
|
|
90
|
+
)
|
|
74
91
|
|
|
75
92
|
# Optional imports for visualization
|
|
76
93
|
try:
|
|
@@ -139,6 +156,23 @@ __all__ = [
|
|
|
139
156
|
"MSASearchRequest",
|
|
140
157
|
"MSASearchResponse",
|
|
141
158
|
"MSAFormatConverter",
|
|
159
|
+
|
|
160
|
+
# A3M to CSV Multimer Converter
|
|
161
|
+
"A3MToCSVConverter",
|
|
162
|
+
"A3MParser",
|
|
163
|
+
"A3MMSA",
|
|
164
|
+
"A3MSequence",
|
|
165
|
+
"convert_a3m_to_multimer_csv",
|
|
166
|
+
"create_multimer_msa_request",
|
|
167
|
+
"create_paired_msa_per_chain",
|
|
168
|
+
"save_prediction_outputs",
|
|
169
|
+
"get_prediction_summary",
|
|
170
|
+
"ConversionResult",
|
|
171
|
+
"GreedyPairingStrategy",
|
|
172
|
+
"CompletePairingStrategy",
|
|
173
|
+
"TaxonomyPairingStrategy",
|
|
174
|
+
"SpeciesMapper",
|
|
175
|
+
"SPECIES_TO_TAXID",
|
|
142
176
|
]
|
|
143
177
|
|
|
144
178
|
# Add visualization exports if available
|