qml.qchem.obs.one_particle

one_particle(matrix_elements, core=None, active=None, cutoff=1e-12)[source]

Generates the FermionOperator representing a given one-particle operator required to build many-body qubit observables.

Second quantized one-particle operators are expanded in the basis of single-particle states as

\[\hat{T} = \sum_{\alpha, \beta} \langle \alpha \vert \hat{t} \vert \beta \rangle [\hat{c}_{\alpha\uparrow}^\dagger \hat{c}_{\beta\uparrow} + \hat{c}_{\alpha\downarrow}^\dagger \hat{c}_{\beta\downarrow}].\]

In the equation above the indices \(\alpha, \beta\) run over the basis of spatial orbitals \(\phi_\alpha(r)\). Since the operator \(\hat{t}\) acts only on the spatial coordinates, the spin quantum numbers are indicated explicitly with the up/down arrows. The operators \(\hat{c}^\dagger\) and \(\hat{c}\) are the particle creation and annihilation operators, respectively, and \(\langle \alpha \vert \hat{t} \vert \beta \rangle\) denotes the matrix elements of the operator \(\hat{t}\)

\[\langle \alpha \vert \hat{t} \vert \beta \rangle = \int dr ~ \phi_\alpha^*(r) \hat{t}(r) \phi_\beta(r).\]

If an active space is defined (see active_space()), the summation indices run over the active orbitals and the contribution due to core orbitals is computed as \(t_\mathrm{core} = 2 \sum_{\alpha\in \mathrm{core}} \langle \alpha \vert \hat{t} \vert \alpha \rangle\).

Parameters
  • matrix_elements (array[float]) – 2D NumPy array with the matrix elements \(\langle \alpha \vert \hat{t} \vert \beta \rangle\)

  • core (list) – indices of core orbitals, i.e., the orbitals that are not correlated in the many-body wave function

  • active (list) – indices of active orbitals, i.e., the orbitals used to build the correlated many-body wave function

  • cutoff (float) – Cutoff value for including matrix elements. The matrix elements with absolute value less than cutoff are neglected.

Returns

an instance of OpenFermion’s FermionOperator representing the one-particle operator \(\hat{T}\).

Return type

FermionOperator

Example

>>> matrix_elements = np.array([[-1.27785301e+00,  0.00000000e+00],
...                             [ 1.52655666e-16, -4.48299696e-01]])
>>> t_op = one_particle(matrix_elements)
>>> print(t_op)
-1.277853006156875 [0^ 0] +
-1.277853006156875 [1^ 1] +
-0.44829969610163756 [2^ 2] +
-0.44829969610163756 [3^ 3]