rowan-python 3.1.16__tar.gz → 3.2.1__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 (280) hide show
  1. rowan_python-3.2.1/.editorconfig +16 -0
  2. rowan_python-3.2.1/.envrc +6 -0
  3. {rowan_python-3.1.16 → rowan_python-3.2.1}/.github/workflows/build-and-deploy-docs.yml +16 -10
  4. {rowan_python-3.1.16 → rowan_python-3.2.1}/.github/workflows/publish-skill.yml +1 -1
  5. rowan_python-3.2.1/.github/workflows/python-publish.yml +54 -0
  6. rowan_python-3.2.1/.github/workflows/test.yml +55 -0
  7. rowan_python-3.2.1/.gitignore +66 -0
  8. rowan_python-3.2.1/.python-version +1 -0
  9. rowan_python-3.2.1/.rumdl.toml +21 -0
  10. {rowan_python-3.1.16 → rowan_python-3.2.1}/PKG-INFO +18 -11
  11. {rowan_python-3.1.16 → rowan_python-3.2.1}/README.md +14 -8
  12. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/index.md +11 -11
  13. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/basic-calculation.md +1 -1
  14. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/basic_calculation_with_solvent.py +4 -0
  15. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/batch_docking.py +4 -1
  16. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/bde.py +1 -2
  17. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/boltz_paired_msa.py +1 -1
  18. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/boltz_single_msa.py +1 -1
  19. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/chai_paired_msa.py +1 -1
  20. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/chai_single_msa.py +1 -1
  21. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/cofolding_screen.py +2 -0
  22. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/colabfold_paired_msa.py +1 -1
  23. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/colabfold_single_msa.py +1 -1
  24. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/conformer_dependent_redox.py +2 -0
  25. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/conformers.py +1 -2
  26. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/conformers_screen.py +1 -2
  27. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/covalent_docking.py +2 -1
  28. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/covalent_inhibitor_scan.py +2 -1
  29. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/descriptors.py +1 -2
  30. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/docking.py +4 -1
  31. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/docking_screen.py +6 -1
  32. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/double_ended_ts_search.py +1 -2
  33. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/electronic_properties.py +1 -2
  34. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/hydrogen_bond_basicity.py +1 -2
  35. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/induced_fit_docking.py +4 -1
  36. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/multistage_optimization.py +1 -2
  37. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/optimization.py +1 -2
  38. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/periodic_dft.py +6 -0
  39. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/pka.py +1 -2
  40. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/pocket_detection.py +4 -1
  41. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/pose_analysis_md.py +6 -1
  42. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/protein_binder_design.py +1 -2
  43. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/protein_cofolding_with_templates.py +2 -1
  44. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/protein_md.py +6 -2
  45. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/rbfe_resubmit.py +5 -1
  46. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/redox_potential.py +2 -3
  47. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/relative_binding_free_energy_perturbation.py +4 -1
  48. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/resubmit_with_perturbations.py +15 -6
  49. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/retrieve_workflow.py +5 -1
  50. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/scan.py +1 -2
  51. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/spin_states.py +1 -2
  52. {rowan_python-3.1.16 → rowan_python-3.2.1}/mkdocs.yml +1 -1
  53. rowan_python-3.2.1/prek.toml +74 -0
  54. {rowan_python-3.1.16 → rowan_python-3.2.1}/pyproject.toml +62 -55
  55. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/api_keys.py +70 -58
  56. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/calculation.py +25 -19
  57. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/config.py +85 -64
  58. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/folder.py +159 -114
  59. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/molecule.py +99 -72
  60. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/project.py +71 -50
  61. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/protein.py +133 -204
  62. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/user.py +47 -47
  63. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/utils.py +20 -13
  64. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/_molecular_dynamics.py +56 -29
  65. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/admet.py +21 -19
  66. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/analogue_docking.py +85 -64
  67. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/base.py +316 -226
  68. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/basic_calculation.py +63 -52
  69. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/batch_docking.py +31 -26
  70. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/bde.py +63 -48
  71. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/binding_affinity.py +57 -50
  72. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/conformer_search.py +113 -79
  73. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/constants.py +5 -2
  74. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/covalent_inhibitor_scan.py +52 -47
  75. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/descriptors.py +27 -22
  76. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/docking.py +102 -83
  77. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/double_ended_ts_search.py +42 -37
  78. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/electronic_properties.py +34 -28
  79. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/fukui.py +32 -27
  80. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/hydrogen_bond_donor_acceptor_strength.py +23 -18
  81. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/interaction_energy_decomposition.py +30 -25
  82. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/ion_mobility.py +26 -22
  83. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/irc.py +66 -54
  84. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/logp.py +30 -25
  85. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/macropka.py +32 -27
  86. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/membrane_permeability.py +22 -17
  87. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/msa.py +33 -24
  88. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/multistage_optimization.py +35 -31
  89. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/nmr.py +46 -42
  90. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/pka.py +47 -41
  91. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/pocket_detection.py +34 -29
  92. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/pose_analysis_md.py +76 -72
  93. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/protein_binder_design.py +55 -50
  94. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/protein_cofolding.py +79 -74
  95. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/protein_md.py +84 -75
  96. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/protein_preparation.py +44 -36
  97. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/rbfe_graph.py +40 -34
  98. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/redox_potential.py +25 -20
  99. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/relative_binding_free_energy_perturbation.py +109 -78
  100. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/scan.py +48 -41
  101. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/solubility.py +67 -58
  102. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/solvent_dependent_conformers.py +44 -37
  103. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/spin_states.py +62 -54
  104. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/strain.py +38 -31
  105. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/tautomer_search.py +41 -36
  106. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/SKILL.md +1 -1
  107. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/basic_calculation.md +1 -0
  108. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/binding_affinity.md +8 -4
  109. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/double_ended_ts_search.md +1 -1
  110. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/protein_md.md +1 -0
  111. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/protein_preparation.md +0 -11
  112. {rowan_python-3.1.16 → rowan_python-3.2.1}/tests/test_binding_affinity.py +6 -5
  113. {rowan_python-3.1.16 → rowan_python-3.2.1}/tests/test_cofolding_workflow_updates.py +4 -5
  114. rowan_python-3.2.1/tests/test_conformer_search.py +81 -0
  115. {rowan_python-3.1.16 → rowan_python-3.2.1}/tests/test_docking_workflow.py +10 -8
  116. {rowan_python-3.1.16 → rowan_python-3.2.1}/tests/test_docking_workflow_updates.py +3 -4
  117. {rowan_python-3.1.16 → rowan_python-3.2.1}/tests/test_macropka_nmr.py +3 -3
  118. {rowan_python-3.1.16 → rowan_python-3.2.1}/tests/test_mango_forcefields.py +7 -5
  119. {rowan_python-3.1.16 → rowan_python-3.2.1}/tests/test_md_workflow_updates.py +9 -12
  120. rowan_python-3.2.1/tests/test_rbfe_trajectory_download.py +53 -0
  121. {rowan_python-3.1.16 → rowan_python-3.2.1}/tests/test_solvent_dependent_conformers.py +3 -3
  122. {rowan_python-3.1.16 → rowan_python-3.2.1}/tests/test_tautomer_search.py +3 -3
  123. {rowan_python-3.1.16 → rowan_python-3.2.1}/tests/test_utils.py +9 -7
  124. rowan_python-3.2.1/tests/test_workflow_results.py +66 -0
  125. {rowan_python-3.1.16 → rowan_python-3.2.1}/tests/test_workflow_submission.py +5 -6
  126. rowan_python-3.2.1/uv.lock +1386 -0
  127. rowan_python-3.1.16/.agents/plugins/marketplace.json +0 -20
  128. rowan_python-3.1.16/.envrc +0 -4
  129. rowan_python-3.1.16/.github/workflows/python-publish.yml +0 -45
  130. rowan_python-3.1.16/.github/workflows/test.yml +0 -34
  131. rowan_python-3.1.16/.gitignore +0 -210
  132. rowan_python-3.1.16/.pre-commit-config.yaml +0 -36
  133. rowan_python-3.1.16/AGENTS.md +0 -132
  134. rowan_python-3.1.16/CLAUDE.md +0 -1
  135. rowan_python-3.1.16/GEMINI.md +0 -1
  136. rowan_python-3.1.16/pixi.lock +0 -1996
  137. {rowan_python-3.1.16 → rowan_python-3.2.1}/.claude-plugin/marketplace.json +0 -0
  138. {rowan_python-3.1.16 → rowan_python-3.2.1}/.codex-plugin/plugin.json +0 -0
  139. {rowan_python-3.1.16 → rowan_python-3.2.1}/LICENSE +0 -0
  140. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/api/api-keys.md +0 -0
  141. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/api/calculation.md +0 -0
  142. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/api/folder.md +0 -0
  143. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/api/molecule.md +0 -0
  144. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/api/project.md +0 -0
  145. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/api/protein.md +0 -0
  146. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/api/user.md +0 -0
  147. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/api/webhooks.md +0 -0
  148. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/api/workflow.md +0 -0
  149. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/images/RowanLogoLarge.png +0 -0
  150. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/images/RowanSquareLogo.png +0 -0
  151. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/images/favicon.svg +0 -0
  152. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/stylesheets/colors.css +0 -0
  153. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/admet.md +0 -0
  154. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/analogue-docking.md +0 -0
  155. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/batch-docking.md +0 -0
  156. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/binding-affinity.md +0 -0
  157. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/bond-dissociation-energy.md +0 -0
  158. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/conformer-search-settings.md +0 -0
  159. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/conformer-search.md +0 -0
  160. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/covalent-inhibitor-scan.md +0 -0
  161. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/descriptors.md +0 -0
  162. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/docking.md +0 -0
  163. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/double-ended-ts-search.md +0 -0
  164. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/electronic-properties.md +0 -0
  165. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/fukui.md +0 -0
  166. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/hydrogen-bond-donor-acceptor-strength.md +0 -0
  167. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/interaction-energy-decomposition.md +0 -0
  168. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/ion-mobility.md +0 -0
  169. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/irc.md +0 -0
  170. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/logp.md +0 -0
  171. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/macropka.md +0 -0
  172. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/membrane-permeability.md +0 -0
  173. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/msa.md +0 -0
  174. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/multistage-optimization.md +0 -0
  175. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/nmr.md +0 -0
  176. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/pka.md +0 -0
  177. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/pocket-detection.md +0 -0
  178. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/pose-analysis-md.md +0 -0
  179. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/protein-binder-design.md +0 -0
  180. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/protein-cofolding.md +0 -0
  181. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/protein-md.md +0 -0
  182. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/protein-preparation.md +0 -0
  183. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/rbfe-graph.md +0 -0
  184. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/redox-potential.md +0 -0
  185. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/relative-binding-free-energy-perturbation.md +0 -0
  186. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/scan.md +0 -0
  187. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/settings.md +0 -0
  188. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/solubility.md +0 -0
  189. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/solvent-dependent-conformers.md +0 -0
  190. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/spin-states.md +0 -0
  191. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/strain.md +0 -0
  192. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/tautomer-search.md +0 -0
  193. {rowan_python-3.1.16 → rowan_python-3.2.1}/docs/workflows/types.md +0 -0
  194. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/PROTAC_solubility.py +0 -0
  195. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/admet.py +0 -0
  196. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/analogue_docking.py +0 -0
  197. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/aqueous_solubility.py +0 -0
  198. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/basic_calculation.py +0 -0
  199. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/basic_calculation_from_json.py +0 -0
  200. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/basic_calculation_with_constraint.py +0 -0
  201. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/batch_solubility.py +0 -0
  202. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/binding_affinity.py +0 -0
  203. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/data/1iep_receptorH.pdb +0 -0
  204. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/data/Al_FCC.xyz +0 -0
  205. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/data/citalopram_1iep.xyz +0 -0
  206. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/data/ibuprofen_conformers.sdf +0 -0
  207. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/data/tyk2_ligands.sdf +0 -0
  208. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/data/tyk2_structure.pdb +0 -0
  209. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/data/workflow_example.json +0 -0
  210. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/dcd_download.py +0 -0
  211. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/estimate_workflow.py +0 -0
  212. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/fukui_index.py +0 -0
  213. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/interaction_energy_decomposition.py +0 -0
  214. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/ion_mobility.py +0 -0
  215. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/irc.py +0 -0
  216. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/logp.py +0 -0
  217. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/macropka.py +0 -0
  218. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/membrane_permeability.py +0 -0
  219. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/nmr.py +0 -0
  220. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/phenol_pka.py +0 -0
  221. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/project_scoped_api_key.py +0 -0
  222. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/protein_cofolding.py +0 -0
  223. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/protein_cofolding_modified_inputs.py +0 -0
  224. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/protein_cofolding_with_constraints.py +0 -0
  225. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/protein_file_download.py +0 -0
  226. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/protein_preparation.py +0 -0
  227. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/rbfe_graph.py +0 -0
  228. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/solvent_dependent_conformers.py +0 -0
  229. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/strain.py +0 -0
  230. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/tautomer.py +0 -0
  231. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/template.py +0 -0
  232. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/temporary_workflow_sharing.py +0 -0
  233. {rowan_python-3.1.16 → rowan_python-3.2.1}/examples/webhook.py +0 -0
  234. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/__init__.py +0 -0
  235. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/constants.py +0 -0
  236. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/py.typed +0 -0
  237. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/types.py +0 -0
  238. {rowan_python-3.1.16 → rowan_python-3.2.1}/rowan/workflows/__init__.py +0 -0
  239. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/.claude-plugin/plugin.json +0 -0
  240. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/admet.md +0 -0
  241. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/analogue_docking.md +0 -0
  242. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/batch_docking.md +0 -0
  243. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/bde.md +0 -0
  244. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/conformer_search.md +0 -0
  245. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/covalent_inhibitor_scan.md +0 -0
  246. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/descriptors.md +0 -0
  247. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/docking.md +0 -0
  248. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/electronic_properties.md +0 -0
  249. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/folders_and_projects.md +0 -0
  250. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/fukui.md +0 -0
  251. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/hydrogen_bond_donor_acceptor_strength.md +0 -0
  252. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/interaction_energy_decomposition.md +0 -0
  253. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/ion_mobility.md +0 -0
  254. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/irc.md +0 -0
  255. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/logp.md +0 -0
  256. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/macropka.md +0 -0
  257. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/mcp_execution.md +0 -0
  258. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/membrane_permeability.md +0 -0
  259. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/msa.md +0 -0
  260. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/multistage_optimization.md +0 -0
  261. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/nmr.md +0 -0
  262. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/pka.md +0 -0
  263. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/pocket_detection.md +0 -0
  264. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/pose_analysis_md.md +0 -0
  265. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/protein_binder_design.md +0 -0
  266. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/protein_cofolding.md +0 -0
  267. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/python_sdk.md +0 -0
  268. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/rbfe_graph.md +0 -0
  269. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/redox_potential.md +0 -0
  270. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/relative_binding_free_energy_perturbation.md +0 -0
  271. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/scan.md +0 -0
  272. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/solubility.md +0 -0
  273. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/solvent_dependent_conformers.md +0 -0
  274. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/spin_states.md +0 -0
  275. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/strain.md +0 -0
  276. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/tautomer_search.md +0 -0
  277. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/reference/webhooks.md +0 -0
  278. {rowan_python-3.1.16 → rowan_python-3.2.1}/skills/computational-chemistry-and-biology/scripts/check_env.py +0 -0
  279. {rowan_python-3.1.16 → rowan_python-3.2.1}/tests/test_plugin.py +0 -0
  280. {rowan_python-3.1.16 → rowan_python-3.2.1}/tests/test_protein.py +0 -0
