OrbitalRotation

class OrbitalRotation(rotation_unitary)

Bases: FermionicGate

Implements an orbital rotation.

Given an \(n \times n\) unitary matrix \(U\) (rotation_unitary), this gate implements the single-particle basis change that maps the creation operators as

\[a^\dagger_i \mapsto \sum_j U_{ji} a^\dagger_j,\]

which is equivalent to applying the many-body unitary

\[\exp\left(\sum_{ij} \log(U)_{ij} \, a^\dagger_i a_j\right).\]

The number of fermionic modes the gate acts on is the dimension \(n\) of rotation_unitary.

Initializing an instance of this gate can be done with the arguments listed below.

Parameters:

rotation_unitary (np.ndarray) – the \(n \times n\) unitary matrix \(U\) defining the orbital rotation via \(a^\dagger_i \mapsto \sum_j U_{ji} a^\dagger_j\). It must be square and unitary; this is the caller’s responsibility and is not verified.

Attributes

rotation_unitary

The unitary matrix representing the orbital rotation coefficients.

Methods

classmethod from_t1_amplitudes(t1)

Constructs an orbital rotation from \(t_1\) (singles) amplitudes.

The rotation is the unitary \(\exp(t_1 - t_1^\dagger)\), where the \(n_\text{occ} \times n_\text{virt}\) amplitude matrix \(t_1\) is embedded into the anti-Hermitian generator over all \(n = n_\text{occ} + n_\text{virt}\) orbitals

\[G = \begin{pmatrix} 0 & -t_1^* \\ t_1^\top & 0 \end{pmatrix},\]

with the occupied orbitals ordered before the virtual ones. This is the single-excitation orbital rotation entering the (L)UCJ ansatz when it is initialized from coupled-cluster amplitudes; see UCJ.

Parameters:

t1 (ndarray) – the \(t_1\) amplitudes of shape (nocc, nvrt), where nocc is the number of occupied orbitals and nvrt is the number of virtual orbitals.

Returns:

An OrbitalRotation acting on \(n = n_\text{occ} + n_\text{virt}\) modes, whose rotation_unitary is \(\exp(t_1 - t_1^\dagger)\).

Return type:

OrbitalRotation