rowan-python 2.0.0__tar.gz → 2.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. {rowan_python-2.0.0 → rowan_python-2.0.1}/PKG-INFO +1 -1
  2. rowan_python-2.0.1/examples/basic_calculation_from_json.py +20 -0
  3. rowan_python-2.0.1/examples/basic_calculation_with_constraint.py +33 -0
  4. rowan_python-2.0.1/examples/basic_calculation_with_solvent.py +55 -0
  5. {rowan_python-2.0.0 → rowan_python-2.0.1}/examples/bde.py +3 -0
  6. rowan_python-2.0.1/examples/data/workflow_example.json +190 -0
  7. rowan_python-2.0.1/examples/macropka.py +13 -0
  8. {rowan_python-2.0.0 → rowan_python-2.0.1}/pixi.lock +41 -28
  9. {rowan_python-2.0.0 → rowan_python-2.0.1}/pyproject.toml +1 -1
  10. {rowan_python-2.0.0 → rowan_python-2.0.1}/rowan/__init__.py +1 -3
  11. {rowan_python-2.0.0 → rowan_python-2.0.1}/rowan/workflow.py +58 -3
  12. {rowan_python-2.0.0 → rowan_python-2.0.1}/.envrc +0 -0
  13. {rowan_python-2.0.0 → rowan_python-2.0.1}/.github/workflows/python-publish.yml +0 -0
  14. {rowan_python-2.0.0 → rowan_python-2.0.1}/.github/workflows/test.yml +0 -0
  15. {rowan_python-2.0.0 → rowan_python-2.0.1}/.gitignore +0 -0
  16. {rowan_python-2.0.0 → rowan_python-2.0.1}/.pre-commit-config.yaml +0 -0
  17. {rowan_python-2.0.0 → rowan_python-2.0.1}/LICENSE +0 -0
  18. {rowan_python-2.0.0 → rowan_python-2.0.1}/README.md +0 -0
  19. {rowan_python-2.0.0 → rowan_python-2.0.1}/docs/images/deciduous-tree-favicon.png +0 -0
  20. {rowan_python-2.0.0 → rowan_python-2.0.1}/docs/index.md +0 -0
  21. {rowan_python-2.0.0 → rowan_python-2.0.1}/docs/rowan_rdkit.md +0 -0
  22. {rowan_python-2.0.0 → rowan_python-2.0.1}/docs/stylesheets/colors.css +0 -0
  23. {rowan_python-2.0.0 → rowan_python-2.0.1}/examples/PROTAC_solubility.py +0 -0
  24. {rowan_python-2.0.0 → rowan_python-2.0.1}/examples/cofolding_screen.py +0 -0
  25. {rowan_python-2.0.0 → rowan_python-2.0.1}/examples/conformer_dependent_redox.py +0 -0
  26. {rowan_python-2.0.0 → rowan_python-2.0.1}/examples/conformers.py +0 -0
  27. {rowan_python-2.0.0 → rowan_python-2.0.1}/examples/docking_screen.py +0 -0
  28. {rowan_python-2.0.0 → rowan_python-2.0.1}/examples/irc.py +0 -0
  29. {rowan_python-2.0.0 → rowan_python-2.0.1}/examples/multistage_opt.py +0 -0
  30. {rowan_python-2.0.0 → rowan_python-2.0.1}/examples/optimization.py +0 -0
  31. {rowan_python-2.0.0 → rowan_python-2.0.1}/examples/phenol_pka.py +0 -0
  32. {rowan_python-2.0.0 → rowan_python-2.0.1}/examples/pka.py +0 -0
  33. {rowan_python-2.0.0 → rowan_python-2.0.1}/examples/protein_cofolding.py +0 -0
  34. {rowan_python-2.0.0 → rowan_python-2.0.1}/examples/scan.py +0 -0
  35. {rowan_python-2.0.0 → rowan_python-2.0.1}/mkdocs.yml +0 -0
  36. {rowan_python-2.0.0 → rowan_python-2.0.1}/rowan/constants.py +0 -0
  37. {rowan_python-2.0.0 → rowan_python-2.0.1}/rowan/folder.py +0 -0
  38. {rowan_python-2.0.0 → rowan_python-2.0.1}/rowan/protein.py +0 -0
  39. {rowan_python-2.0.0 → rowan_python-2.0.1}/rowan/py.typed +0 -0
  40. {rowan_python-2.0.0 → rowan_python-2.0.1}/rowan/rowan_rdkit/__init__.py +0 -0
  41. {rowan_python-2.0.0 → rowan_python-2.0.1}/rowan/rowan_rdkit/chem_utils.py +0 -0
  42. {rowan_python-2.0.0 → rowan_python-2.0.1}/rowan/user.py +0 -0
  43. {rowan_python-2.0.0 → rowan_python-2.0.1}/rowan/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rowan-python
