quantui 0.8.2__tar.gz → 0.10.0__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.
- {quantui-0.8.2 → quantui-0.10.0}/CHANGELOG.md +252 -1
- {quantui-0.8.2/quantui.egg-info → quantui-0.10.0}/PKG-INFO +131 -21
- {quantui-0.8.2 → quantui-0.10.0}/README.md +116 -20
- {quantui-0.8.2 → quantui-0.10.0}/pyproject.toml +66 -5
- {quantui-0.8.2 → quantui-0.10.0}/quantui/__init__.py +1 -1
- {quantui-0.8.2 → quantui-0.10.0}/quantui/app.py +632 -53
- {quantui-0.8.2 → quantui-0.10.0}/quantui/app_analysis.py +46 -1
- {quantui-0.8.2 → quantui-0.10.0}/quantui/app_builders.py +367 -15
- {quantui-0.8.2 → quantui-0.10.0}/quantui/app_exports.py +56 -8
- {quantui-0.8.2 → quantui-0.10.0}/quantui/app_formatters.py +392 -21
- {quantui-0.8.2 → quantui-0.10.0}/quantui/app_runflow.py +177 -18
- {quantui-0.8.2 → quantui-0.10.0}/quantui/app_slurm.py +183 -14
- quantui-0.10.0/quantui/app_structure_edit.py +404 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/app_visualization.py +789 -25
- {quantui-0.8.2 → quantui-0.10.0}/quantui/app_xyz_input.py +57 -0
- quantui-0.10.0/quantui/backends/batch_chain.py +103 -0
- quantui-0.10.0/quantui/backends/batch_input.py +236 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/backends/cluster_config.py +63 -6
- {quantui-0.8.2 → quantui-0.10.0}/quantui/backends/dispatch.py +22 -8
- {quantui-0.8.2 → quantui-0.10.0}/quantui/backends/registry.py +140 -4
- {quantui-0.8.2 → quantui-0.10.0}/quantui/backends/slurm.py +221 -51
- {quantui-0.8.2 → quantui-0.10.0}/quantui/backends/slurm_ingest.py +157 -12
- quantui-0.10.0/quantui/backends/slurm_utils.py +246 -0
- quantui-0.10.0/quantui/backends/worker.py +949 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/backends/worker_payload.py +117 -1
- quantui-0.10.0/quantui/batch_launcher.py +153 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/calculator.py +116 -1
- {quantui-0.8.2 → quantui-0.10.0}/quantui/checkpoint.py +162 -1
- quantui-0.10.0/quantui/cli.py +781 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/config.py +221 -22
- {quantui-0.8.2 → quantui-0.10.0}/quantui/connectivity.py +40 -7
- quantui-0.10.0/quantui/data/launcher/quantui_batch.py +1648 -0
- quantui-0.10.0/quantui/downloads.py +90 -0
- quantui-0.10.0/quantui/engines/__init__.py +150 -0
- quantui-0.10.0/quantui/engines/base.py +194 -0
- quantui-0.10.0/quantui/engines/pyfock_engine.py +402 -0
- quantui-0.10.0/quantui/engines/pyscf_engine.py +165 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/freq_calc.py +425 -147
- quantui-0.10.0/quantui/freq_displacement_ids.py +79 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/freq_ir_workers.py +128 -3
- {quantui-0.8.2 → quantui-0.10.0}/quantui/freq_raman_workers.py +52 -5
- {quantui-0.8.2 → quantui-0.10.0}/quantui/help_content.py +141 -3
- {quantui-0.8.2 → quantui-0.10.0}/quantui/ir_plot.py +59 -8
- {quantui-0.8.2 → quantui-0.10.0}/quantui/log_utils.py +9 -4
- {quantui-0.8.2 → quantui-0.10.0}/quantui/molecule.py +38 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/nmr_calc.py +18 -2
- {quantui-0.8.2 → quantui-0.10.0}/quantui/optimizer.py +241 -26
- {quantui-0.8.2 → quantui-0.10.0}/quantui/orbital_visualization.py +634 -24
- {quantui-0.8.2 → quantui-0.10.0}/quantui/pes_scan.py +66 -2
- quantui-0.10.0/quantui/pyfock_gpu.py +118 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/raman_calc.py +108 -29
- {quantui-0.8.2 → quantui-0.10.0}/quantui/raman_plot.py +16 -5
- {quantui-0.8.2 → quantui-0.10.0}/quantui/reorganization_energy.py +128 -8
- {quantui-0.8.2 → quantui-0.10.0}/quantui/results_storage.py +100 -5
- quantui-0.10.0/quantui/scf_robust.py +167 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/session_calc.py +458 -166
- quantui-0.10.0/quantui/structure_edit.py +272 -0
- quantui-0.10.0/quantui/structure_upload.py +234 -0
- quantui-0.10.0/quantui/symmetry.py +399 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/tddft_calc.py +188 -11
- {quantui-0.8.2 → quantui-0.10.0}/quantui/theme.py +4 -0
- quantui-0.10.0/quantui/ts_search.py +363 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/user_settings.py +16 -0
- {quantui-0.8.2 → quantui-0.10.0/quantui.egg-info}/PKG-INFO +131 -21
- {quantui-0.8.2 → quantui-0.10.0}/quantui.egg-info/SOURCES.txt +18 -1
- {quantui-0.8.2 → quantui-0.10.0}/quantui.egg-info/requires.txt +18 -0
- quantui-0.8.2/quantui/backends/slurm_utils.py +0 -184
- quantui-0.8.2/quantui/backends/worker.py +0 -479
- quantui-0.8.2/quantui/cli.py +0 -353
- {quantui-0.8.2 → quantui-0.10.0}/LICENSE +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/MANIFEST.in +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/SECURITY.md +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/analytics.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/app_history.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/app_launcher.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/app_measurement.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/app_pes_pick.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/ase_bridge.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/backends/__init__.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/backends/base.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/backends/cluster_security.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/backends/local.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/backends/slurm_errors.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/benchmarks.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/c_stderr.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/cactus.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/calc_log.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/cancellation.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/comparison.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/data/js/3Dmol-min.js +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/data/js/3Dmol-min.js.LICENSE.txt +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/data/library/library.sqlite +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/data/manifests/bulk_qm9.json +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/data/manifests/curated.json +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/data/manifests/inorganic.json +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/data/manifests/presets.json +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/density_fitting.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/descriptor_cards.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/estimator_eval.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/gpu_offload.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/inorganic_guards.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/issue_tracker.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/live_log.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/measurement.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/molecule_library.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/mulliken_plot.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/nmr_plot.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/pes_scan_ui.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/populations_overlay.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/preopt.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/progress.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/pubchem.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/security.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/spin_presets.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/structure_providers.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/utils.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/vib_cache.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/visualization_py3dmol.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/viz_assets.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/viz_backend_router.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui/xyz_input.py +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui.egg-info/dependency_links.txt +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui.egg-info/entry_points.txt +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/quantui.egg-info/top_level.txt +0 -0
- {quantui-0.8.2 → quantui-0.10.0}/setup.cfg +0 -0
|
@@ -7,6 +7,251 @@ and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.ht
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.10.0] - 2026-10-03
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Upload structure files** — new **Upload File** tab (Calculate → Molecule
|
|
15
|
+
Input) and **Load as molecule** on the Files tab: XYZ (last frame), MOL,
|
|
16
|
+
SDF, MOL2, PDB, CIF, Gaussian `.gjf`/`.com` and `.log`/`.out`. Charge and
|
|
17
|
+
multiplicity are read from the file when it records them; 2-D MOL/SDF
|
|
18
|
+
drawings are embedded in 3-D.
|
|
19
|
+
- **Download to your computer** — every export (structure files, script,
|
|
20
|
+
bundle, cubes, PNGs, plots, CSV, animations) now offers a browser download
|
|
21
|
+
link, and the Files tab has a **Download** button. Works on remote
|
|
22
|
+
Voilà/OnDemand sessions; files over 25 MB get a notice instead.
|
|
23
|
+
- **Implicit solvent for optimizations, frequencies and TD-DFT** — Geometry
|
|
24
|
+
Opt is solvated at every step; Frequency uses PySCF's PCM Hessian and
|
|
25
|
+
solvated IR displacements (Raman is skipped in solvent); TD-DFT uses an
|
|
26
|
+
equilibrium ground state and non-equilibrium excitations with each
|
|
27
|
+
solvent's own optical dielectric. Also in SLURM batch jobs.
|
|
28
|
+
- **Point groups and orbital symmetry labels** — the molecule summary and
|
|
29
|
+
result cards show the point group (0.01 Å tolerance, with a "nearly X"
|
|
30
|
+
hint); the orbital energy diagram labels orbitals textbook-style
|
|
31
|
+
(1a₁, 2a₁, 1b₂, 3a₁, 1b₁ for water; σ/π for linear molecules; C₃ᵥ labels
|
|
32
|
+
for NH₃).
|
|
33
|
+
- **Density, spin-density and ESP surfaces** — the Isosurface panel draws the
|
|
34
|
+
electron density, the spin density (α − β) and the electrostatic potential
|
|
35
|
+
mapped on the density surface (red = negative, blue = positive, with a
|
|
36
|
+
colour bar), and α/β orbitals for unrestricted results.
|
|
37
|
+
- **Vibration viewer** — displacement arrows, an amplitude slider and a table
|
|
38
|
+
of every mode with IR intensity and Raman activity.
|
|
39
|
+
- **Thermochemistry at any temperature and pressure** — recomputed from the
|
|
40
|
+
stored frequencies (no new calculation), with U, H, S, G, Cv, Cp and the
|
|
41
|
+
rotational symmetry number.
|
|
42
|
+
- **Edit Structure** — set a bond length, angle or dihedral to a value,
|
|
43
|
+
delete atoms, add a hydrogen, change an element, undo; pick atoms by
|
|
44
|
+
clicking the viewer. **Freeze atoms** for a constrained Geometry Opt.
|
|
45
|
+
- **Orbital gallery** — the Isosurface panel's **Orbital gallery** button
|
|
46
|
+
shows the orbitals around the HOMO–LUMO gap (2, 3 or 4 on each side) as
|
|
47
|
+
small viewers that rotate together, each labelled with its symmetry and
|
|
48
|
+
energy; follows the α/β choice for unrestricted results.
|
|
49
|
+
- **Transition State calc type** — searches for the saddle point near the
|
|
50
|
+
input geometry with Sella (starting from the analytic Hessian, with the
|
|
51
|
+
same PySCF settings as an optimization: PCM, density fitting, D3, GPU, SCF
|
|
52
|
+
rescue), then runs a frequency calculation and says plainly whether it
|
|
53
|
+
found a transition state (exactly one imaginary frequency), a minimum, or
|
|
54
|
+
a higher-order saddle point. Results open on the Vibrational panel to
|
|
55
|
+
animate the imaginary mode, plus IR, search trajectory, orbitals and
|
|
56
|
+
populations. Needs the optional extra: `pip install "quantui[ts]"`.
|
|
57
|
+
Local runs only for now (not SLURM batch).
|
|
58
|
+
- **Populations and Isosurface for Frequency and TD-DFT results** — both
|
|
59
|
+
record the reference SCF's Mulliken charges, dipole and orbitals (both spin
|
|
60
|
+
channels for UHF/UKS), so the Populations, Isosurface and (TD-DFT) Energies
|
|
61
|
+
panels fill for them too, locally and from SLURM. Frequency Molden files
|
|
62
|
+
now include the orbitals.
|
|
63
|
+
- **⟨S²⟩ for open-shell results** — single points record and show ⟨S²⟩
|
|
64
|
+
next to the ideal S(S+1), flagged when off by more than 10 % (spin
|
|
65
|
+
contamination). Reorganization-energy results record it at all four
|
|
66
|
+
points of each channel (`s2_*` fields in `result.json`), so a
|
|
67
|
+
spin-contaminated ion SCF can be filtered out of a λ dataset.
|
|
68
|
+
- **Submit from a login node with `quantui-batch`** — a standard-library
|
|
69
|
+
Python 3.6+ launcher for SSH users. It never starts the image or imports
|
|
70
|
+
QuantUI on the login node: it writes the same job folder as
|
|
71
|
+
`SlurmBackend.prepare()` (constants copied from QuantUI at install time,
|
|
72
|
+
logic held equal by tests) and calls `sbatch`; the calculation runs in the
|
|
73
|
+
image on a compute node. Install once per image, e.g.
|
|
74
|
+
`apptainer exec IMAGE quantui install-launcher /shared/bin`.
|
|
75
|
+
`quantui-batch submit mol.xyz --calc frequency --method B3LYP --basis def2-SVP`;
|
|
76
|
+
`status`, `log`, `rerun` (e.g. `--mem=64G` after running out of memory),
|
|
77
|
+
`cancel`, `estimate` and `path` follow it. At most
|
|
78
|
+
`QUANTUI_MAX_CONCURRENT_JOBS` (default 2) QuantUI jobs may be queued or
|
|
79
|
+
running per user, counted from the real queue.
|
|
80
|
+
- **`quantui-batch` workflow commands** — `--preset NAME` (shared
|
|
81
|
+
`presets.json` beside the launcher, plus per-user presets); `--from JOB`
|
|
82
|
+
starts from another job's optimized geometry, waiting on it with an
|
|
83
|
+
`afterok` dependency if it is still running (the worker loads the geometry
|
|
84
|
+
at run time, `quantui/backends/batch_chain.py`); `--queue-rest` lines jobs
|
|
85
|
+
up behind the user's running ones instead of refusing them; a duplicate
|
|
86
|
+
guard (`--again` to override); `rerun --more-memory` / `--more-time`;
|
|
87
|
+
`results JOB` (energy, convergence, imaginary modes, strongest IR bands,
|
|
88
|
+
excited states, shifts); `presets`; and `check` (python, image, Slurm
|
|
89
|
+
commands, job folders and free space, presets).
|
|
90
|
+
- **Every QuantUI batch job is tagged `#SBATCH --comment=quantui`**, so an
|
|
91
|
+
operator can list all of them with `squeue -o "%k"`.
|
|
92
|
+
- **`quantui submit` accepts `.xyz` files** with `--calc`, `--method`,
|
|
93
|
+
`--basis`, `--charge`, `--mult`, `--solvent`, `--preopt` and repeatable
|
|
94
|
+
`--option KEY=VALUE`; an impossible charge/multiplicity is refused before
|
|
95
|
+
anything is queued. The same flags override a request JSON's values.
|
|
96
|
+
- **`quantui submit --prepare-only`** writes the job folder (`request.json` +
|
|
97
|
+
`submit.slurm`) without calling `sbatch` and prints the script path. Its
|
|
98
|
+
registry record has the new non-active status `prepared`.
|
|
99
|
+
|
|
100
|
+
### Changed
|
|
101
|
+
|
|
102
|
+
- **The GPU image builds from the working tree, like the CPU image** —
|
|
103
|
+
`quantui-gpu.def` copies the same `%files` allowlist as `quantui.def` and
|
|
104
|
+
installs it editable, instead of a pinned PyPI release, so a GPU node runs
|
|
105
|
+
the code that was just tested. `build-gpu.sh` records the commit
|
|
106
|
+
(`git describe`) in the image's `QuantUICommit` label and
|
|
107
|
+
`/opt/build-info/quantui-commit.txt`; its `--version` flag is gone — check
|
|
108
|
+
out a release tag to build that release.
|
|
109
|
+
- **Finished batch attempts reach History when the app starts**, even where
|
|
110
|
+
SLURM is unavailable (e.g. an OnDemand session), so jobs submitted from a
|
|
111
|
+
terminal show up without opening the Cluster Jobs tab.
|
|
112
|
+
|
|
113
|
+
### Fixed
|
|
114
|
+
|
|
115
|
+
- **PBE-D3 now includes D3** — it needed `pyscf.dftd3`, which no QuantUI
|
|
116
|
+
environment installed, so PBE-D3 ran as plain PBE (with a warning). D3
|
|
117
|
+
(zero damping) is now applied through PySCF's built-in dispersion
|
|
118
|
+
(`pyscf-dispersion`, added to the `[pyscf]` extra, the conda environment
|
|
119
|
+
and the CPU image), including in gradients and Hessians.
|
|
120
|
+
- **Rotational symmetry number** — thermochemistry detected symmetry at
|
|
121
|
+
PySCF's strict tolerance, so slightly unsymmetric geometries (any
|
|
122
|
+
optimized water or ammonia) used σ = 1, overstating the entropy by R ln σ.
|
|
123
|
+
Symmetric molecules' S and G change.
|
|
124
|
+
- **`quantui submit --depends-on`** accepts a request id or a SLURM job id
|
|
125
|
+
and resolves it; it used to write the request id into
|
|
126
|
+
`--dependency=afterok:` and validate nothing.
|
|
127
|
+
- **"Geometry optimization before the calculation" on SLURM** — Single
|
|
128
|
+
Point and NMR batch jobs ignored the checkbox (the local run honoured it).
|
|
129
|
+
- **Mode-displaced Frequency seeds are re-optimized** — picking "displace
|
|
130
|
+
along mode" as the Frequency seed disabled the pre-optimization, so the
|
|
131
|
+
frequencies were computed at a geometry that is not a stationary point.
|
|
132
|
+
The checkbox is now ticked for that seed (left on, user can untick).
|
|
133
|
+
- **Reorganization Energy shows its optimizer settings** — the run used the
|
|
134
|
+
max-force and max-steps fields while they were hidden, so values left over
|
|
135
|
+
from Geometry Opt or PES Scan applied unseen.
|
|
136
|
+
- **No placeholder Raman spectrum** — when Raman activities were not
|
|
137
|
+
computed (PCM run, or `pyscf-properties` missing), the Raman panel drew
|
|
138
|
+
every mode at the same height. It now says why there is no spectrum.
|
|
139
|
+
- **Disconnected structures are flagged for every source** — the molecule
|
|
140
|
+
summary notes separate fragments for pasted, library, uploaded, edited and
|
|
141
|
+
History structures, not only Online Search results.
|
|
142
|
+
- **Pasting a multi-frame XYZ** says what it is and how to load it, instead
|
|
143
|
+
of "Line N: not enough values".
|
|
144
|
+
- **Export Script follows the calculation** — it used to write a gas-phase
|
|
145
|
+
single point whatever was set up. It now applies the selected PCM solvent
|
|
146
|
+
and density fitting, adds the Hessian + thermochemistry for Frequency and
|
|
147
|
+
the excited states (with the solvent's optical dielectric) for TD-DFT, and
|
|
148
|
+
says plainly when it covers only the SCF (Geometry Opt, NMR, PES Scan,
|
|
149
|
+
Reorganization Energy).
|
|
150
|
+
- **CPU image: NMR and analytical Raman** — the image installed QuantUI
|
|
151
|
+
without the `[pyscf]` extra, so `pyscf-properties` was missing. It now
|
|
152
|
+
installs the extra, and the build fails if `pyscf.prop.nmr` or
|
|
153
|
+
`pyscf.dispersion` cannot be imported.
|
|
154
|
+
- **Solvent names are case-insensitive**; an unknown solvent is an error.
|
|
155
|
+
A request with `"water"` used to run in the gas phase.
|
|
156
|
+
- **Export Script** writes into the result folder instead of the server's
|
|
157
|
+
working directory.
|
|
158
|
+
|
|
159
|
+
- **Solvated batch requests the worker cannot run are refused up front** —
|
|
160
|
+
`quantui submit` and `quantui-batch` reject an unknown solvent, and a
|
|
161
|
+
solvent on a calc type the batch worker runs gas-phase only (e.g. `nmr`),
|
|
162
|
+
instead of letting the job queue and then fail. The supported set now
|
|
163
|
+
lives in one place (`batch_input.SOLVENT_CALC_TYPES`).
|
|
164
|
+
- **SLURM memory estimate for transition-metal complexes** —
|
|
165
|
+
`estimate_slurm_resources()` used a short element table without Mn, Co,
|
|
166
|
+
Ni, Mo and most other metals, so a metal counted as 0 electrons and the
|
|
167
|
+
memory estimate came out low. It now uses the full table.
|
|
168
|
+
|
|
169
|
+
## [0.9.0] - 2026-09-26
|
|
170
|
+
|
|
171
|
+
### Added
|
|
172
|
+
|
|
173
|
+
- **SLURM job folders with per-attempt subfolders (M-JOBDIRS)** — each cluster
|
|
174
|
+
job gets a readable folder (`<formula>_<calc>_<method>_<basis>`, or the
|
|
175
|
+
optional **Job name** on the Calculate tab) that doubles as the SLURM job
|
|
176
|
+
name. Every run of its `submit.slurm` creates a new `attempt-NN_job<id>/`
|
|
177
|
+
subfolder, so **Resubmit** (new, Cluster Jobs tab) and a hand-run
|
|
178
|
+
`sbatch submit.slurm` never overwrite an earlier attempt. The job root is
|
|
179
|
+
configurable in **System Settings** (or `QUANTUI_STAGING_DIR`), for
|
|
180
|
+
clusters with small home quotas.
|
|
181
|
+
- **SLURM results marked in History** — entries show
|
|
182
|
+
`🖥 SLURM <job id>·a<attempt>` and the result card has a "Ran on" row with
|
|
183
|
+
the job folder. Hand-run attempts are added to History on the next Cluster
|
|
184
|
+
Jobs refresh; failed attempts stay in the job folder only.
|
|
185
|
+
- **GPU offload for geometry optimization** — gpu4pyscf offload now reaches
|
|
186
|
+
every SCF/gradient step of a geometry optimization, not just single points.
|
|
187
|
+
A separate, guarded CuPy GPU path for PyFock, GPU provenance
|
|
188
|
+
(`gpu_used` / `gpu_name`) on optimization results, and
|
|
189
|
+
`quantui gpu check --engine pyfock`.
|
|
190
|
+
- **PyFock backend (M-PYFOCK)** — Phase 1: normalized engine dispatch,
|
|
191
|
+
native-Windows PBE/def2 single points for neutral closed-shell molecules,
|
|
192
|
+
capability-driven calculation menus, engine provenance in logs and saved
|
|
193
|
+
results, a pinned `pyfock` install extra, and a Windows water parity gate
|
|
194
|
+
against PySCF; unsupported hybrids, ions, open-shell systems, solvent,
|
|
195
|
+
checkpoints and orbital analysis are rejected before compute. Phase 2:
|
|
196
|
+
geometry optimization via PyFock's ASE calculator with analytical
|
|
197
|
+
density-fitted gradients; results keep orbital arrays, Mulliken charges,
|
|
198
|
+
dipoles, and engine-native cube generation.
|
|
199
|
+
- **`quantui submit` CLI** — submit request JSON files to SLURM from a script
|
|
200
|
+
(with `--job-name`, `--dry-run`, resource and mail options); resource
|
|
201
|
+
estimates account for parallel IR/Raman workers.
|
|
202
|
+
- **Checkpoint/resume for batch and Frequency runs** — the SLURM batch worker
|
|
203
|
+
resumes Geometry Optimization, PES Scan and Frequency runs from their
|
|
204
|
+
checkpoints; Frequency (interactive and batch) banks each finished
|
|
205
|
+
displacement so a restart skips completed ones.
|
|
206
|
+
- **SCF rescue for hard open-shell cases (M-SCF-ROBUST)** — one shared
|
|
207
|
+
convergence-rescue helper at every SCF call site, with provenance lines in
|
|
208
|
+
the log.
|
|
209
|
+
- **RKS/UKS/RHF/UHF label** on every result card, live and saved.
|
|
210
|
+
|
|
211
|
+
### Changed
|
|
212
|
+
|
|
213
|
+
- **SLURM output layout** — new submissions use the job-folder layout above
|
|
214
|
+
instead of `~/.quantui/staging/<request_id>/`. Jobs submitted earlier keep
|
|
215
|
+
their old folders and still list, reconnect and ingest.
|
|
216
|
+
- **Unconverged results are no longer reported as converged** — CCSD/CCSD(T)
|
|
217
|
+
amplitudes, TD-DFT roots, frequency Hessians, and optimizer gradients from an
|
|
218
|
+
unconverged SCF are now flagged instead of shown as a clean result. Saved
|
|
219
|
+
cards name the step that failed rather than blaming the SCF.
|
|
220
|
+
- **Parallel IR/Raman worker pools** are sized from the SLURM/cgroup
|
|
221
|
+
allocation, not the node's full CPU count.
|
|
222
|
+
|
|
223
|
+
### Fixed
|
|
224
|
+
|
|
225
|
+
- **Thermochemistry** — entropy units no longer corrupt the Gibbs free energy;
|
|
226
|
+
thermochemistry is saved and shown again when a frequency result is
|
|
227
|
+
reopened from History.
|
|
228
|
+
- **Raman activities** — added the missing a₀³→ų polarizability conversion.
|
|
229
|
+
- **Functionals** — ωB97X-D resolves to the real functional (not `wb97x`+D3),
|
|
230
|
+
and the D3 dispersion status is shown instead of silently dropped.
|
|
231
|
+
- **ECP systems** — ECPs are passed to parallel IR/Raman workers and embedded
|
|
232
|
+
in exported scripts; charge/spin inference handles ROHF and ECP systems.
|
|
233
|
+
- **Exported scripts** for MP2/CCSD/CCSD(T) now run the requested method
|
|
234
|
+
instead of a DFT branch.
|
|
235
|
+
- **Solvation** — PCM requested for a calc type that cannot use it is
|
|
236
|
+
rejected instead of silently ignored; solvated Geometry Optimization works
|
|
237
|
+
in the SLURM batch worker.
|
|
238
|
+
- **SLURM ingest** keeps computed properties and provenance (dipole, charges,
|
|
239
|
+
SCF variant, solvent, GPU); reconnecting to a finished SLURM job no longer
|
|
240
|
+
saves a second copy of its result to History.
|
|
241
|
+
- **SLURM scripts** quote paths containing spaces, and no longer export an
|
|
242
|
+
unused `QUANTUI_RESULTS_DIR`.
|
|
243
|
+
- **Checkpoints** — PES Scan checkpoint identity is coordinate-aware, and the
|
|
244
|
+
interactive Frequency run uses its own checkpoint.
|
|
245
|
+
- **NMR** fallback-reference metadata is saved and shown.
|
|
246
|
+
- **Parallel IR/Raman workers** honor density fitting and SCF rescue.
|
|
247
|
+
- **Batch results** carry Mulliken charges and dipoles; UHF Molden export is
|
|
248
|
+
complete.
|
|
249
|
+
- **Spectra** — the x-range covers every real mode; exported NPZ files carry
|
|
250
|
+
the fields the cube helper needs, and cube provenance can't be overwritten.
|
|
251
|
+
- **Packaging** — the built wheel ships `quantui.engines`.
|
|
252
|
+
- **Theme** — Plotly axis and zero lines follow the active palette instead of
|
|
253
|
+
staying pale blue-gray on dark themes.
|
|
254
|
+
|
|
10
255
|
## [0.8.2] - 2026-08-30
|
|
11
256
|
|
|
12
257
|
### Added
|
|
@@ -848,7 +1093,13 @@ Initial public scaffolding of the QuantUI package: `quantui` package with
|
|
|
848
1093
|
`calculator.py`, basic notebook launcher, Apptainer container definition,
|
|
849
1094
|
MIT license, and project metadata.
|
|
850
1095
|
|
|
851
|
-
[Unreleased]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.
|
|
1096
|
+
[Unreleased]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.10.0...HEAD
|
|
1097
|
+
[0.10.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.9.0...v0.10.0
|
|
1098
|
+
[0.9.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.8.2...v0.9.0
|
|
1099
|
+
[0.8.2]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.8.1...v0.8.2
|
|
1100
|
+
[0.8.1]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.8.0...v0.8.1
|
|
1101
|
+
[0.8.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.7.0...v0.8.0
|
|
1102
|
+
[0.7.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.6.1...v0.7.0
|
|
852
1103
|
[0.6.1]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.6.0...v0.6.1
|
|
853
1104
|
[0.6.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.5.2...v0.6.0
|
|
854
1105
|
[0.5.2]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.5.1...v0.5.2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quantui
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.0
|
|
4
4
|
Summary: An open-source frontend for DFT and post-HF quantum chemistry with PySCF
|
|
5
5
|
Author-email: Jonathan Schultz <nccu-schultz-lab@users.noreply.github.com>
|
|
6
6
|
License: MIT License
|
|
@@ -61,11 +61,20 @@ Requires-Dist: kaleido<2,>=0.2.1
|
|
|
61
61
|
Provides-Extra: pyscf
|
|
62
62
|
Requires-Dist: pyscf<3,>=2.13.0; extra == "pyscf"
|
|
63
63
|
Requires-Dist: pyscf-properties; extra == "pyscf"
|
|
64
|
+
Requires-Dist: pyscf-dispersion>=1.0; extra == "pyscf"
|
|
65
|
+
Provides-Extra: pyfock
|
|
66
|
+
Requires-Dist: pyfock<0.3,>=0.1.7; extra == "pyfock"
|
|
67
|
+
Requires-Dist: ase<4,>=3.22.0; extra == "pyfock"
|
|
68
|
+
Requires-Dist: scipy<2,>=1.10; extra == "pyfock"
|
|
69
|
+
Requires-Dist: numba<0.68,>=0.57; extra == "pyfock"
|
|
64
70
|
Provides-Extra: ase
|
|
65
71
|
Requires-Dist: ase<4,>=3.22.0; extra == "ase"
|
|
66
72
|
Provides-Extra: xtb
|
|
67
73
|
Requires-Dist: xtb>=22.1; extra == "xtb"
|
|
68
74
|
Requires-Dist: ase<4,>=3.22.0; extra == "xtb"
|
|
75
|
+
Provides-Extra: ts
|
|
76
|
+
Requires-Dist: sella>=2.6; extra == "ts"
|
|
77
|
+
Requires-Dist: ase<4,>=3.26; extra == "ts"
|
|
69
78
|
Provides-Extra: app
|
|
70
79
|
Requires-Dist: voila<0.6,>=0.5.0; extra == "app"
|
|
71
80
|
Requires-Dist: ipykernel<8,>=6.0.0; extra == "app"
|
|
@@ -77,6 +86,10 @@ Provides-Extra: gpu-cuda13x
|
|
|
77
86
|
Requires-Dist: gpu4pyscf-cuda13x; extra == "gpu-cuda13x"
|
|
78
87
|
Requires-Dist: cupy-cuda13x; extra == "gpu-cuda13x"
|
|
79
88
|
Requires-Dist: cutensor-cu13; extra == "gpu-cuda13x"
|
|
89
|
+
Provides-Extra: pyfock-gpu-cuda12x
|
|
90
|
+
Requires-Dist: cupy-cuda12x; extra == "pyfock-gpu-cuda12x"
|
|
91
|
+
Provides-Extra: pyfock-gpu-cuda13x
|
|
92
|
+
Requires-Dist: cupy-cuda13x; extra == "pyfock-gpu-cuda13x"
|
|
80
93
|
Provides-Extra: notebook
|
|
81
94
|
Requires-Dist: nbmake>=1.4.0; extra == "notebook"
|
|
82
95
|
Requires-Dist: ipykernel<8,>=6.0.0; extra == "notebook"
|
|
@@ -85,6 +98,7 @@ Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
|
85
98
|
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
86
99
|
Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
|
|
87
100
|
Requires-Dist: pytest-xdist>=3.0.0; extra == "dev"
|
|
101
|
+
Requires-Dist: build>=1.0.0; extra == "dev"
|
|
88
102
|
Requires-Dist: mypy<2.4,>=1.10; extra == "dev"
|
|
89
103
|
Requires-Dist: types-requests>=2.28.0; extra == "dev"
|
|
90
104
|
Requires-Dist: black~=26.5.1; python_version >= "3.10" and extra == "dev"
|
|
@@ -102,7 +116,8 @@ Dynamic: license-file
|
|
|
102
116
|
[](https://www.python.org)
|
|
103
117
|
|
|
104
118
|
A powerful open-source frontend for DFT and post-HF quantum chemistry.
|
|
105
|
-
QuantUI puts [PySCF](https://pyscf.org)
|
|
119
|
+
QuantUI puts [PySCF](https://pyscf.org) and a guarded
|
|
120
|
+
[PyFock](https://github.com/manassharma07/PyFock) subset behind an interactive Jupyter/Voilà
|
|
106
121
|
UI so you can build molecules, run calculations locally, and visualize the
|
|
107
122
|
results — no cluster account, no SLURM, no queueing.
|
|
108
123
|
|
|
@@ -155,7 +170,11 @@ Real output from QuantUI, straight from the app:
|
|
|
155
170
|
ready-to-run coordination complexes**, searchable by name/formula), or run a
|
|
156
171
|
structure search by name, SMILES, InChI, PubChem CID, InChIKey, or CAS number
|
|
157
172
|
(PubChem → NCI CACTUS → offline bundled-library fallback; SMILES/InChI resolve
|
|
158
|
-
locally with no network)
|
|
173
|
+
locally with no network), or upload a structure file (XYZ, MOL/SDF, MOL2,
|
|
174
|
+
PDB, CIF, Gaussian input or output)
|
|
175
|
+
- **Structure editing** — set a bond length, angle or dihedral to a value,
|
|
176
|
+
delete atoms, add a hydrogen, change an element, undo; pick atoms by
|
|
177
|
+
clicking the viewer. Freeze atoms for a constrained geometry optimization
|
|
159
178
|
- **Offline-first** — runs with no internet: the bundled molecule library and
|
|
160
179
|
the 3D viewer's JavaScript (3Dmol.js) are vendored, so structure lookup and
|
|
161
180
|
every 3D view work in an air-gapped classroom. (Network is used only for the
|
|
@@ -165,18 +184,30 @@ Real output from QuantUI, straight from the app:
|
|
|
165
184
|
router picks the right renderer per task, and a Status-tab toggle persists
|
|
166
185
|
your default-backend preference between sessions
|
|
167
186
|
- **In-session calculations** — RHF, UHF, 9 DFT functionals, MP2, CCSD,
|
|
168
|
-
CCSD(T), NMR shielding, TD-DFT UV-Vis,
|
|
169
|
-
|
|
187
|
+
CCSD(T), NMR shielding, TD-DFT UV-Vis, 1D PES scans, Marcus reorganization
|
|
188
|
+
energies and **transition-state searches** (Sella, with an automatic
|
|
189
|
+
frequency check that says whether it found a TS) via PySCF, running
|
|
190
|
+
in your Python kernel. Optional PyFock 0.1.x adds native-Windows PBE
|
|
191
|
+
single points and geometry optimizations for neutral, closed-shell molecules
|
|
192
|
+
with def2-SVP/def2-TZVP, including orbital and population analysis;
|
|
193
|
+
engine capabilities automatically gate the setup menus
|
|
170
194
|
- **Implicit solvent** — PCM solvation (Water, Ethanol, THF, DMSO,
|
|
171
|
-
Acetonitrile) via a single checkbox
|
|
195
|
+
Acetonitrile) via a single checkbox: single points, solvated geometry
|
|
196
|
+
optimizations, frequencies (PCM Hessian + IR; Raman stays gas-phase) and
|
|
197
|
+
TD-DFT (non-equilibrium excitations). NMR and PES scans are gas-phase only
|
|
172
198
|
- **Rich results** — total energy, HOMO-LUMO gap, Mulliken charges, dipole
|
|
173
|
-
moment,
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
calculations
|
|
199
|
+
moment, point group, ⟨S²⟩ with a spin-contamination flag for open-shell
|
|
200
|
+
results, thermochemistry (U, H, S, G, Cv, Cp at any temperature and
|
|
201
|
+
pressure), IR spectrum chart (stick and Lorentzian-broadened), ¹H/¹³C NMR
|
|
202
|
+
chemical shifts, an orbital energy-level diagram with symmetry labels
|
|
203
|
+
(1a₁, 1b₂ …), and a side-by-side comparison table for multiple calculations
|
|
204
|
+
- **Surfaces** — any molecular orbital (α and β for unrestricted results), an
|
|
205
|
+
**orbital gallery** of the orbitals around the HOMO–LUMO gap in small linked
|
|
206
|
+
viewers, the electron density, the spin density, and the electrostatic
|
|
207
|
+
potential mapped on the density surface
|
|
178
208
|
- **Geometry optimization** — BFGS optimizer with step-by-step trajectory
|
|
179
209
|
animation; vibrational frequency analysis with animated normal modes,
|
|
210
|
+
displacement arrows, an amplitude slider and a table of every mode,
|
|
180
211
|
user-tunable playback FPS, and a per-result-directory disk cache so mode
|
|
181
212
|
switches on repeat visits and history replay are instant
|
|
182
213
|
- **Inorganic / coordination complexes** — first-class support for
|
|
@@ -195,14 +226,24 @@ Real output from QuantUI, straight from the app:
|
|
|
195
226
|
timestamped directory; a built-in browser lets you reload past results
|
|
196
227
|
after a kernel restart; the full `pyscf.log` is shown inline
|
|
197
228
|
- **Structure exports** — download XYZ, MOL/SDF, or PDB files alongside the
|
|
198
|
-
saved results; script export for a standalone `.py` file
|
|
229
|
+
saved results; script export for a standalone `.py` file. Every export also
|
|
230
|
+
downloads straight to your computer, including from a remote
|
|
231
|
+
Voilà/OnDemand session
|
|
199
232
|
- **Plot export** — save IR, UV-Vis, PES, and orbital diagrams as standalone
|
|
200
233
|
HTML
|
|
201
234
|
- **Optional GPU acceleration** — when [gpu4pyscf](https://github.com/pyscf/gpu4pyscf)
|
|
202
|
-
and a CUDA-capable NVIDIA GPU are present, SCF calculations auto-offload
|
|
235
|
+
and a CUDA-capable NVIDIA GPU are present, single-point SCF calculations auto-offload
|
|
203
236
|
via `mf.to_gpu()` (RHF / UHF / RKS / UKS supported; CCSD(T) stays on CPU).
|
|
204
237
|
The Status tab + every result card show which compute device was used.
|
|
205
238
|
Set `QUANTUI_DISABLE_GPU=1` to force CPU even when the GPU is available.
|
|
239
|
+
Geometry-optimization SCF and gradient steps offload the same way. For a
|
|
240
|
+
frequency calculation, the displaced IR SCFs offload, but the reference SCF
|
|
241
|
+
and the analytical Hessian still run on the CPU.
|
|
242
|
+
- **Cluster batch jobs** — `quantui-batch` submits QuantUI calculations to
|
|
243
|
+
SLURM from a login node over SSH, without starting the image there (presets,
|
|
244
|
+
chaining from another job's optimized geometry, reruns with more memory or
|
|
245
|
+
time, results summaries); `quantui submit` does the same wherever QuantUI is
|
|
246
|
+
installed. See [apptainer/slurm/README.md](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/slurm/README.md)
|
|
206
247
|
- **Timing calibration** — one-click benchmark suite populates the time
|
|
207
248
|
estimator with real machine data so predictions are accurate from the first run
|
|
208
249
|
- **Voilà app mode** — serve the notebook as a polished widget-only UI (no
|
|
@@ -217,11 +258,29 @@ Real output from QuantUI, straight from the app:
|
|
|
217
258
|
| --- | --- | --- |
|
|
218
259
|
| Linux / macOS | Full | PySCF installs natively |
|
|
219
260
|
| WSL (Windows) | Full | Use an Ubuntu WSL environment |
|
|
220
|
-
| Windows (native) | Partial |
|
|
261
|
+
| Windows (native) | Partial | PyFock runs guarded PBE single points and geometry optimizations; use WSL/Apptainer for the full PySCF feature set |
|
|
221
262
|
|
|
222
|
-
### Windows users:
|
|
263
|
+
### Windows users: native PyFock or the full container
|
|
223
264
|
|
|
224
|
-
|
|
265
|
+
For native Windows, install the PyFock subset:
|
|
266
|
+
|
|
267
|
+
```powershell
|
|
268
|
+
py -3.11 -m venv .venv
|
|
269
|
+
.venv\Scripts\Activate.ps1
|
|
270
|
+
python -m pip install "quantui[pyfock,ase,app]"
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
In **System Settings → Quantum engine**, select PyFock (or leave Automatic
|
|
274
|
+
selected when PySCF is absent). The validated subset supports neutral,
|
|
275
|
+
closed-shell PBE single points and geometry optimizations with def2-SVP or
|
|
276
|
+
def2-TZVP. Density fitting is always enabled, analytical gradients drive
|
|
277
|
+
optimization, and orbital, Mulliken, dipole, and cube analysis are retained.
|
|
278
|
+
Hybrids, charged/open-shell systems, solvent, and checkpoint warm starts remain
|
|
279
|
+
PySCF-only. Optional PyFock GPU acceleration is available separately through
|
|
280
|
+
CuPy; geometry optimization uses numerical forces on GPU because PyFock 0.1.7
|
|
281
|
+
does not yet provide analytical GPU gradients.
|
|
282
|
+
|
|
283
|
+
PySCF does not install on Windows natively. For the complete feature set, the
|
|
225
284
|
[`apptainer/quantui.def`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/quantui.def) container bundles
|
|
226
285
|
the complete environment and runs anywhere Apptainer/Singularity is available.
|
|
227
286
|
See [`apptainer/README.md`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/README.md) for build and run instructions.
|
|
@@ -247,6 +306,12 @@ pip install -e ".[pyscf,ase,app]"
|
|
|
247
306
|
python -m pip install quantui[pyscf,ase,app]
|
|
248
307
|
```
|
|
249
308
|
|
|
309
|
+
For the limited native-Windows engine instead:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
python -m pip install quantui[pyfock,ase,app]
|
|
313
|
+
```
|
|
314
|
+
|
|
250
315
|
### Option C — Apptainer container (Windows / reproducible deployment)
|
|
251
316
|
|
|
252
317
|
See [apptainer/README.md](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/README.md).
|
|
@@ -307,6 +372,40 @@ and result cards will display the compute device.
|
|
|
307
372
|
Whenever gpu4pyscf can't offload a particular call, QuantUI falls back
|
|
308
373
|
to CPU automatically and the result card reflects which device ran.
|
|
309
374
|
|
|
375
|
+
### Optional: PyFock GPU acceleration
|
|
376
|
+
|
|
377
|
+
PyFock uses its own CuPy/Numba CUDA implementation; it does not use
|
|
378
|
+
`gpu4pyscf`. Install the PyFock engine and the CUDA-suffixed CuPy extra that
|
|
379
|
+
matches the NVIDIA driver reported by `nvidia-smi`:
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
# CUDA 13.x driver
|
|
383
|
+
pip install "quantui[pyfock,pyfock-gpu-cuda13x]"
|
|
384
|
+
|
|
385
|
+
# CUDA 12.x driver
|
|
386
|
+
pip install "quantui[pyfock,pyfock-gpu-cuda12x]"
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
PyFock GPU use is guarded independently: QuantUI requires CuPy to import and
|
|
390
|
+
report a CUDA device, and still honors the Settings GPU toggle and
|
|
391
|
+
`QUANTUI_DISABLE_GPU=1`. If the probe fails, PyFock falls back to CPU and
|
|
392
|
+
reports the reason. GPU single points use PyFock's GPU SCF/integral/XC path;
|
|
393
|
+
GPU geometry optimizations use numerical finite-difference forces because the
|
|
394
|
+
installed PyFock release's analytical gradient implementation is CPU-only.
|
|
395
|
+
|
|
396
|
+
### Optional: transition-state searches (Sella)
|
|
397
|
+
|
|
398
|
+
The **Transition State** calc type uses [Sella](https://github.com/zadorlab/sella),
|
|
399
|
+
installed as an optional extra:
|
|
400
|
+
|
|
401
|
+
```bash
|
|
402
|
+
pip install "quantui[ts]"
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
Sella pulls in jax/jaxlib (about 380 MB) and is LGPL-3.0, used as a
|
|
406
|
+
separately installed library. Without it the calc type stays in the menu and
|
|
407
|
+
says how to install it. Local runs only for now (not SLURM batch jobs).
|
|
408
|
+
|
|
310
409
|
### Optional: GFN-FF metal pre-optimization (xtb)
|
|
311
410
|
|
|
312
411
|
The classical (MMFF/UFF) pre-optimizer relies on RDKit's organic valence
|
|
@@ -455,8 +554,13 @@ dashboard. After installation:
|
|
|
455
554
|
quantui log tail -n 50 # last 50 events from event_log.jsonl
|
|
456
555
|
quantui gpu check # is GPU offload available right now?
|
|
457
556
|
quantui analytics build --open # build dashboard.html + open in browser
|
|
557
|
+
quantui submit water.xyz --calc frequency --method B3LYP --basis def2-SVP # SLURM batch job
|
|
458
558
|
```
|
|
459
559
|
|
|
560
|
+
On a cluster, `apptainer exec IMAGE quantui install-launcher DIR` writes the
|
|
561
|
+
`quantui-batch` launcher for submitting from a login node — see
|
|
562
|
+
[apptainer/slurm/README.md](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/slurm/README.md).
|
|
563
|
+
|
|
460
564
|
Full reference with all flags and examples: [docs/CLI.md](https://github.com/The-Schultz-Lab/QuantUI/blob/main/docs/CLI.md).
|
|
461
565
|
|
|
462
566
|
---
|
|
@@ -505,11 +609,11 @@ Five step-by-step notebooks in [`notebooks/tutorials/`](https://github.com/The-S
|
|
|
505
609
|
| PBE | DFT GGA | Large molecules; metals; when speed matters |
|
|
506
610
|
| PBE0 | DFT hybrid | Charge-transfer, band gaps |
|
|
507
611
|
| M06-2X | DFT meta-hybrid | Thermochemistry, barrier heights |
|
|
508
|
-
| wB97X-D | DFT range-sep. +
|
|
612
|
+
| wB97X-D | DFT range-sep. + built-in dispersion | Non-covalent interactions, excited states |
|
|
509
613
|
| CAM-B3LYP | DFT range-sep. | Charge-transfer UV-Vis, Rydberg states |
|
|
510
614
|
| M06-L | DFT local meta-GGA | Large molecules; transition metals |
|
|
511
615
|
| HSE06 | DFT screened hybrid | Band gaps, large molecules |
|
|
512
|
-
| PBE-D3 | DFT GGA +
|
|
616
|
+
| PBE-D3 | DFT GGA + Grimme D3 (zero damping) | Van der Waals complexes, stacking |
|
|
513
617
|
| MP2 | Post-HF | Accurate energetics for small molecules (O(N⁵)) |
|
|
514
618
|
| CCSD | Post-HF coupled cluster | High-accuracy small-molecule energies (O(N⁶)) |
|
|
515
619
|
| CCSD(T) | Post-HF coupled cluster | Benchmark "gold standard" energies (O(N⁷); CPU only) |
|
|
@@ -519,11 +623,13 @@ Five step-by-step notebooks in [`notebooks/tutorials/`](https://github.com/The-S
|
|
|
519
623
|
| Type | Output |
|
|
520
624
|
| --- | --- |
|
|
521
625
|
| Single Point | Energy, HOMO-LUMO gap, Mulliken charges, dipole moment |
|
|
522
|
-
| Geometry Opt | Optimised structure, trajectory animation |
|
|
523
|
-
|
|
|
626
|
+
| Geometry Opt | Optimised structure, trajectory animation; optional frozen atoms |
|
|
627
|
+
| Transition State | Saddle point near the input geometry (Sella, optional `[ts]` extra), then a frequency check: transition state, minimum, or higher-order saddle point; animated imaginary mode |
|
|
628
|
+
| Frequency | Vibrational frequencies, ZPVE, IR intensities, thermochemistry at any temperature and pressure, animated normal modes, IR spectrum chart (stick / Lorentzian broadened) |
|
|
524
629
|
| UV-Vis (TD-DFT) | Excitation energies, oscillator strengths, UV-Vis spectrum plot |
|
|
525
630
|
| NMR Shielding | ¹H and ¹³C chemical shifts relative to TMS via GIAO; tabulated by element |
|
|
526
631
|
| PES Scan | 1D potential energy surface along a bond, angle, or dihedral; energy profile chart; geometry animation at each scan point |
|
|
632
|
+
| Reorganization Energy | Marcus four-point internal reorganization energy λ = λ₁ + λ₂ for hole (cation) and/or electron (anion) transfer |
|
|
527
633
|
|
|
528
634
|
### Basis sets
|
|
529
635
|
|
|
@@ -572,6 +678,8 @@ quantui/ Main package
|
|
|
572
678
|
freq_calc.py Vibrational frequency + thermochemistry
|
|
573
679
|
ir_plot.py IR spectrum chart (stick / Lorentzian broadened)
|
|
574
680
|
tddft_calc.py TD-DFT UV-Vis excited-state calculations
|
|
681
|
+
ts_search.py Transition-state search (Sella) + frequency check
|
|
682
|
+
reorganization_energy.py Marcus four-point reorganization energy
|
|
575
683
|
nmr_calc.py NMR shielding + ¹H/¹³C chemical shifts
|
|
576
684
|
pes_scan.py 1D potential energy surface scan
|
|
577
685
|
optimizer.py QM geometry optimization with trajectory
|
|
@@ -592,12 +700,14 @@ quantui/ Main package
|
|
|
592
700
|
benchmarks.py Timing calibration benchmark suite
|
|
593
701
|
config.py Methods, basis sets, solvent/NMR options, presets
|
|
594
702
|
ase_bridge.py ASE structure I/O
|
|
703
|
+
batch_launcher.py Renders the quantui-batch login-node launcher
|
|
704
|
+
backends/ SLURM batch backend, worker and job registry
|
|
595
705
|
preopt.py RDKit MMFF94/UFF force-field pre-optimization
|
|
596
706
|
data/ Bundled library (SQLite + manifests) + vendored 3Dmol.js
|
|
597
707
|
notebooks/
|
|
598
708
|
molecule_computations.ipynb Main user-facing interface (3-cell launcher)
|
|
599
709
|
tutorials/ Step-by-step guided notebooks (01–05)
|
|
600
|
-
tests/ pytest test suite (~
|
|
710
|
+
tests/ pytest test suite (~3,700 tests; run in parallel via pytest-xdist)
|
|
601
711
|
apptainer/ Container definition for reproducible deployment
|
|
602
712
|
local-setup/ Conda environment definition
|
|
603
713
|
pyproject.toml Package metadata and tool config
|