rowan-python 3.0.4__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 (131) hide show
  1. {rowan_python-3.0.4 → 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.4 → rowan_python-3.0.6}/PKG-INFO +1 -1
  6. rowan_python-3.0.6/examples/data/Al_FCC.xyz +3 -0
  7. rowan_python-3.0.6/examples/periodic_dft.py +58 -0
  8. rowan_python-3.0.6/examples/pka.py +69 -0
  9. {rowan_python-3.0.4 → rowan_python-3.0.6}/pixi.lock +56 -56
  10. {rowan_python-3.0.4 → rowan_python-3.0.6}/pyproject.toml +1 -1
  11. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/__init__.py +8 -0
  12. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/molecule.py +55 -16
  13. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/protein.py +2 -1
  14. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/analogue_docking.py +9 -0
  15. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/basic_calculation.py +18 -0
  16. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/pka.py +32 -18
  17. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/strain.py +15 -7
  18. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/tautomer_search.py +16 -6
  19. rowan_python-3.0.4/examples/pka.py +0 -43
  20. {rowan_python-3.0.4 → rowan_python-3.0.6}/.envrc +0 -0
  21. {rowan_python-3.0.4 → rowan_python-3.0.6}/.github/workflows/build-and-deploy-docs.yml +0 -0
  22. {rowan_python-3.0.4 → rowan_python-3.0.6}/.github/workflows/python-publish.yml +0 -0
  23. {rowan_python-3.0.4 → rowan_python-3.0.6}/.github/workflows/test.yml +0 -0
  24. {rowan_python-3.0.4 → rowan_python-3.0.6}/.pre-commit-config.yaml +0 -0
  25. {rowan_python-3.0.4 → rowan_python-3.0.6}/LICENSE +0 -0
  26. {rowan_python-3.0.4 → rowan_python-3.0.6}/README.md +0 -0
  27. {rowan_python-3.0.4 → rowan_python-3.0.6}/docs/images/deciduous-tree-favicon.png +0 -0
  28. {rowan_python-3.0.4 → rowan_python-3.0.6}/docs/index.md +0 -0
  29. {rowan_python-3.0.4 → rowan_python-3.0.6}/docs/rowan_rdkit.md +0 -0
  30. {rowan_python-3.0.4 → rowan_python-3.0.6}/docs/stylesheets/colors.css +0 -0
  31. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/PROTAC_solubility.py +0 -0
  32. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/admet.py +0 -0
  33. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/analogue_docking.py +0 -0
  34. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/aqueous_solubility.py +0 -0
  35. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/basic_calculation.py +0 -0
  36. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/basic_calculation_from_json.py +0 -0
  37. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/basic_calculation_with_constraint.py +0 -0
  38. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/basic_calculation_with_solvent.py +0 -0
  39. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/batch_docking.py +0 -0
  40. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/bde.py +0 -0
  41. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/boltz_paired_msa.py +0 -0
  42. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/boltz_single_msa.py +0 -0
  43. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/chai_paired_msa.py +0 -0
  44. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/chai_single_msa.py +0 -0
  45. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/cofolding_screen.py +0 -0
  46. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/colabfold_paired_msa.py +0 -0
  47. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/colabfold_single_msa.py +0 -0
  48. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/conformer_dependent_redox.py +0 -0
  49. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/conformers.py +0 -0
  50. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/data/1iep_receptorH.pdb +0 -0
  51. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/data/citalopram_1iep.xyz +0 -0
  52. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/data/tyk2_ligands.sdf +0 -0
  53. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/data/tyk2_structure.pdb +0 -0
  54. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/data/workflow_example.json +0 -0
  55. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/dcd_download.py +0 -0
  56. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/descriptors.py +0 -0
  57. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/docking_screen.py +0 -0
  58. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/double_ended_ts_search.py +0 -0
  59. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/electronic_properties.py +0 -0
  60. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/estimate_workflow.py +0 -0
  61. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/fukui_index.py +0 -0
  62. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/hydrogen_bond_basicity.py +0 -0
  63. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/interaction_energy_decomposition.py +0 -0
  64. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/ion_mobility.py +0 -0
  65. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/irc.py +0 -0
  66. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/macropka.py +0 -0
  67. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/membrane_permeability.py +0 -0
  68. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/multistage_optimization.py +0 -0
  69. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/nmr.py +0 -0
  70. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/optimization.py +0 -0
  71. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/pdb_download.py +0 -0
  72. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/phenol_pka.py +0 -0
  73. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/pose_analysis_md.py +0 -0
  74. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/protein_binder_design.py +0 -0
  75. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/protein_cofolding.py +0 -0
  76. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/protein_md.py +0 -0
  77. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/rbfe_graph.py +0 -0
  78. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/redox_potential.py +0 -0
  79. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/relative_binding_free_energy_perturbation.py +0 -0
  80. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/retrieve_workflow.py +0 -0
  81. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/scan.py +0 -0
  82. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/solvent_dependent_conformers.py +0 -0
  83. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/spin_states.py +0 -0
  84. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/strain.py +0 -0
  85. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/tautomer.py +0 -0
  86. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/template.py +0 -0
  87. {rowan_python-3.0.4 → rowan_python-3.0.6}/examples/webhook.py +0 -0
  88. {rowan_python-3.0.4 → rowan_python-3.0.6}/mkdocs.yml +0 -0
  89. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/calculation.py +0 -0
  90. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/config.py +0 -0
  91. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/constants.py +0 -0
  92. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/folder.py +0 -0
  93. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/project.py +0 -0
  94. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/py.typed +0 -0
  95. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/rowan_rdkit/__init__.py +0 -0
  96. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/rowan_rdkit/chem_utils.py +0 -0
  97. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/types.py +0 -0
  98. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/user.py +0 -0
  99. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/utils.py +0 -0
  100. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/__init__.py +0 -0
  101. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/admet.py +0 -0
  102. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/base.py +0 -0
  103. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/batch_docking.py +0 -0
  104. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/bde.py +0 -0
  105. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/conformer_search.py +0 -0
  106. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/constants.py +0 -0
  107. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/descriptors.py +0 -0
  108. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/docking.py +0 -0
  109. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/double_ended_ts_search.py +0 -0
  110. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/electronic_properties.py +0 -0
  111. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/fukui.py +0 -0
  112. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/hydrogen_bond_donor_acceptor_strength.py +0 -0
  113. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/interaction_energy_decomposition.py +0 -0
  114. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/ion_mobility.py +0 -0
  115. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/irc.py +0 -0
  116. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/macropka.py +0 -0
  117. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/membrane_permeability.py +0 -0
  118. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/msa.py +0 -0
  119. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/multistage_optimization.py +0 -0
  120. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/nmr.py +0 -0
  121. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/pose_analysis_md.py +0 -0
  122. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/protein_binder_design.py +0 -0
  123. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/protein_cofolding.py +0 -0
  124. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/protein_md.py +0 -0
  125. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/rbfe_graph.py +0 -0
  126. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/redox_potential.py +0 -0
  127. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/relative_binding_free_energy_perturbation.py +0 -0
  128. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/scan.py +0 -0
  129. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/solubility.py +0 -0
  130. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/solvent_dependent_conformers.py +0 -0
  131. {rowan_python-3.0.4 → rowan_python-3.0.6}/rowan/workflows/spin_states.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.4
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
@@ -0,0 +1,3 @@
1
+ 1
2
+ Lattice="0.0 2.0230 2.0230 2.0230 0.0 2.0230 2.0230 2.0230 0.0" Properties=species:S:1:pos:R:3
3
+ Al 0.00000000 0.00000000 0.00000000
@@ -0,0 +1,58 @@
1
+ """
2
+ Run a periodic DFT energy calculation on bulk aluminium using Quantum ESPRESSO.
3
+
4
+ Key settings for PBC calculations:
5
+ - ``pw_cutoff``: plane-wave kinetic-energy cutoff in Hartree (higher = more accurate/slower)
6
+ - ``kpoints``: Monkhorst–Pack k-point grid (denser = more accurate/slower)
7
+ - ``smearing``: occupation smearing type — recommended for metals to aid SCF convergence
8
+ - ``degauss``: smearing width in Hartree (typical range: 0.005–0.02)
9
+
10
+ Periodic molecules are constructed from atomic positions + lattice vectors.
11
+ See documentation at: https://docs.rowansci.com/science/workflows/basic-calculation
12
+ """
13
+
14
+ import rowan
15
+
16
+ # Set your API key or use the ROWAN_API_KEY environment variable
17
+ # rowan.api_key = "rowan-sk..."
18
+ folder = rowan.get_folder("examples/periodic_dft")
19
+
20
+ # Build bulk Al FCC primitive cell.
21
+ # Lattice vectors in Angstrom; Al has 13 electrons so multiplicity=2.
22
+ cell = rowan.PeriodicCell(
23
+ lattice_vectors=(
24
+ (0.0, 2.0230, 2.0230),
25
+ (2.0230, 0.0, 2.0230),
26
+ (2.0230, 2.0230, 0.0),
27
+ )
28
+ )
29
+ al_fcc = rowan.Molecule.from_atoms(
30
+ atoms=[rowan.Atom(atomic_number=13, position=(0.0, 0.0, 0.0))],
31
+ charge=0,
32
+ multiplicity=2,
33
+ cell=cell,
34
+ )
35
+
36
+ # Marzari–Vanderbilt cold smearing is recommended for metals.
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
40
+ smearing=rowan.PBCDFTSmearing.MV,
41
+ degauss=0.01, # Hartree smearing width
42
+ )
43
+
44
+ workflow = rowan.submit_basic_calculation_workflow(
45
+ initial_molecule=al_fcc,
46
+ tasks=["energy"],
47
+ method="PBE",
48
+ basis_set="SSSP_efficiency",
49
+ pbc_dft_settings=pbc_settings,
50
+ name="Al FCC bulk energy",
51
+ folder=folder,
52
+ )
53
+
54
+ print(f"View workflow privately at: https://labs.rowansci.com/calculation/{workflow.uuid}")
55
+ result = workflow.result()
56
+ print(result)
57
+ # e.g. <BasicCalculationResult energy=-19.725 H>
58
+ print(f"Al FCC energy: {result.energy:.6f} Hartree")
@@ -0,0 +1,69 @@
1
+ """
2
+ Calculate the pKa of phenol using the Rowan API.
3
+
4
+ Experimental value ≈ 9.99
5
+
6
+ Four methods are available:
7
+ - aimnet2_wagen2024: AIMNet2-based; requires 3D structure; water only.
8
+ - gxtb_wagen2026: g-xTB-based; requires 3D structure; water only; full periodic table.
9
+ - chemprop_nevolianis2025: Chemprop-based; requires SMILES; several solvents supported.
10
+ - starling: SMILES-based; water only.
11
+
12
+ See documentation at: https://docs.rowansci.com/science/workflows/pka
13
+ """
14
+
15
+ import rowan
16
+
17
+ # Set your API key or use the ROWAN_API_KEY environment variable
18
+ # rowan.api_key = "rowan-sk..."
19
+ folder = rowan.get_folder("examples/pka")
20
+
21
+ # 3D structure-based methods — pass a Molecule with coordinates
22
+ mol = rowan.Molecule.from_smiles("c1ccccc1O")
23
+
24
+ workflow = rowan.submit_pka_workflow(
25
+ initial_molecule=mol,
26
+ method="aimnet2_wagen2024",
27
+ name="Phenol pKa (aimnet2_wagen2024)",
28
+ folder=folder,
29
+ )
30
+ print(f"View at: https://labs.rowansci.com/pka/{workflow.uuid}")
31
+ result = workflow.result()
32
+ print(result)
33
+ # e.g. <pKaResult acid=9.87>
34
+
35
+ workflow2 = rowan.submit_pka_workflow(
36
+ initial_molecule=mol,
37
+ method="gxtb_wagen2026",
38
+ name="Phenol pKa (gxtb_wagen2026)",
39
+ folder=folder,
40
+ )
41
+ print(f"View at: https://labs.rowansci.com/pka/{workflow2.uuid}")
42
+ result2 = workflow2.result()
43
+ print(result2)
44
+ # e.g. <pKaResult acid=9.92>
45
+
46
+ # SMILES-based methods — pass a SMILES string directly
47
+ smiles = "c1ccccc1O"
48
+
49
+ workflow3 = rowan.submit_pka_workflow(
50
+ initial_molecule=smiles,
51
+ method="chemprop_nevolianis2025",
52
+ name="Phenol pKa (chemprop_nevolianis2025)",
53
+ folder=folder,
54
+ )
55
+ print(f"View at: https://labs.rowansci.com/pka/{workflow3.uuid}")
56
+ result3 = workflow3.result()
57
+ print(result3)
58
+ # e.g. <pKaResult acid=9.75>
59
+
60
+ workflow4 = rowan.submit_pka_workflow(
61
+ initial_molecule=smiles,
62
+ method="starling",
63
+ name="Phenol pKa (starling)",
64
+ folder=folder,
65
+ )
66
+ print(f"View at: https://labs.rowansci.com/pka/{workflow4.uuid}")
67
+ result4 = workflow4.result()
68
+ print(result4)
69
+ # e.g. <pKaResult acid=9.81>
@@ -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/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl
48
- - pypi: https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-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/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl
87
- - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-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,15 +163,15 @@ 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
- - pypi: https://files.pythonhosted.org/packages/6b/8d/93491ff7b79419edc7eabf95cb3b3f7490e2e574b2855c7c7e7394ff933f/mypy-1.20.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
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
170
170
  - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl
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/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl
187
- - pypi: https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-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,15 +265,15 @@ 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
- - pypi: https://files.pythonhosted.org/packages/7d/c5/5fe9d8a729dd9605064691816243ae6c49fde0bd28f6e5e17f6a24203c43/mypy-1.20.0-cp314-cp314-macosx_11_0_arm64.whl
271
+ - pypi: https://files.pythonhosted.org/packages/d5/82/74e62e7097fa67da328ac8ece8de09133448c04d20ddeaeba251a3000f01/mypy-1.20.1-cp314-cp314-macosx_11_0_arm64.whl
272
272
  - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl
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/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl
289
- - pypi: https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-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
@@ -1039,10 +1039,10 @@ packages:
1039
1039
  version: 11.0.2