@@ -0,0 +1,16 @@
1
+ # http://editorconfig.org/#file-format-details
2
+ root = true
3
+
4
+ [*]
5
+ charset = utf-8
6
+ end_of_line = lf
7
+ indent_size = 4
8
+ indent_style = space
9
+ insert_final_newline = true
10
+ trim_trailing_whitespace = true
11
+
12
+ [*.md]
13
+ trim_trailing_whitespace = false
14
+
15
+ [Makefile]
16
+ indent_style = tab
@@ -0,0 +1,6 @@
1
+ watch_file pyproject.toml
2
+ watch_file uv.lock
3
+ dotenv_if_exists .env
4
+
5
+ uv sync --frozen
6
+ source .venv/bin/activate
@@ -1,8 +1,8 @@
1
1
  name: Build & Deploy Rowan Python Docs
2
2
 
3
3
  on:
4
- release:
5
- types: [published]
4
+ push:
5
+ branches: [master]
6
6
  workflow_dispatch:
7
7
 
8
8
  permissions:
@@ -10,23 +10,26 @@ permissions:
10
10
 
11
11
  jobs:
12
12
  build-and-deploy-docs:
13
+ if: github.repository == 'rowansci/rowan-python' && github.ref == 'refs/heads/master'
13
14
  runs-on: ubuntu-latest
