rowan-python 3.1.2__tar.gz → 3.1.4__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 (179) hide show
  1. {rowan_python-3.1.2 → rowan_python-3.1.4}/PKG-INFO +1 -1
  2. {rowan_python-3.1.2 → rowan_python-3.1.4}/docs/index.md +32 -0
  3. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/batch_docking.py +1 -1
  4. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/boltz_paired_msa.py +2 -2
  5. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/boltz_single_msa.py +2 -2
  6. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/chai_paired_msa.py +2 -2
  7. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/chai_single_msa.py +2 -2
  8. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/colabfold_paired_msa.py +2 -2
  9. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/colabfold_single_msa.py +2 -2
  10. rowan_python-3.1.4/examples/docking.py +39 -0
  11. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/docking_screen.py +5 -2
  12. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/pocket_detection.py +1 -1
  13. rowan_python-3.1.4/examples/resubmit_with_perturbations.py +39 -0
  14. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/scan.py +7 -7
  15. {rowan_python-3.1.2 → rowan_python-3.1.4}/pixi.lock +21 -21
  16. {rowan_python-3.1.2 → rowan_python-3.1.4}/pyproject.toml +1 -1
  17. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/__init__.py +6 -0
  18. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/calculation.py +16 -8
  19. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/folder.py +120 -1
  20. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/molecule.py +86 -2
  21. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/protein.py +92 -13
  22. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/utils.py +21 -1
  23. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/base.py +22 -3
  24. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/basic_calculation.py +1 -1
  25. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/docking.py +10 -7
  26. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/fukui.py +2 -19
  27. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/msa.py +15 -22
  28. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/pka.py +2 -6
  29. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/protein_md.py +22 -0
  30. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/SKILL.md +4 -2
  31. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/conformer_search.md +1 -1
  32. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/docking.md +14 -9
  33. rowan_python-3.1.4/skills/computational-chemistry-and-biology/reference/folders_and_projects.md +59 -0
  34. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/msa.md +3 -3
  35. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/pose_analysis_md.md +6 -1
  36. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/protein_md.md +1 -0
  37. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/protein_prep.md +2 -2
  38. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/scan.md +11 -11
  39. {rowan_python-3.1.2 → rowan_python-3.1.4}/.envrc +0 -0
  40. {rowan_python-3.1.2 → rowan_python-3.1.4}/.github/workflows/build-and-deploy-docs.yml +0 -0
  41. {rowan_python-3.1.2 → rowan_python-3.1.4}/.github/workflows/publish-skill.yml +0 -0
  42. {rowan_python-3.1.2 → rowan_python-3.1.4}/.github/workflows/python-publish.yml +0 -0
  43. {rowan_python-3.1.2 → rowan_python-3.1.4}/.github/workflows/test.yml +0 -0
  44. {rowan_python-3.1.2 → rowan_python-3.1.4}/.gitignore +0 -0
  45. {rowan_python-3.1.2 → rowan_python-3.1.4}/.pre-commit-config.yaml +0 -0
  46. {rowan_python-3.1.2 → rowan_python-3.1.4}/AGENTS.md +0 -0
  47. {rowan_python-3.1.2 → rowan_python-3.1.4}/CLAUDE.md +0 -0
  48. {rowan_python-3.1.2 → rowan_python-3.1.4}/GEMINI.md +0 -0
  49. {rowan_python-3.1.2 → rowan_python-3.1.4}/LICENSE +0 -0
  50. {rowan_python-3.1.2 → rowan_python-3.1.4}/README.md +0 -0
  51. {rowan_python-3.1.2 → rowan_python-3.1.4}/docs/images/deciduous-tree-favicon.png +0 -0
  52. {rowan_python-3.1.2 → rowan_python-3.1.4}/docs/stylesheets/colors.css +0 -0
  53. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/PROTAC_solubility.py +0 -0
  54. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/admet.py +0 -0
  55. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/analogue_docking.py +0 -0
  56. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/aqueous_solubility.py +0 -0
  57. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/basic_calculation.py +0 -0
  58. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/basic_calculation_from_json.py +0 -0
  59. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/basic_calculation_with_constraint.py +0 -0
  60. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/basic_calculation_with_solvent.py +0 -0
  61. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/bde.py +0 -0
  62. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/cofolding_screen.py +0 -0
  63. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/conformer_dependent_redox.py +0 -0
  64. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/conformers.py +0 -0
  65. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/conformers_screen.py +0 -0
  66. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/data/1iep_receptorH.pdb +0 -0
  67. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/data/Al_FCC.xyz +0 -0
  68. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/data/citalopram_1iep.xyz +0 -0
  69. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/data/ibuprofen_conformers.sdf +0 -0
  70. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/data/tyk2_ligands.sdf +0 -0
  71. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/data/tyk2_structure.pdb +0 -0
  72. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/data/workflow_example.json +0 -0
  73. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/dcd_download.py +0 -0
  74. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/descriptors.py +0 -0
  75. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/double_ended_ts_search.py +0 -0
  76. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/electronic_properties.py +0 -0
  77. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/estimate_workflow.py +0 -0
  78. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/fukui_index.py +0 -0
  79. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/hydrogen_bond_basicity.py +0 -0
  80. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/interaction_energy_decomposition.py +0 -0
  81. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/ion_mobility.py +0 -0
  82. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/irc.py +0 -0
  83. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/macropka.py +0 -0
  84. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/membrane_permeability.py +0 -0
  85. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/multistage_optimization.py +0 -0
  86. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/nmr.py +0 -0
  87. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/optimization.py +0 -0
  88. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/pdb_download.py +0 -0
  89. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/periodic_dft.py +0 -0
  90. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/phenol_pka.py +0 -0
  91. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/pka.py +0 -0
  92. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/pose_analysis_md.py +0 -0
  93. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/project_scoped_api_key.py +0 -0
  94. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/protein_binder_design.py +0 -0
  95. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/protein_cofolding.py +0 -0
  96. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/protein_cofolding_with_constraints.py +0 -0
  97. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/protein_cofolding_with_templates.py +0 -0
  98. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/protein_md.py +0 -0
  99. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/rbfe_graph.py +0 -0
  100. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/rbfe_resubmit.py +0 -0
  101. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/redox_potential.py +0 -0
  102. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/relative_binding_free_energy_perturbation.py +0 -0
  103. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/retrieve_workflow.py +0 -0
  104. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/solvent_dependent_conformers.py +0 -0
  105. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/spin_states.py +0 -0
  106. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/strain.py +0 -0
  107. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/tautomer.py +0 -0
  108. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/template.py +0 -0
  109. {rowan_python-3.1.2 → rowan_python-3.1.4}/examples/webhook.py +0 -0
  110. {rowan_python-3.1.2 → rowan_python-3.1.4}/mkdocs.yml +0 -0
  111. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/api_keys.py +0 -0
  112. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/config.py +0 -0
  113. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/constants.py +0 -0
  114. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/project.py +0 -0
  115. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/py.typed +0 -0
  116. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/types.py +0 -0
  117. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/user.py +0 -0
  118. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/__init__.py +0 -0
  119. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/admet.py +0 -0
  120. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/analogue_docking.py +0 -0
  121. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/batch_docking.py +0 -0
  122. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/bde.py +0 -0
  123. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/conformer_search.py +0 -0
  124. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/constants.py +0 -0
  125. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/descriptors.py +0 -0
  126. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/double_ended_ts_search.py +0 -0
  127. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/electronic_properties.py +0 -0
  128. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/hydrogen_bond_donor_acceptor_strength.py +0 -0
  129. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/interaction_energy_decomposition.py +0 -0
  130. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/ion_mobility.py +0 -0
  131. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/irc.py +0 -0
  132. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/macropka.py +0 -0
  133. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/membrane_permeability.py +0 -0
  134. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/multistage_optimization.py +0 -0
  135. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/nmr.py +0 -0
  136. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/pocket_detection.py +0 -0
  137. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/pose_analysis_md.py +0 -0
  138. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/protein_binder_design.py +0 -0
  139. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/protein_cofolding.py +0 -0
  140. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/rbfe_graph.py +0 -0
  141. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/redox_potential.py +0 -0
  142. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/relative_binding_free_energy_perturbation.py +0 -0
  143. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/scan.py +0 -0
  144. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/solubility.py +0 -0
  145. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/solvent_dependent_conformers.py +0 -0
  146. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/spin_states.py +0 -0
  147. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/strain.py +0 -0
  148. {rowan_python-3.1.2 → rowan_python-3.1.4}/rowan/workflows/tautomer_search.py +0 -0
  149. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/admet.md +0 -0
  150. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/analogue_docking.md +0 -0
  151. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/basic_calculation.md +0 -0
  152. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/batch_docking.md +0 -0
  153. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/bde.md +0 -0
  154. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/descriptors.md +0 -0
  155. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/double_ended_ts_search.md +0 -0
  156. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/electronic_properties.md +0 -0
  157. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/fukui.md +0 -0
  158. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/hydrogen_bond_donor_acceptor_strength.md +0 -0
  159. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/interaction_energy_decomposition.md +0 -0
  160. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/ion_mobility.md +0 -0
  161. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/irc.md +0 -0
  162. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/macropka.md +0 -0
  163. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/membrane_permeability.md +0 -0
  164. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/multistage_optimization.md +0 -0
  165. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/nmr.md +0 -0
  166. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/pka.md +0 -0
  167. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/pocket_detection.md +0 -0
  168. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/protein_binder_design.md +0 -0
  169. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/protein_cofolding.md +0 -0
  170. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/rbfe_graph.md +0 -0
  171. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/redox_potential.md +0 -0
  172. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/relative_binding_free_energy_perturbation.md +0 -0
  173. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/solubility.md +0 -0
  174. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/solvent_dependent_conformers.md +0 -0
  175. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/spin_states.md +0 -0
  176. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/strain.md +0 -0
  177. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/tautomer_search.md +0 -0
  178. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/reference/webhooks.md +0 -0
  179. {rowan_python-3.1.2 → rowan_python-3.1.4}/skills/computational-chemistry-and-biology/scripts/check_env.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rowan-python
