pm3-rs-python 0.1.2__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.
- pm3_rs_python-0.1.2/CHANGELOG.md +101 -0
- pm3_rs_python-0.1.2/Cargo.lock +1176 -0
- pm3_rs_python-0.1.2/Cargo.toml +33 -0
- pm3_rs_python-0.1.2/LICENSE +674 -0
- pm3_rs_python-0.1.2/PKG-INFO +160 -0
- pm3_rs_python-0.1.2/README.md +146 -0
- pm3_rs_python-0.1.2/THIRD_PARTY_NOTICES.md +63 -0
- pm3_rs_python-0.1.2/docs/python-api.md +172 -0
- pm3_rs_python-0.1.2/docs/rust-api.md +168 -0
- pm3_rs_python-0.1.2/docs/scope.md +46 -0
- pm3_rs_python-0.1.2/examples/ammonia.xyz +6 -0
- pm3_rs_python-0.1.2/examples/bench102.xyz +104 -0
- pm3_rs_python-0.1.2/examples/ethanol.xyz +11 -0
- pm3_rs_python-0.1.2/examples/formaldehyde.xyz +6 -0
- pm3_rs_python-0.1.2/examples/h2s.xyz +5 -0
- pm3_rs_python-0.1.2/examples/hcl.xyz +4 -0
- pm3_rs_python-0.1.2/examples/methane.xyz +7 -0
- pm3_rs_python-0.1.2/examples/methyl_radical.xyz +6 -0
- pm3_rs_python-0.1.2/examples/ticl4.xyz +7 -0
- pm3_rs_python-0.1.2/examples/water.xyz +5 -0
- pm3_rs_python-0.1.2/examples/water_distorted.xyz +5 -0
- pm3_rs_python-0.1.2/pyproject.toml +21 -0
- pm3_rs_python-0.1.2/python/pm3_rs/__init__.py +27 -0
- pm3_rs_python-0.1.2/python/pm3_rs/ase.py +175 -0
- pm3_rs_python-0.1.2/python/pm3_rs/native.py +175 -0
- pm3_rs_python-0.1.2/src/basis.rs +63 -0
- pm3_rs_python-0.1.2/src/bin/pm3_rs.rs +255 -0
- pm3_rs_python-0.1.2/src/constants.rs +58 -0
- pm3_rs_python-0.1.2/src/corrections/d3.rs +464 -0
- pm3_rs_python-0.1.2/src/corrections/h4.rs +397 -0
- pm3_rs_python-0.1.2/src/corrections/hx.rs +106 -0
- pm3_rs_python-0.1.2/src/corrections/mod.rs +138 -0
- pm3_rs_python-0.1.2/src/data/d3_c6_reference.csv +32388 -0
- pm3_rs_python-0.1.2/src/data/d3_r0ab.csv +4469 -0
- pm3_rs_python-0.1.2/src/data/d3_radii.csv +97 -0
- pm3_rs_python-0.1.2/src/data/element_data.csv +118 -0
- pm3_rs_python-0.1.2/src/data/pm3_global.csv +67 -0
- pm3_rs_python-0.1.2/src/data/pm3_pair_parameters.csv +75 -0
- pm3_rs_python-0.1.2/src/data/pm3_parameters.csv +53 -0
- pm3_rs_python-0.1.2/src/data/pm3_sparkles.csv +23 -0
- pm3_rs_python-0.1.2/src/data_tables.rs +135 -0
- pm3_rs_python-0.1.2/src/dual.rs +286 -0
- pm3_rs_python-0.1.2/src/dual2.rs +338 -0
- pm3_rs_python-0.1.2/src/error.rs +75 -0
- pm3_rs_python-0.1.2/src/fock.rs +507 -0
- pm3_rs_python-0.1.2/src/frame.rs +157 -0
- pm3_rs_python-0.1.2/src/gradient.rs +724 -0
- pm3_rs_python-0.1.2/src/hamiltonian.rs +375 -0
- pm3_rs_python-0.1.2/src/hessian.rs +2029 -0
- pm3_rs_python-0.1.2/src/integrals.rs +670 -0
- pm3_rs_python-0.1.2/src/integrals_d.rs +557 -0
- pm3_rs_python-0.1.2/src/lib.rs +60 -0
- pm3_rs_python-0.1.2/src/linalg.rs +366 -0
- pm3_rs_python-0.1.2/src/math.rs +136 -0
- pm3_rs_python-0.1.2/src/onecenter.rs +418 -0
- pm3_rs_python-0.1.2/src/optimizer.rs +259 -0
- pm3_rs_python-0.1.2/src/overlap.rs +701 -0
- pm3_rs_python-0.1.2/src/overlap_numeric.rs +254 -0
- pm3_rs_python-0.1.2/src/params.rs +883 -0
- pm3_rs_python-0.1.2/src/python.rs +376 -0
- pm3_rs_python-0.1.2/src/repulsion.rs +201 -0
- pm3_rs_python-0.1.2/src/rotations.rs +157 -0
- pm3_rs_python-0.1.2/src/scf.rs +1403 -0
- pm3_rs_python-0.1.2/src/system.rs +153 -0
- pm3_rs_python-0.1.2/tests/api_surface.rs +716 -0
- pm3_rs_python-0.1.2/tests/molecules.rs +250 -0
- pm3_rs_python-0.1.2/tests/test_python.py +125 -0
- pm3_rs_python-0.1.2/tests/test_python_api.py +370 -0
- pm3_rs_python-0.1.2/third_party/dftd3/NOTICE +18 -0
- pm3_rs_python-0.1.2/third_party/h_bonds4/NOTICE +21 -0
- pm3_rs_python-0.1.2/third_party/mopac/LICENSE +176 -0
- pm3_rs_python-0.1.2/third_party/pyseqm/NOTICE +23 -0
- pm3_rs_python-0.1.2/tools/extract_d3_data.py +131 -0
- pm3_rs_python-0.1.2/tools/extract_pm3_params.py +196 -0
- pm3_rs_python-0.1.2/tools/extract_report.md +9 -0
- pm3_rs_python-0.1.2/tools/oracle/ALL_ELEMENTS_FORCE_RESULTS.json +1035 -0
- pm3_rs_python-0.1.2/tools/oracle/ALL_ELEMENTS_RESULTS.json +1035 -0
- pm3_rs_python-0.1.2/tools/oracle/HEAVY_HALOGEN_FD005_RESULTS.json +66 -0
- pm3_rs_python-0.1.2/tools/oracle/PM3_VALIDATION.md +114 -0
- pm3_rs_python-0.1.2/tools/oracle/all_element_validation.py +413 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/ammonia.xyz +6 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/ar2.xyz +4 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/capped_methyl.xyz +7 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/formaldehyde.xyz +6 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/gdf3.xyz +6 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/h2s.xyz +5 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/hcl.xyz +4 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/heh_plus.xyz +4 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/methane.xyz +7 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/methyl_radical.xyz +6 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/ph3.xyz +6 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/sf6.xyz +9 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/sih4.xyz +7 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/ticl4.xyz +7 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/water_dimer.xyz +8 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/water_minus.xyz +6 -0
- pm3_rs_python-0.1.2/tools/oracle/molecules/water_plus.xyz +6 -0
- pm3_rs_python-0.1.2/tools/oracle/pair_sweep.py +216 -0
- pm3_rs_python-0.1.2/tools/oracle/run_mopac.py +244 -0
- pm3_rs_python-0.1.2/tools/oracle/sweep.py +134 -0
- pm3_rs_python-0.1.2/tools/verify_pair_params.py +86 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.1.2
|
|
4
|
+
|
|
5
|
+
Performance and memory release. No change to any computed PM3 quantity: the
|
|
6
|
+
MOPAC v23.2.5 oracle regressions (heats of formation, charges, gradients,
|
|
7
|
+
optimized geometries, frequencies, special atoms, Sparkles) are unchanged.
|
|
8
|
+
|
|
9
|
+
### Performance
|
|
10
|
+
|
|
11
|
+
- The two-center Fock build — the `O(N²)` part of every SCF and CPHF iteration —
|
|
12
|
+
now runs batched-parallel over atom pairs instead of in a single serial loop.
|
|
13
|
+
- The two-center Coulomb term is contracted as two packed mat-vecs over the
|
|
14
|
+
`(μν)`/`(λσ)` orbital-pair indices rather than a four-index loop: 100 instead
|
|
15
|
+
of 256 multiply-adds per sp/sp pair, with identical arithmetic.
|
|
16
|
+
- The SCF accelerator keeps its `⟨E_i,E_j⟩` and `⟨D_i,F_j⟩` Gram matrices
|
|
17
|
+
incrementally, evaluating only the new row and column each iteration. The
|
|
18
|
+
A-DIIS difference matrices `D_i − D_n` / `F_j − F_n` are no longer
|
|
19
|
+
materialized, removing `2 × depth` full `nao × nao` temporaries per iteration.
|
|
20
|
+
- `[F,P]` is formed with one matrix product instead of two (`F` and `P` are
|
|
21
|
+
symmetric, so `PF = (FP)ᵀ`), and is skipped entirely when no accelerator runs.
|
|
22
|
+
- The two-electron pair table is a single flat buffer instead of a `Vec<Vec<_>>`,
|
|
23
|
+
removing one heap allocation per packed row and making each row contiguous.
|
|
24
|
+
- The classical-correction (D3/H4/X) Hessian off-diagonal loop runs on rayon.
|
|
25
|
+
- Elementwise reductions (`frobenius_dot`, RMS density change, history
|
|
26
|
+
combination) go parallel above 2^18 elements.
|
|
27
|
+
- `symmetric_eigen` skips building a permutation when `faer` already returns
|
|
28
|
+
ascending eigenvalues.
|
|
29
|
+
- 900-atom water cluster (nao = 1800), 16 cores: 35.7 s → 17.7 s wall.
|
|
30
|
+
|
|
31
|
+
### Memory
|
|
32
|
+
|
|
33
|
+
- The pair cache no longer retains the electron–core attraction blocks
|
|
34
|
+
`e1b`/`e2a` (2 × 81 `f64` per pair). They are consumed while `H_core` is
|
|
35
|
+
assembled and never referenced again; holding them cost 1.3 KiB per pair
|
|
36
|
+
(3.7 GiB for a 2400-atom system) for no benefit.
|
|
37
|
+
- New `Pm3Options::integral_memory_mb` (env `PM3_MAX_PAIR_CACHE_MB`, default
|
|
38
|
+
4096 MiB): the `O(N²)` pair cache size is computed in closed form before the
|
|
39
|
+
allocation and reported as a `ResourceLimit` error if it exceeds the budget.
|
|
40
|
+
- New `Pm3Options::scf_memory_mb` (default 512 MiB): bounds the SCF accelerator
|
|
41
|
+
history. The DIIS depth is reduced to fit, and A-DIIS degrades to CDIIS (which
|
|
42
|
+
needs no density history) rather than exceeding the budget.
|
|
43
|
+
- 900-atom water cluster peak resident set: ≈ 1.4 GiB → 0.75 GiB.
|
|
44
|
+
|
|
45
|
+
### Documented-API verification
|
|
46
|
+
|
|
47
|
+
Every code block and stated guarantee in `README.md`, `docs/rust-api.md`, and
|
|
48
|
+
`docs/python-api.md` is now executed as a test, and the CLI is exercised over
|
|
49
|
+
every documented subcommand, flag, and error path.
|
|
50
|
+
|
|
51
|
+
- `tests/api_surface.rs` (new, 15 tests) — the Rust surface: constructors,
|
|
52
|
+
`Pm3Options` fields and defaults, the `Pm3Result`/`GradientResult`/
|
|
53
|
+
`VibrationalModes`/`OptResult` field lists, unit conventions, `Variant::parse`,
|
|
54
|
+
reference selection, the memory budgets, and the documented error variants.
|
|
55
|
+
- `tests/test_python_api.py` (new, 19 tests) — `pm3_rs.native` dict keys and
|
|
56
|
+
Hartree↔eV / Bohr↔Å conversions, the `pm3_rs.ase.PM3` calculator (ASE units,
|
|
57
|
+
lazy Hessian, every accessor), and both documented example blocks.
|
|
58
|
+
|
|
59
|
+
Fixed along the way:
|
|
60
|
+
|
|
61
|
+
- **`pm3_rs.ase.PM3`**: every accessor (`get_potential_energy`, `get_forces`,
|
|
62
|
+
`get_gradient`, `get_hessian`, `get_frequencies`) raised
|
|
63
|
+
`AttributeError: 'NoneType' object has no attribute 'get_atomic_numbers'` when
|
|
64
|
+
called with no argument before the calculator had been bound to a structure.
|
|
65
|
+
They now raise a `RuntimeError` that names the three ways to fix it.
|
|
66
|
+
- `docs/python-api.md`: the cation example was labelled "forced UHF doublet" but
|
|
67
|
+
passed `multiplicity=1` (NH4+ is a closed-shell singlet), and its
|
|
68
|
+
`nh4_positions` was never defined, so the block could not be run as printed.
|
|
69
|
+
Corrected, given a runnable geometry, and extended with an open-shell example.
|
|
70
|
+
- `docs/python-api.md`: documented what `atoms=None` means for the ASE
|
|
71
|
+
accessors — assigning `atoms.calc = PM3()` does not bind the structure.
|
|
72
|
+
|
|
73
|
+
### Documentation
|
|
74
|
+
|
|
75
|
+
- Removed the claims that this crate is derived from or structured after sibling
|
|
76
|
+
Rust projects; the PM3 Hamiltonian, parameters, and derivations are documented
|
|
77
|
+
against MOPAC v23.2.5 and the primary literature.
|
|
78
|
+
- `third_party/pyseqm/NOTICE` added — `THIRD_PARTY_NOTICES.md` referenced a
|
|
79
|
+
`third_party/pyseqm/LICENSE` that was not present.
|
|
80
|
+
- Corrected the MOPAC reference values quoted in the `scf.rs` unit-test comments
|
|
81
|
+
for water and the methyl radical; they did not match the asserted PM3 values.
|
|
82
|
+
- `docs/rust-api.md`: documented the three memory budgets and corrected the
|
|
83
|
+
description of the Hessian `step` argument.
|
|
84
|
+
|
|
85
|
+
## 0.1.1
|
|
86
|
+
|
|
87
|
+
Initial `pm3-rs` release, backed by the PM3 Hamiltonian and the MOPAC v23.2.5
|
|
88
|
+
PM3 parameter tables.
|
|
89
|
+
|
|
90
|
+
- Rust implementation; linear algebra via `faer`, no BLAS/LAPACK dependency.
|
|
91
|
+
- RHF/UHF energies, heats of formation, charges, dipoles, analytic gradients,
|
|
92
|
+
CPHF/UCPHF Hessians, optimization, and frequencies.
|
|
93
|
+
- PM3-D3, PM3-D3H4, and PM3-D3H4X correction variants.
|
|
94
|
+
- MOPAC special atoms `Cb`, `+`, `-`, and La-Lu trivalent Sparkles.
|
|
95
|
+
- Rust library `pm3_rs`, CLI `pm3_rs_cli`, and Python distribution
|
|
96
|
+
`pm3-rs-python` with native and ASE APIs.
|
|
97
|
+
- MOPAC v23.2.5 oracle regressions for closed-shell molecules, an open-shell
|
|
98
|
+
radical, a Sparkle complex, point charges, gradients, optimization, and
|
|
99
|
+
frequencies.
|
|
100
|
+
- Configurable Hessian workspace budget and bounded integral-cache construction.
|
|
101
|
+
- Release profile uses fat LTO with one code-generation unit.
|