From c52880b29947f30444280b48f5549169a1ffc062 Mon Sep 17 00:00:00 2001 From: Jonathan Schultz Date: Sat, 26 Sep 2026 17:30:51 +0000 Subject: [PATCH] chore(release): bump version to 0.9.0 Bump pyproject.toml, quantui.__version__ and the GPU image's pinned QUANTUI_VERSION to 0.9.0. Consolidate CHANGELOG since v0.8.2: M-JOBDIRS SLURM job folders + History marker, GPU offload for geometry optimization, PyFock backend phases 1-2, `quantui submit`, batch/Frequency checkpoint resume, SCF rescue, and the audit-fix batch (thermochemistry, Raman units, functionals, ECPs, convergence reporting, SLURM ingest, packaging). Also add the missing compare links for 0.7.0-0.9.0. Contributions: - Claude (Opus 5.5): code edits, review, and conceptual discussion - Jonathan Schultz: overall vision, planning, review, and orchestration Co-authored-by: Jonathan Schultz Co-authored-by: Claude Opus 5.5 --- CHANGELOG.md | 90 ++++++++++++++++++++++++++++++++------- apptainer/quantui-gpu.def | 2 +- pyproject.toml | 2 +- quantui/__init__.py | 2 +- 4 files changed, 77 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e0a915..197f0df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.ht ## [Unreleased] +## [0.9.0] - 2026-09-26 + ### Added - **SLURM job folders with per-attempt subfolders (M-JOBDIRS)** โ€” each cluster @@ -21,24 +23,75 @@ and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.ht `๐Ÿ–ฅ SLURM ยทa` and the result card has a "Ran on" row with the job folder. Hand-run attempts are added to History on the next Cluster Jobs refresh; failed attempts stay in the job folder only. -- **PyFock geometry and analysis phase** โ€” native-Windows PBE/def2 geometry - optimization now uses PyFock's ASE calculator with analytical density-fitted - gradients. Single-point and final optimized-geometry results retain orbital - arrays, Mulliken charges, dipoles, and engine-native cube generation. - -- **PyFock Phase-1 backend (M-PYFOCK PYF.2โ€“PYF.6)** โ€” normalized engine - dispatch, native-Windows PBE/def2 single points for neutral closed-shell - molecules, capability-driven calculation menus, engine provenance in logs - and saved results, a pinned `pyfock` install extra, and a real Windows water - parity gate against PySCF. Unsupported hybrids, ions, open-shell systems, - solvent, checkpoints, GPU, and orbital analysis are rejected before compute. +- **GPU offload for geometry optimization** โ€” gpu4pyscf offload now reaches + every SCF/gradient step of a geometry optimization, not just single points. + A separate, guarded CuPy GPU path for PyFock, GPU provenance + (`gpu_used` / `gpu_name`) on optimization results, and + `quantui gpu check --engine pyfock`. +- **PyFock backend (M-PYFOCK)** โ€” Phase 1: normalized engine dispatch, + native-Windows PBE/def2 single points for neutral closed-shell molecules, + capability-driven calculation menus, engine provenance in logs and saved + results, a pinned `pyfock` install extra, and a Windows water parity gate + against PySCF; unsupported hybrids, ions, open-shell systems, solvent, + checkpoints and orbital analysis are rejected before compute. Phase 2: + geometry optimization via PyFock's ASE calculator with analytical + density-fitted gradients; results keep orbital arrays, Mulliken charges, + dipoles, and engine-native cube generation. +- **`quantui submit` CLI** โ€” submit request JSON files to SLURM from a script + (with `--job-name`, `--dry-run`, resource and mail options); resource + estimates account for parallel IR/Raman workers. +- **Checkpoint/resume for batch and Frequency runs** โ€” the SLURM batch worker + resumes Geometry Optimization, PES Scan and Frequency runs from their + checkpoints; Frequency (interactive and batch) banks each finished + displacement so a restart skips completed ones. +- **SCF rescue for hard open-shell cases (M-SCF-ROBUST)** โ€” one shared + convergence-rescue helper at every SCF call site, with provenance lines in + the log. +- **RKS/UKS/RHF/UHF label** on every result card, live and saved. + +### Changed + +- **SLURM output layout** โ€” new submissions use the job-folder layout above + instead of `~/.quantui/staging//`. Jobs submitted earlier keep + their old folders and still list, reconnect and ingest. +- **Unconverged results are no longer reported as converged** โ€” CCSD/CCSD(T) + amplitudes, TD-DFT roots, frequency Hessians, and optimizer gradients from an + unconverged SCF are now flagged instead of shown as a clean result. Saved + cards name the step that failed rather than blaming the SCF. +- **Parallel IR/Raman worker pools** are sized from the SLURM/cgroup + allocation, not the node's full CPU count. ### Fixed -- Reconnecting to a finished SLURM job no longer saves a second copy of its - result to History. -- Removed the unused `QUANTUI_RESULTS_DIR` export from generated SLURM - scripts (it only created an empty `results/` folder per job). +- **Thermochemistry** โ€” entropy units no longer corrupt the Gibbs free energy; + thermochemistry is saved and shown again when a frequency result is + reopened from History. +- **Raman activities** โ€” added the missing aโ‚€ยณโ†’ร…ยณ polarizability conversion. +- **Functionals** โ€” ฯ‰B97X-D resolves to the real functional (not `wb97x`+D3), + and the D3 dispersion status is shown instead of silently dropped. +- **ECP systems** โ€” ECPs are passed to parallel IR/Raman workers and embedded + in exported scripts; charge/spin inference handles ROHF and ECP systems. +- **Exported scripts** for MP2/CCSD/CCSD(T) now run the requested method + instead of a DFT branch. +- **Solvation** โ€” PCM requested for a calc type that cannot use it is + rejected instead of silently ignored; solvated Geometry Optimization works + in the SLURM batch worker. +- **SLURM ingest** keeps computed properties and provenance (dipole, charges, + SCF variant, solvent, GPU); reconnecting to a finished SLURM job no longer + saves a second copy of its result to History. +- **SLURM scripts** quote paths containing spaces, and no longer export an + unused `QUANTUI_RESULTS_DIR`. +- **Checkpoints** โ€” PES Scan checkpoint identity is coordinate-aware, and the + interactive Frequency run uses its own checkpoint. +- **NMR** fallback-reference metadata is saved and shown. +- **Parallel IR/Raman workers** honor density fitting and SCF rescue. +- **Batch results** carry Mulliken charges and dipoles; UHF Molden export is + complete. +- **Spectra** โ€” the x-range covers every real mode; exported NPZ files carry + the fields the cube helper needs, and cube provenance can't be overwritten. +- **Packaging** โ€” the built wheel ships `quantui.engines`. +- **Theme** โ€” Plotly axis and zero lines follow the active palette instead of + staying pale blue-gray on dark themes. ## [0.8.2] - 2026-08-30 @@ -881,7 +934,12 @@ Initial public scaffolding of the QuantUI package: `quantui` package with `calculator.py`, basic notebook launcher, Apptainer container definition, MIT license, and project metadata. -[Unreleased]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.6.1...HEAD +[Unreleased]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.9.0...HEAD +[0.9.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.8.2...v0.9.0 +[0.8.2]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.8.1...v0.8.2 +[0.8.1]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.8.0...v0.8.1 +[0.8.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.7.0...v0.8.0 +[0.7.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.6.1...v0.7.0 [0.6.1]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.6.0...v0.6.1 [0.6.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.5.2...v0.6.0 [0.5.2]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.5.1...v0.5.2 diff --git a/apptainer/quantui-gpu.def b/apptainer/quantui-gpu.def index a7987cb..15d2512 100644 --- a/apptainer/quantui-gpu.def +++ b/apptainer/quantui-gpu.def @@ -23,7 +23,7 @@ From: nvidia/cuda:12.8.1-devel-ubuntu24.04 # immutable artifact that anyone can `pip download` and diff. It is also # the provenance story worth demonstrating: the image records a version # someone else can install, not a SHA from one person's working tree. - QUANTUI_VERSION=0.8.2 + QUANTUI_VERSION=0.9.0 %help QuantUI โ€” GPU image (PySCF + gpu4pyscf on CUDA 12.x, xtb GFN-FF pre-opt) diff --git a/pyproject.toml b/pyproject.toml index 24a404b..8d6f891 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta" [project] name = "quantui" -version = "0.8.2" +version = "0.9.0" description = "An open-source frontend for DFT and post-HF quantum chemistry with PySCF" readme = "README.md" requires-python = ">=3.9" diff --git a/quantui/__init__.py b/quantui/__init__.py index 47fa698..53615d8 100644 --- a/quantui/__init__.py +++ b/quantui/__init__.py @@ -7,7 +7,7 @@ PySCF requires Linux/macOS/WSL. Windows users should use the Apptainer container. """ -__version__ = "0.8.2" +__version__ = "0.9.0" import logging from typing import Any