quantui 0.9.0__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.9.0 → quantui-0.10.0}/CHANGELOG.md +161 -1
- {quantui-0.9.0/quantui.egg-info → quantui-0.10.0}/PKG-INFO +66 -17
- {quantui-0.9.0 → quantui-0.10.0}/README.md +61 -16
- {quantui-0.9.0 → quantui-0.10.0}/pyproject.toml +15 -1
- {quantui-0.9.0 → quantui-0.10.0}/quantui/__init__.py +1 -1
- {quantui-0.9.0 → quantui-0.10.0}/quantui/app.py +317 -18
- {quantui-0.9.0 → quantui-0.10.0}/quantui/app_analysis.py +44 -1
- {quantui-0.9.0 → quantui-0.10.0}/quantui/app_builders.py +239 -8
- {quantui-0.9.0 → quantui-0.10.0}/quantui/app_exports.py +56 -8
- {quantui-0.9.0 → quantui-0.10.0}/quantui/app_formatters.py +178 -4
- {quantui-0.9.0 → quantui-0.10.0}/quantui/app_runflow.py +118 -38
- {quantui-0.9.0 → quantui-0.10.0}/quantui/app_slurm.py +29 -1
- quantui-0.10.0/quantui/app_structure_edit.py +404 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/app_visualization.py +751 -16
- {quantui-0.9.0 → 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.9.0 → quantui-0.10.0}/quantui/backends/cluster_config.py +3 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/backends/dispatch.py +22 -8
- {quantui-0.9.0 → quantui-0.10.0}/quantui/backends/slurm.py +126 -26
- {quantui-0.9.0 → quantui-0.10.0}/quantui/backends/slurm_ingest.py +4 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/backends/slurm_utils.py +33 -51
- {quantui-0.9.0 → quantui-0.10.0}/quantui/backends/worker.py +109 -26
- {quantui-0.9.0 → quantui-0.10.0}/quantui/backends/worker_payload.py +32 -1
- quantui-0.10.0/quantui/batch_launcher.py +153 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/calculator.py +87 -1
- {quantui-0.9.0 → quantui-0.10.0}/quantui/checkpoint.py +1 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/cli.py +191 -14
- {quantui-0.9.0 → quantui-0.10.0}/quantui/config.py +84 -7
- {quantui-0.9.0 → 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.9.0 → quantui-0.10.0}/quantui/engines/base.py +1 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/engines/pyscf_engine.py +2 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/freq_calc.py +204 -105
- {quantui-0.9.0 → quantui-0.10.0}/quantui/freq_ir_workers.py +9 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/help_content.py +120 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/molecule.py +38 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/optimizer.py +54 -1
- {quantui-0.9.0 → quantui-0.10.0}/quantui/orbital_visualization.py +493 -10
- {quantui-0.9.0 → quantui-0.10.0}/quantui/reorganization_energy.py +100 -8
- {quantui-0.9.0 → quantui-0.10.0}/quantui/results_storage.py +5 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/session_calc.py +268 -141
- 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.9.0 → quantui-0.10.0}/quantui/tddft_calc.py +79 -0
- quantui-0.10.0/quantui/ts_search.py +363 -0
- {quantui-0.9.0 → quantui-0.10.0/quantui.egg-info}/PKG-INFO +66 -17
- {quantui-0.9.0 → quantui-0.10.0}/quantui.egg-info/SOURCES.txt +10 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui.egg-info/requires.txt +5 -0
- {quantui-0.9.0 → quantui-0.10.0}/LICENSE +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/MANIFEST.in +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/SECURITY.md +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/analytics.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/app_history.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/app_launcher.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/app_measurement.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/app_pes_pick.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/ase_bridge.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/backends/__init__.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/backends/base.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/backends/cluster_security.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/backends/local.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/backends/registry.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/backends/slurm_errors.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/benchmarks.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/c_stderr.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/cactus.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/calc_log.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/cancellation.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/comparison.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/data/js/3Dmol-min.js +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/data/js/3Dmol-min.js.LICENSE.txt +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/data/library/library.sqlite +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/data/manifests/bulk_qm9.json +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/data/manifests/curated.json +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/data/manifests/inorganic.json +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/data/manifests/presets.json +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/density_fitting.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/descriptor_cards.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/engines/__init__.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/engines/pyfock_engine.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/estimator_eval.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/freq_displacement_ids.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/freq_raman_workers.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/gpu_offload.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/inorganic_guards.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/ir_plot.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/issue_tracker.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/live_log.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/log_utils.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/measurement.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/molecule_library.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/mulliken_plot.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/nmr_calc.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/nmr_plot.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/pes_scan.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/pes_scan_ui.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/populations_overlay.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/preopt.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/progress.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/pubchem.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/pyfock_gpu.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/raman_calc.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/raman_plot.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/scf_robust.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/security.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/spin_presets.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/structure_providers.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/theme.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/user_settings.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/utils.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/vib_cache.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/visualization_py3dmol.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/viz_assets.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/viz_backend_router.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui/xyz_input.py +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui.egg-info/dependency_links.txt +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui.egg-info/entry_points.txt +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/quantui.egg-info/top_level.txt +0 -0
- {quantui-0.9.0 → quantui-0.10.0}/setup.cfg +0 -0
|
@@ -7,6 +7,165 @@ 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
|
+
|
|
10
169
|
## [0.9.0] - 2026-09-26
|
|
11
170
|
|
|
12
171
|
### Added
|
|
@@ -934,7 +1093,8 @@ Initial public scaffolding of the QuantUI package: `quantui` package with
|
|
|
934
1093
|
`calculator.py`, basic notebook launcher, Apptainer container definition,
|
|
935
1094
|
MIT license, and project metadata.
|
|
936
1095
|
|
|
937
|
-
[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
|
|
938
1098
|
[0.9.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.8.2...v0.9.0
|
|
939
1099
|
[0.8.2]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.8.1...v0.8.2
|
|
940
1100
|
[0.8.1]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.8.0...v0.8.1
|
|
@@ -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,6 +61,7 @@ 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"
|
|
64
65
|
Provides-Extra: pyfock
|
|
65
66
|
Requires-Dist: pyfock<0.3,>=0.1.7; extra == "pyfock"
|
|
66
67
|
Requires-Dist: ase<4,>=3.22.0; extra == "pyfock"
|
|
@@ -71,6 +72,9 @@ Requires-Dist: ase<4,>=3.22.0; extra == "ase"
|
|
|
71
72
|
Provides-Extra: xtb
|
|
72
73
|
Requires-Dist: xtb>=22.1; extra == "xtb"
|
|
73
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"
|
|
74
78
|
Provides-Extra: app
|
|
75
79
|
Requires-Dist: voila<0.6,>=0.5.0; extra == "app"
|
|
76
80
|
Requires-Dist: ipykernel<8,>=6.0.0; extra == "app"
|
|
@@ -166,7 +170,11 @@ Real output from QuantUI, straight from the app:
|
|
|
166
170
|
ready-to-run coordination complexes**, searchable by name/formula), or run a
|
|
167
171
|
structure search by name, SMILES, InChI, PubChem CID, InChIKey, or CAS number
|
|
168
172
|
(PubChem → NCI CACTUS → offline bundled-library fallback; SMILES/InChI resolve
|
|
169
|
-
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
|
|
170
178
|
- **Offline-first** — runs with no internet: the bundled molecule library and
|
|
171
179
|
the 3D viewer's JavaScript (3Dmol.js) are vendored, so structure lookup and
|
|
172
180
|
every 3D view work in an air-gapped classroom. (Network is used only for the
|
|
@@ -176,21 +184,30 @@ Real output from QuantUI, straight from the app:
|
|
|
176
184
|
router picks the right renderer per task, and a Status-tab toggle persists
|
|
177
185
|
your default-backend preference between sessions
|
|
178
186
|
- **In-session calculations** — RHF, UHF, 9 DFT functionals, MP2, CCSD,
|
|
179
|
-
CCSD(T), NMR shielding, TD-DFT UV-Vis,
|
|
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
|
|
180
190
|
in your Python kernel. Optional PyFock 0.1.x adds native-Windows PBE
|
|
181
191
|
single points and geometry optimizations for neutral, closed-shell molecules
|
|
182
192
|
with def2-SVP/def2-TZVP, including orbital and population analysis;
|
|
183
193
|
engine capabilities automatically gate the setup menus
|
|
184
194
|
- **Implicit solvent** — PCM solvation (Water, Ethanol, THF, DMSO,
|
|
185
|
-
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
|
|
186
198
|
- **Rich results** — total energy, HOMO-LUMO gap, Mulliken charges, dipole
|
|
187
|
-
moment,
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
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
|
|
192
208
|
- **Geometry optimization** — BFGS optimizer with step-by-step trajectory
|
|
193
209
|
animation; vibrational frequency analysis with animated normal modes,
|
|
210
|
+
displacement arrows, an amplitude slider and a table of every mode,
|
|
194
211
|
user-tunable playback FPS, and a per-result-directory disk cache so mode
|
|
195
212
|
switches on repeat visits and history replay are instant
|
|
196
213
|
- **Inorganic / coordination complexes** — first-class support for
|
|
@@ -209,7 +226,9 @@ Real output from QuantUI, straight from the app:
|
|
|
209
226
|
timestamped directory; a built-in browser lets you reload past results
|
|
210
227
|
after a kernel restart; the full `pyscf.log` is shown inline
|
|
211
228
|
- **Structure exports** — download XYZ, MOL/SDF, or PDB files alongside the
|
|
212
|
-
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
|
|
213
232
|
- **Plot export** — save IR, UV-Vis, PES, and orbital diagrams as standalone
|
|
214
233
|
HTML
|
|
215
234
|
- **Optional GPU acceleration** — when [gpu4pyscf](https://github.com/pyscf/gpu4pyscf)
|
|
@@ -217,8 +236,14 @@ Real output from QuantUI, straight from the app:
|
|
|
217
236
|
via `mf.to_gpu()` (RHF / UHF / RKS / UKS supported; CCSD(T) stays on CPU).
|
|
218
237
|
The Status tab + every result card show which compute device was used.
|
|
219
238
|
Set `QUANTUI_DISABLE_GPU=1` to force CPU even when the GPU is available.
|
|
220
|
-
Geometry-optimization SCF steps
|
|
221
|
-
|
|
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)
|
|
222
247
|
- **Timing calibration** — one-click benchmark suite populates the time
|
|
223
248
|
estimator with real machine data so predictions are accurate from the first run
|
|
224
249
|
- **Voilà app mode** — serve the notebook as a polished widget-only UI (no
|
|
@@ -368,6 +393,19 @@ reports the reason. GPU single points use PyFock's GPU SCF/integral/XC path;
|
|
|
368
393
|
GPU geometry optimizations use numerical finite-difference forces because the
|
|
369
394
|
installed PyFock release's analytical gradient implementation is CPU-only.
|
|
370
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
|
+
|
|
371
409
|
### Optional: GFN-FF metal pre-optimization (xtb)
|
|
372
410
|
|
|
373
411
|
The classical (MMFF/UFF) pre-optimizer relies on RDKit's organic valence
|
|
@@ -516,8 +554,13 @@ dashboard. After installation:
|
|
|
516
554
|
quantui log tail -n 50 # last 50 events from event_log.jsonl
|
|
517
555
|
quantui gpu check # is GPU offload available right now?
|
|
518
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
|
|
519
558
|
```
|
|
520
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
|
+
|
|
521
564
|
Full reference with all flags and examples: [docs/CLI.md](https://github.com/The-Schultz-Lab/QuantUI/blob/main/docs/CLI.md).
|
|
522
565
|
|
|
523
566
|
---
|
|
@@ -566,11 +609,11 @@ Five step-by-step notebooks in [`notebooks/tutorials/`](https://github.com/The-S
|
|
|
566
609
|
| PBE | DFT GGA | Large molecules; metals; when speed matters |
|
|
567
610
|
| PBE0 | DFT hybrid | Charge-transfer, band gaps |
|
|
568
611
|
| M06-2X | DFT meta-hybrid | Thermochemistry, barrier heights |
|
|
569
|
-
| wB97X-D | DFT range-sep. +
|
|
612
|
+
| wB97X-D | DFT range-sep. + built-in dispersion | Non-covalent interactions, excited states |
|
|
570
613
|
| CAM-B3LYP | DFT range-sep. | Charge-transfer UV-Vis, Rydberg states |
|
|
571
614
|
| M06-L | DFT local meta-GGA | Large molecules; transition metals |
|
|
572
615
|
| HSE06 | DFT screened hybrid | Band gaps, large molecules |
|
|
573
|
-
| PBE-D3 | DFT GGA +
|
|
616
|
+
| PBE-D3 | DFT GGA + Grimme D3 (zero damping) | Van der Waals complexes, stacking |
|
|
574
617
|
| MP2 | Post-HF | Accurate energetics for small molecules (O(N⁵)) |
|
|
575
618
|
| CCSD | Post-HF coupled cluster | High-accuracy small-molecule energies (O(N⁶)) |
|
|
576
619
|
| CCSD(T) | Post-HF coupled cluster | Benchmark "gold standard" energies (O(N⁷); CPU only) |
|
|
@@ -580,11 +623,13 @@ Five step-by-step notebooks in [`notebooks/tutorials/`](https://github.com/The-S
|
|
|
580
623
|
| Type | Output |
|
|
581
624
|
| --- | --- |
|
|
582
625
|
| Single Point | Energy, HOMO-LUMO gap, Mulliken charges, dipole moment |
|
|
583
|
-
| Geometry Opt | Optimised structure, trajectory animation |
|
|
584
|
-
|
|
|
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) |
|
|
585
629
|
| UV-Vis (TD-DFT) | Excitation energies, oscillator strengths, UV-Vis spectrum plot |
|
|
586
630
|
| NMR Shielding | ¹H and ¹³C chemical shifts relative to TMS via GIAO; tabulated by element |
|
|
587
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 |
|
|
588
633
|
|
|
589
634
|
### Basis sets
|
|
590
635
|
|
|
@@ -633,6 +678,8 @@ quantui/ Main package
|
|
|
633
678
|
freq_calc.py Vibrational frequency + thermochemistry
|
|
634
679
|
ir_plot.py IR spectrum chart (stick / Lorentzian broadened)
|
|
635
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
|
|
636
683
|
nmr_calc.py NMR shielding + ¹H/¹³C chemical shifts
|
|
637
684
|
pes_scan.py 1D potential energy surface scan
|
|
638
685
|
optimizer.py QM geometry optimization with trajectory
|
|
@@ -653,12 +700,14 @@ quantui/ Main package
|
|
|
653
700
|
benchmarks.py Timing calibration benchmark suite
|
|
654
701
|
config.py Methods, basis sets, solvent/NMR options, presets
|
|
655
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
|
|
656
705
|
preopt.py RDKit MMFF94/UFF force-field pre-optimization
|
|
657
706
|
data/ Bundled library (SQLite + manifests) + vendored 3Dmol.js
|
|
658
707
|
notebooks/
|
|
659
708
|
molecule_computations.ipynb Main user-facing interface (3-cell launcher)
|
|
660
709
|
tutorials/ Step-by-step guided notebooks (01–05)
|
|
661
|
-
tests/ pytest test suite (~
|
|
710
|
+
tests/ pytest test suite (~3,700 tests; run in parallel via pytest-xdist)
|
|
662
711
|
apptainer/ Container definition for reproducible deployment
|
|
663
712
|
local-setup/ Conda environment definition
|
|
664
713
|
pyproject.toml Package metadata and tool config
|
|
@@ -61,7 +61,11 @@ Real output from QuantUI, straight from the app:
|
|
|
61
61
|
ready-to-run coordination complexes**, searchable by name/formula), or run a
|
|
62
62
|
structure search by name, SMILES, InChI, PubChem CID, InChIKey, or CAS number
|
|
63
63
|
(PubChem → NCI CACTUS → offline bundled-library fallback; SMILES/InChI resolve
|
|
64
|
-
locally with no network)
|
|
64
|
+
locally with no network), or upload a structure file (XYZ, MOL/SDF, MOL2,
|
|
65
|
+
PDB, CIF, Gaussian input or output)
|
|
66
|
+
- **Structure editing** — set a bond length, angle or dihedral to a value,
|
|
67
|
+
delete atoms, add a hydrogen, change an element, undo; pick atoms by
|
|
68
|
+
clicking the viewer. Freeze atoms for a constrained geometry optimization
|
|
65
69
|
- **Offline-first** — runs with no internet: the bundled molecule library and
|
|
66
70
|
the 3D viewer's JavaScript (3Dmol.js) are vendored, so structure lookup and
|
|
67
71
|
every 3D view work in an air-gapped classroom. (Network is used only for the
|
|
@@ -71,21 +75,30 @@ Real output from QuantUI, straight from the app:
|
|
|
71
75
|
router picks the right renderer per task, and a Status-tab toggle persists
|
|
72
76
|
your default-backend preference between sessions
|
|
73
77
|
- **In-session calculations** — RHF, UHF, 9 DFT functionals, MP2, CCSD,
|
|
74
|
-
CCSD(T), NMR shielding, TD-DFT UV-Vis,
|
|
78
|
+
CCSD(T), NMR shielding, TD-DFT UV-Vis, 1D PES scans, Marcus reorganization
|
|
79
|
+
energies and **transition-state searches** (Sella, with an automatic
|
|
80
|
+
frequency check that says whether it found a TS) via PySCF, running
|
|
75
81
|
in your Python kernel. Optional PyFock 0.1.x adds native-Windows PBE
|
|
76
82
|
single points and geometry optimizations for neutral, closed-shell molecules
|
|
77
83
|
with def2-SVP/def2-TZVP, including orbital and population analysis;
|
|
78
84
|
engine capabilities automatically gate the setup menus
|
|
79
85
|
- **Implicit solvent** — PCM solvation (Water, Ethanol, THF, DMSO,
|
|
80
|
-
Acetonitrile) via a single checkbox
|
|
86
|
+
Acetonitrile) via a single checkbox: single points, solvated geometry
|
|
87
|
+
optimizations, frequencies (PCM Hessian + IR; Raman stays gas-phase) and
|
|
88
|
+
TD-DFT (non-equilibrium excitations). NMR and PES scans are gas-phase only
|
|
81
89
|
- **Rich results** — total energy, HOMO-LUMO gap, Mulliken charges, dipole
|
|
82
|
-
moment,
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
calculations
|
|
90
|
+
moment, point group, ⟨S²⟩ with a spin-contamination flag for open-shell
|
|
91
|
+
results, thermochemistry (U, H, S, G, Cv, Cp at any temperature and
|
|
92
|
+
pressure), IR spectrum chart (stick and Lorentzian-broadened), ¹H/¹³C NMR
|
|
93
|
+
chemical shifts, an orbital energy-level diagram with symmetry labels
|
|
94
|
+
(1a₁, 1b₂ …), and a side-by-side comparison table for multiple calculations
|
|
95
|
+
- **Surfaces** — any molecular orbital (α and β for unrestricted results), an
|
|
96
|
+
**orbital gallery** of the orbitals around the HOMO–LUMO gap in small linked
|
|
97
|
+
viewers, the electron density, the spin density, and the electrostatic
|
|
98
|
+
potential mapped on the density surface
|
|
87
99
|
- **Geometry optimization** — BFGS optimizer with step-by-step trajectory
|
|
88
100
|
animation; vibrational frequency analysis with animated normal modes,
|
|
101
|
+
displacement arrows, an amplitude slider and a table of every mode,
|
|
89
102
|
user-tunable playback FPS, and a per-result-directory disk cache so mode
|
|
90
103
|
switches on repeat visits and history replay are instant
|
|
91
104
|
- **Inorganic / coordination complexes** — first-class support for
|
|
@@ -104,7 +117,9 @@ Real output from QuantUI, straight from the app:
|
|
|
104
117
|
timestamped directory; a built-in browser lets you reload past results
|
|
105
118
|
after a kernel restart; the full `pyscf.log` is shown inline
|
|
106
119
|
- **Structure exports** — download XYZ, MOL/SDF, or PDB files alongside the
|
|
107
|
-
saved results; script export for a standalone `.py` file
|
|
120
|
+
saved results; script export for a standalone `.py` file. Every export also
|
|
121
|
+
downloads straight to your computer, including from a remote
|
|
122
|
+
Voilà/OnDemand session
|
|
108
123
|
- **Plot export** — save IR, UV-Vis, PES, and orbital diagrams as standalone
|
|
109
124
|
HTML
|
|
110
125
|
- **Optional GPU acceleration** — when [gpu4pyscf](https://github.com/pyscf/gpu4pyscf)
|
|
@@ -112,8 +127,14 @@ Real output from QuantUI, straight from the app:
|
|
|
112
127
|
via `mf.to_gpu()` (RHF / UHF / RKS / UKS supported; CCSD(T) stays on CPU).
|
|
113
128
|
The Status tab + every result card show which compute device was used.
|
|
114
129
|
Set `QUANTUI_DISABLE_GPU=1` to force CPU even when the GPU is available.
|
|
115
|
-
Geometry-optimization SCF steps
|
|
116
|
-
|
|
130
|
+
Geometry-optimization SCF and gradient steps offload the same way. For a
|
|
131
|
+
frequency calculation, the displaced IR SCFs offload, but the reference SCF
|
|
132
|
+
and the analytical Hessian still run on the CPU.
|
|
133
|
+
- **Cluster batch jobs** — `quantui-batch` submits QuantUI calculations to
|
|
134
|
+
SLURM from a login node over SSH, without starting the image there (presets,
|
|
135
|
+
chaining from another job's optimized geometry, reruns with more memory or
|
|
136
|
+
time, results summaries); `quantui submit` does the same wherever QuantUI is
|
|
137
|
+
installed. See [apptainer/slurm/README.md](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/slurm/README.md)
|
|
117
138
|
- **Timing calibration** — one-click benchmark suite populates the time
|
|
118
139
|
estimator with real machine data so predictions are accurate from the first run
|
|
119
140
|
- **Voilà app mode** — serve the notebook as a polished widget-only UI (no
|
|
@@ -263,6 +284,19 @@ reports the reason. GPU single points use PyFock's GPU SCF/integral/XC path;
|
|
|
263
284
|
GPU geometry optimizations use numerical finite-difference forces because the
|
|
264
285
|
installed PyFock release's analytical gradient implementation is CPU-only.
|
|
265
286
|
|
|
287
|
+
### Optional: transition-state searches (Sella)
|
|
288
|
+
|
|
289
|
+
The **Transition State** calc type uses [Sella](https://github.com/zadorlab/sella),
|
|
290
|
+
installed as an optional extra:
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
pip install "quantui[ts]"
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
Sella pulls in jax/jaxlib (about 380 MB) and is LGPL-3.0, used as a
|
|
297
|
+
separately installed library. Without it the calc type stays in the menu and
|
|
298
|
+
says how to install it. Local runs only for now (not SLURM batch jobs).
|
|
299
|
+
|
|
266
300
|
### Optional: GFN-FF metal pre-optimization (xtb)
|
|
267
301
|
|
|
268
302
|
The classical (MMFF/UFF) pre-optimizer relies on RDKit's organic valence
|
|
@@ -411,8 +445,13 @@ dashboard. After installation:
|
|
|
411
445
|
quantui log tail -n 50 # last 50 events from event_log.jsonl
|
|
412
446
|
quantui gpu check # is GPU offload available right now?
|
|
413
447
|
quantui analytics build --open # build dashboard.html + open in browser
|
|
448
|
+
quantui submit water.xyz --calc frequency --method B3LYP --basis def2-SVP # SLURM batch job
|
|
414
449
|
```
|
|
415
450
|
|
|
451
|
+
On a cluster, `apptainer exec IMAGE quantui install-launcher DIR` writes the
|
|
452
|
+
`quantui-batch` launcher for submitting from a login node — see
|
|
453
|
+
[apptainer/slurm/README.md](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/slurm/README.md).
|
|
454
|
+
|
|
416
455
|
Full reference with all flags and examples: [docs/CLI.md](https://github.com/The-Schultz-Lab/QuantUI/blob/main/docs/CLI.md).
|
|
417
456
|
|
|
418
457
|
---
|
|
@@ -461,11 +500,11 @@ Five step-by-step notebooks in [`notebooks/tutorials/`](https://github.com/The-S
|
|
|
461
500
|
| PBE | DFT GGA | Large molecules; metals; when speed matters |
|
|
462
501
|
| PBE0 | DFT hybrid | Charge-transfer, band gaps |
|
|
463
502
|
| M06-2X | DFT meta-hybrid | Thermochemistry, barrier heights |
|
|
464
|
-
| wB97X-D | DFT range-sep. +
|
|
503
|
+
| wB97X-D | DFT range-sep. + built-in dispersion | Non-covalent interactions, excited states |
|
|
465
504
|
| CAM-B3LYP | DFT range-sep. | Charge-transfer UV-Vis, Rydberg states |
|
|
466
505
|
| M06-L | DFT local meta-GGA | Large molecules; transition metals |
|
|
467
506
|
| HSE06 | DFT screened hybrid | Band gaps, large molecules |
|
|
468
|
-
| PBE-D3 | DFT GGA +
|
|
507
|
+
| PBE-D3 | DFT GGA + Grimme D3 (zero damping) | Van der Waals complexes, stacking |
|
|
469
508
|
| MP2 | Post-HF | Accurate energetics for small molecules (O(N⁵)) |
|
|
470
509
|
| CCSD | Post-HF coupled cluster | High-accuracy small-molecule energies (O(N⁶)) |
|
|
471
510
|
| CCSD(T) | Post-HF coupled cluster | Benchmark "gold standard" energies (O(N⁷); CPU only) |
|
|
@@ -475,11 +514,13 @@ Five step-by-step notebooks in [`notebooks/tutorials/`](https://github.com/The-S
|
|
|
475
514
|
| Type | Output |
|
|
476
515
|
| --- | --- |
|
|
477
516
|
| Single Point | Energy, HOMO-LUMO gap, Mulliken charges, dipole moment |
|
|
478
|
-
| Geometry Opt | Optimised structure, trajectory animation |
|
|
479
|
-
|
|
|
517
|
+
| Geometry Opt | Optimised structure, trajectory animation; optional frozen atoms |
|
|
518
|
+
| 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 |
|
|
519
|
+
| Frequency | Vibrational frequencies, ZPVE, IR intensities, thermochemistry at any temperature and pressure, animated normal modes, IR spectrum chart (stick / Lorentzian broadened) |
|
|
480
520
|
| UV-Vis (TD-DFT) | Excitation energies, oscillator strengths, UV-Vis spectrum plot |
|
|
481
521
|
| NMR Shielding | ¹H and ¹³C chemical shifts relative to TMS via GIAO; tabulated by element |
|
|
482
522
|
| PES Scan | 1D potential energy surface along a bond, angle, or dihedral; energy profile chart; geometry animation at each scan point |
|
|
523
|
+
| Reorganization Energy | Marcus four-point internal reorganization energy λ = λ₁ + λ₂ for hole (cation) and/or electron (anion) transfer |
|
|
483
524
|
|
|
484
525
|
### Basis sets
|
|
485
526
|
|
|
@@ -528,6 +569,8 @@ quantui/ Main package
|
|
|
528
569
|
freq_calc.py Vibrational frequency + thermochemistry
|
|
529
570
|
ir_plot.py IR spectrum chart (stick / Lorentzian broadened)
|
|
530
571
|
tddft_calc.py TD-DFT UV-Vis excited-state calculations
|
|
572
|
+
ts_search.py Transition-state search (Sella) + frequency check
|
|
573
|
+
reorganization_energy.py Marcus four-point reorganization energy
|
|
531
574
|
nmr_calc.py NMR shielding + ¹H/¹³C chemical shifts
|
|
532
575
|
pes_scan.py 1D potential energy surface scan
|
|
533
576
|
optimizer.py QM geometry optimization with trajectory
|
|
@@ -548,12 +591,14 @@ quantui/ Main package
|
|
|
548
591
|
benchmarks.py Timing calibration benchmark suite
|
|
549
592
|
config.py Methods, basis sets, solvent/NMR options, presets
|
|
550
593
|
ase_bridge.py ASE structure I/O
|
|
594
|
+
batch_launcher.py Renders the quantui-batch login-node launcher
|
|
595
|
+
backends/ SLURM batch backend, worker and job registry
|
|
551
596
|
preopt.py RDKit MMFF94/UFF force-field pre-optimization
|
|
552
597
|
data/ Bundled library (SQLite + manifests) + vendored 3Dmol.js
|
|
553
598
|
notebooks/
|
|
554
599
|
molecule_computations.ipynb Main user-facing interface (3-cell launcher)
|
|
555
600
|
tutorials/ Step-by-step guided notebooks (01–05)
|
|
556
|
-
tests/ pytest test suite (~
|
|
601
|
+
tests/ pytest test suite (~3,700 tests; run in parallel via pytest-xdist)
|
|
557
602
|
apptainer/ Container definition for reproducible deployment
|
|
558
603
|
local-setup/ Conda environment definition
|
|
559
604
|
pyproject.toml Package metadata and tool config
|
|
@@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta"
|
|
|
8
8
|
|
|
9
9
|
[project]
|
|
10
10
|
name = "quantui"
|
|
11
|
-
version = "0.
|
|
11
|
+
version = "0.10.0"
|
|
12
12
|
description = "An open-source frontend for DFT and post-HF quantum chemistry with PySCF"
|
|
13
13
|
readme = "README.md"
|
|
14
14
|
requires-python = ">=3.9"
|
|
@@ -108,6 +108,8 @@ quantui = [
|
|
|
108
108
|
"data/manifests/*.json",
|
|
109
109
|
"data/js/*.js",
|
|
110
110
|
"data/js/*.txt",
|
|
111
|
+
# Host-side quantui-batch launcher, written out by `quantui install-launcher`.
|
|
112
|
+
"data/launcher/*.py",
|
|
111
113
|
]
|
|
112
114
|
|
|
113
115
|
[project.optional-dependencies]
|
|
@@ -124,6 +126,9 @@ pyscf = [
|
|
|
124
126
|
# installers too, not just for our dependency bot.
|
|
125
127
|
"pyscf>=2.13.0,<3",
|
|
126
128
|
"pyscf-properties",
|
|
129
|
+
# Grimme D3/D4 for PBE-D3 via PySCF's built-in mf.disp (energies,
|
|
130
|
+
# gradients and Hessians). Without it PBE-D3 runs as plain PBE.
|
|
131
|
+
"pyscf-dispersion>=1.0",
|
|
127
132
|
]
|
|
128
133
|
|
|
129
134
|
# Native-Windows-capable pure-Python DFT backend (M-PYFOCK). PyFock 0.1.7
|
|
@@ -156,6 +161,15 @@ xtb = [
|
|
|
156
161
|
"ase>=3.22.0,<4",
|
|
157
162
|
]
|
|
158
163
|
|
|
164
|
+
# Transition-state search (M-TS, DEC-024): Sella drives QuantUI's own ASE
|
|
165
|
+
# calculator. LGPL-3.0, used as a separately installed library (no Sella code
|
|
166
|
+
# in QuantUI). Pulls in jax/jaxlib (~380 MB; jax >= 0.10 needs numpy >= 2 on
|
|
167
|
+
# Python 3.11, older jax resolves on 3.9/3.10). Sella 2.x needs ASE >= 3.26.
|
|
168
|
+
ts = [
|
|
169
|
+
"sella>=2.6",
|
|
170
|
+
"ase>=3.26,<4",
|
|
171
|
+
]
|
|
172
|
+
|
|
159
173
|
# Voilà app server — hides notebook code; students see only the widget UI.
|
|
160
174
|
# Run with: voila notebooks/molecule_computations.ipynb
|
|
161
175
|
app = [
|
|
@@ -7,7 +7,7 @@ Calculations run locally in the Jupyter session — no cluster or SLURM required
|
|
|
7
7
|
PySCF requires Linux/macOS/WSL. Windows users should use the Apptainer container.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
-
__version__ = "0.
|
|
10
|
+
__version__ = "0.10.0"
|
|
11
11
|
|
|
12
12
|
import logging
|
|
13
13
|
from typing import Any
|