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
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@ Built for classroom teaching at the
- **3D visualization** — interactive py3Dmol or PlotlyMol viewer with a live
backend toggle when both are installed; post-calculation structure rendered
automatically in the results panel
- **In-session calculations** — RHF, UHF, 9 DFT functionals, MP2, and NMR
shielding via PySCF, running in your Python kernel (no batch submission)
- **In-session calculations** — RHF, UHF, 9 DFT functionals, MP2, NMR
shielding, TD-DFT UV-Vis, and 1D PES scans via PySCF, running in your
Python kernel (no batch submission)
- **Implicit solvent** — PCM solvation (Water, Ethanol, THF, DMSO,
Acetonitrile) via a single checkbox
- **Rich results** — total energy, HOMO-LUMO gap, Mulliken charges, dipole
Expand Down Expand Up @@ -148,6 +149,7 @@ Five step-by-step notebooks in [`notebooks/tutorials/`](notebooks/tutorials/):
| Frequency | Vibrational frequencies, ZPVE, IR intensities, thermochemistry (H/S/G at 298 K), animated normal modes, IR spectrum chart (stick / Lorentzian broadened) |
| UV-Vis (TD-DFT) | Excitation energies, oscillator strengths, UV-Vis spectrum plot |
| NMR Shielding | ¹H and ¹³C chemical shifts relative to TMS via GIAO; tabulated by element |
| PES Scan | 1D potential energy surface along a bond, angle, or dihedral; energy profile chart; geometry animation at each scan point |

### Basis sets

Expand Down Expand Up @@ -184,6 +186,7 @@ quantui/ Main package
ir_plot.py IR spectrum chart (stick and Lorentzian broadened)
tddft_calc.py TD-DFT UV-Vis excited-state calculations
nmr_calc.py NMR shielding + ¹H/¹³C chemical shift prediction
pes_scan.py 1D potential energy surface scan
optimizer.py QM geometry optimization with trajectory
visualization_py3dmol.py 3D viewer (py3Dmol + PlotlyMol backends)
pubchem.py PubChem molecule search
Expand All @@ -197,7 +200,7 @@ quantui/ Main package
notebooks/
molecule_computations.ipynb Main student-facing interface
tutorials/ Step-by-step guided notebooks (01–05)
tests/ pytest test suite (575+ tests)
tests/ pytest test suite (860+ tests)
apptainer/ Container definition for reproducible deployment
local-setup/ Conda environment definition
pyproject.toml Package metadata and tool config
Expand Down
6 changes: 5 additions & 1 deletion launch-native.bat
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@ REM last install (.dev_install_stamp). quantui/*.py changes are always live in
REM editable mode — reinstall is only needed after pyproject.toml changes or on
REM first use.
REM Uses port 8867 to avoid conflict with container-based launchers on 8866.
start "QuantUI [native]" wsl -d Ubuntu -- bash -c "cd '%WSLPATH%' && source ~/miniconda3/etc/profile.d/conda.sh && conda activate quantui && if [ pyproject.toml -nt .dev_install_stamp ] || ! python -c 'import quantui' 2>/dev/null; then pip install -e . -q && touch .dev_install_stamp; fi && voila notebooks/molecule_computations.ipynb --no-browser --port=8867 --ServerApp.disable_check_xsrf=True"
REM Clears quantui/__pycache__ on every launch to prevent stale .pyc bytecode
REM (WSL2 DrvFs does not reliably propagate Windows-side mtime changes, so Python
REM may load pre-edit bytecode even after source changes — see GOTCHAS.md).
REM PYTHONDONTWRITEBYTECODE=1 prevents a new stale cache from accumulating.
start "QuantUI [native]" wsl -d Ubuntu -- bash -c "cd '%WSLPATH%' && source ~/miniconda3/etc/profile.d/conda.sh && conda activate quantui && if [ pyproject.toml -nt .dev_install_stamp ] || ! python -c 'import quantui' 2>/dev/null; then pip install -e . -q && touch .dev_install_stamp; fi && rm -rf quantui/__pycache__ && PYTHONDONTWRITEBYTECODE=1 voila notebooks/molecule_computations.ipynb --no-browser --port=8867 --ServerApp.disable_check_xsrf=True"

echo Waiting for Voila to start...
timeout /t 6 /nobreak > nul
Expand Down
8 changes: 6 additions & 2 deletions local-setup/environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ dependencies:
- black>=24.0.0
- ruff>=0.4.0
# Install QuantUI in editable mode
# On Linux/WSL also run: conda install -c conda-forge pyscf pyscf-properties
- pyscf-properties # NMR and other properties (pyscf.prop); moved out of pyscf core in v2.0
# On Linux/WSL also run: conda install -c conda-forge pyscf
# (pyscf-properties is pip-only; installed here automatically)
# PyPI pyscf-properties 0.1.0 is missing the infrared module and has an NMR
# reshape bug fixed in commit 4eee5a4 (2024-11-07, unreleased). Install
# from GitHub source until a new release lands on PyPI.
- pyscf-properties @ git+https://github.com/pyscf/properties.git
- -e ..
7 changes: 5 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,12 @@ packages = ["quantui"]
[project.optional-dependencies]
# PySCF requires Linux/macOS/WSL — not available on Windows natively.
# Use the Apptainer container (apptainer/quantui.def) for Windows.
# pyscf-properties provides pyscf.prop (NMR, etc.) — moved out of core in PySCF 2.0.
# pyscf>=2.13.0: pyscf.prop.infrared is in pyscf 2.13.0+ core (creates the
# pyscf.prop namespace that infrared lives under).
# pyscf-properties: provides additional pyscf.prop.* modules (EFG, IR, etc.).
# NMR is accessed via pyscf.nmr (core, not overwritten by pyscf-properties).
pyscf = [
"pyscf>=2.3.0",
"pyscf>=2.13.0",
"pyscf-properties",
]

Expand Down
Loading
Loading