FermionicOperator
class FermionicOperator(h1, h2=None, ph_trans_shift=None)
A set of functions to map fermionic Hamiltonians to qubit Hamiltonians.
References:
- E. Wigner and P. Jordan., Über das Paulische Äquivalenzverbot, Z. Phys., 47:631 (1928).
- S. Bravyi and A. Kitaev. Fermionic quantum computation, Ann. of Phys., 298(1):210–226 (2002).
- A. Tranter, S. Sofia, J. Seeley, M. Kaicher, J. McClean, R. Babbush, P. Coveney, F. Mintert, F. Wilhelm, and P. Love. The Bravyi–Kitaev transformation: Properties and applications. Int. Journal of Quantum Chemistry, 115(19):1431–1441 (2015).
- S. Bravyi, J. M. Gambetta, A. Mezzacapo, and K. Temme, arXiv e-print arXiv:1701.08213 (2017).
- K. Setia, J. D. Whitfield, arXiv:1712.00446 (2017)
This class requires the integrals stored in the ‘chemist’ notation
h2(i,j,k,l) –> adag_i adag_k a_l a_j
and the integral values are used for the coefficients of the second-quantized Hamiltonian that is built. The integrals input here should be in block spin format and also have indexes reordered as follows ‘ijkl->ljik’
There is another popular notation, the ‘physicist’ notation
h2(i,j,k,l) –> adag_i adag_j a_k a_l
If you are using the ‘physicist’ notation, you need to convert it to the ‘chemist’ notation. E.g. h2=numpy.einsum(‘ikmj->ijkm’, h2)
The QMolecule
class has one_body_integrals
and two_body_integrals
properties that can be directly supplied to the h1 and h2 parameters here respectively.
Parameters
- h1 (numpy.ndarray) – second-quantized fermionic one-body operator, a 2-D (NxN) tensor
- h2 (numpy.ndarray) – second-quantized fermionic two-body operator, a 4-D (NxNxNxN) tensor
- ph_trans_shift (float) – energy shift caused by particle hole transformation
Attributes
h1
Getter of one body integral tensor.
h2
Getter of two body integral tensor.
modes
Getter of modes.
Methods
fermion_mode_elimination
FermionicOperator.fermion_mode_elimination(fermion_mode_array)
Eliminate modes.
Generate a new fermionic operator with the modes in fermion_mode_array deleted
Parameters
fermion_mode_array (list) – orbital index for elimination
Returns
Fermionic Hamiltonian
Return type
fermion_mode_freezing
FermionicOperator.fermion_mode_freezing(fermion_mode_array)
Freezing modes and extracting its energy.
Generate a fermionic operator with the modes in fermion_mode_array deleted and provide the shifted energy after freezing.
Parameters
fermion_mode_array (list) – orbital index for freezing
Returns
Fermionic Hamiltonian and energy of frozen modes
Return type
tuple(FermionicOperator, float)
mapping
FermionicOperator.mapping(map_type, threshold=1e-08)
Map fermionic operator to qubit operator.
Using multiprocess to speedup the mapping, the improvement can be observed when h2 is a non-sparse matrix.
Parameters
- map_type (str) – case-insensitive mapping type. “jordan_wigner”, “parity”, “bravyi_kitaev”, “bksf”
- threshold (float) – threshold for Pauli simplification
Returns
create an Operator object in Paulis form.
Return type
Raises
QiskitChemistryError – if the map_type can not be recognized.
particle_hole_transformation
FermionicOperator.particle_hole_transformation(num_particles)
The ‘standard’ second quantized Hamiltonian can be transformed in the particle-hole (p/h) picture, which makes the expansion of the trail wavefunction from the HF reference state more natural. In fact, for both trail wavefunctions implemented in q-lib (‘heuristic’ hardware efficient and UCCSD) the p/h Hamiltonian improves the speed of convergence of the VQE algorithm for the calculation of the electronic ground state properties. For more information on the p/h formalism see: P. Barkoutsos, arXiv:1805.04340(https://arxiv.org/abs/1805.04340).
Parameters
num_particles (list, int) – number of particles, if it is a list, the first number is alpha and the second number is beta.
Returns
new_fer_op, energy_shift
Return type
tuple
total_angular_momentum
FermionicOperator.total_angular_momentum()
Total angular momentum.
A data_preprocess_helper fermionic operator which can be used to evaluate the total angular momentum of the given eigenstate.
Returns
Fermionic Hamiltonian
Return type
total_magnetization
FermionicOperator.total_magnetization()
A data_preprocess_helper fermionic operator which can be used to evaluate the magnetization of the given eigenstate.
Returns
Fermionic Hamiltonian
Return type
total_particle_number
FermionicOperator.total_particle_number()
A data_preprocess_helper fermionic operator which can be used to evaluate the number of particle of the given eigenstate.
Returns
Fermionic Hamiltonian
Return type
transform
FermionicOperator.transform(unitary_matrix)
Transform the one and two body term based on unitary_matrix.