rowan-python 3.0.5__tar.gz → 3.0.6__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 (130) hide show
  1. {rowan_python-3.0.5 → rowan_python-3.0.6}/.gitignore +0 -3
  2. rowan_python-3.0.6/AGENTS.md +124 -0
  3. rowan_python-3.0.6/CLAUDE.md +1 -0
  4. rowan_python-3.0.6/GEMINI.md +1 -0
  5. {rowan_python-3.0.5 → rowan_python-3.0.6}/PKG-INFO +1 -1
  6. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/periodic_dft.py +5 -5
  7. {rowan_python-3.0.5 → rowan_python-3.0.6}/pixi.lock +48 -48
  8. {rowan_python-3.0.5 → rowan_python-3.0.6}/pyproject.toml +1 -1
  9. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/molecule.py +24 -16
  10. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/protein.py +2 -1
  11. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/pka.py +1 -2
  12. {rowan_python-3.0.5 → rowan_python-3.0.6}/.envrc +0 -0
  13. {rowan_python-3.0.5 → rowan_python-3.0.6}/.github/workflows/build-and-deploy-docs.yml +0 -0
  14. {rowan_python-3.0.5 → rowan_python-3.0.6}/.github/workflows/python-publish.yml +0 -0
  15. {rowan_python-3.0.5 → rowan_python-3.0.6}/.github/workflows/test.yml +0 -0
  16. {rowan_python-3.0.5 → rowan_python-3.0.6}/.pre-commit-config.yaml +0 -0
  17. {rowan_python-3.0.5 → rowan_python-3.0.6}/LICENSE +0 -0
  18. {rowan_python-3.0.5 → rowan_python-3.0.6}/README.md +0 -0
  19. {rowan_python-3.0.5 → rowan_python-3.0.6}/docs/images/deciduous-tree-favicon.png +0 -0
  20. {rowan_python-3.0.5 → rowan_python-3.0.6}/docs/index.md +0 -0
  21. {rowan_python-3.0.5 → rowan_python-3.0.6}/docs/rowan_rdkit.md +0 -0
  22. {rowan_python-3.0.5 → rowan_python-3.0.6}/docs/stylesheets/colors.css +0 -0
  23. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/PROTAC_solubility.py +0 -0
  24. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/admet.py +0 -0
  25. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/analogue_docking.py +0 -0
  26. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/aqueous_solubility.py +0 -0
  27. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/basic_calculation.py +0 -0
  28. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/basic_calculation_from_json.py +0 -0
  29. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/basic_calculation_with_constraint.py +0 -0
  30. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/basic_calculation_with_solvent.py +0 -0
  31. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/batch_docking.py +0 -0
  32. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/bde.py +0 -0
  33. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/boltz_paired_msa.py +0 -0
  34. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/boltz_single_msa.py +0 -0
  35. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/chai_paired_msa.py +0 -0
  36. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/chai_single_msa.py +0 -0
  37. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/cofolding_screen.py +0 -0
  38. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/colabfold_paired_msa.py +0 -0
  39. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/colabfold_single_msa.py +0 -0
  40. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/conformer_dependent_redox.py +0 -0
  41. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/conformers.py +0 -0
  42. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/data/1iep_receptorH.pdb +0 -0
  43. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/data/Al_FCC.xyz +0 -0
  44. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/data/citalopram_1iep.xyz +0 -0
  45. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/data/tyk2_ligands.sdf +0 -0
  46. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/data/tyk2_structure.pdb +0 -0
  47. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/data/workflow_example.json +0 -0
  48. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/dcd_download.py +0 -0
  49. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/descriptors.py +0 -0
  50. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/docking_screen.py +0 -0
  51. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/double_ended_ts_search.py +0 -0
  52. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/electronic_properties.py +0 -0
  53. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/estimate_workflow.py +0 -0
  54. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/fukui_index.py +0 -0
  55. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/hydrogen_bond_basicity.py +0 -0
  56. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/interaction_energy_decomposition.py +0 -0
  57. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/ion_mobility.py +0 -0
  58. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/irc.py +0 -0
  59. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/macropka.py +0 -0
  60. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/membrane_permeability.py +0 -0
  61. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/multistage_optimization.py +0 -0
  62. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/nmr.py +0 -0
  63. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/optimization.py +0 -0
  64. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/pdb_download.py +0 -0
  65. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/phenol_pka.py +0 -0
  66. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/pka.py +0 -0
  67. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/pose_analysis_md.py +0 -0
  68. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/protein_binder_design.py +0 -0
  69. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/protein_cofolding.py +0 -0
  70. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/protein_md.py +0 -0
  71. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/rbfe_graph.py +0 -0
  72. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/redox_potential.py +0 -0
  73. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/relative_binding_free_energy_perturbation.py +0 -0
  74. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/retrieve_workflow.py +0 -0
  75. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/scan.py +0 -0
  76. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/solvent_dependent_conformers.py +0 -0
  77. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/spin_states.py +0 -0
  78. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/strain.py +0 -0
  79. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/tautomer.py +0 -0
  80. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/template.py +0 -0
  81. {rowan_python-3.0.5 → rowan_python-3.0.6}/examples/webhook.py +0 -0
  82. {rowan_python-3.0.5 → rowan_python-3.0.6}/mkdocs.yml +0 -0
  83. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/__init__.py +0 -0
  84. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/calculation.py +0 -0
  85. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/config.py +0 -0
  86. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/constants.py +0 -0
  87. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/folder.py +0 -0
  88. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/project.py +0 -0
  89. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/py.typed +0 -0
  90. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/rowan_rdkit/__init__.py +0 -0
  91. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/rowan_rdkit/chem_utils.py +0 -0
  92. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/types.py +0 -0
  93. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/user.py +0 -0
  94. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/utils.py +0 -0
  95. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/__init__.py +0 -0
  96. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/admet.py +0 -0
  97. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/analogue_docking.py +0 -0
  98. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/base.py +0 -0
  99. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/basic_calculation.py +0 -0
  100. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/batch_docking.py +0 -0
  101. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/bde.py +0 -0
  102. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/conformer_search.py +0 -0
  103. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/constants.py +0 -0
  104. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/descriptors.py +0 -0
  105. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/docking.py +0 -0
  106. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/double_ended_ts_search.py +0 -0
  107. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/electronic_properties.py +0 -0
  108. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/fukui.py +0 -0
  109. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/hydrogen_bond_donor_acceptor_strength.py +0 -0
  110. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/interaction_energy_decomposition.py +0 -0
  111. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/ion_mobility.py +0 -0
  112. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/irc.py +0 -0
  113. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/macropka.py +0 -0
  114. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/membrane_permeability.py +0 -0
  115. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/msa.py +0 -0
  116. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/multistage_optimization.py +0 -0
  117. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/nmr.py +0 -0
  118. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/pose_analysis_md.py +0 -0
  119. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/protein_binder_design.py +0 -0
  120. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/protein_cofolding.py +0 -0
  121. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/protein_md.py +0 -0
  122. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/rbfe_graph.py +0 -0
  123. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/redox_potential.py +0 -0
  124. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/relative_binding_free_energy_perturbation.py +0 -0
  125. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/scan.py +0 -0
  126. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/solubility.py +0 -0
  127. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/solvent_dependent_conformers.py +0 -0
  128. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/spin_states.py +0 -0
  129. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/strain.py +0 -0
  130. {rowan_python-3.0.5 → rowan_python-3.0.6}/rowan/workflows/tautomer_search.py +0 -0