3
- Version: 2.0.0
3
+ Version: 2.0.1
4
4
  Summary: Rowan Python Library
5
5
  Project-URL: Homepage, https://github.com/rowansci/rowan-client
6
6
  Project-URL: Bug Tracker, https://github.com/rowansci/rowan-client/issues
@@ -0,0 +1,20 @@
1
+ import json
2
+
3
+ import rowan
4
+
5
+ # rowan.api_key = ""
6
+
7
+ with open("examples/data/workflow_example.json", "r") as f:
8
+ workflow_data = json.load(f)
9
+
10
+ result = rowan.submit_workflow(
11
+ workflow_type="basic_calculation",
12
+ workflow_data=workflow_data,
13
+ name="basic calculation from json",
14
+ initial_molecule=workflow_data["initial_molecule"],
15
+ )
16
+
17
+ result.wait_for_result()
18
+ result.fetch_latest(in_place=True)
19
+
20
+ print(result)
@@ -0,0 +1,33 @@
1
+ from stjames import Molecule
2
+
3
+ import rowan
4
+
5
+ # rowan.api_key = ""
6
+
7
+ result = rowan.submit_workflow(
8
+ initial_molecule=Molecule.from_smiles("CCCC"),
9
+ workflow_type="basic_calculation",
10
+ name="Constrained Butane",
11
+ workflow_data={
12
+ "engine": "xtb",
13
+ "settings": {
14
+ "method": "gfn2_xtb",
15
+ "tasks": ["optimize"],
16
+ "mode": "auto",
17
+ "opt_settings": {
18
+ "constraints": [
19
+ {
20
+ "atoms": [4, 3, 2, 1],
21
+ "constraint_type": "dihedral",
22
+ "value": 0,
23
+ },
24
+ ]
25
+ },
26
+ },
27
+ },
28
+ )
29
+
30
+ result.wait_for_result()
31
+ result.fetch_latest(in_place=True)
32
+
33
+ print(result)
@@ -0,0 +1,55 @@
1
+ # ruff: noqa
2
+
3
+ import os
4
+ import sys
5
+
6
+ from stjames import Molecule, Method
7
+
8
+ import rowan
9
+
10
+ # rowan.api_key = ""
11
+
12
+
13
+ def compute_energy_with_solvent_correction(molecule: Molecule, method: Method, name: str) -> float:
14
+ opt = rowan.submit_workflow(
15
+ initial_molecule=molecule,
16
+ workflow_type="basic_calculation",
17
+ name=f"{name} {method} optimization",
18
+ workflow_data={
19
+ "settings": {"method": method, "tasks": ["optimize"]},
20
+ "engine": "omol25",
21
+ },
22
+ )
23
+
24
+ opt.wait_for_result()
25
+ opt.fetch_latest(in_place=True)
26
+
27
+ calculation_uuid = opt.data["calculation_uuid"]
28
+ optimized_molecule = rowan.retrieve_calculation_molecules(calculation_uuid)[-1]
29
+
30
+ sp = rowan.submit_workflow(
31
+ initial_molecule=optimized_molecule,
32
+ workflow_type="basic_calculation",
33
+ name=f"{name} {method} single point",
34
+ workflow_data={
35
+ "settings": {
36
+ "method": method,
37
+ "tasks": ["energy"],
38
+ "solvent_settings": {"solvent": "water", "model": "cpcmx"},
39
+ },
40
+ "engine": "omol25",
41
+ },
42
+ )
43
+
44
+ sp.wait_for_result()
45
+ sp.fetch_latest(in_place=True)
46
+
47
+ calculation_uuid = sp.data["calculation_uuid"]
48
+ final_molecule = rowan.retrieve_calculation_molecules(calculation_uuid)[0]
49
+ return final_molecule["energy"]
50
+
51
+
52
+ E1 = compute_energy_with_solvent_correction(
53
+ Molecule.from_smiles("CC(=O)Oc1ccccc1C(=O)O"), Method.OMOL25_CONSERVING_S, "aspirin"
54
+ )
55
+ print(E1)
@@ -31,4 +31,7 @@ result = rowan.submit_workflow(
31
31
  },
