rowan-python 3.0.7__tar.gz → 3.0.9__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.7 → rowan_python-3.0.9}/PKG-INFO +2 -2
  2. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/PROTAC_solubility.py +1 -0
  3. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/aqueous_solubility.py +1 -1
  4. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/boltz_paired_msa.py +2 -0
  5. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/boltz_single_msa.py +2 -0
  6. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/chai_paired_msa.py +2 -0
  7. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/chai_single_msa.py +2 -0
  8. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/cofolding_screen.py +2 -0
  9. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/colabfold_paired_msa.py +2 -0
  10. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/colabfold_single_msa.py +2 -0
  11. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/conformer_dependent_redox.py +1 -1
  12. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/conformers.py +1 -1
  13. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/docking_screen.py +1 -0
  14. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/electronic_properties.py +3 -3
  15. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/interaction_energy_decomposition.py +1 -1
  16. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/membrane_permeability.py +2 -1
  17. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/multistage_optimization.py +11 -6
  18. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/periodic_dft.py +1 -1
  19. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/phenol_pka.py +1 -0
  20. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/pka.py +1 -0
  21. rowan_python-3.0.9/examples/project_scoped_api_key.py +31 -0
  22. rowan_python-3.0.9/examples/protein_cofolding_with_constraints.py +79 -0
  23. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/solvent_dependent_conformers.py +1 -1
  24. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/spin_states.py +11 -8
  25. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/strain.py +1 -1
  26. {rowan_python-3.0.7 → rowan_python-3.0.9}/pixi.lock +360 -279
  27. {rowan_python-3.0.7 → rowan_python-3.0.9}/pyproject.toml +2 -2
  28. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/__init__.py +1 -0
  29. rowan_python-3.0.9/rowan/api_keys.py +144 -0
  30. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/__init__.py +4 -0
  31. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/base.py +6 -0
  32. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/bde.py +8 -6
  33. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/conformer_search.py +83 -27
  34. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/electronic_properties.py +18 -0
  35. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/multistage_optimization.py +24 -15
  36. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/protein_cofolding.py +19 -2
  37. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/redox_potential.py +7 -5
  38. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/spin_states.py +20 -14
  39. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/strain.py +4 -3
  40. {rowan_python-3.0.7 → rowan_python-3.0.9}/.envrc +0 -0
  41. {rowan_python-3.0.7 → rowan_python-3.0.9}/.github/workflows/build-and-deploy-docs.yml +0 -0
  42. {rowan_python-3.0.7 → rowan_python-3.0.9}/.github/workflows/python-publish.yml +0 -0
  43. {rowan_python-3.0.7 → rowan_python-3.0.9}/.github/workflows/test.yml +0 -0
  44. {rowan_python-3.0.7 → rowan_python-3.0.9}/.gitignore +0 -0
  45. {rowan_python-3.0.7 → rowan_python-3.0.9}/.pre-commit-config.yaml +0 -0
  46. {rowan_python-3.0.7 → rowan_python-3.0.9}/AGENTS.md +0 -0
  47. {rowan_python-3.0.7 → rowan_python-3.0.9}/CLAUDE.md +0 -0
  48. {rowan_python-3.0.7 → rowan_python-3.0.9}/GEMINI.md +0 -0
  49. {rowan_python-3.0.7 → rowan_python-3.0.9}/LICENSE +0 -0
  50. {rowan_python-3.0.7 → rowan_python-3.0.9}/README.md +0 -0
  51. {rowan_python-3.0.7 → rowan_python-3.0.9}/docs/images/deciduous-tree-favicon.png +0 -0
  52. {rowan_python-3.0.7 → rowan_python-3.0.9}/docs/index.md +0 -0
  53. {rowan_python-3.0.7 → rowan_python-3.0.9}/docs/rowan_rdkit.md +0 -0
  54. {rowan_python-3.0.7 → rowan_python-3.0.9}/docs/stylesheets/colors.css +0 -0
  55. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/admet.py +0 -0
  56. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/analogue_docking.py +0 -0
  57. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/basic_calculation.py +0 -0
  58. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/basic_calculation_from_json.py +0 -0
  59. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/basic_calculation_with_constraint.py +0 -0
  60. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/basic_calculation_with_solvent.py +0 -0
  61. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/batch_docking.py +0 -0
  62. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/bde.py +0 -0
  63. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/data/1iep_receptorH.pdb +0 -0
  64. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/data/Al_FCC.xyz +0 -0
  65. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/data/citalopram_1iep.xyz +0 -0
  66. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/data/tyk2_ligands.sdf +0 -0
  67. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/data/tyk2_structure.pdb +0 -0
  68. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/data/workflow_example.json +0 -0
  69. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/dcd_download.py +0 -0
  70. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/descriptors.py +0 -0
  71. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/double_ended_ts_search.py +0 -0
  72. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/estimate_workflow.py +0 -0
  73. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/fukui_index.py +0 -0
  74. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/hydrogen_bond_basicity.py +0 -0
  75. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/ion_mobility.py +0 -0
  76. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/irc.py +0 -0
  77. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/macropka.py +0 -0
  78. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/nmr.py +0 -0
  79. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/optimization.py +0 -0
  80. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/pdb_download.py +0 -0
  81. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/pocket_detection.py +0 -0
  82. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/pose_analysis_md.py +0 -0
  83. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/protein_binder_design.py +0 -0
  84. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/protein_cofolding.py +0 -0
  85. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/protein_md.py +0 -0
  86. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/rbfe_graph.py +0 -0
  87. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/redox_potential.py +0 -0
  88. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/relative_binding_free_energy_perturbation.py +0 -0
  89. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/retrieve_workflow.py +0 -0
  90. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/scan.py +0 -0
  91. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/tautomer.py +0 -0
  92. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/template.py +0 -0
  93. {rowan_python-3.0.7 → rowan_python-3.0.9}/examples/webhook.py +0 -0
  94. {rowan_python-3.0.7 → rowan_python-3.0.9}/mkdocs.yml +0 -0
  95. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/calculation.py +0 -0
  96. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/config.py +0 -0
  97. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/constants.py +0 -0
  98. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/folder.py +0 -0
  99. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/molecule.py +0 -0
  100. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/project.py +0 -0
  101. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/protein.py +0 -0
  102. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/py.typed +0 -0
  103. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/rowan_rdkit/__init__.py +0 -0
  104. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/rowan_rdkit/chem_utils.py +0 -0
  105. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/types.py +0 -0
  106. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/user.py +0 -0
  107. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/utils.py +0 -0
  108. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/admet.py +0 -0
  109. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/analogue_docking.py +0 -0
  110. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/basic_calculation.py +0 -0
  111. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/batch_docking.py +0 -0
  112. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/constants.py +0 -0
  113. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/descriptors.py +0 -0
  114. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/docking.py +0 -0
  115. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/double_ended_ts_search.py +0 -0
  116. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/fukui.py +0 -0
  117. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/hydrogen_bond_donor_acceptor_strength.py +0 -0
  118. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/interaction_energy_decomposition.py +0 -0
  119. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/ion_mobility.py +0 -0
  120. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/irc.py +0 -0
  121. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/macropka.py +0 -0
  122. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/membrane_permeability.py +0 -0
  123. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/msa.py +0 -0
  124. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/nmr.py +0 -0
  125. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/pka.py +0 -0
  126. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/pocket_detection.py +0 -0
  127. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/pose_analysis_md.py +0 -0
  128. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/protein_binder_design.py +0 -0
  129. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/protein_md.py +0 -0
  130. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/rbfe_graph.py +0 -0
  131. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/relative_binding_free_energy_perturbation.py +0 -0
  132. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/scan.py +0 -0
  133. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/solubility.py +0 -0
  134. {rowan_python-3.0.7 → rowan_python-3.0.9}/rowan/workflows/solvent_dependent_conformers.py +0 -0
  135. {rowan_python-3.0.7 → rowan_python-3.0.9}/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.7
