stjames 0.0.93__py3-none-any.whl → 0.0.95__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.

Potentially problematic release.


This version of stjames might be problematic. Click here for more details.

stjames/__init__.py CHANGED
@@ -7,12 +7,9 @@ from .molecule import *
7
7
  from .workflows import *
8
8
 
9
9
  from .scf_settings import *
10
- from .int_settings import *
11
10
  from .opt_settings import *
12
11
  from .compute_settings import *
13
- from .diis_settings import *
14
12
  from .thermochem_settings import *
15
- from .grid_settings import *
16
13
  from .settings import *
17
14
 
18
15
  from .method import *
stjames/scf_settings.py CHANGED
@@ -1,77 +1,19 @@
1
- from typing import Any, Optional
2
-
3
- import pydantic
4
- from pydantic import PositiveFloat, PositiveInt
5
-
6
1
  from .base import Base, LowercaseStrEnum
7
- from .diis_settings import DIISSettings
8
- from .grid_settings import GridSettings
9
- from .int_settings import IntSettings
10
-
11
2
 
12
- class SCFInitMethod(LowercaseStrEnum):
13
- # (See https://manual.q-chem.com/5.2/Ch4.S4.SS2.html for a nice overview here.)
14
- SAD = "sad"
15
- CORE = "core"
16
- # GWH = "gwh"
17
- READ = "read"
18
3
 
19
-
20
- class OrthonormalizationMethod(LowercaseStrEnum):
21
- SYMMETRIC = "symmetric"
22
- CANONICAL = "canonical"
23
- # Cholesky, in future?
4
+ class UseSOSCF(LowercaseStrEnum):
5
+ ALWAYS = "always"
6
+ UPON_FAILURE = "upon_failure"
7
+ NEVER = "never"
24
8
 
25
9
 
26
10
  class SCFSettings(Base):
27
- max_iters: int = 100
28
- init_method: SCFInitMethod = SCFInitMethod.SAD
29
-
30
- int_settings: IntSettings = IntSettings()
31
- grid_settings: GridSettings = GridSettings()
32
- diis_settings: DIISSettings = DIISSettings()
33
-
34
- #### orthonormalization
35
- orthonormalization: OrthonormalizationMethod = OrthonormalizationMethod.CANONICAL
36
-
37
- #### damping
38
- do_damping: bool = True
39
- # when should we stop damping?
40
- end_damping_error: PositiveFloat = 0.1
41
- # what damping factor should we use?
42
- damping_factor: float = pydantic.Field(ge=0, le=1, default=0.7)
43
-
44
- #### level shifting
45
- do_level_shift: bool = True
46
- # how much? (Eh)
47
- level_shift_magnitude: PositiveFloat = 0.25
48
- # when should we stop?
49
- end_level_shift_error: PositiveFloat = 0.1
50
-
51
- #### incremental
52
- # do incremental fock build?
53
- do_incremental: bool = True
54
- # reset incremental fock build
55
- rebuild_frequency: PositiveInt = 20
56
-
57
- #### when are we converged?
58
- energy_threshold: PositiveFloat = 1e-6
59
- rms_error_threshold: PositiveFloat = 1e-8
60
- max_error_threshold: PositiveFloat = 1e-5
61
-
62
- #### DIIS
63
- do_diis: bool = True
64
- # error below which we'll start DIIS
65
- start_diis_max_error: pydantic.PositiveFloat = 0.2
66
- # first iteration we'll consider starting DIIS
67
- start_diis_iter: PositiveInt = 3
68
- # iteration past which we'll start DIIS even if error is high
69
- start_diis_anyway: PositiveInt = 7
11
+ """
12
+ Settings for SCF convergence.
70
13
 
71
- # if ``read`` initialization is selected
72
- initial_density_matrix_guess: Optional[list[list[float]]] = None
14
+ :param max_iters: the maximum number of SCF iterations to permit
15
+ :param soscf: whether or not to use SOSCF (second-order SCF).
16
+ """
73
17
 
