Skip to content

Commit 8575820

Browse files
fix: rewrite AdaptVQE cyclicity test (Qiskit/qiskit#8815)
This replaces the flaky AdaptVQE cyclicity termination test with a test for the internal cyclicity detection method. This test simply cannot be flaky. Closes Qiskit/qiskit#8806 Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent eda9acf commit 8575820

File tree

1 file changed

+34
-10
lines changed

1 file changed

+34
-10
lines changed

test/minimum_eigensolvers/test_adapt_vqe.py

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import unittest
1616
from test.python.algorithms import QiskitAlgorithmsTestCase
1717

18+
from ddt import ddt, data, unpack
19+
1820
from qiskit.algorithms.minimum_eigensolvers import VQE
1921
from qiskit.algorithms.minimum_eigensolvers.adapt_vqe import AdaptVQE, TerminationCriterion
2022
from qiskit.algorithms.optimizers import SLSQP
@@ -26,6 +28,7 @@
2628
from qiskit.utils import algorithm_globals
2729

2830

31+
@ddt
2932
class TestAdaptVQE(QiskitAlgorithmsTestCase):
3033
"""Test of the AdaptVQE minimum eigensolver"""
3134

@@ -110,16 +113,37 @@ def test_maximum(self):
110113

111114
self.assertEqual(res.termination_criterion, TerminationCriterion.MAXIMUM)
112115

113-
def test_cyclicity(self):
114-
"""Test to check termination criteria"""
115-
calc = AdaptVQE(
116-
VQE(Estimator(), self.ansatz, self.optimizer),
117-
max_iterations=100,
118-
threshold=1e-15,
119-
)
120-
res = calc.compute_minimum_eigenvalue(operator=self.h2_op)
121-
122-
self.assertEqual(res.termination_criterion, TerminationCriterion.CYCLICITY)
116+
@data(
117+
([1, 1], True),
118+
([1, 11], False),
119+
([11, 1], False),
120+
([1, 12], False),
121+
([12, 2], False),
122+
([1, 1, 1], True),
123+
([1, 2, 1], False),
124+
([1, 2, 2], True),
125+
([1, 2, 21], False),
126+
([1, 12, 2], False),
127+
([11, 1, 2], False),
128+
([1, 2, 1, 1], True),
129+
([1, 2, 1, 2], True),
130+
([1, 2, 1, 21], False),
131+
([11, 2, 1, 2], False),
132+
([1, 11, 1, 111], False),
133+
([11, 1, 111, 1], False),
134+
([1, 2, 3, 1, 2, 3], True),
135+
([1, 2, 3, 4, 1, 2, 3], False),
136+
([11, 2, 3, 1, 2, 3], False),
137+
([1, 2, 3, 1, 2, 31], False),
138+
([1, 2, 3, 4, 1, 2, 3, 4], True),
139+
([11, 2, 3, 4, 1, 2, 3, 4], False),
140+
([1, 2, 3, 4, 1, 2, 3, 41], False),
141+
([1, 2, 3, 4, 5, 1, 2, 3, 4], False),
142+
)
143+
@unpack
144+
def test_cyclicity(self, seq, is_cycle):
145+
"""Test AdaptVQE index cycle detection"""
146+
self.assertEqual(is_cycle, AdaptVQE._check_cyclicity(seq))
123147

124148
def test_vqe_solver(self):
125149
"""Test to check if the VQE solver remains the same or not"""

0 commit comments

Comments
 (0)