14
15
 
15
16
  steps:
16
17
  - name: Checkout repository
17
- uses: actions/checkout@v4
18
+ uses: actions/checkout@v7.0.1
18
19
  with:
19
20
  fetch-depth: 0
20
21
  ref: master
21
22
 
22
- - name: Install Pixi
23
- uses: prefix-dev/setup-pixi@v0.9.1
23
+ - name: Install uv
24
+ uses: astral-sh/setup-uv@v10.2.0
24
25
  with:
25
- pixi-version: "latest"
26
- activate-environment: true
26
+ enable-cache: true
27
+
28
+ - name: Install dependencies
29
+ run: uv sync --locked --no-dev --group docs
27
30
 
28
31
  - name: Build MkDocs site
29
- run: pixi run mkdocs-build
32
+ run: uv run --no-sync mkdocs build --clean
30
33
 
31
34
  - name: Install SSH Key
32
35
  uses: shimataro/ssh-key-action@v2
@@ -39,5 +42,8 @@ jobs:
39
42
 
40
43
  - name: Deploy with rsync
41
44
  run: |
42
- rsync -avz --delete ./ \
43
- ${{ secrets.DOCS_USERNAME }}@${{ secrets.DOCS_IP }}:${{ secrets.DOCS_TARGET_DIR }}
45
+ rsync -avz --delete site/ \
46
+ ${{ secrets.DOCS_USERNAME }}@${{ secrets.DOCS_IP }}:${{ secrets.DOCS_TARGET_DIR }}/site/
47
+
48
+ - name: Verify deployed docs
49
+ run: curl --fail --silent --show-error --location --retry 5 --retry-delay 5 --retry-all-errors https://docs.rowansci.com/api/python/v3/ -o /dev/null
@@ -16,7 +16,7 @@ jobs:
16
16
  if: github.repository == 'rowansci/rowan-python'