32
32
  )
33
33
 
34
+ result.wait_for_result()
35
+ result.fetch_latest(in_place=True)
36
+
34
37
  print(result)
@@ -0,0 +1,190 @@
1
+ {
2
+ "mode": "auto",
3
+ "engine": "xtb",
4
+ "messages": [],
5
+ "settings": {
6
+ "mode": "rapid",
7
+ "tasks": [
8
+ "optimize"
9
+ ],
10
+ "method": "gfn2_xtb",
11
+ "basis_set": null,
12
+ "corrections": [],
13
+ "opt_settings": {
14
+ "max_steps": 250,
15
+ "constraints": [
16
+ {
17
+ "atoms": [
18
+ 4,
19
+ 3,
20
+ 2,
21
+ 1
22
+ ],
23
+ "value": 0,
24
+ "constraint_type": "dihedral"
25
+ }
26
+ ],
27
+ "optimize_cell": false,
28
+ "energy_threshold": 0.00005,
29
+ "transition_state": false,
30
+ "recalc_hess_every": 0,
31
+ "max_gradient_threshold": 0.005,
32
+ "rms_gradient_threshold": 0.0035
33
+ },
34
+ "scf_settings": {
35
+ "soscf": false,
36
+ "max_iters": 250
37
+ },
38
+ "level_of_theory": "gfn2_xtb",
39
+ "compute_settings": {
40
+ "compute_type_used": null,
41
+ "requested_compute_type": "cpu"
42
+ },
43
+ "solvent_settings": null,
44
+ "thermochem_settings": {
45
+ "temperature": 298,
46
+ "concentration": 0.0408740470708,
47
+ "scaling_factor": 1,
48
+ "cutoff_frequency": 100
49
+ }
50
+ },
51
+ "calculation_uuid": "54027970-5efb-42df-8125-c8984d8ca7eb",
52
+ "initial_molecule": {
53
+ "cell": null,
54
+ "atoms": [
55
+ {
56
+ "position": [
57
+ -1.57731622,
58
+ 0.46259034,
59
+ 0.02288227
60
+ ],
61
+ "atomic_number": 6
62
+ },
63
+ {
64
+ "position": [
65
+ -0.55246934,
66
+ -0.31349805,
67
+ -0.78986664
68
+ ],
69
+ "atomic_number": 6
70
+ },
71
+ {
72
+ "position": [
73
+ 0.65178196,
74
+ -0.77563238,
75
+ 0.03104792
76
+ ],
77
+ "atomic_number": 6
78
+ },
79
+ {
80
+ "position": [
81
+ 1.5013315,
82
+ 0.37070813,
83
+ 0.55769072
84
+ ],
85
+ "atomic_number": 6
86
+ },
87
+ {
88
+ "position": [
89
+ -1.17009891,
90
+ 1.41344062,
91
+ 0.37886292
92
+ ],
93
+ "atomic_number": 1
94
+ },
95
+ {
96
+ "position": [
97
+ -1.91277475,
98
+ -0.11690438,
99
+ 0.88874548
100
+ ],
101
+ "atomic_number": 1
102
+ },
103
+ {
104
+ "position": [
105
+ -2.45332233,
106
+ 0.68757176,
107
+ -0.59399069
108
+ ],
109
+ "atomic_number": 1
110
+ },
111
+ {
112
+ "position": [
113
+ -0.21575239,
114
+ 0.30052639,
115
+ -1.63326648
116
+ ],
117
+ "atomic_number": 1
118
+ },
119
+ {
120
+ "position": [
121
+ -1.04230601,
122
+ -1.19688302,
123
+ -1.21658189
124
+ ],
125
+ "atomic_number": 1
126
+ },
127
+ {
128
+ "position": [
129
+ 0.31558706,
130
+ -1.39539838,
131
+ 0.87044712
132
+ ],
133
+ "atomic_number": 1
134
+ },
135
+ {
136
+ "position": [
137
+ 1.28031633,
138
+ -1.41330121,
139
+ -0.60197473
140
+ ],
141
+ "atomic_number": 1
142
+ },
143
+ {
144
+ "position": [
145
+ 2.39258685,
146
+ -0.02154188,
147
+ 1.05803044
148
+ ],
149
+ "atomic_number": 1
150
+ },
151
+ {
152
+ "position": [
153
+ 0.95227634,
154
+ 0.97534316,
155
+ 1.28543953
156
+ ],
157
+ "atomic_number": 1
158
+ },
159
+ {
160
+ "position": [
161
+ 1.83015992,
162
+ 1.0229789,
163
+ -0.25746596
164
+ ],
165
+ "atomic_number": 1
166
+ }
167
+ ],
168
+ "charge": 0,
169
+ "dipole": null,
170
+ "energy": null,
171
+ "smiles": "CCCC",
172
+ "stress": null,
173
+ "elapsed": null,
174
+ "gradient": null,
175
+ "velocities": null,
176
+ "multiplicity": 1,
177
+ "homo_lumo_gap": null,
178
+ "scf_completed": null,
179
+ "scf_iterations": null,
180
+ "mulliken_charges": null,
181
+ "calculation_index": null,
182
+ "vibrational_modes": null,
183
+ "zero_point_energy": null,
184
+ "thermal_energy_corr": null,
185
+ "thermal_enthalpy_corr": null,
186
+ "mulliken_spin_densities": null,
187
+ "thermal_free_energy_corr": null
188
+ }
189
+ }
190
+
@@ -0,0 +1,13 @@
1
+ import rowan
2
+
3
+ # Set ROWAN_API_KEY environment variable to your API key or set rowan.api_key directly
4
+ # rowan.api_key = "rowan-sk..."
5
+
6
+ result = rowan.submit_macropka_workflow(
7
+ # oseltamivir
8
+ initial_smiles="C1CCOC(=O)C1=C[C@@H](OC(CC)CC)[C@H](NC(C)=O)[C@@H]([NH3+])C1CCC1",
9
+ name="Oseltamivir macropka",
10
+ )
11
+
12
+
13
+ print(result)
@@ -20,7 +20,7 @@ environments:
20
20
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_3.conda
21
21
  - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda
22
22
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda
23
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.3-hee844dc_0.conda
23
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.3-hee844dc_1.conda
24
24
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_3.conda
25
25
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_3.conda
26
26
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda
@@ -58,11 +58,12 @@ environments:
58
58
  osx-arm64:
59
59
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda
60
60
  - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.7.14-hbd8a1cb_0.conda
61
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda
61
62
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda
62
63
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda
63
64
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda
64
65
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda
65
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.3-hf8de324_0.conda
66
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.3-h4237e3c_1.conda
66
67
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
67
68
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
68
69
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.1-h81ee809_0.conda
@@ -114,7 +115,7 @@ environments:
114
115
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.1.0-h767d61c_3.conda
115
116
  - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda
116
117
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda
117
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.3-hee844dc_0.conda
118
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.3-hee844dc_1.conda
118
119
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_3.conda
119
120
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_3.conda
120
121
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda
@@ -142,7 +143,7 @@ environments:
142
143
  - pypi: https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl
143
144
  - pypi: https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl
144
145
  - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
145
- - pypi: https://files.pythonhosted.org/packages/58/c6/5c20af38c2a57c15d87f7f38bee77d63c1d2a3689f74fefaf35915dd12b2/griffe-1.7.3-py3-none-any.whl
146
+ - pypi: https://files.pythonhosted.org/packages/bf/c4/a839fcc28bebfa72925d9121c4d39398f77f95bcba0cf26c972a0cfb1de7/griffe-1.8.0-py3-none-any.whl
146
147
  - pypi: https://files.pythonhosted.org/packages/0b/a0/496e4f4f3af322171913b77f1789f479535abedf9f08359f1918219e03c8/griffe_pydantic-1.1.4-py3-none-any.whl
147
148
  - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
148
149
  - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
@@ -163,7 +164,7 @@ environments:
163
164
  - pypi: https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
164
165
  - pypi: https://files.pythonhosted.org/packages/1d/30/dda19f0495a9096b64b6b3c07c4bfcff1c76ee0fc521086d53593f18b4c0/mkdocs_material-9.6.15-py3-none-any.whl
165
166
  - 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/98/14/22533a578bf8b187e05d67e2c1721ce10e3f526610eebaf7a149d557ea7a/mkdocstrings-0.29.1-py3-none-any.whl
167
+ - pypi: https://files.pythonhosted.org/packages/de/b4/3c5eac68f31e124a55d255d318c7445840fa1be55e013f507556d6481913/mkdocstrings-0.30.0-py3-none-any.whl
167
168
  - pypi: https://files.pythonhosted.org/packages/3b/dd/a24ee3de56954bfafb6ede7cd63c2413bb842cc48eb45e41c43a05a33074/mkdocstrings_python-1.16.12-py3-none-any.whl
168
169
  - pypi: https://files.pythonhosted.org/packages/2b/9f/7ba6f94fc1e9ac3d2b853fdff3035fb2fa5afbed898c4a72b8a020610594/more_itertools-10.7.0-py3-none-any.whl
169
170
  - pypi: https://files.pythonhosted.org/packages/4c/66/85607ab5137d65e4f54d9797b77d5a038ef34f714929cf8ad30b03f628df/mypy-1.17.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
@@ -212,11 +213,12 @@ environments:
212
213
  osx-arm64:
213
214
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda
214
215
  - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.7.14-hbd8a1cb_0.conda
216
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda
215
217
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda
216
218
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda
217
219
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda
218
220
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda
219
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.3-hf8de324_0.conda
221
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.3-h4237e3c_1.conda
220
222
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda
221
223
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda
222
224
  - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.1-h81ee809_0.conda
@@ -241,7 +243,7 @@ environments:
241
243
  - pypi: https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl
242
244
  - pypi: https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl
243
245
  - pypi: https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl
244
- - pypi: https://files.pythonhosted.org/packages/58/c6/5c20af38c2a57c15d87f7f38bee77d63c1d2a3689f74fefaf35915dd12b2/griffe-1.7.3-py3-none-any.whl
246
+ - pypi: https://files.pythonhosted.org/packages/bf/c4/a839fcc28bebfa72925d9121c4d39398f77f95bcba0cf26c972a0cfb1de7/griffe-1.8.0-py3-none-any.whl
245
247
  - pypi: https://files.pythonhosted.org/packages/0b/a0/496e4f4f3af322171913b77f1789f479535abedf9f08359f1918219e03c8/griffe_pydantic-1.1.4-py3-none-any.whl
246
248
  - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl
247
249
  - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl
@@ -262,7 +264,7 @@ environments:
262
264
  - pypi: https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl
263
265
  - pypi: https://files.pythonhosted.org/packages/1d/30/dda19f0495a9096b64b6b3c07c4bfcff1c76ee0fc521086d53593f18b4c0/mkdocs_material-9.6.15-py3-none-any.whl
264
266
  - pypi: https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl
265
- - pypi: https://files.pythonhosted.org/packages/98/14/22533a578bf8b187e05d67e2c1721ce10e3f526610eebaf7a149d557ea7a/mkdocstrings-0.29.1-py3-none-any.whl
267
+ - pypi: https://files.pythonhosted.org/packages/de/b4/3c5eac68f31e124a55d255d318c7445840fa1be55e013f507556d6481913/mkdocstrings-0.30.0-py3-none-any.whl
266
268
  - pypi: https://files.pythonhosted.org/packages/3b/dd/a24ee3de56954bfafb6ede7cd63c2413bb842cc48eb45e41c43a05a33074/mkdocstrings_python-1.16.12-py3-none-any.whl
267
269
  - pypi: https://files.pythonhosted.org/packages/2b/9f/7ba6f94fc1e9ac3d2b853fdff3035fb2fa5afbed898c4a72b8a020610594/more_itertools-10.7.0-py3-none-any.whl
268
270
  - pypi: https://files.pythonhosted.org/packages/9c/f8/c49c9e5a2ac0badcc54beb24e774d2499748302c9568f7f09e8730e953fa/mypy-1.17.0-cp313-cp313-macosx_11_0_arm64.whl
@@ -522,10 +524,10 @@ packages:
522
524
  - markdown ; extra == 'dev'
523
525
  - flake8 ; extra == 'dev'
524
526
  - wheel ; extra == 'dev'
525
- - pypi: https://files.pythonhosted.org/packages/58/c6/5c20af38c2a57c15d87f7f38bee77d63c1d2a3689f74fefaf35915dd12b2/griffe-1.7.3-py3-none-any.whl
527
+ - pypi: https://files.pythonhosted.org/packages/bf/c4/a839fcc28bebfa72925d9121c4d39398f77f95bcba0cf26c972a0cfb1de7/griffe-1.8.0-py3-none-any.whl
526
528
  name: griffe
527
- version: 1.7.3
528
- sha256: c6b3ee30c2f0f17f30bcdef5068d6ab7a2a4f1b8bf1a3e74b56fffd21e1c5f75
529
+ version: 1.8.0
530
+ sha256: 110faa744b2c5c84dd432f4fa9aa3b14805dd9519777dd55e8db214320593b02
529
531
  requires_dist:
530
532
  - colorama>=0.4
531
533
  requires_python: '>=3.9'
@@ -583,6 +585,16 @@ packages:
583
585
  purls: []
584
586
  size: 12129203
585
587
  timestamp: 1720853576813
588
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda
589
+ sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620
590
+ md5: 5eb22c1d7b3fc4abb50d92d621583137
591
+ depends:
592
+ - __osx >=11.0
593
+ license: MIT
594
+ license_family: MIT
595
+ purls: []
596
+ size: 11857802
597
+ timestamp: 1720853997952
586
598
  - pypi: https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl
587
599
  name: identify
588
600
  version: 2.6.12
@@ -841,28 +853,29 @@ packages:
841
853
  purls: []
842
854
  size: 71829
843
855
  timestamp: 1748393749336
844
- - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.3-hee844dc_0.conda
845
- sha256: 10891c917031d27c546d397f22e09c449c6c10782f2c0a069f361a502d286f3c
846
- md5: 4fe4c3b7ce84cda6508b6d78f0ce72e3
856
+ - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.50.3-hee844dc_1.conda
857
+ sha256: 8c4faf560815a6d6b5edadc019f76d22a45171eaa707a1f1d1898ceda74b2e3f
858
+ md5: 18d2ac95b507ada9ca159a6bd73255f7
847
859
  depends:
848
860
  - __glibc >=2.17,<3.0.a0
849
861
  - icu >=75.1,<76.0a0