@@ -199,9 +199,6 @@ local/
199
199
 
200
200
  cyp/
201
201
 
202
- # AI agent instructions (not part of the project source)
203
- AGENTS.md
204
-
205
202
  # MSA download output directories
206
203
  msa_directory/
207
204
 
@@ -0,0 +1,124 @@
1
+ # AI Agent Development Guide
2
+
3
+ This document provides essential guidance for AI agents working on this repository.
4
+
5
+ ## Repository overview
6
+
7
+ rowan-python-internal is the private Python SDK for the Rowan computational chemistry platform. It wraps the stjames data model library and provides user-facing workflow submission and result retrieval.
8
+
9
+ Structure:
10
+ - `rowan/` - source code (flat layout)
11
+ - `rowan/workflows/` - workflow submission functions and result types
12
+ - `examples/` - usage examples for each workflow
13
+ - `docs/` - documentation (mkdocs)
14
+ - `.github/workflows/` - CI/CD configuration
15
+
16
+ Key relationships:
17
+ - **stjames** (`../stjames`) - data model dependency, imported as `stjames`. Defines workflow models, settings, validation, and engine compatibility.
18
+ - **rowan-python** - public version of this repo. Push via `git push public master` from this repo.
19
+
20
+ Python version: >=3.12
21
+
22
+ ## Essential commands
23
+
24
+ ```bash
25
+ # Setup
26
+ pixi install # Install dependencies
27
+
28
+ # Code quality (these are the pre-commit hooks)
29
+ pixi run fmt # Format code (ruff format)
30
+ pixi run lint # Lint code (ruff check --fix)
31
+ pixi run types # Type check (mypy)
32
+
33
+ # Testing
34
+ pixi run test # Run tests (pytest with doctests)
35
+ pixi run all # Run fmt + lint + types + test
36
+
37
+ # Run a specific example
38
+ pixi run python examples/basic_calculation.py
39
+ ```
40
+
41
+ ## Before every commit
42
+
43
+ - Run `pixi run fmt`, `pixi run lint`, `pixi run types`
44
+ - Pre-commit hooks (`.pre-commit-config.yaml`) run these automatically on commit
45
+ - No pytest in pre-commit hooks — tests run in CI
46
+
47
+ ## Code conventions
48
+
49
+ ### Docstrings
50
+
51
+ Format: reStructuredText-style. No types in docstrings, no leading articles.
52
+
53
+ ```python
54
+ def process_data(input_data: list[str], threshold: int = 10) -> dict[str, int]:
55
+ """Process input data and return summary statistics.
56
+
57
+ :param input_data: strings to process
58
+ :param threshold: minimum count threshold for inclusion
59
+ :returns: mapping of categories to counts
60
+ """
61
+ ```
62
+
63
+ ### Type annotations
64
+
65
+ - All functions must have complete type annotations
66
+ - Modern syntax: `list[str]`, `dict[str, int]`, `str | None`
67
+ - Import from `typing` only when necessary
68
+
69
+ ### Code formatting
70
+
71
+ Via ruff:
72
+ - Line length: 100
73
+ - Indentation: 4 spaces
74
+
75
+ ### Imports
76
+
77
+ - Absolute imports preferred
78
+ - No wildcard imports except in `__init__.py`
79
+ - Import sorting handled by ruff (isort)
80
+
81
+ ## Workflow development guidelines
82
+
83
+ ### Validation
84
+ - Use stjames validation when possible. Don't duplicate validation that stjames model validators already handle (e.g. engine/method compatibility, solvent checks). Only add rowan-side validation when stjames doesn't cover it.
85
+
86
+ ### stjames type aliasing
87
+ - Users should never need to `import stjames` directly. All user-facing stjames types must be aliased in `rowan/__init__.py`. If an example requires a stjames import, that's a signal the type needs to be aliased.
88
+
89
+ ### Serialization
90
+ - Use `serialize_as_any=True` on `model_dump` when the workflow has union-typed fields (e.g. `ConformerGenSettingsUnion`, `MultiStageOptSettings` containing `Settings` subfields). Without it, pydantic may silently drop subclass-specific fields during serialization.
91
+
92
+ ### Defaults
93
+ - When hardcoding a default value for a stjames field, make sure it matches the corresponding default in the stjames workflow model.
94
+
95
+ ### Type hints in function signatures
96
+ - Don't use pydantic-specific types (`PositiveInt`, `NonNegativeInt`, etc.) in plain function signatures. They don't enforce constraints outside pydantic models and are misleading. Use plain `int`, `float`, etc. — stjames validates downstream when the model is constructed.
97
+
98
+ ### Testing
99
+ - After editing a workflow, run its relevant example before committing (not on every change) to catch breakage early.
100
+
101
+ ## Git authorization policy
102
+
103
+ **Do not run `git commit`, `git push`, or any other git write commands without explicit permission from the user.**
104
+
105
+ **Never add yourself as a commit author or co-author.** Do not include `Co-Authored-By:`, `Author:`, or any similar trailer that attributes the commit to an AI model or tool. Commits are attributed solely to the human developer.
106
+
107
+ ## CI/CD
108
+
109
+ File: `.github/workflows/test.yml`
110
+
111
+ Triggers: all PRs, pushes to `master`
112
+
113
+ Checks:
114
+ 1. `pixi run fmt` - format check
115
+ 2. `pixi run lint` - lint check
116
+ 3. `pixi run types` - type check
117
+
118
+ Matrix: Python 3.14, ubuntu-latest
119
+
120
+ ## Additional resources
121
+
122
+ - pixi documentation: https://pixi.sh
123
+ - ruff documentation: https://docs.astral.sh/ruff
124
+ - pytest documentation: https://docs.pytest.org
@@ -0,0 +1 @@
1
+ @AGENTS.md
@@ -0,0 +1 @@
1
+ @AGENTS.md
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rowan-python
3
- Version: 3.0.5
3
+ Version: 3.0.6
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
@@ -21,8 +21,8 @@ folder = rowan.get_folder("examples/periodic_dft")
21
21
  # Lattice vectors in Angstrom; Al has 13 electrons so multiplicity=2.
