boltz-vsynthes 1.0.39__py3-none-any.whl → 1.0.40__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 +54 -9
- {boltz_vsynthes-1.0.39.dist-info → boltz_vsynthes-1.0.40.dist-info}/METADATA +1 -1
- {boltz_vsynthes-1.0.39.dist-info → boltz_vsynthes-1.0.40.dist-info}/RECORD +7 -7
- {boltz_vsynthes-1.0.39.dist-info → boltz_vsynthes-1.0.40.dist-info}/WHEEL +0 -0
- {boltz_vsynthes-1.0.39.dist-info → boltz_vsynthes-1.0.40.dist-info}/entry_points.txt +0 -0
- {boltz_vsynthes-1.0.39.dist-info → boltz_vsynthes-1.0.40.dist-info}/licenses/LICENSE +0 -0
- {boltz_vsynthes-1.0.39.dist-info → boltz_vsynthes-1.0.40.dist-info}/top_level.txt +0 -0
boltz/data/parse/schema.py
CHANGED
@@ -1326,6 +1326,60 @@ def parse_boltz_schema( # noqa: C901, PLR0915, PLR0912
|
|
1326
1326
|
"cyclic", False
|
1327
1327
|
), "Cyclic flag is not supported for ligands"
|
1328
1328
|
|
1329
|
+
elif (entity_type == "ligand") and ("sdf" in items[0][entity_type]):
|
1330
|
+
# Handle SDF file
|
1331
|
+
sdf_path = Path(items[0][entity_type]["sdf"])
|
1332
|
+
from boltz.data.parse.sdf import parse_sdf
|
1333
|
+
target = parse_sdf(sdf_path, ccd, mol_dir)
|
1334
|
+
mol = target["sequences"][0]["ligand"]["smiles"]
|
1335
|
+
|
1336
|
+
if affinity:
|
1337
|
+
mol = standardize(mol)
|
1338
|
+
|
1339
|
+
mol = AllChem.MolFromSmiles(mol)
|
1340
|
+
mol = AllChem.AddHs(mol)
|
1341
|
+
|
1342
|
+
# Set atom names
|
1343
|
+
canonical_order = AllChem.CanonicalRankAtoms(mol)
|
1344
|
+
for atom, can_idx in zip(mol.GetAtoms(), canonical_order):
|
1345
|
+
atom_name = atom.GetSymbol().upper() + str(can_idx + 1)
|
1346
|
+
if len(atom_name) > 4:
|
1347
|
+
msg = (
|
1348
|
+
f"{mol} has an atom with a name longer than "
|
1349
|
+
f"4 characters: {atom_name}."
|
1350
|
+
)
|
1351
|
+
raise ValueError(msg)
|
1352
|
+
atom.SetProp("name", atom_name)
|
1353
|
+
|
1354
|
+
success = compute_3d_conformer(mol)
|
1355
|
+
if not success:
|
1356
|
+
msg = f"Failed to compute 3D conformer for {mol}"
|
1357
|
+
raise ValueError(msg)
|
1358
|
+
|
1359
|
+
mol_no_h = AllChem.RemoveHs(mol, sanitize=False)
|
1360
|
+
affinity_mw = AllChem.Descriptors.MolWt(mol_no_h) if affinity else None
|
1361
|
+
extra_mols[f"LIG{ligand_id}"] = mol_no_h
|
1362
|
+
residue = parse_ccd_residue(
|
1363
|
+
name=f"LIG{ligand_id}",
|
1364
|
+
ref_mol=mol,
|
1365
|
+
res_idx=0,
|
1366
|
+
)
|
1367
|
+
|
1368
|
+
ligand_id += 1
|
1369
|
+
parsed_chain = ParsedChain(
|
1370
|
+
entity=entity_id,
|
1371
|
+
residues=[residue],
|
1372
|
+
type=const.chain_type_ids["NONPOLYMER"],
|
1373
|
+
cyclic_period=0,
|
1374
|
+
sequence=None,
|
1375
|
+
affinity=affinity,
|
1376
|
+
affinity_mw=affinity_mw,
|
1377
|
+
)
|
1378
|
+
|
1379
|
+
assert not items[0][entity_type].get(
|
1380
|
+
"cyclic", False
|
1381
|
+
), "Cyclic flag is not supported for ligands"
|
1382
|
+
|
1329
1383
|
else:
|
1330
1384
|
msg = f"Invalid entity type: {entity_type}"
|
1331
1385
|
raise ValueError(msg)
|
@@ -1393,15 +1447,6 @@ def parse_boltz_schema( # noqa: C901, PLR0915, PLR0912
|
|
1393
1447
|
chain_id=asym_id,
|
1394
1448
|
mw=chain.affinity_mw,
|
1395
1449
|
)
|
1396
|
-
# Save affinity info if output directory is specified
|
1397
|
-
if output_dir is not None:
|
1398
|
-
affinity_path = subfolder / "affinity_info.json"
|
1399
|
-
with open(affinity_path, "w") as f:
|
1400
|
-
json.dump({
|
1401
|
-
"chain_id": asym_id,
|
1402
|
-
"mw": chain.affinity_mw,
|
1403
|
-
"chain_name": chain_name
|
1404
|
-
}, f)
|
1405
1450
|
|
1406
1451
|
# Find all copies of this chain in the assembly
|
1407
1452
|
entity_id = int(chain.entity)
|
@@ -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=p4KIAVzQAuApcxRLHc6-KKG7ICgLmEWVzE8Qqm6v04w,66402
|
44
44
|
boltz/data/parse/sdf.py,sha256=fs3MQVClDcCzxJaeVYiDuoh-fUrYc8Tcd5Bz8ws3FKI,2052
|
45
45
|
boltz/data/parse/yaml.py,sha256=M3dRQK2mMDue3bPSO_T2ThaVojSMrOV7rMY-KXQvaGQ,2047
|
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.40.dist-info/licenses/LICENSE,sha256=8GZ_1eZsUeG6jdqgJJxtciWzADfgLEV4LY8sKUOsJhc,1102
|
111
|
+
boltz_vsynthes-1.0.40.dist-info/METADATA,sha256=z2kizv_5w3PrpKHsDV_GXjhzQDRxRCWWT2pOESvbcFU,7171
|
112
|
+
boltz_vsynthes-1.0.40.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
113
|
+
boltz_vsynthes-1.0.40.dist-info/entry_points.txt,sha256=n5a5I35ntu9lmyr16oZgHPFY0b0YxjiixY7m7nbMTLc,41
|
114
|
+
boltz_vsynthes-1.0.40.dist-info/top_level.txt,sha256=MgU3Jfb-ctWm07YGMts68PMjSh9v26D0gfG3dFRmVFA,6
|
115
|
+
boltz_vsynthes-1.0.40.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|