quantui 0.5.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. quantui/__init__.py +311 -0
  2. quantui/analytics.py +609 -0
  3. quantui/app.py +5650 -0
  4. quantui/app_analysis.py +662 -0
  5. quantui/app_builders.py +2465 -0
  6. quantui/app_exports.py +194 -0
  7. quantui/app_formatters.py +493 -0
  8. quantui/app_history.py +624 -0
  9. quantui/app_runflow.py +1544 -0
  10. quantui/app_visualization.py +2620 -0
  11. quantui/ase_bridge.py +236 -0
  12. quantui/benchmarks.py +1543 -0
  13. quantui/c_stderr.py +124 -0
  14. quantui/cactus.py +88 -0
  15. quantui/calc_log.py +1116 -0
  16. quantui/calculator.py +204 -0
  17. quantui/cancellation.py +88 -0
  18. quantui/cli.py +288 -0
  19. quantui/comparison.py +306 -0
  20. quantui/config.py +725 -0
  21. quantui/data/js/3Dmol-min.js +2 -0
  22. quantui/data/js/3Dmol-min.js.LICENSE.txt +5 -0
  23. quantui/data/library/library.sqlite +0 -0
  24. quantui/data/manifests/bulk_qm9.json +1 -0
  25. quantui/data/manifests/curated.json +15482 -0
  26. quantui/data/manifests/presets.json +816 -0
  27. quantui/descriptor_cards.py +186 -0
  28. quantui/freq_calc.py +712 -0
  29. quantui/freq_ir_workers.py +229 -0
  30. quantui/gpu_offload.py +278 -0
  31. quantui/help_content.py +474 -0
  32. quantui/ir_plot.py +130 -0
  33. quantui/issue_tracker.py +170 -0
  34. quantui/live_log.py +387 -0
  35. quantui/log_utils.py +492 -0
  36. quantui/molecule.py +577 -0
  37. quantui/molecule_library.py +433 -0
  38. quantui/nmr_calc.py +437 -0
  39. quantui/optimizer.py +670 -0
  40. quantui/orbital_visualization.py +1102 -0
  41. quantui/pes_scan.py +420 -0
  42. quantui/preopt.py +355 -0
  43. quantui/progress.py +111 -0
  44. quantui/pubchem.py +1157 -0
  45. quantui/reorganization_energy.py +435 -0
  46. quantui/results_storage.py +902 -0
  47. quantui/security.py +14 -0
  48. quantui/session_calc.py +622 -0
  49. quantui/structure_providers.py +277 -0
  50. quantui/tddft_calc.py +307 -0
  51. quantui/user_settings.py +238 -0
  52. quantui/utils.py +287 -0
  53. quantui/vib_cache.py +247 -0
  54. quantui/visualization_py3dmol.py +593 -0
  55. quantui/viz_assets.py +101 -0
  56. quantui/viz_backend_router.py +243 -0
  57. quantui-0.5.1.dist-info/METADATA +533 -0
  58. quantui-0.5.1.dist-info/RECORD +62 -0
  59. quantui-0.5.1.dist-info/WHEEL +5 -0
  60. quantui-0.5.1.dist-info/entry_points.txt +2 -0
  61. quantui-0.5.1.dist-info/licenses/LICENSE +21 -0
  62. quantui-0.5.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,533 @@
1
+ Metadata-Version: 2.4
2
+ Name: quantui
3
+ Version: 0.5.1
4
+ Summary: An open-source frontend for DFT and post-HF quantum chemistry with PySCF
5
+ Author-email: Jonathan Schultz <nccu-schultz-lab@users.noreply.github.com>
6
+ License: MIT License
7
+
8
+ Copyright (c) 2026 The Schultz Lab, North Carolina Central University
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Project-URL: Homepage, https://github.com/The-Schultz-Lab/QuantUI
29
+ Project-URL: Source, https://github.com/The-Schultz-Lab/QuantUI
30
+ Project-URL: Documentation, https://the-schultz-lab.github.io/QuantUI/
31
+ Project-URL: Changelog, https://github.com/The-Schultz-Lab/QuantUI/blob/main/CHANGELOG.md
32
+ Project-URL: Issues, https://github.com/The-Schultz-Lab/QuantUI/issues
33
+ Keywords: quantum chemistry,DFT,PySCF,jupyter,voila,frontend,computational chemistry
34
+ Classifier: Development Status :: 3 - Alpha
35
+ Classifier: Intended Audience :: Science/Research
36
+ Classifier: Intended Audience :: Education
37
+ Classifier: Topic :: Scientific/Engineering :: Chemistry
38
+ Classifier: Topic :: Scientific/Engineering :: Physics
39
+ Classifier: Programming Language :: Python :: 3
40
+ Classifier: Programming Language :: Python :: 3.9
41
+ Classifier: Programming Language :: Python :: 3.10
42
+ Classifier: Programming Language :: Python :: 3.11
43
+ Classifier: License :: OSI Approved :: MIT License
44
+ Classifier: Operating System :: POSIX :: Linux
45
+ Classifier: Operating System :: MacOS
46
+ Classifier: Environment :: Web Environment
47
+ Classifier: Framework :: Jupyter
48
+ Requires-Python: >=3.9
49
+ Description-Content-Type: text/markdown
50
+ License-File: LICENSE
51
+ Requires-Dist: jupyter<2,>=1.0.0
52
+ Requires-Dist: ipywidgets<9,>=8.0.0
53
+ Requires-Dist: notebook<8,>=7.0.0
54
+ Requires-Dist: numpy<3,>=1.24.0
55
+ Requires-Dist: requests<3,>=2.28.0
56
+ Requires-Dist: py3Dmol<3,>=2.0.0
57
+ Requires-Dist: matplotlib<4,>=3.7.0
58
+ Requires-Dist: plotly<7,>=5.0.0
59
+ Requires-Dist: plotlymol<1,>=0.2.1
60
+ Provides-Extra: pyscf
61
+ Requires-Dist: pyscf<3,>=2.13.0; extra == "pyscf"
62
+ Requires-Dist: pyscf-properties; extra == "pyscf"
63
+ Provides-Extra: ase
64
+ Requires-Dist: ase<4,>=3.22.0; extra == "ase"
65
+ Provides-Extra: app
66
+ Requires-Dist: voila<0.6,>=0.5.0; extra == "app"
67
+ Requires-Dist: ipykernel<8,>=6.0.0; extra == "app"
68
+ Provides-Extra: gpu-cuda12x
69
+ Requires-Dist: gpu4pyscf-cuda12x; extra == "gpu-cuda12x"
70
+ Requires-Dist: cupy-cuda12x; extra == "gpu-cuda12x"
71
+ Requires-Dist: cutensor-cu12; extra == "gpu-cuda12x"
72
+ Provides-Extra: gpu-cuda13x
73
+ Requires-Dist: gpu4pyscf-cuda13x; extra == "gpu-cuda13x"
74
+ Requires-Dist: cupy-cuda13x; extra == "gpu-cuda13x"
75
+ Requires-Dist: cutensor-cu13; extra == "gpu-cuda13x"
76
+ Provides-Extra: notebook
77
+ Requires-Dist: nbmake>=1.4.0; extra == "notebook"
78
+ Requires-Dist: ipykernel<8,>=6.0.0; extra == "notebook"
79
+ Provides-Extra: dev
80
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
81
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
82
+ Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
83
+ Requires-Dist: pytest-xdist>=3.0.0; extra == "dev"
84
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
85
+ Requires-Dist: types-requests>=2.28.0; extra == "dev"
86
+ Requires-Dist: black~=26.5.1; python_version >= "3.10" and extra == "dev"
87
+ Requires-Dist: black~=25.11.0; python_version < "3.10" and extra == "dev"
88
+ Requires-Dist: ruff~=0.16.0; extra == "dev"
89
+ Requires-Dist: pre-commit>=3.7.0; extra == "dev"
90
+ Dynamic: license-file
91
+
92
+ # QuantUI
93
+
94
+ [![PyPI](https://img.shields.io/pypi/v/quantui)](https://pypi.org/project/quantui/)
95
+ [![CI](https://github.com/The-Schultz-Lab/QuantUI/actions/workflows/ci.yml/badge.svg)](https://github.com/The-Schultz-Lab/QuantUI/actions/workflows/ci.yml)
96
+ [![Docs](https://img.shields.io/badge/docs-GitHub%20Pages-blue)](https://the-schultz-lab.github.io/QuantUI/)
97
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/The-Schultz-Lab/QuantUI/blob/main/LICENSE)
98
+ [![Python](https://img.shields.io/badge/python-3.9%20|%203.10%20|%203.11-blue)](https://www.python.org)
99
+
100
+ A powerful open-source frontend for DFT and post-HF quantum chemistry.
101
+ QuantUI puts [PySCF](https://pyscf.org) behind an interactive Jupyter/Voilà
102
+ UI so you can build molecules, run calculations locally, and visualize the
103
+ results — no cluster account, no SLURM, no queueing.
104
+
105
+ Developed by the
106
+ [Schultz Lab, North Carolina Central University](https://github.com/The-Schultz-Lab)
107
+ as an open alternative to closed-source GUI workflows. Equally suitable for
108
+ research and classroom use.
109
+
110
+ ---
111
+
112
+ ## What it does
113
+
114
+ - **Molecule input** — paste XYZ coordinates, browse an indexed three-tier
115
+ bundled library (20 presets + 156 curated molecules + ~1,900 QM9 structures,
116
+ searchable by name/formula), or run a structure search by name, SMILES,
117
+ InChI, PubChem CID, InChIKey, or CAS number (PubChem → NCI CACTUS → offline
118
+ bundled-library fallback; SMILES/InChI resolve locally with no network)
119
+ - **Offline-first** — runs with no internet: the bundled molecule library and
120
+ the 3D viewer's JavaScript (3Dmol.js) are vendored, so structure lookup and
121
+ every 3D view work in an air-gapped classroom. (Network is used only for the
122
+ optional live PubChem/CACTUS search.)
123
+ - **3D visualization** — interactive py3Dmol viewer (py3Dmol-first; optional
124
+ plotlymol3d fallback for non-trajectory tasks). A capability-aware backend
125
+ router picks the right renderer per task, and a Status-tab toggle persists
126
+ your default-backend preference between sessions
127
+ - **In-session calculations** — RHF, UHF, 9 DFT functionals, MP2, CCSD,
128
+ CCSD(T), NMR shielding, TD-DFT UV-Vis, and 1D PES scans via PySCF, running
129
+ in your Python kernel (no batch submission)
130
+ - **Implicit solvent** — PCM solvation (Water, Ethanol, THF, DMSO,
131
+ Acetonitrile) via a single checkbox
132
+ - **Rich results** — total energy, HOMO-LUMO gap, Mulliken charges, dipole
133
+ moment, thermochemistry (H, S, G at 298 K), IR spectrum chart (stick and
134
+ Lorentzian-broadened), ¹H/¹³C NMR chemical shifts, orbital energy-level
135
+ diagram, HOMO/LUMO isosurface (cube-file rendering with toggle for HOMO-1,
136
+ HOMO, LUMO, LUMO+1), and a side-by-side comparison table for multiple
137
+ calculations
138
+ - **Geometry optimization** — BFGS optimizer with step-by-step trajectory
139
+ animation; vibrational frequency analysis with animated normal modes,
140
+ user-tunable playback FPS, and a per-result-directory disk cache so mode
141
+ switches on repeat visits and history replay are instant
142
+ - **Results persistence** — every calculation is saved automatically to a
143
+ timestamped directory; a built-in browser lets you reload past results
144
+ after a kernel restart; the full `pyscf.log` is shown inline
145
+ - **Structure exports** — download XYZ, MOL/SDF, or PDB files alongside the
146
+ saved results; script export for a standalone `.py` file
147
+ - **Plot export** — save IR, UV-Vis, PES, and orbital diagrams as standalone
148
+ HTML
149
+ - **Optional GPU acceleration** — when [gpu4pyscf](https://github.com/pyscf/gpu4pyscf)
150
+ and a CUDA-capable NVIDIA GPU are present, SCF calculations auto-offload
151
+ via `mf.to_gpu()` (RHF / UHF / RKS / UKS supported; CCSD(T) stays on CPU).
152
+ The Status tab + every result card show which compute device was used.
153
+ Set `QUANTUI_DISABLE_GPU=1` to force CPU even when the GPU is available.
154
+ - **Timing calibration** — one-click benchmark suite populates the time
155
+ estimator with real machine data so predictions are accurate from the first run
156
+ - **Voilà app mode** — serve the notebook as a polished widget-only UI (no
157
+ code visible), with Light/Dark themes, a dedicated output log, and an
158
+ in-app bug-report form
159
+
160
+ ---
161
+
162
+ ## Platform requirements
163
+
164
+ | Platform | Works? | Notes |
165
+ | --- | --- | --- |
166
+ | Linux / macOS | Full | PySCF installs natively |
167
+ | WSL (Windows) | Full | Use an Ubuntu WSL environment |
168
+ | Windows (native) | Partial | All UI and visualization features work; PySCF calculations require the Apptainer container |
169
+
170
+ ### Windows users: Apptainer container
171
+
172
+ PySCF does not install on Windows natively. The
173
+ [`apptainer/quantui.def`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/quantui.def) container bundles
174
+ the complete environment and runs anywhere Apptainer/Singularity is available.
175
+ See [`apptainer/README.md`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/README.md) for build and run instructions.
176
+
177
+ ---
178
+
179
+ ## Installation
180
+
181
+ ### Option A — conda (recommended for Linux/macOS/WSL)
182
+
183
+ ```bash
184
+ # Create a dedicated environment
185
+ conda create -n quantui python=3.11
186
+ conda activate quantui
187
+
188
+ # Install with PySCF and ASE
189
+ pip install -e ".[pyscf,ase,app]"
190
+ ```
191
+
192
+ ### Option B — pip only
193
+
194
+ ```bash
195
+ python -m pip install quantui[pyscf,ase,app]
196
+ ```
197
+
198
+ ### Option C — Apptainer container (Windows / reproducible deployment)
199
+
200
+ See [apptainer/README.md](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/README.md).
201
+
202
+ ### Optional: GPU acceleration (NVIDIA + Linux / WSL)
203
+
204
+ If you have an NVIDIA GPU, QuantUI can offload SCF calculations to it
205
+ through [gpu4pyscf](https://github.com/pyscf/gpu4pyscf). This is **fully
206
+ optional** — without these packages QuantUI runs on CPU exactly as
207
+ before, and you can re-disable GPU at any time with
208
+ `export QUANTUI_DISABLE_GPU=1`.
209
+
210
+ **Step 1 — check your CUDA driver version:**
211
+
212
+ ```bash
213
+ nvidia-smi # "CUDA Version: 13.x" or "CUDA Version: 12.x" in the top-right
214
+ ```
215
+
216
+ > The `CUDA Version` field reports your **driver's** maximum supported
217
+ > runtime. You do **not** need to install the CUDA Toolkit — the wheels
218
+ > below bundle their own runtime libraries.
219
+
220
+ **Step 2 — install the CUDA-suffixed wheels matching your driver:**
221
+
222
+ ```bash
223
+ # CUDA 13.x driver
224
+ pip install gpu4pyscf-cuda13x cupy-cuda13x cutensor-cu13
225
+
226
+ # CUDA 12.x driver
227
+ pip install gpu4pyscf-cuda12x cupy-cuda12x cutensor-cu12
228
+ ```
229
+
230
+ > ⚠ **Do not** `pip install gpu4pyscf` or `pip install cupy` (without a
231
+ > CUDA suffix). Those are source distributions that try to compile
232
+ > against your local CUDA toolkit and will fail with
233
+ > `FileNotFoundError: 'nvcc'` on any machine without the full toolkit
234
+ > installed. The CUDA-suffixed wheels (`-cuda12x`, `-cuda13x`) are
235
+ > prebuilt binaries — no `nvcc`, no compilation, no toolkit required.
236
+
237
+ **Step 3 — verify the install:**
238
+
239
+ ```bash
240
+ python -c "import gpu4pyscf, cupy; print('GPUs:', cupy.cuda.runtime.getDeviceCount())"
241
+ ```
242
+
243
+ Should print `GPUs: 1` (or more). Once verified, launch QuantUI as usual
244
+ — the Status tab will show "GPU offload: active (NVIDIA {device-name})"
245
+ and result cards will display the compute device.
246
+
247
+ **Method coverage** (per the gpu4pyscf docs):
248
+
249
+ | Method | GPU offload |
250
+ | --- | --- |
251
+ | RHF, UHF, RKS, UKS (any DFT functional), TD-DFT | Yes |
252
+ | MP2, CCSD | Experimental on GPU (auto-offload) |
253
+ | CCSD(T) | CPU only (gpu4pyscf doesn't support GPU triples; QuantUI's dispatcher detects this and skips) |
254
+
255
+ Whenever gpu4pyscf can't offload a particular call, QuantUI falls back
256
+ to CPU automatically and the result card reflects which device ran.
257
+
258
+ ---
259
+
260
+ ## Quick start
261
+
262
+ ```bash
263
+ # Activate your environment
264
+ conda activate quantui
265
+
266
+ # JupyterLab (full IDE — shows code)
267
+ jupyter lab notebooks/molecule_computations.ipynb
268
+
269
+ # Voilà app mode (widget-only UI — code hidden)
270
+ voila notebooks/molecule_computations.ipynb
271
+ ```
272
+
273
+ Open the notebook, pick a molecule, choose a method and basis set, and click
274
+ **Run Calculation**. Results appear directly in the notebook.
275
+
276
+ ---
277
+
278
+ ## Launching QuantUI as an app
279
+
280
+ For the smoothest day-to-day experience, QuantUI ships two double-clickable
281
+ launchers that activate the right conda environment, install the editable
282
+ package on first run (and only re-install when `pyproject.toml` actually
283
+ changes), clear any stale bytecode, start Voilà on port `8867`, and open the
284
+ app in your default browser. Edits to `quantui/*.py` are picked up live with
285
+ no rebuild.
286
+
287
+ | Platform | File | Action |
288
+ | --- | --- | --- |
289
+ | Windows | [`launchers/launch-native.bat`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/launchers/launch-native.bat) | Activates the `quantui` conda env inside WSL Ubuntu, runs Voilà, and opens `http://localhost:8867` |
290
+ | macOS | [`launchers/launch-native.command`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/launchers/launch-native.command) | Activates the local `quantui` conda env directly (no WSL needed) and does the same |
291
+ | Linux / WSL | [`launchers/launch-native.sh`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/launchers/launch-native.sh) | Run `./launchers/launch-native.sh` from a Linux or WSL terminal; activates `quantui` and does the same |
292
+
293
+ All launchers reuse port `8867`, so you can keep the same browser tab pinned
294
+ across platforms. They **auto-detect your conda installation** — miniforge
295
+ (recommended), miniconda, or anaconda, in your home directory or a system
296
+ prefix — so no path editing is needed regardless of which you installed.
297
+
298
+ > **WSL users — clone into the Linux filesystem, not `/mnt/c`.** Running
299
+ > `pip install -e .` (or the launchers) against a repo on the Windows drive
300
+ > (`/mnt/c/...`) fails with `error: [Errno 1] Operation not permitted` because
301
+ > the 9P bridge WSL uses for Windows files doesn't support the file operations
302
+ > an editable build needs — and it's ~10× slower besides. Clone the repo into
303
+ > your WSL home instead and work from there:
304
+ >
305
+ > ```bash
306
+ > git clone https://github.com/The-Schultz-Lab/QuantUI.git ~/GitHub/QuantUI
307
+ > cd ~/GitHub/QuantUI
308
+ > ```
309
+ >
310
+ > Then open it in VS Code with `code .` (installs the WSL server and reopens
311
+ > the window connected to WSL). `launchers/launch-native.sh` resolves its own
312
+ > location, so it works from any clone path.
313
+
314
+ ### Windows — pin to the Start menu
315
+
316
+ 1. Right-click [`launchers/launch-native.bat`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/launchers/launch-native.bat) in
317
+ File Explorer → **Send to** → **Desktop (create shortcut)**.
318
+ 2. Rename the shortcut to something friendly like `QuantUI`.
319
+ 3. *(Optional)* Right-click the shortcut → **Properties** → **Change Icon...**
320
+ and point at `docs\logo.ico` for a proper app icon.
321
+ 4. Move the shortcut into your Start-menu folder so it appears with normal
322
+ apps. Either:
323
+ - press `Win+R`, paste
324
+ `%APPDATA%\Microsoft\Windows\Start Menu\Programs`, and drop the
325
+ shortcut there *(per-user — recommended)*; or
326
+ - paste `%ProgramData%\Microsoft\Windows\Start Menu\Programs` for an
327
+ all-users install.
328
+ 5. Open the Start menu, find **QuantUI**, right-click it, and choose
329
+ **Pin to Start** (or **Pin to taskbar**).
330
+
331
+ You now launch QuantUI like any other Windows app — one click and Voilà opens
332
+ in your browser.
333
+
334
+ ### macOS — pin to the Dock / Launchpad
335
+
336
+ **Quickest:** double-click
337
+ [`launchers/launch-native.command`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/launchers/launch-native.command)
338
+ from Finder. macOS will open Terminal, run the script, and pop the app open
339
+ in your browser. The first launch is gated by Gatekeeper: right-click the
340
+ file → **Open** → **Open** to clear it (one time only).
341
+
342
+ **App-like experience (recommended):** wrap the launcher in a tiny Automator
343
+ application so it lives in Launchpad and pins to the Dock.
344
+
345
+ 1. Open **Automator** (Spotlight → "Automator") → **New Document** →
346
+ **Application**.
347
+ 2. In the actions library on the left, find **Run Shell Script** and drag it
348
+ into the workflow pane on the right.
349
+ 3. Set **Shell** to `/bin/bash` and **Pass input** to **as arguments**, then
350
+ replace the script body with the single line below (adjust the path if
351
+ your clone lives elsewhere):
352
+
353
+ ```bash
354
+ "$HOME/path/to/QuantUI/launchers/launch-native.command"
355
+ ```
356
+
357
+ 4. **File → Save** → name it `QuantUI` → save into `/Applications`.
358
+ 5. *(Optional)* Set a custom icon: in Finder, open `docs/logo.svg` in
359
+ **Preview**, **Edit → Select All → Copy**, then in Finder select the
360
+ new `QuantUI.app`, **File → Get Info**, click the small icon in the
361
+ top-left of the Info window, and **Edit → Paste**.
362
+ 6. Open Launchpad, find **QuantUI**, drag it into the Dock to pin it.
363
+
364
+ You now have a real `.app` you can launch from Spotlight, Launchpad, or the
365
+ Dock — it just runs the `.command` script under the hood, so any
366
+ `quantui/*.py` edits take effect immediately on the next launch.
367
+
368
+ > **Linux users:** the same `launchers/launch-native.command` script works from
369
+ > a terminal — `./launchers/launch-native.command`. To wire it into your desktop
370
+ > environment as a pinned app, create a `.desktop` entry pointing at the
371
+ > script.
372
+
373
+ ---
374
+
375
+ ## Command-line toolkit
376
+
377
+ QuantUI ships a small CLI for inspecting state and generating reports
378
+ from outside the notebook — useful for verifying GPU offload before a
379
+ long run, tailing the event log, and building a usage / speedup
380
+ dashboard. After installation:
381
+
382
+ ```bash
383
+ quantui log tail -n 50 # last 50 events from event_log.jsonl
384
+ quantui gpu check # is GPU offload available right now?
385
+ quantui analytics build --open # build dashboard.html + open in browser
386
+ ```
387
+
388
+ Full reference with all flags and examples: [docs/CLI.md](https://github.com/The-Schultz-Lab/QuantUI/blob/main/docs/CLI.md).
389
+
390
+ ---
391
+
392
+ ## Using QuantUI results in other tools
393
+
394
+ QuantUI's M-EXPORT milestone writes portable companion files alongside
395
+ every result so you can hand-off to Avogadro, IQmol, Jmol, VMD, ASE-GUI,
396
+ or any spreadsheet without screen-scraping. The quick reference:
397
+
398
+ | Goal | QuantUI file | Tool |
399
+ | --- | --- | --- |
400
+ | MOs in 3D, vibrations | `result.molden` | Avogadro 2, IQmol, Jmol |
401
+ | Geometry-opt / PES replay | `trajectory.xyz` or `.traj` | VMD, Avogadro, ASE-GUI |
402
+ | Orbital isosurface | `isosurfaces/<orb>.cube` | Avogadro, VMD, ChimeraX |
403
+ | Spectrum data in Excel | `*_data_*.csv` | Excel, LibreOffice, pandas |
404
+ | Share whole result | `<result>.zip` (Export bundle) | Any unzip tool |
405
+
406
+ Full per-tool walkthrough with troubleshooting: [docs/IMPORTING-INTO-AVOGADRO.md](https://github.com/The-Schultz-Lab/QuantUI/blob/main/docs/IMPORTING-INTO-AVOGADRO.md).
407
+
408
+ ---
409
+
410
+ ## Tutorials
411
+
412
+ Five step-by-step notebooks in [`notebooks/tutorials/`](https://github.com/The-Schultz-Lab/QuantUI/tree/main/notebooks/tutorials/):
413
+
414
+ | Notebook | Topic |
415
+ | --- | --- |
416
+ | [01_first_calculation.ipynb](https://github.com/The-Schultz-Lab/QuantUI/blob/main/notebooks/tutorials/01_first_calculation.ipynb) | Your first RHF calculation |
417
+ | [02_basis_set_study.ipynb](https://github.com/The-Schultz-Lab/QuantUI/blob/main/notebooks/tutorials/02_basis_set_study.ipynb) | Comparing STO-3G, 6-31G, cc-pVDZ |
418
+ | [03_multiplicity_radicals.ipynb](https://github.com/The-Schultz-Lab/QuantUI/blob/main/notebooks/tutorials/03_multiplicity_radicals.ipynb) | Open-shell molecules and UHF |
419
+ | [04_charged_species.ipynb](https://github.com/The-Schultz-Lab/QuantUI/blob/main/notebooks/tutorials/04_charged_species.ipynb) | Ions and charged systems |
420
+ | [05_comparing_results.ipynb](https://github.com/The-Schultz-Lab/QuantUI/blob/main/notebooks/tutorials/05_comparing_results.ipynb) | Side-by-side result analysis |
421
+
422
+ ---
423
+
424
+ ## Supported calculations
425
+
426
+ ### Methods
427
+
428
+ | Method | Type | Best for |
429
+ | --- | --- | --- |
430
+ | RHF | Hartree-Fock | Closed-shell molecules; baseline reference |
431
+ | UHF | Hartree-Fock | Radicals and open-shell systems |
432
+ | B3LYP | DFT hybrid | General organic chemistry (default DFT choice) |
433
+ | PBE | DFT GGA | Large molecules; metals; when speed matters |
434
+ | PBE0 | DFT hybrid | Charge-transfer, band gaps |
435
+ | M06-2X | DFT meta-hybrid | Thermochemistry, barrier heights |
436
+ | wB97X-D | DFT range-sep. + D3 | Non-covalent interactions, excited states |
437
+ | CAM-B3LYP | DFT range-sep. | Charge-transfer UV-Vis, Rydberg states |
438
+ | M06-L | DFT local meta-GGA | Large molecules; transition metals |
439
+ | HSE06 | DFT screened hybrid | Band gaps, large molecules |
440
+ | PBE-D3 | DFT GGA + dispersion | Van der Waals complexes, stacking |
441
+ | MP2 | Post-HF | Accurate energetics for small molecules (O(N⁵)) |
442
+ | CCSD | Post-HF coupled cluster | High-accuracy small-molecule energies (O(N⁶)) |
443
+ | CCSD(T) | Post-HF coupled cluster | Benchmark "gold standard" energies (O(N⁷); CPU only) |
444
+
445
+ ### Calculation types
446
+
447
+ | Type | Output |
448
+ | --- | --- |
449
+ | Single Point | Energy, HOMO-LUMO gap, Mulliken charges, dipole moment |
450
+ | Geometry Opt | Optimised structure, trajectory animation |
451
+ | Frequency | Vibrational frequencies, ZPVE, IR intensities, thermochemistry (H/S/G at 298 K), animated normal modes, IR spectrum chart (stick / Lorentzian broadened) |
452
+ | UV-Vis (TD-DFT) | Excitation energies, oscillator strengths, UV-Vis spectrum plot |
453
+ | NMR Shielding | ¹H and ¹³C chemical shifts relative to TMS via GIAO; tabulated by element |
454
+ | PES Scan | 1D potential energy surface along a bond, angle, or dihedral; energy profile chart; geometry animation at each scan point |
455
+
456
+ ### Basis sets
457
+
458
+ STO-3G (fast, good for learning) → 3-21G → 6-31G / 6-31G\* / 6-31G\*\* →
459
+ cc-pVDZ / cc-pVTZ → def2-SVP / def2-TZVP
460
+
461
+ ---
462
+
463
+ ## Running tests
464
+
465
+ ```bash
466
+ pip install -e ".[dev]"
467
+
468
+ # All tests (Linux/macOS — PySCF available)
469
+ pytest -m "not network"
470
+
471
+ # Skip PySCF-dependent tests (Windows without container)
472
+ pytest -m "not network" \
473
+ --ignore=tests/test_session_calc.py \
474
+ --ignore=tests/test_optimizer.py \
475
+ --ignore=tests/test_preopt.py
476
+ ```
477
+
478
+ ---
479
+
480
+ ## Project structure
481
+
482
+ ```text
483
+ quantui/ Main package
484
+ app.py QuantUIApp — widget orchestration, run dispatch
485
+ app_analysis.py Analysis-tab panel registry + _pop_* methods
486
+ app_builders.py _build_* widget construction
487
+ app_runflow.py _do_run + run/orchestration UI handlers
488
+ app_visualization.py Trajectory / vib / IR / orbital / PES rendering
489
+ app_history.py History tab loaders, replay context
490
+ app_formatters.py Result-card and text formatters
491
+ app_exports.py Export handlers (XYZ/MOL/PDB/script)
492
+ molecule.py Molecule input and validation
493
+ session_calc.py In-session PySCF runner (RHF/UHF/DFT/MP2/PCM)
494
+ freq_calc.py Vibrational frequency + thermochemistry
495
+ ir_plot.py IR spectrum chart (stick / Lorentzian broadened)
496
+ tddft_calc.py TD-DFT UV-Vis excited-state calculations
497
+ nmr_calc.py NMR shielding + ¹H/¹³C chemical shifts
498
+ pes_scan.py 1D potential energy surface scan
499
+ optimizer.py QM geometry optimization with trajectory
500
+ visualization_py3dmol.py 3D viewer (py3Dmol-first; plotlymol fallback)
501
+ viz_backend_router.py Capability-aware backend router (pure function)
502
+ viz_assets.py Offline-safe 3Dmol.js loading (vendored, no CDN)
503
+ user_settings.py Persistent user preferences (~/.quantui/settings.json)
504
+ vib_cache.py On-disk cache of rendered vib-mode HTML
505
+ orbital_visualization.py Orbital energy diagrams + cube-file viewer
506
+ pubchem.py Structure search client (PubChem + RDKit)
507
+ cactus.py NCI CACTUS resolver (fallback structure source)
508
+ structure_providers.py Unified resolver chain with offline fallback
509
+ molecule_library.py Indexed 3-tier bundled molecule library
510
+ comparison.py Side-by-side result tables
511
+ results_storage.py Timestamped result persistence (schema v2)
512
+ calc_log.py Performance + event logging, time estimation
513
+ issue_tracker.py In-app bug-report DB
514
+ benchmarks.py Timing calibration benchmark suite
515
+ config.py Methods, basis sets, solvent/NMR options, presets
516
+ ase_bridge.py ASE structure I/O
517
+ preopt.py RDKit MMFF94/UFF force-field pre-optimization
518
+ data/ Bundled library (SQLite + manifests) + vendored 3Dmol.js
519
+ notebooks/
520
+ molecule_computations.ipynb Main user-facing interface (3-cell launcher)
521
+ tutorials/ Step-by-step guided notebooks (01–05)
522
+ tests/ pytest test suite (~1500 tests; run in parallel via pytest-xdist)
523
+ apptainer/ Container definition for reproducible deployment
524
+ local-setup/ Conda environment definition
525
+ pyproject.toml Package metadata and tool config
526
+ CHANGELOG.md Release history (Keep a Changelog format)
527
+ ```
528
+
529
+ ---
530
+
531
+ ## License
532
+
533
+ [MIT](https://github.com/The-Schultz-Lab/QuantUI/blob/main/LICENSE) — Copyright 2026 The Schultz Lab, North Carolina Central University
@@ -0,0 +1,62 @@
1
+ quantui/__init__.py,sha256=OofYGZrrY8z41EUNLR65LNE5dAPDD_xeom9Z-TknknY,8319
2
+ quantui/analytics.py,sha256=ddIU-NsD3VR6MoJ37a_TtwlB-dZ_EP9D71OuLM-4aMk,22280
3
+ quantui/app.py,sha256=dR9AwiOGoVcIbZzUh2zEjLl2yFr9PkJRl3AB46bnPRw,236247
4
+ quantui/app_analysis.py,sha256=MCnv8J5HIZ82PjopijZWWBGwZzOs58FxWeYhrdHrt6Y,24646
5
+ quantui/app_builders.py,sha256=IWpjGc80kvA4xGCv9Ga0-IdVE1FPCXoIPcgVCdvgJ-w,93807
6
+ quantui/app_exports.py,sha256=yS7W8JKZzNI4XwIeTjdxyyhDDSkC7FwM6CNWFzIxW5I,7362
7
+ quantui/app_formatters.py,sha256=5F3H8DbQFy7824faZm4oKsT8I_1nEZAQIjbe2LbvBFU,21369
8
+ quantui/app_history.py,sha256=TVEpM-Xv_xdckzhMyjGwC0OWEuwsfY5CpBQXH2f63Bo,23789
9
+ quantui/app_runflow.py,sha256=nd_JcqK7-4jnChuZPmkIpAShGnIpxGel4B1q273Hir0,60505
10
+ quantui/app_visualization.py,sha256=ZqYZ4CQodDo5TEeihhSXAZO07sxoeZOTunVvEU60H9Q,94452
11
+ quantui/ase_bridge.py,sha256=dvvM-aqbe9SAGOE_bwtaK_xcS4cwbMfttct37LLggsI,7502
12
+ quantui/benchmarks.py,sha256=dm7FhyY-Q1dUBnPJqzd9eTuMVOaqW8Zxx66nROq3FAg,54104
13
+ quantui/c_stderr.py,sha256=0h4WHTDe4P0pVysh_FjKbEiRps5NDXTa1scaCRwwiRA,4607
14
+ quantui/cactus.py,sha256=PaSl0fprwIJyj41i283z_eYfDClJiLCakpvhu1zoB1g,3406
15
+ quantui/calc_log.py,sha256=IAuwZfcq9CFnGl2ec1N43EG4-mGL-kBzyfrQv4kJwjI,37228
16
+ quantui/calculator.py,sha256=gXzU2cwM0f2Jevlfqauj1LbohHpHL4Vp5_L8XudzeWg,7082
17
+ quantui/cancellation.py,sha256=3F0yXAkoYMEC0cv3PBhboObfsCcXKv_MJv4D8DNJ2CY,3539
18
+ quantui/cli.py,sha256=-7qQNWhdxZ6q-m0FXOAXYnzZdEV7UhDtkiKdAJBFvxc,10463
19
+ quantui/comparison.py,sha256=eQgMlUVA3BQNZlYm4pyXNBoACQr51aKNJKEn4Bu80js,10258
20
+ quantui/config.py,sha256=YxWLsVg_tyqwy0GIM_7KoN_qeYXoMHHqtKoB_cAlTzE,25299
21
+ quantui/descriptor_cards.py,sha256=COjkL6tXaoK5hrClBMtqJ2nyQR2QW-IR2bdXku5WHBk,7499
22
+ quantui/freq_calc.py,sha256=FwzZWD8FcUusZ4TuOG0cyUv_SWnGhA95Q2GzI7HI69o,31472
23
+ quantui/freq_ir_workers.py,sha256=j8wKJahoj-c9qqsaLK5fk5JIHCYkm1yPt9BfbH8dZuE,8850
24
+ quantui/gpu_offload.py,sha256=NesDICXsrLP5U9egm75RYSonqNEVDHDg6WsMSdKwGZU,12119
25
+ quantui/help_content.py,sha256=cwViWuXNCkwoTJVXbuxNe-tXZg4kzEANIw99phkZ3ok,27200
26
+ quantui/ir_plot.py,sha256=htkMrlQ5WEcHeoL3FCeEBUAqMKeNel5I8FdtXyzUkD0,4180
27
+ quantui/issue_tracker.py,sha256=6i4YIZMhVO77ySc5w4OFjYzWVnCdPJKwlXEKOw779W4,4905
28
+ quantui/live_log.py,sha256=gxXLJ9LjXUPvFvVcQ32f0QG2PKFeznACrBytvA-2ho8,15791
29
+ quantui/log_utils.py,sha256=NHBJKBJEglBDc0b49MWmtJLfyEudy2SktbZfpENg9Ng,16406
30
+ quantui/molecule.py,sha256=BNcSvDVVcKTh_v-SL3x1Qa8C3bq_BLk10Fixkvvvclk,19442
31
+ quantui/molecule_library.py,sha256=fdk10SLM2jbxaY2n5fYYOJVLgngnwORaGJXFIP9kxNw,15729
32
+ quantui/nmr_calc.py,sha256=grqeqSxmCIy0fMczfJ2baTCcM8jXE1OUTEwdN8rwJ4o,17181
33
+ quantui/optimizer.py,sha256=ubqMP-S_z1sjyzrAfTyQdR6zR2THyY9keP9QwwjfS5E,26433
34
+ quantui/orbital_visualization.py,sha256=8tv6YVwb7d0wDyrCt_12nZ1uHABPQKjy5GUkNnra5l8,33285
35
+ quantui/pes_scan.py,sha256=50xub7eUHEtRzSrq5DeJM-wA6qBG9H0JyIfw-2tu3zg,16777
36
+ quantui/preopt.py,sha256=8NNmyNXX3ZaE7A8BFJ0JJxA9WTZgrOxzqWNaZvxlSQU,14122
37
+ quantui/progress.py,sha256=mKf9iXkPabJFCeBff2KtzR4xgU-TuL3myjWAh3pH5FQ,3329
38
+ quantui/pubchem.py,sha256=9yhHtnKAQp1L2zID4bE4-Tgj_MYV4s9nO9-A_C8PU6I,40752
39
+ quantui/reorganization_energy.py,sha256=Yfymvrl4686xJ-4ejLVCVXeUXf86E_wj09XudUU7Awc,16576
40
+ quantui/results_storage.py,sha256=v-PJvSJcRx35LZRtsj8RTGUgd9L10NGlxgeakNN9WLo,31144
41
+ quantui/security.py,sha256=nlNdn7CPMskWddAT1Z7e2XNPec_Ehg8rWqSGyC47zSo,468
42
+ quantui/session_calc.py,sha256=Fvy4K8T2ZYrvhkSJlAUae3Tqv_E_cWDvcnFMTyjyWiw,25281
43
+ quantui/structure_providers.py,sha256=zN_o8q0FBeYVLzFyVpvQmNJpWHPateYxXXdbPoBWQGU,10611
44
+ quantui/tddft_calc.py,sha256=UVvxf1DngpXd_IfhXuQZm1vxzzP-jezuDhBevwWh95g,11305
45
+ quantui/user_settings.py,sha256=GcLKfzoahP9KT91AS94bUbJeYI2kRiHFNev4WvP_La4,8472
46
+ quantui/utils.py,sha256=-ruTrcgFpD9oZryzci9L4FHPc1VjZoGKBG4EKNm3Pyg,7779
47
+ quantui/vib_cache.py,sha256=UFLT8djCVRcWwKsGXmtnsHgxIg6daTAw-ve90aea_wY,7009
48
+ quantui/visualization_py3dmol.py,sha256=ndyFI44acmNJdkLHD24_zMVPQc_4IQ_rAjAjT74gpFg,19834
49
+ quantui/viz_assets.py,sha256=OwTFuzNCB-M28fG8hs8rnAaKHxylbW5vLUlluHohDk0,4319
50
+ quantui/viz_backend_router.py,sha256=VsBkuMrb3cAv-VqQYeZVO9aQnH_iOUQtrojvpmqHPAg,9038
51
+ quantui/data/js/3Dmol-min.js,sha256=eMceGI67LzunyBhCdmGChMmHed9aLCxUMdf3N7uGKVA,526160
52
+ quantui/data/js/3Dmol-min.js.LICENSE.txt,sha256=Fkrt_wYI8KebdP6Wd8BWOPlQgB7j9xFTbe90dit9Gm8,120
53
+ quantui/data/library/library.sqlite,sha256=AtHiA5x61MnFgFXjmtS5T7Q3H7sR4SXx5QVg0oycNv4,876544
54
+ quantui/data/manifests/bulk_qm9.json,sha256=lJ1R0FXmVCScmIVSLoRqpx2JK7WNXfSpg3QR4NWyMWA,1536880
55
+ quantui/data/manifests/curated.json,sha256=jFNXizdRBPPdV0QMoFFtrq1TM1Keft7XlV6dwSecwO8,183906
56
+ quantui/data/manifests/presets.json,sha256=0HcT_b5mj3Eol44ix8YJQRKUMef1ql4ZeMOaNjDRBWk,11272
57
+ quantui-0.5.1.dist-info/licenses/LICENSE,sha256=H1LyHsyZUV-Hf_403Mfhs66YiAuugvEArffTln3aMHE,1107
58
+ quantui-0.5.1.dist-info/METADATA,sha256=dNV8vKqa410tVp7pE4SIj0ic5G01E4UAfzgyypV4_KE,25219
59
+ quantui-0.5.1.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
60
+ quantui-0.5.1.dist-info/entry_points.txt,sha256=u6Eknh5ZWAFUYutda29_OACcldQ5Pti_LJyPYZHPbrI,45
61
+ quantui-0.5.1.dist-info/top_level.txt,sha256=1PjuNdq6RbDdrM9Q5y5k5Lu-UodlzUWjw_bjNXh3-j4,8
62
+ quantui-0.5.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (83.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ quantui = quantui.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 The Schultz Lab, North Carolina Central University
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ quantui