rowan-python 2.1.11__py3-none-any.whl → 2.1.13__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.
- rowan/folder.py +2 -1
- rowan/workflow.py +145 -41
- {rowan_python-2.1.11.dist-info → rowan_python-2.1.13.dist-info}/METADATA +2 -2
- {rowan_python-2.1.11.dist-info → rowan_python-2.1.13.dist-info}/RECORD +6 -6
- {rowan_python-2.1.11.dist-info → rowan_python-2.1.13.dist-info}/WHEEL +1 -1
- {rowan_python-2.1.11.dist-info → rowan_python-2.1.13.dist-info}/licenses/LICENSE +0 -0
rowan/folder.py
CHANGED
|
@@ -58,7 +58,6 @@ class Folder(BaseModel):
|
|
|
58
58
|
|
|
59
59
|
return self
|
|
60
60
|
|
|
61
|
-
|
|
62
61
|
def update(
|
|
63
62
|
self,
|
|
64
63
|
name: str | None = None,
|
|
@@ -121,6 +120,7 @@ class Folder(BaseModel):
|
|
|
121
120
|
"""
|
|
122
121
|
print_folder_tree(self.uuid, max_depth, show_uuids)
|
|
123
122
|
|
|
123
|
+
|
|
124
124
|
def retrieve_folder(uuid: str) -> Folder:
|
|
125
125
|
"""
|
|
126
126
|
Retrieves a folder from the API by UUID. Folder UUID can be found in the folder's URL.
|
|
@@ -208,6 +208,7 @@ def create_folder(
|
|
|
208
208
|
folder_data = response.json()
|
|
209
209
|
return Folder(**folder_data)
|
|
210
210
|
|
|
211
|
+
|
|
211
212
|
def print_folder_tree(uuid: str, max_depth: int = 10, show_uuids: bool = False) -> None:
|
|
212
213
|
"""
|
|
213
214
|
Retrieves a folder tree from the API.
|
rowan/workflow.py
CHANGED
|
@@ -242,8 +242,9 @@ class Workflow(BaseModel):
|
|
|
242
242
|
with open(path / f"{self.name}-msa.tar.gz", "wb") as f:
|
|
243
243
|
f.write(response.content)
|
|
244
244
|
|
|
245
|
-
def download_dcd_files(
|
|
246
|
-
|
|
245
|
+
def download_dcd_files(
|
|
246
|
+
self, replicates: list[int], name: str | None = None, path: Path | None = None
|
|
247
|
+
) -> None:
|
|
247
248
|
"""
|
|
248
249
|
Downloads DCD trajectory files for specified replicates
|
|
249
250
|
|
|
@@ -262,9 +263,7 @@ class Workflow(BaseModel):
|
|
|
262
263
|
path.mkdir(parents=True, exist_ok=True)
|
|
263
264
|
|
|
264
265
|
with api_client() as client:
|
|
265
|
-
response = client.post(
|
|
266
|
-
f"/trajectory/{self.uuid}/trajectory_dcds", json=replicates
|
|
267
|
-
)
|
|
266
|
+
response = client.post(f"/trajectory/{self.uuid}/trajectory_dcds", json=replicates)
|
|
268
267
|
response.raise_for_status()
|
|
269
268
|
|
|
270
269
|
file_path = path / f"{name or self.name}.tar.gz"
|
|
@@ -313,11 +312,13 @@ def submit_workflow(
|
|
|
313
312
|
if initial_smiles is not None:
|
|
314
313
|
data["initial_smiles"] = initial_smiles
|
|
315
314
|
elif isinstance(initial_molecule, StJamesMolecule):
|
|
316
|
-
data["initial_molecule"] = initial_molecule.model_dump()
|
|
315
|
+
data["initial_molecule"] = initial_molecule.model_dump(mode="json")
|
|
317
316
|
elif isinstance(initial_molecule, dict):
|
|
318
317
|
data["initial_molecule"] = initial_molecule
|
|
319
318
|
elif isinstance(initial_molecule, RdkitMol):
|
|
320
|
-
data["initial_molecule"] = StJamesMolecule.from_rdkit(initial_molecule, cid=0).model_dump(
|
|
319
|
+
data["initial_molecule"] = StJamesMolecule.from_rdkit(initial_molecule, cid=0).model_dump(
|
|
320
|
+
mode="json"
|
|
321
|
+
)
|
|
321
322
|
else:
|
|
322
323
|
raise ValueError("You must provide either `initial_smiles` or a valid `initial_molecule`.")
|
|
323
324
|
|
|
@@ -423,6 +424,7 @@ def retrieve_workflows(uuids: list[str]) -> list[Workflow]:
|
|
|
423
424
|
response.raise_for_status()
|
|
424
425
|
return [Workflow(**workflow_data) for workflow_data in response.json()]
|
|
425
426
|
|
|
427
|
+
|
|
426
428
|
def batch_poll_status(uuids: list[str]) -> list[Workflow]:
|
|
427
429
|
"""
|
|
428
430
|
Polls the status of a list of workflows.
|
|
@@ -538,7 +540,7 @@ def submit_basic_calculation_workflow(
|
|
|
538
540
|
tasks = ["optimize"]
|
|
539
541
|
|
|
540
542
|
if isinstance(initial_molecule, StJamesMolecule):
|
|
541
|
-
initial_molecule = initial_molecule.model_dump()
|
|
543
|
+
initial_molecule = initial_molecule.model_dump(mode="json")
|
|
542
544
|
elif isinstance(initial_molecule, RdkitMol):
|
|
543
545
|
initial_molecule = StJamesMolecule.from_rdkit(initial_molecule, cid=0)
|
|
544
546
|
|
|
@@ -560,7 +562,7 @@ def submit_basic_calculation_workflow(
|
|
|
560
562
|
"name": name,
|
|
561
563
|
"folder_uuid": folder_uuid,
|
|
562
564
|
"workflow_type": "basic_calculation",
|
|
563
|
-
"workflow_data": workflow.model_dump(),
|
|
565
|
+
"workflow_data": workflow.model_dump(mode="json"),
|
|
564
566
|
"initial_molecule": initial_molecule,
|
|
565
567
|
"max_credits": max_credits,
|
|
566
568
|
}
|
|
@@ -601,7 +603,7 @@ def submit_conformer_search_workflow(
|
|
|
601
603
|
:raises requests.HTTPError: if the request to the API fails.
|
|
602
604
|
"""
|
|
603
605
|
if isinstance(initial_molecule, StJamesMolecule):
|
|
604
|
-
initial_molecule = initial_molecule.model_dump()
|
|
606
|
+
initial_molecule = initial_molecule.model_dump(mode="json")
|
|
605
607
|
elif isinstance(initial_molecule, RdkitMol):
|
|
606
608
|
initial_molecule = StJamesMolecule.from_rdkit(initial_molecule, cid=0)
|
|
607
609
|
|
|
@@ -639,7 +641,7 @@ def submit_conformer_search_workflow(
|
|
|
639
641
|
"name": name,
|
|
640
642
|
"folder_uuid": folder_uuid,
|
|
641
643
|
"workflow_type": "conformer_search",
|
|
642
|
-
"workflow_data": workflow.model_dump(),
|
|
644
|
+
"workflow_data": workflow.model_dump(mode="json"),
|
|
643
645
|
"initial_molecule": initial_molecule,
|
|
644
646
|
"max_credits": max_credits,
|
|
645
647
|
}
|
|
@@ -690,7 +692,7 @@ def submit_solubility_workflow(
|
|
|
690
692
|
"name": name,
|
|
691
693
|
"folder_uuid": folder_uuid,
|
|
692
694
|
"workflow_type": "solubility",
|
|
693
|
-
"workflow_data": workflow.model_dump(),
|
|
695
|
+
"workflow_data": workflow.model_dump(mode="json"),
|
|
694
696
|
"initial_smiles": initial_smiles,
|
|
695
697
|
"max_credits": max_credits,
|
|
696
698
|
}
|
|
@@ -762,8 +764,10 @@ def submit_pka_workflow(
|
|
|
762
764
|
"name": name,
|
|
763
765
|
"folder_uuid": folder_uuid,
|
|
764
766
|
"workflow_type": "pka",
|
|
765
|
-
"workflow_data": workflow.model_dump(),
|
|
766
|
-
"initial_molecule": initial_stjames_mol.model_dump()
|
|
767
|
+
"workflow_data": workflow.model_dump(mode="json"),
|
|
768
|
+
"initial_molecule": initial_stjames_mol.model_dump(mode="json")
|
|
769
|
+
if initial_stjames_mol
|
|
770
|
+
else None,
|
|
767
771
|
"initial_smiles": initial_smiles,
|
|
768
772
|
"max_credits": max_credits,
|
|
769
773
|
}
|
|
@@ -799,7 +803,7 @@ def submit_redox_potential_workflow(
|
|
|
799
803
|
:raises requests.HTTPError: if the request to the API fails.
|
|
800
804
|
"""
|
|
801
805
|
if isinstance(initial_molecule, StJamesMolecule):
|
|
802
|
-
initial_molecule = initial_molecule.model_dump()
|
|
806
|
+
initial_molecule = initial_molecule.model_dump(mode="json")
|
|
803
807
|
elif isinstance(initial_molecule, RdkitMol):
|
|
804
808
|
initial_molecule = StJamesMolecule.from_rdkit(initial_molecule, cid=0)
|
|
805
809
|
|
|
@@ -814,7 +818,7 @@ def submit_redox_potential_workflow(
|
|
|
814
818
|
"name": name,
|
|
815
819
|
"folder_uuid": folder_uuid,
|
|
816
820
|
"workflow_type": "redox_potential",
|
|
817
|
-
"workflow_data": workflow.model_dump(),
|
|
821
|
+
"workflow_data": workflow.model_dump(mode="json"),
|
|
818
822
|
"initial_molecule": initial_molecule,
|
|
819
823
|
"max_credits": max_credits,
|
|
820
824
|
}
|
|
@@ -848,7 +852,7 @@ def submit_fukui_workflow(
|
|
|
848
852
|
:raises requests.HTTPError: if the request to the API fails.
|
|
849
853
|
"""
|
|
850
854
|
if isinstance(initial_molecule, StJamesMolecule):
|
|
851
|
-
initial_molecule = initial_molecule.model_dump()
|
|
855
|
+
initial_molecule = initial_molecule.model_dump(mode="json")
|
|
852
856
|
elif isinstance(initial_molecule, RdkitMol):
|
|
853
857
|
initial_molecule = StJamesMolecule.from_rdkit(initial_molecule, cid=0)
|
|
854
858
|
|
|
@@ -862,9 +866,9 @@ def submit_fukui_workflow(
|
|
|
862
866
|
)
|
|
863
867
|
|
|
864
868
|
workflow_data = {
|
|
865
|
-
"opt_settings": optimization_settings.model_dump(),
|
|
869
|
+
"opt_settings": optimization_settings.model_dump(mode="json"),
|
|
866
870
|
"opt_engine": stjames.Method(optimization_method).default_engine(),
|
|
867
|
-
"fukui_settings": fukui_settings.model_dump(),
|
|
871
|
+
"fukui_settings": fukui_settings.model_dump(mode="json"),
|
|
868
872
|
"fukui_engine": stjames.Method(fukui_method).default_engine(),
|
|
869
873
|
}
|
|
870
874
|
|
|
@@ -904,7 +908,7 @@ def submit_tautomer_search_workflow(
|
|
|
904
908
|
:raises requests.HTTPError: if the request to the API fails.
|
|
905
909
|
"""
|
|
906
910
|
if isinstance(initial_molecule, StJamesMolecule):
|
|
907
|
-
initial_molecule = initial_molecule.model_dump()
|
|
911
|
+
initial_molecule = initial_molecule.model_dump(mode="json")
|
|
908
912
|
elif isinstance(initial_molecule, RdkitMol):
|
|
909
913
|
initial_molecule = StJamesMolecule.from_rdkit(initial_molecule, cid=0)
|
|
910
914
|
|
|
@@ -917,7 +921,7 @@ def submit_tautomer_search_workflow(
|
|
|
917
921
|
"name": name,
|
|
918
922
|
"folder_uuid": folder_uuid,
|
|
919
923
|
"workflow_type": "tautomers",
|
|
920
|
-
"workflow_data": workflow.model_dump(),
|
|
924
|
+
"workflow_data": workflow.model_dump(mode="json"),
|
|
921
925
|
"initial_molecule": initial_molecule,
|
|
922
926
|
"max_credits": max_credits,
|
|
923
927
|
}
|
|
@@ -945,7 +949,7 @@ def submit_descriptors_workflow(
|
|
|
945
949
|
:raises requests.HTTPError: if the request to the API fails.
|
|
946
950
|
"""
|
|
947
951
|
if isinstance(initial_molecule, StJamesMolecule):
|
|
948
|
-
initial_molecule = initial_molecule.model_dump()
|
|
952
|
+
initial_molecule = initial_molecule.model_dump(mode="json")
|
|
949
953
|
elif isinstance(initial_molecule, RdkitMol):
|
|
950
954
|
initial_molecule = StJamesMolecule.from_rdkit(initial_molecule, cid=0)
|
|
951
955
|
|
|
@@ -991,7 +995,7 @@ def submit_scan_workflow(
|
|
|
991
995
|
:raises requests.HTTPError: if the request to the API fails.
|
|
992
996
|
"""
|
|
993
997
|
if isinstance(initial_molecule, StJamesMolecule):
|
|
994
|
-
initial_molecule = initial_molecule.model_dump()
|
|
998
|
+
initial_molecule = initial_molecule.model_dump(mode="json")
|
|
995
999
|
elif isinstance(initial_molecule, RdkitMol):
|
|
996
1000
|
initial_molecule = StJamesMolecule.from_rdkit(initial_molecule, cid=0)
|
|
997
1001
|
|
|
@@ -1018,7 +1022,7 @@ def submit_scan_workflow(
|
|
|
1018
1022
|
"name": name,
|
|
1019
1023
|
"folder_uuid": folder_uuid,
|
|
1020
1024
|
"workflow_type": "scan",
|
|
1021
|
-
"workflow_data": workflow.model_dump(),
|
|
1025
|
+
"workflow_data": workflow.model_dump(mode="json"),
|
|
1022
1026
|
"initial_molecule": initial_molecule,
|
|
1023
1027
|
"max_credits": max_credits,
|
|
1024
1028
|
}
|
|
@@ -1072,7 +1076,7 @@ def submit_macropka_workflow(
|
|
|
1072
1076
|
"name": name,
|
|
1073
1077
|
"folder_uuid": folder_uuid,
|
|
1074
1078
|
"workflow_type": "macropka",
|
|
1075
|
-
"workflow_data": workflow.model_dump(),
|
|
1079
|
+
"workflow_data": workflow.model_dump(mode="json"),
|
|
1076
1080
|
"initial_smiles": initial_smiles,
|
|
1077
1081
|
"max_credits": max_credits,
|
|
1078
1082
|
}
|
|
@@ -1111,7 +1115,7 @@ def submit_irc_workflow(
|
|
|
1111
1115
|
"""
|
|
1112
1116
|
|
|
1113
1117
|
if isinstance(initial_molecule, StJamesMolecule):
|
|
1114
|
-
initial_molecule = initial_molecule.model_dump()
|
|
1118
|
+
initial_molecule = initial_molecule.model_dump(mode="json")
|
|
1115
1119
|
elif isinstance(initial_molecule, RdkitMol):
|
|
1116
1120
|
initial_molecule = StJamesMolecule.from_rdkit(initial_molecule, cid=0)
|
|
1117
1121
|
|
|
@@ -1136,7 +1140,7 @@ def submit_irc_workflow(
|
|
|
1136
1140
|
"name": name,
|
|
1137
1141
|
"folder_uuid": folder_uuid,
|
|
1138
1142
|
"workflow_type": "irc",
|
|
1139
|
-
"workflow_data": workflow.model_dump(),
|
|
1143
|
+
"workflow_data": workflow.model_dump(mode="json"),
|
|
1140
1144
|
"initial_molecule": initial_molecule,
|
|
1141
1145
|
"max_credits": max_credits,
|
|
1142
1146
|
}
|
|
@@ -1193,7 +1197,7 @@ def submit_protein_cofolding_workflow(
|
|
|
1193
1197
|
"name": name,
|
|
1194
1198
|
"folder_uuid": folder_uuid,
|
|
1195
1199
|
"workflow_type": "protein_cofolding",
|
|
1196
|
-
"workflow_data": workflow.model_dump(),
|
|
1200
|
+
"workflow_data": workflow.model_dump(mode="json"),
|
|
1197
1201
|
"max_credits": max_credits,
|
|
1198
1202
|
}
|
|
1199
1203
|
|
|
@@ -1236,7 +1240,7 @@ def submit_docking_workflow(
|
|
|
1236
1240
|
"""
|
|
1237
1241
|
|
|
1238
1242
|
if isinstance(initial_molecule, StJamesMolecule):
|
|
1239
|
-
initial_molecule = initial_molecule.model_dump()
|
|
1243
|
+
initial_molecule = initial_molecule.model_dump(mode="json")
|
|
1240
1244
|
elif isinstance(initial_molecule, RdkitMol):
|
|
1241
1245
|
initial_molecule = StJamesMolecule.from_rdkit(initial_molecule, cid=0)
|
|
1242
1246
|
|
|
@@ -1263,7 +1267,7 @@ def submit_docking_workflow(
|
|
|
1263
1267
|
"name": name,
|
|
1264
1268
|
"folder_uuid": folder_uuid,
|
|
1265
1269
|
"workflow_type": "docking",
|
|
1266
|
-
"workflow_data": workflow.model_dump(),
|
|
1270
|
+
"workflow_data": workflow.model_dump(mode="json"),
|
|
1267
1271
|
"initial_molecule": initial_molecule,
|
|
1268
1272
|
"max_credits": max_credits,
|
|
1269
1273
|
}
|
|
@@ -1300,7 +1304,7 @@ def submit_ion_mobility_workflow(
|
|
|
1300
1304
|
:raises requests.HTTPError: if the request to the API fails.
|
|
1301
1305
|
"""
|
|
1302
1306
|
if isinstance(initial_molecule, StJamesMolecule):
|
|
1303
|
-
initial_molecule = initial_molecule.model_dump()
|
|
1307
|
+
initial_molecule = initial_molecule.model_dump(mode="json")
|
|
1304
1308
|
elif isinstance(initial_molecule, RdkitMol):
|
|
1305
1309
|
initial_molecule = StJamesMolecule.from_rdkit(initial_molecule, cid=0)
|
|
1306
1310
|
|
|
@@ -1316,7 +1320,7 @@ def submit_ion_mobility_workflow(
|
|
|
1316
1320
|
"name": name,
|
|
1317
1321
|
"folder_uuid": folder_uuid,
|
|
1318
1322
|
"workflow_type": "ion_mobility",
|
|
1319
|
-
"workflow_data": workflow.model_dump(),
|
|
1323
|
+
"workflow_data": workflow.model_dump(mode="json"),
|
|
1320
1324
|
"initial_molecule": initial_molecule,
|
|
1321
1325
|
"max_credits": max_credits,
|
|
1322
1326
|
}
|
|
@@ -1350,7 +1354,7 @@ def submit_nmr_workflow(
|
|
|
1350
1354
|
:raises requests.HTTPError: if the request to the API fails.
|
|
1351
1355
|
"""
|
|
1352
1356
|
if isinstance(initial_molecule, StJamesMolecule):
|
|
1353
|
-
initial_molecule = initial_molecule.model_dump()
|
|
1357
|
+
initial_molecule = initial_molecule.model_dump(mode="json")
|
|
1354
1358
|
elif isinstance(initial_molecule, RdkitMol):
|
|
1355
1359
|
initial_molecule = StJamesMolecule.from_rdkit(initial_molecule, cid=0)
|
|
1356
1360
|
|
|
@@ -1368,7 +1372,7 @@ def submit_nmr_workflow(
|
|
|
1368
1372
|
"name": name,
|
|
1369
1373
|
"folder_uuid": folder_uuid,
|
|
1370
1374
|
"workflow_type": "nmr",
|
|
1371
|
-
"workflow_data": workflow.model_dump(serialize_as_any=True),
|
|
1375
|
+
"workflow_data": workflow.model_dump(serialize_as_any=True, mode="json"),
|
|
1372
1376
|
"initial_molecule": initial_molecule,
|
|
1373
1377
|
"max_credits": max_credits,
|
|
1374
1378
|
}
|
|
@@ -1396,7 +1400,7 @@ def submit_strain_workflow(
|
|
|
1396
1400
|
:raises requests.HTTPError: if the request to the API fails.
|
|
1397
1401
|
"""
|
|
1398
1402
|
if isinstance(initial_molecule, StJamesMolecule):
|
|
1399
|
-
initial_molecule = initial_molecule.model_dump()
|
|
1403
|
+
initial_molecule = initial_molecule.model_dump(mode="json")
|
|
1400
1404
|
elif isinstance(initial_molecule, RdkitMol):
|
|
1401
1405
|
initial_molecule = StJamesMolecule.from_rdkit(initial_molecule, cid=0)
|
|
1402
1406
|
|
|
@@ -1406,7 +1410,7 @@ def submit_strain_workflow(
|
|
|
1406
1410
|
"name": name,
|
|
1407
1411
|
"folder_uuid": folder_uuid,
|
|
1408
1412
|
"workflow_type": "strain",
|
|
1409
|
-
"workflow_data": workflow.model_dump(serialize_as_any=True),
|
|
1413
|
+
"workflow_data": workflow.model_dump(serialize_as_any=True, mode="json"),
|
|
1410
1414
|
"initial_molecule": initial_molecule,
|
|
1411
1415
|
"max_credits": max_credits,
|
|
1412
1416
|
}
|
|
@@ -1454,8 +1458,10 @@ def submit_double_ended_ts_search_workflow(
|
|
|
1454
1458
|
"name": name,
|
|
1455
1459
|
"folder_uuid": folder_uuid,
|
|
1456
1460
|
"workflow_type": "double_ended_ts_search",
|
|
1457
|
-
"workflow_data": workflow.model_dump(),
|
|
1458
|
-
"initial_molecule": reactant
|
|
1461
|
+
"workflow_data": workflow.model_dump(mode="json"),
|
|
1462
|
+
"initial_molecule": reactant
|
|
1463
|
+
if isinstance(reactant, dict)
|
|
1464
|
+
else reactant.model_dump(mode="json"),
|
|
1459
1465
|
"max_credits": max_credits,
|
|
1460
1466
|
}
|
|
1461
1467
|
|
|
@@ -1506,7 +1512,7 @@ def submit_pose_analysis_md_workflow(
|
|
|
1506
1512
|
"name": name,
|
|
1507
1513
|
"folder_uuid": folder_uuid,
|
|
1508
1514
|
"workflow_type": "pose_analysis_md",
|
|
1509
|
-
"workflow_data": workflow.model_dump(serialize_as_any=True),
|
|
1515
|
+
"workflow_data": workflow.model_dump(serialize_as_any=True, mode="json"),
|
|
1510
1516
|
"initial_smiles": initial_smiles,
|
|
1511
1517
|
"max_credits": max_credits,
|
|
1512
1518
|
}
|
|
@@ -1560,7 +1566,7 @@ def submit_batch_docking_workflow(
|
|
|
1560
1566
|
"name": name,
|
|
1561
1567
|
"folder_uuid": folder_uuid,
|
|
1562
1568
|
"workflow_type": "batch_docking",
|
|
1563
|
-
"workflow_data": workflow.model_dump(serialize_as_any=True),
|
|
1569
|
+
"workflow_data": workflow.model_dump(serialize_as_any=True, mode="json"),
|
|
1564
1570
|
"max_credits": max_credits,
|
|
1565
1571
|
}
|
|
1566
1572
|
|
|
@@ -1598,7 +1604,7 @@ def submit_msa_workflow(
|
|
|
1598
1604
|
"name": name,
|
|
1599
1605
|
"folder_uuid": folder_uuid,
|
|
1600
1606
|
"workflow_type": "msa",
|
|
1601
|
-
"workflow_data": workflow.model_dump(serialize_as_any=True),
|
|
1607
|
+
"workflow_data": workflow.model_dump(serialize_as_any=True, mode="json"),
|
|
1602
1608
|
"max_credits": max_credits,
|
|
1603
1609
|
}
|
|
1604
1610
|
|
|
@@ -1606,3 +1612,101 @@ def submit_msa_workflow(
|
|
|
1606
1612
|
response = client.post("/workflow", json=data)
|
|
1607
1613
|
response.raise_for_status()
|
|
1608
1614
|
return Workflow(**response.json())
|
|
1615
|
+
|
|
1616
|
+
|
|
1617
|
+
def submit_admet_workflow(
|
|
1618
|
+
initial_smiles: str,
|
|
1619
|
+
name: str = "ADMET Workflow",
|
|
1620
|
+
folder_uuid: str | None = None,
|
|
1621
|
+
max_credits: int | None = None,
|
|
1622
|
+
) -> Workflow:
|
|
1623
|
+
"""
|
|
1624
|
+
Submits an ADMET workflow to the API.
|
|
1625
|
+
|
|
1626
|
+
:param initial_smiles: The molecule used in the workflow.
|
|
1627
|
+
:param name: The name of the workflow.
|
|
1628
|
+
:param folder_uuid: The UUID of the folder to store the workflow in.
|
|
1629
|
+
:param max_credits: The maximum number of credits to use for the workflow.
|
|
1630
|
+
:return: A Workflow object representing the submitted workflow.
|
|
1631
|
+
:raises requests.HTTPError: if the request to the API fails.
|
|
1632
|
+
"""
|
|
1633
|
+
|
|
1634
|
+
workflow = stjames.ADMETWorkflow(initial_smiles=initial_smiles)
|
|
1635
|
+
|
|
1636
|
+
data = {
|
|
1637
|
+
"name": name,
|
|
1638
|
+
"folder_uuid": folder_uuid,
|
|
1639
|
+
"workflow_type": "admet",
|
|
1640
|
+
"workflow_data": workflow.model_dump(mode="json"),
|
|
1641
|
+
"initial_smiles": initial_smiles,
|
|
1642
|
+
"max_credits": max_credits,
|
|
1643
|
+
}
|
|
1644
|
+
|
|
1645
|
+
with api_client() as client:
|
|
1646
|
+
response = client.post("/workflow", json=data)
|
|
1647
|
+
response.raise_for_status()
|
|
1648
|
+
return Workflow(**response.json())
|
|
1649
|
+
|
|
1650
|
+
|
|
1651
|
+
def submit_membrane_permeability_workflow(
|
|
1652
|
+
initial_molecule: dict[str, Any] | StJamesMolecule | RdkitMol | str,
|
|
1653
|
+
method: Literal["gnn-mtl", "pypermm"] = "gnn-mtl",
|
|
1654
|
+
name: str = "ADMET Workflow",
|
|
1655
|
+
folder_uuid: str | None = None,
|
|
1656
|
+
max_credits: int | None = None,
|
|
1657
|
+
) -> Workflow:
|
|
1658
|
+
"""
|
|
1659
|
+
Submits a membrane permeability workflow to the API.
|
|
1660
|
+
|
|
1661
|
+
:param initial_molecule: The molecule used in the workflow.
|
|
1662
|
+
:param method: The method used to compute membrane permeability.
|
|
1663
|
+
:param name: The name of the workflow.
|
|
1664
|
+
:param folder_uuid: The UUID of the folder to store the workflow in.
|
|
1665
|
+
:param max_credits: The maximum number of credits to use for the workflow.
|
|
1666
|
+
:return: A Workflow object representing the submitted workflow.
|
|
1667
|
+
:raises requests.HTTPError: if the request to the API fails.
|
|
1668
|
+
"""
|
|
1669
|
+
|
|
1670
|
+
data: dict[str, Any] = {
|
|
1671
|
+
"name": name,
|
|
1672
|
+
"folder_uuid": folder_uuid,
|
|
1673
|
+
"workflow_type": "membrane_permeability",
|
|
1674
|
+
"max_credits": max_credits,
|
|
1675
|
+
}
|
|
1676
|
+
|
|
1677
|
+
match method:
|
|
1678
|
+
case "gnn-mtl":
|
|
1679
|
+
assert isinstance(initial_molecule, str)
|
|
1680
|
+
workflow = stjames.MembranePermeabilityWorkflow(
|
|
1681
|
+
initial_smiles=initial_molecule,
|
|
1682
|
+
membrane_permeability_method="chemprop_ohlsson2025",
|
|
1683
|
+
)
|
|
1684
|
+
|
|
1685
|
+
data["initial_smiles"] = initial_molecule
|
|
1686
|
+
|
|
1687
|
+
case "pypermm":
|
|
1688
|
+
if isinstance(initial_molecule, str):
|
|
1689
|
+
raise ValueError("Cannot specify molecule as SMILES for PyPermm")
|
|
1690
|
+
elif isinstance(initial_molecule, StJamesMolecule):
|
|
1691
|
+
initial_molecule = initial_molecule.model_dump(mode="json")
|
|
1692
|
+
elif isinstance(initial_molecule, RdkitMol):
|
|
1693
|
+
initial_molecule = StJamesMolecule.from_rdkit(initial_molecule, cid=0).model_dump(
|
|
1694
|
+
mode="json"
|
|
1695
|
+
)
|
|
1696
|
+
|
|
1697
|
+
workflow = stjames.MembranePermeabilityWorkflow(
|
|
1698
|
+
initial_molecule=initial_molecule,
|
|
1699
|
+
membrane_permeability_method="pypermm",
|
|
1700
|
+
)
|
|
1701
|
+
|
|
1702
|
+
data["initial_molecule"] = initial_molecule
|
|
1703
|
+
|
|
1704
|
+
case _:
|
|
1705
|
+
raise ValueError(f"Unexpected {method=}")
|
|
1706
|
+
|
|
1707
|
+
data["workflow_data"] = workflow.model_dump(mode="json")
|
|
1708
|
+
|
|
1709
|
+
with api_client() as client:
|
|
1710
|
+
response = client.post("/workflow", json=data)
|
|
1711
|
+
response.raise_for_status()
|
|
1712
|
+
return Workflow(**response.json())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rowan-python
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.13
|
|
4
4
|
Summary: Rowan Python Library
|
|
5
5
|
Project-URL: Homepage, https://github.com/rowansci/rowan-client
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/rowansci/rowan-client/issues
|
|
@@ -11,7 +11,7 @@ Requires-Dist: httpx
|
|
|
11
11
|
Requires-Dist: nest-asyncio
|
|
12
12
|
Requires-Dist: rdkit
|
|
13
13
|
Requires-Dist: setuptools
|
|
14
|
-
Requires-Dist: stjames>=0.0.
|
|
14
|
+
Requires-Dist: stjames>=0.0.144
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
|
|
17
17
|
# Rowan Python Library
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
rowan/__init__.py,sha256=2rz6dW0l9DzawiFi6S0WSv8XlZq1CoTBKJrsJ1uesvk,171
|
|
2
2
|
rowan/constants.py,sha256=emCH4m9OL2Hm5E-6mJGM_FgzrK_JrZT-FiKJ6pMNQ4Y,84
|
|
3
|
-
rowan/folder.py,sha256=
|
|
3
|
+
rowan/folder.py,sha256=IAda7apRsow_qhausWlAGWKkD9cRvPmt-DkXwqOOM20,7510
|
|
4
4
|
rowan/project.py,sha256=ALPPkMa_cg7w5OkXno1cs6acCofw8AOUYRSeWgr3L0o,3774
|
|
5
5
|
rowan/protein.py,sha256=mFSVCr-08bSikXBUtJtSWzjKcVAuBmTeRckn7JUHYSE,8810
|
|
6
6
|
rowan/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
rowan/user.py,sha256=Dl--NPUPATKCs2VmILsW8HnLiunG0Lxr0n6mKuHm21U,3891
|
|
8
8
|
rowan/utils.py,sha256=64II-cPOe_SFJK302Bm8hP62d_3_CgnTVYCbn3zKT7U,3334
|
|
9
|
-
rowan/workflow.py,sha256=
|
|
9
|
+
rowan/workflow.py,sha256=hsRh0J6bdNs78eByuL5G3_k1CrNQg2szR5sPPalWTMA,65376
|
|
10
10
|
rowan/rowan_rdkit/__init__.py,sha256=EATX2VRzywzKxqkpCUMTf7RNQLkWsfi5VcCNDW6EIiw,503
|
|
11
11
|
rowan/rowan_rdkit/chem_utils.py,sha256=sKCzul2e0ldVYTBImhTwso7ddNgPKmvS-OmvCEjVJH0,34788
|
|
12
|
-
rowan_python-2.1.
|
|
13
|
-
rowan_python-2.1.
|
|
14
|
-
rowan_python-2.1.
|
|
15
|
-
rowan_python-2.1.
|
|
12
|
+
rowan_python-2.1.13.dist-info/METADATA,sha256=3zsPCrGRWTd9snLuYFsleM0iDWkChWQaOEaiGExtLbY,1601
|
|
13
|
+
rowan_python-2.1.13.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
14
|
+
rowan_python-2.1.13.dist-info/licenses/LICENSE,sha256=i05z7xEhyrg6f8j0lR3XYjShnF-MJGFQ-DnpsZ8yiVI,1084
|
|
15
|
+
rowan_python-2.1.13.dist-info/RECORD,,
|
|
File without changes
|