quantui 0.10.0__tar.gz → 0.11.1__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.10.0 → quantui-0.11.1}/CHANGELOG.md +300 -1
- {quantui-0.10.0/quantui.egg-info → quantui-0.11.1}/PKG-INFO +13 -7
- {quantui-0.10.0 → quantui-0.11.1}/README.md +8 -2
- {quantui-0.10.0 → quantui-0.11.1}/pyproject.toml +5 -5
- quantui-0.11.1/quantui/__init__.py +311 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/app.py +466 -83
- {quantui-0.10.0 → quantui-0.11.1}/quantui/app_analysis.py +153 -27
- {quantui-0.10.0 → quantui-0.11.1}/quantui/app_builders.py +559 -284
- {quantui-0.10.0 → quantui-0.11.1}/quantui/app_exports.py +22 -23
- {quantui-0.10.0 → quantui-0.11.1}/quantui/app_formatters.py +432 -144
- {quantui-0.10.0 → quantui-0.11.1}/quantui/app_history.py +12 -6
- {quantui-0.10.0 → quantui-0.11.1}/quantui/app_launcher.py +218 -5
- {quantui-0.10.0 → quantui-0.11.1}/quantui/app_measurement.py +18 -19
- {quantui-0.10.0 → quantui-0.11.1}/quantui/app_runflow.py +190 -74
- {quantui-0.10.0 → quantui-0.11.1}/quantui/app_slurm.py +57 -7
- {quantui-0.10.0 → quantui-0.11.1}/quantui/app_structure_edit.py +3 -4
- quantui-0.11.1/quantui/app_viewer.py +183 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/app_visualization.py +356 -110
- {quantui-0.10.0 → quantui-0.11.1}/quantui/app_xyz_input.py +25 -10
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/__init__.py +2 -3
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/base.py +3 -3
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/batch_chain.py +27 -10
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/batch_input.py +65 -6
- quantui-0.11.1/quantui/backends/batch_status.py +213 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/cluster_config.py +87 -6
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/dispatch.py +12 -4
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/local.py +3 -3
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/registry.py +6 -5
- quantui-0.11.1/quantui/backends/result_summary.py +146 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/slurm.py +42 -18
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/slurm_ingest.py +40 -13
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/slurm_utils.py +111 -18
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/worker.py +509 -32
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/worker_payload.py +86 -32
- {quantui-0.10.0 → quantui-0.11.1}/quantui/batch_launcher.py +8 -1
- {quantui-0.10.0 → quantui-0.11.1}/quantui/calc_log.py +159 -77
- {quantui-0.10.0 → quantui-0.11.1}/quantui/calculator.py +18 -3
- quantui-0.11.1/quantui/checklist_widget.py +60 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/checkpoint.py +16 -15
- {quantui-0.10.0 → quantui-0.11.1}/quantui/cli.py +172 -7
- {quantui-0.10.0 → quantui-0.11.1}/quantui/comparison.py +7 -2
- {quantui-0.10.0 → quantui-0.11.1}/quantui/config.py +43 -10
- {quantui-0.10.0 → quantui-0.11.1}/quantui/connectivity.py +12 -11
- {quantui-0.10.0 → quantui-0.11.1}/quantui/data/launcher/quantui_batch.py +165 -22
- {quantui-0.10.0 → quantui-0.11.1}/quantui/data/library/library.sqlite +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/data/manifests/presets.json +60 -40
- {quantui-0.10.0 → quantui-0.11.1}/quantui/density_fitting.py +3 -3
- {quantui-0.10.0 → quantui-0.11.1}/quantui/descriptor_cards.py +13 -2
- {quantui-0.10.0 → quantui-0.11.1}/quantui/downloads.py +1 -1
- {quantui-0.10.0 → quantui-0.11.1}/quantui/engines/base.py +3 -2
- {quantui-0.10.0 → quantui-0.11.1}/quantui/engines/pyscf_engine.py +2 -2
- {quantui-0.10.0 → quantui-0.11.1}/quantui/estimator_eval.py +1 -1
- {quantui-0.10.0 → quantui-0.11.1}/quantui/freq_calc.py +365 -42
- {quantui-0.10.0 → quantui-0.11.1}/quantui/freq_displacement_ids.py +4 -5
- {quantui-0.10.0 → quantui-0.11.1}/quantui/freq_ir_workers.py +12 -12
- {quantui-0.10.0 → quantui-0.11.1}/quantui/freq_raman_workers.py +7 -7
- {quantui-0.10.0 → quantui-0.11.1}/quantui/help_content.py +42 -2
- {quantui-0.10.0 → quantui-0.11.1}/quantui/inorganic_guards.py +1 -1
- {quantui-0.10.0 → quantui-0.11.1}/quantui/ir_plot.py +34 -7
- quantui-0.11.1/quantui/irc.py +431 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/live_log.py +7 -5
- {quantui-0.10.0 → quantui-0.11.1}/quantui/log_utils.py +2 -2
- {quantui-0.10.0 → quantui-0.11.1}/quantui/measurement.py +1 -1
- {quantui-0.10.0 → quantui-0.11.1}/quantui/molecule.py +3 -5
- {quantui-0.10.0 → quantui-0.11.1}/quantui/molecule_library.py +28 -5
- {quantui-0.10.0 → quantui-0.11.1}/quantui/nmr_calc.py +7 -5
- {quantui-0.10.0 → quantui-0.11.1}/quantui/nmr_plot.py +20 -6
- {quantui-0.10.0 → quantui-0.11.1}/quantui/optimizer.py +40 -9
- {quantui-0.10.0 → quantui-0.11.1}/quantui/orbital_visualization.py +221 -40
- {quantui-0.10.0 → quantui-0.11.1}/quantui/pes_scan.py +4 -4
- {quantui-0.10.0 → quantui-0.11.1}/quantui/pes_scan_ui.py +4 -2
- {quantui-0.10.0 → quantui-0.11.1}/quantui/populations_overlay.py +84 -20
- {quantui-0.10.0 → quantui-0.11.1}/quantui/preopt.py +1 -1
- {quantui-0.10.0 → quantui-0.11.1}/quantui/progress.py +37 -1
- {quantui-0.10.0 → quantui-0.11.1}/quantui/pubchem.py +3 -3
- {quantui-0.10.0 → quantui-0.11.1}/quantui/raman_calc.py +8 -8
- {quantui-0.10.0 → quantui-0.11.1}/quantui/raman_plot.py +18 -7
- {quantui-0.10.0 → quantui-0.11.1}/quantui/reorganization_energy.py +15 -15
- {quantui-0.10.0 → quantui-0.11.1}/quantui/results_storage.py +35 -9
- {quantui-0.10.0 → quantui-0.11.1}/quantui/scf_robust.py +12 -14
- {quantui-0.10.0 → quantui-0.11.1}/quantui/session_calc.py +52 -31
- {quantui-0.10.0 → quantui-0.11.1}/quantui/spin_presets.py +1 -1
- {quantui-0.10.0 → quantui-0.11.1}/quantui/structure_edit.py +1 -1
- {quantui-0.10.0 → quantui-0.11.1}/quantui/structure_upload.py +1 -1
- quantui-0.11.1/quantui/symmetry.py +968 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/tddft_calc.py +15 -13
- {quantui-0.10.0 → quantui-0.11.1}/quantui/theme.py +49 -4
- {quantui-0.10.0 → quantui-0.11.1}/quantui/ts_search.py +74 -46
- {quantui-0.10.0 → quantui-0.11.1}/quantui/user_settings.py +37 -5
- {quantui-0.10.0 → quantui-0.11.1}/quantui/visualization_py3dmol.py +14 -5
- {quantui-0.10.0 → quantui-0.11.1}/quantui/viz_assets.py +109 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/viz_backend_router.py +1 -1
- {quantui-0.10.0 → quantui-0.11.1}/quantui/xyz_input.py +5 -4
- {quantui-0.10.0 → quantui-0.11.1/quantui.egg-info}/PKG-INFO +13 -7
- {quantui-0.10.0 → quantui-0.11.1}/quantui.egg-info/SOURCES.txt +5 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui.egg-info/requires.txt +4 -4
- quantui-0.10.0/quantui/__init__.py +0 -311
- quantui-0.10.0/quantui/symmetry.py +0 -399
- {quantui-0.10.0 → quantui-0.11.1}/LICENSE +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/MANIFEST.in +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/SECURITY.md +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/analytics.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/app_pes_pick.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/ase_bridge.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/cluster_security.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/backends/slurm_errors.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/benchmarks.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/c_stderr.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/cactus.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/cancellation.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/data/js/3Dmol-min.js +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/data/js/3Dmol-min.js.LICENSE.txt +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/data/manifests/bulk_qm9.json +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/data/manifests/curated.json +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/data/manifests/inorganic.json +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/engines/__init__.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/engines/pyfock_engine.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/gpu_offload.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/issue_tracker.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/mulliken_plot.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/pyfock_gpu.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/security.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/structure_providers.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/utils.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui/vib_cache.py +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui.egg-info/dependency_links.txt +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui.egg-info/entry_points.txt +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/quantui.egg-info/top_level.txt +0 -0
- {quantui-0.10.0 → quantui-0.11.1}/setup.cfg +0 -0
|
@@ -7,6 +7,303 @@ and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.ht
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.11.1] - 2026-11-02
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Documentation site: an "Open the Viewer" link in the Home sidebar and on
|
|
15
|
+
the home page, a two-column Features page, and shorter text throughout.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- **IRC no longer ends both directions in the same minimum.** Sella's
|
|
20
|
+
iterative estimate of the starting Hessian could carry a spurious mode,
|
|
21
|
+
so from a transition state converged only to the force threshold the
|
|
22
|
+
first step went sideways and both directions fell into one valley. The
|
|
23
|
+
IRC now starts from PySCF's analytic Hessian, as the transition-state
|
|
24
|
+
search already does. If Sella's inner loop fails, the direction is
|
|
25
|
+
finished by mass-weighted steepest descent before a short-step BFGS;
|
|
26
|
+
if both ends still match, the verdict says so rather than reporting a
|
|
27
|
+
connection.
|
|
28
|
+
- Viewer installer builds use the `macos-15` runner (`macos-14` is retired).
|
|
29
|
+
|
|
30
|
+
## [0.11.0] - 2026-11-01
|
|
31
|
+
|
|
32
|
+
### Added
|
|
33
|
+
|
|
34
|
+
- **IRC calc type** (M-TS TS.3, engine Sella): follows the reaction path
|
|
35
|
+
downhill from a transition state in both directions, in mass-weighted
|
|
36
|
+
coordinates, to the two minima it connects. Pick the Transition State
|
|
37
|
+
result under *Start from*. The card gives the barrier from each side and
|
|
38
|
+
a verdict; the PES Scan panel plots energy against the reaction coordinate
|
|
39
|
+
(click a point to jump the Trajectory panel there); Trajectory plays
|
|
40
|
+
reactant → TS → product; History replays both. Steps of 0.2 Å·amu½ with
|
|
41
|
+
Sella's gamma at 0.4 (measured: 35–71 SCFs per direction where the
|
|
42
|
+
defaults stalled); if Sella's inner loop gives out near a minimum, that
|
|
43
|
+
direction is finished by minimizing and the card says so. PCM supported.
|
|
44
|
+
Also a batch job (`--calc irc`, usually `--from` a Transition State job;
|
|
45
|
+
no mid-path resume) in `quantui submit`, `quantui-batch` and the app's
|
|
46
|
+
SLURM path; `results` prints the barriers and verdict.
|
|
47
|
+
- **Full symmetry labels for D4h, D4, C4v and D2d** vibrational modes
|
|
48
|
+
(square-planar, square-pyramidal and allene-type molecules) instead of
|
|
49
|
+
their D2h/C2v/D2 subgroup labels. B1 and B2 follow the usual convention
|
|
50
|
+
(C2′ axes, or σv planes, through the ligands), so a square-planar AB4's
|
|
51
|
+
B1g is the in-plane stretch. Point-group detection for mode labels no
|
|
52
|
+
longer drops to a lower group at the loose tolerance (an exact square
|
|
53
|
+
pyramid was labelled C2v).
|
|
54
|
+
- **The Viewer draws the HOMO and LUMO** (M-VIEWER VW.7): when orbitals are
|
|
55
|
+
saved (app or batch job), the HOMO and LUMO, each spin for unrestricted
|
|
56
|
+
results, are also saved as gzipped cubes at the Isosurface panel's
|
|
57
|
+
default grid (about 0.4 MB each; `frontier_cubes/`). The desktop and
|
|
58
|
+
browser Viewer, which have no PySCF, draw those; for any other orbital,
|
|
59
|
+
density or ESP they say to open the result in the full QuantUI. Set
|
|
60
|
+
`QUANTUI_FRONTIER_CUBES=0` to skip them.
|
|
61
|
+
- **`quantui view` opens the last folder it showed** when started without
|
|
62
|
+
one (desktop shortcuts), instead of the home directory.
|
|
63
|
+
- **`quantui jobs`** (M-BATCH2 B2.9): your batch jobs, newest first, with
|
|
64
|
+
where each one is: waiting, running (with the worker's progress),
|
|
65
|
+
done or failed. With `squeue` on PATH it refreshes the job records from
|
|
66
|
+
the queue first; without it (an OnDemand session) it reads each job
|
|
67
|
+
folder. `--running` lists unfinished jobs, `--all` every job.
|
|
68
|
+
- **History lists batch jobs not finished yet** (B2.10): on app start and
|
|
69
|
+
on Refresh, jobs submitted from a terminal show their state and progress
|
|
70
|
+
from their job folders, since OnDemand has no `squeue`. A
|
|
71
|
+
terminal-submitted job's record is marked succeeded when its result is
|
|
72
|
+
saved to History.
|
|
73
|
+
- **Transition State as a batch job** (M-TS TS.5): `quantui submit`,
|
|
74
|
+
`quantui-batch submit --calc transition_state` and the app's SLURM path
|
|
75
|
+
run the same Sella search and frequency check as the window, PCM included.
|
|
76
|
+
A killed job resumes the search from its last step, never redoes a
|
|
77
|
+
finished search, and keeps the frequency check's finished displacements.
|
|
78
|
+
History shows the stationary point found with its search path;
|
|
79
|
+
`results` prints the verdict; `--from` a TS job starts from its saddle
|
|
80
|
+
point. A post-HF method is refused before the job queues. Both Apptainer
|
|
81
|
+
images now install the `[ts]` extra (Sella), which Transition State needs
|
|
82
|
+
on the cluster in the window as well.
|
|
83
|
+
- **Clarity and layout pass** (M-UIPOLISH, from a rendered-UI walk-through):
|
|
84
|
+
- Molecules open facing the camera in every viewer (principal axes), so
|
|
85
|
+
water no longer looks linear and the dipole arrow is visible.
|
|
86
|
+
- The library finds common names ("water", "ammonia", "benzene"); QM9
|
|
87
|
+
entries come after the curated ones and duplicates are listed once.
|
|
88
|
+
- Two-column layouts on wide screens: Calculate (molecule | setup + run),
|
|
89
|
+
Results (card | structure), and the Analysis viewer, Mulliken,
|
|
90
|
+
Vibrational and Orbital panels; they stack on narrow windows.
|
|
91
|
+
- One-line header with the toolbar, a one-line step indicator, the
|
|
92
|
+
"Calculation complete" links right under Run, and a shorter, resizable
|
|
93
|
+
log that hides internal bookkeeping lines.
|
|
94
|
+
- Analysis lists the panels that have data first; plots opened from a
|
|
95
|
+
collapsed panel fill their width; Raman follows the IR axis direction.
|
|
96
|
+
- UV-Vis shows vacuum-UV bands (the window started at 100 nm) and lists
|
|
97
|
+
the excited states; NMR groups equivalent nuclei and uses one
|
|
98
|
+
Atom | σ | δ table.
|
|
99
|
+
- Live and History result cards show the same rows; frequencies are
|
|
100
|
+
listed with their symmetry labels; formulas read NH3, not H3N.
|
|
101
|
+
- Compare uses checkboxes and renders its chart; History offers recent
|
|
102
|
+
results as links with the other filters folded away; Help and Report
|
|
103
|
+
Issue open as side drawers (Esc closes both).
|
|
104
|
+
- Shorter copy throughout, a 12 px minimum text size, clearer section
|
|
105
|
+
headings, neutral Report Issue / Exit / idle Cancel buttons.
|
|
106
|
+
- Fixed: the System Settings GPU row could stay at "checking…" forever.
|
|
107
|
+
- **Vibrational-mode symmetry labels** (M-SPECTRA2 SPC2.4) — after a Frequency
|
|
108
|
+
calculation each normal mode gets its irreducible representation: a *Sym.*
|
|
109
|
+
column and a Γvib caption in the Vibrational mode table (NH₃: 2A₁ + 2E), the
|
|
110
|
+
label in the mode dropdown, and a *Symmetry* line in the IR and Raman stick
|
|
111
|
+
hovers. Works for live results and History reloads (computed from the saved
|
|
112
|
+
displacements). Full-group labels for abelian groups, C3v, D3h, D3, D3d, D6h,
|
|
113
|
+
Td, Oh and linear molecules (σ/π); other groups (e.g. D4h) show labels in
|
|
114
|
+
PySCF's computational subgroup, said so in the caption.
|
|
115
|
+
`quantui.symmetry.label_mode_irreps()`.
|
|
116
|
+
- **Diffuse basis sets** — `6-31+G*`, `6-31++G**`, `aug-cc-pVDZ` and
|
|
117
|
+
`def2-SVPD` join the basis menu (each next to the set it extends), for
|
|
118
|
+
anions, radical anions and weakly bound species. Available with PySCF in the
|
|
119
|
+
app, `quantui submit` and `quantui-batch`; PyFock's menu is unchanged.
|
|
120
|
+
`6-31+G(d)` / `6-31++G(d,p)` are accepted as the same sets. The basis card
|
|
121
|
+
marks them *Diffuse*, the educational notes explain them and nudge an anion
|
|
122
|
+
on a non-diffuse basis toward one, and the basis-set help topic has a new
|
|
123
|
+
*Anions need diffuse functions* paragraph. SLURM memory factors and the time
|
|
124
|
+
estimator's basis-function table cover the new sets.
|
|
125
|
+
`config.DIFFUSE_BASIS_SETS` / `config.is_diffuse_basis()` list them.
|
|
126
|
+
- **`quantui results JOB_DIR`** — the `quantui-batch results` summary
|
|
127
|
+
(convergence, energy, imaginary modes, strongest IR bands, excited states,
|
|
128
|
+
NMR shifts) from inside the image. Both now also note a saddle-point
|
|
129
|
+
retry.
|
|
130
|
+
- **Site limits for batch jobs** — `QUANTUI_SLURM_MAX_MEMORY_GB`,
|
|
131
|
+
`QUANTUI_SLURM_ESTIMATE_MAX_MEMORY_GB` and `QUANTUI_SLURM_MAX_CORES` set the
|
|
132
|
+
hard limits and the automatic estimate's own memory ceiling (defaults
|
|
133
|
+
unchanged: 128 GB, 32 cores). Set them in the image environment before
|
|
134
|
+
`quantui install-launcher` so `quantui-batch` uses the same values.
|
|
135
|
+
- **Viewer mode (`quantui view [FOLDER]`)** — a lightweight QuantUI with only
|
|
136
|
+
the History and Analysis tabs, pointed at a results folder, needing no quantum
|
|
137
|
+
engine. `QuantUIApp(viewer=True, results_dir=...)` adds a results-folder bar
|
|
138
|
+
above the tabs; `quantui view` starts Voilà on a free `127.0.0.1` port and
|
|
139
|
+
opens the browser. Packaging for two delivery routes lives in
|
|
140
|
+
`packaging/viewer/` (unsigned conda-constructor desktop installers and a
|
|
141
|
+
Voici/Pyodide browser build), built by the new `viewer-builds` workflow.
|
|
142
|
+
- **QuantUI Viewer in the docs** — new *QuantUI Viewer* page
|
|
143
|
+
(`/viewer/`) with a link to the browser Viewer, which the Pages workflow now
|
|
144
|
+
builds and publishes at `/viewer/app/` on each release and docs change.
|
|
145
|
+
Publishing a release also attaches the three Viewer installers to it.
|
|
146
|
+
- **SLURM GPU and account settings** — `QUANTUI_SLURM_GRES`,
|
|
147
|
+
`QUANTUI_SLURM_QOS` and `QUANTUI_SLURM_ACCOUNT` add `#SBATCH --gres`,
|
|
148
|
+
`--qos` and `--account` lines to generated batch scripts (app, `quantui
|
|
149
|
+
submit` and `quantui-batch`). A GRES that asks for a GPU also turns on
|
|
150
|
+
`apptainer exec --nv`; `QUANTUI_SLURM_NV=1`/`0` overrides that.
|
|
151
|
+
- **Batch Geometry Opt results are complete** — a SLURM `geometry_opt`
|
|
152
|
+
result now records the optimized geometry (`final_molecule`), the final
|
|
153
|
+
SCF's dipole moment and Mulliken charges, so History and
|
|
154
|
+
`quantui-batch results` show them without a follow-up single point.
|
|
155
|
+
`--from` chaining reads the recorded geometry.
|
|
156
|
+
|
|
157
|
+
### Changed
|
|
158
|
+
|
|
159
|
+
- **`quantui view` needs a per-run token.** It listened on 127.0.0.1 with
|
|
160
|
+
no authentication, so any local process or web page could start kernels
|
|
161
|
+
on its port; it now starts Voila with a random token and opens the URL
|
|
162
|
+
that carries it. A request without it gets a login page. (Standalone
|
|
163
|
+
Voila has no XSRF setting, so the `disable_check_xsrf` flag was never in
|
|
164
|
+
effect for the viewer; DEC-001's container setting is unchanged.)
|
|
165
|
+
- **Frequency results check the geometry** — every Frequency run now
|
|
166
|
+
computes the forces at the input geometry. When the largest force is above
|
|
167
|
+
the Geometry Opt threshold (0.05 eV/Å) the result card (live and History)
|
|
168
|
+
and the Analysis thermochemistry box warn that the geometry is not a
|
|
169
|
+
stationary point, so its frequencies and thermochemistry are not
|
|
170
|
+
meaningful, and say how to fix it. `FreqResult.max_force_ev_per_ang`;
|
|
171
|
+
saved as `spectra.ir.max_force_ev_per_ang`.
|
|
172
|
+
- **IR spectra run 4000 → 400 cm⁻¹ by default** (FTIR convention). An
|
|
173
|
+
**Axis** dropdown on the IR panel switches back to 400 → 4000; the choice
|
|
174
|
+
is remembered (`viz.ir_axis` in user settings). `plot_ir_spectrum()` gains
|
|
175
|
+
`descending=`.
|
|
176
|
+
- **Energy-level diagram hides core orbitals by default** — occupied
|
|
177
|
+
orbitals more than 50 eV below the HOMO (e.g. water's O 1s) no longer set
|
|
178
|
+
the Y range and squeeze the valence levels into a sliver; the subtitle says
|
|
179
|
+
how many are hidden and a **Show core orbitals** checkbox restores them.
|
|
180
|
+
The HOMO–LUMO gap label no longer overlaps the axis labels.
|
|
181
|
+
- **Dipole arrow convention** — the Mulliken panel says which end the arrow
|
|
182
|
+
head marks and offers both conventions (− → +, IUPAC/physics, default; or
|
|
183
|
+
+ → −, the chemistry crossed arrow), remembered as `viz.dipole_arrow`.
|
|
184
|
+
- **Frequency card** — title reads "H2O · B3LYP/6-31G* (RKS)"; H and G are
|
|
185
|
+
shown with their thermal correction vs E in kJ/mol instead of an absolute
|
|
186
|
+
kJ/mol value.
|
|
187
|
+
- **Less duplication, tidier layout** — viewers no longer repeat the molecule
|
|
188
|
+
facts in a "Molecule Information" box; the launcher notebook drops its
|
|
189
|
+
duplicate "QuantUI" heading; result tables are compact and left-aligned;
|
|
190
|
+
the empty Calculate tab no longer reserves a blank viewer block.
|
|
191
|
+
- **Esc closes the Help panel** (as does its Close button).
|
|
192
|
+
- **Clearer controls** — no more truncated labels or "?.." buttons; PES atom
|
|
193
|
+
chips read "O1"; XYZ table headers line up; a **Done** button closes the
|
|
194
|
+
molecule editor; the Help panel has a **Close** button; System Settings
|
|
195
|
+
groups all settings in one card and says PlotlyMol; the activity indicator
|
|
196
|
+
is a neutral status chip; History, Compare and the Analysis heading show
|
|
197
|
+
readable times ("2026-10-25 04:31").
|
|
198
|
+
- **Context-aware extras** — the spin-state helper appears only for molecules
|
|
199
|
+
with a transition metal; "Use mode → new Frequency calc" only when there
|
|
200
|
+
are imaginary modes; Analysis panels that don't apply say what they need in
|
|
201
|
+
their title; dark themes give 3D viewers the panel colour (also in PNG
|
|
202
|
+
exports) instead of black.
|
|
203
|
+
- `import quantui` no longer loads numpy, RDKit, ASE, Plotly, IPython or
|
|
204
|
+
requests; every public name is resolved when first used. `quantui`
|
|
205
|
+
command-line tools and the batch worker start in a fraction of the time,
|
|
206
|
+
which matters on cluster login nodes (slow shared filesystems, per-user
|
|
207
|
+
thread limits).
|
|
208
|
+
|
|
209
|
+
### Fixed
|
|
210
|
+
|
|
211
|
+
- **"Copy path" in the browser viewer** no longer raises: Pyodide cannot
|
|
212
|
+
start the thread that resets the label, so the label just stays.
|
|
213
|
+
- **`quantui-batch check` prints a fix hint only under a failed or warning
|
|
214
|
+
line.** Passing lines showed their hint too (`[ok ] image …` followed by
|
|
215
|
+
"ask your instructor: the course image is missing or unreadable"), which
|
|
216
|
+
read as an error to students.
|
|
217
|
+
- **Generate Isosurface works again for molecular orbitals** — it failed for
|
|
218
|
+
every MO with `unexpected keyword argument 'esp_range'` since the ESP-map
|
|
219
|
+
release. The orbital gallery was not affected.
|
|
220
|
+
- **Edit Structure stays available after a molecule loads** — loading or
|
|
221
|
+
changing a molecule rebuilt the Calculate panel without it.
|
|
222
|
+
- **Mulliken viewer** opens charge-coloured with the dipole arrow when those
|
|
223
|
+
boxes are ticked, instead of only after a box was toggled.
|
|
224
|
+
- **Sliders are visible on every theme** (ipywidgets 8 sliders were unstyled:
|
|
225
|
+
no visible track, and a white handle on the Light theme), and the selected
|
|
226
|
+
option of toggle-button groups and History filter chips is now highlighted.
|
|
227
|
+
- The QM pre-optimization checkbox no longer keeps the PES Scan wording
|
|
228
|
+
("…before scan") after switching to another calculation type.
|
|
229
|
+
- The Files tab re-lists its folder when opened, so newly saved results show
|
|
230
|
+
without clicking Refresh.
|
|
231
|
+
- PES Scan: suggested Start/Stop values are rounded (0.001 Å / 0.1°) and the
|
|
232
|
+
unit label sits after Stop rather than after Points.
|
|
233
|
+
- **Time-estimate basis-function counts** — the per-element table behind
|
|
234
|
+
`calc_log.count_basis_functions` had drifted from PySCF for 75 entries
|
|
235
|
+
(every element in def2-TZVP, e.g. H 14 instead of 6; Li/Be and Na–Ar in
|
|
236
|
+
the 6-31G*, cc-pV*Z and def2-SVP rows; Al–Ar in 3-21G/6-31G). It is now
|
|
237
|
+
generated from PySCF's AO counts and a test checks every entry. History
|
|
238
|
+
records logged before this keep their old `n_basis`, so estimates for
|
|
239
|
+
def2-TZVP and second-row/heavier molecules settle as new runs are logged.
|
|
240
|
+
- **CPU image no longer overrides a caller's `QUANTUI_RESULTS_DIR` /
|
|
241
|
+
`QUANTUI_FREQ_PARALLEL`** (M-BATCH2 B2.12). `apptainer/quantui.def`
|
|
242
|
+
hard-exported both, so a site module or job script setting either was
|
|
243
|
+
silently clobbered inside the container. Both are now defaults
|
|
244
|
+
(`${VAR:-default}`), matching `quantui-gpu.def`.
|
|
245
|
+
|
|
246
|
+
- History's **Refresh** button also saves batch jobs that finished since
|
|
247
|
+
the app started; before, they appeared only after a restart or a Cluster
|
|
248
|
+
Jobs refresh.
|
|
249
|
+
- The batch resource estimate knows def2-SVP, def2-TZVP and LANL2DZ (they
|
|
250
|
+
used a generic factor), treats `6-31G(d)` / `6-31G(d,p)` like `6-31G*` /
|
|
251
|
+
`6-31G**`, and adds walltime for TD-DFT runs with more than 10 states and
|
|
252
|
+
PES scans with more than 10 points.
|
|
253
|
+
- Batch `live.log` files no longer contain a copy of QuantUI's worker
|
|
254
|
+
source. PySCF writes the running script into its output at the log level
|
|
255
|
+
QuantUI uses; in a batch job that script is the worker (~900 lines per
|
|
256
|
+
calculation). PySCF's version and input summary are still logged.
|
|
257
|
+
- Batch job and folder names write Pople bases the usual way: `6-31G*` →
|
|
258
|
+
`6-31Gd`, `6-31G(d,p)` → `6-31Gdp`, `6-31+G*` → `6-31pGd` (was
|
|
259
|
+
`6-31Gx`, `6-31Gxdxpx`, …).
|
|
260
|
+
- `quantui submit` and `quantui-batch` refuse an XYZ file whose first line
|
|
261
|
+
gives a different atom count from the atoms listed (a cut-off or padded
|
|
262
|
+
file). The app still only warns, where you see the structure.
|
|
263
|
+
- `quantui submit` (and Resubmit) syncs job states with the SLURM queue before
|
|
264
|
+
checking the concurrent-job limit. With no app open, finished jobs stayed
|
|
265
|
+
"submitted" in the registry and kept counting, so after two submissions
|
|
266
|
+
every further one was refused.
|
|
267
|
+
- Generated SLURM scripts ask for one task with N CPUs
|
|
268
|
+
(`--ntasks=1 --cpus-per-task=N`) instead of N tasks, which is what the
|
|
269
|
+
single multi-threaded worker uses; a `SLURM_CPUS_PER_TASK` inherited from
|
|
270
|
+
the submitting allocation no longer sets the thread count.
|
|
271
|
+
- `apptainer exec --nv` is no longer used for CPU jobs, and the worker runs
|
|
272
|
+
the batch image's own `python` instead of the submitting process's
|
|
273
|
+
interpreter path, which need not exist in that image.
|
|
274
|
+
- SLURM jobs resume again after a resubmission. Since job folders got one
|
|
275
|
+
attempt folder per run, the checkpoint and the cached pre-opt geometry
|
|
276
|
+
were kept inside the attempt folder, which the next attempt never sees,
|
|
277
|
+
so killed geometry optimizations, PES scans and frequency runs restarted
|
|
278
|
+
from scratch. Both now live in the job folder.
|
|
279
|
+
- The geometry optimization before a Frequency calculation (app and batch)
|
|
280
|
+
now converges to 0.01 eV/Å instead of 0.05. Residual forces at 0.05 left
|
|
281
|
+
soft modes such as methyl rotors wrong, or imaginary (CHEM-3200 Lab 4).
|
|
282
|
+
Plain Geometry Opt and the pre-opt for other calc types are unchanged.
|
|
283
|
+
- When that pre-optimized Frequency run still finds an imaginary mode below
|
|
284
|
+
20i cm⁻¹ (usually a methyl or other rotor stuck at its eclipsed saddle
|
|
285
|
+
point), QuantUI displaces along the mode, re-optimizes and repeats the
|
|
286
|
+
frequencies once (app and batch). The result card and `result.json`
|
|
287
|
+
(`spectra.ir.imaginary_mode_retry`) say what was done; a mode still
|
|
288
|
+
imaginary after the retry is reported, not retried again.
|
|
289
|
+
- **Viewer installers: the shortcut opened and closed a console without
|
|
290
|
+
starting anything.** `quantui view` looked for the `voila` command on
|
|
291
|
+
`PATH`, which a shortcut launch of an unactivated install does not set; it
|
|
292
|
+
printed "Voilà is not installed or not on PATH" and exited. It now runs
|
|
293
|
+
Voilà as `python -m voila` from its own interpreter and puts the install's
|
|
294
|
+
folders on `PATH` for the server. The Windows shortcut runs through
|
|
295
|
+
`cmd /c ... || pause`, so any future failure stays on screen. Stopping
|
|
296
|
+
`quantui view` now stops Voilà too, instead of leaving it serving. The
|
|
297
|
+
installer CI smoke test starts the viewer the way a shortcut does and
|
|
298
|
+
fetches a page (it previously only ran `quantui view --help`).
|
|
299
|
+
|
|
300
|
+
- History → "View Results" / "View Analysis" navigated by fixed tab index, so
|
|
301
|
+
with the Cluster Jobs tab visible they landed one tab early. They now look
|
|
302
|
+
the tab up by name.
|
|
303
|
+
- Background renders (vibrational animation, isosurface, export) and the
|
|
304
|
+
activity-light timer fall back to running inline when threads are
|
|
305
|
+
unavailable instead of leaving the panel stuck.
|
|
306
|
+
|
|
10
307
|
## [0.10.0] - 2026-10-03
|
|
11
308
|
|
|
12
309
|
### Added
|
|
@@ -1093,7 +1390,9 @@ Initial public scaffolding of the QuantUI package: `quantui` package with
|
|
|
1093
1390
|
`calculator.py`, basic notebook launcher, Apptainer container definition,
|
|
1094
1391
|
MIT license, and project metadata.
|
|
1095
1392
|
|
|
1096
|
-
[Unreleased]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.
|
|
1393
|
+
[Unreleased]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.11.1...HEAD
|
|
1394
|
+
[0.11.1]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.11.0...v0.11.1
|
|
1395
|
+
[0.11.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.10.0...v0.11.0
|
|
1097
1396
|
[0.10.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.9.0...v0.10.0
|
|
1098
1397
|
[0.9.0]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.8.2...v0.9.0
|
|
1099
1398
|
[0.8.2]: https://github.com/The-Schultz-Lab/QuantUI/compare/v0.8.1...v0.8.2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quantui
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.11.1
|
|
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
|
|
@@ -66,7 +66,7 @@ Provides-Extra: pyfock
|
|
|
66
66
|
Requires-Dist: pyfock<0.3,>=0.1.7; extra == "pyfock"
|
|
67
67
|
Requires-Dist: ase<4,>=3.22.0; extra == "pyfock"
|
|
68
68
|
Requires-Dist: scipy<2,>=1.10; extra == "pyfock"
|
|
69
|
-
Requires-Dist: numba<0.
|
|
69
|
+
Requires-Dist: numba<0.69,>=0.57; extra == "pyfock"
|
|
70
70
|
Provides-Extra: ase
|
|
71
71
|
Requires-Dist: ase<4,>=3.22.0; extra == "ase"
|
|
72
72
|
Provides-Extra: xtb
|
|
@@ -99,11 +99,11 @@ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
|
99
99
|
Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
|
|
100
100
|
Requires-Dist: pytest-xdist>=3.0.0; extra == "dev"
|
|
101
101
|
Requires-Dist: build>=1.0.0; extra == "dev"
|
|
102
|
-
Requires-Dist: mypy<2.
|
|
102
|
+
Requires-Dist: mypy<2.5,>=1.10; extra == "dev"
|
|
103
103
|
Requires-Dist: types-requests>=2.28.0; extra == "dev"
|
|
104
|
-
Requires-Dist: black
|
|
104
|
+
Requires-Dist: black<26.11.0,>=26.5.1; python_version >= "3.10" and extra == "dev"
|
|
105
105
|
Requires-Dist: black~=25.11.0; python_version < "3.10" and extra == "dev"
|
|
106
|
-
Requires-Dist: ruff
|
|
106
|
+
Requires-Dist: ruff<0.18,>=0.16; extra == "dev"
|
|
107
107
|
Requires-Dist: pre-commit>=3.7.0; extra == "dev"
|
|
108
108
|
Dynamic: license-file
|
|
109
109
|
|
|
@@ -404,7 +404,9 @@ pip install "quantui[ts]"
|
|
|
404
404
|
|
|
405
405
|
Sella pulls in jax/jaxlib (about 380 MB) and is LGPL-3.0, used as a
|
|
406
406
|
separately installed library. Without it the calc type stays in the menu and
|
|
407
|
-
says how to install it.
|
|
407
|
+
says how to install it. It also runs as a SLURM batch job
|
|
408
|
+
(`quantui-batch submit FILE --calc transition_state`); both Apptainer images
|
|
409
|
+
include it.
|
|
408
410
|
|
|
409
411
|
### Optional: GFN-FF metal pre-optimization (xtb)
|
|
410
412
|
|
|
@@ -625,6 +627,7 @@ Five step-by-step notebooks in [`notebooks/tutorials/`](https://github.com/The-S
|
|
|
625
627
|
| Single Point | Energy, HOMO-LUMO gap, Mulliken charges, dipole moment |
|
|
626
628
|
| Geometry Opt | Optimised structure, trajectory animation; optional frozen atoms |
|
|
627
629
|
| Transition State | Saddle point near the input geometry (Sella, optional `[ts]` extra), then a frequency check: transition state, minimum, or higher-order saddle point; animated imaginary mode |
|
|
630
|
+
| IRC | Reaction path from a Transition State result, downhill both ways to the minima it connects (Sella); barrier from each side, energy profile and animated path |
|
|
628
631
|
| Frequency | Vibrational frequencies, ZPVE, IR intensities, thermochemistry at any temperature and pressure, animated normal modes, IR spectrum chart (stick / Lorentzian broadened) |
|
|
629
632
|
| UV-Vis (TD-DFT) | Excitation energies, oscillator strengths, UV-Vis spectrum plot |
|
|
630
633
|
| NMR Shielding | ¹H and ¹³C chemical shifts relative to TMS via GIAO; tabulated by element |
|
|
@@ -636,6 +639,9 @@ Five step-by-step notebooks in [`notebooks/tutorials/`](https://github.com/The-S
|
|
|
636
639
|
STO-3G (fast, good for learning) → 3-21G → 6-31G / 6-31G\* / 6-31G\*\* →
|
|
637
640
|
cc-pVDZ / cc-pVTZ → def2-SVP / def2-TZVP → LANL2DZ
|
|
638
641
|
|
|
642
|
+
**Diffuse** sets for anions (including radical anions) and weakly bound species:
|
|
643
|
+
6-31+G\* / 6-31++G\*\* / aug-cc-pVDZ / def2-SVPD.
|
|
644
|
+
|
|
639
645
|
For **transition metals and heavy elements**, use **def2-SVP** / **def2-TZVP**
|
|
640
646
|
or **LANL2DZ** — these carry the effective core potentials that cover metals,
|
|
641
647
|
whereas the Pople (`6-31G…`) and Dunning (`cc-pV…`) sets do not. QuantUI's
|
|
@@ -707,7 +713,7 @@ quantui/ Main package
|
|
|
707
713
|
notebooks/
|
|
708
714
|
molecule_computations.ipynb Main user-facing interface (3-cell launcher)
|
|
709
715
|
tutorials/ Step-by-step guided notebooks (01–05)
|
|
710
|
-
tests/ pytest test suite (~
|
|
716
|
+
tests/ pytest test suite (~4,100 tests; run in parallel via pytest-xdist)
|
|
711
717
|
apptainer/ Container definition for reproducible deployment
|
|
712
718
|
local-setup/ Conda environment definition
|
|
713
719
|
pyproject.toml Package metadata and tool config
|
|
@@ -295,7 +295,9 @@ pip install "quantui[ts]"
|
|
|
295
295
|
|
|
296
296
|
Sella pulls in jax/jaxlib (about 380 MB) and is LGPL-3.0, used as a
|
|
297
297
|
separately installed library. Without it the calc type stays in the menu and
|
|
298
|
-
says how to install it.
|
|
298
|
+
says how to install it. It also runs as a SLURM batch job
|
|
299
|
+
(`quantui-batch submit FILE --calc transition_state`); both Apptainer images
|
|
300
|
+
include it.
|
|
299
301
|
|
|
300
302
|
### Optional: GFN-FF metal pre-optimization (xtb)
|
|
301
303
|
|
|
@@ -516,6 +518,7 @@ Five step-by-step notebooks in [`notebooks/tutorials/`](https://github.com/The-S
|
|
|
516
518
|
| Single Point | Energy, HOMO-LUMO gap, Mulliken charges, dipole moment |
|
|
517
519
|
| Geometry Opt | Optimised structure, trajectory animation; optional frozen atoms |
|
|
518
520
|
| Transition State | Saddle point near the input geometry (Sella, optional `[ts]` extra), then a frequency check: transition state, minimum, or higher-order saddle point; animated imaginary mode |
|
|
521
|
+
| IRC | Reaction path from a Transition State result, downhill both ways to the minima it connects (Sella); barrier from each side, energy profile and animated path |
|
|
519
522
|
| Frequency | Vibrational frequencies, ZPVE, IR intensities, thermochemistry at any temperature and pressure, animated normal modes, IR spectrum chart (stick / Lorentzian broadened) |
|
|
520
523
|
| UV-Vis (TD-DFT) | Excitation energies, oscillator strengths, UV-Vis spectrum plot |
|
|
521
524
|
| NMR Shielding | ¹H and ¹³C chemical shifts relative to TMS via GIAO; tabulated by element |
|
|
@@ -527,6 +530,9 @@ Five step-by-step notebooks in [`notebooks/tutorials/`](https://github.com/The-S
|
|
|
527
530
|
STO-3G (fast, good for learning) → 3-21G → 6-31G / 6-31G\* / 6-31G\*\* →
|
|
528
531
|
cc-pVDZ / cc-pVTZ → def2-SVP / def2-TZVP → LANL2DZ
|
|
529
532
|
|
|
533
|
+
**Diffuse** sets for anions (including radical anions) and weakly bound species:
|
|
534
|
+
6-31+G\* / 6-31++G\*\* / aug-cc-pVDZ / def2-SVPD.
|
|
535
|
+
|
|
530
536
|
For **transition metals and heavy elements**, use **def2-SVP** / **def2-TZVP**
|
|
531
537
|
or **LANL2DZ** — these carry the effective core potentials that cover metals,
|
|
532
538
|
whereas the Pople (`6-31G…`) and Dunning (`cc-pV…`) sets do not. QuantUI's
|
|
@@ -598,7 +604,7 @@ quantui/ Main package
|
|
|
598
604
|
notebooks/
|
|
599
605
|
molecule_computations.ipynb Main user-facing interface (3-cell launcher)
|
|
600
606
|
tutorials/ Step-by-step guided notebooks (01–05)
|
|
601
|
-
tests/ pytest test suite (~
|
|
607
|
+
tests/ pytest test suite (~4,100 tests; run in parallel via pytest-xdist)
|
|
602
608
|
apptainer/ Container definition for reproducible deployment
|
|
603
609
|
local-setup/ Conda environment definition
|
|
604
610
|
pyproject.toml Package metadata and tool config
|
|
@@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta"
|
|
|
8
8
|
|
|
9
9
|
[project]
|
|
10
10
|
name = "quantui"
|
|
11
|
-
version = "0.
|
|
11
|
+
version = "0.11.1"
|
|
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"
|
|
@@ -142,7 +142,7 @@ pyfock = [
|
|
|
142
142
|
"scipy>=1.10,<2",
|
|
143
143
|
# 0.68.0rc1 can be selected by PyFock's permissive floor and brought a
|
|
144
144
|
# prerelease llvmlite that crashed at import on Linux/Python 3.12.
|
|
145
|
-
"numba>=0.57,<0.
|
|
145
|
+
"numba>=0.57,<0.69",
|
|
146
146
|
]
|
|
147
147
|
|
|
148
148
|
# ASE: structure I/O, extended molecule library, geometry optimisation
|
|
@@ -233,7 +233,7 @@ dev = [
|
|
|
233
233
|
# that let quantui.engines silently vanish from the shipped package
|
|
234
234
|
# while CI, always editable, stayed green).
|
|
235
235
|
"build>=1.0.0",
|
|
236
|
-
"mypy>=1.10,<2.
|
|
236
|
+
"mypy>=1.10,<2.5", # pinned, not an open floor — same reasoning as
|
|
237
237
|
# black/ruff below: it must agree with .pre-commit-config.yaml's rev,
|
|
238
238
|
# which is what CI enforces (M-TYPECHECK TYPE.2). A newer mypy silently
|
|
239
239
|
# disagrees: 2.x drops support for python_version = "3.9" (this repo's
|
|
@@ -251,9 +251,9 @@ dev = [
|
|
|
251
251
|
# could differ slightly from CI — CI's authority is the pinned pre-commit rev,
|
|
252
252
|
# whose lint job runs on 3.11, so run `pre-commit run` before pushing if you
|
|
253
253
|
# develop on 3.9. (ruff 0.16 needs only >=3.7, so it needs no split.)
|
|
254
|
-
"black
|
|
254
|
+
"black>=26.5.1,<26.11.0; python_version >= '3.10'",
|
|
255
255
|
"black~=25.11.0; python_version < '3.10'",
|
|
256
|
-
"ruff
|
|
256
|
+
"ruff>=0.16,<0.18",
|
|
257
257
|
"pre-commit>=3.7.0",
|
|
258
258
|
]
|
|
259
259
|
|