rowan-python 3.0.6__tar.gz → 3.0.8__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.
Files changed (135) hide show
  1. {rowan_python-3.0.6 → rowan_python-3.0.8}/PKG-INFO +2 -2
  2. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/PROTAC_solubility.py +1 -0
  3. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/aqueous_solubility.py +1 -1
  4. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/boltz_paired_msa.py +2 -0
  5. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/boltz_single_msa.py +2 -0
  6. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/chai_paired_msa.py +2 -0
  7. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/chai_single_msa.py +2 -0
  8. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/cofolding_screen.py +2 -0
  9. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/colabfold_paired_msa.py +2 -0
  10. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/colabfold_single_msa.py +2 -0
  11. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/conformer_dependent_redox.py +1 -1
  12. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/conformers.py +1 -1
  13. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/docking_screen.py +1 -0
  14. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/electronic_properties.py +3 -3
  15. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/interaction_energy_decomposition.py +1 -1
  16. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/membrane_permeability.py +2 -1
  17. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/periodic_dft.py +1 -1
  18. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/phenol_pka.py +1 -0
  19. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/pka.py +1 -0
  20. rowan_python-3.0.8/examples/pocket_detection.py +28 -0
  21. rowan_python-3.0.8/examples/project_scoped_api_key.py +31 -0
  22. rowan_python-3.0.8/examples/protein_cofolding_with_constraints.py +79 -0
  23. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/solvent_dependent_conformers.py +1 -1
  24. {rowan_python-3.0.6 → rowan_python-3.0.8}/pixi.lock +218 -127
  25. {rowan_python-3.0.6 → rowan_python-3.0.8}/pyproject.toml +2 -2
  26. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/__init__.py +1 -0
  27. rowan_python-3.0.8/rowan/api_keys.py +144 -0
  28. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/__init__.py +5 -0
  29. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/electronic_properties.py +29 -1
  30. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/pka.py +10 -1
  31. rowan_python-3.0.8/rowan/workflows/pocket_detection.py +112 -0
  32. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/protein_cofolding.py +19 -2
  33. {rowan_python-3.0.6 → rowan_python-3.0.8}/.envrc +0 -0
  34. {rowan_python-3.0.6 → rowan_python-3.0.8}/.github/workflows/build-and-deploy-docs.yml +0 -0
  35. {rowan_python-3.0.6 → rowan_python-3.0.8}/.github/workflows/python-publish.yml +0 -0
  36. {rowan_python-3.0.6 → rowan_python-3.0.8}/.github/workflows/test.yml +0 -0
  37. {rowan_python-3.0.6 → rowan_python-3.0.8}/.gitignore +0 -0
  38. {rowan_python-3.0.6 → rowan_python-3.0.8}/.pre-commit-config.yaml +0 -0
  39. {rowan_python-3.0.6 → rowan_python-3.0.8}/AGENTS.md +0 -0
  40. {rowan_python-3.0.6 → rowan_python-3.0.8}/CLAUDE.md +0 -0
  41. {rowan_python-3.0.6 → rowan_python-3.0.8}/GEMINI.md +0 -0
  42. {rowan_python-3.0.6 → rowan_python-3.0.8}/LICENSE +0 -0
  43. {rowan_python-3.0.6 → rowan_python-3.0.8}/README.md +0 -0
  44. {rowan_python-3.0.6 → rowan_python-3.0.8}/docs/images/deciduous-tree-favicon.png +0 -0
  45. {rowan_python-3.0.6 → rowan_python-3.0.8}/docs/index.md +0 -0
  46. {rowan_python-3.0.6 → rowan_python-3.0.8}/docs/rowan_rdkit.md +0 -0
  47. {rowan_python-3.0.6 → rowan_python-3.0.8}/docs/stylesheets/colors.css +0 -0
  48. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/admet.py +0 -0
  49. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/analogue_docking.py +0 -0
  50. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/basic_calculation.py +0 -0
  51. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/basic_calculation_from_json.py +0 -0
  52. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/basic_calculation_with_constraint.py +0 -0
  53. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/basic_calculation_with_solvent.py +0 -0
  54. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/batch_docking.py +0 -0
  55. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/bde.py +0 -0
  56. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/data/1iep_receptorH.pdb +0 -0
  57. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/data/Al_FCC.xyz +0 -0
  58. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/data/citalopram_1iep.xyz +0 -0
  59. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/data/tyk2_ligands.sdf +0 -0
  60. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/data/tyk2_structure.pdb +0 -0
  61. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/data/workflow_example.json +0 -0
  62. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/dcd_download.py +0 -0
  63. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/descriptors.py +0 -0
  64. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/double_ended_ts_search.py +0 -0
  65. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/estimate_workflow.py +0 -0
  66. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/fukui_index.py +0 -0
  67. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/hydrogen_bond_basicity.py +0 -0
  68. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/ion_mobility.py +0 -0
  69. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/irc.py +0 -0
  70. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/macropka.py +0 -0
  71. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/multistage_optimization.py +0 -0
  72. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/nmr.py +0 -0
  73. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/optimization.py +0 -0
  74. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/pdb_download.py +0 -0
  75. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/pose_analysis_md.py +0 -0
  76. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/protein_binder_design.py +0 -0
  77. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/protein_cofolding.py +0 -0
  78. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/protein_md.py +0 -0
  79. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/rbfe_graph.py +0 -0
  80. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/redox_potential.py +0 -0
  81. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/relative_binding_free_energy_perturbation.py +0 -0
  82. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/retrieve_workflow.py +0 -0
  83. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/scan.py +0 -0
  84. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/spin_states.py +0 -0
  85. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/strain.py +0 -0
  86. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/tautomer.py +0 -0
  87. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/template.py +0 -0
  88. {rowan_python-3.0.6 → rowan_python-3.0.8}/examples/webhook.py +0 -0
  89. {rowan_python-3.0.6 → rowan_python-3.0.8}/mkdocs.yml +0 -0
  90. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/calculation.py +0 -0
  91. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/config.py +0 -0
  92. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/constants.py +0 -0
  93. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/folder.py +0 -0
  94. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/molecule.py +0 -0
  95. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/project.py +0 -0
  96. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/protein.py +0 -0
  97. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/py.typed +0 -0
  98. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/rowan_rdkit/__init__.py +0 -0
  99. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/rowan_rdkit/chem_utils.py +0 -0
  100. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/types.py +0 -0
  101. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/user.py +0 -0
  102. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/utils.py +0 -0
  103. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/admet.py +0 -0
  104. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/analogue_docking.py +0 -0
  105. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/base.py +0 -0
  106. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/basic_calculation.py +0 -0
  107. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/batch_docking.py +0 -0
  108. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/bde.py +0 -0
  109. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/conformer_search.py +0 -0
  110. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/constants.py +0 -0
  111. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/descriptors.py +0 -0
  112. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/docking.py +0 -0
  113. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/double_ended_ts_search.py +0 -0
  114. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/fukui.py +0 -0
  115. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/hydrogen_bond_donor_acceptor_strength.py +0 -0
  116. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/interaction_energy_decomposition.py +0 -0
  117. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/ion_mobility.py +0 -0
  118. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/irc.py +0 -0
  119. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/macropka.py +0 -0
  120. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/membrane_permeability.py +0 -0
  121. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/msa.py +0 -0
  122. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/multistage_optimization.py +0 -0
  123. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/nmr.py +0 -0
  124. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/pose_analysis_md.py +0 -0
  125. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/protein_binder_design.py +0 -0
  126. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/protein_md.py +0 -0
  127. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/rbfe_graph.py +0 -0
  128. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/redox_potential.py +0 -0
  129. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/relative_binding_free_energy_perturbation.py +0 -0
  130. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/scan.py +0 -0
  131. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/solubility.py +0 -0
  132. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/solvent_dependent_conformers.py +0 -0
  133. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/spin_states.py +0 -0
  134. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/strain.py +0 -0
  135. {rowan_python-3.0.6 → rowan_python-3.0.8}/rowan/workflows/tautomer_search.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rowan-python
