コード例 #1
0
 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)
コード例 #2
0
    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)
コード例 #3
0
    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
コード例 #4
0
 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))