rowan-python 3.2.1__tar.gz → 3.2.2__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 (271) hide show
  1. {rowan_python-3.2.1 → rowan_python-3.2.2}/PKG-INFO +2 -2
  2. {rowan_python-3.2.1 → rowan_python-3.2.2}/pyproject.toml +2 -2
  3. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/__init__.py +1 -0
  4. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/project.py +8 -1
  5. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/binding_affinity.py +7 -1
  6. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/protein_md.py +3 -3
  7. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/binding_affinity.md +11 -1
  8. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/protein_md.md +1 -1
  9. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_binding_affinity.py +33 -0
  10. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_md_workflow_updates.py +1 -0
  11. rowan_python-3.2.2/tests/test_project.py +35 -0
  12. {rowan_python-3.2.1 → rowan_python-3.2.2}/uv.lock +5 -5
  13. {rowan_python-3.2.1 → rowan_python-3.2.2}/.claude-plugin/marketplace.json +0 -0
  14. {rowan_python-3.2.1 → rowan_python-3.2.2}/.codex-plugin/plugin.json +0 -0
  15. {rowan_python-3.2.1 → rowan_python-3.2.2}/.editorconfig +0 -0
  16. {rowan_python-3.2.1 → rowan_python-3.2.2}/.envrc +0 -0
  17. {rowan_python-3.2.1 → rowan_python-3.2.2}/.github/workflows/build-and-deploy-docs.yml +0 -0
  18. {rowan_python-3.2.1 → rowan_python-3.2.2}/.github/workflows/publish-skill.yml +0 -0
  19. {rowan_python-3.2.1 → rowan_python-3.2.2}/.github/workflows/python-publish.yml +0 -0
  20. {rowan_python-3.2.1 → rowan_python-3.2.2}/.github/workflows/test.yml +0 -0
  21. {rowan_python-3.2.1 → rowan_python-3.2.2}/.gitignore +0 -0
  22. {rowan_python-3.2.1 → rowan_python-3.2.2}/.python-version +0 -0
  23. {rowan_python-3.2.1 → rowan_python-3.2.2}/.rumdl.toml +0 -0
  24. {rowan_python-3.2.1 → rowan_python-3.2.2}/LICENSE +0 -0
  25. {rowan_python-3.2.1 → rowan_python-3.2.2}/README.md +0 -0
  26. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/api/api-keys.md +0 -0
  27. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/api/calculation.md +0 -0
  28. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/api/folder.md +0 -0
  29. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/api/molecule.md +0 -0
  30. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/api/project.md +0 -0
  31. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/api/protein.md +0 -0
  32. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/api/user.md +0 -0
  33. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/api/webhooks.md +0 -0
  34. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/api/workflow.md +0 -0
  35. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/images/RowanLogoLarge.png +0 -0
  36. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/images/RowanSquareLogo.png +0 -0
  37. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/images/favicon.svg +0 -0
  38. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/index.md +0 -0
  39. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/stylesheets/colors.css +0 -0
  40. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/admet.md +0 -0
  41. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/analogue-docking.md +0 -0
  42. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/basic-calculation.md +0 -0
  43. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/batch-docking.md +0 -0
  44. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/binding-affinity.md +0 -0
  45. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/bond-dissociation-energy.md +0 -0
  46. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/conformer-search-settings.md +0 -0
  47. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/conformer-search.md +0 -0
  48. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/covalent-inhibitor-scan.md +0 -0
  49. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/descriptors.md +0 -0
  50. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/docking.md +0 -0
  51. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/double-ended-ts-search.md +0 -0
  52. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/electronic-properties.md +0 -0
  53. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/fukui.md +0 -0
  54. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/hydrogen-bond-donor-acceptor-strength.md +0 -0
  55. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/interaction-energy-decomposition.md +0 -0
  56. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/ion-mobility.md +0 -0
  57. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/irc.md +0 -0
  58. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/logp.md +0 -0
  59. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/macropka.md +0 -0
  60. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/membrane-permeability.md +0 -0
  61. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/msa.md +0 -0
  62. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/multistage-optimization.md +0 -0
  63. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/nmr.md +0 -0
  64. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/pka.md +0 -0
  65. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/pocket-detection.md +0 -0
  66. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/pose-analysis-md.md +0 -0
  67. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/protein-binder-design.md +0 -0
  68. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/protein-cofolding.md +0 -0
  69. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/protein-md.md +0 -0
  70. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/protein-preparation.md +0 -0
  71. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/rbfe-graph.md +0 -0
  72. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/redox-potential.md +0 -0
  73. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/relative-binding-free-energy-perturbation.md +0 -0
  74. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/scan.md +0 -0
  75. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/settings.md +0 -0
  76. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/solubility.md +0 -0
  77. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/solvent-dependent-conformers.md +0 -0
  78. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/spin-states.md +0 -0
  79. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/strain.md +0 -0
  80. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/tautomer-search.md +0 -0
  81. {rowan_python-3.2.1 → rowan_python-3.2.2}/docs/workflows/types.md +0 -0
  82. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/PROTAC_solubility.py +0 -0
  83. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/admet.py +0 -0
  84. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/analogue_docking.py +0 -0
  85. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/aqueous_solubility.py +0 -0
  86. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/basic_calculation.py +0 -0
  87. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/basic_calculation_from_json.py +0 -0
  88. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/basic_calculation_with_constraint.py +0 -0
  89. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/basic_calculation_with_solvent.py +0 -0
  90. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/batch_docking.py +0 -0
  91. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/batch_solubility.py +0 -0
  92. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/bde.py +0 -0
  93. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/binding_affinity.py +0 -0
  94. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/boltz_paired_msa.py +0 -0
  95. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/boltz_single_msa.py +0 -0
  96. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/chai_paired_msa.py +0 -0
  97. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/chai_single_msa.py +0 -0
  98. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/cofolding_screen.py +0 -0
  99. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/colabfold_paired_msa.py +0 -0
  100. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/colabfold_single_msa.py +0 -0
  101. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/conformer_dependent_redox.py +0 -0
  102. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/conformers.py +0 -0
  103. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/conformers_screen.py +0 -0
  104. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/covalent_docking.py +0 -0
  105. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/covalent_inhibitor_scan.py +0 -0
  106. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/data/1iep_receptorH.pdb +0 -0
  107. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/data/Al_FCC.xyz +0 -0
  108. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/data/citalopram_1iep.xyz +0 -0
  109. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/data/ibuprofen_conformers.sdf +0 -0
  110. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/data/tyk2_ligands.sdf +0 -0
  111. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/data/tyk2_structure.pdb +0 -0
  112. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/data/workflow_example.json +0 -0
  113. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/dcd_download.py +0 -0
  114. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/descriptors.py +0 -0
  115. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/docking.py +0 -0
  116. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/docking_screen.py +0 -0
  117. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/double_ended_ts_search.py +0 -0
  118. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/electronic_properties.py +0 -0
  119. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/estimate_workflow.py +0 -0
  120. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/fukui_index.py +0 -0
  121. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/hydrogen_bond_basicity.py +0 -0
  122. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/induced_fit_docking.py +0 -0
  123. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/interaction_energy_decomposition.py +0 -0
  124. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/ion_mobility.py +0 -0
  125. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/irc.py +0 -0
  126. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/logp.py +0 -0
  127. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/macropka.py +0 -0
  128. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/membrane_permeability.py +0 -0
  129. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/multistage_optimization.py +0 -0
  130. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/nmr.py +0 -0
  131. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/optimization.py +0 -0
  132. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/periodic_dft.py +0 -0
  133. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/phenol_pka.py +0 -0
  134. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/pka.py +0 -0
  135. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/pocket_detection.py +0 -0
  136. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/pose_analysis_md.py +0 -0
  137. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/project_scoped_api_key.py +0 -0
  138. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/protein_binder_design.py +0 -0
  139. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/protein_cofolding.py +0 -0
  140. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/protein_cofolding_modified_inputs.py +0 -0
  141. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/protein_cofolding_with_constraints.py +0 -0
  142. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/protein_cofolding_with_templates.py +0 -0
  143. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/protein_file_download.py +0 -0
  144. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/protein_md.py +0 -0
  145. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/protein_preparation.py +0 -0
  146. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/rbfe_graph.py +0 -0
  147. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/rbfe_resubmit.py +0 -0
  148. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/redox_potential.py +0 -0
  149. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/relative_binding_free_energy_perturbation.py +0 -0
  150. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/resubmit_with_perturbations.py +0 -0
  151. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/retrieve_workflow.py +0 -0
  152. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/scan.py +0 -0
  153. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/solvent_dependent_conformers.py +0 -0
  154. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/spin_states.py +0 -0
  155. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/strain.py +0 -0
  156. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/tautomer.py +0 -0
  157. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/template.py +0 -0
  158. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/temporary_workflow_sharing.py +0 -0
  159. {rowan_python-3.2.1 → rowan_python-3.2.2}/examples/webhook.py +0 -0
  160. {rowan_python-3.2.1 → rowan_python-3.2.2}/mkdocs.yml +0 -0
  161. {rowan_python-3.2.1 → rowan_python-3.2.2}/prek.toml +0 -0
  162. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/api_keys.py +0 -0
  163. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/calculation.py +0 -0
  164. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/config.py +0 -0
  165. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/constants.py +0 -0
  166. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/folder.py +0 -0
  167. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/molecule.py +0 -0
  168. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/protein.py +0 -0
  169. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/py.typed +0 -0
  170. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/types.py +0 -0
  171. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/user.py +0 -0
  172. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/utils.py +0 -0
  173. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/__init__.py +0 -0
  174. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/_molecular_dynamics.py +0 -0
  175. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/admet.py +0 -0
  176. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/analogue_docking.py +0 -0
  177. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/base.py +0 -0
  178. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/basic_calculation.py +0 -0
  179. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/batch_docking.py +0 -0
  180. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/bde.py +0 -0
  181. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/conformer_search.py +0 -0
  182. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/constants.py +0 -0
  183. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/covalent_inhibitor_scan.py +0 -0
  184. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/descriptors.py +0 -0
  185. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/docking.py +0 -0
  186. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/double_ended_ts_search.py +0 -0
  187. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/electronic_properties.py +0 -0
  188. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/fukui.py +0 -0
  189. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/hydrogen_bond_donor_acceptor_strength.py +0 -0
  190. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/interaction_energy_decomposition.py +0 -0
  191. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/ion_mobility.py +0 -0
  192. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/irc.py +0 -0
  193. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/logp.py +0 -0
  194. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/macropka.py +0 -0
  195. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/membrane_permeability.py +0 -0
  196. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/msa.py +0 -0
  197. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/multistage_optimization.py +0 -0
  198. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/nmr.py +0 -0
  199. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/pka.py +0 -0
  200. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/pocket_detection.py +0 -0
  201. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/pose_analysis_md.py +0 -0
  202. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/protein_binder_design.py +0 -0
  203. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/protein_cofolding.py +0 -0
  204. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/protein_preparation.py +0 -0
  205. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/rbfe_graph.py +0 -0
  206. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/redox_potential.py +0 -0
  207. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/relative_binding_free_energy_perturbation.py +0 -0
  208. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/scan.py +0 -0
  209. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/solubility.py +0 -0
  210. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/solvent_dependent_conformers.py +0 -0
  211. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/spin_states.py +0 -0
  212. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/strain.py +0 -0
  213. {rowan_python-3.2.1 → rowan_python-3.2.2}/rowan/workflows/tautomer_search.py +0 -0
  214. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/.claude-plugin/plugin.json +0 -0
  215. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/SKILL.md +0 -0
  216. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/admet.md +0 -0
  217. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/analogue_docking.md +0 -0
  218. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/basic_calculation.md +0 -0
  219. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/batch_docking.md +0 -0
  220. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/bde.md +0 -0
  221. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/conformer_search.md +0 -0
  222. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/covalent_inhibitor_scan.md +0 -0
  223. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/descriptors.md +0 -0
  224. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/docking.md +0 -0
  225. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/double_ended_ts_search.md +0 -0
  226. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/electronic_properties.md +0 -0
  227. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/folders_and_projects.md +0 -0
  228. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/fukui.md +0 -0
  229. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/hydrogen_bond_donor_acceptor_strength.md +0 -0
  230. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/interaction_energy_decomposition.md +0 -0
  231. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/ion_mobility.md +0 -0
  232. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/irc.md +0 -0
  233. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/logp.md +0 -0
  234. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/macropka.md +0 -0
  235. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/mcp_execution.md +0 -0
  236. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/membrane_permeability.md +0 -0
  237. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/msa.md +0 -0
  238. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/multistage_optimization.md +0 -0
  239. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/nmr.md +0 -0
  240. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/pka.md +0 -0
  241. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/pocket_detection.md +0 -0
  242. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/pose_analysis_md.md +0 -0
  243. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/protein_binder_design.md +0 -0
  244. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/protein_cofolding.md +0 -0
  245. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/protein_preparation.md +0 -0
  246. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/python_sdk.md +0 -0
  247. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/rbfe_graph.md +0 -0
  248. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/redox_potential.md +0 -0
  249. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/relative_binding_free_energy_perturbation.md +0 -0
  250. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/scan.md +0 -0
  251. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/solubility.md +0 -0
  252. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/solvent_dependent_conformers.md +0 -0
  253. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/spin_states.md +0 -0
  254. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/strain.md +0 -0
  255. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/tautomer_search.md +0 -0
  256. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/reference/webhooks.md +0 -0
  257. {rowan_python-3.2.1 → rowan_python-3.2.2}/skills/computational-chemistry-and-biology/scripts/check_env.py +0 -0
  258. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_cofolding_workflow_updates.py +0 -0
  259. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_conformer_search.py +0 -0
  260. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_docking_workflow.py +0 -0
  261. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_docking_workflow_updates.py +0 -0
  262. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_macropka_nmr.py +0 -0
  263. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_mango_forcefields.py +0 -0
  264. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_plugin.py +0 -0
  265. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_protein.py +0 -0
  266. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_rbfe_trajectory_download.py +0 -0
  267. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_solvent_dependent_conformers.py +0 -0
  268. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_tautomer_search.py +0 -0
  269. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_utils.py +0 -0
  270. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_workflow_results.py +0 -0
  271. {rowan_python-3.2.1 → rowan_python-3.2.2}/tests/test_workflow_submission.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rowan-python