22
22
  cell = rowan.PeriodicCell(
23
23
  lattice_vectors=(
24
- (0.0, 2.0230, 2.0230),
25
- (2.0230, 0.0, 2.0230),
24
+ (0.0, 2.0230, 2.0230),
25
+ (2.0230, 0.0, 2.0230),
26
26
  (2.0230, 2.0230, 0.0),
27
27
  )
28
28
  )
@@ -35,10 +35,10 @@ al_fcc = rowan.Molecule.from_atoms(
35
35
 
36
36
  # Marzari–Vanderbilt cold smearing is recommended for metals.
37
37
  pbc_settings = rowan.PBCDFTSettings(
38
- pw_cutoff=7.5, # Hartree; SSSP efficiency recommends ~7–9 Ha for Al
39
- kpoints=(4, 4, 4), # Monkhorst–Pack grid; increase for production runs
38
+ pw_cutoff=7.5, # Hartree; SSSP efficiency recommends ~7–9 Ha for Al
39
+ kpoints=(4, 4, 4), # Monkhorst–Pack grid; increase for production runs
40
40
  smearing=rowan.PBCDFTSmearing.MV,
41
- degauss=0.01, # Hartree smearing width
41
+ degauss=0.01, # Hartree smearing width
42
42
  )
43
43
 
44
44
  workflow = rowan.submit_basic_calculation_workflow(
@@ -44,12 +44,12 @@ environments:
44
44
  - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl
45
45
  - pypi: https://files.pythonhosted.org/packages/98/7c/21252050676612625449b4807d6b695b9ce8a7c9e1c197ee6216c8a65c7c/numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
46
46
  - pypi: https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
47
- - pypi: https://files.pythonhosted.org/packages/01/d7/c3a52c61f5b7be648e919005820fbac33028c6149994cd64453f49951c17/pydantic-2.13.0-py3-none-any.whl
48
- - pypi: https://files.pythonhosted.org/packages/cb/e4/566101a561492ce8454f0844ca29c3b675a6b3a7b3ff577db85ed05c8c50/pydantic_core-2.46.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
47
+ - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl
48
+ - pypi: https://files.pythonhosted.org/packages/76/fd/19d711e4e9331f9d77f222bffc202bf30ea0d74f6419046376bb82f244c8/pydantic_core-2.46.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
49
49
  - pypi: https://files.pythonhosted.org/packages/27/60/41cf00319d2a01946854e634f9a5791b0370c08bffbe4d094b0743213f6c/rdkit-2026.3.1-cp314-cp314-manylinux_2_28_x86_64.whl
50
50
  - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl
51
51
  - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl
52
- - pypi: https://files.pythonhosted.org/packages/02/e6/5d6c315b37e517dc93a09665c3e3f88e68f1d2cdd120edf3b093f7d461b2/stjames-0.0.180-py3-none-any.whl
52
+ - pypi: https://files.pythonhosted.org/packages/20/1c/0b3011c55381804e68833f192e398c294846e196efe9f9773dcf9d3b4e33/stjames-0.0.182-py3-none-any.whl
53
53
  - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl
54
54
  - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
55
55
  - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl
@@ -83,12 +83,12 @@ environments:
83
83
  - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl
84
84
  - pypi: https://files.pythonhosted.org/packages/4c/39/8a320264a84404c74cc7e79715de85d6130fa07a0898f67fb5cd5bd79908/numpy-2.4.4-cp314-cp314-macosx_11_0_arm64.whl
85
85
  - pypi: https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl
86
- - pypi: https://files.pythonhosted.org/packages/01/d7/c3a52c61f5b7be648e919005820fbac33028c6149994cd64453f49951c17/pydantic-2.13.0-py3-none-any.whl
87
- - pypi: https://files.pythonhosted.org/packages/35/95/3a0c6f65e231709fb3463e32943c69d10285cb50203a2130a4732053a06d/pydantic_core-2.46.0-cp314-cp314-macosx_11_0_arm64.whl
86
+ - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl
87
+ - pypi: https://files.pythonhosted.org/packages/d2/87/e9a905ddfcc2fd7bd862b340c02be6ab1f827922822d425513635d0ac774/pydantic_core-2.46.1-cp314-cp314-macosx_11_0_arm64.whl
88
88
  - pypi: https://files.pythonhosted.org/packages/6a/a4/c05a31806eaf366af246903230fe441cef8b7949cc4592656025ac8975e6/rdkit-2026.3.1-cp314-cp314-macosx_11_0_arm64.whl
89
89
  - pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl
90
90
  - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl
91
- - pypi: https://files.pythonhosted.org/packages/02/e6/5d6c315b37e517dc93a09665c3e3f88e68f1d2cdd120edf3b093f7d461b2/stjames-0.0.180-py3-none-any.whl
91
+ - pypi: https://files.pythonhosted.org/packages/20/1c/0b3011c55381804e68833f192e398c294846e196efe9f9773dcf9d3b4e33/stjames-0.0.182-py3-none-any.whl
92
92
  - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl
93
93
  - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
94
94
  - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl
@@ -139,7 +139,7 @@ environments:
139
139
  - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl
140
140
  - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl
141
141
  - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl
142
- - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl
142
+ - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl
143
143
  - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
144
144
  - pypi: https://files.pythonhosted.org/packages/2d/88/17d656aa97406cd509e2be0e6eddcf81fc1666104bf81042b89721d4a44c/griffe_pydantic-1.3.1-py3-none-any.whl
145
145
  - pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl
@@ -163,7 +163,7 @@ environments:
163
163
  - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl
164
164
  - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl
165
165
  - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl
166
- - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl
166
+ - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl
167
167
  - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl
168
168
  - pypi: https://files.pythonhosted.org/packages/cb/98/6af411189d9413534c3eb691182bff1f5c6d44ed2f93f2edfe52a1bbceb8/more_itertools-11.0.2-py3-none-any.whl
169
169
  - pypi: https://files.pythonhosted.org/packages/d7/aa/a19d884a8d28fcd3c065776323029f204dbc774e70ec9c85eba228b680de/mypy-1.20.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
@@ -171,7 +171,7 @@ environments:
171
171
  - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl
172
172
  - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl
173
173
  - pypi: https://files.pythonhosted.org/packages/98/7c/21252050676612625449b4807d6b695b9ce8a7c9e1c197ee6216c8a65c7c/numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
174
- - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl
174
+ - pypi: https://files.pythonhosted.org/packages/7a/c2/920ef838e2f0028c8262f16101ec09ebd5969864e5a64c4c05fad0617c56/packaging-26.1-py3-none-any.whl
175
175
  - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl
176
176
  - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl
177
177
  - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl
@@ -183,8 +183,8 @@ environments:
183
183
  - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl
184
184
  - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl
185
185
  - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl
186
- - pypi: https://files.pythonhosted.org/packages/01/d7/c3a52c61f5b7be648e919005820fbac33028c6149994cd64453f49951c17/pydantic-2.13.0-py3-none-any.whl
187
- - pypi: https://files.pythonhosted.org/packages/cb/e4/566101a561492ce8454f0844ca29c3b675a6b3a7b3ff577db85ed05c8c50/pydantic_core-2.46.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
186
+ - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl
187
+ - pypi: https://files.pythonhosted.org/packages/76/fd/19d711e4e9331f9d77f222bffc202bf30ea0d74f6419046376bb82f244c8/pydantic_core-2.46.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
188
188
  - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl
189
189
  - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl
190
190
  - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl
@@ -201,12 +201,12 @@ environments:
201
201
  - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl
202
202
  - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl
203
203
  - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl
204
- - pypi: https://files.pythonhosted.org/packages/02/e6/5d6c315b37e517dc93a09665c3e3f88e68f1d2cdd120edf3b093f7d461b2/stjames-0.0.180-py3-none-any.whl
204
+ - pypi: https://files.pythonhosted.org/packages/20/1c/0b3011c55381804e68833f192e398c294846e196efe9f9773dcf9d3b4e33/stjames-0.0.182-py3-none-any.whl
205
205
  - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl
206
206
  - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl
207
207
  - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
208
208
  - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl
209
- - pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl
209
+ - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl
210
210
  - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl
211
211
  - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl
212
212
  - pypi: ./
@@ -241,7 +241,7 @@ environments:
241
241
  - pypi: https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl
242
242
  - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl
243
243
  - pypi: https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl
244
- - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl
244
+ - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl
245
245
  - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
246
246
  - pypi: https://files.pythonhosted.org/packages/2d/88/17d656aa97406cd509e2be0e6eddcf81fc1666104bf81042b89721d4a44c/griffe_pydantic-1.3.1-py3-none-any.whl
247
247
  - pypi: https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl
@@ -265,7 +265,7 @@ environments:
265
265
  - pypi: https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl
266
266
  - pypi: https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl
267
267
  - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl
268
- - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl
268
+ - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl
269
269
  - pypi: https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl
270
270
  - pypi: https://files.pythonhosted.org/packages/cb/98/6af411189d9413534c3eb691182bff1f5c6d44ed2f93f2edfe52a1bbceb8/more_itertools-11.0.2-py3-none-any.whl
271
271
  - pypi: https://files.pythonhosted.org/packages/d5/82/74e62e7097fa67da328ac8ece8de09133448c04d20ddeaeba251a3000f01/mypy-1.20.1-cp314-cp314-macosx_11_0_arm64.whl
@@ -273,7 +273,7 @@ environments:
273
273
  - pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl
274
274
  - pypi: https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl
275
275
  - pypi: https://files.pythonhosted.org/packages/4c/39/8a320264a84404c74cc7e79715de85d6130fa07a0898f67fb5cd5bd79908/numpy-2.4.4-cp314-cp314-macosx_11_0_arm64.whl
276
- - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl
276
+ - pypi: https://files.pythonhosted.org/packages/7a/c2/920ef838e2f0028c8262f16101ec09ebd5969864e5a64c4c05fad0617c56/packaging-26.1-py3-none-any.whl
277
277
  - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl
278
278
  - pypi: https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl
279
279
  - pypi: https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl
@@ -285,8 +285,8 @@ environments:
285
285
  - pypi: https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl
286
286
  - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl
287
287
  - pypi: https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl
288
- - pypi: https://files.pythonhosted.org/packages/01/d7/c3a52c61f5b7be648e919005820fbac33028c6149994cd64453f49951c17/pydantic-2.13.0-py3-none-any.whl
289
- - pypi: https://files.pythonhosted.org/packages/35/95/3a0c6f65e231709fb3463e32943c69d10285cb50203a2130a4732053a06d/pydantic_core-2.46.0-cp314-cp314-macosx_11_0_arm64.whl
288
+ - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl
289
+ - pypi: https://files.pythonhosted.org/packages/d2/87/e9a905ddfcc2fd7bd862b340c02be6ab1f827922822d425513635d0ac774/pydantic_core-2.46.1-cp314-cp314-macosx_11_0_arm64.whl
290
290
  - pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl
291
291
  - pypi: https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl
292
292
  - pypi: https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl
@@ -303,12 +303,12 @@ environments:
303
303
  - pypi: https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl
304
304
  - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl
305
305
  - pypi: https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl
306
- - pypi: https://files.pythonhosted.org/packages/02/e6/5d6c315b37e517dc93a09665c3e3f88e68f1d2cdd120edf3b093f7d461b2/stjames-0.0.180-py3-none-any.whl
306
+ - pypi: https://files.pythonhosted.org/packages/20/1c/0b3011c55381804e68833f192e398c294846e196efe9f9773dcf9d3b4e33/stjames-0.0.182-py3-none-any.whl
307
307
  - pypi: https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl
308
308
  - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl
309
309
  - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl
310
310
  - pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl
311
- - pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl
311
+ - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl
312
312
  - pypi: https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz
313
313
  - pypi: https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl
314
314
  - pypi: ./
@@ -475,10 +475,10 @@ packages:
475
475
  - littleutils ; extra == 'tests'
476
476
  - rich ; python_full_version >= '3.11' and extra == 'tests'
477
477
  requires_python: '>=3.8'
478
- - pypi: https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl
478
+ - pypi: https://files.pythonhosted.org/packages/3b/21/2f728888c45033d34a417bfcd248ea2564c9e08ab1bfd301377cf05d5586/filelock-3.28.0-py3-none-any.whl
479
479
  name: filelock
480
- version: 3.25.2
481
- sha256: ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70
480
+ version: 3.28.0
481
+ sha256: de9af6712788e7171df1b28b15eba2446c69721433fa427a9bee07b17820a9db
482
482
  requires_python: '>=3.10'
483
483
  - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
484
484
  name: ghp-import
@@ -1009,10 +1009,10 @@ packages:
1009
1009
  version: 1.3.1
1010
1010
  sha256: adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31
1011
1011
  requires_python: '>=3.8'
1012
- - pypi: https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl
1012
+ - pypi: https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl
1013
1013
  name: mkdocstrings
1014
- version: 1.0.3
1015
- sha256: 0d66d18430c2201dc7fe85134277382baaa15e6b30979f3f3bdbabd6dbdb6046
1014
+ version: 1.0.4
1015
+ sha256: 63464b4b29053514f32a1dbbf604e52876d5e638111b0c295ab7ed3cac73ca9b
1016
1016
  requires_dist:
1017
1017
  - jinja2>=3.1
1018
1018
  - markdown>=3.6
@@ -1140,10 +1140,10 @@ packages:
1140
1140
  purls: []
1141
1141
  size: 3106008
1142
1142
  timestamp: 1775587972483
1143
- - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl
1143
+ - pypi: https://files.pythonhosted.org/packages/7a/c2/920ef838e2f0028c8262f16101ec09ebd5969864e5a64c4c05fad0617c56/packaging-26.1-py3-none-any.whl
1144
1144
  name: packaging
1145
- version: '26.0'
1146
- sha256: b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529
1145
+ version: '26.1'
1146
+ sha256: 5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f
1147
1147
  requires_python: '>=3.8'
1148
1148
  - pypi: https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl
1149
1149
  name: paginate
@@ -1289,29 +1289,29 @@ packages:
1289
1289
  sha256: 1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0
1290
1290
  requires_dist:
1291
1291
  - pytest ; extra == 'tests'
1292
- - pypi: https://files.pythonhosted.org/packages/01/d7/c3a52c61f5b7be648e919005820fbac33028c6149994cd64453f49951c17/pydantic-2.13.0-py3-none-any.whl
1292
+ - pypi: https://files.pythonhosted.org/packages/81/5a/2225f4c176dbfed0d809e848b50ef08f70e61daa667b7fa14b0d311ae44d/pydantic-2.13.1-py3-none-any.whl
1293
1293
  name: pydantic
1294
- version: 2.13.0
1295
- sha256: ab0078b90da5f3e2fd2e71e3d9b457ddcb35d0350854fbda93b451e28d56baaf
1294
+ version: 2.13.1
1295
+ sha256: 9557ecc2806faaf6037f85b1fbd963d01e30511c48085f0d573650fdeaad378a
1296
1296
  requires_dist:
1297
1297
  - annotated-types>=0.6.0
1298
- - pydantic-core==2.46.0
1298
+ - pydantic-core==2.46.1
1299
1299
  - typing-extensions>=4.14.1
1300
1300
  - typing-inspection>=0.4.2
1301
1301
  - email-validator>=2.0.0 ; extra == 'email'
1302
1302
  - tzdata ; python_full_version >= '3.9' and sys_platform == 'win32' and extra == 'timezone'
1303
1303
  requires_python: '>=3.9'
1304
- - pypi: https://files.pythonhosted.org/packages/35/95/3a0c6f65e231709fb3463e32943c69d10285cb50203a2130a4732053a06d/pydantic_core-2.46.0-cp314-cp314-macosx_11_0_arm64.whl
1304
+ - pypi: https://files.pythonhosted.org/packages/76/fd/19d711e4e9331f9d77f222bffc202bf30ea0d74f6419046376bb82f244c8/pydantic_core-2.46.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
1305
1305
  name: pydantic-core
1306
- version: 2.46.0
1307
- sha256: 0a36f2cc88170cc177930afcc633a8c15907ea68b59ac16bd180c2999d714940
1306
+ version: 2.46.1
1307
+ sha256: b83ce9fede4bc4fb649281d9857f06d30198b8f70168f18b987518d713111572
1308
1308
  requires_dist:
1309
1309
  - typing-extensions>=4.14.1
1310
1310
  requires_python: '>=3.9'
1311
- - pypi: https://files.pythonhosted.org/packages/cb/e4/566101a561492ce8454f0844ca29c3b675a6b3a7b3ff577db85ed05c8c50/pydantic_core-2.46.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
1311
+ - pypi: https://files.pythonhosted.org/packages/d2/87/e9a905ddfcc2fd7bd862b340c02be6ab1f827922822d425513635d0ac774/pydantic_core-2.46.1-cp314-cp314-macosx_11_0_arm64.whl
1312
1312
  name: pydantic-core
1313
- version: 2.46.0
1314
- sha256: 67e2c2e171b78db8154da602de72ffdc473c6ee51de8a9d80c0f1cd4051abfc7
1313
+ version: 2.46.1
1314
+ sha256: 0e749679ca9f8a9d0bff95fb7f6b57bb53f2207fa42ffcc1ec86de7e0029ab89
1315
1315
  requires_dist:
1316
1316
  - typing-extensions>=4.14.1
1317
1317
  requires_python: '>=3.9'
@@ -1531,8 +1531,8 @@ packages:
1531
1531
  requires_python: '>=3.10'
1532
1532
  - pypi: ./
1533
1533
  name: rowan-python
1534
- version: 3.0.5
1535
- sha256: 0edb360654d940882164004a70b7a68baea296fd2ab32bd1e2ddab8a3e84fcf9
1534
+ version: 3.0.6
1535
+ sha256: 511acf0d60990b7bf5a6ca9567cd6417cc18dd5e2b2cce084394de59e5327a08
1536
1536
  requires_dist:
1537
1537
  - httpx
1538
1538
  - stjames>=0.0.174
@@ -1624,10 +1624,10 @@ packages:
1624
1624
  - pygments ; extra == 'tests'
1625
1625
  - littleutils ; extra == 'tests'
1626
1626
  - cython ; extra == 'tests'
1627
- - pypi: https://files.pythonhosted.org/packages/02/e6/5d6c315b37e517dc93a09665c3e3f88e68f1d2cdd120edf3b093f7d461b2/stjames-0.0.180-py3-none-any.whl
1627
+ - pypi: https://files.pythonhosted.org/packages/20/1c/0b3011c55381804e68833f192e398c294846e196efe9f9773dcf9d3b4e33/stjames-0.0.182-py3-none-any.whl
1628
1628
  name: stjames
1629
- version: 0.0.180
1630
- sha256: 8224350783a2a7715bcc8bad37d2f345a47c1c3529edc20b8c80b8b7be856aba
1629
+ version: 0.0.182
1630
+ sha256: 4a243ff896e36eecc3cf3ebdd659efe83c60e245aecc00c495fadb4ec1e1255c
1631
1631
  requires_dist:
1632
1632
  - pydantic>=2.4
1633
1633
  - numpy
@@ -1705,17 +1705,17 @@ packages:
1705
1705
  - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks'
1706
1706
  - backports-zstd>=1.0.0 ; python_full_version < '3.14' and extra == 'zstd'
1707
1707
  requires_python: '>=3.9'
1708
- - pypi: https://files.pythonhosted.org/packages/20/0e/f083a76cb590e60dff3868779558eefefb8dfb7c9ed020babc7aa014ccbf/virtualenv-21.2.1-py3-none-any.whl
1708
+ - pypi: https://files.pythonhosted.org/packages/27/8d/edd0bd910ff803c308ee9a6b7778621af0d10252219ad9f19ef4d4982a61/virtualenv-21.2.4-py3-none-any.whl
1709
1709
  name: virtualenv
1710
- version: 21.2.1
1711
- sha256: bd16b49c53562b28cf1a3ad2f36edb805ad71301dee70ddc449e5c88a9f919a2
1710
+ version: 21.2.4
1711
+ sha256: 29d21e941795206138d0f22f4e45ff7050e5da6c6472299fb7103318763861ac
1712
1712
  requires_dist:
1713
1713
  - distlib>=0.3.7,<1
1714
1714
  - filelock>=3.24.2,<4 ; python_full_version >= '3.10'
1715
1715
  - filelock>=3.16.1,<=3.19.1 ; python_full_version < '3.10'
1716
1716
  - importlib-metadata>=6.6 ; python_full_version < '3.8'
1717
1717
  - platformdirs>=3.9.1,<5
1718
- - python-discovery>=1
1718
+ - python-discovery>=1.2.2
1719
1719
  - typing-extensions>=4.13.2 ; python_full_version < '3.11'
1720
1720
  requires_python: '>=3.8'
1721
1721
  - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "rowan-python"
3
- version = "3.0.5"
3
+ version = "3.0.6"
4
4
  description = "Rowan Python Library"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -52,28 +52,36 @@ class Molecule(BaseModel):
52
52
  return cls(_stjames=stjames.Molecule.from_smiles(smiles))
53
53
 
54
54
  @classmethod
55
- def from_xyz(cls, xyz_string: str, charge: int = 0, multiplicity: int = 1) -> Self:
55
+ def from_xyz(
56
+ cls, xyz_string: str, charge: int | None = None, multiplicity: int | None = None
57
+ ) -> Self:
56
58
  """
57
- Create molecule from XYZ string.
59
+ Create Molecule from XYZ string.
58
60
 
59
- :param xyz_string: XYZ format string.
60
- :param charge: Molecular charge (default 0).
61
- :param multiplicity: Spin multiplicity (default 1).
62
- :returns: Molecule instance.
61
+ :param xyz_string: XYZ format string
62
+ :param charge: charge
63
+ :param multiplicity: spin multiplicity
64
+ :returns: Molecule
63
65
  """
64
- stj = stjames.Molecule.from_xyz(xyz_string)
65
- stj = stjames.Molecule(atoms=stj.atoms, charge=charge, multiplicity=multiplicity)
66
- return cls(_stjames=stj)
66
+ return cls(
67
+ _stjames=stjames.Molecule.from_xyz(
68
+ xyz_string,
69
+ charge=charge,
70
+ multiplicity=multiplicity,
71
+ )
72
+ )
67
73
 
68
74
  @classmethod
69
- def from_xyz_file(cls, path: str | Path, charge: int = 0, multiplicity: int = 1) -> Self:
75
+ def from_xyz_file(
76
+ cls, path: str | Path, charge: int | None = None, multiplicity: int | None = None
77
+ ) -> Self:
70
78
  """
71
79
  Create molecule from XYZ file.
72
80
 
73
- :param path: Path to XYZ file.
74
- :param charge: Molecular charge (default 0).
75
- :param multiplicity: Spin multiplicity (default 1).
76
- :returns: Molecule instance.
81
+ :param path: path to XYZ file
82
+ :param charge: charge
83
+ :param multiplicity: spin multiplicity
84
+ :returns: Molecule
77
85
  """
78
86
  return cls.from_xyz(Path(path).read_text(), charge=charge, multiplicity=multiplicity)
79
87
 
@@ -82,8 +90,8 @@ class Molecule(BaseModel):
82
90
  """
83
91
  Create from stjames.Molecule.
84
92
 
85
- :param stj: stjames.Molecule instance.
86
- :returns: Molecule instance.
93
+ :param stj: stjames.Molecule
94
+ :returns: Molecule
87
95
  """
88
96
  return cls(_stjames=stj)
89
97
 
@@ -305,7 +305,7 @@ def list_proteins(
305
305
 
306
306
 
307
307
  def upload_protein(
308
- name: str, file_path: Path, project_uuid: str | Project | None = None
308
+ name: str, file_path: str | Path, project_uuid: str | Project | None = None
309
309
  ) -> Protein:
310
310
  """
311
311
  Uploads a protein from a PDB file to the API.
@@ -315,6 +315,7 @@ def upload_protein(
315
315
  :returns: Protein object representing the uploaded protein
316
316
  :raises requests.HTTPError: if the request to the API fails
317
317
  """
318
+ file_path = Path(file_path)
318
319
  if isinstance(project_uuid, Project):
319
320
  project_uuid = project_uuid.uuid
320
321
  with api_client() as client:
@@ -183,8 +183,7 @@ def submit_pka_workflow(
183
183
  )
184
184
  if method in _PKA_SMILES_METHODS and not initial_smiles:
185
185
  raise ValueError(
186
- f"{method} requires a SMILES string. "
187
- "Provide a SMILES string, not a 3D structure."
186
+ f"{method} requires a SMILES string. Provide a SMILES string, not a 3D structure."
188
187
  )
189
188
  if method in _PKA_WATER_ONLY_METHODS and solvent != "water":
190
189
  raise ValueError(f"{method} only supports water as solvent.")
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes