コード例 #1
0
    def test_print_result(self):
        """Regression test against #198 and general issues with printing results."""
        solver = NumPyMinimumEigensolverFactory()
        calc = GroundStateEigensolver(self.qubit_converter, solver)
        res = calc.solve(self.electronic_structure_problem)
        with contextlib.redirect_stdout(io.StringIO()) as out:
            print(res)
        # do NOT change the below! Lines have been truncated as to not force exact numerical matches
        expected = """\
            === GROUND STATE ENERGY ===

            * Electronic ground state energy (Hartree): -1.857
              - computed part:      -1.857
            ~ Nuclear repulsion energy (Hartree): 0.719
            > Total ground state energy (Hartree): -1.137

            === MEASURED OBSERVABLES ===

              0:  # Particles: 2.000 S: 0.000 S^2: 0.000 M: 0.000

            === DIPOLE MOMENTS ===

            ~ Nuclear dipole moment (a.u.): [0.0  0.0  1.38

              0:
              * Electronic dipole moment (a.u.): [0.0  0.0  -1.38
                - computed part:      [0.0  0.0  -1.38
              > Dipole moment (a.u.): [0.0  0.0  0.0]  Total: 0.
                             (debye): [0.0  0.0  0.0]  Total: 0.
        """
        for truth, expected in zip(out.getvalue().split("\n"),
                                   expected.split("\n")):
            assert truth.strip().startswith(expected.strip())
コード例 #2
0
 def test_npme(self):
     """Test NumPyMinimumEigensolver"""
     solver = NumPyMinimumEigensolverFactory()
     calc = GroundStateEigensolver(self.qubit_converter, solver)
     res = calc.solve(self.electronic_structure_problem)
     self.assertAlmostEqual(res.total_energies[0],
                            self.reference_energy,
                            places=6)
コード例 #3
0
    def test_total_dipole(self):
        """Regression test against #198.

        An issue with calculating the dipole moment that had division None/float.
        """
        solver = NumPyMinimumEigensolverFactory()
        calc = GroundStateEigensolver(self.qubit_converter, solver)
        res = calc.solve(self.electronic_structure_problem)
        self.assertAlmostEqual(res.total_dipole_moment_in_debye[0], 0.0, places=1)
コード例 #4
0
    def test_numpy_mes(self):
        """ Test with NumPyMinimumEigensolver """
        solver = NumPyMinimumEigensolverFactory(
            use_default_filter_criterion=True)
        gsc = GroundStateEigensolver(self.qubit_converter, solver)
        esc = QEOM(gsc, 'sd')
        results = esc.solve(self.vibrational_problem)

        for idx in range(len(self.reference_energies)):
            self.assertAlmostEqual(results.computed_vibrational_energies[idx],
                                   self.reference_energies[idx],
                                   places=4)
コード例 #5
0
 def test_dict_based_aux_ops(self):
     """Test the `test_dict_based_aux_ops` variant"""
     try:
         settings.dict_aux_operators = True
         solver = NumPyMinimumEigensolverFactory()
         calc = GroundStateEigensolver(self.qubit_converter, solver)
         res = calc.solve(self.electronic_structure_problem)
         self.assertAlmostEqual(res.total_energies[0], self.reference_energy, places=6)
         self.assertTrue(
             np.all(isinstance(aux_op, dict) for aux_op in res.aux_operator_eigenvalues)
         )
         self.assertAlmostEqual(
             res.aux_operator_eigenvalues[0]["ParticleNumber"][0], 2.0, places=6
         )
         self.assertAlmostEqual(
             res.aux_operator_eigenvalues[0]["ParticleNumber"][1], 0.0, places=6
         )
         self.assertAlmostEqual(
             res.aux_operator_eigenvalues[0]["AngularMomentum"][0], 0.0, places=6
         )
         self.assertAlmostEqual(
             res.aux_operator_eigenvalues[0]["AngularMomentum"][1], 0.0, places=6
         )
         self.assertAlmostEqual(
             res.aux_operator_eigenvalues[0]["Magnetization"][0], 0.0, places=6
         )
         self.assertAlmostEqual(
             res.aux_operator_eigenvalues[0]["Magnetization"][1], 0.0, places=6
         )
         self.assertAlmostEqual(
             res.aux_operator_eigenvalues[0]["DipoleMomentX"][0], 0.0, places=6
         )
         self.assertAlmostEqual(
             res.aux_operator_eigenvalues[0]["DipoleMomentX"][1], 0.0, places=6
         )
         self.assertAlmostEqual(
             res.aux_operator_eigenvalues[0]["DipoleMomentY"][0], 0.0, places=6
         )
         self.assertAlmostEqual(
             res.aux_operator_eigenvalues[0]["DipoleMomentY"][1], 0.0, places=6
         )
         self.assertAlmostEqual(
             res.aux_operator_eigenvalues[0]["DipoleMomentZ"][0], -1.3889487, places=6
         )
         self.assertAlmostEqual(
             res.aux_operator_eigenvalues[0]["DipoleMomentZ"][1], 0.0, places=6
         )
     finally:
         settings.dict_aux_operators = False
コード例 #6
0
    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))
コード例 #7
0
    def test_freeze_core_z2_symmetry_compatibility(self):
        """Regression test against #192.

        An issue arose when the FreezeCoreTransformer was combined with the automatic Z2Symmetry
        reduction. This regression test ensures that this behavior remains fixed.
        """
        driver = HDF5Driver(hdf5_input=self.get_resource_path(
            "LiH_sto3g.hdf5", "transformers/second_quantization/electronic"))
        problem = ElectronicStructureProblem(driver, [FreezeCoreTransformer()])
        qubit_converter = QubitConverter(
            ParityMapper(),
            two_qubit_reduction=True,
            z2symmetry_reduction="auto",
        )

        solver = NumPyMinimumEigensolverFactory()
        gsc = GroundStateEigensolver(qubit_converter, solver)

        result = gsc.solve(problem)
        self.assertAlmostEqual(result.total_energies[0], -7.882, places=2)
コード例 #8
0
    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 = ElectronicEnergy([
            OneBodyElectronicIntegrals(ElectronicBasis.MO, (h_1, None)),
            TwoBodyElectronicIntegrals(ElectronicBasis.MO,
                                       (h_2, None, None, None)),
        ], ).second_q_ops()
        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))
コード例 #9
0
 def test_list_based_aux_ops(self):
     """Test the list based aux ops variant"""
     msg_ref = (
         "List-based `aux_operators` are deprecated as of version 0.3.0 and support "
         "for them will be removed no sooner than 3 months after the release. Instead, "
         "use dict-based `aux_operators`. You can switch to the dict-based interface "
         "immediately, by setting `qiskit_nature.settings.dict_aux_operators` to `True`."
     )
     with warnings.catch_warnings(record=True) as c_m:
         warnings.simplefilter("always")
         settings.dict_aux_operators = False
         try:
             solver = NumPyMinimumEigensolverFactory()
             calc = GroundStateEigensolver(self.qubit_converter, solver)
             res = calc.solve(self.electronic_structure_problem)
             self.assertAlmostEqual(res.total_energies[0],
                                    self.reference_energy,
                                    places=6)
             self.assertTrue(
                 np.all(
                     isinstance(aux_op, dict)
                     for aux_op in res.aux_operator_eigenvalues))
             aux_op_eigenvalue = res.aux_operator_eigenvalues[0]
             self.assertAlmostEqual(aux_op_eigenvalue[0][0], 2.0, places=6)
             self.assertAlmostEqual(aux_op_eigenvalue[1][1], 0.0, places=6)
             self.assertAlmostEqual(aux_op_eigenvalue[2][0], 0.0, places=6)
             self.assertAlmostEqual(aux_op_eigenvalue[2][1], 0.0, places=6)
             self.assertAlmostEqual(aux_op_eigenvalue[3][0], 0.0, places=6)
             self.assertAlmostEqual(aux_op_eigenvalue[3][1], 0.0, places=6)
             self.assertAlmostEqual(aux_op_eigenvalue[4][0], 0.0, places=6)
             self.assertAlmostEqual(aux_op_eigenvalue[4][1], 0.0, places=6)
             self.assertAlmostEqual(aux_op_eigenvalue[5][0],
                                    -1.3889487,
                                    places=6)
             self.assertAlmostEqual(aux_op_eigenvalue[5][1], 0.0, places=6)
         finally:
             settings.dict_aux_operators = True
         msg = str(c_m[0].message)
         self.assertEqual(msg, msg_ref)