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.
@@ -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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boltz-vsynthes
3
- Version: 1.0.39
3
+ Version: 1.0.40
4
4
  Summary: Boltz for VSYNTHES
5
5
  Requires-Python: <3.13,>=3.10
6
6
  Description-Content-Type: text/markdown
@@ -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=b0Mh1eCg6gTyOQt7GkEFAQdYCZJ1jqAJbUy9Tv53K4E,64781
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.39.dist-info/licenses/LICENSE,sha256=8GZ_1eZsUeG6jdqgJJxtciWzADfgLEV4LY8sKUOsJhc,1102
111
- boltz_vsynthes-1.0.39.dist-info/METADATA,sha256=s4YTm6DLYVooEmxNB0gz1_0aFspJeAqR5KWVZDyTEv4,7171
112
- boltz_vsynthes-1.0.39.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
113
- boltz_vsynthes-1.0.39.dist-info/entry_points.txt,sha256=n5a5I35ntu9lmyr16oZgHPFY0b0YxjiixY7m7nbMTLc,41
114
- boltz_vsynthes-1.0.39.dist-info/top_level.txt,sha256=MgU3Jfb-ctWm07YGMts68PMjSh9v26D0gfG3dFRmVFA,6
115
- boltz_vsynthes-1.0.39.dist-info/RECORD,,
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,,