From 485eb76f1810f419dc9eda985eff43be837253a5 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 20 Jun 2023 12:27:29 +0100 Subject: [PATCH] Fix VQD's `optimal_values` (#10279) (#10312) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix optimal values * Add unittest * Add reno * Update unittest * Revert "Update unittest" This reverts commit 5000d2fb02e8126b376d9cd30d2862c202af2755. * Update test * Make test subtest (cherry picked from commit 93a8172c3ca8fda510393087a861ef12d661906f) Co-authored-by: Elena Peña Tapia <57907331+ElePT@users.noreply.github.com> --- qiskit/algorithms/eigensolvers/vqd.py | 2 +- releasenotes/notes/fix-vqd-result-27b26f0a6d49e7c7.yaml | 5 +++++ test/python/algorithms/eigensolvers/test_vqd.py | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/fix-vqd-result-27b26f0a6d49e7c7.yaml diff --git a/qiskit/algorithms/eigensolvers/vqd.py b/qiskit/algorithms/eigensolvers/vqd.py index 6a0c8a0842b4..cbb4d56af313 100644 --- a/qiskit/algorithms/eigensolvers/vqd.py +++ b/qiskit/algorithms/eigensolvers/vqd.py @@ -448,7 +448,7 @@ def _update_vqd_result( else np.array([opt_result.x]) ) result.optimal_parameters.append(dict(zip(ansatz.parameters, opt_result.x))) - result.optimal_values = np.concatenate([result.optimal_points, [opt_result.x]]) + result.optimal_values = np.concatenate([result.optimal_values, [opt_result.fun]]) result.cost_function_evals = np.concatenate([result.cost_function_evals, [opt_result.nfev]]) result.optimizer_times = np.concatenate([result.optimizer_times, [eval_time]]) result.eigenvalues.append(opt_result.fun + 0j) diff --git a/releasenotes/notes/fix-vqd-result-27b26f0a6d49e7c7.yaml b/releasenotes/notes/fix-vqd-result-27b26f0a6d49e7c7.yaml new file mode 100644 index 000000000000..8b2854c36da0 --- /dev/null +++ b/releasenotes/notes/fix-vqd-result-27b26f0a6d49e7c7.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixed bug in :class:`~qiskit.algorithms.eigensolvers.VQD` where ``result.optimal_values`` was a + copy of ``result.optimal_points``. It now returns the corresponding values. diff --git a/test/python/algorithms/eigensolvers/test_vqd.py b/test/python/algorithms/eigensolvers/test_vqd.py index 16652a259ebd..a2520fcec815 100644 --- a/test/python/algorithms/eigensolvers/test_vqd.py +++ b/test/python/algorithms/eigensolvers/test_vqd.py @@ -103,6 +103,11 @@ def test_basic_operator(self, op): ) np.testing.assert_array_almost_equal(job.result().values, result.eigenvalues, 6) + with self.subTest(msg="assert returned values are eigenvalues"): + np.testing.assert_array_almost_equal( + result.optimal_values, self.h2_energy_excited[:2], decimal=3 + ) + def test_full_spectrum(self): """Test obtaining all eigenvalues.""" vqd = VQD(self.estimator, self.fidelity, self.ryrz_wavefunction, optimizer=L_BFGS_B(), k=4)