3
- Version: 3.1.2
3
+ Version: 3.1.4
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
@@ -23,6 +23,16 @@
23
23
  - batch_submit_workflow
24
24
  - batch_poll_status
25
25
 
26
+ ::: rowan.calculation
27
+ handler: python
28
+ options:
29
+ show_source: false
30
+ show_root_heading: false
31
+ show_root_toc_entry: false
32
+ members_order: source
33
+ group_by_category: true
34
+ filters: ["!^_"]
35
+
26
36
  ## ADMET
27
37
  ::: rowan.workflows.admet
28
38
  handler: python
@@ -254,6 +264,17 @@
254
264
  group_by_category: true
255
265
  filters: ["!^__"]
256
266
 
267
+ ## Pocket Detection
268
+ ::: rowan.workflows.pocket_detection
269
+ handler: python
270
+ options:
271
+ show_source: false
272
+ show_root_heading: false
273
+ show_root_toc_entry: false
274
+ members_order: source
275
+ group_by_category: true
276
+ filters: ["!^__"]
277
+
257
278
  ## Pose Analysis MD
258
279
  ::: rowan.workflows.pose_analysis_md
259
280
  handler: python
@@ -397,6 +418,17 @@
397
418
  group_by_category: true
398
419
  filters: ["!^__"]