3
- Version: 3.0.6
3
+ Version: 3.0.8
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.174
14
+ Requires-Dist: stjames<=0.0.182
15
15
  Description-Content-Type: text/markdown
16
16
 
17
17
  # Rowan Python Library
@@ -44,6 +44,7 @@ for id, smiles in PROTACs.items():
44
44
  )
45
45
  )
46
46
 
47
+ print(f"View folder privately at: https://labs.rowansci.com/folder/{folder.uuid}")
47
48
 
48
49
  workflow_results = [w.result() for w in workflows]
49
50
 
@@ -15,7 +15,7 @@ workflow = rowan.submit_solubility_workflow(
15
15
  folder=folder,
16
16
  )
17
17
 
18
- print(f"View workflow privately at: https://labs.rowansci.com/workflow/{workflow.uuid}")
18
+ print(f"View workflow privately at: https://labs.rowansci.com/solubility/{workflow.uuid}")
19
19
  result = workflow.result()
20
20
  print(result)
21
21
  # e.g. <SolubilityResult solvents=['water']>
@@ -19,6 +19,8 @@ msa_workflow = rowan.submit_msa_workflow(
19
19
  folder=folder,
20
20
  )
21
21
 
22
+ print(f"View workflow privately at: https://labs.rowansci.com/msa/{msa_workflow.uuid}")
23
+
22
24
  msa_result = msa_workflow.result()
