def _create_dipole_ops( q_molecule: QMolecule, ) -> Tuple[FermionicOp, FermionicOp, FermionicOp]: x_dipole_operator = build_ferm_op_from_ints(q_molecule.x_dipole_integrals) y_dipole_operator = build_ferm_op_from_ints(q_molecule.y_dipole_integrals) z_dipole_operator = build_ferm_op_from_ints(q_molecule.z_dipole_integrals) return x_dipole_operator, y_dipole_operator, z_dipole_operator
def test_aux_ops_reusability(self): """ Test that the auxiliary operators can be reused """ # Regression test against #1475 solver = NumPyMinimumEigensolverFactory() calc = GroundStateEigensolver(self.qubit_converter, solver) modes = 4 h_1 = np.eye(modes, dtype=complex) h_2 = np.zeros((modes, modes, modes, modes)) aux_ops = [build_ferm_op_from_ints(h_1, h_2)] aux_ops_copy = copy.deepcopy(aux_ops) _ = calc.solve(self.electronic_structure_problem) assert all(frozenset(a.to_list()) == frozenset(b.to_list()) for a, b in zip(aux_ops, aux_ops_copy))
def test_aux_ops_reusability(self): """Test that the auxiliary operators can be reused""" # Regression test against #1475 solver = VQEUCCFactory(QuantumInstance(BasicAer.get_backend("statevector_simulator"))) calc = AdaptVQE(self.qubit_converter, solver) modes = 4 h_1 = np.eye(modes, dtype=complex) h_2 = np.zeros((modes, modes, modes, modes)) aux_ops = [build_ferm_op_from_ints(h_1, h_2)] aux_ops_copy = copy.deepcopy(aux_ops) _ = calc.solve(self.problem) assert all( frozenset(a.to_list()) == frozenset(b.to_list()) for a, b in zip(aux_ops, aux_ops_copy) )
def test_build_fermionic_op_from_ints_both(self): """Tests that the correct FermionicOp is built from 1- and 2-body integrals.""" expected_num_of_terms_ferm_op = 184 expected_fermionic_op_path = self.get_resource_path( 'H2_631g_ferm_op_two_ints', 'problems/second_quantization/' 'electronic/resources') expected_fermionic_op = read_expected_file(expected_fermionic_op_path) driver = HDF5Driver( hdf5_input=self.get_resource_path('H2_631g.hdf5', 'transformers')) q_molecule = driver.run() fermionic_op = fermionic_op_builder.build_ferm_op_from_ints( q_molecule.one_body_integrals, q_molecule.two_body_integrals) with self.subTest("Check type of fermionic operator"): assert isinstance(fermionic_op, FermionicOp) with self.subTest( "Check expected number of terms in a fermionic operator."): assert len(fermionic_op) == expected_num_of_terms_ferm_op with self.subTest("Check expected content of a fermionic operator."): assert all( s[0] == t[0] and np.isclose(s[1], t[1]) for s, t in zip(fermionic_op.to_list(), expected_fermionic_op))
def _create_total_particle_num_op(q_molecule: QMolecule) -> FermionicOp: num_modes = q_molecule.one_body_integrals.shape[0] return build_ferm_op_from_ints(*calc_total_particle_num_ints(num_modes))