quantui 0.8.1__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.1 → quantui-0.9.0}/CHANGELOG.md +139 -1
- {quantui-0.8.1/quantui.egg-info → quantui-0.9.0}/PKG-INFO +74 -12
- {quantui-0.8.1 → quantui-0.9.0}/README.md +61 -10
- {quantui-0.8.1 → quantui-0.9.0}/pyproject.toml +54 -6
- {quantui-0.8.1 → quantui-0.9.0}/quantui/__init__.py +1 -1
- {quantui-0.8.1 → quantui-0.9.0}/quantui/app.py +1176 -254
- {quantui-0.8.1 → quantui-0.9.0}/quantui/app_analysis.py +49 -15
- {quantui-0.8.1 → quantui-0.9.0}/quantui/app_builders.py +604 -123
- {quantui-0.8.1 → quantui-0.9.0}/quantui/app_exports.py +40 -10
- {quantui-0.8.1 → quantui-0.9.0}/quantui/app_formatters.py +419 -158
- {quantui-0.8.1 → quantui-0.9.0}/quantui/app_history.py +13 -2
- quantui-0.9.0/quantui/app_launcher.py +375 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/app_measurement.py +3 -3
- quantui-0.9.0/quantui/app_pes_pick.py +134 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/app_runflow.py +693 -74
- quantui-0.9.0/quantui/app_slurm.py +808 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/app_visualization.py +307 -57
- {quantui-0.8.1 → quantui-0.9.0}/quantui/app_xyz_input.py +3 -3
- quantui-0.9.0/quantui/backends/__init__.py +37 -0
- quantui-0.9.0/quantui/backends/base.py +111 -0
- quantui-0.9.0/quantui/backends/cluster_config.py +213 -0
- quantui-0.9.0/quantui/backends/cluster_security.py +149 -0
- quantui-0.9.0/quantui/backends/dispatch.py +193 -0
- quantui-0.9.0/quantui/backends/local.py +46 -0
- quantui-0.9.0/quantui/backends/registry.py +342 -0
- quantui-0.9.0/quantui/backends/slurm.py +712 -0
- quantui-0.9.0/quantui/backends/slurm_errors.py +205 -0
- quantui-0.9.0/quantui/backends/slurm_ingest.py +383 -0
- quantui-0.9.0/quantui/backends/slurm_utils.py +264 -0
- quantui-0.9.0/quantui/backends/worker.py +866 -0
- quantui-0.9.0/quantui/backends/worker_payload.py +372 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/benchmarks.py +1 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/calc_log.py +122 -19
- {quantui-0.8.1 → quantui-0.9.0}/quantui/calculator.py +29 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/checkpoint.py +196 -9
- quantui-0.9.0/quantui/cli.py +604 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/config.py +139 -17
- {quantui-0.8.1 → quantui-0.9.0}/quantui/descriptor_cards.py +15 -11
- 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.1 → quantui-0.9.0}/quantui/estimator_eval.py +2 -3
- {quantui-0.8.1 → quantui-0.9.0}/quantui/freq_calc.py +438 -78
- quantui-0.9.0/quantui/freq_displacement_ids.py +79 -0
- quantui-0.9.0/quantui/freq_ir_workers.py +375 -0
- quantui-0.9.0/quantui/freq_raman_workers.py +150 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/help_content.py +141 -19
- {quantui-0.8.1 → quantui-0.9.0}/quantui/ir_plot.py +61 -9
- {quantui-0.8.1 → quantui-0.9.0}/quantui/live_log.py +1 -1
- {quantui-0.8.1 → quantui-0.9.0}/quantui/log_utils.py +9 -5
- {quantui-0.8.1 → quantui-0.9.0}/quantui/nmr_calc.py +22 -2
- {quantui-0.8.1 → quantui-0.9.0}/quantui/optimizer.py +187 -25
- {quantui-0.8.1 → quantui-0.9.0}/quantui/orbital_visualization.py +184 -29
- {quantui-0.8.1 → quantui-0.9.0}/quantui/pes_scan.py +81 -3
- quantui-0.9.0/quantui/pes_scan_ui.py +384 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/populations_overlay.py +27 -9
- {quantui-0.8.1 → quantui-0.9.0}/quantui/progress.py +5 -3
- quantui-0.9.0/quantui/pyfock_gpu.py +118 -0
- quantui-0.9.0/quantui/raman_calc.py +482 -0
- quantui-0.9.0/quantui/raman_plot.py +121 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/reorganization_energy.py +28 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/results_storage.py +177 -5
- quantui-0.9.0/quantui/scf_robust.py +167 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/session_calc.py +226 -53
- {quantui-0.8.1 → quantui-0.9.0}/quantui/tddft_calc.py +111 -13
- quantui-0.9.0/quantui/theme.py +746 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/user_settings.py +112 -1
- {quantui-0.8.1 → quantui-0.9.0}/quantui/visualization_py3dmol.py +103 -30
- {quantui-0.8.1 → quantui-0.9.0/quantui.egg-info}/PKG-INFO +74 -12
- {quantui-0.8.1 → quantui-0.9.0}/quantui.egg-info/SOURCES.txt +28 -1
- {quantui-0.8.1 → quantui-0.9.0}/quantui.egg-info/requires.txt +15 -1
- quantui-0.8.1/quantui/cli.py +0 -294
- quantui-0.8.1/quantui/freq_ir_workers.py +0 -229
- quantui-0.8.1/quantui/theme.py +0 -232
- {quantui-0.8.1 → quantui-0.9.0}/LICENSE +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/MANIFEST.in +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/SECURITY.md +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/analytics.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/ase_bridge.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/c_stderr.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/cactus.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/cancellation.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/comparison.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/connectivity.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/data/js/3Dmol-min.js +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/data/js/3Dmol-min.js.LICENSE.txt +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/data/library/library.sqlite +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/data/manifests/bulk_qm9.json +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/data/manifests/curated.json +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/data/manifests/inorganic.json +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/data/manifests/presets.json +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/density_fitting.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/gpu_offload.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/inorganic_guards.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/issue_tracker.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/measurement.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/molecule.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/molecule_library.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/mulliken_plot.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/nmr_plot.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/preopt.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/pubchem.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/security.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/spin_presets.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/structure_providers.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/utils.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/vib_cache.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/viz_assets.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/viz_backend_router.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui/xyz_input.py +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui.egg-info/dependency_links.txt +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui.egg-info/entry_points.txt +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/quantui.egg-info/top_level.txt +0 -0
- {quantui-0.8.1 → quantui-0.9.0}/setup.cfg +0 -0
|
@@ -7,6 +7,139 @@ 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
|
+
|
|
96
|
+
## [0.8.2] - 2026-08-30
|
|
97
|
+
|
|
98
|
+
### Added
|
|
99
|
+
|
|
100
|
+
- **SLURM batch execution (M-CLUSTER2)** — optional cluster backend when
|
|
101
|
+
`QUANTUI_ENABLE_SLURM=1` and `sbatch` is on PATH: submit from the same UI,
|
|
102
|
+
monitor on the **Cluster Jobs** tab, hybrid `squeue`/`sacct` polling, submit
|
|
103
|
+
cooldown, and stale-registry cleanup. All Calculate-tab calc types supported
|
|
104
|
+
on the batch worker path.
|
|
105
|
+
- **`QUANTUI_ENABLE_SLURM` site gate** — SLURM batch stays hidden and
|
|
106
|
+
undispatchable until an operator sets this environment variable. Student CPU
|
|
107
|
+
images and JupyterHub profiles can omit it (default off); instructors enable
|
|
108
|
+
cluster testing with `QUANTUI_ENABLE_SLURM=1` without any extra student
|
|
109
|
+
command.
|
|
110
|
+
- **`quantui setup` and `quantui run app`** — writes `~/QuantUI.ipynb` for
|
|
111
|
+
NCShare/JupyterLab (Render with Voilà). `run app` detects Apptainer +
|
|
112
|
+
Jupyter and exits with Voilà instructions instead of opening an unreachable
|
|
113
|
+
second port.
|
|
114
|
+
- **Parallel IR intensity displacements (CPU)** — Settings checkbox
|
|
115
|
+
(`compute.freq_parallel`) plus `QUANTUI_FREQ_PARALLEL` env override fans out
|
|
116
|
+
the 6N finite-difference SCF loop on hosts with ≥4 cores and ≥2 atoms. The
|
|
117
|
+
**CPU teaching SIF** sets `QUANTUI_FREQ_PARALLEL=1` by default; the checkbox
|
|
118
|
+
reflects the deployment value and locks while the env var is set.
|
|
119
|
+
- **Imaginary-mode perturbation** for Frequency reruns seeded from History.
|
|
120
|
+
- **Stage-aware frequency cost estimate** and per-phase run status labels (NMR,
|
|
121
|
+
Hessian, post-HF).
|
|
122
|
+
- **Preset theme palettes** replacing the invert filter (M-THEME THEME.6).
|
|
123
|
+
- **Quantum engine registry** (`quantui/engines/`) and
|
|
124
|
+
`ComputeSettings.quantum_engine` field (M-PYFOCK PYF.1 groundwork).
|
|
125
|
+
- **Static Raman spectrum** on the Analysis tab (M-SPECTRA2).
|
|
126
|
+
|
|
127
|
+
### Fixed
|
|
128
|
+
|
|
129
|
+
- **Mulliken 3D viewer** could render blank after geometry persistence and lazy
|
|
130
|
+
panel activation (#103).
|
|
131
|
+
- **`apptainer/quantui-gpu.def` never installed the `xtb` extra**, so GFN-FF
|
|
132
|
+
metal-capable classical pre-optimization (DEC-018) was unavailable in every
|
|
133
|
+
GPU/HPC image — the app correctly reported the honest-failure message
|
|
134
|
+
("RDKit could not perceive bonds ... and the GFN-FF (xtb) metal backend is
|
|
135
|
+
not installed"), but the underlying cause was a container gap, not a
|
|
136
|
+
missing local install. Fixed by pinning the image's Python to 3.11 via the
|
|
137
|
+
deadsnakes PPA (Ubuntu 24.04's own repos ship 3.12 only, and `xtb`'s PyPI
|
|
138
|
+
wheels stop at `cp311`) and adding `xtb` to the pip extras. `quantui.def`
|
|
139
|
+
(the CPU teaching image) gained the equivalent `xtb-python` conda-forge
|
|
140
|
+
package, which it had also been missing despite `local-setup/environment.yml`
|
|
141
|
+
already carrying it for local conda installs.
|
|
142
|
+
|
|
10
143
|
## [0.8.1] - 2026-08-26
|
|
11
144
|
|
|
12
145
|
### Added
|
|
@@ -801,7 +934,12 @@ Initial public scaffolding of the QuantUI package: `quantui` package with
|
|
|
801
934
|
`calculator.py`, basic notebook launcher, Apptainer container definition,
|
|
802
935
|
MIT license, and project metadata.
|
|
803
936
|
|
|
804
|
-
[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
|
|
805
943
|
[0.6.1]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.6.0...v0.6.1
|
|
806
944
|
[0.6.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.5.2...v0.6.0
|
|
807
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
|
|
@@ -55,11 +55,17 @@ Requires-Dist: numpy<3,>=1.24.0
|
|
|
55
55
|
Requires-Dist: requests<3,>=2.28.0
|
|
56
56
|
Requires-Dist: py3Dmol<3,>=2.0.0
|
|
57
57
|
Requires-Dist: matplotlib<4,>=3.7.0
|
|
58
|
-
Requires-Dist: plotly<
|
|
58
|
+
Requires-Dist: plotly<8,>=5.0.0
|
|
59
59
|
Requires-Dist: plotlymol<1,>=0.2.1
|
|
60
|
+
Requires-Dist: kaleido<2,>=0.2.1
|
|
60
61
|
Provides-Extra: pyscf
|
|
61
62
|
Requires-Dist: pyscf<3,>=2.13.0; extra == "pyscf"
|
|
62
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"
|
|
63
69
|
Provides-Extra: ase
|
|
64
70
|
Requires-Dist: ase<4,>=3.22.0; extra == "ase"
|
|
65
71
|
Provides-Extra: xtb
|
|
@@ -76,6 +82,10 @@ Provides-Extra: gpu-cuda13x
|
|
|
76
82
|
Requires-Dist: gpu4pyscf-cuda13x; extra == "gpu-cuda13x"
|
|
77
83
|
Requires-Dist: cupy-cuda13x; extra == "gpu-cuda13x"
|
|
78
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"
|
|
79
89
|
Provides-Extra: notebook
|
|
80
90
|
Requires-Dist: nbmake>=1.4.0; extra == "notebook"
|
|
81
91
|
Requires-Dist: ipykernel<8,>=6.0.0; extra == "notebook"
|
|
@@ -84,6 +94,7 @@ Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
|
84
94
|
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
85
95
|
Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
|
|
86
96
|
Requires-Dist: pytest-xdist>=3.0.0; extra == "dev"
|
|
97
|
+
Requires-Dist: build>=1.0.0; extra == "dev"
|
|
87
98
|
Requires-Dist: mypy<2.4,>=1.10; extra == "dev"
|
|
88
99
|
Requires-Dist: types-requests>=2.28.0; extra == "dev"
|
|
89
100
|
Requires-Dist: black~=26.5.1; python_version >= "3.10" and extra == "dev"
|
|
@@ -101,7 +112,8 @@ Dynamic: license-file
|
|
|
101
112
|
[](https://www.python.org)
|
|
102
113
|
|
|
103
114
|
A powerful open-source frontend for DFT and post-HF quantum chemistry.
|
|
104
|
-
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à
|
|
105
117
|
UI so you can build molecules, run calculations locally, and visualize the
|
|
106
118
|
results — no cluster account, no SLURM, no queueing.
|
|
107
119
|
|
|
@@ -119,24 +131,24 @@ Real output from QuantUI, straight from the app:
|
|
|
119
131
|
<table>
|
|
120
132
|
<tr>
|
|
121
133
|
<td width="50%" align="center" valign="top">
|
|
122
|
-
<img src="docs/images/cisplatin_lumo.png" alt="Cisplatin LUMO isosurface" width="400"><br>
|
|
134
|
+
<img src="https://raw.githubusercontent.com/The-Schultz-Lab/QuantUI/main/docs/images/cisplatin_lumo.png" alt="Cisplatin LUMO isosurface" width="400"><br>
|
|
123
135
|
<b>Cisplatin LUMO</b><br>
|
|
124
136
|
<sub>Molecular-orbital isosurface · B3LYP/LANL2DZ (ECP on Pt & Cl)</sub>
|
|
125
137
|
</td>
|
|
126
138
|
<td width="50%" align="center" valign="top">
|
|
127
|
-
<img src="docs/images/aspartame_orbital_diagram.png" alt="Aspartame orbital energy-level diagram" width="300"><br>
|
|
139
|
+
<img src="https://raw.githubusercontent.com/The-Schultz-Lab/QuantUI/main/docs/images/aspartame_orbital_diagram.png" alt="Aspartame orbital energy-level diagram" width="300"><br>
|
|
128
140
|
<b>Aspartame orbital energies</b><br>
|
|
129
141
|
<sub>Occupied/virtual levels · HOMO–LUMO gap 6.09 eV · B3LYP/6-31G*</sub>
|
|
130
142
|
</td>
|
|
131
143
|
</tr>
|
|
132
144
|
<tr>
|
|
133
145
|
<td width="50%" align="center" valign="top">
|
|
134
|
-
<img src="docs/images/benzene_ir_spectrum.png" alt="Benzene IR spectrum" width="400"><br>
|
|
146
|
+
<img src="https://raw.githubusercontent.com/The-Schultz-Lab/QuantUI/main/docs/images/benzene_ir_spectrum.png" alt="Benzene IR spectrum" width="400"><br>
|
|
135
147
|
<b>Benzene IR spectrum</b><br>
|
|
136
148
|
<sub>Analytical Hessian · ωB97X-D/6-31G · the four IR-active bands</sub>
|
|
137
149
|
</td>
|
|
138
150
|
<td width="50%" align="center" valign="top">
|
|
139
|
-
<img src="docs/images/cisplatin_optimization.png" alt="Cisplatin geometry-optimization energy convergence" width="400"><br>
|
|
151
|
+
<img src="https://raw.githubusercontent.com/The-Schultz-Lab/QuantUI/main/docs/images/cisplatin_optimization.png" alt="Cisplatin geometry-optimization energy convergence" width="400"><br>
|
|
140
152
|
<b>Geometry optimization</b><br>
|
|
141
153
|
<sub>Cisplatin relaxing over 21 BFGS steps · B3LYP/LANL2DZ</sub>
|
|
142
154
|
</td>
|
|
@@ -165,7 +177,10 @@ Real output from QuantUI, straight from the app:
|
|
|
165
177
|
your default-backend preference between sessions
|
|
166
178
|
- **In-session calculations** — RHF, UHF, 9 DFT functionals, MP2, CCSD,
|
|
167
179
|
CCSD(T), NMR shielding, TD-DFT UV-Vis, and 1D PES scans via PySCF, running
|
|
168
|
-
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
|
|
169
184
|
- **Implicit solvent** — PCM solvation (Water, Ethanol, THF, DMSO,
|
|
170
185
|
Acetonitrile) via a single checkbox
|
|
171
186
|
- **Rich results** — total energy, HOMO-LUMO gap, Mulliken charges, dipole
|
|
@@ -198,10 +213,12 @@ Real output from QuantUI, straight from the app:
|
|
|
198
213
|
- **Plot export** — save IR, UV-Vis, PES, and orbital diagrams as standalone
|
|
199
214
|
HTML
|
|
200
215
|
- **Optional GPU acceleration** — when [gpu4pyscf](https://github.com/pyscf/gpu4pyscf)
|
|
201
|
-
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
|
|
202
217
|
via `mf.to_gpu()` (RHF / UHF / RKS / UKS supported; CCSD(T) stays on CPU).
|
|
203
218
|
The Status tab + every result card show which compute device was used.
|
|
204
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.
|
|
205
222
|
- **Timing calibration** — one-click benchmark suite populates the time
|
|
206
223
|
estimator with real machine data so predictions are accurate from the first run
|
|
207
224
|
- **Voilà app mode** — serve the notebook as a polished widget-only UI (no
|
|
@@ -216,11 +233,29 @@ Real output from QuantUI, straight from the app:
|
|
|
216
233
|
| --- | --- | --- |
|
|
217
234
|
| Linux / macOS | Full | PySCF installs natively |
|
|
218
235
|
| WSL (Windows) | Full | Use an Ubuntu WSL environment |
|
|
219
|
-
| 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 |
|
|
220
237
|
|
|
221
|
-
### Windows users:
|
|
238
|
+
### Windows users: native PyFock or the full container
|
|
222
239
|
|
|
223
|
-
|
|
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
|
|
224
259
|
[`apptainer/quantui.def`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/quantui.def) container bundles
|
|
225
260
|
the complete environment and runs anywhere Apptainer/Singularity is available.
|
|
226
261
|
See [`apptainer/README.md`](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/README.md) for build and run instructions.
|
|
@@ -246,6 +281,12 @@ pip install -e ".[pyscf,ase,app]"
|
|
|
246
281
|
python -m pip install quantui[pyscf,ase,app]
|
|
247
282
|
```
|
|
248
283
|
|
|
284
|
+
For the limited native-Windows engine instead:
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
python -m pip install quantui[pyfock,ase,app]
|
|
288
|
+
```
|
|
289
|
+
|
|
249
290
|
### Option C — Apptainer container (Windows / reproducible deployment)
|
|
250
291
|
|
|
251
292
|
See [apptainer/README.md](https://github.com/The-Schultz-Lab/QuantUI/blob/main/apptainer/README.md).
|
|
@@ -306,6 +347,27 @@ and result cards will display the compute device.
|
|
|
306
347
|
Whenever gpu4pyscf can't offload a particular call, QuantUI falls back
|
|
307
348
|
to CPU automatically and the result card reflects which device ran.
|
|
308
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
|
+
|
|
309
371
|
### Optional: GFN-FF metal pre-optimization (xtb)
|
|
310
372
|
|
|
311
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
|
|
|
@@ -25,24 +26,24 @@ Real output from QuantUI, straight from the app:
|
|
|
25
26
|
<table>
|
|
26
27
|
<tr>
|
|
27
28
|
<td width="50%" align="center" valign="top">
|
|
28
|
-
<img src="docs/images/cisplatin_lumo.png" alt="Cisplatin LUMO isosurface" width="400"><br>
|
|
29
|
+
<img src="https://raw.githubusercontent.com/The-Schultz-Lab/QuantUI/main/docs/images/cisplatin_lumo.png" alt="Cisplatin LUMO isosurface" width="400"><br>
|
|
29
30
|
<b>Cisplatin LUMO</b><br>
|
|
30
31
|
<sub>Molecular-orbital isosurface · B3LYP/LANL2DZ (ECP on Pt & Cl)</sub>
|
|
31
32
|
</td>
|
|
32
33
|
<td width="50%" align="center" valign="top">
|
|
33
|
-
<img src="docs/images/aspartame_orbital_diagram.png" alt="Aspartame orbital energy-level diagram" width="300"><br>
|
|
34
|
+
<img src="https://raw.githubusercontent.com/The-Schultz-Lab/QuantUI/main/docs/images/aspartame_orbital_diagram.png" alt="Aspartame orbital energy-level diagram" width="300"><br>
|
|
34
35
|
<b>Aspartame orbital energies</b><br>
|
|
35
36
|
<sub>Occupied/virtual levels · HOMO–LUMO gap 6.09 eV · B3LYP/6-31G*</sub>
|
|
36
37
|
</td>
|
|
37
38
|
</tr>
|
|
38
39
|
<tr>
|
|
39
40
|
<td width="50%" align="center" valign="top">
|
|
40
|
-
<img src="docs/images/benzene_ir_spectrum.png" alt="Benzene IR spectrum" width="400"><br>
|
|
41
|
+
<img src="https://raw.githubusercontent.com/The-Schultz-Lab/QuantUI/main/docs/images/benzene_ir_spectrum.png" alt="Benzene IR spectrum" width="400"><br>
|
|
41
42
|
<b>Benzene IR spectrum</b><br>
|
|
42
43
|
<sub>Analytical Hessian · ωB97X-D/6-31G · the four IR-active bands</sub>
|
|
43
44
|
</td>
|
|
44
45
|
<td width="50%" align="center" valign="top">
|
|
45
|
-
<img src="docs/images/cisplatin_optimization.png" alt="Cisplatin geometry-optimization energy convergence" width="400"><br>
|
|
46
|
+
<img src="https://raw.githubusercontent.com/The-Schultz-Lab/QuantUI/main/docs/images/cisplatin_optimization.png" alt="Cisplatin geometry-optimization energy convergence" width="400"><br>
|
|
46
47
|
<b>Geometry optimization</b><br>
|
|
47
48
|
<sub>Cisplatin relaxing over 21 BFGS steps · B3LYP/LANL2DZ</sub>
|
|
48
49
|
</td>
|
|
@@ -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",
|
|
@@ -62,8 +63,9 @@ dependencies = [
|
|
|
62
63
|
"requests>=2.28.0,<3",
|
|
63
64
|
"py3Dmol>=2.0.0,<3",
|
|
64
65
|
"matplotlib>=3.7.0,<4",
|
|
65
|
-
"plotly>=5.0.0,<
|
|
66
|
+
"plotly>=5.0.0,<8",
|
|
66
67
|
"plotlymol>=0.2.1,<1",
|
|
68
|
+
"kaleido>=0.2.1,<2",
|
|
67
69
|
]
|
|
68
70
|
|
|
69
71
|
[project.urls]
|
|
@@ -81,8 +83,19 @@ Issues = "https://github.com/The-Schultz-Lab/QuantUI/issues"
|
|
|
81
83
|
# the terminal (``quantui log tail -n 50``, etc.). See ``quantui/cli.py``.
|
|
82
84
|
quantui = "quantui.cli:main"
|
|
83
85
|
|
|
84
|
-
[tool.setuptools]
|
|
85
|
-
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.*"]
|
|
86
99
|
|
|
87
100
|
[tool.setuptools.package-data]
|
|
88
101
|
# Bundled molecule library (M-STRUCT): the indexed SQLite store + the
|
|
@@ -113,6 +126,20 @@ pyscf = [
|
|
|
113
126
|
"pyscf-properties",
|
|
114
127
|
]
|
|
115
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
|
+
|
|
116
143
|
# ASE: structure I/O, extended molecule library, geometry optimisation
|
|
117
144
|
ase = [
|
|
118
145
|
"ase>=3.22.0,<4",
|
|
@@ -163,6 +190,16 @@ gpu-cuda13x = [
|
|
|
163
190
|
"cutensor-cu13",
|
|
164
191
|
]
|
|
165
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
|
+
|
|
166
203
|
# Notebook smoke-test dependencies
|
|
167
204
|
notebook = [
|
|
168
205
|
"nbmake>=1.4.0",
|
|
@@ -175,6 +212,13 @@ dev = [
|
|
|
175
212
|
"pytest-cov>=4.0.0",
|
|
176
213
|
"pytest-mock>=3.10.0",
|
|
177
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",
|
|
178
222
|
"mypy>=1.10,<2.4", # pinned, not an open floor — same reasoning as
|
|
179
223
|
# black/ruff below: it must agree with .pre-commit-config.yaml's rev,
|
|
180
224
|
# which is what CI enforces (M-TYPECHECK TYPE.2). A newer mypy silently
|
|
@@ -255,6 +299,7 @@ strict_equality = true
|
|
|
255
299
|
[[tool.mypy.overrides]]
|
|
256
300
|
module = [
|
|
257
301
|
"pyscf.*",
|
|
302
|
+
"pyfock.*",
|
|
258
303
|
"py3Dmol.*",
|
|
259
304
|
"IPython.*",
|
|
260
305
|
"ipywidgets.*",
|
|
@@ -293,6 +338,9 @@ markers = [
|
|
|
293
338
|
"unit: marks tests as unit tests",
|
|
294
339
|
"network: marks tests that require network connectivity",
|
|
295
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)",
|
|
296
344
|
]
|
|
297
345
|
|
|
298
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
|