23
25
 
24
26
  msa_result.download_files("boltz", path=msa_directory)
@@ -18,6 +18,8 @@ msa_workflow = rowan.submit_msa_workflow(
18
18
  folder=folder,
19
19
  )
20
20
 
21
+ print(f"View workflow privately at: https://labs.rowansci.com/msa/{msa_workflow.uuid}")
22
+
21
23
  msa_result = msa_workflow.result()
22
24
 
23
25
  msa_result.download_files("boltz", path=msa_directory)
@@ -30,6 +30,8 @@ msa_workflow = rowan.submit_msa_workflow(
30
30
  folder=folder,
31
31
  )
32
32
 
33
+ print(f"View workflow privately at: https://labs.rowansci.com/msa/{msa_workflow.uuid}")
34
+
33
35
  msa_result = msa_workflow.result()
34
36
 
35
37
  msa_result.download_files("chai", path=msa_directory)
@@ -27,6 +27,8 @@ msa_workflow = rowan.submit_msa_workflow(
27
27
  folder=folder,
28
28
  )
29
29
 
30
+ print(f"View workflow privately at: https://labs.rowansci.com/msa/{msa_workflow.uuid}")
31
+
30
32
  msa_result = msa_workflow.result()
31
33
 
32
34
  msa_result.download_files("chai", path=msa_directory)
@@ -29,6 +29,8 @@ for ligand in ligands:
29
29
  )
30
30
  workflows.append(workflow)
31
31
 
32
+ print(f"View folder privately at: https://labs.rowansci.com/folder/{folder.uuid}")
33
+
32
34
  workflow_results = [(w, w.result()) for w in workflows]
33
35
 
34
36
  for workflow, result in workflow_results:
@@ -19,6 +19,8 @@ msa_workflow = rowan.submit_msa_workflow(
19
19
  folder=folder,
20
20
  )
21
21
 
22
+ print(f"View workflow privately at: https://labs.rowansci.com/msa/{msa_workflow.uuid}")
23
+
22
24
  msa_result = msa_workflow.result()
23
25
 
24
26
  msa_result.download_files("colabfold", path=msa_directory)
@@ -18,6 +18,8 @@ msa_workflow = rowan.submit_msa_workflow(
18
18
  folder=folder,
19
19
  )
20
20
 
21
+ print(f"View workflow privately at: https://labs.rowansci.com/msa/{msa_workflow.uuid}")
22
+
21
23
  msa_result = msa_workflow.result()
22
24
 
23
25
  msa_result.download_files("colabfold", path=msa_directory)
@@ -8,7 +8,7 @@ workflow = rowan.submit_conformer_search_workflow(
8
8
  initial_molecule=rowan.Molecule.from_smiles("CC(C)Cc1ccc(C(=O)c2ccc(O)cc2)cc1"),
9
9
  folder=folder,
10
10
  )
11
- print(f"View workflow privately at: https://labs.rowansci.com/workflow/{workflow.uuid}")
11
+ print(f"View folder privately at: https://labs.rowansci.com/folder/{folder.uuid}")
12
12
  csearch_result = workflow.result()
