Phase 5 – Rules shared by the dialogs and the builder (2026-09-30, in progress)#
Q2 decided yes (Paul: “start phase 5”).
In seamm (9ce27eb, d5be0d6)#
seamm.Parameters gains the rules a step’s dialog and the flowchart builder share:
applies(key, values)– whether a parameter has any effect given the others. The default follows"applies_when"in the parameter’s definition: a mapping from other parameters to a value, a list of values, or{"not": value(s)}. Conditions chain (a parameter applies only if those it names do), and a variable or expression counts as met, since its value is known only when the flowchart runs.choices(key, values)– narrowed valid choices, or None (override).implied(values)– values that others imply (override).problems(values)– combinations that cannot work; by default, values outside narrowed choices (extend in overrides).not_applicable_reason(key, values)– why a parameter does not apply, following the chain of conditions by default (“it needs ‘method’, which does not apply (it applies when ‘use model chemistry’ is ‘no’)”); override for plug-in rules.describe_condition(key),applicable(values),current_values().
values is any {name: value} – the dialog passes its current widget values, the
builder the parameters’ own.
Used by: the builder (refuses a setting that has no effect, with the reason; fills in
implied values, refusing a contradiction; refuses problems; restores the step when it
refuses), spec.reduce/show (leaves out settings that do not apply),
describe (“applies when …”), and edit.validate (reports problems, ignores
values that do not apply).
Release note: a parameter definition containing "applies_when" is rejected by
older seamm (Parameter.update refuses unknown keys), so a plug-in using it must
require the new seamm, and seamm must be released first.
ORCA (orca_step 97a07fe)#
EnergyParametersdeclaresapplies_whenfor method, functional type, functional, basis, basis source, basis-set extrapolation, extrapolation family, the checkpoint name and the two initial-guess sub-controls, and overrides the rules for the rest: no extrapolation for F12 methods or for steps that need a gradient or Hessian (extrapolation = Falseon Optimization, Frequencies, BSSE); the extrapolation replaces the basis and its source; F12 methods take only the F12 bases, from ORCA itself; the functionals are those of the functional type, and a functional implies its type. Frequencies and BSSE list the Energy settings they do not use (unused); BSSE’s fragment atoms apply only for specified fragments.The Energy dialog, and so its sub-steps, asks these rules what to show and offer; indentation and order stay in the dialog. The sub-steps’
_show_cbs()overrides are gone.tests/test_gui.pylays out every sub-step for every choice that drives the layout and checks both ways that exactly the controls that apply are shown.Checked with the builder: the functional refused while the model chemistry is used; a meta-GGA functional sets its type; an F12 method gets cc-pVTZ-F12 from ORCA, and a non-F12 basis with it is refused; extrapolation is accepted in Energy and refused in Optimization with the reason; polarizability refused in Frequencies; fragment atoms only with specified fragments.
Model Chemistry (model_chemistry_step ec14597)#
Its dialog is a picker over what the installed programs offer, stored as one string, so
its rule is a check: the model chemistry must be offered (any basis). Discovery, the
basis-free match and the message are now module functions used by both the run-time
check and ModelChemistryParameters.problems(); an unavailable model chemistry is
refused when the flowchart is built. A variable ($mc) passes.
Checked in ~/SEAMM_DEV#
orca_step and model_chemistry_step installed editable (their checkouts match the
installed releases); job 3984, a spec-built ORCA B3LYP/def2-SVP energy of water, ran
through the JobServer (-76.3197 E_h). Tests: seamm 205, orca_step 152 (+4 dialog; the
one failure, test_frequencies_ir_spectrum_graph, predates this work: a
line.graph_template lookup), model_chemistry_step 99.
Gaussian, Psi4, MOPAC and LAMMPS (2026-09-30)#
Done in parallel, each following the ORCA implementation; each is committed locally
on its dev and installed editable in ~/SEAMM_DEV:
Plug-in |
Commit |
Rules |
Tests |
|---|---|---|---|
gaussian_step |
397bd97, f1d1d3a |
level/method/functional, DFT-only (functional, grid, dispersion), dispersion
narrowed to the functional’s list, freeze-cores by method, basis only for
methods with one, Optimization/Thermodynamics/Stability specifics, |
34 (17 new) |
psi4_step |
78c5330 |
level/method/functional, freeze-cores by method, dispersion narrowed and implied, convergence sub-switches, Thermochemistry’s “use existing parameters”, BSSE fragment atoms |
29 (15 new) |
mopac_step |
8ab92e9 |
all simple conditions: HF-only and CI-only settings, MOZYME, COSMO, convergence, optimization method, lattice optimization |
26 (13 new) |
lammps_step |
72035b0 |
Initialization (k-space, charges), Velocities, Minimization and NPT stresses
(one |
104 (+3 skipped; 39 new) |
Each dialog now asks the rules what to show (and, for Gaussian and Psi4, what to offer and set); a dialog test lays out every sub-step for every layout-driving choice and checks both ways. Layout logic that duplicated conditions was removed (LAMMPS: about 500 lines of stress-table branches replaced by one helper; Gaussian Stability’s copy of the calculation layout replaced by an override). One deliberate change everywhere: when a driving choice is a variable, the controls depending on it are shown (the old dialogs hid some of them, so they could not be set at all).
Dialog bugs fixed on the way: Gaussian’s dispersion list did not follow the
functional, input only did not hide file handling until reopened, the
dispersion choices had a typo (DG2) and lacked GD2/PFD, and a built
Stability flowchart could run the wrong method; Psi4’s dispersion update raised
TypeError (value used as a method) and a typed method name raised KeyError;
LAMMPS’s Heat Flux dialog could not open (KeyError), plus stress-table and label
fixes.
Core fixes from their reports (seamm e862b43, 4b364c6, b4fbc40): “is neither A
nor B” for negated lists; the builder restores only values when refusing
(from_dict lost plug-ins’ __init__ changes, e.g. Gaussian Stability’s narrowed
methods); Parameter.__repr__ returned a non-string; validate warns about empty
sub-steps only for code steps (Dimer Builder’s are optional); and a plug-in’s
references.bib is found for an editable install too (MOPAC job 3985 failed with
KeyError: 'Stewart_2012' until then; job 3986 then finished).
Checked in ~/SEAMM_DEV: the 30 most recent job flowcharts all validate; the
Testing flowcharts show only old problems (8 with ORCA’s renamed BSSE parameter
fragment A atoms, one stale CCSD(T)-F12D; both since fixed); MOPAC job 3986 (PM7, COSMO
water, built from a spec) ran.
Run-time bugs fixed (2026-09-30)#
Committed locally on each dev; not pushed.
LAMMPS (7950681): an explicit k-space method on a charged system raised KeyError (
P["kspace_style"]); the pair style andkspace_styleline now come from a testableexplicit_kspace(). Minimization’sSxywas read fromSxz. NPT’s six damping times were converted as pressures (now times), the “y and z” branch setSzz1 = Szz1(nowSyy1), andmtkandnresetare now written to thefix nptline. NVE’srun_control/maximum_time/control_propertiesare marked not implemented (not_implemented), so the builder refuses them with that reason, rather than being implemented. Also: Velocities’remove_momentumdefault ended in a period, so was not one of its own choices; old flowcharts’ spelling is translated.Psi4 (293719a):
energy.get_methodraised KeyError when the functional was given by its short name (the dispersion check looked it up by that name).ORCA (0170ba3): old flowcharts’
fragment A atomsbecomesfragment atoms: "X; rest"(a last grouprest= the remaining atoms) andauto (2 molecules)becomesauto (molecules); the methodCCSD(T)-F12D, renamedCCSD(T)-F12D/RIin da696be, is translated too.seamm (b56a2c9):
problems()no longer flags a variable inside a named value (Model Chemistry’s basis{'name': '$basis'}).
After these, all 58 Testing and recent-job flowcharts in the sweep validate.
LAMMPS settings hidden but used at run time (2026-10-01)#
Paul chose all four suggestions (lammps_step 9929131):
kspace_smallqapplies whenever there is a k-space method (it always sets which atoms count as charged; “automatic” may usemsm/cgwith it).The QEq convergence and iterations apply to “default for forcefield” too.
Pdampand the stress damping times apply to the Berendsen barostat too (press/berendsenrequires them; the default 1000 fs was always used).allow shearapplies only to a solid with the Nose-Hoover barostat (press/berendsencannot control a triclinic cell, per the LAMMPS docs), and is ignored at run time where it does not apply.
Found by running the check job in ~/SEAMM_DEV:
LAMMPS writes one box for all the steps of a LAMMPS step, so a Berendsen NPT followed by a step allowing shear (or on a non-orthorhombic cell) failed in LAMMPS (“Cannot use fix press/berendsen with triclinic box”). This is now caught before running, with a clear message (job 3988). A builder check would need to look across sub-steps and at the structure, so it is left to run time.
Graph templates were not found for an editable seamm (seamm 560429e), the cause of ORCA’s long-failing
test_frequencies_ir_spectrum_graphtoo.Job 3991 (Berendsen with
Pdamp500 fs; then, in its own LAMMPS step, Nose-Hoover with shear) finished.When LAMMPS itself failed (e.g. “Lost atoms”, job 3989), lammps_step did not notice and failed later in the trajectory analysis with an unrelated
IndexError. It now finds theERRORinlog.lammps(or the screen output, for other processes) and stops with the sub-step, LAMMPS’s message, the last command, advice for common errors and where the log is; nosuccess.datis written (lammps_step bda3a70, job 3993).
Smaller gaps fixed (2026-10-01)#
The last of the agents’ findings, each checked with a job in ~/SEAMM_DEV:
Psi4 (6d9e07b): BSSE’s 17 ignored Energy settings are
unused(hidden, refused); Thermochemistry’s plots apply only with its own settings (the Output tab hides); right after Initialization, “use existing parameters” falls back to its own settings at run time, as the dialog does (job 3995). The builder still needsuse existing parameters: noto set Energy settings there.MOPAC (f6e5c81):
structureis shown; an explicitinitialafter the first sub-step crashed (UnboundLocalError); Force Constants with MOZYME raised NotImplementedError – MOPAC’s FORCE works with MOZYME (checked directly), so only the main input is used andstructure/MOZYME follow-upare unused there, and Energy’s analysis no longer expects a follow-up that does not apply (job 3994 failed on that, 3997 finished). Also["MOZYME"] == "always"(always False) and the “will be che Hartree-Fock” description.Gaussian (bfee70f): the
system nameedit had been applied toconfiguration name(choice listed twice, “keep current name” lost); oldDG2is translated toGD2(job 3996).seamm (1ebcff6):
Parameters.from_dictkeeps__init__edits. (packmol_step’s 11 failing output comparisons are a pre-existing number-format difference, the same with the old code.)