Repository navigation
Releases
v0.1.0rc9
What's Changed
- test(pbc): p/d-shell and Li binding anchors for the wired derivative routes (Refs #498) by @mgoldey in #561
- feat(cc): integral-direct (RI) particle-particle ladder for closed-shell CCSD, dense when it fits ([cc] ladder = auto) by @mgoldey in #568
- fix(rpa): the Lanczos non-convergence warning names the real cause by @mgoldey in #570
- fix(scf): apply an unapplied cDFT constraint instead of returning the unconstrained state by @mgoldey in #569
- feat(scf): point-group-blocked closed-shell RKS, with Python and CLI (Closes #294) by @mgoldey in #567
- fix(rpa): Lanczos stall warning records which limit stopped it; no max_vecs advice for a full request by @mgoldey in #571
- fix(ecp): a ghost atom carries basis functions, not an ECP by @mgoldey in #572
- fix(rpa): solve a Lanczos request above the Krylov cap densely so it converges by @mgoldey in #573
- test(scf): port HeNe+ asymmetric cDFT-ET tests, re-measured on main by @mgoldey in #574
- ci: build the Python extension once in the coverage and validation jobs (fixes nightly 'Object is too small') by @mgoldey in #575
- fix(scf): cDFT-ET coupling uses the exact cofactor sum, not an S_TOL branch by @mgoldey in #576
- exp(pbc): shifted k mesh for the #230 parity test, result UNDETERMINED by @mgoldey in #577
- fix(rpa): solve every full Lanczos request densely; trunc_thresh 0 keeps exact-λ=1 modes by @mgoldey in #578
- feat(pbc): open-shell k-point SCAN / r2SCAN on RS-GDF J/K: energy, force and stress (library) by @mgoldey in #579
- fix(rpa): one v_inv_sqrt convention for the PDEP parts entries (gamma_urpa lindep panic) by @mgoldey in #580
- ci(test-shard): long-window zstd shard archives (~6x smaller), plus the #563 review nits by @mgoldey in #583
- feat(pbc): k-point ROKS SCAN / r2SCAN energy via the per-spin-tau evaluator (library) by @mgoldey in #582
- fix(cli-tests): give each ccsd_dispatch run its own TOML file by @mgoldey in #585
- feat(pbc): k-point ROKS SCAN / r2SCAN analytic force and stress (library) by @mgoldey in #586
- feat(dft,gpu): KS XC grid on the device, with a mixed-precision V_xc kernel (xc-vxc) by @mgoldey in #584
- ci: say when a shard's archive has expired (re-run ALL jobs), keep archives 2 days by @mgoldey in #587
- fix(rpa): cancellation-free trace-log summand near λ→1 by @mgoldey in #531
- fix(gate): flock -o so sccache cannot inherit the cargo lock by @mgoldey in #591
- feat(dlpno): opt-in add-back of screened pair energies; archive the LNO lane by @mgoldey in #530
- bench(pbc): unattended quiet-window driver for the remaining #228 plan (no timings) by @mgoldey in #589
- perf(pbc): measured, parallel, thread-count-invariant k-point XC build by @mgoldey in #590
- fix(gate): start the step timeout after the lock is held; report lock-wait expiry, timeout and failure separately by @mgoldey in #593
- feat(pbc): wire open-shell SCAN / r2SCAN energies (k-ROKS, Gamma UKS/ROKS, k-UKS RS-GDF) into Python and the CLI by @mgoldey in #588
- feat(mp2): scf_jk = exact | rijk | rijcosx for the MP2-family reference SCF by @mgoldey in #595
- exp(pbc): FIQ Stage 1 for the k-MP2 head residual (Refs #230) by @mgoldey in #598
- feat(python): AoIntegrals + einsum, building blocks for methods in numpy by @mgoldey in #594
- feat(basis): register every bundled set, add Pople/def2/pcseg/aug-JKFIT, pack them deduplicated by @mgoldey in #596
- feat(scf): Q-Chem-style BASIS2 secondary-basis SCF guess by @mgoldey in #597
- fix(scripts): all-or-nothing JKFIT import; --check flags an unapplied 6-311G override by @mgoldey in #599
- ci: 8 test shards; move >=120 s and thread-invariance tests to the weekly tier by @mgoldey in #600
- perf(gpu,dft): pinned staging + parallel operand scan for the device XC waves (bit-identical) by @mgoldey in #602
- perf(lmp2): stages A+B — stage timers, certificate, one-Cholesky VV-HV, metric bitmap, planned PCG by @mgoldey in #601
- perf(gpu,dft): strided-batched GEMMs for every XC wave, f64 and mixed, over a padded layout (stacked on #602) by @mgoldey in #606
- perf(lmp2): stage C — Cholesky + triangular-solve pair fits (stacked on #601) by @mgoldey in #604
- feat(scf,gpu): shared precision ladder with an f64 exit for the dfj-pack / dfk-occ J/K kernels by @mgoldey in #607
- ci(gate): scope push-gate clippy to the changed crates by @mgoldey in #608
- feat(precision): [precision] section and per-result precision provenance by @mgoldey in #603
- perf(lmp2): stage D — Hylleraas PCG energy + adaptive Fvv product (stacked on #604) by @mgoldey in #605
- docs(lmp2): sympy proofs of the WSHG23 Hylleraas energy and its error bound by @mgoldey in #609
- fix(lmp2): running out of iterations while tightening is a hard error by @mgoldey in #610
- test(lmp2): optional bitwise RHF cache for the direct bench by @mgoldey in #612
- fix(df): hold spilled RI-JK to the budget; a DF guess gives way on memory exhaustion by @mgoldey in #611
- feat(tools): box lease: a timing job holds the build locks and cargo waits by @mgoldey in #613
- feat(cli): log local MP2 stage timings in the JSON result record by @mgoldey in #616
- fix(tools): keep the cargo shim where a reboot does not wipe it by @mgoldey in #614
- feat(scf): SCF checkpoint format and identity checks, unused so far by @mgoldey in #618
- perf(lmp2): aux-major stage 3, one evaluation per needed triple by @mgoldey in #615
- fix(scf): decide RI-J/K before XC takes memory by @mgoldey in #617
- perf(dft,scf): faster Becke weights, batch screening and RI-J fold, same bits by @mgoldey in #619
- Memory opt for DFT by @mgoldey in #620
- feat(gpu): opt-in dfk-occ with device f64 ladder builds and a one-way latch; faster DF-K dressing and first build by @mgoldey in #621
- feat(dft): pruned default KS grid, DefGrid, weight cutoff, f32 RI-J, Split-RI-J by @mgoldey in #623
- perf(split-rij): batched kernel and far field; jk_storage = auto uses Split-RI-J when J does not fit by @mgoldey in #624
- fix: second CodeRabbit round on the grid and RI-J options (#623) by @mgoldey in #625
- truncate slow tests by @mgoldey in #626
- Correctness batch: XC density floor, meta-GGA response, PCM gradient, homogeneous response matvecs, certificates by @mgoldey in #627
Full Changelog: v0.1.0rc8...v0.1.0rc9
v0.1.0rc10
What's Changed
Full Changelog: v0.1.0rc9...v0.1.0rc10
ferric 0.1.0rc8
ferric 0.1.0rc8.
Files
- PyPI wheels and sdist (
ferric-0.1.0rc8-cp3NN-...whl,ferric-0.1.0rc8.tar.gz):
the same filespip install ferric==0.1.0rc8downloads. Their libint2 is
ferric's small 2.7.2 export, linked statically. - Large-libint wheels (
ferric-0.1.0rc8-1largeam-cp3NN-...whl): the same version
and commit, built against conda-forge's libint2 2.13.1, which is bundled in
the wheel as a shared library. It adds l = 7 shells, analytic 3- and
2-centre second derivatives, multipoles above order 2 and G12 (F12)
integrals. It is not a strict superset: its one-electron integrals go to
l = 7 / 6 / 3 (energy / 1st / 2nd derivative) where the PyPI wheel's go to
6 / 6 / 6. Analytic 4-centre Hessians stay limited to f functions in both
wheels, and RI Hessians already work with the PyPI wheel. Install it with
pip install --force-reinstall --no-deps <asset URL>;pip install -U ferriclater replaces it with the PyPI wheel. Check which one is loaded
withpython -c "import ferric; print(ferric.build_info()['libint_max_am'])"
(eri3is[7, 7, 4]for this wheel,[6, 6]for the PyPI one). libint2-LICENSE.txt,libint2-COPYING.LESSER.txt: the licence texts of
the libint2 the large-libint wheels bundle, from its conda-forge package.SHA256SUMS:sha256sum -c SHA256SUMSchecks every file above.
libint2 source (LGPL-3.0-only)
The large-libint wheels contain a libint2 binary built by conda-forge. Its
source and build recipe:
- generated library source: https://github.com/loriab/libint/releases/tag/v0.1
(libint-2.13.1-7-6-3-7-7-4_mm10f12ob2_0.tgz, sha256
324b578f795d1f406f37a1d936f04ea51a85eae1b2ea37b5cf773afb4e25ab14) - conda-forge recipe: https://github.com/conda-forge/libint-feedstock
- the exact package bundled: https://conda.anaconda.org/conda-forge/linux-64/libint-2.13.1-h83f5b4b_0.conda
(sha256d5219aae3bdd9629c6cff471f129f3aebbaddb058d0d19fbbab12c28924a0535)
The PyPI wheels' libint2 export is regenerated by
scripts/generate-libint-small.sh; its source tarball is the
libint-2.7.2-ferric-small-1 release of this repository.
v0.1.0rc7
What's Changed
- docs(scf): TRAH stall docs describe the current fix, not a refuted mechanism by @mgoldey in #221
- fix(hirshfeld): Python and CLI share the SCF proatom; Hirshfeld validation row by @mgoldey in #222
- fix(omega): tune both states with exact J; RSH omega-tuning validation row by @mgoldey in #223
- fix(scf): UKS TRAH defers to DIIS instead of cycling null steps by @mgoldey in #224
- fix(cc): wB97X-L-V puts λ inside the amplitude equations (paper eqn 22) by @mgoldey in #239
- test(rpa): PDEP-RPA dynamic α and C6 validation row (154) by @mgoldey in #240
- fix(scf): libint ERI precision 1e-20 for SCF J/K (was 1e-14) by @mgoldey in #226
- test(rpa): TS C6 and MBD@TS validation rows (153, 156) against pymbd by @mgoldey in #241
- test(scf): COSX validation row (175) — same-grid vs PySCF sgx, grid convergence, gradients by @mgoldey in #243
- test(cc): ωB97X-L-V component validation row (106) by @mgoldey in #242
- feat(scf): RHF internal stability descent; SCF ladder validation row (179) by @mgoldey in #244
- test(scf): free-atom Becke volumes for Z = 1–18 (row 152) by @mgoldey in #245
- test(scf): cDFT state-selection row (171); the 0.563 eV gap was a Becke-partition offset by @mgoldey in #246
- fix(scf): cDFT-ET coupling uses F = E + λN (was 3x high); validation row (170) by @mgoldey in #247
- fix: lint passes on Rust 1.99 (fetch_update deprecation, redundant rustdoc links) by @mgoldey in #250
- fix(scf): safeguard the single-constraint cDFT λ loop; correct the #225 measurement by @mgoldey in #248
- fix(scf): TRAH handles the trust-region hard case and keeps control of pending steps; unbreak complexity gate by @mgoldey in #249
- feat(rpa): Becke per-atom α is the Krishtal intrinsic polarizability; export the CT remainder by @mgoldey in #251
- fix(rpa): free-atom Pd uses the closed-shell 4d¹⁰ polarizability and the TS C6 by @mgoldey in #253
- feat(cli): [scf] stability_descent for kind = "rhf" and closed-shell ksdft by @mgoldey in #252
- chore(scf): FERRIC_TRAH_RHO_TRACE goes through ConfigVar by @mgoldey in #254
- feat(python): run_rhf(stability_descent=True) by @mgoldey in #255
- fix(rpa): sternheimer guard tests pass in release builds by @mgoldey in #257
- feat(dispersion): MBD@rsSCS energy, KS-DFT correction, exact gradient via KS Z-vector by @mgoldey in #256
- fix(dispersion): free-atom volumes for the isolated atom; validate HSE06 by @mgoldey in #258
- feat(properties): smooth (C2) Hirshfeld proatom interpolant by @mgoldey in #259
- feat(frequencies): harmonic frequencies with D3(BJ) and MBD@rsSCS dispersion by @mgoldey in #260
- feat(scf): unrestricted KS Z-vector; exact MBD@rsSCS gradient on UKS by @mgoldey in #262
- feat(scf): RIJCOSX, pruned sgx COSX grid, and a COSX final-grid pass by @mgoldey in #261
- feat(scf): ROKS Z-vector; exact MBD@rsSCS gradient on ROKS references by @mgoldey in #263
- feat(scf): COSX defaults to the pruned sgx (35,194) grid plus a final pass by @mgoldey in #267
- feat(correlation): separate the method from its local approximation ([local]) by @mgoldey in #297
- fix(gw): apply the Σx − v_xc shift in closed-shell COHSEX on a KS reference by @mgoldey in #300
- test(mp2): validate local RI-MP2 (in-core and integral-direct) against PySCF DF-MP2 by @mgoldey in #301
- test(validation): exact and local dRPA against an independent numpy plasmon dRPA by @mgoldey in #303
- feat(python): expose run_optimize_uhf; fix a libint init race and the gate's stale-import blind spot by @mgoldey in #298
- docs(terf): warn that base_terfc_closed.py is not the shipped kernel by @mgoldey in #299
- docs(validation): grade local RI-MP2 Proven (narrow) by its exact limit by @mgoldey in #306
- fix(scf): check RHF external (RHF→UHF triplet) stability, not just internal by @mgoldey in #304
- fix(dispersion): integrate Hirshfeld volumes where the density is, not on a lattice through its cusps by @mgoldey in #305
- test(cc): validate amplitude-threshold LinLCCD, all three variants, against numpy by @mgoldey in #302
- test(mp2): give AO-Laplace MP2 an external reference that separates quadrature error from implementation error by @mgoldey in #307
- test(ci): run every MPI cross-rank test at np 1, 2 and 3, not one at np 1-2 by @mgoldey in #308
- fix(cdft): the He2+ 3.50 A row needed 106 inner iterations, not a new solver by @mgoldey in #309
- fix(bse): report the ill-conditioned QP energies instead of replacing them by @mgoldey in #310
- fix(cdft): the He2+ lambda=0 start needed outer iterations, not a new solver by @mgoldey in #311
- fix(cdft): an iteration-capped inner solve is not a derivative by @mgoldey in #312
- test(trah): pin the closed-shell null-step guard with an iteration bound by @mgoldey in #316
- test(mp2): validate MP2-V's VV10 half and erfc control against PySCF/numpy (terfc half pending) by @mgoldey in #317
- test(rpax): validate the static RPAx alpha against an independent numpy kernel by @mgoldey in #318
- fix(omega-tuning): seed the cation across omega; the onset is invisible without the Hessian by @mgoldey in #313
- test(qmmm): FD/stationarity harness for optimize_qmmm across boundary schemes and free sets by @mgoldey in #321
- test(terfc): validate terf/terfc integrals and SCS-MP2(2terfc) against a Fourier-space reference by @mgoldey in #320
- fix(pipeline): salvage the pose-handoff guards; tier 2 no longer displaces the docked pose by @mgoldey in #325
- test(terfc): independent 1-D radial oracle for the s-type k-space references (completes #275) by @mgoldey in #326
- fix(scf): range-separated orbital Hessian with the Fock's own SR/LR exchange kernel by @mgoldey in #322
- feat(frequencies): dispersion-corrected frequencies on UKS and ROKS references by @mgoldey in #328
- fix(pipeline): quantum tiers score in the pocket field; refuse total-energy cuts across formulas by @mgoldey in #332
- Build identity: version + git commit at runtime; verified release stamping by @mgoldey in #333
- UKS and ROHF/ROKS analytic gradients with COSX exchange (fit off) by @mgoldey in #327
- Open-shell Z-vector: project the axis-rotation null mode of ²Π radicals (MBD gradients on OH, NO, CH) by @mgoldey in #334
- fix(qmmm): QM-MM Lennard-Jones follows the force field's exclusions across the cut by @mgoldey in #336
- Follow-ups to #333 by @mgoldey in #335
- fix(trah): a declined closed-shell null step falls through to DIIS (#315) by @mgoldey in #338
- fix: test_reproducibility ranks one formula; rebaseline two Z-vector functions by @mgoldey in #339
- fix(units): one Å↔Bohr constant across ferric (#329) by @mgoldey in #337
Full Changelog: v0.1.0rc6...v0.1.0rc7
v0.1.0rc6
What's Changed
- feat(scf): sample ESP on the vdW surface, not just at the nuclei by @mgoldey in #67
- perf(scf): 3.6x on benzene/aug-cc-pVTZ — DF-guess, ShellPair cache, DF-corrected increments by @mgoldey in #68
- Apply rustfmt and add git-blame-ignore-revs for formatting commits by @mgoldey in #71
- perf(integrals): terf kernel 3.1x — tail form, Abel summation, large-S asymptotic by @mgoldey in #69
- Add frozen core orbital selection with "auto" convention support by @mgoldey in #70
- perf(mp2): drive DLPNO-MP2 from the RI B tensor, never from dense (ia|jb) by @mgoldey in #72
- test(export): round-trip every NpzBundle field, not just mo_coeffs by @mgoldey in #73
- test(scf): certify optimize_qmmm stops at a stationary point of its own energy by @mgoldey in #74
- fix(gw): hard-error on an unphysical static polarizability instead of returning it by @mgoldey in #75
- fix(dft): 7 of 12 wB97X-L-V coefficients had flipped signs by @mgoldey in #78
- test(scf): make the cDFT coupling's (lambda, W) pairing non-vacuous by @mgoldey in #80
- fix(scf): Allreduce the rank-local J/K partial, not the caller's accumulate buffer by @mgoldey in #81
- fix(gw): real (energy, oscillator-strength) assignment for the BSE-TDA benchmark by @mgoldey in #76
- test(gw): per-molecule BSE-TDA breakdown and a diagnosis of the 4 unassigned states by @mgoldey in #77
- feat(export): make the C6 partition travel with the numbers; validate the pair sum by @mgoldey in #79
- ci(mpi): OpenMPI CI job + a system-MPI-linked wheel (not vendored) by @mgoldey in #82
- fix(scf): serialize the MINAO per-element guess build under multi-rank MPI by @mgoldey in #85
- fix(scf): open-shell SCF discarded its initial guess and converged to the wrong state by @mgoldey in #83
- feat(memory): one shared pool that reservations debit, across five crates by @mgoldey in #86
- fix(scf): ROHF ignored the configured guess and returned whichever state hcore fell into by @mgoldey in #87
- docs: QM/MM, golden paths, and xtb geometry initialization by @mgoldey in #89
- fix(ci): install uv in the coverage job, which has been red since 2026-09-16 by @mgoldey in #90
- feat(tools): read PDB/PQR/SDF/mol2/SMILES by converting to the one Rust entry point by @mgoldey in #91
- ci: run check/clippy/rustdoc as their own job, not behind a 63-min test step by @mgoldey in #94
- fix(pipeline): carry the docked pose into the quantum tiers by @mgoldey in #93
- fix(test): drop energy_conv=1e-10 from the MPI RHF reference; it never converged by @mgoldey in #95
- perf(gradient): batch the KS-DFT XC gradient grid; 7.4x lower peak by @mgoldey in #92
- feat(scf): TRAH, AURORA-SCF, and redundant internal coordinates (all opt-in) by @mgoldey in #88
- feat(python): expose FrequencyResult.normal_modes by @mgoldey in #97
- ci(mpi): retry the mpirun launch once; it flakes ~7% of runs by @mgoldey in #98
- feat(pipeline): propose active-site substitutions, scored relative to the parent by @mgoldey in #96
- fix(gate): the complexity baseline was keyed on absolute paths by @mgoldey in #104
- docs(tox): the catalog-construction claim was 5x, not "dominates" by @mgoldey in #108
- feat(scf): P-RFO transition-state search — ferric can now FIND a saddle by @mgoldey in #106
- docs: commit the measured pipeline notes, which only existed locally by @mgoldey in #103
- feat(pipeline): TierResult carries the resolution it can actually deliver by @mgoldey in #109
- feat(danuglipron): the substitution golden path, end to end on 7LCJ by @mgoldey in #102
- ci: shard the test tier 4 ways behind one nextest archive build by @mgoldey in #101
- fix(scf): the saddle cost model undercounted by 3 gradient evaluations by @mgoldey in #110
- exp(danuglipron): M12+M13 — all four pose protocols closed, including 'select a pose' by @mgoldey in #107
- docs(golden-path): C3 merged and demonstrated under QM/MM embedding; TS cost +3 by @mgoldey in #111
- feat(viz): figures for pipeline outputs — energy plots and molecule depictions by @mgoldey in #105
- feat(d3): native D3(BJ) dispersion, Z=1-103, zero new dependencies by @mgoldey in #99
- feat(viz): reaction_path — the two minima an IRC connects, with both barriers by @mgoldey in #116
- feat(scf): IRC, plus four run_saddle defects CodeRabbit caught on #106/#110 by @mgoldey in #114
- fix: two silent-wrong-answer findings left open on merged PRs (#107, #109) by @mgoldey in #115
- fix(tiers): a comment declared code missing that had existed for three weeks by @mgoldey in #117
- docs: tier costs were wrong in four more places, and one claimed MEASURED by @mgoldey in #113
- feat(viz): accept a per-(substituent,site) noise floor, and render an unmeasured cell as unbounded not zero by @mgoldey in #119
- feat(morph): pair poses by scaffold -- a paired ddE estimator the five closed routes never tried by @mgoldey in #118
- docs(golden-path): correct the TS crossover to N=(n_steps-1)/12 -- QM region size, not step count, sizes the job by @mgoldey in #120
- feat(python): thread point_charges into run_saddle/run_irc/run_frequencies so C3-C5 run in an MM field [MERGE BEFORE #122] by @mgoldey in #121
- feat(runlog): emit each method's own total in a result record, so the log carries the answer not the SCF reference by @mgoldey in #100
- docs(golden-path): scope the embedded-catalyst claim to Rust, and record the Python chain #121 enables by @mgoldey in #122
- docs(golden-path): the TS cost model counts gradients as if they were energies (~1.7x low) by @mgoldey in #125
- fix(viz): two-line grid captions printed on top of the molecules by @mgoldey in #124
- docs(golden-path): a retraction and the claim it retracts, live in one document by @mgoldey in #126
- docs+viz: one answer table for the six pharma use cases, plus optimization_trace to catch a climbing optimization by @mgoldey in #123
- feat(cli,solvate): a [qmmm] TOML section, and an explicit TIP3P droplet to fill it by @mgoldey in #127
- test(mm): cover ring exclusions, which both OpenMM cases miss by @mgoldey in #129
- fix(structure): two-letter elements read as carbon because the membership test could never match; add a .gro reader by @mgoldey in #128
- fix(solvate,ci): a short radii list dropped solute atoms and shifted every qm_indices entry by @mgoldey in #130
- docs(golden-path): the catalyst branch runs; fix a self-contradiction, a C4 API error, and two plot layout defects by @mgoldey in #131
- fix(golden-path): the answer table's FF cost was 3.5x high and carried no provenance by @mgoldey in #132
- fix(golden-path): three more answer-table costs, including a hidden network call in the default liability path by @mgoldey in #133
- docs: current state, not changelog — QM/MM page plus a site-wide sweep by @mgoldey in #134
- fix(tiers): refuse a cached geometry that is not the candidate molecule by @mgoldey in #135
- fix(gate): clear a squatting sccache before every cargo stage, not just at startup by @mgoldey in #137
- fix(tools): audit the geometry writers — two wrote a header that lied about the body by @mgoldey in #136
- fix(docking): a docked pose was coming back as the wrong enantiomer by @mgoldey in #138
- feat(tox): a command-line entry point for the toxicity screen by @mgoldey in #140
- feat(campaign): stream long...
libint2 2.7.2 export for the PyPI wheel (ferric-small-1)
libint2 v2.7.2 source export generated by scripts/generate-libint-small.sh: 4-centre ERI derivatives to order 2 (l <= 6,6,3), 3- and 2-centre to order 1 (pure SH), one-body to order 2 (l <= 6,4,3), generic code, no unrolling. Built by .github/workflows/wheels.yml, which pins its sha256. Compiled: libint2.so 191 MB raw / 53.8 MB zipped. Not a ferric release.
v0.1.0rc5
What's Changed
- COSX, LinK added for HF/KS
- Integral-direct assembly added for local methods with amplitude thresholds
- Memory management and disk quota management
Full Changelog: v0.1.0rc4...v0.1.0rc5