1040
1040
  sha256: 6e35b35f818b01f691643c6c611bc0902f2e92b46c18fffa77ae1e7c46e912e4
1041
1041
  requires_python: '>=3.10'
1042
- - pypi: https://files.pythonhosted.org/packages/6b/8d/93491ff7b79419edc7eabf95cb3b3f7490e2e574b2855c7c7e7394ff933f/mypy-1.20.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
1042
+ - pypi: https://files.pythonhosted.org/packages/d5/82/74e62e7097fa67da328ac8ece8de09133448c04d20ddeaeba251a3000f01/mypy-1.20.1-cp314-cp314-macosx_11_0_arm64.whl
1043
1043
  name: mypy
1044
- version: 1.20.0
1045
- sha256: 7d3243c406773185144527f83be0e0aefc7bf4601b0b2b956665608bf7c98a83
1044
+ version: 1.20.1
1045
+ sha256: 752507dd481e958b2c08fc966d3806c962af5a9433b5bf8f3bdd7175c20e34fe
1046
1046
  requires_dist:
1047
1047
  - typing-extensions>=4.6.0
1048
1048
  - mypy-extensions>=1.0.0
@@ -1056,10 +1056,10 @@ packages:
1056
1056
  - orjson ; extra == 'faster-cache'
1057
1057
  - ast-serialize>=0.1.1,<1.0.0 ; extra == 'native-parser'
