rowan-python 3.1.2__tar.gz → 3.1.3__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 (176) hide show
  1. {rowan_python-3.1.2 → rowan_python-3.1.3}/PKG-INFO +1 -1
  2. {rowan_python-3.1.2 → rowan_python-3.1.3}/pixi.lock +21 -21
  3. {rowan_python-3.1.2 → rowan_python-3.1.3}/pyproject.toml +1 -1
  4. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/molecule.py +13 -2
  5. {rowan_python-3.1.2 → rowan_python-3.1.3}/.envrc +0 -0
  6. {rowan_python-3.1.2 → rowan_python-3.1.3}/.github/workflows/build-and-deploy-docs.yml +0 -0
  7. {rowan_python-3.1.2 → rowan_python-3.1.3}/.github/workflows/publish-skill.yml +0 -0
  8. {rowan_python-3.1.2 → rowan_python-3.1.3}/.github/workflows/python-publish.yml +0 -0
  9. {rowan_python-3.1.2 → rowan_python-3.1.3}/.github/workflows/test.yml +0 -0
  10. {rowan_python-3.1.2 → rowan_python-3.1.3}/.gitignore +0 -0
  11. {rowan_python-3.1.2 → rowan_python-3.1.3}/.pre-commit-config.yaml +0 -0
  12. {rowan_python-3.1.2 → rowan_python-3.1.3}/AGENTS.md +0 -0
  13. {rowan_python-3.1.2 → rowan_python-3.1.3}/CLAUDE.md +0 -0
  14. {rowan_python-3.1.2 → rowan_python-3.1.3}/GEMINI.md +0 -0
  15. {rowan_python-3.1.2 → rowan_python-3.1.3}/LICENSE +0 -0
  16. {rowan_python-3.1.2 → rowan_python-3.1.3}/README.md +0 -0
  17. {rowan_python-3.1.2 → rowan_python-3.1.3}/docs/images/deciduous-tree-favicon.png +0 -0
  18. {rowan_python-3.1.2 → rowan_python-3.1.3}/docs/index.md +0 -0
  19. {rowan_python-3.1.2 → rowan_python-3.1.3}/docs/stylesheets/colors.css +0 -0
  20. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/PROTAC_solubility.py +0 -0
  21. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/admet.py +0 -0
  22. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/analogue_docking.py +0 -0
  23. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/aqueous_solubility.py +0 -0
  24. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/basic_calculation.py +0 -0
  25. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/basic_calculation_from_json.py +0 -0
  26. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/basic_calculation_with_constraint.py +0 -0
  27. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/basic_calculation_with_solvent.py +0 -0
  28. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/batch_docking.py +0 -0
  29. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/bde.py +0 -0
  30. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/boltz_paired_msa.py +0 -0
  31. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/boltz_single_msa.py +0 -0
  32. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/chai_paired_msa.py +0 -0
  33. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/chai_single_msa.py +0 -0
  34. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/cofolding_screen.py +0 -0
  35. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/colabfold_paired_msa.py +0 -0
  36. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/colabfold_single_msa.py +0 -0
  37. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/conformer_dependent_redox.py +0 -0
  38. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/conformers.py +0 -0
  39. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/conformers_screen.py +0 -0
  40. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/data/1iep_receptorH.pdb +0 -0
  41. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/data/Al_FCC.xyz +0 -0
  42. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/data/citalopram_1iep.xyz +0 -0
  43. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/data/ibuprofen_conformers.sdf +0 -0
  44. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/data/tyk2_ligands.sdf +0 -0
  45. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/data/tyk2_structure.pdb +0 -0
  46. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/data/workflow_example.json +0 -0
  47. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/dcd_download.py +0 -0
  48. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/descriptors.py +0 -0
  49. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/docking_screen.py +0 -0
  50. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/double_ended_ts_search.py +0 -0
  51. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/electronic_properties.py +0 -0
  52. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/estimate_workflow.py +0 -0
  53. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/fukui_index.py +0 -0
  54. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/hydrogen_bond_basicity.py +0 -0
  55. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/interaction_energy_decomposition.py +0 -0
  56. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/ion_mobility.py +0 -0
  57. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/irc.py +0 -0
  58. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/macropka.py +0 -0
  59. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/membrane_permeability.py +0 -0
  60. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/multistage_optimization.py +0 -0
  61. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/nmr.py +0 -0
  62. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/optimization.py +0 -0
  63. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/pdb_download.py +0 -0
  64. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/periodic_dft.py +0 -0
  65. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/phenol_pka.py +0 -0
  66. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/pka.py +0 -0
  67. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/pocket_detection.py +0 -0
  68. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/pose_analysis_md.py +0 -0
  69. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/project_scoped_api_key.py +0 -0
  70. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/protein_binder_design.py +0 -0
  71. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/protein_cofolding.py +0 -0
  72. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/protein_cofolding_with_constraints.py +0 -0
  73. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/protein_cofolding_with_templates.py +0 -0
  74. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/protein_md.py +0 -0
  75. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/rbfe_graph.py +0 -0
  76. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/rbfe_resubmit.py +0 -0
  77. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/redox_potential.py +0 -0
  78. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/relative_binding_free_energy_perturbation.py +0 -0
  79. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/retrieve_workflow.py +0 -0
  80. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/scan.py +0 -0
  81. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/solvent_dependent_conformers.py +0 -0
  82. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/spin_states.py +0 -0
  83. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/strain.py +0 -0
  84. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/tautomer.py +0 -0
  85. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/template.py +0 -0
  86. {rowan_python-3.1.2 → rowan_python-3.1.3}/examples/webhook.py +0 -0
  87. {rowan_python-3.1.2 → rowan_python-3.1.3}/mkdocs.yml +0 -0
  88. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/__init__.py +0 -0
  89. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/api_keys.py +0 -0
  90. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/calculation.py +0 -0
  91. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/config.py +0 -0
  92. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/constants.py +0 -0
  93. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/folder.py +0 -0
  94. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/project.py +0 -0
  95. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/protein.py +0 -0
  96. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/py.typed +0 -0
  97. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/types.py +0 -0
  98. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/user.py +0 -0
  99. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/utils.py +0 -0
  100. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/__init__.py +0 -0
  101. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/admet.py +0 -0
  102. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/analogue_docking.py +0 -0
  103. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/base.py +0 -0
  104. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/basic_calculation.py +0 -0
  105. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/batch_docking.py +0 -0
  106. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/bde.py +0 -0
  107. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/conformer_search.py +0 -0
  108. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/constants.py +0 -0
  109. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/descriptors.py +0 -0
  110. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/docking.py +0 -0
  111. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/double_ended_ts_search.py +0 -0
  112. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/electronic_properties.py +0 -0
  113. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/fukui.py +0 -0
  114. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/hydrogen_bond_donor_acceptor_strength.py +0 -0
  115. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/interaction_energy_decomposition.py +0 -0
  116. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/ion_mobility.py +0 -0
  117. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/irc.py +0 -0
  118. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/macropka.py +0 -0
  119. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/membrane_permeability.py +0 -0
  120. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/msa.py +0 -0
  121. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/multistage_optimization.py +0 -0
  122. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/nmr.py +0 -0
  123. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/pka.py +0 -0
  124. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/pocket_detection.py +0 -0
  125. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/pose_analysis_md.py +0 -0
  126. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/protein_binder_design.py +0 -0
  127. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/protein_cofolding.py +0 -0
  128. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/protein_md.py +0 -0
  129. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/rbfe_graph.py +0 -0
  130. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/redox_potential.py +0 -0
  131. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/relative_binding_free_energy_perturbation.py +0 -0
  132. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/scan.py +0 -0
  133. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/solubility.py +0 -0
  134. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/solvent_dependent_conformers.py +0 -0
  135. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/spin_states.py +0 -0
  136. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/strain.py +0 -0
  137. {rowan_python-3.1.2 → rowan_python-3.1.3}/rowan/workflows/tautomer_search.py +0 -0
  138. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/SKILL.md +0 -0
  139. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/admet.md +0 -0
  140. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/analogue_docking.md +0 -0
  141. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/basic_calculation.md +0 -0
  142. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/batch_docking.md +0 -0
  143. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/bde.md +0 -0
  144. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/conformer_search.md +0 -0
  145. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/descriptors.md +0 -0
  146. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/docking.md +0 -0
  147. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/double_ended_ts_search.md +0 -0
  148. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/electronic_properties.md +0 -0
  149. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/fukui.md +0 -0
  150. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/hydrogen_bond_donor_acceptor_strength.md +0 -0
  151. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/interaction_energy_decomposition.md +0 -0
  152. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/ion_mobility.md +0 -0
  153. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/irc.md +0 -0
  154. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/macropka.md +0 -0
  155. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/membrane_permeability.md +0 -0
  156. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/msa.md +0 -0
  157. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/multistage_optimization.md +0 -0
  158. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/nmr.md +0 -0
  159. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/pka.md +0 -0
  160. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/pocket_detection.md +0 -0
  161. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/pose_analysis_md.md +0 -0
  162. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/protein_binder_design.md +0 -0
  163. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/protein_cofolding.md +0 -0
  164. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/protein_md.md +0 -0
  165. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/protein_prep.md +0 -0
  166. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/rbfe_graph.md +0 -0
  167. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/redox_potential.md +0 -0
  168. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/relative_binding_free_energy_perturbation.md +0 -0
  169. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/scan.md +0 -0
  170. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/solubility.md +0 -0
  171. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/solvent_dependent_conformers.md +0 -0
  172. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/spin_states.md +0 -0
  173. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/strain.md +0 -0
  174. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/tautomer_search.md +0 -0
  175. {rowan_python-3.1.2 → rowan_python-3.1.3}/skills/computational-chemistry-and-biology/reference/webhooks.md +0 -0
  176. {rowan_python-3.1.2 → rowan_python-3.1.3}/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.3
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
@@ -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.3"
4
4
  description = "Rowan Python Library"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -280,7 +280,8 @@ def load_named_ligands(path: Path | str) -> dict[str, Molecule]:
