示例#1
0
 def test_cme(self):
     """ Basic test """
     algo = NumPyMinimumEigensolver(self.qubit_op,
                                    aux_operators=self.aux_ops)
     result = algo.run()
     self.assertAlmostEqual(result.eigenvalue, -1.85727503 + 0j)
     self.assertEqual(len(result.aux_operator_eigenvalues), 2)
     np.testing.assert_array_almost_equal(
         result.aux_operator_eigenvalues[0], [2, 0])
     np.testing.assert_array_almost_equal(
         result.aux_operator_eigenvalues[1], [0, 0])
示例#2
0
    def test_cme_filter_empty(self):
        """ Test with filter always returning False """

        # define filter criterion
        # pylint: disable=unused-argument
        def criterion(x, v, a_v):
            return False

        algo = NumPyMinimumEigensolver(self.qubit_op,
                                       aux_operators=self.aux_ops,
                                       filter_criterion=criterion)
        result = algo.run()
        self.assertEqual(result.eigenvalue, None)
        self.assertEqual(result.eigenstate, None)
        self.assertEqual(result.aux_operator_eigenvalues, None)
示例#3
0
    def test_cme_reuse(self):
        """ Test reuse """
        # Start with no operator or aux_operators, give via compute method
        algo = NumPyMinimumEigensolver()
        result = algo.compute_minimum_eigenvalue(self.qubit_op)
        self.assertAlmostEqual(result.eigenvalue, -1.85727503 + 0j)
        self.assertEqual(self.qubit_op.to_opflow(), algo.operator)
        self.assertIsNone(result.aux_operator_eigenvalues)

        # Set operator to None and go again
        algo.operator = None
        with self.assertRaises(AlgorithmError):
            _ = algo.run()

        # Set operator back as it was and go again
        algo.operator = self.qubit_op
        result = algo.compute_minimum_eigenvalue()
        self.assertAlmostEqual(result.eigenvalue, -1.85727503 + 0j)
        self.assertIsNone(result.aux_operator_eigenvalues)

        # Add aux_operators and go again
        result = algo.compute_minimum_eigenvalue(aux_operators=self.aux_ops)
        self.assertAlmostEqual(result.eigenvalue, -1.85727503 + 0j)
        self.assertEqual(len(result.aux_operator_eigenvalues), 2)
        np.testing.assert_array_almost_equal(
            result.aux_operator_eigenvalues[0], [2, 0])
        np.testing.assert_array_almost_equal(
            result.aux_operator_eigenvalues[1], [0, 0])

        # "Remove" aux_operators and go again
        result = algo.compute_minimum_eigenvalue(aux_operators=[])
        self.assertAlmostEqual(result.eigenvalue, -1.85727503 + 0j)
        self.assertIsNone(result.aux_operator_eigenvalues)

        # Set aux_operators and go again
        algo.aux_operators = self.aux_ops
        result = algo.compute_minimum_eigenvalue()
        self.assertAlmostEqual(result.eigenvalue, -1.85727503 + 0j)
        self.assertEqual(len(result.aux_operator_eigenvalues), 2)
        np.testing.assert_array_almost_equal(
            result.aux_operator_eigenvalues[0], [2, 0])
        np.testing.assert_array_almost_equal(
            result.aux_operator_eigenvalues[1], [0, 0])

        # Finally just set one of aux_operators and main operator, remove aux_operators
        result = algo.compute_minimum_eigenvalue(self.aux_ops[0], [])
        self.assertAlmostEqual(result.eigenvalue, 2 + 0j)
        self.assertIsNone(result.aux_operator_eigenvalues)
示例#4
0
    def test_cme_filter(self):
        """ Basic test """

        # define filter criterion
        # pylint: disable=unused-argument
        def criterion(x, v, a_v):
            return v >= -0.5

        algo = NumPyMinimumEigensolver(self.qubit_op,
                                       aux_operators=self.aux_ops,
                                       filter_criterion=criterion)

        result = algo.run()
        self.assertAlmostEqual(result.eigenvalue, -0.22491125 + 0j)
        self.assertEqual(len(result.aux_operator_eigenvalues), 2)
        np.testing.assert_array_almost_equal(
            result.aux_operator_eigenvalues[0], [2, 0])
        np.testing.assert_array_almost_equal(
            result.aux_operator_eigenvalues[1], [0, 0])
示例#5
0
 def test_cme_fail(self):
     """ Test no operator """
     algo = NumPyMinimumEigensolver()
     with self.assertRaises(AlgorithmError):
         _ = algo.run()