17
17
  runs-on: ubuntu-latest
18
18
  steps:
19
- - uses: actions/checkout@v4
19
+ - uses: actions/checkout@v7.0.1
20
20
  - name: Zip skill
21
21
  run: cd skills && zip -r ../computational-chemistry-and-biology-skill.zip computational-chemistry-and-biology
22
22
  - name: Publish/refresh release
@@ -0,0 +1,54 @@
1
+ name: Publish
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ concurrency:
12
+ group: ${{ github.workflow }}
13
+ cancel-in-progress: false
14
+
15
+ jobs:
16
+ run:
17
+ runs-on: ubuntu-latest
18
+ # Enable after configuring the repository environment.
19
+ # environment:
20
+ # name: pypi
21
+ # permissions:
22
+ # id-token: write
23
+ # contents: read
24
+ steps:
25
+ - name: Skip if running with act
26
+ if: ${{ env.ACT == 'true' }}
27
+ run: exit 1
28
+
29
+ - name: Checkout
30
+ uses: actions/checkout@v7.0.1
31
+
32
+ - name: Install uv
33
+ uses: astral-sh/setup-uv@v10.2.0
34
+
35
+ - name: Install Python
36
+ run: uv python install
37
+
38
+ - name: Build
39
+ run: uv build
40
+
41
+ - name: Smoke test (wheel)
42
+ run: >-
43
+ uv run --isolated --no-project --directory "$RUNNER_TEMP"
44
+ --with "$GITHUB_WORKSPACE"/dist/*.whl python -c "import rowan"
45
+
46
+ - name: Smoke test (source distribution)
47
+ run: >-
48
+ uv run --isolated --no-project --directory "$RUNNER_TEMP"
49
+ --with "$GITHUB_WORKSPACE"/dist/*.tar.gz python -c "import rowan"
50
+
51
+ - name: Publish
52
+ env:
53
+ UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
54
+ run: uv publish
@@ -0,0 +1,55 @@
1
+ name: Test
2
+
3
+ on:
4
+ pull_request: {}
5
+ push:
6
+ branches: master
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ concurrency:
12
+ group: ${{ github.workflow }}-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ jobs:
16
+ test:
17
+ strategy:
18
+ matrix:
19
+ python-version: ["3.12", "3.14"]
20
+ os: [ubuntu-latest]
21
+
22
+ name: Python ${{ matrix.os }} ${{ matrix.python-version }}
23
+ runs-on: ${{ matrix.os }}
24
+
25
+ steps:
26
+ - uses: actions/checkout@v7.0.1
27
+
28
+ - name: Install the latest version of uv
29
+ uses: astral-sh/setup-uv@v10.2.0
30
+ with:
31
+ enable-cache: true
32
+
33
+ - name: Install Python
34
+ run: uv python install ${{ matrix.python-version }}
35
+
36
+ - name: Install dependencies
37
+ run: uv sync --locked
38
+
39
+ - name: Check TOML/YAML/whitespace
40
+ run: |
41
+ uv run -- prek run --all-files --show-diff-on-failure --color=always \
42
+ check-toml \
43
+ check-yaml \
44
+ trailing-whitespace \
45
+ end-of-file-fixer
46
+
47
+ - run: uv run rumdl fmt --check --diff .
48
+ - run: uv run rumdl check .
49
+
50
+ - run: uv run ruff format --check --diff .
51
+ - run: uv run ruff check .
52
+
53
+ - run: uv run ty check
54
+
55
+ - run: uv run pytest --cov --cov-report=xml
@@ -0,0 +1,66 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+
7
+ # Packaging
8
+ build/
9
+ dist/
10
+ *.egg-info/
11
+
12
+ # Testing and coverage
13
+ .pytest_cache/
14
+ .ruff_cache/
15
+ .mypy_cache/
16
+ .coverage
17
+ .coverage.*
18
+ coverage.xml
19
+ htmlcov/
20
+
21
+ # uv
22
+ .venv/
23
+
24
+ # rumdl
25
+ .rumdl_cache/
26
+
27
+ # direnv
28
+ .direnv/
29
+
30
+ # Editors
31
+ .idea/
32
+ .vscode/
33
+ *.swp
34
+ *.swo
35
+ *~
36
+
37
+ # OS
38
+ .DS_Store
39
+ Thumbs.db
40
+
41
+ # Environment
42
+ .env
43
+ .env.*
44
+ .app.json
45
+
46
+ # Documentation and notebooks
47
+ /site/
48
+ .ipynb_checkpoints/
49
+
50
+ # Legacy environments
51
+ .pixi/
52
+
53
+ # Scientific application output
54
+ timer.dat
55
+ psi*.clean
56
+ *.CP
57
+ *.CPC
58
+ *.lprof
59
+ pyscf.chk
60
+ local/
61
+ cyp/
62
+ msa_directory/
63
+
64
+ # Local notes and machine-specific agent settings
65
+ notes.md
66
+ /.claude/settings.local.json
@@ -0,0 +1 @@
1
+ 3.14
@@ -0,0 +1,21 @@
1
+ [global]
2
+
3
+ disable = [
4
+ "MD013", # line length
5
+ "MD033", # no inline HTML
6
+ ]
7
+
8
+ exclude = [
9
+ ".git",
10
+ ".venv",
11
+ "node_modules",
12
+ "vendor",
13
+ "dist",
14
+ "build",
15
+ ]
16
+
17
+ respect-gitignore = true
18
+
19
+ [per-file-ignores]
20
+ # Skill files start with frontmatter, not headings
21
+ "**/skills/**/*.md" = ["MD041"]
@@ -1,32 +1,39 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rowan-python
3
- Version: 3.1.16
3
+ Version: 3.2.1
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
7
- Author-email: Corin Wagen <corin@rowansci.com>
7
+ Author-email: Corin Wagen <corin@rowansci.com>, Eli Mann <eli@rowansci.com>
8
+ License-Expression: MIT
8
9
  License-File: LICENSE