3
- Version: 3.2.1
3
+ Version: 3.2.2
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
@@ -12,7 +12,7 @@ Requires-Dist: httpx
12
12
  Requires-Dist: nest-asyncio
13
13
  Requires-Dist: rdkit
14
14
  Requires-Dist: setuptools
15
- Requires-Dist: stjames>=0.0.275
15
+ Requires-Dist: stjames>=0.0.281
16
16
  Description-Content-Type: text/markdown
17
17
 
18
18
  # Rowan Python Library
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "rowan-python"
3
- version = "3.2.1"
3
+ version = "3.2.2"
4
4
  description = "Rowan Python Library"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -12,7 +12,7 @@ authors = [
12
12
  ]
13
13
  dependencies = [
14
14
  "httpx",
15
- "stjames>=0.0.275",
15
+ "stjames>=0.0.281",
16
16
  "setuptools",
17
17
  "rdkit",
18
18
  "nest-asyncio",
@@ -67,6 +67,7 @@ from stjames.engine_compatibility import (
67
67
  METHOD_ENGINES,
68
68
  get_supported_corrections,
69
69
  )
70
+ from stjames.pdb import ResidueRef
70
71
  from stjames.optimization.band_method import NEBSettings
71
72
  from stjames.optimization.interpolation import Interpolation
72
73
  from stjames.optimization.string_method import FSMSettings, StringMethodSettings
@@ -197,8 +197,15 @@ def default_project() -> Project:
197
197
 
198
198
  Raises:
199
199
  httpx.HTTPStatusError: API request fails
200
+ ValueError: user has no default project in the API key's organization
200
201
  """
201
202
  with api_client() as client:
202
203
  response = client.get("/user/me/default_project")
203
204
  response.raise_for_status()
204
- return Project(**response.json())
205
+ project = response.json()
206
+ if project is None:
207
+ raise ValueError(
208
+ "You have no default project in this organization. "
209
+ "Set a default project, or pass a folder or project."
210
+ )
211
+ return Project(**project)
@@ -153,9 +153,15 @@ def submit_binding_affinity_workflow(
153
153
  binding_affinity_settings=binding_affinity_settings or SinglePointEnergySettings(),
154
154
  )
155
155
 
156
+ workflow_data = workflow.model_dump(serialize_as_any=True, mode="json")
157
+ if isinstance(workflow.binding_affinity_settings, SinglePointEnergySettings):
158
+ workflow_data["binding_affinity_settings"]["truncation_radius"] = (
159
+ workflow.binding_affinity_settings.truncation_radius
160
+ )
161
+
156
162
  data = {
157
163
  "workflow_type": "binding_affinity",
158
- "workflow_data": workflow.model_dump(serialize_as_any=True, mode="json"),
164
+ "workflow_data": workflow_data,
159
165
  "name": name,
160
166
  "folder_uuid": folder_uuid,
161
167
  "max_credits": max_credits,
@@ -149,7 +149,7 @@ def submit_protein_md_workflow(
149
149
  binder: Binder | None = None,
150
150
  protein_restraint_cutoff: float | None = None,
151
151
  protein_restraint_constant: float = 100,
152
- analysis_interval_ps: float | None = None,
152
+ analysis_interval_ps: float | None = 100,
153
153
  clustering: KMeansClusteringSettings | GreedyClusteringSettings | None = None,
154
154
  validate_forcefield: bool = True,
155
155
  name: str = "Protein MD Workflow",
@@ -194,8 +194,8 @@ def submit_protein_md_workflow(
194
194
  protein_restraint_cutoff: cutoff distance from the binder past which Cα atoms are
195
195
  harmonically restrained, in Å; None disables restraints
196
196
  protein_restraint_constant: force constant for Cα backbone restraints, in kcal/mol/Ų
197
- analysis_interval_ps: interval at which to compute per-frame SASA and polar SASA, in ps.
198
- None disables those analyses
197
+ analysis_interval_ps: interval at which to compute per-frame SASA and polar SASA
198
+ (default 100), in ps. None disables those analyses
199
199
  clustering: how to cluster trajectory frames. None disables clustering; pass a
200
200
  KMeansClusteringSettings (num_clusters) or GreedyClusteringSettings (cutoff_angstrom)
201
201
  validate_forcefield: validate the protein forcefield
@@ -57,9 +57,19 @@ for name, score in zip(ligands.keys(), result.scores):
57
57
 
58
58
  - `rowan.SinglePointEnergySettings` (default):
59
59
  - `multistage_opt_settings` (default PM6-D3H4X/COSMO optimization + PM6-D3H4X/COSMO2 single-point in water): a `rowan.MultiStageOptSettings` controlling ligand geometry optimization and energy evaluation.
60
- - `truncation_radius` (default `6.0` Å): protein residues beyond this distance from the ligand are excluded from the calculation.
60
+ - `truncation_radius` (default `6.0` Å): selects whole protein residues with any atom within this distance of any submitted ligand atom.
61
+ - `truncation_residues`: nonempty list of `rowan.ResidueRef` objects identifying polymer residues by chain and residue keys in the submitted protein. Requires `truncation_radius=None`; a radius and explicit residues cannot be supplied together.
61
62
  - `rowan.GninaAffinitySettings`, `rowan.AEVPLIGAffinitySettings`, `rowan.NessoAffinitySettings`: no tunable parameters.
62
63
 
64
+ For an explicit pocket, pass settings like these, using keys from your protein:
65
+
66
+ ```python
67
+ rowan.SinglePointEnergySettings(
68
+ truncation_radius=None,
69
+ truncation_residues=[rowan.ResidueRef("polymer", "A", "A.182")],
70
+ )
71
+ ```
72
+
63
73
  ```python
64
74
  # Replace the path, residue name, and SMILES with those of your holo complex.
65
75
  holo_protein = rowan.upload_protein("Holo complex", "PATH_TO_HOLO_PDB")
@@ -61,7 +61,7 @@ result.download_trajectories([0], path=".") # save DCD trajectory files
61
61
  - `binder` (default `None`): a `rowan.Binder` specifying the binder within the complex — protein/peptide chains (`chain_ids`), small molecules (`small_molecule_residues`, identified by residue-name string or 0-based non-polymer residue index), or both. Enables per-frame MM/GBSA and binder RMSD analyses (see result fields).
62
62
  - `protein_restraint_cutoff` (default `None`): distance from the binder past which Cα atoms are harmonically restrained, in angstrom; `None` disables restraints. Useful for keeping the binding site mobile while stabilizing the rest of the protein.
63
63
  - `protein_restraint_constant` (default `100`): force constant for the Cα backbone restraints, in kcal/mol/Ų.
64
- - `analysis_interval_ps` (default `None`): interval at which to compute per-frame SASA and polar SASA, in ps. `None` (the default) disables those analyses.
64
+ - `analysis_interval_ps` (default `100`): interval at which to compute per-frame SASA and polar SASA, in ps. `None` disables those analyses.
65
65
  - `clustering` (default `None`): cluster the trajectory frames. `None` disables it; pass `rowan.KMeansClusteringSettings(num_clusters=10)` or `rowan.GreedyClusteringSettings(cutoff_angstrom=2.0)`.
66
66
  - `validate_forcefield` (default `True`): validate the protein forcefield before submitting; raises early if the protein cannot be parameterized or has clashing residues. When a `binder` is set, its small molecules are excluded from validation, whether keyed by residue name or by non-polymer index, since they are parameterized from their SMILES. Cofactors, metals, and glycans outside the binder are still validated — set `False` to skip the pre-check entirely.
67
67
 
@@ -124,3 +124,36 @@ def test_binding_affinity_results_preserve_failed_inputs() -> None:
124
124
  )
125
125
 
126
126
  assert result.scores == [BindingAffinityScore(binding_affinity=-6.5), None]
127
+
128
+
129
+ @pytest.mark.parametrize(
130
+ "settings",
131
+ [
132
+ pytest.param(rowan.SinglePointEnergySettings(), id="default-radius"),
133
+ pytest.param(rowan.SinglePointEnergySettings(truncation_radius=8.0), id="custom-radius"),
134
+ pytest.param(
135
+ rowan.SinglePointEnergySettings(
136
+ truncation_radius=None,
137
+ truncation_residues=[rowan.ResidueRef("polymer", "A", "A.182")],
138
+ ),
139
+ id="explicit-residues",
140
+ ),
141
+ ],
142
+ )
143
+ def test_submit_binding_affinity_pocket_roundtrip(
144
+ monkeypatch: pytest.MonkeyPatch, settings: rowan.SinglePointEnergySettings
145
+ ) -> None:
146
+ """Preserve radius and explicit residue selections through submission JSON."""
147
+ client = _mock_client(monkeypatch)
148
+ rowan.submit_binding_affinity_workflow(
149
+ protein="protein-uuid",
150
+ ligand_residue_name="LIG",
151
+ ligand_smiles=["CCO"],
152
+ binding_affinity_settings=settings,
153
+ )
154
+ payload = client.post.call_args.kwargs["json"]["workflow_data"]
155
+ assert payload["binding_affinity_settings"]["truncation_radius"] == settings.truncation_radius
156
+ restored = stjames.BindingAffinityWorkflow.model_validate(payload).binding_affinity_settings
157
+ assert restored.model_dump(mode="json", exclude_none=False) == settings.model_dump(
158
+ mode="json", exclude_none=False
159
+ )
@@ -108,6 +108,7 @@ def test_protein_md_uses_new_defaults_and_forcefields(monkeypatch: pytest.Monkey
108
108
  assert payload["timestep_fs"] == 4
109
109
  assert payload["hydrogen_mass"] == 3
110
110
  assert payload["water_buffer"] == 8
111
+ assert payload["analysis_interval_ps"] == 100
111
112
 
112
113
 
113
114
  def test_protein_md_exposes_binder_and_representative_structure_results(
@@ -0,0 +1,35 @@
1
+ """Tests for project retrieval."""
2
+
3
+ from collections.abc import Iterator
4
+ from contextlib import contextmanager
5
+ from unittest.mock import MagicMock
6
+
7
+ import pytest
8
+
9
+ from rowan import project as project_module
10
+
11
+
12
+ def _mock_client(monkeypatch: pytest.MonkeyPatch, payload: dict[str, str] | None) -> None:
13
+ client = MagicMock()
14
+ client.get.return_value.json.return_value = payload
15
+
16
+ @contextmanager
17
+ def mock_api_client() -> Iterator[MagicMock]:
18
+ yield client
19
+
20
+ monkeypatch.setattr(project_module, "api_client", mock_api_client)
21
+
22
+
23
+ def test_default_project_returns_the_project(monkeypatch: pytest.MonkeyPatch) -> None:
24
+ """Return the default project the API reports."""
25
+ _mock_client(monkeypatch, {"uuid": "project-uuid", "name": "Default"})
26
+
27
+ assert project_module.default_project().uuid == "project-uuid"
28
+
29
+
30
+ def test_default_project_without_one_raises_a_clear_error(monkeypatch: pytest.MonkeyPatch) -> None:
31
+ """Explain a missing default project instead of failing to build one from null."""
32
+ _mock_client(monkeypatch, None)
33
+
34
+ with pytest.raises(ValueError, match="no default project"):
35
+ project_module.default_project()
@@ -1148,7 +1148,7 @@ wheels = [
1148
1148
 
1149
1149
  [[package]]
1150
1150
  name = "rowan-python"
1151
- version = "3.2.1"
1151
+ version = "3.2.2"
1152
1152
  source = { editable = "." }
1153
1153
  dependencies = [
1154
1154
  { name = "httpx" },
@@ -1181,7 +1181,7 @@ requires-dist = [
1181
1181
  { name = "nest-asyncio" },
1182
1182
  { name = "rdkit" },
1183
1183
  { name = "setuptools" },
1184
- { name = "stjames", specifier = ">=0.0.275" },
1184
+ { name = "stjames", specifier = ">=0.0.281" },
1185
1185
  ]
1186
1186
 
1187
1187
  [package.metadata.requires-dev]
@@ -1275,7 +1275,7 @@ wheels = [
1275
1275
 
1276
1276
  [[package]]
1277
1277
  name = "stjames"
1278
- version = "0.0.275"
1278
+ version = "0.0.281"
1279
1279
  source = { registry = "https://pypi.org/simple" }
1280
1280
  dependencies = [
1281
1281
  { name = "more-itertools" },
@@ -1283,9 +1283,9 @@ dependencies = [
1283
1283
  { name = "pydantic" },
1284
1284
  { name = "requests" },
1285
1285
  ]
1286
- sdist = { url = "https://files.pythonhosted.org/packages/a3/42/749b9b573680d9a072f058f96a0bc711250f739412a05b3713e6f00ce7b0/stjames-0.0.275.tar.gz", hash = "sha256:c99e5d0cc375d964812decec45cf7dd1d9b0abcb9ea0688525b033d7770219d3", size = 158319, upload-time = "2026-09-17T20:02:54.749Z" }
1286
+ sdist = { url = "https://files.pythonhosted.org/packages/b9/bf/b834e4016ea17396564674f5b2804580bd4225c1386e095810549fde6f32/stjames-0.0.281.tar.gz", hash = "sha256:ef267c3fe4fe4ddd8bf39edd50334dc78945df171239d1ce73252c5ec0ee9a9f", size = 1437540, upload-time = "2026-10-08T17:51:46.292Z" }
1287
1287
  wheels = [
1288
- { url = "https://files.pythonhosted.org/packages/6b/40/0f4e0e0fc864bc103ec662a283da2a6ab5a90e579400ca1af077ea4ab854/stjames-0.0.275-py3-none-any.whl", hash = "sha256:cb452931a506bf46a7774f8da0122b40c7608d63be2b5252202f67e001f8fb3c", size = 174423, upload-time = "2026-09-17T20:02:53.482Z" },
1288
+ { url = "https://files.pythonhosted.org/packages/d3/05/546152338686aab103ac1813bb65a94ac402c7db0fccb21e5c4e7a39de70/stjames-0.0.281-py3-none-any.whl", hash = "sha256:8e4c4dacc1af87168e38d8aa676a7bc7dfe0f8ed14fcb62f2d9eb56a54fbe471", size = 196578, upload-time = "2026-10-08T17:51:44.751Z" },
1289
1289
  ]
1290
1290
 
1291
1291
  [[package]]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes