quantui 0.8.2__tar.gz → 0.9.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.9.0}/CHANGELOG.md +92 -1
- {quantui-0.8.2/quantui.egg-info → quantui-0.9.0}/PKG-INFO +68 -7
- {quantui-0.8.2 → quantui-0.9.0}/README.md +57 -6
- {quantui-0.8.2 → quantui-0.9.0}/pyproject.toml +52 -5
- {quantui-0.8.2 → quantui-0.9.0}/quantui/__init__.py +1 -1
- {quantui-0.8.2 → quantui-0.9.0}/quantui/app.py +316 -36
- {quantui-0.8.2 → quantui-0.9.0}/quantui/app_analysis.py +2 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/app_builders.py +128 -7
- {quantui-0.8.2 → quantui-0.9.0}/quantui/app_formatters.py +216 -19
- {quantui-0.8.2 → quantui-0.9.0}/quantui/app_runflow.py +82 -3
- {quantui-0.8.2 → quantui-0.9.0}/quantui/app_slurm.py +154 -13
- {quantui-0.8.2 → quantui-0.9.0}/quantui/app_visualization.py +39 -10
- {quantui-0.8.2 → quantui-0.9.0}/quantui/backends/cluster_config.py +60 -6
- {quantui-0.8.2 → quantui-0.9.0}/quantui/backends/registry.py +140 -4
- {quantui-0.8.2 → quantui-0.9.0}/quantui/backends/slurm.py +99 -29
- {quantui-0.8.2 → quantui-0.9.0}/quantui/backends/slurm_ingest.py +153 -12
- {quantui-0.8.2 → quantui-0.9.0}/quantui/backends/slurm_utils.py +81 -1
- quantui-0.9.0/quantui/backends/worker.py +866 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/backends/worker_payload.py +86 -1
- {quantui-0.8.2 → quantui-0.9.0}/quantui/calculator.py +29 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/checkpoint.py +161 -1
- {quantui-0.8.2 → quantui-0.9.0}/quantui/cli.py +267 -16
- {quantui-0.8.2 → quantui-0.9.0}/quantui/config.py +139 -17
- quantui-0.9.0/quantui/engines/__init__.py +150 -0
- quantui-0.9.0/quantui/engines/base.py +193 -0
- quantui-0.9.0/quantui/engines/pyfock_engine.py +402 -0
- quantui-0.9.0/quantui/engines/pyscf_engine.py +163 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/freq_calc.py +245 -66
- quantui-0.9.0/quantui/freq_displacement_ids.py +79 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/freq_ir_workers.py +119 -3
- {quantui-0.8.2 → quantui-0.9.0}/quantui/freq_raman_workers.py +52 -5
- {quantui-0.8.2 → quantui-0.9.0}/quantui/help_content.py +21 -3
- {quantui-0.8.2 → quantui-0.9.0}/quantui/ir_plot.py +59 -8
- {quantui-0.8.2 → quantui-0.9.0}/quantui/log_utils.py +9 -4
- {quantui-0.8.2 → quantui-0.9.0}/quantui/nmr_calc.py +18 -2
- {quantui-0.8.2 → quantui-0.9.0}/quantui/optimizer.py +187 -25
- {quantui-0.8.2 → quantui-0.9.0}/quantui/orbital_visualization.py +141 -14
- {quantui-0.8.2 → quantui-0.9.0}/quantui/pes_scan.py +66 -2
- quantui-0.9.0/quantui/pyfock_gpu.py +118 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/raman_calc.py +108 -29
- {quantui-0.8.2 → quantui-0.9.0}/quantui/raman_plot.py +16 -5
- {quantui-0.8.2 → quantui-0.9.0}/quantui/reorganization_energy.py +28 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/results_storage.py +95 -5
- quantui-0.9.0/quantui/scf_robust.py +167 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/session_calc.py +224 -59
- {quantui-0.8.2 → quantui-0.9.0}/quantui/tddft_calc.py +109 -11
- {quantui-0.8.2 → quantui-0.9.0}/quantui/theme.py +4 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/user_settings.py +16 -0
- {quantui-0.8.2 → quantui-0.9.0/quantui.egg-info}/PKG-INFO +68 -7
- {quantui-0.8.2 → quantui-0.9.0}/quantui.egg-info/SOURCES.txt +8 -1
- {quantui-0.8.2 → quantui-0.9.0}/quantui.egg-info/requires.txt +13 -0
- quantui-0.8.2/quantui/backends/worker.py +0 -479
- {quantui-0.8.2 → quantui-0.9.0}/LICENSE +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/MANIFEST.in +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/SECURITY.md +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/analytics.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/app_exports.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/app_history.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/app_launcher.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/app_measurement.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/app_pes_pick.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/app_xyz_input.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/ase_bridge.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/backends/__init__.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/backends/base.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/backends/cluster_security.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/backends/dispatch.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/backends/local.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/backends/slurm_errors.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/benchmarks.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/c_stderr.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/cactus.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/calc_log.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/cancellation.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/comparison.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/connectivity.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/data/js/3Dmol-min.js +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/data/js/3Dmol-min.js.LICENSE.txt +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/data/library/library.sqlite +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/data/manifests/bulk_qm9.json +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/data/manifests/curated.json +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/data/manifests/inorganic.json +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/data/manifests/presets.json +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/density_fitting.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/descriptor_cards.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/estimator_eval.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/gpu_offload.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/inorganic_guards.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/issue_tracker.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/live_log.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/measurement.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/molecule.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/molecule_library.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/mulliken_plot.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/nmr_plot.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/pes_scan_ui.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/populations_overlay.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/preopt.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/progress.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/pubchem.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/security.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/spin_presets.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/structure_providers.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/utils.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/vib_cache.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/visualization_py3dmol.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/viz_assets.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/viz_backend_router.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui/xyz_input.py +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui.egg-info/dependency_links.txt +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui.egg-info/entry_points.txt +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/quantui.egg-info/top_level.txt +0 -0
- {quantui-0.8.2 → quantui-0.9.0}/setup.cfg +0 -0
|
@@ -7,6 +7,92 @@ and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.ht
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.9.0] - 2026-09-26
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **SLURM job folders with per-attempt subfolders (M-JOBDIRS)** — each cluster
|
|
15
|
+
job gets a readable folder (`<formula>_<calc>_<method>_<basis>`, or the
|
|
16
|
+
optional **Job name** on the Calculate tab) that doubles as the SLURM job
|
|
17
|
+
name. Every run of its `submit.slurm` creates a new `attempt-NN_job<id>/`
|
|
18
|
+
subfolder, so **Resubmit** (new, Cluster Jobs tab) and a hand-run
|
|
19
|
+
`sbatch submit.slurm` never overwrite an earlier attempt. The job root is
|
|
20
|
+
configurable in **System Settings** (or `QUANTUI_STAGING_DIR`), for
|
|
21
|
+
clusters with small home quotas.
|
|
22
|
+
- **SLURM results marked in History** — entries show
|
|
23
|
+
`🖥 SLURM <job id>·a<attempt>` and the result card has a "Ran on" row with
|
|
24
|
+
the job folder. Hand-run attempts are added to History on the next Cluster
|
|
25
|
+
Jobs refresh; failed attempts stay in the job folder only.
|
|
26
|
+
- **GPU offload for geometry optimization** — gpu4pyscf offload now reaches
|
|
27
|
+
every SCF/gradient step of a geometry optimization, not just single points.
|
|
28
|
+
A separate, guarded CuPy GPU path for PyFock, GPU provenance
|
|
29
|
+
(`gpu_used` / `gpu_name`) on optimization results, and
|
|
30
|
+
`quantui gpu check --engine pyfock`.
|
|
31
|
+
- **PyFock backend (M-PYFOCK)** — Phase 1: normalized engine dispatch,
|
|
32
|
+
native-Windows PBE/def2 single points for neutral closed-shell molecules,
|
|
33
|
+
capability-driven calculation menus, engine provenance in logs and saved
|
|
34
|
+
results, a pinned `pyfock` install extra, and a Windows water parity gate
|
|
35
|
+
against PySCF; unsupported hybrids, ions, open-shell systems, solvent,
|
|
36
|
+
checkpoints and orbital analysis are rejected before compute. Phase 2:
|
|
37
|
+
geometry optimization via PyFock's ASE calculator with analytical
|
|
38
|
+
density-fitted gradients; results keep orbital arrays, Mulliken charges,
|
|
39
|
+
dipoles, and engine-native cube generation.
|
|
40
|
+
- **`quantui submit` CLI** — submit request JSON files to SLURM from a script
|
|
41
|
+
(with `--job-name`, `--dry-run`, resource and mail options); resource
|
|
42
|
+
estimates account for parallel IR/Raman workers.
|
|
43
|
+
- **Checkpoint/resume for batch and Frequency runs** — the SLURM batch worker
|
|
44
|
+
resumes Geometry Optimization, PES Scan and Frequency runs from their
|
|
45
|
+
checkpoints; Frequency (interactive and batch) banks each finished
|
|
46
|
+
displacement so a restart skips completed ones.
|
|
47
|
+
- **SCF rescue for hard open-shell cases (M-SCF-ROBUST)** — one shared
|
|
48
|
+
convergence-rescue helper at every SCF call site, with provenance lines in
|
|
49
|
+
the log.
|
|
50
|
+
- **RKS/UKS/RHF/UHF label** on every result card, live and saved.
|
|
51
|
+
|
|
52
|
+
### Changed
|
|
53
|
+
|
|
54
|
+
- **SLURM output layout** — new submissions use the job-folder layout above
|
|
55
|
+
instead of `~/.quantui/staging/<request_id>/`. Jobs submitted earlier keep
|
|
56
|
+
their old folders and still list, reconnect and ingest.
|
|
57
|
+
- **Unconverged results are no longer reported as converged** — CCSD/CCSD(T)
|
|
58
|
+
amplitudes, TD-DFT roots, frequency Hessians, and optimizer gradients from an
|
|
59
|
+
unconverged SCF are now flagged instead of shown as a clean result. Saved
|
|
60
|
+
cards name the step that failed rather than blaming the SCF.
|
|
61
|
+
- **Parallel IR/Raman worker pools** are sized from the SLURM/cgroup
|
|
62
|
+
allocation, not the node's full CPU count.
|
|
63
|
+
|
|
64
|
+
### Fixed
|
|
65
|
+
|
|
66
|
+
- **Thermochemistry** — entropy units no longer corrupt the Gibbs free energy;
|
|
67
|
+
thermochemistry is saved and shown again when a frequency result is
|
|
68
|
+
reopened from History.
|
|
69
|
+
- **Raman activities** — added the missing a₀³→ų polarizability conversion.
|
|
70
|
+
- **Functionals** — ωB97X-D resolves to the real functional (not `wb97x`+D3),
|
|
71
|
+
and the D3 dispersion status is shown instead of silently dropped.
|
|
72
|
+
- **ECP systems** — ECPs are passed to parallel IR/Raman workers and embedded
|
|
73
|
+
in exported scripts; charge/spin inference handles ROHF and ECP systems.
|
|
74
|
+
- **Exported scripts** for MP2/CCSD/CCSD(T) now run the requested method
|
|
75
|
+
instead of a DFT branch.
|
|
76
|
+
- **Solvation** — PCM requested for a calc type that cannot use it is
|
|
77
|
+
rejected instead of silently ignored; solvated Geometry Optimization works
|
|
78
|
+
in the SLURM batch worker.
|
|
79
|
+
- **SLURM ingest** keeps computed properties and provenance (dipole, charges,
|
|
80
|
+
SCF variant, solvent, GPU); reconnecting to a finished SLURM job no longer
|
|
81
|
+
saves a second copy of its result to History.
|
|
82
|
+
- **SLURM scripts** quote paths containing spaces, and no longer export an
|
|
83
|
+
unused `QUANTUI_RESULTS_DIR`.
|
|
84
|
+
- **Checkpoints** — PES Scan checkpoint identity is coordinate-aware, and the
|
|
85
|
+
interactive Frequency run uses its own checkpoint.
|
|
86
|
+
- **NMR** fallback-reference metadata is saved and shown.
|
|
87
|
+
- **Parallel IR/Raman workers** honor density fitting and SCF rescue.
|
|
88
|
+
- **Batch results** carry Mulliken charges and dipoles; UHF Molden export is
|
|
89
|
+
complete.
|
|
90
|
+
- **Spectra** — the x-range covers every real mode; exported NPZ files carry
|
|
91
|
+
the fields the cube helper needs, and cube provenance can't be overwritten.
|
|
92
|
+
- **Packaging** — the built wheel ships `quantui.engines`.
|
|
93
|
+
- **Theme** — Plotly axis and zero lines follow the active palette instead of
|
|
94
|
+
staying pale blue-gray on dark themes.
|
|
95
|
+
|
|
10
96
|
## [0.8.2] - 2026-08-30
|
|
11
97
|
|
|
12
98
|
### Added
|
|
@@ -848,7 +934,12 @@ Initial public scaffolding of the QuantUI package: `quantui` package with
|
|
|
848
934
|
`calculator.py`, basic notebook launcher, Apptainer container definition,
|
|
849
935
|
MIT license, and project metadata.
|
|
850
936
|
|
|
851
|
-
[Unreleased]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.
|
|
937
|
+
[Unreleased]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.9.0...HEAD
|
|
938
|
+
[0.9.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.8.2...v0.9.0
|
|
939
|
+
[0.8.2]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.8.1...v0.8.2
|
|
940
|
+
[0.8.1]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.8.0...v0.8.1
|
|
941
|
+
[0.8.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.7.0...v0.8.0
|
|
942
|
+
[0.7.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.6.1...v0.7.0
|
|
852
943
|
[0.6.1]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.6.0...v0.6.1
|
|
853
944
|
[0.6.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.5.2...v0.6.0
|
|
854
945
|
[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.9.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,11 @@ 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
|
+
Provides-Extra: pyfock
|
|
65
|
+
Requires-Dist: pyfock<0.3,>=0.1.7; extra == "pyfock"
|
|
66
|
+
Requires-Dist: ase<4,>=3.22.0; extra == "pyfock"
|
|
67
|
+
Requires-Dist: scipy<2,>=1.10; extra == "pyfock"
|
|
68
|
+
Requires-Dist: numba<0.68,>=0.57; extra == "pyfock"
|
|
64
69
|
Provides-Extra: ase
|
|
65
70
|
Requires-Dist: ase<4,>=3.22.0; extra == "ase"
|
|
66
71
|
Provides-Extra: xtb
|
|
@@ -77,6 +82,10 @@ Provides-Extra: gpu-cuda13x
|
|
|
77
82
|
Requires-Dist: gpu4pyscf-cuda13x; extra == "gpu-cuda13x"
|
|
78
83
|
Requires-Dist: cupy-cuda13x; extra == "gpu-cuda13x"
|
|
79
84
|
Requires-Dist: cutensor-cu13; extra == "gpu-cuda13x"
|
|
85
|
+
Provides-Extra: pyfock-gpu-cuda12x
|
|
86
|
+
Requires-Dist: cupy-cuda12x; extra == "pyfock-gpu-cuda12x"
|
|
87
|
+
Provides-Extra: pyfock-gpu-cuda13x
|
|
88
|
+
Requires-Dist: cupy-cuda13x; extra == "pyfock-gpu-cuda13x"
|
|
80
89
|
Provides-Extra: notebook
|
|
81
90
|
Requires-Dist: nbmake>=1.4.0; extra == "notebook"
|
|
82
91
|
Requires-Dist: ipykernel<8,>=6.0.0; extra == "notebook"
|
|
@@ -85,6 +94,7 @@ Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
|
85
94
|
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
86
95
|
Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
|
|
87
96
|
Requires-Dist: pytest-xdist>=3.0.0; extra == "dev"
|
|
97
|
+
Requires-Dist: build>=1.0.0; extra == "dev"
|
|
88
98
|
Requires-Dist: mypy<2.4,>=1.10; extra == "dev"
|
|
89
99
|
Requires-Dist: types-requests>=2.28.0; extra == "dev"
|
|
90
100
|
Requires-Dist: black~=26.5.1; python_version >= "3.10" and extra == "dev"
|
|
@@ -102,7 +112,8 @@ Dynamic: license-file
|
|
|
102
112
|
[](https://www.python.org)
|
|
103
113
|
|
|
104
114
|
A powerful open-source frontend for DFT and post-HF quantum chemistry.
|
|
105
|
-
QuantUI puts [PySCF](https://pyscf.org)
|
|
115
|
+
QuantUI puts [PySCF](https://pyscf.org) and a guarded
|
|
116
|
+
[PyFock](https://github.com/manassharma07/PyFock) subset behind an interactive Jupyter/Voilà
|
|
106
117
|
UI so you can build molecules, run calculations locally, and visualize the
|
|
107
118
|
results — no cluster account, no SLURM, no queueing.
|
|
108
119
|
|
|
@@ -166,7 +177,10 @@ Real output from QuantUI, straight from the app:
|
|
|
166
177
|
your default-backend preference between sessions
|
|
167
178
|
- **In-session calculations** — RHF, UHF, 9 DFT functionals, MP2, CCSD,
|
|
168
179
|
CCSD(T), NMR shielding, TD-DFT UV-Vis, and 1D PES scans via PySCF, running
|
|
169
|
-
in your Python kernel
|
|
180
|
+
in your Python kernel. Optional PyFock 0.1.x adds native-Windows PBE
|
|
181
|
+
single points and geometry optimizations for neutral, closed-shell molecules
|
|
182
|
+
with def2-SVP/def2-TZVP, including orbital and population analysis;
|
|
183
|
+
engine capabilities automatically gate the setup menus
|
|
170
184
|
- **Implicit solvent** — PCM solvation (Water, Ethanol, THF, DMSO,
|
|
171
185
|
Acetonitrile) via a single checkbox
|
|
172
186
|
- **Rich results** — total energy, HOMO-LUMO gap, Mulliken charges, dipole
|
|
@@ -199,10 +213,12 @@ Real output from QuantUI, straight from the app:
|
|
|
199
213
|
- **Plot export** — save IR, UV-Vis, PES, and orbital diagrams as standalone
|
|
200
214
|
HTML
|
|
201
215
|
- **Optional GPU acceleration** — when [gpu4pyscf](https://github.com/pyscf/gpu4pyscf)
|
|
202
|
-
and a CUDA-capable NVIDIA GPU are present, SCF calculations auto-offload
|
|
216
|
+
and a CUDA-capable NVIDIA GPU are present, single-point SCF calculations auto-offload
|
|
203
217
|
via `mf.to_gpu()` (RHF / UHF / RKS / UKS supported; CCSD(T) stays on CPU).
|
|
204
218
|
The Status tab + every result card show which compute device was used.
|
|
205
219
|
Set `QUANTUI_DISABLE_GPU=1` to force CPU even when the GPU is available.
|
|
220
|
+
Geometry-optimization SCF steps are currently CPU-only; that limitation was
|
|
221
|
+
reproduced on real GPU hardware and remains an open optimizer-path fix.
|
|
206
222
|
- **Timing calibration** — one-click benchmark suite populates the time
|
|
207
223
|
estimator with real machine data so predictions are accurate from the first run
|
|
208
224
|
- **Voilà app mode** — serve the notebook as a polished widget-only UI (no
|
|
@@ -217,11 +233,29 @@ Real output from QuantUI, straight from the app:
|
|
|
217
233
|
| --- | --- | --- |
|
|
218
234
|
| Linux / macOS | Full | PySCF installs natively |
|
|
219
235
|
| WSL (Windows) | Full | Use an Ubuntu WSL environment |
|
|
220
|
-
| Windows (native) | Partial |
|
|
236
|
+
| Windows (native) | Partial | PyFock runs guarded PBE single points and geometry optimizations; use WSL/Apptainer for the full PySCF feature set |
|
|
221
237
|
|
|
222
|
-
### Windows users:
|
|
238
|
+
### Windows users: native PyFock or the full container
|
|
223
239
|
|
|
224
|
-
|
|
240
|
+
For native Windows, install the PyFock subset:
|
|
241
|
+
|
|
242
|
+
```powershell
|
|
243
|
+
py -3.11 -m venv .venv
|
|
244
|
+
.venv\Scripts\Activate.ps1
|
|
245
|
+
python -m pip install "quantui[pyfock,ase,app]"
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
In **System Settings → Quantum engine**, select PyFock (or leave Automatic
|
|
249
|
+
selected when PySCF is absent). The validated subset supports neutral,
|
|
250
|
+
closed-shell PBE single points and geometry optimizations with def2-SVP or
|
|
251
|
+
def2-TZVP. Density fitting is always enabled, analytical gradients drive
|
|
252
|
+
optimization, and orbital, Mulliken, dipole, and cube analysis are retained.
|
|
253
|
+
Hybrids, charged/open-shell systems, solvent, and checkpoint warm starts remain
|
|
254
|
+
PySCF-only. Optional PyFock GPU acceleration is available separately through
|
|
255
|
+
CuPy; geometry optimization uses numerical forces on GPU because PyFock 0.1.7
|
|
256
|
+
does not yet provide analytical GPU gradients.
|
|
257
|
+
|
|
258
|
+
PySCF does not install on Windows natively. For the complete feature set, the
|
|
225
259
|
[`apptainer/quantui.def`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/quantui.def) container bundles
|
|
226
260
|
the complete environment and runs anywhere Apptainer/Singularity is available.
|
|
227
261
|
See [`apptainer/README.md`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/README.md) for build and run instructions.
|
|
@@ -247,6 +281,12 @@ pip install -e ".[pyscf,ase,app]"
|
|
|
247
281
|
python -m pip install quantui[pyscf,ase,app]
|
|
248
282
|
```
|
|
249
283
|
|
|
284
|
+
For the limited native-Windows engine instead:
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
python -m pip install quantui[pyfock,ase,app]
|
|
288
|
+
```
|
|
289
|
+
|
|
250
290
|
### Option C — Apptainer container (Windows / reproducible deployment)
|
|
251
291
|
|
|
252
292
|
See [apptainer/README.md](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/README.md).
|
|
@@ -307,6 +347,27 @@ and result cards will display the compute device.
|
|
|
307
347
|
Whenever gpu4pyscf can't offload a particular call, QuantUI falls back
|
|
308
348
|
to CPU automatically and the result card reflects which device ran.
|
|
309
349
|
|
|
350
|
+
### Optional: PyFock GPU acceleration
|
|
351
|
+
|
|
352
|
+
PyFock uses its own CuPy/Numba CUDA implementation; it does not use
|
|
353
|
+
`gpu4pyscf`. Install the PyFock engine and the CUDA-suffixed CuPy extra that
|
|
354
|
+
matches the NVIDIA driver reported by `nvidia-smi`:
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
# CUDA 13.x driver
|
|
358
|
+
pip install "quantui[pyfock,pyfock-gpu-cuda13x]"
|
|
359
|
+
|
|
360
|
+
# CUDA 12.x driver
|
|
361
|
+
pip install "quantui[pyfock,pyfock-gpu-cuda12x]"
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
PyFock GPU use is guarded independently: QuantUI requires CuPy to import and
|
|
365
|
+
report a CUDA device, and still honors the Settings GPU toggle and
|
|
366
|
+
`QUANTUI_DISABLE_GPU=1`. If the probe fails, PyFock falls back to CPU and
|
|
367
|
+
reports the reason. GPU single points use PyFock's GPU SCF/integral/XC path;
|
|
368
|
+
GPU geometry optimizations use numerical finite-difference forces because the
|
|
369
|
+
installed PyFock release's analytical gradient implementation is CPU-only.
|
|
370
|
+
|
|
310
371
|
### Optional: GFN-FF metal pre-optimization (xtb)
|
|
311
372
|
|
|
312
373
|
The classical (MMFF/UFF) pre-optimizer relies on RDKit's organic valence
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
[](https://www.python.org)
|
|
8
8
|
|
|
9
9
|
A powerful open-source frontend for DFT and post-HF quantum chemistry.
|
|
10
|
-
QuantUI puts [PySCF](https://pyscf.org)
|
|
10
|
+
QuantUI puts [PySCF](https://pyscf.org) and a guarded
|
|
11
|
+
[PyFock](https://github.com/manassharma07/PyFock) subset behind an interactive Jupyter/Voilà
|
|
11
12
|
UI so you can build molecules, run calculations locally, and visualize the
|
|
12
13
|
results — no cluster account, no SLURM, no queueing.
|
|
13
14
|
|
|
@@ -71,7 +72,10 @@ Real output from QuantUI, straight from the app:
|
|
|
71
72
|
your default-backend preference between sessions
|
|
72
73
|
- **In-session calculations** — RHF, UHF, 9 DFT functionals, MP2, CCSD,
|
|
73
74
|
CCSD(T), NMR shielding, TD-DFT UV-Vis, and 1D PES scans via PySCF, running
|
|
74
|
-
in your Python kernel
|
|
75
|
+
in your Python kernel. Optional PyFock 0.1.x adds native-Windows PBE
|
|
76
|
+
single points and geometry optimizations for neutral, closed-shell molecules
|
|
77
|
+
with def2-SVP/def2-TZVP, including orbital and population analysis;
|
|
78
|
+
engine capabilities automatically gate the setup menus
|
|
75
79
|
- **Implicit solvent** — PCM solvation (Water, Ethanol, THF, DMSO,
|
|
76
80
|
Acetonitrile) via a single checkbox
|
|
77
81
|
- **Rich results** — total energy, HOMO-LUMO gap, Mulliken charges, dipole
|
|
@@ -104,10 +108,12 @@ Real output from QuantUI, straight from the app:
|
|
|
104
108
|
- **Plot export** — save IR, UV-Vis, PES, and orbital diagrams as standalone
|
|
105
109
|
HTML
|
|
106
110
|
- **Optional GPU acceleration** — when [gpu4pyscf](https://github.com/pyscf/gpu4pyscf)
|
|
107
|
-
and a CUDA-capable NVIDIA GPU are present, SCF calculations auto-offload
|
|
111
|
+
and a CUDA-capable NVIDIA GPU are present, single-point SCF calculations auto-offload
|
|
108
112
|
via `mf.to_gpu()` (RHF / UHF / RKS / UKS supported; CCSD(T) stays on CPU).
|
|
109
113
|
The Status tab + every result card show which compute device was used.
|
|
110
114
|
Set `QUANTUI_DISABLE_GPU=1` to force CPU even when the GPU is available.
|
|
115
|
+
Geometry-optimization SCF steps are currently CPU-only; that limitation was
|
|
116
|
+
reproduced on real GPU hardware and remains an open optimizer-path fix.
|
|
111
117
|
- **Timing calibration** — one-click benchmark suite populates the time
|
|
112
118
|
estimator with real machine data so predictions are accurate from the first run
|
|
113
119
|
- **Voilà app mode** — serve the notebook as a polished widget-only UI (no
|
|
@@ -122,11 +128,29 @@ Real output from QuantUI, straight from the app:
|
|
|
122
128
|
| --- | --- | --- |
|
|
123
129
|
| Linux / macOS | Full | PySCF installs natively |
|
|
124
130
|
| WSL (Windows) | Full | Use an Ubuntu WSL environment |
|
|
125
|
-
| Windows (native) | Partial |
|
|
131
|
+
| Windows (native) | Partial | PyFock runs guarded PBE single points and geometry optimizations; use WSL/Apptainer for the full PySCF feature set |
|
|
126
132
|
|
|
127
|
-
### Windows users:
|
|
133
|
+
### Windows users: native PyFock or the full container
|
|
128
134
|
|
|
129
|
-
|
|
135
|
+
For native Windows, install the PyFock subset:
|
|
136
|
+
|
|
137
|
+
```powershell
|
|
138
|
+
py -3.11 -m venv .venv
|
|
139
|
+
.venv\Scripts\Activate.ps1
|
|
140
|
+
python -m pip install "quantui[pyfock,ase,app]"
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
In **System Settings → Quantum engine**, select PyFock (or leave Automatic
|
|
144
|
+
selected when PySCF is absent). The validated subset supports neutral,
|
|
145
|
+
closed-shell PBE single points and geometry optimizations with def2-SVP or
|
|
146
|
+
def2-TZVP. Density fitting is always enabled, analytical gradients drive
|
|
147
|
+
optimization, and orbital, Mulliken, dipole, and cube analysis are retained.
|
|
148
|
+
Hybrids, charged/open-shell systems, solvent, and checkpoint warm starts remain
|
|
149
|
+
PySCF-only. Optional PyFock GPU acceleration is available separately through
|
|
150
|
+
CuPy; geometry optimization uses numerical forces on GPU because PyFock 0.1.7
|
|
151
|
+
does not yet provide analytical GPU gradients.
|
|
152
|
+
|
|
153
|
+
PySCF does not install on Windows natively. For the complete feature set, the
|
|
130
154
|
[`apptainer/quantui.def`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/quantui.def) container bundles
|
|
131
155
|
the complete environment and runs anywhere Apptainer/Singularity is available.
|
|
132
156
|
See [`apptainer/README.md`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/README.md) for build and run instructions.
|
|
@@ -152,6 +176,12 @@ pip install -e ".[pyscf,ase,app]"
|
|
|
152
176
|
python -m pip install quantui[pyscf,ase,app]
|
|
153
177
|
```
|
|
154
178
|
|
|
179
|
+
For the limited native-Windows engine instead:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
python -m pip install quantui[pyfock,ase,app]
|
|
183
|
+
```
|
|
184
|
+
|
|
155
185
|
### Option C — Apptainer container (Windows / reproducible deployment)
|
|
156
186
|
|
|
157
187
|
See [apptainer/README.md](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/README.md).
|
|
@@ -212,6 +242,27 @@ and result cards will display the compute device.
|
|
|
212
242
|
Whenever gpu4pyscf can't offload a particular call, QuantUI falls back
|
|
213
243
|
to CPU automatically and the result card reflects which device ran.
|
|
214
244
|
|
|
245
|
+
### Optional: PyFock GPU acceleration
|
|
246
|
+
|
|
247
|
+
PyFock uses its own CuPy/Numba CUDA implementation; it does not use
|
|
248
|
+
`gpu4pyscf`. Install the PyFock engine and the CUDA-suffixed CuPy extra that
|
|
249
|
+
matches the NVIDIA driver reported by `nvidia-smi`:
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
# CUDA 13.x driver
|
|
253
|
+
pip install "quantui[pyfock,pyfock-gpu-cuda13x]"
|
|
254
|
+
|
|
255
|
+
# CUDA 12.x driver
|
|
256
|
+
pip install "quantui[pyfock,pyfock-gpu-cuda12x]"
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
PyFock GPU use is guarded independently: QuantUI requires CuPy to import and
|
|
260
|
+
report a CUDA device, and still honors the Settings GPU toggle and
|
|
261
|
+
`QUANTUI_DISABLE_GPU=1`. If the probe fails, PyFock falls back to CPU and
|
|
262
|
+
reports the reason. GPU single points use PyFock's GPU SCF/integral/XC path;
|
|
263
|
+
GPU geometry optimizations use numerical finite-difference forces because the
|
|
264
|
+
installed PyFock release's analytical gradient implementation is CPU-only.
|
|
265
|
+
|
|
215
266
|
### Optional: GFN-FF metal pre-optimization (xtb)
|
|
216
267
|
|
|
217
268
|
The classical (MMFF/UFF) pre-optimizer relies on RDKit's organic valence
|
|
@@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta"
|
|
|
8
8
|
|
|
9
9
|
[project]
|
|
10
10
|
name = "quantui"
|
|
11
|
-
version = "0.
|
|
11
|
+
version = "0.9.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"
|
|
@@ -30,8 +30,9 @@ classifiers = [
|
|
|
30
30
|
# PyPI shows the licence from this classifier in the sidebar; the
|
|
31
31
|
# [project] license table alone is not enough for the old-style display.
|
|
32
32
|
"License :: OSI Approved :: MIT License",
|
|
33
|
-
# PySCF is Linux/macOS only
|
|
34
|
-
#
|
|
33
|
+
# The complete PySCF feature set is Linux/macOS only. Native Windows has a
|
|
34
|
+
# smaller optional PyFock backend, documented in README; add a Windows
|
|
35
|
+
# classifier after its dedicated real-calculation CI gate is green.
|
|
35
36
|
"Operating System :: POSIX :: Linux",
|
|
36
37
|
"Operating System :: MacOS",
|
|
37
38
|
"Environment :: Web Environment",
|
|
@@ -82,8 +83,19 @@ Issues = "https://github.com/The-Schultz-Lab/QuantUI/issues"
|
|
|
82
83
|
# the terminal (``quantui log tail -n 50``, etc.). See ``quantui/cli.py``.
|
|
83
84
|
quantui = "quantui.cli:main"
|
|
84
85
|
|
|
85
|
-
[tool.setuptools]
|
|
86
|
-
packages = ["quantui",
|
|
86
|
+
[tool.setuptools.packages.find]
|
|
87
|
+
# AUDIT F20 — this used to be an explicit `packages = ["quantui",
|
|
88
|
+
# "quantui.backends"]` list under [tool.setuptools]. quantui.engines is a
|
|
89
|
+
# real subpackage (quantui/engines/__init__.py + base.py/pyscf_engine.py/
|
|
90
|
+
# pyfock_engine.py) that was never added to that list: the built wheel
|
|
91
|
+
# silently omitted it entirely (ModuleNotFoundError importing
|
|
92
|
+
# quantui.engines from an installed, non-editable wheel), while every CI
|
|
93
|
+
# run stayed green because CI installs editable (`pip install -e`), which
|
|
94
|
+
# doesn't go through this list at all. Automatic discovery means the next
|
|
95
|
+
# new subpackage ships by construction instead of needing a second edit
|
|
96
|
+
# here that's easy to forget.
|
|
97
|
+
include = ["quantui", "quantui.*"]
|
|
98
|
+
exclude = ["tests", "tests.*"]
|
|
87
99
|
|
|
88
100
|
[tool.setuptools.package-data]
|
|
89
101
|
# Bundled molecule library (M-STRUCT): the indexed SQLite store + the
|
|
@@ -114,6 +126,20 @@ pyscf = [
|
|
|
114
126
|
"pyscf-properties",
|
|
115
127
|
]
|
|
116
128
|
|
|
129
|
+
# Native-Windows-capable pure-Python DFT backend (M-PYFOCK). PyFock 0.1.7
|
|
130
|
+
# imports SciPy but does not declare it in its own wheel metadata, so QuantUI's
|
|
131
|
+
# extra supplies and caps that runtime dependency explicitly.
|
|
132
|
+
pyfock = [
|
|
133
|
+
"pyfock>=0.1.7,<0.3",
|
|
134
|
+
# PyFock's ASE calculator is the geometry-optimization path used by
|
|
135
|
+
# QuantUI; include ASE here so the documented backend extra is complete.
|
|
136
|
+
"ase>=3.22.0,<4",
|
|
137
|
+
"scipy>=1.10,<2",
|
|
138
|
+
# 0.68.0rc1 can be selected by PyFock's permissive floor and brought a
|
|
139
|
+
# prerelease llvmlite that crashed at import on Linux/Python 3.12.
|
|
140
|
+
"numba>=0.57,<0.68",
|
|
141
|
+
]
|
|
142
|
+
|
|
117
143
|
# ASE: structure I/O, extended molecule library, geometry optimisation
|
|
118
144
|
ase = [
|
|
119
145
|
"ase>=3.22.0,<4",
|
|
@@ -164,6 +190,16 @@ gpu-cuda13x = [
|
|
|
164
190
|
"cutensor-cu13",
|
|
165
191
|
]
|
|
166
192
|
|
|
193
|
+
# PyFock GPU acceleration is a separate CuPy-only path. Do not install or
|
|
194
|
+
# probe gpu4pyscf for a PyFock calculation: the two engines have independent
|
|
195
|
+
# CUDA implementations and capability gates.
|
|
196
|
+
pyfock-gpu-cuda12x = [
|
|
197
|
+
"cupy-cuda12x",
|
|
198
|
+
]
|
|
199
|
+
pyfock-gpu-cuda13x = [
|
|
200
|
+
"cupy-cuda13x",
|
|
201
|
+
]
|
|
202
|
+
|
|
167
203
|
# Notebook smoke-test dependencies
|
|
168
204
|
notebook = [
|
|
169
205
|
"nbmake>=1.4.0",
|
|
@@ -176,6 +212,13 @@ dev = [
|
|
|
176
212
|
"pytest-cov>=4.0.0",
|
|
177
213
|
"pytest-mock>=3.10.0",
|
|
178
214
|
"pytest-xdist>=3.0.0", # parallel test execution (-n=auto in addopts)
|
|
215
|
+
# AUDIT F20 — the PEP 517 build frontend, used by
|
|
216
|
+
# tests/test_packaging.py to build a real wheel and inspect its
|
|
217
|
+
# contents (import/package-data smoke test against a *built* wheel,
|
|
218
|
+
# not the editable install every other test runs against — the gap
|
|
219
|
+
# that let quantui.engines silently vanish from the shipped package
|
|
220
|
+
# while CI, always editable, stayed green).
|
|
221
|
+
"build>=1.0.0",
|
|
179
222
|
"mypy>=1.10,<2.4", # pinned, not an open floor — same reasoning as
|
|
180
223
|
# black/ruff below: it must agree with .pre-commit-config.yaml's rev,
|
|
181
224
|
# which is what CI enforces (M-TYPECHECK TYPE.2). A newer mypy silently
|
|
@@ -256,6 +299,7 @@ strict_equality = true
|
|
|
256
299
|
[[tool.mypy.overrides]]
|
|
257
300
|
module = [
|
|
258
301
|
"pyscf.*",
|
|
302
|
+
"pyfock.*",
|
|
259
303
|
"py3Dmol.*",
|
|
260
304
|
"IPython.*",
|
|
261
305
|
"ipywidgets.*",
|
|
@@ -294,6 +338,9 @@ markers = [
|
|
|
294
338
|
"unit: marks tests as unit tests",
|
|
295
339
|
"network: marks tests that require network connectivity",
|
|
296
340
|
"notebook: marks notebook smoke tests",
|
|
341
|
+
"pyfock: marks real PyFock integration/parity tests (opt in with QUANTUI_RUN_PYFOCK_INTEGRATION=1)",
|
|
342
|
+
"gpu_integration: marks real NVIDIA GPU integration tests (opt in with QUANTUI_RUN_GPU_INTEGRATION=1)",
|
|
343
|
+
"pyfock_gpu: marks real PyFock CuPy GPU tests (opt in with QUANTUI_RUN_PYFOCK_GPU_INTEGRATION=1)",
|
|
297
344
|
]
|
|
298
345
|
|
|
299
346
|
[tool.coverage.run]
|
|
@@ -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.9.0"
|
|
11
11
|
|
|
12
12
|
import logging
|
|
13
13
|
from typing import Any
|