def setUp(self): super().setUp() driver = HDF5Driver(hdf5_input=self.get_resource_path( "test_driver_hdf5.hdf5", "drivers/hdf5d")) self.molecule = driver.run() self.num_particles = (self.molecule.num_alpha, self.molecule.num_beta) self.h2_op = fermionic_op_builder._build_fermionic_op(self.molecule)
def test_mapping(self): """ Test mapping to qubit operator """ driver = HDF5Driver(hdf5_input=self.get_resource_path('test_driver_hdf5.hdf5', 'drivers/hdf5d')) q_molecule = driver.run() fermionic_op = fermionic_op_builder._build_fermionic_op(q_molecule) mapper = JordanWignerMapper() qubit_op = mapper.map(fermionic_op) # Note: The PauliSumOp equals, as used in the test below, use the equals of the # SparsePauliOp which in turn uses np.allclose() to determine equality of # coeffs. So the reference operator above will be matched on that basis so # we don't need to worry about tiny precision changes for any reason. self.assertEqual(qubit_op, TestJordanWignerMapper.REF_H2)
def second_q_ops(self) -> List[SecondQuantizedOp]: """Returns a list of `SecondQuantizedOp` created based on a driver and transformations provided. Returns: A list of `SecondQuantizedOp` in the following order: electronic operator, total magnetization operator, total angular momentum operator, total particle number operator, and (if available) x, y, z dipole operators. """ self._molecule_data = cast(QMolecule, self.driver.run()) self._molecule_data_transformed = cast(QMolecule, self._transform(self._molecule_data)) electronic_fermionic_op = _build_fermionic_op(self._molecule_data_transformed) second_quantized_ops_list = [electronic_fermionic_op] + _create_all_aux_operators( self._molecule_data_transformed) return second_quantized_ops_list
def test_build_fermionic_op(self): """Tests that the correct FermionicOp is built from QMolecule.""" 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_fermionic_op(q_molecule) 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))