850
862
  - libgcc >=14
851
863
  - libzlib >=1.3.1,<2.0a0
852
- license: Unlicense
864
+ license: blessing
853
865
  purls: []
854
- size: 935794
855
- timestamp: 1752825101149
856
- - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.3-hf8de324_0.conda
857
- sha256: d5bfc49bf5f68318830dfc359739386e32413a873072fc78994ced6af3fd08df
858
- md5: 4366ba8a8b7a283aaaca877597be65df
866
+ size: 936339
867
+ timestamp: 1753262589168
868
+ - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.3-h4237e3c_1.conda
869
+ sha256: 248ba9622ee91c3ae1266f7b69143adf5031e1f2d94b6d02423e192e47531697
870
+ md5: 6d034f4604ac104a1256204af7d1a534
859
871
  depends:
860
872
  - __osx >=11.0
873
+ - icu >=75.1,<76.0a0
861
874
  - libzlib >=1.3.1,<2.0a0
862
- license: Unlicense
875
+ license: blessing
863
876
  purls: []
864
- size: 899228
865
- timestamp: 1752825238869
877
+ size: 902818
878
+ timestamp: 1753262833682
866
879
  - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_3.conda
867
880
  sha256: 7650837344b7850b62fdba02155da0b159cf472b9ab59eb7b472f7bd01dff241
868
881
  md5: 6d11a5edae89fe413c0569f16d308f5a
@@ -1041,10 +1054,10 @@ packages:
1041
1054
  version: 1.3.1
1042
1055
  sha256: adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31
1043
1056
  requires_python: '>=3.8'
1044
- - pypi: https://files.pythonhosted.org/packages/98/14/22533a578bf8b187e05d67e2c1721ce10e3f526610eebaf7a149d557ea7a/mkdocstrings-0.29.1-py3-none-any.whl
1057
+ - pypi: https://files.pythonhosted.org/packages/de/b4/3c5eac68f31e124a55d255d318c7445840fa1be55e013f507556d6481913/mkdocstrings-0.30.0-py3-none-any.whl
1045
1058
  name: mkdocstrings
1046
- version: 0.29.1
1047
- sha256: 37a9736134934eea89cbd055a513d40a020d87dfcae9e3052c2a6b8cd4af09b6
1059
+ version: 0.30.0
1060
+ sha256: ae9e4a0d8c1789697ac776f2e034e2ddd71054ae1cf2c2bb1433ccfd07c226f2
1048
1061
  requires_dist:
1049
1062
  - jinja2>=2.11.1
1050
1063
  - markdown>=3.6
@@ -1535,8 +1548,8 @@ packages:
1535
1548
  requires_python: '>=3.8'
1536
1549
  - pypi: ./
1537
1550
  name: rowan-python
1538
- version: 2.0.0
1539
- sha256: e457de628362332f67ec3a1c50a1c9bb219a33e5d321010b810735aefd26c268
1551
+ version: 2.0.1
1552
+ sha256: 538deecdcbfe274e9b6bd98bc1db5ff036d409d503774710ad34fb5aeda726e0
1540
1553
  requires_dist:
1541
1554
  - httpx
1542
1555
  - stjames>=0.0.83
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "rowan-python"
3
- version = "2.0.0"
3
+ version = "2.0.1"
4
4
  description = "Rowan Python Library"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
@@ -1,10 +1,8 @@
1
1
  # ruff: noqa
2
-
3
- from . import utils
4
-
5
2
  from . import constants
6
3
 
7
4
  from .folder import *
8
5
  from .workflow import *
9
6
  from .protein import *
10
7
  from .user import *
8
+ from .utils import *
@@ -68,7 +68,7 @@ class Workflow(BaseModel):
68
68
  """
69
69
  Loads workflow data from the database and updates the current instance.
70
70
 
71
- :param in_place: Whether to update the current instance in-place.
71
+ :param in_place: Whether to update the current instance in-place.
72
72
  :return: The updated instance (self).
73
73
  :raises HTTPError: If the API request fails.
74
74
  """