3
+ Version: 3.0.9
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.183
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
 
@@ -1,11 +1,8 @@
1
1
  """
2
2
  Perform a multistage geometry optimization using the Rowan API.
3
3
 
4
- Available modes:
5
- - "reckless": Fastest, least accurate
6
- - "rapid": Good balance of speed and accuracy (default)
7
- - "careful": More accurate, slower
8
- - "meticulous": Most accurate, slowest
4
+ Each entry of `optimization_settings` runs in order; `singlepoint_settings`
5
+ runs last on the final geometry.
9
6
 
10
7
  See documentation at: https://docs.rowansci.com/science/workflows/multistage-optimization
11
8
  """
@@ -16,9 +13,17 @@ import rowan
16
13
  # rowan.api_key = "rowan-sk..."
17
14
  folder = rowan.get_folder("examples")
18
15
 
16
+ # r2scan_3c//gfn2_xtb//gfn_ff stack: GFN-FF pre-opt, GFN2-xTB opt, R²SCAN-3c singlepoint.
17
+ optimization_settings = [
18
+ rowan.Settings(method=rowan.Method.GFN_FF, tasks=[rowan.Task.OPTIMIZE]),
19
+ rowan.Settings(method=rowan.Method.GFN2_XTB, tasks=[rowan.Task.OPTIMIZE]),
20
+ ]
21
+ singlepoint_settings = rowan.Settings(method=rowan.Method.R2SCAN3C, tasks=[rowan.Task.ENERGY])
22
+
19
23
  workflow = rowan.submit_multistage_optimization_workflow(
20
24
  initial_molecule=rowan.Molecule.from_smiles("C1CCC1"), # cyclobutane
21
- mode="rapid",
25
+ optimization_settings=optimization_settings,
26
+ singlepoint_settings=singlepoint_settings,
22
27
  name="Multistage optimization cyclobutane",
23
28
  folder=folder,
24
29
  )