9
10
  Requires-Python: >=3.12
10
11
  Requires-Dist: httpx
11
12
  Requires-Dist: nest-asyncio
12
13
  Requires-Dist: rdkit
13
14
  Requires-Dist: setuptools
14
- Requires-Dist: stjames>=0.0.261
15
+ Requires-Dist: stjames>=0.0.275
15
16
  Description-Content-Type: text/markdown
16
17
 
17
18
  # Rowan Python Library
18
19
 
19
20
  [![pypi](https://img.shields.io/pypi/v/rowan-python.svg)](https://pypi.python.org/pypi/rowan-python)
20
- [![pixi](https://img.shields.io/badge/Powered_by-Pixi-facc15)](https://pixi.sh)
21
- [![ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v1.json)](https://github.com/charliermarsh/ruff)
21
+ [![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://docs.astral.sh/uv/)
22
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
22
23
  [![Downloads](https://img.shields.io/pypi/dm/rowan-python.svg)](https://pypi.python.org/pypi/rowan-python/)
24
+ [![License](https://img.shields.io/github/license/rowansci/rowan-python)](LICENSE)
25
+ [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/rowansci/rowan-python/test.yml?branch=master&logo=github-actions)](https://github.com/rowansci/rowan-python/actions)
26
+ [![ty](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ty/main/assets/badge/v0.json)](https://github.com/astral-sh/ty)
27
+ [![Markdown style: rumdl](https://img.shields.io/badge/md%20style-rumdl-000000.svg)](https://rumdl.dev)
23
28
 
24
-
25
- The Rowan Python library provides convenient access to the Rowan API from applications written in the Python language.
29
+ The Rowan Python library is the Python SDK for running Rowan computational chemistry workflows
30
+ programmatically. Use it from scripts and applications to submit calculations, monitor workflow
31
+ progress, retrieve results, and manage molecules, proteins, folders, and projects through the
32
+ Rowan API.
26
33
 
27
34
  ## Documentation
28
35
 
29
- The documentation is available [here](https://docs.rowansci.com/python-api).
36
+ Read the [Rowan Python API documentation](https://docs.rowansci.com/python-api).
30
37
 
31
38
  ## Agent skill
32
39
 
@@ -34,6 +41,9 @@ Ships with a [computational chemistry and biology skill](skills/computational-ch
34
41
  that helps coding agents choose and run Rowan workflows through either Rowan MCP tools or the
35
42
  Rowan Python SDK.
36
43
 
44
+ When using Rowan MCP tools, always read and follow this skill and its workflow references first.
45
+ The skill provides the scientific guidance and execution requirements for MCP workflows.
46
+
37
47
  ### Claude Code
38
48
 
39
49
  ```bash
@@ -74,9 +84,6 @@ and extract it into your agent's skills directory.
74
84
  To run the examples, you will need to set your ROWAN_API_KEY environment variable or set it directly in the script.
75
85
  If running the examples in a cloned version of the repository, you can add your api key to a local `.env` file, which will automatically be loaded into the environment by direnv (if installed).
76
86
 
77
-
78
87
  ## Issues
79
88
 
80
89
  To report issues, please use the "Issues" tab above.
81
-
82
- *Corin Wagen, 2023*
@@ -1,16 +1,22 @@
1
1
  # Rowan Python Library
2
2
 
3
3
  [![pypi](https://img.shields.io/pypi/v/rowan-python.svg)](https://pypi.python.org/pypi/rowan-python)
4
- [![pixi](https://img.shields.io/badge/Powered_by-Pixi-facc15)](https://pixi.sh)
5
- [![ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v1.json)](https://github.com/charliermarsh/ruff)
4
+ [![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://docs.astral.sh/uv/)
5
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
6
6
  [![Downloads](https://img.shields.io/pypi/dm/rowan-python.svg)](https://pypi.python.org/pypi/rowan-python/)
7
+ [![License](https://img.shields.io/github/license/rowansci/rowan-python)](LICENSE)
8
+ [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/rowansci/rowan-python/test.yml?branch=master&logo=github-actions)](https://github.com/rowansci/rowan-python/actions)
9
+ [![ty](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ty/main/assets/badge/v0.json)](https://github.com/astral-sh/ty)
10
+ [![Markdown style: rumdl](https://img.shields.io/badge/md%20style-rumdl-000000.svg)](https://rumdl.dev)
7
11
 
8
-
9
- The Rowan Python library provides convenient access to the Rowan API from applications written in the Python language.
12
+ The Rowan Python library is the Python SDK for running Rowan computational chemistry workflows
13
+ programmatically. Use it from scripts and applications to submit calculations, monitor workflow
14
+ progress, retrieve results, and manage molecules, proteins, folders, and projects through the
15
+ Rowan API.
10
16
 
11
17
  ## Documentation
12
18
 
13
- The documentation is available [here](https://docs.rowansci.com/python-api).
19
+ Read the [Rowan Python API documentation](https://docs.rowansci.com/python-api).
14
20
 
15
21
  ## Agent skill
16
22
 
@@ -18,6 +24,9 @@ Ships with a [computational chemistry and biology skill](skills/computational-ch
18
24
  that helps coding agents choose and run Rowan workflows through either Rowan MCP tools or the
19
25
  Rowan Python SDK.
20
26
 
27
+ When using Rowan MCP tools, always read and follow this skill and its workflow references first.
28
+ The skill provides the scientific guidance and execution requirements for MCP workflows.
29
+
21
30
  ### Claude Code
22
31
 
23
32
  ```bash
@@ -58,9 +67,6 @@ and extract it into your agent's skills directory.
58
67
  To run the examples, you will need to set your ROWAN_API_KEY environment variable or set it directly in the script.
59
68
  If running the examples in a cloned version of the repository, you can add your api key to a local `.env` file, which will automatically be loaded into the environment by direnv (if installed).
60
69
 
61
-
62
70
  ## Issues
63
71
 
64
72
  To report issues, please use the "Issues" tab above.
65
-
66
- *Corin Wagen, 2023*
@@ -1,7 +1,7 @@
1
- ![Rowan](images/RowanLogoLarge.png){ width="320" }
2
-
3
1
  # Rowan Python API
4
2
 
3
+ ![Rowan](images/RowanLogoLarge.png){ width="320" }
4
+
5
5
  The `rowan` package is the official Python client for the [Rowan](https://rowansci.com) computational
6
6
  chemistry platform. Submit workflows, poll or stream results, and manage
7
7
  molecules, proteins, folders, and projects—all from plain Python.
@@ -10,21 +10,21 @@ molecules, proteins, folders, and projects—all from plain Python.
10
10
 
11
11
  === "pip"
12
12
 
13
- ```bash
14
- pip install rowan-python
15
- ```
13
+ ```bash
14
+ pip install rowan-python
15
+ ```
16
16
 
17
17
  === "pixi"
18
18
 
19
- ```bash
20
- pixi add --pypi rowan-python
21
- ```
19
+ ```bash
20
+ pixi add --pypi rowan-python
21
+ ```
22
22
 
23
23
  === "uv"
24
24
 
25
- ```bash
26
- uv add rowan-python
27
- ```
25
+ ```bash
26
+ uv add rowan-python
27
+ ```
28
28
 
29
29
  ## Authentication
30
30
 
@@ -16,7 +16,7 @@ workflow = rowan.submit_basic_calculation_workflow(
16
16
  )
17
17
  ```
18
18
 
19
- Pass an [`OptimizationSettings`](settings.md#stjames.opt_settings.OptimizationSettings) object or
19
+ Pass an [`OptimizationSettings`](settings.md) object or
20
20
  an equivalent dictionary to `opt_settings`. `optimize_cell` defaults to `False`; set it to `True`
21
21
  only when optimizing a periodic cell.
22
22
 
@@ -18,6 +18,8 @@ def compute_energy_with_solvent_correction(
18
18
 
19
19
  print(f"View workflow privately at: https://labs.rowansci.com/calculation/{opt_workflow.uuid}")
20
20
  opt_result = opt_workflow.result()
21
+ if opt_result.molecule is None:
22
+ raise ValueError("Optimization returned no molecule")
21
23
 
22
24
  sp_workflow = rowan.submit_basic_calculation_workflow(
23
25
  initial_molecule=opt_result.molecule,
@@ -31,6 +33,8 @@ def compute_energy_with_solvent_correction(
31
33
  print(f"View workflow privately at: https://labs.rowansci.com/calculation/{sp_workflow.uuid}")
32
34
  sp_result = sp_workflow.result()
33
35
 
36
+ if sp_result.energy is None:
37
+ raise ValueError("Single-point calculation returned no energy")
34
38
  return sp_result.energy
35
39
 
36
40
 
@@ -18,7 +18,10 @@ preparation_workflow = rowan.submit_protein_preparation_workflow(
18
18
  name="Prepare CDK2",
19
19
  folder=folder,
20
20
  )
21
- prepared_protein_uuid = preparation_workflow.result().prepared_protein_uuid
21
+ preparation_result = preparation_workflow.result()
22
+ prepared_protein_uuid = preparation_result.prepared_protein_uuid
23
+ if prepared_protein_uuid is None:
24
+ raise ValueError("Protein preparation returned no prepared protein")
22
25
 
23
26
  workflow = rowan.submit_batch_docking_workflow(
24
27
  ligands,
@@ -1,5 +1,4 @@
1
- """
2
- Calculate Bond-Dissociation Energies (BDE) with the Rowan API.
1
+ """Calculate Bond-Dissociation Energies (BDE) with the Rowan API.
3
2
 
4
3
  `mode` is a BDE method string (the level of theory):
5
4
  - "omol25_conserving_s": neural network potential (default)
@@ -14,7 +14,7 @@ msa_workflow = rowan.submit_msa_workflow(
14
14
  "VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR",
15
15
  "VHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH",
16
16
  ],
17
- output_formats=[rowan.MSAFormat.BOLTZ],
17
+ output_formats={rowan.MSAFormat.BOLTZ},
18
18
  name="Boltz Paired MSA Example",
19
19
  folder=folder,
20
20
  )
@@ -13,7 +13,7 @@ msa_workflow = rowan.submit_msa_workflow(
13
13
  initial_protein_sequences=[
14
14
  "HPETLVKVKDAEDQLGARVGYIELDLNSGKILESFRPEERFPMMSTFKVLLCGAVLSRIDAGQEQLGRRIHYSQNDLVEYSPVTEKHLTDGMTVRELCSAAITMSDNTAANLLLTTIGGPKELTAFLHNMGDHVTRLDRWEPELNEAIPNDERDTTMPVAMATTLRKLLTGELLTLASRQQLIDWMEADKVAGPLLRSALPAGWFIADKSGAGERGSRGIIAALGPDGKPSRIVVIYTTGSQATMDERNRQIAEIGASLIKHW"
15
15
  ],
16
- output_formats=[rowan.MSAFormat.BOLTZ],
16
+ output_formats={rowan.MSAFormat.BOLTZ},
17
17
  name="Boltz MSA Example",
18
18
  folder=folder,
19
19
  )
@@ -25,7 +25,7 @@ msa_workflow = rowan.submit_msa_workflow(
25
25
  "VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR",
26
26
  "VHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH",
27
27
  ],
28
- output_formats=[rowan.MSAFormat.CHAI],
28
+ output_formats={rowan.MSAFormat.CHAI},
29
29
  name="CHAI Paired MSA Example",
30
30
  folder=folder,
31
31
  )
@@ -22,7 +22,7 @@ msa_workflow = rowan.submit_msa_workflow(
22
22
  initial_protein_sequences=[
23
23
  "HPETLVKVKDAEDQLGARVGYIELDLNSGKILESFRPEERFPMMSTFKVLLCGAVLSRIDAGQEQLGRRIHYSQNDLVEYSPVTEKHLTDGMTVRELCSAAITMSDNTAANLLLTTIGGPKELTAFLHNMGDHVTRLDRWEPELNEAIPNDERDTTMPVAMATTLRKLLTGELLTLASRQQLIDWMEADKVAGPLLRSALPAGWFIADKSGAGERGSRGIIAALGPDGKPSRIVVIYTTGSQATMDERNRQIAEIGASLIKHW"
24
24
  ],
25
- output_formats=[rowan.MSAFormat.CHAI],
25
+ output_formats={rowan.MSAFormat.CHAI},
26
26
  name="CHAI MSA Example",
27
27
  folder=folder,
28
28
  )
@@ -34,6 +34,8 @@ print(f"View folder privately at: https://labs.rowansci.com/folder/{folder.uuid}
34
34
  workflow_results = [(w, w.result()) for w in workflows]
35
35
 
36
36
  for workflow, result in workflow_results:
37
+ if result.affinity_score is None:
38
+ raise ValueError("Cofolding returned no affinity score")
37
39
  results[workflow.name] = result.affinity_score.probability_binary
38
40
 
39
41
  print(results)
@@ -14,7 +14,7 @@ msa_workflow = rowan.submit_msa_workflow(
14
14
  "VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHGKKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTPAVHASLDKFLASVSTVLTSKYR",
15
15
  "VHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH",
16
16
  ],
17
- output_formats=[rowan.MSAFormat.COLABFOLD],
17
+ output_formats={rowan.MSAFormat.COLABFOLD},
18
18
  name="Colabfold Paired MSA Example",
19
19
  folder=folder,
20
20
  )
@@ -13,7 +13,7 @@ msa_workflow = rowan.submit_msa_workflow(
13
13
  initial_protein_sequences=[
14
14
  "HPETLVKVKDAEDQLGARVGYIELDLNSGKILESFRPEERFPMMSTFKVLLCGAVLSRIDAGQEQLGRRIHYSQNDLVEYSPVTEKHLTDGMTVRELCSAAITMSDNTAANLLLTTIGGPKELTAFLHNMGDHVTRLDRWEPELNEAIPNDERDTTMPVAMATTLRKLLTGELLTLASRQQLIDWMEADKVAGPLLRSALPAGWFIADKSGAGERGSRGIIAALGPDGKPSRIVVIYTTGSQATMDERNRQIAEIGASLIKHW"
15
15
  ],
16
- output_formats=[rowan.MSAFormat.COLABFOLD],
16
+ output_formats={rowan.MSAFormat.COLABFOLD},
17
17
  name="Colabfold MSA Example",
18
18
  folder=folder,
19
19
  )
@@ -15,6 +15,8 @@ redox_potential_workflows = []
15
15
 
16
16
  for conformer in csearch_result.conformer_uuids[:10]:
17
17
  uuid = conformer[0]
18
+ if uuid is None:
19
+ raise ValueError("Conformer has no calculation UUID")
18
20
  molecule = rowan.retrieve_calculation_molecules(uuid)[0]
19
21
  rowan_molecule = rowan.Molecule.model_validate(molecule)
20
22
  redox_potential_workflows.append(
@@ -1,5 +1,4 @@
1
- """
2
- Calculate the conformers of a molecule using the Rowan API.
1
+ """Calculate the conformers of a molecule using the Rowan API.
3
2
 
4
3
  Conformer generation defaults to OpenConf; pass `conf_gen_settings=` to choose a
5
4
  different generator (ETKDG, iMTD-GC, MCMM).
@@ -1,5 +1,4 @@
1
- """
2
- Rank a conformer ensemble you already have, using the Rowan API (screen-only mode).
1
+ """Rank a conformer ensemble you already have, using the Rowan API (screen-only mode).
3
2
 
4
3
  Conformer search normally *generates* conformers and then optimizes, deduplicates,
5
4
  and ranks them. If you already have 3D geometries -- from another tool (RDKit,
@@ -13,7 +13,8 @@ preparation_workflow = rowan.submit_protein_preparation_workflow(
13
13
  name="Prepare TG2",
14
14
  folder=folder,
15
15
  )
16
- protein = preparation_workflow.result().get_prepared_protein()
16
+ preparation_result = preparation_workflow.result()
17
+ protein = preparation_result.get_prepared_protein()
17
18
 
18
19
  center = [-1.079, -3.081, 18.122]
19
20
  size = [22.22, 14.08, 21.74]
@@ -16,7 +16,8 @@ preparation_workflow = rowan.submit_protein_preparation_workflow(
16
16
  name="Prepare BTK inhibitor complex",
17
17
  folder=folder,
18
18
  )
19
- protein = preparation_workflow.result().get_prepared_protein()
19
+ preparation_result = preparation_workflow.result()
20
+ protein = preparation_result.get_prepared_protein()
20
21
 
21
22
  # Protein preparation normalizes 4YHF's residue numbering: Cys481 becomes residue 101,
22
23
  # while the retained 4C9 ligand remains residue 701.
@@ -1,5 +1,4 @@
1
- """
2
- Calculate molecular descriptors using the Rowan API.
1
+ """Calculate molecular descriptors using the Rowan API.
3
2
 
4
3
  Computes molecular descriptors including COSMO descriptors (surface area,
5
4
  screening charge, dielectric energy, polar surface area) in water by default.
@@ -14,7 +14,10 @@ preparation_workflow = rowan.submit_protein_preparation_workflow(
14
14
  name="Prepare ABL1",
15
15
  folder=folder,
16
16
  )
17
- prepared_protein_uuid = preparation_workflow.result().prepared_protein_uuid
17
+ preparation_result = preparation_workflow.result()
18
+ prepared_protein_uuid = preparation_result.prepared_protein_uuid
19
+ if prepared_protein_uuid is None:
20
+ raise ValueError("Protein preparation returned no prepared protein")
18
21
 
19
22
  # Pocket is [[center_x, center_y, center_z], [size_x, size_y, size_z]] in Å.
20
23
  # For a co-crystal structure, extract these from the bound ligand's position.