Source code for moha.posthf.ci.ci_wavefunction

from moha.system.wavefunction.base import BaseWaveFunction
from moha.posthf.ci.ci_basis_set import CIBasisSet

import numpy as np 

[docs]class CIWaveFunction(BaseWaveFunction): """Configuration interaction wavefunction class. Attributes ---------- nelec : int Number of electrons. occ : dict Occupation number of the wavefunction. nspatial : int Number of spatial orbitals. basis_set : Basis Basis set of the wavefunction. coefficients : np.ndarray Coefficientss of the wavefunction. Properties ---------- ncoefficients : int Number of coefficients. nspin : int Number of spin orbital spin : int Spin of the wavefunction seniority: int Seniority of the wavefunction Methods ------- __init__(self, nelec, nspatial, basis_set=None, coefficients=None) Initialize the wavefunction. assign_nelec(self, nelec) Assign the number of electrons. assign_nspatial(self, nspatial) Assign the number of spatial orbitals. assign_occ(self, occ) Assign the occupation number of the wavefunction. assign_basis_set(self, basis_set) Assign basis set of the wavefunction. assign_coefficients(self, coefficients) Assign coefficients of the wavefunction. """ def __init__(self,nelec,nspatial,occ={},basis_set=None,coefficients=None): """Initialize the wavefunction. Parameters ---------- nelec : int Number of electrons. nspin : int Number of spin orbitals. occ : dict Occupation number of the wavefunction. dtype : {float, complex, np.float64, np.complex128, None} Numpy data type. Default is `np.float64`. memory : {float, int, str, None} Memory available for the wavefunction. Default does not limit memory usage (i.e. infinite). """ super().__init__(nelec,nspatial,occ,basis_set,coefficients) @property def configuration(self): """Return the cofiguration of the wavefunction. Returns ------- c : dict Configuration of the wavefunction. """ c = {} for spin in self.occ: c[spin] = [1]*self.occ[spin] + [0]*(self.nspatial - self.occ[spin]) return c @property def ncoefficients(self): """Return the number of wavefunction coefficients. Returns ------- ncoefficients : int Number of coefficients. Raises ------ TypeError If coefficients is not a np.ndarray instance. """ if not isinstance(self.coefficients,np.ndarray): raise TypeError("Coefficients is not a np.ndarray instance.") return self.coefficients.size @property def seniority(self): """Return the seniority of the wavefunction. Seniority of a Slater determinant is its number of unpaired electrons. The seniority of the wavefunction is the expected number of unpaired electrons. Returns ------- seniority : int Seniority of the wavefunction. Notes ----- `None` means that all possible seniority are allowed. """ return None
[docs] def assign_basis_set(self, basis_set): """Assign the basis_set of the wavefunction. Parameters ---------- basis_set Basis set of the wavefunction. Raises ------ TypeError If basis set is not a CIBasisSet instance. """ if not isinstance(basis_set,CIBasisSet): raise TypeError("Basis set must be CIBasisSet instance.") self.basis_set = basis_set
[docs] def assign_coefficients(self, coefficients): """Assign the coefficients of the wavefunction. Parameters ---------- coefficients Parameters of the wavefunction. Raises ------ TypeError If coefficients is not a np.ndarray. """ if coefficients is None: coefficients = np.zeros((self.nspatial)) elif not isinstance(coefficients,np.ndarray): raise TypeError("Coefficients is not a np.ndarray instance.") self.coefficients = coefficients