74
- def model_post_init(self, __context: Any) -> None:
75
- # disable incremental Fock for RI
76
- if self.int_settings.resolution_of_the_identity:
77
- self.do_incremental = False
18
+ max_iters: int = 250
19
+ soscf: UseSOSCF = UseSOSCF.UPON_FAILURE
stjames/settings.py CHANGED
@@ -68,7 +68,6 @@ class Settings(Base):
68
68
  if self.mode == Mode.AUTO:
69
69
  self.mode = Mode.RAPID
70
70
 
71
- self.scf_settings = _assign_scf_settings_by_mode(self.mode, self.scf_settings)
72
71
  self.opt_settings = _assign_opt_settings_by_mode(self.mode, self.opt_settings)
73
72
 
74
73
  return self
@@ -115,74 +114,6 @@ class Settings(Base):
115
114
  return [c for c in v if c] if v is not None else v
116
115
 
117
116
 
118
- def _assign_scf_settings_by_mode(mode: Mode, scf_settings: SCFSettings) -> SCFSettings:
119
- """
120
- Assign SCF settings based on the mode.
121
-
122
- Values based off of the following sources:
123
- QChem:
124
- - https://manual.q-chem.com/5.2/Ch4.S3.SS2.html
125
- - https://manual.q-chem.com/5.2/Ch4.S5.SS2.html
126
-
127
- Gaussian:
128
- - https://gaussian.com/integral/
129
- - https://gaussian.com/overlay5/
130
-
131
- Orca:
132
- - manual 4.2.1, §9.6.1 and §9.7.3
133
-
134
- Psi4:
135
- - https://psicode.org/psi4manual/master/autodir_options_c/module__scf.html
136
- - https://psicode.org/psi4manual/master/autodoc_glossary_options_c.html
137
-
138
- TeraChem:
139
- - Manual, it's easy to locate everything.
140
-
141
- The below values are my best attempt at homogenizing various sources.
142
- In general, eri_threshold should be 3 OOM lower than SCF convergence.
143
- """
144
- if mode == Mode.MANUAL:
145
- return scf_settings
146
-
147
- match mode:
148
- case Mode.RECKLESS:
149
- scf_settings.energy_threshold = 1e-5
150
- scf_settings.rms_error_threshold = 1e-7
151
- scf_settings.max_error_threshold = 1e-5
152
- scf_settings.rebuild_frequency = 100
153
- scf_settings.int_settings.eri_threshold = 1e-8
154
- scf_settings.int_settings.csam_multiplier = 3.0
155
- scf_settings.int_settings.pair_overlap_threshold = 1e-8
156
- case Mode.RAPID | Mode.CAREFUL:
157
- scf_settings.energy_threshold = 1e-6
158
- scf_settings.rms_error_threshold = 1e-9
159
- scf_settings.max_error_threshold = 1e-7
160
- scf_settings.rebuild_frequency = 10
161
- scf_settings.int_settings.eri_threshold = 1e-10
162
- scf_settings.int_settings.csam_multiplier = 1.0
163
- scf_settings.int_settings.pair_overlap_threshold = 1e-10
164
- case Mode.METICULOUS:
165
- scf_settings.energy_threshold = 1e-8
166
- scf_settings.rms_error_threshold = 1e-9
167
- scf_settings.max_error_threshold = 1e-7
168
- scf_settings.rebuild_frequency = 5
169
- scf_settings.int_settings.eri_threshold = 1e-12
170
- scf_settings.int_settings.csam_multiplier = 1.0
171
- scf_settings.int_settings.pair_overlap_threshold = 1e-12
172
- case Mode.DEBUG:
173
- scf_settings.energy_threshold = 1e-9
174
- scf_settings.rms_error_threshold = 1e-10
175
- scf_settings.max_error_threshold = 1e-9
176
- scf_settings.rebuild_frequency = 1
177
- scf_settings.int_settings.eri_threshold = 1e-14
178
- scf_settings.int_settings.csam_multiplier = 1e10 # in other words, disable CSAM
179
- scf_settings.int_settings.pair_overlap_threshold = 1e-14
180
- case _:
181
- raise ValueError(f"Unknown mode ``{mode.value}``!")
182
-
183
- return scf_settings
184
-
185
-
186
117
  def _assign_opt_settings_by_mode(mode: Mode, opt_settings: OptimizationSettings) -> OptimizationSettings:
187
118
  """
188
119
  Assign optimization settings based on the mode.
stjames/status.py CHANGED
@@ -19,3 +19,6 @@ class Status(int, Enum):
19
19
 
20
20
  # Status if a user has exceeded their allowed max_concurrency
21
21
  AWAITING_QUEUE = 5
22
+
23
+ # Job is not yet submitted
24
+ DRAFT = 6
@@ -17,6 +17,7 @@ from .irc import *
17
17
  from .macropka import *
18
18
  from .molecular_dynamics import *
19
19
  from .multistage_opt import *
20
+ from .nmr import *
20
21
  from .pka import *
21
22
  from .pose_analysis_md import *
22
23
  from .protein_cofolding import *
@@ -43,6 +44,7 @@ WORKFLOW_NAME = Literal[
43
44
  "macropka",
44
45
  "molecular_dynamics",
45
46
  "multistage_opt",
47
+ "nmr",
46
48
  "pka",
47
49
  "pose_analysis_md",
48
50
  "protein_cofolding",
@@ -69,6 +71,7 @@ WORKFLOW_MAPPING: dict[WORKFLOW_NAME, Workflow] = {
69
71
  "macropka": MacropKaWorkflow, # type: ignore [dict-item]
70
72
  "molecular_dynamics": MolecularDynamicsWorkflow, # type: ignore [dict-item]
71
73
  "multistage_opt": MultiStageOptWorkflow, # type: ignore [dict-item]
74
+ "nmr": NMRSpectroscopyWorkflow, # type: ignore [dict-item]
72
75
  "pka": pKaWorkflow, # type: ignore [dict-item]
73
76
  "pose_analysis_md": PoseAnalysisMolecularDynamicsWorkflow, # type: ignore [dict-item]
74
77
  "protein_cofolding": ProteinCofoldingWorkflow, # type: ignore [dict-item]
@@ -1,6 +1,11 @@
1
1
  """Ion mobility workflow."""
2
2
 
3
- from ..types import UUID
3
+ from typing import Annotated
4
+
5
+ from pydantic import AfterValidator
6
+
7
+ from ..base import round_optional_float
8
+ from ..types import UUID, round_list
4
9
  from .workflow import MoleculeWorkflow
5
10
 
6
11
 
@@ -34,9 +39,9 @@ class IonMobilityWorkflow(MoleculeWorkflow):
34
39
 
35
40
  conformers: list[UUID] = []
36
41
 
37
- conformer_ccs: list[float] = []
38
- conformer_ccs_stdev: list[float] = []
39
- boltzmann_weights: list[float] = []
42
+ conformer_ccs: Annotated[list[float], AfterValidator(round_list(3))] = []
43
+ conformer_ccs_stdev: Annotated[list[float], AfterValidator(round_list(3))] = []
44
+ boltzmann_weights: Annotated[list[float], AfterValidator(round_list(3))] = []
40
45
 
41
- average_ccs: float | None = None
42
- average_ccs_stdev: float | None = None
46
+ average_ccs: Annotated[float | None, AfterValidator(round_optional_float(3))] = None
47
+ average_ccs_stdev: Annotated[float | None, AfterValidator(round_optional_float(3))] = None
@@ -0,0 +1,54 @@
1
+ """Nuclear-magnetic-resonance spectroscopy workflow."""
2
+
3
+ from typing import Annotated
4
+
5
+ from pydantic import AfterValidator
6
+
7
+ from ..base import LowercaseStrEnum
8
+ from ..mode import Mode
9
+ from ..settings import Settings
10
+ from ..solvent import Solvent
11
+ from ..types import UUID, round_list
12
+ from .conformer_search import ConformerGenSettings, iMTDSettings
13
+ from .multistage_opt import MultiStageOptSettings
14
+ from .workflow import MoleculeWorkflow
15
+
16
+
17
+ class NMRMethod(LowercaseStrEnum):
18
+ MAGNETZERO = "magnet-zero"
19
+
20
+
21
+ class NMRSpectroscopyWorkflow(MoleculeWorkflow):
22
+ """
23
+ Workflow for calculating NMR spectra.
24
+
25
+ Inherited:
26
+ :param initial_molecule: Molecule of interest
27
+ :param mode: Mode for workflow (currently unused)
28
+
29
+ New:
30
+ :param nmr_method: how to run the NMR calculations
31
+ :param solvent: the solvent in which to run the calculations
32
+ :param conf_gen_settings : the conformer-search settings. if `None`, no conformer search will be performed
33
+ :param multistage_opt_settings: the optimization settings. if `None`, no optimization will be performed
34
+
35
+ Results:
36
+ :param conformers: list of conformer UUIDs
37
+ :param boltzmann_weights: the boltzmann weights for each conformer
38
+ :param per_conformer_isotopic_shieldings: the per-atom shieldings for each conformer
39
+ :param isotopic_shieldings: the per-atom shieldings
40
+ """
41
+
42
+ nmr_method: NMRMethod = NMRMethod.MAGNETZERO
43
+ solvent: Solvent = Solvent.CHLOROFORM
44
+
45
+ conf_gen_settings: ConformerGenSettings | None = iMTDSettings(mode="careful")
46
+ multistage_opt_settings: MultiStageOptSettings | None = MultiStageOptSettings(
47
+ mode=Mode.MANUAL,
48
+ optimization_settings=[Settings(method="aimnet2_wb97md3")],
49
+ )
50
+
51
+ conformers: list[UUID] = []
52
+ boltzmann_weights: Annotated[list[float], AfterValidator(round_list(3))] = []
53
+ per_conformer_isotropic_shieldings: list[Annotated[list[float], AfterValidator(round_list(3))]] = []
54
+ isotropic_shieldings: Annotated[list[float], AfterValidator(round_list(3))] = []
@@ -1,6 +1,6 @@
1
1
  """Protein Cofolding Workflow."""
2
2
 
3
- from typing import Annotated
3
+ from typing import Annotated, Literal
4
4
 
5
5
  from pydantic import AfterValidator, BaseModel, ConfigDict
6
6
 
@@ -17,6 +17,33 @@ class CofoldingModel(LowercaseStrEnum):
17
17
  BOLTZ_2 = "boltz_2"
18
18
 
19
19
 
20
+ class Token(BaseModel):
21
+ """Either a atom in a ligand or a residue in a protein."""
22
+
23
+ input_type: Literal["ligand", "protein"]
24
+ input_index: int
25
+ token_index: int
26
+
27
+
28
+ class ContactConstraint(BaseModel):
29
+ """Contact constraint to be used for prediction."""
30
+
31
+ token_1: Token
32
+ token_2: Token
33
+ max_distance: float # Angstroms
34
+ force: bool = False # Whether to use potentials to enforce the constraint
35
+
36
+
37
+ class PocketConstraint(BaseModel):
38
+ """Pocket constraint to be used for prediction."""
39
+
40
+ input_type: Literal["ligand", "protein"]
41
+ input_index: int
42
+ contacts: list[Token]
43
+ max_distance: float # Angstroms
44
+ force: bool = False # Whether to use potentials to enforce the constraint
45
+
46
+
20
47
  class CofoldingScores(BaseModel):
21
48
  confidence_score: Annotated[float, AfterValidator(round_float(3))]
22
49
  ptm: Annotated[float, AfterValidator(round_float(3))] # predicted template modeling score
@@ -52,6 +79,9 @@ class ProteinCofoldingWorkflow(FASTAWorkflow):
52
79
  use_msa_server: bool = False
53
80
  use_templates_server: bool = False
54
81
  use_potentials: bool = False
82
+ contact_constraints: list[ContactConstraint] = []
83
+ pocket_constraints: list[PocketConstraint] = []
84
+
55
85
  predicted_structure_uuid: UUID | None = None
56
86
  scores: CofoldingScores | None = None
57
87
  model: CofoldingModel = CofoldingModel.BOLTZ_2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stjames
3
- Version: 0.0.93
3
+ Version: 0.0.95
4
4
  Summary: standardized JSON atom/molecule encoding scheme
5
5
  Author-email: Corin Wagen <corin@rowansci.com>
6
6
  Project-URL: Homepage, https://github.com/rowansci/stjames
@@ -1,4 +1,4 @@
1
- stjames/__init__.py,sha256=8kqGRUcrOQY07DHp6VJN7GEttPPTHw49QpieMeQqkwE,608
1
+ stjames/__init__.py,sha256=i_vqziEdoBNXhD7Gjb2_1zLkSx0Ko1N8BnCk6No_T6A,522
2
2
  stjames/_deprecated_solvent_settings.py,sha256=gj5j9p3zakIwSTK5_ndqBXJx--IzjZNxZ75z-wipLOo,450
3
3
  stjames/atom.py,sha256=hQCTMu3y30dvqjyCInnSs47DkUEnwhm_M2qB2jTD4Ik,2153
4
4
  stjames/base.py,sha256=YhmNZqFdWYD_lCw8rD2fZtt17nh8g7lUFBnGMezB-u8,1837
@@ -7,10 +7,7 @@ stjames/calculation.py,sha256=O2LwwQ_cOLmDOGXTHA9J71YbUZXigUSbvbLA-fSVm3w,915
7
7
  stjames/compute_settings.py,sha256=wuYE6W4WqP3oFHwAeEp7XQ0oMz_MNLucWgrsuJ4kEFQ,268
8
8
  stjames/constraint.py,sha256=B6oV0rYjmAWr8gpi5f03gRy_uuqjUURVDVwoez5Cfbg,2442
9
9
  stjames/correction.py,sha256=ZVErCcj4TPyZeKrdvXVjHa0tFynsCaoy96QZUVxWFM8,413
10
- stjames/diis_settings.py,sha256=4m1EQQWBlpHhMnWopix8qOqJv7QCluvdnV9jSKJDFtE,552
11
10
  stjames/engine.py,sha256=wVItZQSIeR3ap6EZG3kOw0xCZztZm-6KKFrX84ZyFsE,313
12
- stjames/grid_settings.py,sha256=WrSNGc-8_f87YBZYt9Hh7RbhM4MweADoVzwBMcSqcsE,640
13
- stjames/int_settings.py,sha256=5HXp8opt5ZyY1UpmfaK7NVloWVLM5jkG0elEEqpVLUo,896
14
11
  stjames/message.py,sha256=Rq6QqmHZKecWxYH8fVyXmuoCCPZv8YinvgykSeorXSU,216
15
12
  stjames/method.py,sha256=8Cj0JYGMEaS_Cetfz8Wcu6-BZAv1SejRSagMgkKaXs0,4469
16
13
  stjames/mode.py,sha256=xw46Cc7f3eTS8i35qECi-8DocAlANhayK3w4akD4HBU,496
@@ -19,10 +16,10 @@ stjames/opt_settings.py,sha256=LEwGXUEKq5TfU5rr60Z4QQBhCqiw1Ch5w0M_lXawWo8,642
19
16
  stjames/pdb.py,sha256=6ayVUUdTufkXs_nfpRQuT1yGvymuyICB4L5Wh55OsaA,26507
20
17
  stjames/periodic_cell.py,sha256=eV_mArsY_MPEFSrFEsTC-CyCc6V8ITAXdk7yhjjNI7M,1080
21
18
  stjames/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- stjames/scf_settings.py,sha256=WotVgVrayQ_8PUHP39zVtG7iLT9PV41lpzruttFACP8,2356
23
- stjames/settings.py,sha256=NrNtHq-78BNp4RMP0tsABv4BjS5EscANakCyRdImI-A,8967
19
+ stjames/scf_settings.py,sha256=ecEVP3aKArNorpbP0mapnbc-EMjjzx4jeVW6q9tvqsw,436
20
+ stjames/settings.py,sha256=qZ3yhuMIQNiLs8Z-uEyVReSg2IQAjnDzQ6euHHqE6xI,6128
24
21
  stjames/solvent.py,sha256=u037tmu-9oa21s-WEDZ7VC7nuNVjkqR2ML4JWjWSME4,1158
25
- stjames/status.py,sha256=0mOeF9CoW2gGMfOkAlxTOL32jXNdJ0cU1-Xwo9DCxUc,455
22
+ stjames/status.py,sha256=KQHDqWSd4kBLow23YLcfOkFdtqN61RFZI-jf2zANWRY,501
26
23
  stjames/task.py,sha256=OLINRqe66o7t8arffilwmggrF_7TH0L79u6DhGruxV8,329
27
24
  stjames/thermochem_settings.py,sha256=ZTLz31v8Ltutde5Nfm0vH5YahWjcfFWfr_R856KffxE,517
28
25
  stjames/types.py,sha256=Fco-Lw8DYvUhbSvOjYZHaE_AaMyFNdWLUjNvb5aTAzw,4498
@@ -38,7 +35,7 @@ stjames/data/isotopes.json,sha256=5ba8QnLrHD_Ypv2xekv2cIRwYrX3MQ19-1FOFtt0RuU,83
38
35
  stjames/data/nist_isotopes.json,sha256=d5DNk1dX0iB1waEYIRR6JMHuA7AuYwSBEgBvb4EKyhM,14300
39
36
  stjames/data/read_nist_isotopes.py,sha256=y10FNjW43QpC45qib7VHsIghEwT7GG5rsNwHdc9osRI,3309
40
37
  stjames/data/symbol_element.json,sha256=vl_buFusTqBd-muYQtMLtTDLy2OtBI6KkBeqkaWRQrg,1186
41
- stjames/workflows/__init__.py,sha256=S5Z8bOWvvh9-TYV2VgfSpfvvfN1ceShTo5Dro5tmlP0,2796
38
+ stjames/workflows/__init__.py,sha256=wGTCSEvGmLVG-dnkylVsKq7_27n8gQlFfsJiX9RN33w,2890
42
39
  stjames/workflows/admet.py,sha256=h8ph6oeRCxU3-_jqRRWPg3RZcheu9JzCHiWqSC9VYKY,1296
43
40
  stjames/workflows/basic_calculation.py,sha256=ZX3KwhfyyCTjc2ougQIL4If7gtwZP9WjqpL45mBquW0,573
44
41
  stjames/workflows/bde.py,sha256=g_In-caftXiimrhfdptHjpfrYQUs3vF58qYmRnaTN8g,10825
@@ -49,22 +46,23 @@ stjames/workflows/docking.py,sha256=CgpLjMfpPka1fcg0VJPeyJCOnZjnJTrgfNeMAKiX4zM,
49
46
  stjames/workflows/electronic_properties.py,sha256=GT3-NC7w-dbcOJ-3AzJ7LgzH6frTbiH2Iyb9BCa-SvY,4112
50
47
  stjames/workflows/fukui.py,sha256=T6TDg-lcE-sfTDVpa3KFBenLe7PGUO2QrQ2jNuw_iiU,1756
51
48
  stjames/workflows/hydrogen_bond_basicity.py,sha256=q9eXty68ZyCmrB6G_8bfeOT8Ui_IQquRPu6z-3rNreQ,1589
52
- stjames/workflows/ion_mobility.py,sha256=HbO_222pjiG4YeJ70kYtQJvXQJieDSMAU5y26vIx1vI,1316
49
+ stjames/workflows/ion_mobility.py,sha256=rvvAt4ZD-Npl0tHL7TEuaS3XKjHiMkSZVzyJoivdyps,1665
53
50
  stjames/workflows/irc.py,sha256=ZP7icylW8rgo_Uh7h3bmyumn0ru1IyF-61nP5Jnmq3M,3402
54
51
  stjames/workflows/macropka.py,sha256=KRIyk4gsSYL3eqyzCDndStGLwjWSo60cgCAzvAoD1Nk,3754
55
52
  stjames/workflows/molecular_dynamics.py,sha256=kxugE73Ntzpj-xpJSoQ1EwGzXXdvi_NTyeP4913EVwE,3173
56
53
  stjames/workflows/multistage_opt.py,sha256=SpbA8hNvktnlLS7C-9mBNGluBSrdVS8ygHl1C4TzWcI,16499
54
+ stjames/workflows/nmr.py,sha256=mSmBl_kp5sWKExO-2xxfcqGtf-cot3YTcGpzBfoh68g,2023
57
55
  stjames/workflows/pka.py,sha256=j3vBh2YM3nJzJ1XJKPsmYahRCeaU9n3P-G-u9_moaFw,2065
58
56
  stjames/workflows/pose_analysis_md.py,sha256=ES0XlzaLpTjhLrNvcB0zFZa1b1ZHXekN72EbLsx0Skw,4723
59
- stjames/workflows/protein_cofolding.py,sha256=_05DCzzKGZFtns9HARAMjcWxVrJU9DPb3VNVWSgwWR8,2173
57
+ stjames/workflows/protein_cofolding.py,sha256=6WWbVOGzFjIRgQLMmMVODfIxo1jYFmRS1xnJmN0kOBw,3016
60
58
  stjames/workflows/redox_potential.py,sha256=7S18t9Y3eynSnA3lZbRlvLfdbgeBopdiigLzt1zxg5c,3871
61
59
  stjames/workflows/scan.py,sha256=DXQBpa2t2PowAtOwmdgpxaSLq--fEShljzAGSb8Nf5U,2993
62
60
  stjames/workflows/solubility.py,sha256=kGfVyPPGDLRpf2j6dSY7woCkfsoXSbUzdSImA4mcMpw,1898
63
61
  stjames/workflows/spin_states.py,sha256=0degmE-frovgoXweshZyjfjqL7nkbaFoO9YoJhvQnaI,4748
64
62
  stjames/workflows/tautomer.py,sha256=7eYKziGPg8Km6lfowTzSkgJfJ4SHUPrAmnTf8Bi-SB0,1164
65
63
  stjames/workflows/workflow.py,sha256=OE05pt2ZOd8TzTOlBngXCVg9wv_553ZR60VNRPlq0f8,1953
66
- stjames-0.0.93.dist-info/licenses/LICENSE,sha256=i7ehYBS-6gGmbTcgU4mgk28pyOx2kScJ0kcx8n7bWLM,1084
67
- stjames-0.0.93.dist-info/METADATA,sha256=45Vdq_ji_cnZN3uRObImOTBgOsc9lcVCJOTWVms8xjY,1724
68
- stjames-0.0.93.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
69
- stjames-0.0.93.dist-info/top_level.txt,sha256=FYCwxl6quhYOAgG-mnPQcCK8vsVM7B8rIUrO-WrQ_PI,8
70
- stjames-0.0.93.dist-info/RECORD,,
64
+ stjames-0.0.95.dist-info/licenses/LICENSE,sha256=i7ehYBS-6gGmbTcgU4mgk28pyOx2kScJ0kcx8n7bWLM,1084
65
+ stjames-0.0.95.dist-info/METADATA,sha256=q5rJgbtmQrLOVntdIyE6pAkA3LPaKAmLyCrqZ3FUCkI,1724
66
+ stjames-0.0.95.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
67
+ stjames-0.0.95.dist-info/top_level.txt,sha256=FYCwxl6quhYOAgG-mnPQcCK8vsVM7B8rIUrO-WrQ_PI,8
68
+ stjames-0.0.95.dist-info/RECORD,,
stjames/diis_settings.py DELETED
@@ -1,23 +0,0 @@
1
- import pydantic
2
-
3
- from .base import Base, LowercaseStrEnum
4
-
5
-
6
- class DIISStrategy(LowercaseStrEnum):
7
- # regular Pulay DIIS
8
- DIIS = "diis"
9
-
10
- # Hu/Yang JCP 2010 - ADIIS
11
- ADIIS = "adiis"
12
-
13
- # first ADIIS, then DIIS
14
- ADIIS_DIIS = "adiis_diis"
15
-
16
-
17
- class DIISSettings(Base):
18
- strategy: DIISStrategy = DIISStrategy.ADIIS_DIIS
19
- subspace_size: pydantic.PositiveInt = 12
20
-
21
- # if it's a hybrid strategy, where do we transition?
22
- adiis_diis_blend_start: pydantic.PositiveFloat = 1e-1
23
- adiis_diis_blend_stop: pydantic.PositiveFloat = 1e-4
stjames/grid_settings.py DELETED
@@ -1,27 +0,0 @@
1
- import pydantic
2
-
3
- from .base import Base, LowercaseStrEnum
4
-
5
-
6
- class RadialGridType(LowercaseStrEnum):
7
- """What sort of radial grid (only one option for now)"""
8
-
9
- KRACK_KOSTER = "krack_koster"
10
- LMG = "lmg"
11
-
12
-
13
- class GridSettings(Base):
14
- radial_grid_type: RadialGridType = RadialGridType.LMG
15
- angular_num_points: pydantic.PositiveInt = 434
16
-
17
- weight_cutoff: pydantic.PositiveFloat = 1e-11
18
-
19
- # for LMG
20
- radial_precision: pydantic.PositiveFloat = 1e-11
21
-
22
- # for other schemes, like KK
23
- radial_num_points: pydantic.PositiveInt = 75
24
-
25
- # pruning?
26
- prune: bool = True
27
- min_angular_points: pydantic.PositiveInt = 50
stjames/int_settings.py DELETED
@@ -1,31 +0,0 @@
1
- import pydantic
2
-
3
- from .base import Base, LowercaseStrEnum
4
-
5
-
6
- class ERIStrategy(LowercaseStrEnum):
7
- # direct SCF, as per Almlof/Faegri/Korsell
8
- DIRECT = "direct"
9
-
10
- # Raffinetti-style supermatrix
11
- SUPERMATRIX = "supermatrix"
12
-
13
- # let the software choose between direct and supermatrix based on size
14
- AUTO = "auto"
15
-
16
- # resolution of the identity for J and K
17
- RIJK = "rijk"
18
-
19
-
20
- class IntSettings(Base):
21
- strategy: ERIStrategy = ERIStrategy.AUTO
22
-
23
- # these will get overwritten by ``mode`` anyway, for the most part
24
- eri_threshold: pydantic.PositiveFloat = 1e-9
25
- csam_multiplier: pydantic.PositiveFloat = pydantic.Field(default=1, ge=1)
26
- pair_overlap_threshold: pydantic.PositiveFloat = 1e-10
27
-
28
- @property
29
- def resolution_of_the_identity(self) -> bool:
30
- """Abstracting in case we add RIJCOSX, etc later"""
31
- return self.strategy == ERIStrategy.RIJK