qml.qchem.excitations

excitations(electrons, orbitals, delta_sz=0, fermionic=False)[source]

Generate single and double excitations from a Hartree-Fock reference state.

Single and double excitations can be generated by applying the operators \(\hat{T}_1\) and \(\hat{T}_2\) on the Hartree-Fock reference state:

\[\begin{split}&& \hat{T}_1 = \sum_{r \in \mathrm{occ} \\ p \in \mathrm{unocc}} \hat{c}_p^{\dagger} \hat{c}_r \\ && \hat{T}_2 = \sum_{r>s \in \mathrm{occ} \\ p>q \in \mathrm{unocc}} \hat{c}_p^{\dagger} \hat{c}_q^{\dagger} \hat{c}_r \hat{c}_s.\end{split}\]

In the equations above the indices \(r, s\) and \(p, q\) run over the occupied (occ) and unoccupied (unocc) spin orbitals and \(\hat{c}\) and \(\hat{c}^{\dagger}\) are the electron annihilation and creation operators, respectively.


../../_images/sd_excitations.png

Parameters
  • electrons (int) – Number of electrons. If an active space is defined, this is the number of active electrons.

  • orbitals (int) – Number of spin orbitals. If an active space is defined, this is the number of active spin-orbitals.

  • delta_sz (int) – Specifies the selection rules sz[p] - sz[r] = delta_sz and sz[p] + sz[p] - sz[r] - sz[s] = delta_sz for the spin-projection sz of the orbitals involved in the single and double excitations, respectively. delta_sz can take the values \(0\), \(\pm 1\) and \(\pm 2\).

  • fermionic (bool) – Return a list of FermiWord objects instead of the list of orbital indices, if set to True. Default is False.

Returns

lists with the indices of the spin orbitals involved in the single and double excitations. By default, the lists contain integers representing the orbitals, otherwise if fermionic=True they contain FermiWord objects.

Return type

tuple(list, list)

Example

>>> electrons = 2
>>> orbitals = 4
>>> singles, doubles = excitations(electrons, orbitals)
>>> print(singles)
[[0, 2], [1, 3]]
>>> print(doubles)
[[0, 1, 2, 3]]
>>> singles, doubles = excitations(electrons, orbitals, fermionic=True)
>>> print(singles)
[FermiWord({(0, 0): '+', (1, 2): '-'}), FermiWord({(0, 1): '+', (1, 3): '-'})]
>>> print(doubles)
[FermiWord({(0, 0): '+', (1, 1): '+', (2, 2): '-', (3, 3): '-'})]