13
13
 
14
14
  redox_potential_workflows = []
@@ -28,7 +28,7 @@ workflow = rowan.submit_conformer_search_workflow(
28
28
  folder=folder,
29
29
  )
30
30
 
31
- print(f"View workflow privately at: https://labs.rowansci.com/workflow/{workflow.uuid}")
31
+ print(f"View workflow privately at: https://labs.rowansci.com/conformer-search/{workflow.uuid}")
32
32
 
33
33
  result = workflow.result()
34
34
  print(result)
@@ -35,6 +35,7 @@ for ligand in ligands:
35
35
  )
36
36
  workflows.append(workflow)
37
37
 
38
+ print(f"View folder privately at: https://labs.rowansci.com/folder/{folder.uuid}")
38
39
 
39
40
  workflow_results = [(w, w.result()) for w in workflows]
40
41
 
@@ -16,17 +16,17 @@ import rowan
16
16
  folder = rowan.get_folder("examples")
17
17
 
18
18
  workflow = rowan.submit_electronic_properties_workflow(
19
- initial_molecule=rowan.Molecule.from_smiles("c1ccccc1"), # benzene
19
+ initial_molecule=rowan.Molecule.from_smiles("C=O"), # formaldehyde
20
20
  method="b97_3c", # default: lightweight DFT
21
21
  compute_density_cube=True,
22
22
  compute_electrostatic_potential_cube=True,
23
23
  compute_num_occupied_orbitals=3, # HOMO, HOMO-1, HOMO-2
24
24
  compute_num_virtual_orbitals=3, # LUMO, LUMO+1, LUMO+2
25
- name="Benzene electronic properties",
25
+ name="Formaldehyde electronic properties",
26
26
  folder=folder,
27
27
  )
28
28
 
29
29
  print(f"View workflow privately at: https://labs.rowansci.com/orbitals/{workflow.uuid}")
30
30
  result = workflow.result()
31
31
  print(result)
32
- # e.g. <ElectronicPropertiesResult dipole=1.85 D>
32
+ # e.g. <ElectronicPropertiesResult dipole=(0.0, 0.0, -2.33) D>
@@ -56,7 +56,7 @@ workflow = rowan.submit_interaction_energy_decomposition_workflow(
56
56
  name="Naphthalene-Guanine SAPT0",
57
57
  )
58
58
 
59
- print(f"View at: https://labs.rowansci.com/workflow/{workflow.uuid}")
59
+ print(f"View at: https://labs.rowansci.com/interaction-energy-decomposition/{workflow.uuid}")
60
60
 
61
61
  result = workflow.result()
62
62
  print(result)
@@ -21,9 +21,10 @@ pypermm_workflow = rowan.submit_membrane_permeability_workflow(
21
21
  folder=folder,
22
22
  )
23
23
 
24
+ print(f"View folder privately at: https://labs.rowansci.com/folder/{folder.uuid}")
24
25
  print("View these workflows privately:")
25
26
  print(f"\thttps://labs.rowansci.com/membrane-permeability/{gnn_mtl_workflow.uuid}")
26
- print(f"\thttps://labs.rowansci.com/mambrane-permeability/{pypermm_workflow.uuid}")
27
+ print(f"\thttps://labs.rowansci.com/membrane-permeability/{pypermm_workflow.uuid}")
27
28
  gnn_mtl_result = gnn_mtl_workflow.result()
28
29
  pypermm_result = pypermm_workflow.result()
29
30
 
@@ -15,7 +15,7 @@ import rowan
15
15
 
16
16
  # Set your API key or use the ROWAN_API_KEY environment variable
17
17
  # rowan.api_key = "rowan-sk..."
18
- folder = rowan.get_folder("examples/periodic_dft")
18
+ folder = rowan.get_folder("examples")
19
19
 
20
20
  # Build bulk Al FCC primitive cell.
21
21
  # Lattice vectors in Angstrom; Al has 13 electrons so multiplicity=2.
@@ -27,6 +27,7 @@ for name, smiles in phenols_to_compute.items():
27
27
  )