399
420
 
421
+ ## API Keys
422
+ ::: rowan.api_keys
423
+ handler: python
424
+ options:
425
+ show_source: false
426
+ show_root_heading: false
427
+ show_root_toc_entry: false
428
+ members_order: source
429
+ group_by_category: true
430
+ filters: ["!^__"]
431
+
400
432
  ## Folder Class and Functions
401
433
  ::: rowan.folder
402
434
  handler: python
@@ -13,7 +13,7 @@ ligands = [
13
13
  ]
14
14
 
15
15
  protein = rowan.create_protein_from_pdb_id(
16
- "CDK2", "1HCK", project_uuid=rowan.default_project().uuid
16
+ "1HCK", name="CDK2", project_uuid=rowan.default_project().uuid
17
17
  )
18
18
 
19
19
  protein.prepare()
@@ -14,7 +14,7 @@ msa_workflow = rowan.submit_msa_workflow(
14
14
  "VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR",
15
15
  "VHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH",
16
16
  ],
17
- output_formats=["boltz"],
17
+ output_formats=[rowan.MSAFormat.BOLTZ],
18
18
  name="Boltz Paired MSA Example",
19
19
  folder=folder,
20
20
  )
@@ -23,7 +23,7 @@ print(f"View workflow privately at: https://labs.rowansci.com/msa/{msa_workflow.
23
23
 
24
24
  msa_result = msa_workflow.result()
25
25
 
26
- msa_result.download_files("boltz", path=msa_directory)
26
+ msa_result.download_files(rowan.MSAFormat.BOLTZ, path=msa_directory)
27
27
 
28
28
  tar_path = next(msa_directory.glob("*.tar.gz"))
29
29
  with tarfile.open(tar_path, "r") as tar_ref:
@@ -13,7 +13,7 @@ msa_workflow = rowan.submit_msa_workflow(
13
13
  initial_protein_sequences=[
14
14
  "HPETLVKVKDAEDQLGARVGYIELDLNSGKILESFRPEERFPMMSTFKVLLCGAVLSRIDAGQEQLGRRIHYSQNDLVEYSPVTEKHLTDGMTVRELCSAAITMSDNTAANLLLTTIGGPKELTAFLHNMGDHVTRLDRWEPELNEAIPNDERDTTMPVAMATTLRKLLTGELLTLASRQQLIDWMEADKVAGPLLRSALPAGWFIADKSGAGERGSRGIIAALGPDGKPSRIVVIYTTGSQATMDERNRQIAEIGASLIKHW"
15
15
  ],
16
- output_formats=["boltz"],
16
+ output_formats=[rowan.MSAFormat.BOLTZ],
17
17
  name="Boltz MSA Example",
18
18
  folder=folder,
19
19
  )
@@ -22,7 +22,7 @@ print(f"View workflow privately at: https://labs.rowansci.com/msa/{msa_workflow.
22
22
 
23
23
  msa_result = msa_workflow.result()
24
24
 
25
- msa_result.download_files("boltz", path=msa_directory)
25
+ msa_result.download_files(rowan.MSAFormat.BOLTZ, path=msa_directory)
26
26
 
27
27
  tar_path = next(msa_directory.glob("*.tar.gz"))
28
28
  with tarfile.open(tar_path, "r") as tar_ref:
@@ -25,7 +25,7 @@ msa_workflow = rowan.submit_msa_workflow(
25
25
  "VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR",
26
26
  "VHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH",
27
27
  ],
28
- output_formats=["chai"],
28
+ output_formats=[rowan.MSAFormat.CHAI],
29
29
  name="CHAI Paired MSA Example",
30
30
  folder=folder,
31
31
  )
@@ -34,7 +34,7 @@ print(f"View workflow privately at: https://labs.rowansci.com/msa/{msa_workflow.
34
34
 
35
35
  msa_result = msa_workflow.result()
36
36
 
37
- msa_result.download_files("chai", path=msa_directory)
37
+ msa_result.download_files(rowan.MSAFormat.CHAI, path=msa_directory)
38
38
 
39
39
  tar_path = next(msa_directory.glob("*.tar.gz"))
40
40
  with tarfile.open(tar_path, "r") as tar_ref:
@@ -22,7 +22,7 @@ msa_workflow = rowan.submit_msa_workflow(
22
22
  initial_protein_sequences=[
23
23
  "HPETLVKVKDAEDQLGARVGYIELDLNSGKILESFRPEERFPMMSTFKVLLCGAVLSRIDAGQEQLGRRIHYSQNDLVEYSPVTEKHLTDGMTVRELCSAAITMSDNTAANLLLTTIGGPKELTAFLHNMGDHVTRLDRWEPELNEAIPNDERDTTMPVAMATTLRKLLTGELLTLASRQQLIDWMEADKVAGPLLRSALPAGWFIADKSGAGERGSRGIIAALGPDGKPSRIVVIYTTGSQATMDERNRQIAEIGASLIKHW"
24
24
  ],
25
- output_formats=["chai"],
25
+ output_formats=[rowan.MSAFormat.CHAI],
26
26
  name="CHAI MSA Example",
27
27
  folder=folder,
28
28
  )
@@ -31,7 +31,7 @@ print(f"View workflow privately at: https://labs.rowansci.com/msa/{msa_workflow.
31
31
 
32
32
  msa_result = msa_workflow.result()
33
33
 
34
- msa_result.download_files("chai", path=msa_directory)
34
+ msa_result.download_files(rowan.MSAFormat.CHAI, path=msa_directory)
35
35
 
36
36
  tar_path = next(msa_directory.glob("*.tar.gz"))
37
37
  with tarfile.open(tar_path, "r") as tar_ref:
@@ -14,7 +14,7 @@ msa_workflow = rowan.submit_msa_workflow(
14
14
  "VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR",
15
15
  "VHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH",
16
16
  ],
17
- output_formats=["colabfold"],
17
+ output_formats=[rowan.MSAFormat.COLABFOLD],
18
18
  name="Colabfold Paired MSA Example",
19
19
  folder=folder,
20
20
  )
@@ -23,7 +23,7 @@ print(f"View workflow privately at: https://labs.rowansci.com/msa/{msa_workflow.
23
23
 
24
24
  msa_result = msa_workflow.result()
25
25
 
26
- msa_result.download_files("colabfold", path=msa_directory)
26
+ msa_result.download_files(rowan.MSAFormat.COLABFOLD, path=msa_directory)
27
27
 
28
28
  tar_path = next(msa_directory.glob("*.tar.gz"))
29
29
  with tarfile.open(tar_path, "r") as tar_ref:
@@ -13,7 +13,7 @@ msa_workflow = rowan.submit_msa_workflow(
13
13
  initial_protein_sequences=[
14
14
  "HPETLVKVKDAEDQLGARVGYIELDLNSGKILESFRPEERFPMMSTFKVLLCGAVLSRIDAGQEQLGRRIHYSQNDLVEYSPVTEKHLTDGMTVRELCSAAITMSDNTAANLLLTTIGGPKELTAFLHNMGDHVTRLDRWEPELNEAIPNDERDTTMPVAMATTLRKLLTGELLTLASRQQLIDWMEADKVAGPLLRSALPAGWFIADKSGAGERGSRGIIAALGPDGKPSRIVVIYTTGSQATMDERNRQIAEIGASLIKHW"
15
15
  ],
16
- output_formats=["colabfold"],
16
+ output_formats=[rowan.MSAFormat.COLABFOLD],
17
17
  name="Colabfold MSA Example",
18
18
  folder=folder,
19
19
  )
@@ -22,7 +22,7 @@ print(f"View workflow privately at: https://labs.rowansci.com/msa/{msa_workflow.
22
22
 
23
23
  msa_result = msa_workflow.result()
24
24
 
25
- msa_result.download_files("colabfold", path=msa_directory)
25
+ msa_result.download_files(rowan.MSAFormat.COLABFOLD, path=msa_directory)
26
26
 
27
27
  tar_path = next(msa_directory.glob("*.tar.gz"))
28
28
  with tarfile.open(tar_path, "r") as tar_ref:
@@ -0,0 +1,39 @@
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
+ # Dasatinib — redocked into its own ABL1 co-crystal structure (PDB: 2GQG)
8
+ dasatinib = rowan.Molecule.from_smiles("Cc1nc(Nc2ncc(C(=O)Nc3c(C)cccc3Cl)s2)cc(N2CCN(CCO)CC2)n1")
9
+
10
+ protein = rowan.create_protein_from_pdb_id("2GQG")
11
+ if len(protein.chains) > 1:
12
+ protein = protein.select_chains([protein.chains[0]])
13
+ protein.prepare()
14
+
15
+ # Pocket is [[center_x, center_y, center_z], [size_x, size_y, size_z]] in Å.
16
+ # For a co-crystal structure, extract these from the bound ligand's position.
17
+ # Use rowan.submit_pocket_detection_workflow() when the binding site is unknown.
18
+ center = [44.59, 79.75, 39.59]
19
+ size = [24.15, 21.33, 19.88]
20
+ workflow = rowan.submit_docking_workflow(
21
+ protein,
22
+ pocket=[center, size],
23
+ initial_molecule=dasatinib,
24
+ name="dasatinib docking (2GQG redock)",
25
+ folder=folder,
26
+ )
27
+
28
+ print(f"View workflow privately at: https://labs.rowansci.com/docking/{workflow.uuid}")
29
+
30
+ result = workflow.result()
31
+ print(result)
32
+
33
+ for i, score in enumerate(result.scores):
34
+ print(f" Pose {i}: score={score.score:.3f} posebusters_valid={score.posebusters_valid}")
35
+
36
+ # Download the top-scoring protein–ligand complex as a PDB
37
+ complex_protein = result.get_complex(0)
38
+ complex_protein.download_pdb_file("dasatinib_2GQG_complex.pdb")
39
+ print("Saved dasatinib_2GQG_complex.pdb")
@@ -19,7 +19,7 @@ workflows = []
19
19
  results = {}
20
20
 
21
21
  protein = rowan.create_protein_from_pdb_id(
22
- "CDK2", "1HCK", project_uuid=rowan.default_project().uuid
22
+ "1HCK", name="CDK2", project_uuid=rowan.default_project().uuid
23
23
  )
24
24
 
25
25
  protein.prepare()
@@ -43,11 +43,14 @@ lowest_conformer_energy = 0
43
43
  for workflow, result in workflow_results:
44
44
  for conformer_uuid in result.conformers:
45
45
  energy = rowan.retrieve_calculation_molecules(conformer_uuid)[0]["energy"]
46
- lowest_conformer_energy = min(lowest_conformer_energy, energy)
46
+ if energy is not None:
47
+ lowest_conformer_energy = min(lowest_conformer_energy, energy)
47
48
 
48
49
  sorted_scores = sorted(result.scores, key=lambda s: s.score)
49
50
  for score in sorted_scores:
50
51
  pose_energy = rowan.retrieve_calculation_molecules(score.pose)[0]["energy"]
52
+ if pose_energy is None:
53
+ continue
51
54
  strain = (pose_energy - lowest_conformer_energy) * HARTREE_TO_KCALMOL
52
55
  if score.posebusters_valid and strain < 4:
53
56
  results[workflow.name] = score
@@ -5,7 +5,7 @@ import rowan
5
5
  folder = rowan.get_folder("examples")
6
6
 
7
7
  protein = rowan.create_protein_from_pdb_id(
8
- "thymidine phosphorylase", "1OTP", project_uuid=rowan.default_project().uuid
8
+ "1OTP", name="thymidine phosphorylase", project_uuid=rowan.default_project().uuid
9
9
  )
10
10
 
11
11
  protein.prepare()
@@ -0,0 +1,39 @@
1
+ """
2
+ Resubmit a completed workflow with a perturbed structure.
3
+
4
+ Two strategies: random noise to break symmetry, or displacement along a
5
+ vibrational mode to follow a reaction coordinate or escape a stuck geometry.
6
+ """
7
+
8
+ import rowan
9
+
10
+ # Set your API key or use the ROWAN_API_KEY environment variable
11
+ # rowan.api_key = "rowan-sk..."
12
+ folder = rowan.get_folder("examples")
13
+
14
+ # --- Option 1: random noise ---
15
+ wf = rowan.retrieve_workflow("your-workflow-uuid")
16
+ mol = wf.result().molecule
17
+
18
+ perturbed_mol = mol.perturb()
19
+ resubmit = rowan.submit_multistage_optimization_workflow(
20
+ initial_molecule=perturbed_mol,
21
+ name="cyclobutane opt - perturbed resubmit",
22
+ folder=folder,
23
+ )
24
+ print(f"https://labs.rowansci.com/multistage-opt/{resubmit.uuid}")
25
+
26
+ # --- Option 2: displace along a vibrational mode ---
27
+ # Requires a prior frequency calculation. Imaginary modes have negative frequency.
28
+ ts_wf = rowan.retrieve_workflow("your-ts-freq-workflow-uuid")
29
+ ts_mol = ts_wf.result().molecule
30
+
31
+ imaginary_mode = next(m for m in ts_mol.vibrational_modes if m.frequency < 0)
32
+
33
+ displaced_mol = ts_mol.displace_along_mode(mode=imaginary_mode, displacement=0.3)
34
+ resubmit = rowan.submit_multistage_optimization_workflow(
35
+ initial_molecule=displaced_mol,
36
+ name="TS resubmit - displaced along imaginary mode",
37
+ folder=folder,
38
+ )
39
+ print(f"https://labs.rowansci.com/multistage-opt/{resubmit.uuid}")
@@ -13,13 +13,13 @@ folder = rowan.get_folder("examples")
13
13
  workflow = rowan.submit_scan_workflow(
14
14
  initial_molecule=rowan.Molecule.from_smiles("O"),
15
15
  name="Water Angle scan",
16
- scan_settings={
17
- "type": "angle",
18
- "atoms": [2, 1, 3], # 1-indexed
19
- "start": 100,
20
- "stop": 110,
21
- "num": 5,
22
- },
16
+ scan_settings=rowan.ScanSettings(
17
+ type="angle",
18
+ atoms=[2, 1, 3], # 1-indexed
19
+ start=100,
20
+ stop=110,
21
+ num=5,
22
+ ),
23
23
  calculation_method="GFN2-xTB",
24
24
  calculation_engine="xtb",
25
25
  folder=folder,
@@ -153,7 +153,6 @@ environments:
153
153
  - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl
154
154
  - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl
155
155
  - pypi: https://files.pythonhosted.org/packages/6a/aa/12f68944c88c854c442f7d834dad3a06c5dfa083d004b6a4d35d8d9319e5/stjames-0.0.210-py3-none-any.whl
156
- - pypi: https://files.pythonhosted.org/packages/6d/ff/d353d6b7bbd73cc0ec37f4463d7540e45e894338abdd9964eee0de332708/ruff-0.15.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
157
156
  - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl
158
157
  - pypi: https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl
159
158
  - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl
@@ -167,6 +166,7 @@ environments:
167
166
  - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl
168
167
  - pypi: https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
169
168
  - pypi: https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
169
+ - pypi: https://files.pythonhosted.org/packages/89/3d/0b1f30f84bee9ae6ae8d349c2ba8b6f4b040966744efdd3acc804ae7c024/ruff-0.15.19-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
170
170
  - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl
171
171
  - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl
172
172
  - pypi: https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl
@@ -188,7 +188,6 @@ environments:
188
188
  - pypi: https://files.pythonhosted.org/packages/ba/16/9826f089383c593cdfc4a6e5aca94d9e91ae1692c57af82c3b2aa5e810f7/anyio-4.14.0-py3-none-any.whl
189
189
  - pypi: https://files.pythonhosted.org/packages/bd/6e/95b0e537de1f4d4301f76f944642c6da50d1511cc7b3d64dc418a66c7509/wcwidth-0.8.1-py3-none-any.whl
190
190
  - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl
191
- - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl
192
191
  - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl
193
192
  - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl
194
193
  - pypi: https://files.pythonhosted.org/packages/d1/fc/10ab7e80650a9c9e8f4f1105f8c8e73567f88ed0c06ada589ab81d38687c/mkdocstrings_python-2.0.5-py3-none-any.whl
@@ -206,6 +205,7 @@ environments:
206
205
  - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl
207
206
  - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl
208
207
  - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
208
+ - pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl
209
209
  - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl
210
210
  osx-arm64:
211
211
  - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda
@@ -250,7 +250,6 @@ environments:
250
250
  - pypi: https://files.pythonhosted.org/packages/3e/5c/fb93d3092640a24dfb7bd7727a24016d7c01774ca013e60efd3f683c8002/backrefs-7.0-py314-none-any.whl
251
251
  - pypi: https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl
252
252
  - pypi: https://files.pythonhosted.org/packages/45/da/825325da9989d10a309378754464898c07199a2881fd04171613948aa82f/rdkit-2026.3.3-cp314-cp314-macosx_11_0_arm64.whl
253
- - pypi: https://files.pythonhosted.org/packages/51/93/4769464c25cf7ab2acb3c7dda9cad3d867eb41c59565b3e2a9d17249c90c/ruff-0.15.18-py3-none-macosx_11_0_arm64.whl
254
253
  - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl
255
254
  - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl
256
255
  - pypi: https://files.pythonhosted.org/packages/5d/39/b72e168daf9c00fb20c9fc996d00437ccecdef3102387775d29d7a62576d/numpy-2.5.0-cp314-cp314-macosx_11_0_arm64.whl
@@ -291,7 +290,6 @@ environments:
291
290
  - pypi: https://files.pythonhosted.org/packages/bd/6e/95b0e537de1f4d4301f76f944642c6da50d1511cc7b3d64dc418a66c7509/wcwidth-0.8.1-py3-none-any.whl
292
291
  - pypi: https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl
293
292
  - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl
294
- - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl
295
293
  - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl
296
294
  - pypi: https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl
297
295
  - pypi: https://files.pythonhosted.org/packages/d1/fc/10ab7e80650a9c9e8f4f1105f8c8e73567f88ed0c06ada589ab81d38687c/mkdocstrings_python-2.0.5-py3-none-any.whl
@@ -310,7 +308,9 @@ environments:
310
308
  - pypi: https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl
311
309
  - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl
312
310
  - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
311
+ - pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl
313
312
  - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl
313
+ - pypi: https://files.pythonhosted.org/packages/fe/93/78d462e7d39968e58094dc57be7d09ffb14ce37da5b68ed70338a35a1f21/ruff-0.15.19-py3-none-macosx_11_0_arm64.whl
314
314
  packages:
315
315
  - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda
316
316
  build_number: 20
@@ -1170,11 +1170,6 @@ packages:
1170
1170
  - pip ; extra == 'install-types'
1171
1171
  - orjson ; extra == 'faster-cache'
1172
1172
  requires_python: '>=3.10'
1173
- - pypi: https://files.pythonhosted.org/packages/51/93/4769464c25cf7ab2acb3c7dda9cad3d867eb41c59565b3e2a9d17249c90c/ruff-0.15.18-py3-none-macosx_11_0_arm64.whl
1174
- name: ruff
1175
- version: 0.15.18
1176
- sha256: 08d4c86a68f2c3ec2c9d56380a71fb4a4f65373055cbb8caabd645e9102f38d4
1177
- requires_python: '>=3.7'
1178
1173
  - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl
1179
1174
  name: pluggy
1180
1175
  version: 1.6.0
@@ -1215,11 +1210,6 @@ packages:
1215
1210
  - more-itertools
1216
1211
  - rdkit ; extra == 'rdkit'
1217
1212
  requires_python: '>=3.11'
1218
- - pypi: https://files.pythonhosted.org/packages/6d/ff/d353d6b7bbd73cc0ec37f4463d7540e45e894338abdd9964eee0de332708/ruff-0.15.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
1219
- name: ruff
1220
- version: 0.15.18
1221
- sha256: 5f0480ce690cbb6c4db6e5d08f19fce98e10ba131a8b60c1bcdac42771e3ae2d
1222
- requires_python: '>=3.7'
1223
1213
  - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl
1224
1214
  name: mkdocstrings
1225
1215
  version: 1.0.4
@@ -1384,6 +1374,11 @@ packages:
1384
1374
  requires_dist:
1385
1375
  - typing-extensions>=4.14.1
1386
1376
  requires_python: '>=3.9'
1377
+ - pypi: https://files.pythonhosted.org/packages/89/3d/0b1f30f84bee9ae6ae8d349c2ba8b6f4b040966744efdd3acc804ae7c024/ruff-0.15.19-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
1378
+ name: ruff
1379
+ version: 0.15.19
1380
+ sha256: 6a498f82e0f4d8904c4e0aea5139cdfac1f39d19a3c51d491292f63a36e83b2e
1381
+ requires_python: '>=3.7'
1387
1382
  - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl
1388
1383
  name: pure-eval
1389
1384
  version: 0.2.3
@@ -1770,13 +1765,6 @@ packages:
1770
1765
  - littleutils ; extra == 'tests'
1771
1766
  - rich ; python_full_version >= '3.11' and extra == 'tests'
1772
1767
  requires_python: '>=3.8'
1773
- - pypi: https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl
1774
- name: click
1775
- version: 8.4.1
1776
- sha256: 482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2
1777
- requires_dist:
1778
- - colorama ; sys_platform == 'win32'
1779
- requires_python: '>=3.10'
1780
1768
  - pypi: https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl
1781
1769
  name: iniconfig
1782
1770
  version: 2.3.0
@@ -1919,6 +1907,13 @@ packages:
1919
1907
  - markdown ; extra == 'dev'
1920
1908
  - flake8 ; extra == 'dev'
1921
1909
  - wheel ; extra == 'dev'
1910
+ - pypi: https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl
1911
+ name: click
1912
+ version: 8.4.2
1913
+ sha256: e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76
1914
+ requires_dist:
1915
+ - colorama ; sys_platform == 'win32'
1916
+ requires_python: '>=3.10'
1922
1917
  - pypi: https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl
1923
1918
  name: pydantic
1924
1919
  version: 2.13.4
@@ -1931,3 +1926,8 @@ packages:
1931
1926
  - email-validator>=2.0.0 ; extra == 'email'
1932
1927
  - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone'
1933
1928
  requires_python: '>=3.9'
1929
+ - pypi: https://files.pythonhosted.org/packages/fe/93/78d462e7d39968e58094dc57be7d09ffb14ce37da5b68ed70338a35a1f21/ruff-0.15.19-py3-none-macosx_11_0_arm64.whl
1930
+ name: ruff
1931
+ version: 0.15.19
1932
+ sha256: 5a2c86ba6870dd415a9d9eb8be94d7924ebec6a26ffc7958ec7ca29d4bff967d
1933
+ requires_python: '>=3.7'
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "rowan-python"
3
- version = "3.1.2"
3
+ version = "3.1.4"
4
4
  description = "Rowan Python Library"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -2,6 +2,8 @@
2
2
  from . import constants
3
3
  from stjames import (
4
4
  Atom,
5
+ BindingPoseContact,
6
+ ConformerGenSettings,
5
7
  Constraint,
6
8
  ConstraintType,
7
9
  ConformerClusteringSettings,
@@ -14,15 +16,19 @@ from stjames import (
14
16
  KMeansClusteringSettings,
15
17
  Method,
16
18
  Mode,
19
+ MSAFormat,
17
20
  MultiStageOptSettings,
18
21
  OpenConfSettings,
19
22
  OptimizationSettings,
20
23
  PBCDFTSettings,
21
24
  PeriodicCell,
25
+ ProteinSequence,
26
+ ScanSettings,
22
27
  Settings,
23
28
  Solvent,
24
29
  SolventSettings,
25
30
  Task,
31
+ VibrationalMode,
26
32
  )
27
33
  from stjames.workflows.relative_binding_free_energy_perturbation import RBFEGraph, RBFEGraphEdge
28
34
  from stjames.excited_state_settings import TDDFTSettings
@@ -2,6 +2,7 @@
2
2
 
3
3
  from typing import Self
4
4
 
5
+ import httpx
5
6
  import stjames
6
7
  from pydantic import BaseModel, ConfigDict, Field
7
8
 
@@ -62,10 +63,13 @@ class Calculation(BaseModel):
62
63
  :param in_place: If True, update this instance in-place. If False, return new instance.
63
64
  :returns: Updated Calculation object.
64
65
  """
65
- with api_client() as client:
66
- response = client.get(f"/calculation/{self.uuid}/stjames")
67
- response.raise_for_status()
68
- data = response.json()
66
+ try:
67
+ with api_client() as client:
68
+ response = client.get(f"/calculation/{self.uuid}/stjames")
69
+ response.raise_for_status()
70
+ data = response.json()
71
+ except httpx.TimeoutException as e:
72
+ raise TimeoutError(f"Timed out fetching calculation {self.uuid}.") from e
69
73
 
70
74
  molecules = _parse_molecules(data.get("molecules", []))
71
75
 
@@ -94,11 +98,15 @@ def retrieve_calculation(uuid: str) -> Calculation:
94
98
  :param uuid: UUID of the calculation to retrieve.
95
99
  :returns: Calculation object with the fetched data.
96
100
  :raises requests.HTTPError: If the API request fails.
101
+ :raises TimeoutError: If the response times out.
97
102
  """
98
- with api_client() as client:
99
- response = client.get(f"/calculation/{uuid}/stjames")
100
- response.raise_for_status()
101
- data = response.json()
103
+ try:
104
+ with api_client() as client:
105
+ response = client.get(f"/calculation/{uuid}/stjames")
106
+ response.raise_for_status()
107
+ data = response.json()
108
+ except httpx.TimeoutException as e:
109
+ raise TimeoutError(f"Timed out fetching calculation {uuid}.") from e
102
110
 
103
111
  molecules = _parse_molecules(data.get("molecules", []))
104
112