Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 26 additions & 6 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,41 @@ and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.ht

## [Unreleased]

## [0.8.2] - 2026-08-30

### Added

- **`QUANTUI_ENABLE_SLURM` site gate** — SLURM batch mode stays hidden and
- **SLURM batch execution (M-CLUSTER2)** — optional cluster backend when
`QUANTUI_ENABLE_SLURM=1` and `sbatch` is on PATH: submit from the same UI,
monitor on the **Cluster Jobs** tab, hybrid `squeue`/`sacct` polling, submit
cooldown, and stale-registry cleanup. All Calculate-tab calc types supported
on the batch worker path.
- **`QUANTUI_ENABLE_SLURM` site gate** — SLURM batch stays hidden and
undispatchable until an operator sets this environment variable. Student CPU
images and JupyterHub profiles can omit it (default off); instructors enable
cluster testing with `QUANTUI_ENABLE_SLURM=1` without any extra student
command.
- **CPU teaching SIF defaults** — `quantui.def` sets `QUANTUI_FREQ_PARALLEL=1`
so NCShare classroom sessions parallelize IR-intensity displacements on
multi-core nodes. The Settings checkbox reflects the deployment value and is
locked while the variable is set; use `QUANTUI_FREQ_PARALLEL=0` to force off
site-wide.
- **`quantui setup` and `quantui run app`** — writes `~/QuantUI.ipynb` for
NCShare/JupyterLab (Render with Voilà). `run app` detects Apptainer +
Jupyter and exits with Voilà instructions instead of opening an unreachable
second port.
- **Parallel IR intensity displacements (CPU)** — Settings checkbox
(`compute.freq_parallel`) plus `QUANTUI_FREQ_PARALLEL` env override fans out
the 6N finite-difference SCF loop on hosts with ≥4 cores and ≥2 atoms. The
**CPU teaching SIF** sets `QUANTUI_FREQ_PARALLEL=1` by default; the checkbox
reflects the deployment value and locks while the env var is set.
- **Imaginary-mode perturbation** for Frequency reruns seeded from History.
- **Stage-aware frequency cost estimate** and per-phase run status labels (NMR,
Hessian, post-HF).
- **Preset theme palettes** replacing the invert filter (M-THEME THEME.6).
- **Quantum engine registry** (`quantui/engines/`) and
`ComputeSettings.quantum_engine` field (M-PYFOCK PYF.1 groundwork).
- **Static Raman spectrum** on the Analysis tab (M-SPECTRA2).

### Fixed

- **Mulliken 3D viewer** could render blank after geometry persistence and lazy
panel activation (#103).
- **`apptainer/quantui-gpu.def` never installed the `xtb` extra**, so GFN-FF
metal-capable classical pre-optimization (DEC-018) was unavailable in every
GPU/HPC image — the app correctly reported the honest-failure message
Expand Down
2 changes: 1 addition & 1 deletion apptainer/quantui-gpu.def
Original file line number Diff line number Diff line change
Expand Up @@ -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.1
QUANTUI_VERSION=0.8.2

%help
QuantUI — GPU image (PySCF + gpu4pyscf on CUDA 12.x, xtb GFN-FF pre-opt)
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "quantui"
version = "0.8.1"
version = "0.8.2"
description = "An open-source frontend for DFT and post-HF quantum chemistry with PySCF"
readme = "README.md"
requires-python = ">=3.9"
Expand Down
2 changes: 1 addition & 1 deletion quantui/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
PySCF requires Linux/macOS/WSL. Windows users should use the Apptainer container.
"""

__version__ = "0.8.1"
__version__ = "0.8.2"

import logging
from typing import Any
Expand Down