@@ -217,7 +217,7 @@ class Workflow(BaseModel):
217
217
 
218
218
 
219
219
  def submit_workflow(
220
- workflow_type: str,
220
+ workflow_type: stjames.WORKFLOW_NAME,
221
221
  workflow_data: dict[str, Any] | None = None,
222
222
  initial_molecule: dict[str, Any] | StJamesMolecule | RdkitMol | None = None,
223
223
  initial_smiles: str | None = None,
@@ -241,6 +241,11 @@ def submit_workflow(
241
241
  :raises ValueError: If neither `initial_smiles` nor a valid `initial_molecule` is provided.
242
242
  :raises HTTPError: If the API request fails.
243
243
  """
244
+ if workflow_type not in stjames.WORKFLOW_MAPPING:
245
+ raise ValueError(
246
+ "Invalid workflow type. Must be one of:\n " + "\n ".join(stjames.WORKFLOW_MAPPING)
247
+ )
248
+
244
249
  data = {
245
250
  "name": name,
246
251
  "folder_uuid": folder_uuid,
@@ -300,7 +305,7 @@ def list_workflows(
300
305
  public: bool | None = None,
301
306
  starred: bool | None = None,
302
307
  status: int | None = None,
303
- workflow_type: str | None = None,
308
+ workflow_type: stjames.WORKFLOW_NAME | None = None,
304
309
  page: int = 0,
305
310
  size: int = 10,
306
311
  ) -> list[Workflow]:
@@ -828,6 +833,56 @@ def submit_scan_workflow(
828
833
  return Workflow(**response.json())
829
834
 
830
835
 
836
+ def submit_macropka_workflow(
837
+ initial_smiles: str,
838
+ min_pH: int = 0,
839
+ max_pH: int = 14,
840
+ min_charge: int = -2,
841
+ max_charge: int = 2,
842
+ compute_solvation_energy: bool = True,
843
+ name: str = "Macropka Workflow",
844
+ folder_uuid: str | None = None,
845
+ max_credits: int | None = None,
846
+ ) -> Workflow:
847
+ """
848
+ Submits a macropka workflow to the API.
849
+
850
+ :param initial_smiles: The molecule used in the macropka workflow.
851
+ :param min_pH: The minimum pH to use in the macropka workflow.
852
+ :param max_pH: The maximum pH to use in the macropka workflow.
853
+ :param min_charge: The minimum charge to use in the macropka workflow.
854
+ :param max_charge: The maximum charge to use in the macropka workflow.
855
+ :param compute_solvation_energy: Whether to compute the solvation energy.
856
+ :param name: The name of the workflow.
857
+ :param folder_uuid: The UUID of the folder to store the workflow in.
858
+ :param max_credits: The maximum number of credits to use for the workflow.
859
+ :return: A Workflow object representing the submitted workflow.
860
+ :raises requests.HTTPError: if the request to the API fails.
861
+ """
862
+
863
+ workflow_data = {
864
+ "min_pH": min_pH,
865
+ "max_pH": max_pH,
866
+ "min_charge": min_charge,
867
+ "max_charge": max_charge,
868
+ "compute_solvation_energy": compute_solvation_energy,
869
+ }
870
+
871
+ data = {
872
+ "name": name,
873
+ "folder_uuid": folder_uuid,
874
+ "workflow_type": "macropka",
875
+ "workflow_data": workflow_data,
876
+ "initial_smiles": initial_smiles,
877
+ "max_credits": max_credits,
878
+ }
879
+
880
+ with api_client() as client:
881
+ response = client.post("/workflow", json=data)
882
+ response.raise_for_status()
883
+ return Workflow(**response.json())
884
+
885
+
831
886
  def submit_irc_workflow(
832
887
  initial_molecule: dict[str, Any] | StJamesMolecule | RdkitMol | None = None,
833
888
  method: stjames.Method | str = "uma_m_omol",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes