rowan-python 3.0.4__py3-none-any.whl → 3.0.5__py3-none-any.whl
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.
- rowan/__init__.py +8 -0
- rowan/molecule.py +31 -0
- rowan/workflows/analogue_docking.py +9 -0
- rowan/workflows/basic_calculation.py +18 -0
- rowan/workflows/pka.py +32 -17
- rowan/workflows/strain.py +15 -7
- rowan/workflows/tautomer_search.py +16 -6
- {rowan_python-3.0.4.dist-info → rowan_python-3.0.5.dist-info}/METADATA +1 -1
- {rowan_python-3.0.4.dist-info → rowan_python-3.0.5.dist-info}/RECORD +11 -11
- {rowan_python-3.0.4.dist-info → rowan_python-3.0.5.dist-info}/WHEEL +0 -0
- {rowan_python-3.0.4.dist-info → rowan_python-3.0.5.dist-info}/licenses/LICENSE +0 -0
rowan/__init__.py
CHANGED
|
@@ -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,
|
rowan/molecule.py
CHANGED
|
@@ -87,6 +87,32 @@ class Molecule(BaseModel):
|
|
|
87
87
|
"""
|
|
88
88
|
return cls(_stjames=stj)
|
|
89
89
|
|
|
90
|
+
@classmethod
|
|
91
|
+
def from_atoms(
|
|
92
|
+
cls,
|
|
93
|
+
atoms: list[stjames.Atom],
|
|
94
|
+
charge: int = 0,
|
|
95
|
+
multiplicity: int = 1,
|
|
96
|
+
cell: stjames.PeriodicCell | None = None,
|
|
97
|
+
) -> Self:
|
|
98
|
+
"""
|
|
99
|
+
Create molecule from a list of atoms.
|
|
100
|
+
|
|
101
|
+
:param atoms: List of Atom objects.
|
|
102
|
+
:param charge: Molecular charge (default 0).
|
|
103
|
+
:param multiplicity: Spin multiplicity (default 1).
|
|
104
|
+
:param cell: PeriodicCell for periodic boundary conditions.
|
|
105
|
+
:returns: Molecule instance.
|
|
106
|
+
"""
|
|
107
|
+
return cls(
|
|
108
|
+
_stjames=stjames.Molecule(
|
|
109
|
+
atoms=atoms,
|
|
110
|
+
charge=charge,
|
|
111
|
+
multiplicity=multiplicity,
|
|
112
|
+
cell=cell,
|
|
113
|
+
)
|
|
114
|
+
)
|
|
115
|
+
|
|
90
116
|
def to_xyz(self) -> str:
|
|
91
117
|
"""Convert to XYZ format string."""
|
|
92
118
|
return self._stjames.to_xyz()
|
|
@@ -184,6 +210,11 @@ class Molecule(BaseModel):
|
|
|
184
210
|
"""Thermal correction to Gibbs free energy (Hartree)."""
|
|
185
211
|
return self._stjames.thermal_free_energy_corr
|
|
186
212
|
|
|
213
|
+
@property
|
|
214
|
+
def cell(self) -> stjames.PeriodicCell | None:
|
|
215
|
+
"""Unit cell for periodic boundary conditions."""
|
|
216
|
+
return self._stjames.cell
|
|
217
|
+
|
|
187
218
|
@property
|
|
188
219
|
def gradient(self) -> list[tuple[float, float, float]] | None:
|
|
189
220
|
"""Nuclear gradient (Hartree/Bohr)."""
|
|
@@ -162,6 +162,9 @@ def submit_analogue_docking_workflow(
|
|
|
162
162
|
executable: str = "vina",
|
|
163
163
|
scoring_function: str = "vinardo",
|
|
164
164
|
exhaustiveness: float = 8,
|
|
165
|
+
num_conformers_per_analogue: int = 100,
|
|
166
|
+
require_posebusters: bool = False,
|
|
167
|
+
run_local_optimization: bool = False,
|
|
165
168
|
name: str = "Analogue Docking Workflow",
|
|
166
169
|
folder_uuid: str | None = None,
|
|
167
170
|
folder: Folder | None = None,
|
|
@@ -178,6 +181,9 @@ def submit_analogue_docking_workflow(
|
|
|
178
181
|
:param executable: Which docking implementation to use.
|
|
179
182
|
:param scoring_function: Which docking scoring function to use.
|
|
180
183
|
:param exhaustiveness: Which exhaustiveness to employ.
|
|
184
|
+
:param num_conformers_per_analogue: Maximum number of conformers to generate per analogue.
|
|
185
|
+
:param require_posebusters: Filter conformers based on PoseBusters validity before docking.
|
|
186
|
+
:param run_local_optimization: Whether to run a local opt in docking pocket or just score.
|
|
181
187
|
:param name: Name of the workflow.
|
|
182
188
|
:param folder_uuid: UUID of the folder to place the workflow in.
|
|
183
189
|
:param folder: Folder object to store the workflow in.
|
|
@@ -207,6 +213,9 @@ def submit_analogue_docking_workflow(
|
|
|
207
213
|
initial_molecule=initial_molecule,
|
|
208
214
|
protein=protein,
|
|
209
215
|
docking_settings=docking_settings,
|
|
216
|
+
num_conformers_per_analogue=num_conformers_per_analogue,
|
|
217
|
+
require_posebusters=require_posebusters,
|
|
218
|
+
run_local_optimization=run_local_optimization,
|
|
210
219
|
)
|
|
211
220
|
|
|
212
221
|
data = {
|
|
@@ -9,6 +9,7 @@ from stjames import (
|
|
|
9
9
|
Engine,
|
|
10
10
|
Method,
|
|
11
11
|
OptimizationSettings,
|
|
12
|
+
PBCDFTSettings,
|
|
12
13
|
Settings,
|
|
13
14
|
SolventSettings,
|
|
14
15
|
)
|
|
@@ -159,6 +160,7 @@ def submit_basic_calculation_workflow(
|
|
|
159
160
|
corrections: list[str] | None = None,
|
|
160
161
|
solvent_settings: SolventSettings | dict[str, Any] | None = None,
|
|
161
162
|
opt_settings: OptimizationSettings | dict[str, Any] | None = None,
|
|
163
|
+
pbc_dft_settings: PBCDFTSettings | dict[str, Any] | None = None,
|
|
162
164
|
preset: PresetName | None = None,
|
|
163
165
|
name: str = "Basic Calculation Workflow",
|
|
164
166
|
folder_uuid: str | None = None,
|
|
@@ -179,6 +181,10 @@ def submit_basic_calculation_workflow(
|
|
|
179
181
|
:param corrections: Dispersion corrections, see `Correction`.
|
|
180
182
|
:param solvent_settings: Solvent settings as a dict or `SolventSettings`.
|
|
181
183
|
:param opt_settings: Optimization settings as a dict or `OptimizationSettings`.
|
|
184
|
+
:param pbc_dft_settings: Periodic boundary condition DFT settings as a dict or
|
|
185
|
+
`PBCDFTSettings`. Specifies the plane-wave cutoff (Hartree), Monkhorst–Pack
|
|
186
|
+
k-point grid, and optional smearing. When set, the engine is automatically
|
|
187
|
+
set to Quantum ESPRESSO unless ``engine`` is explicitly provided.
|
|
182
188
|
:param preset: Named preset, mutually exclusive with method/engine/basis_set/corrections.
|
|
183
189
|
- `general_nnp` — omol25_conserving_s on omol25
|
|
184
190
|
- `organic_nnp` — aimnet2_wb97md3 on aimnet2
|
|
@@ -203,6 +209,9 @@ def submit_basic_calculation_workflow(
|
|
|
203
209
|
if folder:
|
|
204
210
|
folder_uuid = folder.uuid
|
|
205
211
|
|
|
212
|
+
if isinstance(pbc_dft_settings, dict):
|
|
213
|
+
pbc_dft_settings = PBCDFTSettings(**pbc_dft_settings)
|
|
214
|
+
|
|
206
215
|
if preset is not None:
|
|
207
216
|
if any(x is not None for x in [method, engine, corrections, basis_set]):
|
|
208
217
|
raise ValueError(
|
|
@@ -214,6 +223,7 @@ def submit_basic_calculation_workflow(
|
|
|
214
223
|
mode=mode,
|
|
215
224
|
solvent_settings=solvent_settings,
|
|
216
225
|
**({"opt_settings": opt_settings} if opt_settings else {}),
|
|
226
|
+
**({"pbc_dft_settings": pbc_dft_settings} if pbc_dft_settings else {}),
|
|
217
227
|
)
|
|
218
228
|
else:
|
|
219
229
|
if method is None:
|
|
@@ -228,6 +238,10 @@ def submit_basic_calculation_workflow(
|
|
|
228
238
|
if isinstance(opt_settings, dict):
|
|
229
239
|
opt_settings = stjames.OptimizationSettings(**opt_settings)
|
|
230
240
|
|
|
241
|
+
# pbc_dft_settings implies Quantum ESPRESSO; override engine unless explicitly set
|
|
242
|
+
if pbc_dft_settings is not None and engine is None:
|
|
243
|
+
engine = Engine.QUANTUM_ESPRESSO
|
|
244
|
+
|
|
231
245
|
settings_kwargs: dict[str, Any] = {
|
|
232
246
|
"method": method,
|
|
233
247
|
"basis_set": basis_set,
|
|
@@ -236,8 +250,12 @@ def submit_basic_calculation_workflow(
|
|
|
236
250
|
"corrections": corrections or [],
|
|
237
251
|
"solvent_settings": solvent_settings,
|
|
238
252
|
}
|
|
253
|
+
if engine is not None:
|
|
254
|
+
settings_kwargs["engine"] = engine
|
|
239
255
|
if opt_settings is not None:
|
|
240
256
|
settings_kwargs["opt_settings"] = opt_settings
|
|
257
|
+
if pbc_dft_settings is not None:
|
|
258
|
+
settings_kwargs["pbc_dft_settings"] = pbc_dft_settings
|
|
241
259
|
settings = stjames.Settings(**settings_kwargs)
|
|
242
260
|
|
|
243
261
|
initial_molecule = molecule_to_dict(initial_molecule)
|
rowan/workflows/pka.py
CHANGED
|
@@ -23,13 +23,15 @@ class pKaMicrostate:
|
|
|
23
23
|
"""
|
|
24
24
|
Microstate from a pKa calculation.
|
|
25
25
|
|
|
26
|
-
Available fields depend on the pKa method used
|
|
27
|
-
aimnet2_wagen2024
|
|
26
|
+
Available fields depend on the pKa method used. 3D structure-based methods
|
|
27
|
+
(aimnet2_wagen2024, gxtb_wagen2026) populate delta_g. SMILES-based methods
|
|
28
|
+
(chemprop_nevolianis2025, starling) populate smiles; chemprop_nevolianis2025
|
|
29
|
+
also populates uncertainty.
|
|
28
30
|
|
|
29
31
|
:param atom_index: Index of the protonation site atom.
|
|
30
32
|
:param pka: Predicted pKa value.
|
|
31
|
-
:param smiles: SMILES of the microstate (
|
|
32
|
-
:param delta_g: Free energy of (de)protonation in kcal/mol (
|
|
33
|
+
:param smiles: SMILES of the microstate (SMILES-based methods only).
|
|
34
|
+
:param delta_g: Free energy of (de)protonation in kcal/mol (3D structure-based methods only).
|
|
33
35
|
:param uncertainty: Prediction uncertainty (chemprop_nevolianis2025 only).
|
|
34
36
|
"""
|
|
35
37
|
|
|
@@ -40,6 +42,12 @@ class pKaMicrostate:
|
|
|
40
42
|
uncertainty: float | None = None
|
|
41
43
|
|
|
42
44
|
|
|
45
|
+
# Methods grouped by input type and solvent support
|
|
46
|
+
_PKA_3D_METHODS = {"aimnet2_wagen2024", "gxtb_wagen2026"}
|
|
47
|
+
_PKA_SMILES_METHODS = {"chemprop_nevolianis2025", "starling"}
|
|
48
|
+
_PKA_WATER_ONLY_METHODS = {"aimnet2_wagen2024", "gxtb_wagen2026", "starling"}
|
|
49
|
+
|
|
50
|
+
|
|
43
51
|
@register_result("pka")
|
|
44
52
|
class pKaResult(WorkflowResult):
|
|
45
53
|
"""Result from a pKa workflow."""
|
|
@@ -95,19 +103,19 @@ class pKaResult(WorkflowResult):
|
|
|
95
103
|
"""
|
|
96
104
|
Optimized structure calculations (lazily fetched).
|
|
97
105
|
|
|
98
|
-
Only available for
|
|
106
|
+
Only available for 3D structure-based methods (aimnet2_wagen2024, gxtb_wagen2026).
|
|
99
107
|
|
|
100
108
|
.. note::
|
|
101
109
|
Makes one API call per structure on first access.
|
|
102
110
|
Results are cached. Call clear_cache() to refresh.
|
|
103
111
|
|
|
104
|
-
:raises ValueError: If method is
|
|
112
|
+
:raises ValueError: If method is SMILES-based (chemprop_nevolianis2025, starling).
|
|
105
113
|
"""
|
|
106
114
|
method = self._workflow.microscopic_pka_method
|
|
107
|
-
if method
|
|
115
|
+
if method in _PKA_SMILES_METHODS:
|
|
108
116
|
raise ValueError(
|
|
109
|
-
"
|
|
110
|
-
"Use aimnet2_wagen2024 for 3D structure calculations."
|
|
117
|
+
f"{method} is SMILES-based and does not produce structures. "
|
|
118
|
+
"Use aimnet2_wagen2024 or gxtb_wagen2026 for 3D structure calculations."
|
|
111
119
|
)
|
|
112
120
|
if "structures" not in self._cache:
|
|
113
121
|
uuids = self._get_structure_uuids()
|
|
@@ -118,7 +126,9 @@ class pKaResult(WorkflowResult):
|
|
|
118
126
|
def submit_pka_workflow(
|
|
119
127
|
initial_molecule: MoleculeInput | str,
|
|
120
128
|
pka_range: tuple[int, int] = (2, 12),
|
|
121
|
-
method: Literal[
|
|
129
|
+
method: Literal[
|
|
130
|
+
"aimnet2_wagen2024", "gxtb_wagen2026", "chemprop_nevolianis2025", "starling"
|
|
131
|
+
] = "aimnet2_wagen2024",
|
|
122
132
|
solvent: SolventInput = "water",
|
|
123
133
|
deprotonate_elements: list[int] | None = None,
|
|
124
134
|
protonate_elements: list[int] | None = None,
|
|
@@ -136,7 +146,11 @@ def submit_pka_workflow(
|
|
|
136
146
|
:param initial_molecule: Molecule to calculate pKa for.
|
|
137
147
|
Accepts Molecule, stjames.Molecule, RDKit Mol, dict, or SMILES string.
|
|
138
148
|
:param pka_range: Range of pKa values to calculate.
|
|
139
|
-
:param method: Algorithm used to compute pKa values
|
|
149
|
+
:param method: Algorithm used to compute pKa values:
|
|
150
|
+
- ``aimnet2_wagen2024``: AIMNet2-based; requires 3D structure; water only.
|
|
151
|
+
- ``gxtb_wagen2026``: g-xTB-based; requires 3D structure; water only; full periodic table.
|
|
152
|
+
- ``chemprop_nevolianis2025``: Chemprop-based; requires SMILES; several solvents supported.
|
|
153
|
+
- ``starling``: SMILES-based; water only.
|
|
140
154
|
:param solvent: Solvent in which pKa values will be computed.
|
|
141
155
|
:param deprotonate_elements: Elements to deprotonate (atomic numbers).
|
|
142
156
|
:param protonate_elements: Elements to protonate (atomic numbers).
|
|
@@ -148,7 +162,7 @@ def submit_pka_workflow(
|
|
|
148
162
|
:param webhook_url: URL that Rowan will POST to when the workflow completes.
|
|
149
163
|
:param is_draft: If True, submit the workflow as a draft without starting execution.
|
|
150
164
|
:returns: Workflow object representing the submitted workflow.
|
|
151
|
-
:raises ValueError: If method and input type don't match.
|
|
165
|
+
:raises ValueError: If method and input type don't match, or solvent is unsupported.
|
|
152
166
|
:raises requests.HTTPError: if the request to the API fails.
|
|
153
167
|
"""
|
|
154
168
|
if folder and folder_uuid:
|
|
@@ -163,16 +177,17 @@ def submit_pka_workflow(
|
|
|
163
177
|
else:
|
|
164
178
|
mol_dict = molecule_to_dict(initial_molecule)
|
|
165
179
|
|
|
166
|
-
|
|
167
|
-
if method == "aimnet2_wagen2024" and not mol_dict:
|
|
180
|
+
if method in _PKA_3D_METHODS and not mol_dict:
|
|
168
181
|
raise ValueError(
|
|
169
|
-
"
|
|
182
|
+
f"{method} requires a 3D structure. Provide a Molecule, not a SMILES string."
|
|
170
183
|
)
|
|
171
|
-
if method
|
|
184
|
+
if method in _PKA_SMILES_METHODS and not initial_smiles:
|
|
172
185
|
raise ValueError(
|
|
173
|
-
"
|
|
186
|
+
f"{method} requires a SMILES string. "
|
|
174
187
|
"Provide a SMILES string, not a 3D structure."
|
|
175
188
|
)
|
|
189
|
+
if method in _PKA_WATER_ONLY_METHODS and solvent != "water":
|
|
190
|
+
raise ValueError(f"{method} only supports water as solvent.")
|
|
176
191
|
|
|
177
192
|
protonate_elements = protonate_elements or [7]
|
|
178
193
|
deprotonate_elements = deprotonate_elements or [7, 8, 16]
|
rowan/workflows/strain.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Strain workflow - calculate molecular strain energy."""
|
|
2
2
|
|
|
3
3
|
import math
|
|
4
|
+
from typing import Any
|
|
4
5
|
|
|
5
6
|
import stjames
|
|
6
7
|
|
|
@@ -113,6 +114,7 @@ def submit_strain_workflow(
|
|
|
113
114
|
harmonic_constraint_spring_constant: float = 5.0,
|
|
114
115
|
constrain_hydrogens: bool = False,
|
|
115
116
|
conf_gen_settings: stjames.ConformerGenSettingsUnion | None = None,
|
|
117
|
+
multistage_opt_settings: stjames.MultiStageOptSettings | None = None,
|
|
116
118
|
name: str = "Strain Workflow",
|
|
117
119
|
folder_uuid: str | None = None,
|
|
118
120
|
folder: Folder | None = None,
|
|
@@ -128,7 +130,9 @@ def submit_strain_workflow(
|
|
|
128
130
|
constraints (kcal/mol/A). Default 5.0.
|
|
129
131
|
:param constrain_hydrogens: Whether to constrain hydrogen positions. Default False.
|
|
130
132
|
:param conf_gen_settings: Conformer generation settings. Defaults to ETKDG with
|
|
131
|
-
max
|
|
133
|
+
max 200 conformers.
|
|
134
|
+
:param multistage_opt_settings: Optimization settings for conformer ranking.
|
|
135
|
+
Defaults to AIMNet2/wB97M-D3 optimization with CPCMx singlepoint.
|
|
132
136
|
:param name: Name of the workflow.
|
|
133
137
|
:param folder_uuid: UUID of the folder to store the workflow in.
|
|
134
138
|
:param folder: Folder object to store the workflow in.
|
|
@@ -144,12 +148,16 @@ def submit_strain_workflow(
|
|
|
144
148
|
folder_uuid = folder.uuid
|
|
145
149
|
initial_molecule = molecule_to_dict(initial_molecule)
|
|
146
150
|
|
|
147
|
-
|
|
148
|
-
initial_molecule
|
|
149
|
-
harmonic_constraint_spring_constant
|
|
150
|
-
constrain_hydrogens
|
|
151
|
-
conf_gen_settings
|
|
152
|
-
|
|
151
|
+
workflow_kwargs: dict[str, Any] = {
|
|
152
|
+
"initial_molecule": initial_molecule,
|
|
153
|
+
"harmonic_constraint_spring_constant": harmonic_constraint_spring_constant,
|
|
154
|
+
"constrain_hydrogens": constrain_hydrogens,
|
|
155
|
+
"conf_gen_settings": conf_gen_settings or stjames.ETKDGSettings(max_confs=200),
|
|
156
|
+
}
|
|
157
|
+
if multistage_opt_settings is not None:
|
|
158
|
+
workflow_kwargs["multistage_opt_settings"] = multistage_opt_settings
|
|
159
|
+
|
|
160
|
+
workflow = stjames.StrainWorkflow(**workflow_kwargs)
|
|
153
161
|
|
|
154
162
|
data = {
|
|
155
163
|
"workflow_type": "strain",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Tautomer-search workflow - find tautomeric forms of molecules."""
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
+
from typing import Any
|
|
4
5
|
|
|
5
6
|
import stjames
|
|
6
7
|
|
|
@@ -105,6 +106,8 @@ class TautomerResult(WorkflowResult):
|
|
|
105
106
|
def submit_tautomer_search_workflow(
|
|
106
107
|
initial_molecule: MoleculeInput,
|
|
107
108
|
mode: Mode = Mode.CAREFUL,
|
|
109
|
+
conf_gen_settings: stjames.ConformerGenSettingsUnion | None = None,
|
|
110
|
+
multistage_opt_settings: stjames.MultiStageOptSettings | None = None,
|
|
108
111
|
name: str = "Tautomer Search Workflow",
|
|
109
112
|
folder_uuid: str | None = None,
|
|
110
113
|
folder: Folder | None = None,
|
|
@@ -116,7 +119,11 @@ def submit_tautomer_search_workflow(
|
|
|
116
119
|
Submits a tautomer-search workflow to the API.
|
|
117
120
|
|
|
118
121
|
:param initial_molecule: Molecule to find tautomers for.
|
|
119
|
-
:param mode:
|
|
122
|
+
:param mode: *Deprecated.*
|
|
123
|
+
:param conf_gen_settings: Conformer generation settings. Defaults to ETKDG with
|
|
124
|
+
250 initial conformers, 20 max conformers, and 15 kcal/mol MMFF energy cutoff.
|
|
125
|
+
:param multistage_opt_settings: Optimization settings for tautomer ranking.
|
|
126
|
+
Defaults to AIMNet2/wB97M-D3 optimization with CPCMx singlepoint.
|
|
120
127
|
:param name: Name of the workflow.
|
|
121
128
|
:param folder_uuid: UUID of the folder to place the workflow in.
|
|
122
129
|
:param folder: Folder object to store the workflow in.
|
|
@@ -132,14 +139,17 @@ def submit_tautomer_search_workflow(
|
|
|
132
139
|
folder_uuid = folder.uuid
|
|
133
140
|
initial_molecule = molecule_to_dict(initial_molecule)
|
|
134
141
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
142
|
+
workflow_kwargs: dict[str, Any] = {"initial_molecule": initial_molecule, "mode": mode}
|
|
143
|
+
if conf_gen_settings is not None:
|
|
144
|
+
workflow_kwargs["conf_gen_settings"] = conf_gen_settings
|
|
145
|
+
if multistage_opt_settings is not None:
|
|
146
|
+
workflow_kwargs["multistage_opt_settings"] = multistage_opt_settings
|
|
147
|
+
|
|
148
|
+
workflow = stjames.TautomerWorkflow(**workflow_kwargs)
|
|
139
149
|
|
|
140
150
|
data = {
|
|
141
151
|
"workflow_type": "tautomers",
|
|
142
|
-
"workflow_data": workflow.model_dump(mode="json"),
|
|
152
|
+
"workflow_data": workflow.model_dump(serialize_as_any=True, mode="json"),
|
|
143
153
|
"initial_molecule": initial_molecule,
|
|
144
154
|
"name": name,
|
|
145
155
|
"folder_uuid": folder_uuid,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
rowan/__init__.py,sha256=
|
|
1
|
+
rowan/__init__.py,sha256=HvGc27Y6l1_E_mcvabDhmDOOtMrJ6ME7Cx8LfVKqyVs,835
|
|
2
2
|
rowan/calculation.py,sha256=lZZ52DxPsuJWCTzFZXjhauHK6dV0KCUwzoxtmoxSY48,3442
|
|
3
3
|
rowan/config.py,sha256=3cVKHUNzkIPnN2bvx7l5sia7Zc5poXS8lKOJlowXyLA,21088
|
|
4
4
|
rowan/constants.py,sha256=emCH4m9OL2Hm5E-6mJGM_FgzrK_JrZT-FiKJ6pMNQ4Y,84
|
|
5
5
|
rowan/folder.py,sha256=NkimVeHho9nwRXeS87U1tivEVL-1gL2Vqfz1fJ6XpNQ,9222
|
|
6
|
-
rowan/molecule.py,sha256=
|
|
6
|
+
rowan/molecule.py,sha256=MppZLHUAHzLCaIZtAbr2tpEULt5yRUR1B5npgFISCbE,10030
|
|
7
7
|
rowan/project.py,sha256=Wy3VvhwIMIumAZD2s7hPk8jj4bAPHMDNvsqU23RRqFo,4598
|
|
8
8
|
rowan/protein.py,sha256=Ma2tBFF52Rb-ME5vZy5M5juMlmphQVQRL0Q1EBvBeZg,14761
|
|
9
9
|
rowan/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -14,9 +14,9 @@ rowan/rowan_rdkit/__init__.py,sha256=EATX2VRzywzKxqkpCUMTf7RNQLkWsfi5VcCNDW6EIiw
|
|
|
14
14
|
rowan/rowan_rdkit/chem_utils.py,sha256=ZWdLziT59Qr5JzjvV789CAyRq0m5JIawsOP4RxUbQQA,35529
|
|
15
15
|
rowan/workflows/__init__.py,sha256=o2fN6V10mWt82QPr1UlbkyHzc2vtoIbkoiFZF2PgYow,4257
|
|
16
16
|
rowan/workflows/admet.py,sha256=0_wIwXXLfHF-3kgGx_1EM1ljjaYHLeEijJ-GbMYxpL8,2904
|
|
17
|
-
rowan/workflows/analogue_docking.py,sha256=
|
|
17
|
+
rowan/workflows/analogue_docking.py,sha256=LJpbbaug0tZ9Cg-m0b7EgGH5hJ5894fHOC16Wefx7mE,9206
|
|
18
18
|
rowan/workflows/base.py,sha256=eLGyzTc9NpXBGC-FRjsaUwKP6RluWrz0ipDZ4jDY_jc,30103
|
|
19
|
-
rowan/workflows/basic_calculation.py,sha256=
|
|
19
|
+
rowan/workflows/basic_calculation.py,sha256=FKYczKpYaGE-koaHKi2VARmV9Nhqr0lTOx0Jv1RzC7k,10835
|
|
20
20
|
rowan/workflows/batch_docking.py,sha256=u_4hH7OeWkIbXqEm4uWTc3p0u9mpnR8EWqWCw7sVya4,3581
|
|
21
21
|
rowan/workflows/bde.py,sha256=cM8UNBYycwLE5yJeh8DEtX6mW6hghsM6XKEFkbd7Q8g,5551
|
|
22
22
|
rowan/workflows/conformer_search.py,sha256=_uCfGFsUTDyxDc55XTsvMSjs800LyfzBRa4_-9Pjp4g,7690
|
|
@@ -35,7 +35,7 @@ rowan/workflows/membrane_permeability.py,sha256=oIDmB8qF_K_Kesv7o_FiljAk4dpptEeO
|
|
|
35
35
|
rowan/workflows/msa.py,sha256=V3B1SyWPR8MT306hh9W-T9JTpi_E-XgAIeF9yRQZ7tI,5075
|
|
36
36
|
rowan/workflows/multistage_optimization.py,sha256=HFVx8mnHxG97pDYyL6eOhNGmESqTxaKNgUdwrFpFUJ0,6456
|
|
37
37
|
rowan/workflows/nmr.py,sha256=hergJdsiawKj7iV-jHxDOS03n_EnZcaCIt_ZTl34-JY,5183
|
|
38
|
-
rowan/workflows/pka.py,sha256=
|
|
38
|
+
rowan/workflows/pka.py,sha256=YAnFq1zyJO3j9rfYCYyrl-C_o8uaFTpCqoldqiP7o1k,8349
|
|
39
39
|
rowan/workflows/pose_analysis_md.py,sha256=UvotLhWv0_VAkKteZboOutDry7l-Zt1K6_SBx3EXqgM,9530
|
|
40
40
|
rowan/workflows/protein_binder_design.py,sha256=J-9NSbRLdHb6JQRhY_vq43HlHCDCiQqrkOZUCAF-2dk,8604
|
|
41
41
|
rowan/workflows/protein_cofolding.py,sha256=1R29XjAVjWHyelGG-mylP2GIamZbLCQKaaaFsCAnYgI,13012
|
|
@@ -47,9 +47,9 @@ rowan/workflows/scan.py,sha256=KQm58utOxs6qIpX1Jv3usoUpkVHeLw4mKCs8RTUkRhk,5696
|
|
|
47
47
|
rowan/workflows/solubility.py,sha256=9-zHEHkf4AgGNDCE3x1S-6wTgwxVm4ihRmh0kwLvPFs,8594
|
|
48
48
|
rowan/workflows/solvent_dependent_conformers.py,sha256=ovvnhCE4xlkpdhccLHEq7oBJRI2-rHmZ-7_ewGECerM,7020
|
|
49
49
|
rowan/workflows/spin_states.py,sha256=GZgBJPO6_ds9el4b7wbigIZ5213Z9DwXhokczJ5NDhs,7122
|
|
50
|
-
rowan/workflows/strain.py,sha256=
|
|
51
|
-
rowan/workflows/tautomer_search.py,sha256=
|
|
52
|
-
rowan_python-3.0.
|
|
53
|
-
rowan_python-3.0.
|
|
54
|
-
rowan_python-3.0.
|
|
55
|
-
rowan_python-3.0.
|
|
50
|
+
rowan/workflows/strain.py,sha256=r0tlZoUlAslAiF7dPTpa9WlQFUAKyVjZ19zASjSS8Hs,6339
|
|
51
|
+
rowan/workflows/tautomer_search.py,sha256=aqwXoj0ffWsb5gbvzfz_bpx5ifIfR_K07fbdWhU62Ko,5820
|
|
52
|
+
rowan_python-3.0.5.dist-info/METADATA,sha256=0wZHFNgNRDm1DwrdDVJJh1Xu05Xm8A31whsYlwCSVWM,1600
|
|
53
|
+
rowan_python-3.0.5.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
54
|
+
rowan_python-3.0.5.dist-info/licenses/LICENSE,sha256=i05z7xEhyrg6f8j0lR3XYjShnF-MJGFQ-DnpsZ8yiVI,1084
|
|
55
|
+
rowan_python-3.0.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|