28
28
  )
29
29
 
30
+ print(f"View folder privately at: https://labs.rowansci.com/folder/{folder.uuid}")
30
31
 
31
32
  workflow_results = [w.result() for w in workflows]
32
33
 
@@ -27,6 +27,7 @@ workflow = rowan.submit_pka_workflow(
27
27
  name="Phenol pKa (aimnet2_wagen2024)",
28
28
  folder=folder,
29
29
  )
30
+ print(f"View folder privately at: https://labs.rowansci.com/folder/{folder.uuid}")
30
31
  print(f"View at: https://labs.rowansci.com/pka/{workflow.uuid}")
31
32
  result = workflow.result()
32
33
  print(result)
@@ -0,0 +1,28 @@
1
+ import rowan
2
+
3
+ # Set your API key or use the ROWAN_API_KEY environment variable
4
+ # rowan.api_key = "rowan-sk..."
5
+ folder = rowan.get_folder("examples")
6
+
7
+ protein = rowan.create_protein_from_pdb_id(
8
+ "thymidine phosphorylase", "1OTP", project_uuid=rowan.default_project().uuid
9
+ )
10
+
11
+ protein.prepare()
12
+
13
+ workflow = rowan.submit_pocket_detection_workflow(
14
+ protein=protein,
15
+ name="Pocket detection on thymidine phosphorylase",
16
+ folder=folder,
17
+ )
18
+
19
+ result = workflow.result()
20
+
21
+ print(f"Detected {len(result.pockets)} pocket(s):")
22
+ for i, pocket in enumerate(result.pockets):
23
+ print(f" Pocket {i}: score={pocket.score}, volume={pocket.volume} ų")
24
+ print(f" center={pocket.pocket_center}")
25
+ print(f" sides={pocket.pocket_sides}")
26
+ print(f" residues={pocket.residue_numbers}")
27
+
28
+ print(f"View workflow privately at: https://labs.rowansci.com/pocket-detection/{workflow.uuid}")
@@ -0,0 +1,31 @@
1
+ """Example: mint per-project API keys for several projects at once.
2
+
3
+ A project-scoped key can only access the project it was created for —
4
+ useful for handing limited access to collaborators, CI jobs, or analyses
5
+ without exposing your full account.
6
+
7
+ The plaintext key is only returned once at creation time — store it
8
+ immediately. The caller must currently authenticate with an unscoped key
9
+ that has ``can_manage_api_keys`` permission.
10
+ """
11
+
12
+ import rowan
13
+
14
+ # rowan.api_key = "rowan-sk..."
15
+
16
+ campaigns = ["CDK2 campaign", "BTK campaign", "EGFR campaign"]
17
+
18
+ results = []
19
+ for campaign in campaigns:
20
+ project = rowan.create_project(name=campaign)
21
+ created = rowan.create_api_key(
22
+ name=f"{campaign.lower().replace(' ', '-')}-key",
23
+ scope="read_write",
24
+ valid_days=90,
25
+ scoped_project_uuid=project.uuid,
26
+ )
27
+ results.append((project.name, created.api_key.name, created.key))
28
+
29
+ print("Plaintext keys (save these now — only returned once):")
30
+ for project_name, key_name, key in results:
31
+ print(f" {project_name} | {key_name} | {key}")
@@ -0,0 +1,79 @@
1
+ """Cofolding with both pocket and contact constraints.
2
+
3
+ Example: bovine trypsin + benzamidine, a textbook S1-pocket binder.
4
+ Trypsin's S1 specificity pocket is anchored by Asp189 at its base, and
5
+ benzamidine binds via a bidentate salt bridge between its amidinium group
6
+ and the Asp189 carboxylate.
7
+
8
+ We encode this prior knowledge with two constraints:
9
+
10
+ 1. PocketConstraint - the ligand must sit inside the S1 pocket, near the
11
+ catalytic triad (His57, Asp102, Ser195) and Asp189.
12
+ 2. ContactConstraint - the amidine carbon of benzamidine must come within
13
+ ~4 A of Asp189 (the salt bridge interaction).
14
+
15
+ The four residues are located by their conserved chymotrypsin-family motifs
16
+ in the sequence below: AAHCY (His), NNDIML (Asp triad), SDSSCK (S1 Asp
17
+ before Cys191), GDSGGP (Ser).
18
+
19
+ ConstraintTargets are constructed explicitly with (input_type, input_index,
20
+ token_index) so the addressing scheme is unambiguous: input_index selects which
21
+ protein / ligand in the input lists, and token_index is the residue index for
22
+ proteins and the atom index for ligands. The same three fields appear in the
23
+ cofolding submit form on labs.rowansci.com.
24
+ """
25
+
26
+ import rowan
27
+
28
+ # rowan.api_key = "rowan-sk..."
29
+ folder = rowan.get_folder("examples")
30
+
31
+ TRYPSIN = (
32
+ "IVGGYTCGANTVPYQVSLNSGYHFCGGSLINSQWVVSAAHCYKSGIQVRLGEDNINVVEGNEQFISASKSIVHPSYNSNTLNN"
33
+ "DIMLIKLKSAAYTSYDVPLGTQCLISGWGNTKSSGTSYPDVLKCLKAPILSDSSCKSAYPGQITSNMFCAGYLEGGKDSCQGD"
34
+ "SGGPVVCSGKLQGIVSWGSGCAQKNKPGVYTKVCNYVSWIKQTIASN"
35
+ )
36
+ BENZAMIDINE = "NC(=N)c1ccccc1"
37
+
38
+ # Targets for the four pocket-defining residues on the trypsin chain (protein 0).
39
+ his57 = rowan.ConstraintTarget(input_type="protein", input_index=0, token_index=39) # AAHCY
40
+ asp102 = rowan.ConstraintTarget(input_type="protein", input_index=0, token_index=83) # NNDIML
41
+ asp189 = rowan.ConstraintTarget(input_type="protein", input_index=0, token_index=134) # SDSSCK
42
+ ser195 = rowan.ConstraintTarget(input_type="protein", input_index=0, token_index=166) # GDSGGP
43
+
44
+ # Target for the central amidine carbon of benzamidine (atom 1 in NC(=N)c1ccccc1).
45
+ benzamidine_amidine_c = rowan.ConstraintTarget(input_type="ligand", input_index=0, token_index=1)
46
+
47
+ pocket = rowan.PocketConstraint(
48
+ input_type="ligand", # the binder being placed into the pocket
49
+ input_index=0, # benzamidine is the first (and only) ligand
50
+ contacts=[his57, asp102, asp189, ser195],
51
+ max_distance=6.0,
52
+ )
53
+
54
+ salt_bridge = rowan.ContactConstraint(
55
+ token_1=benzamidine_amidine_c,
56
+ token_2=asp189,
57
+ max_distance=4.0,
58
+ force=True,
59
+ )
60
+
61
+ workflow = rowan.submit_protein_cofolding_workflow(
62
+ initial_protein_sequences=[TRYPSIN],
63
+ initial_smiles_list=[BENZAMIDINE],
64
+ ligand_binding_affinity_index=0,
65
+ pocket_constraints=[pocket],
66
+ contact_constraints=[salt_bridge],
67
+ use_potentials=True, # required for force=True
68
+ num_samples=3,
69
+ name="Trypsin + Benzamidine (constrained)",
70
+ do_pose_refinement=True,
71
+ folder=folder,
72
+ )
73
+
74
+ print(f"View workflow privately at: https://labs.rowansci.com/protein-cofolding/{workflow.uuid}")
75
+ result = workflow.result()
76
+ print(result)
77
+ for i, pred in enumerate(result.predictions):
78
+ iptm = pred.scores.iptm if pred.scores else None
79
+ print(f" sample {i}: iptm={iptm}")
@@ -13,7 +13,7 @@ workflow = rowan.submit_solvent_dependent_conformers_workflow(
13
13
  name="Alanine Dipeptide Solvent-Dependent Conformers",
14
14
  )
15
15
 
16
- print(f"View at: https://labs.rowansci.com/workflow/{workflow.uuid}")
16
+ print(f"View at: https://labs.rowansci.com/solvent-dependent-conformers/{workflow.uuid}")
17
17
 
18
18
  result = workflow.result()
19
19
  print(result)