280
280
  Molecule names are read from the title field of each record. Use this when
281
281
  ligand identity needs to be preserved - for example, building a ligand dict
282
282
  for an RBFE workflow where names are used as keys throughout submission and
283
- results.
283
+ results. Every record must therefore have a unique name; duplicates raise
284
+ rather than silently collapsing into one ligand.
284
285
 
285
286
  Supported formats (all carry per-molecule name fields):
286
287
  - SDF / MOL (``.sdf``, ``.mol``) - name from the title line
@@ -288,7 +289,8 @@ def load_named_ligands(path: Path | str) -> dict[str, Molecule]:
288
289
 
289
290
  :param path: Path to an SDF, MOL, or MOL2 file.
290
291
  :returns: Dict mapping ligand name to Molecule, in file order.
291
- :raises ValueError: If no valid molecules are found or the format is unsupported.
292
+ :raises ValueError: If no valid molecules are found, the format is
293
+ unsupported, or two records share a name.
292
294
  """
293
295
  path = Path(path)
294
296
  suffix = path.suffix.lower()
@@ -311,4 +313,13 @@ def load_named_ligands(path: Path | str) -> dict[str, Molecule]:
311
313
  if not pairs:
312
314
  raise ValueError(f"No valid molecules found in {path}")
313
315
 
316
+ # require every record to have a unique name rather than dropping data
317
+ names = [name for name, _ in pairs]
318
+ duplicates = sorted({name for name in names if names.count(name) > 1})
319
+ if duplicates:
320
+ raise ValueError(
321
+ f"Ligand names must be unique, but {path} repeats: {', '.join(duplicates)}. "
322
+ "Rename the duplicate records before loading."
323
+ )
324
+
314
325
  return {name: Molecule(_stjames=stjames.Molecule.from_rdkit(rdkm)) for name, rdkm in pairs}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes