qat.fermion.chemistry.wrapper.MoleculeInfo

class qat.fermion.chemistry.wrapper.MoleculeInfo(hamiltonian: MolecularHamiltonian, n_electrons: int, noons: ndarray | List[float], orbital_energies: ndarray)

MoleculeInfo helper class. This class is a even higher level version of the MolecularHamiltonian.

Parameters:
  • hamiltonian (MolecularHamiltonian) – The MolecularHamiltonian of the studied molecule.

  • n_electrons (int) – Number of electrons.

  • noons (Union[np.ndarray, List[float]]) – Natural orbital occupation number.

  • orbital_energies (np.ndarray) – Orbital energies.

nqbits

The total number of qubits.

Type:

int

one_body_integrals

One-body integrals \(I_{uv}\).

Type:

np.ndarray

two_body_integrals

Two-body integrals \(I_{uvwx}\).

Type:

np.ndarray

constant_coeff

Constant coefficient \(r\) (core repulsion).

Type:

np.ndarray

hamiltonian

The MolecularHamiltonian of the studied molecule.

Type:

MolecularHamiltonian

n_electrons

Number of electrons.

Type:

int

noons

Natural orbital occupation number.

Type:

Union[np.ndarray, List[float]]

orbital_energies

Orbital energies.

Type:

np.ndarray

Example

import numpy as np
from qat.fermion.chemistry import MolecularHamiltonian, MoleculeInfo

# For illustration purpose, initialize random one- and two-body integrals, and a constant
one_body_integral = np.random.randn(2, 2)
two_body_integral = np.random.randn(2, 2, 2, 2)
constant = np.random.rand()
noons = list(np.random.randn(10))
orbital_energies = list(np.random.randn(10))

# Define the MolecularHamiltonian
mol_h = MolecularHamiltonian(one_body_integral, two_body_integral, constant)

# Define MoleculeInfo
molecule = MoleculeInfo(
    mol_h,
    n_electrons=4,
    noons=noons,
    orbital_energies=orbital_energies
)

print(molecule)
MoleculeInfo(
 - MolecularHamiltonian(
    * constant_coeff : 0.3856320181226427
    * integrals shape
       ** one_body_integrals : (2, 2)
       ** two_body_integrals : (2, 2, 2, 2)
   )
 - n_electrons = 4
 - noons = [np.float64(0.34965124715639406), np.float64(0.6861331247144599), np.float64(0.15239114311707158), np.float64(-0.4986503602075757), np.float64(0.5882380037899986), np.float64(1.55267789596458), np.float64(-0.011869841379438466), np.float64(0.07772386374420151), np.float64(-0.3025035330682323), np.float64(0.4161002310376497)]
 - orbital energies = [np.float64(-0.2928588301809937), np.float64(0.121958214181258), np.float64(-0.36611586931363627), np.float64(-1.231482982641993), np.float64(-0.9073956012646378), np.float64(-0.45078025383558196), np.float64(-0.15717788141028882), np.float64(-1.257799609043966), np.float64(0.15475032028000155), np.float64(0.8550058923442857)]
)
restrict_active_space(threshold_1: float | None = 0.02, threshold_2: float | None = 0.001)

Same method as the MolecularHamiltonian method select_active_space(), except it also modifies all the molecule parameters accordingly (NOONs, orbital energies, and number of electrons).

For more information, see select_active_space() documentation.

Parameters:
  • threshold_1 (Optional[float]) – The upper threshold \(\varepsilon_1\) on the NOON of an active orbital.

  • threshold_2 (Optional[float]) – The lower threshold \(\varepsilon_2\) on the NOON of an active orbital.