Create a fermionic operator that is the generator of uccsd.
openfermion.circuits.uccsd_generator(
single_amplitudes, double_amplitudes, anti_hermitian=True
)
This a the most straight-forward method to generate UCCSD operators,
however it is slightly inefficient. In particular, it parameterizes
all possible excitations, so it represents a generalized unitary coupled
cluster ansatz, but also does not explicitly enforce the uniqueness
in parametrization, so it is redundant. For example there will be a linear
dependency in the ansatz of single_amplitudes[i,j] and
single_amplitudes[j,i].
Args |
single_amplitudes(list or ndarray): list of lists with each sublist
storing a list of indices followed by single excitation amplitudes
i.e. [[[i,j],t_ij], ...] OR [NxN] array storing single excitation
amplitudes corresponding to
t[i,j] * (a_i^\dagger a_j - H.C.)
double_amplitudes(list or ndarray): list of lists with each sublist
storing a list of indices followed by double excitation amplitudes
i.e. [[[i,j,k,l],t_ijkl], ...] OR [NxNxNxN] array storing double
excitation amplitudes corresponding to
t[i,j,k,l] * (a_i^\dagger a_j a_k^\dagger a_l - H.C.)
anti_hermitian(Bool): Flag to generate only normal CCSD operator
rather than unitary variant, primarily for testing
|
Returns |
uccsd_generator(FermionOperator): Anti-hermitian fermion operator that
is the generator for the uccsd wavefunction.
|