1058
1058
  requires_python: '>=3.10'
1059
- - pypi: https://files.pythonhosted.org/packages/7d/c5/5fe9d8a729dd9605064691816243ae6c49fde0bd28f6e5e17f6a24203c43/mypy-1.20.0-cp314-cp314-macosx_11_0_arm64.whl
1059
+ - 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
1060
1060
  name: mypy
1061
- version: 1.20.0
1062
- sha256: 31b5dbb55293c1bd27c0fc813a0d2bb5ceef9d65ac5afa2e58f829dab7921fd5
1061
+ version: 1.20.1
1062
+ sha256: 2c3f6221a76f34d5100c6d35b3ef6b947054123c3f8d6938a4ba00b1308aa572
1063
1063
  requires_dist:
1064
1064
  - typing-extensions>=4.6.0
1065
1065
  - mypy-extensions>=1.0.0
@@ -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/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-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.12.5
1295
- sha256: e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d
1294
+ version: 2.13.1
1295
+ sha256: 9557ecc2806faaf6037f85b1fbd963d01e30511c48085f0d573650fdeaad378a
1296
1296
  requires_dist:
1297
1297
  - annotated-types>=0.6.0
1298
- - pydantic-core==2.41.5
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/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.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.41.5
1307
- sha256: 22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375
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/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.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.41.5
1314
- sha256: 1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14
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.4
1535
- sha256: 68bb5250327c5075096e931e0f397030cdb0a64fec9cb12c901fc97caba6f01d
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.4"
3
+ version = "3.0.6"
4
4
  description = "Rowan Python Library"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -1,17 +1,25 @@
1
1
  # ruff: noqa
2
2
  from . import constants
3
3
  from stjames import (
4
+ Atom,
4
5
  Constraint,
5
6
  ConstraintType,
7
+ ConformerGenSettingsUnion,
6
8
  Correction,
7
9
  Engine,
10
+ ETKDGSettings,
11
+ iMTDSettings,
8
12
  Method,
9
13
  Mode,
14
+ MultiStageOptSettings,
10
15
  OptimizationSettings,
16
+ PBCDFTSettings,
17
+ PeriodicCell,
11
18
  Settings,
12
19
  SolventSettings,
13
20
  Task,
14
21
  )
22
+ from stjames.pbc_dft_settings import PBCDFTSmearing
15
23
  from stjames.optimization.freezing_string_method import (
16
24
  FSMInterpolation,
17
25
  FSMOptimizationCoordinates,