pytc.fno

Frozen-natural-orbital (FNO) / MP2-natural-orbital truncation.

make_fno_mo_coeff builds MP2 natural orbitals from an RHF mean field, keeps only the most important virtuals, and returns a truncated mf copy (plus the matching mo_coeff / mo_occ / mo_energy) that drops straight into the existing ISDFXTC.from_pyscf(mf, ...)RCCSD(mf, xtc_obj=..., ...) pipeline with n_orb < n_ao.

Design note — why a truncated mf rather than bare arrays: the XTC and solver code paths read mo_coeff and mo_occ from the same source (XTC.from_pyscf pulls mf.mo_coeff/mf.mo_occ; solver.xtc_ccsd.RCCSD inherits cc.mo_coeff/cc._scf.mo_occ from the mf passed to it). Returning one self-consistent truncated mf keeps those two read-sites in agreement (len(mo_occ) == mo_coeff.shape[1] == n_orb) with no API change anywhere downstream.

The occupied orbitals are kept untouched and first; only the virtual space is rotated into natural-orbital form and truncated. The kept virtual block is then semicanonicalized (diagonalizing the Fock within it) so the downstream CCSD sees a canonical-ish reference.

Classes

FNOResult

Outcome of an MP2-natural-orbital truncation.

Functions

make_fno_mo_coeff

Build MP2 natural orbitals and truncate the virtual space.