View source on GitHub |
Obtain the description of a circuit which prepares a fermionic Gaussian state.
openfermion.circuits.gaussian_state_preparation_circuit(
quadratic_hamiltonian, occupied_orbitals=None, spin_sector=None
)
Used in the notebooks
Used in the tutorials |
---|
Fermionic Gaussian states can be regarded as eigenstates of quadratic Hamiltonians. If the Hamiltonian conserves particle number, then these are just Slater determinants. See arXiv:1711.05395 for a detailed description of how this procedure works.
The circuit description is returned as a sequence of elementary operations; operations that can be performed in parallel are grouped together. Each elementary operation is either
the string 'pht', indicating the particle-hole transformation on the last fermionic mode, which is the operator \(\mathcal{B}\) such that
\[ \begin{align} \mathcal{B} a_N \mathcal{B}^\dagger &= a_N^\dagger,\\ \mathcal{B} a_j \mathcal{B}^\dagger &= a_j, \quad j = 1, \ldots, N-1, \end{align} \]
or
a tuple \((i, j, \theta, \varphi)\), indicating the operation
\[ \exp[i \varphi a_j^\dagger a_j] \exp[\theta (a_i^\dagger a_j - a_j^\dagger a_i)], \]
a Givens rotation of modes \(i\) and \(j\) by angles \(\theta\) and \(\varphi\).
Returns
circuit_description (list[tuple]):
A list of operations describing the circuit. Each operation
is a tuple of objects describing elementary operations that
can be performed in parallel. Each elementary operation
is either the string 'pht', indicating a particle-hole
transformation on the last fermionic mode, or a tuple of
the form \\((i, j, \theta, \varphi)\\),
indicating a Givens rotation
of modes \\(i\\) and \\(j\\) by angles \\(\theta\\)
and \\(\varphi\\).
start_orbitals (list):
The occupied orbitals to start with. This describes the
initial state that the circuit should be applied to: it should
be a Slater determinant (in the computational basis) with these
orbitals filled.