@@ -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,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)
@@ -2,13 +2,8 @@
2
2
  Calculate spin state energies using the Rowan API.
3
3
 
4
4
  This workflow predicts the lowest energy spin state by running multistage
5
- optimizations at different spin multiplicities.
6
-
7
- Available modes:
8
- - "reckless": Fastest, least accurate
9
- - "rapid": Good balance of speed and accuracy (default)
10
- - "careful": More accurate, slower
11
- - "meticulous": Most accurate, slowest
5
+ optimizations at different spin multiplicities. The same
6
+ `MultiStageOptSettings` is applied to each multiplicity.
12
7
 
13
8
  See documentation at: https://docs.rowansci.com/science/workflows/spin-states
14
9
  """
@@ -19,11 +14,19 @@ import rowan
19
14
  # rowan.api_key = "rowan-sk..."
20
15
  folder = rowan.get_folder("examples")
21
16
 
17
+ # r2scan_3c//gfn2_xtb stack: GFN2-xTB opt, R²SCAN-3c singlepoint.
18
+ mso_settings = rowan.MultiStageOptSettings(
19
+ optimization_settings=[
20
+ rowan.Settings(method=rowan.Method.GFN2_XTB, tasks=[rowan.Task.OPTIMIZE]),
21
+ ],
22
+ singlepoint_settings=rowan.Settings(method=rowan.Method.R2SCAN3C, tasks=[rowan.Task.ENERGY]),
23
+ )
24
+
22
25
  # Methylene (CH2) - classic spin states example, triplet is ground state
23
26
  workflow = rowan.submit_spin_states_workflow(
24
27
  initial_molecule=rowan.Molecule.from_smiles("[CH2]"),
25
28
  states=[1, 3], # singlet vs triplet
26
- mode="rapid",
29
+ multistage_opt_settings=mso_settings,
27
30
  name="Methylene spin states",
28
31
  folder=folder,
29
32
  )
@@ -8,7 +8,7 @@ folder = rowan.get_folder("examples")
8
8
  # here we'll investigate the strain of the autogenerated hexane conformer
9
9
  workflow = rowan.submit_strain_workflow(
10
10
  initial_molecule=rowan.Molecule.from_smiles("CCCCCC"),
11
- name="test autogen hexane strain",
11
+ name="Hexane Strain",
12
12
  folder=folder,
13
13
  )
14
14