boltz-vsynthes 1.0.32__py3-none-any.whl → 1.0.34__py3-none-any.whl
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.
- boltz/data/parse/schema.py +38 -9
- boltz/main.py +7 -28
- {boltz_vsynthes-1.0.32.dist-info → boltz_vsynthes-1.0.34.dist-info}/METADATA +1 -1
- {boltz_vsynthes-1.0.32.dist-info → boltz_vsynthes-1.0.34.dist-info}/RECORD +8 -8
- {boltz_vsynthes-1.0.32.dist-info → boltz_vsynthes-1.0.34.dist-info}/WHEEL +0 -0
- {boltz_vsynthes-1.0.32.dist-info → boltz_vsynthes-1.0.34.dist-info}/entry_points.txt +0 -0
- {boltz_vsynthes-1.0.32.dist-info → boltz_vsynthes-1.0.34.dist-info}/licenses/LICENSE +0 -0
- {boltz_vsynthes-1.0.32.dist-info → boltz_vsynthes-1.0.34.dist-info}/top_level.txt +0 -0
boltz/data/parse/schema.py
CHANGED
@@ -2,6 +2,7 @@ from collections.abc import Mapping
|
|
2
2
|
from dataclasses import dataclass
|
3
3
|
from pathlib import Path
|
4
4
|
from typing import Optional
|
5
|
+
import json
|
5
6
|
|
6
7
|
import click
|
7
8
|
import numpy as np
|
@@ -1221,7 +1222,7 @@ def parse_boltz_schema( # noqa: C901, PLR0915, PLR0912
|
|
1221
1222
|
)
|
1222
1223
|
|
1223
1224
|
# Parse a non-polymer
|
1224
|
-
elif (entity_type == "ligand") and "ccd" in
|
1225
|
+
elif (entity_type == "ligand") and ("ccd" in items[0][entity_type]):
|
1225
1226
|
seq = items[0][entity_type]["ccd"]
|
1226
1227
|
|
1227
1228
|
if isinstance(seq, str):
|
@@ -1425,15 +1426,43 @@ def parse_boltz_schema( # noqa: C901, PLR0915, PLR0912
|
|
1425
1426
|
protein_chains.add(chain_name)
|
1426
1427
|
|
1427
1428
|
# Add affinity info
|
1428
|
-
if chain.affinity and affinity_info is not None:
|
1429
|
-
msg = "Cannot compute affinity for multiple ligands!"
|
1430
|
-
raise ValueError(msg)
|
1431
|
-
|
1432
1429
|
if chain.affinity:
|
1433
|
-
|
1434
|
-
|
1435
|
-
|
1436
|
-
|
1430
|
+
# If this is a protein binder, we need to create affinity info for each ligand
|
1431
|
+
if chain_name in affinity_proteins:
|
1432
|
+
# Find all ligand chains
|
1433
|
+
ligand_chains = [
|
1434
|
+
(name, c) for name, c in chains.items()
|
1435
|
+
if c.type == const.chain_type_ids["NONPOLYMER"]
|
1436
|
+
]
|
1437
|
+
if not ligand_chains:
|
1438
|
+
msg = "No ligand chains found for protein binder!"
|
1439
|
+
raise ValueError(msg)
|
1440
|
+
|
1441
|
+
# Create affinity info for each ligand
|
1442
|
+
for ligand_name, ligand_chain in ligand_chains:
|
1443
|
+
affinity_info = AffinityInfo(
|
1444
|
+
chain_id=asym_id,
|
1445
|
+
mw=chain.affinity_mw,
|
1446
|
+
)
|
1447
|
+
# Save the affinity info in a subfolder named after the ligand
|
1448
|
+
output_dir = Path(f"output/{ligand_name}")
|
1449
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
1450
|
+
# Save the affinity info
|
1451
|
+
with open(output_dir / "affinity_info.json", "w") as f:
|
1452
|
+
json.dump({
|
1453
|
+
"chain_id": asym_id,
|
1454
|
+
"mw": chain.affinity_mw,
|
1455
|
+
"ligand_name": ligand_name
|
1456
|
+
}, f)
|
1457
|
+
else:
|
1458
|
+
# This is a ligand binder
|
1459
|
+
if affinity_info is not None:
|
1460
|
+
msg = "Cannot compute affinity for multiple ligands!"
|
1461
|
+
raise ValueError(msg)
|
1462
|
+
affinity_info = AffinityInfo(
|
1463
|
+
chain_id=asym_id,
|
1464
|
+
mw=chain.affinity_mw,
|
1465
|
+
)
|
1437
1466
|
|
1438
1467
|
# Find all copies of this chain in the assembly
|
1439
1468
|
entity_id = int(chain.entity)
|
boltz/main.py
CHANGED
@@ -27,9 +27,6 @@ from boltz.data.msa.mmseqs2 import run_mmseqs2
|
|
27
27
|
from boltz.data.parse.a3m import parse_a3m
|
28
28
|
from boltz.data.parse.csv import parse_csv
|
29
29
|
from boltz.data.parse.fasta import parse_fasta
|
30
|
-
from boltz.data.parse.pdb import parse_pdb
|
31
|
-
from boltz.data.parse.pdb_download import parse_pdb_id
|
32
|
-
from boltz.data.parse.sdf import parse_sdf
|
33
30
|
from boltz.data.parse.yaml import parse_yaml
|
34
31
|
from boltz.data.types import MSA, Manifest, Record
|
35
32
|
from boltz.data.write.writer import BoltzAffinityWriter, BoltzWriter
|
@@ -294,28 +291,20 @@ def check_inputs(data: Path) -> list[Path]:
|
|
294
291
|
if data.is_dir():
|
295
292
|
data: list[Path] = list(data.glob("*"))
|
296
293
|
|
297
|
-
# Filter out non .fasta
|
294
|
+
# Filter out non .fasta or .yaml files, raise
|
298
295
|
# an error on directory and other file types
|
299
296
|
for d in data:
|
300
297
|
if d.is_dir():
|
301
|
-
msg = f"Found directory {d} instead of .fasta
|
298
|
+
msg = f"Found directory {d} instead of .fasta or .yaml."
|
302
299
|
raise RuntimeError(msg)
|
303
|
-
if d.suffix not in (".fa", ".fas", ".fasta", ".yml", ".yaml"
|
300
|
+
if d.suffix not in (".fa", ".fas", ".fasta", ".yml", ".yaml"):
|
304
301
|
msg = (
|
305
302
|
f"Unable to parse filetype {d.suffix}, "
|
306
|
-
"please provide a .fasta
|
303
|
+
"please provide a .fasta or .yaml file."
|
307
304
|
)
|
308
305
|
raise RuntimeError(msg)
|
309
306
|
else:
|
310
|
-
|
311
|
-
if len(data.stem) == 4 and data.stem.isalnum():
|
312
|
-
# Create a temporary file to store the PDB ID
|
313
|
-
temp_file = data.parent / f"{data.stem}.pdb"
|
314
|
-
with temp_file.open("w") as f:
|
315
|
-
f.write(data.stem)
|
316
|
-
data = [temp_file]
|
317
|
-
else:
|
318
|
-
data = [data]
|
307
|
+
data = [data]
|
319
308
|
|
320
309
|
return data
|
321
310
|
|
@@ -508,23 +497,13 @@ def process_input( # noqa: C901, PLR0912, PLR0915, D103
|
|
508
497
|
target = parse_fasta(path, ccd, mol_dir, boltz2)
|
509
498
|
elif path.suffix in (".yml", ".yaml"):
|
510
499
|
target = parse_yaml(path, ccd, mol_dir, boltz2)
|
511
|
-
elif path.suffix == ".pdb":
|
512
|
-
# Check if this is a PDB ID file
|
513
|
-
if path.stat().st_size <= 4: # File only contains PDB ID
|
514
|
-
with path.open("r") as f:
|
515
|
-
pdb_id = f.read().strip()
|
516
|
-
target = parse_pdb_id(pdb_id, ccd, mol_dir, path.parent, boltz2)
|
517
|
-
else:
|
518
|
-
target = parse_pdb(path, ccd, mol_dir, boltz2)
|
519
|
-
elif path.suffix == ".sdf":
|
520
|
-
target = parse_sdf(path, ccd, mol_dir, boltz2)
|
521
500
|
elif path.is_dir():
|
522
|
-
msg = f"Found directory {path} instead of .fasta
|
501
|
+
msg = f"Found directory {path} instead of .fasta or .yaml, skipping."
|
523
502
|
raise RuntimeError(msg) # noqa: TRY301
|
524
503
|
else:
|
525
504
|
msg = (
|
526
505
|
f"Unable to parse filetype {path.suffix}, "
|
527
|
-
"please provide a .fasta
|
506
|
+
"please provide a .fasta or .yaml file."
|
528
507
|
)
|
529
508
|
raise RuntimeError(msg) # noqa: TRY301
|
530
509
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
boltz/__init__.py,sha256=F_-so3S40iZrSZ89Ge4TS6aZqwWyZXq_H4AXGDlbA_g,187
|
2
|
-
boltz/main.py,sha256=
|
2
|
+
boltz/main.py,sha256=AMYdcqTLOL5Mbo8P2ix1KeNwTijH5fWNzKUnLHBNtn0,39735
|
3
3
|
boltz/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
boltz/data/const.py,sha256=1M-88Z6HkfKY6MkNtqcj3b9P-oX9xEXluh3qM_u8dNU,26779
|
5
5
|
boltz/data/mol.py,sha256=maOpPHEGX1VVXCIFY6pQNGF7gUBZPAfgSvuPf2QO1yc,34268
|
@@ -40,7 +40,7 @@ boltz/data/parse/mmcif.py,sha256=25kEXCkx-OuaawAs7cdz0fxdRu5_CCO0AV00u84PrjQ,368
|
|
40
40
|
boltz/data/parse/mmcif_with_constraints.py,sha256=WHYZckSqUwu-Nb9vmVmxHmC7uxwVrF7AVUeVKsc5wGQ,51473
|
41
41
|
boltz/data/parse/pdb.py,sha256=iybk4p2UgUy_ABGprDq_xxyPSdm1HAZsGTM0lhxVEwM,1654
|
42
42
|
boltz/data/parse/pdb_download.py,sha256=wge-scX-lOatX0q83W1wOsaql99rYp-6uGWSHEc995M,2718
|
43
|
-
boltz/data/parse/schema.py,sha256=
|
43
|
+
boltz/data/parse/schema.py,sha256=1saQOFI15H6TqoEupjsjnbX77UQfuST174kIErThdwY,65676
|
44
44
|
boltz/data/parse/sdf.py,sha256=fs3MQVClDcCzxJaeVYiDuoh-fUrYc8Tcd5Bz8ws3FKI,2052
|
45
45
|
boltz/data/parse/yaml.py,sha256=GRFRMtDD4PQ4PIpA_S1jj0vRaEu2LlZd_g4rN1zUrNo,1505
|
46
46
|
boltz/data/sample/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -107,9 +107,9 @@ boltz/model/optim/scheduler.py,sha256=nB4jz0CZ4pR4n08LQngExL_pNycIdYI8AXVoHPnZWQ
|
|
107
107
|
boltz/model/potentials/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
108
108
|
boltz/model/potentials/potentials.py,sha256=vev8Vjfs-ML1hyrdv_R8DynG4wSFahJ6nzPWp7CYQqw,17507
|
109
109
|
boltz/model/potentials/schedules.py,sha256=m7XJjfuF9uTX3bR9VisXv1rvzJjxiD8PobXRpcBBu1c,968
|
110
|
-
boltz_vsynthes-1.0.
|
111
|
-
boltz_vsynthes-1.0.
|
112
|
-
boltz_vsynthes-1.0.
|
113
|
-
boltz_vsynthes-1.0.
|
114
|
-
boltz_vsynthes-1.0.
|
115
|
-
boltz_vsynthes-1.0.
|
110
|
+
boltz_vsynthes-1.0.34.dist-info/licenses/LICENSE,sha256=8GZ_1eZsUeG6jdqgJJxtciWzADfgLEV4LY8sKUOsJhc,1102
|
111
|
+
boltz_vsynthes-1.0.34.dist-info/METADATA,sha256=h-T8W9FPQG5hynUMxYWhnJN4Ztt1XWoX4LgorJCEEYY,7171
|
112
|
+
boltz_vsynthes-1.0.34.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
113
|
+
boltz_vsynthes-1.0.34.dist-info/entry_points.txt,sha256=n5a5I35ntu9lmyr16oZgHPFY0b0YxjiixY7m7nbMTLc,41
|
114
|
+
boltz_vsynthes-1.0.34.dist-info/top_level.txt,sha256=MgU3Jfb-ctWm07YGMts68PMjSh9v26D0gfG3dFRmVFA,6
|
115
|
+
boltz_vsynthes-1.0.34.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|