/
test_germselection.py
175 lines (152 loc) · 14.3 KB
/
test_germselection.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import pygsti
import numpy as _np
from pygsti.circuits import Circuit
from pygsti.baseobjs import Label
from pygsti.modelpacks import smq1Q_XY as std
from ..algorithms.algorithmsTestCase import AlgorithmTestCase
class GermSelectionTestData(object):
germs_greedy = {Circuit([Label('Gxpi2',0)]),
Circuit([Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])}
germs_greedy_alt = {Circuit([Label('Gxpi2',0)]),
Circuit([Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0)])}
germs_driver_greedy = {Circuit([Label('Gxpi2',0)], line_labels=(0,)),
Circuit([Label('Gypi2',0)], line_labels=(0,)),
Circuit([Label('Gxpi2',0),Label('Gypi2',0)], line_labels=(0,)),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)], line_labels=(0,)),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0)], line_labels=(0,))}
germs_driver_greedy_alt = {Circuit([Label('Gxpi2',0)], line_labels=(0,)),
Circuit([Label('Gypi2',0)], line_labels=(0,)),
Circuit([Label('Gxpi2',0),Label('Gypi2',0)], line_labels=(0,)),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)], line_labels=(0,)),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0)], line_labels=(0,))}
germs_driver_greedy_alt_1 = {Circuit([Label('Gxpi2',0)], line_labels=(0,)),
Circuit([Label('Gypi2',0)], line_labels=(0,)),
Circuit([Label('Gxpi2',0),Label('Gypi2',0)], line_labels=(0,)),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)], line_labels=(0,)),
Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gxpi2',0)], line_labels=(0,))}
germs_driver_grasp = ({Circuit([Label('Gxpi2',0)]),
Circuit([Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])},
[[Circuit([Label('Gxpi2',0)]), Circuit([Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gxpi2',0)]),
Circuit([Label('Gypi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])],
[Circuit([Label('Gxpi2',0)]), Circuit([Label('Gypi2',0)]), Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gxpi2',0)]),
Circuit([Label('Gypi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])],
[Circuit([Label('Gxpi2',0)]), Circuit([Label('Gypi2',0)]), Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gxpi2',0)]),
Circuit([Label('Gypi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])],
[Circuit([Label('Gxpi2',0)]), Circuit([Label('Gypi2',0)]), Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gxpi2',0)]),
Circuit([Label('Gypi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])],
[Circuit([Label('Gxpi2',0)]), Circuit([Label('Gypi2',0)]), Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gxpi2',0)]),
Circuit([Label('Gypi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])]],
[[Circuit([Label('Gxpi2',0)]), Circuit([Label('Gypi2',0)]), Circuit([Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])],
[Circuit([Label('Gxpi2',0)]), Circuit([Label('Gypi2',0)]), Circuit([Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])],
[Circuit([Label('Gxpi2',0)]), Circuit([Label('Gypi2',0)]), Circuit([Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])],
[Circuit([Label('Gxpi2',0)]), Circuit([Label('Gypi2',0)]), Circuit([Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])],
[Circuit([Label('Gxpi2',0)]), Circuit([Label('Gypi2',0)]), Circuit([Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])]])
germs_driver_grasp_alt ={Circuit([Label('Gxpi2',0)]),
Circuit([Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])}
germs_driver_grasp_alt_1 ={Circuit([Label('Gxpi2',0)]),
Circuit([Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gxpi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])}
germs_driver_slack = {Circuit([Label('Gxpi2',0)]),
Circuit([Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0)]),
Circuit([Label('Gxpi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gxpi2',0),Label('Gypi2',0),Label('Gypi2',0)])}
class GermSelectionTestCase(AlgorithmTestCase, GermSelectionTestData):
#test with worst score_func
def test_germsel_greedy(self):
threshold = 1e6
randomizationStrength = 1e-3
neighborhoodSize = 2
gatesetNeighborhood = pygsti.alg.randomize_model_list([std.target_model()],
randomization_strength=randomizationStrength,
num_copies=neighborhoodSize, seed=2014)
max_length = 6
gates = std.target_model().operations.keys()
superGermSet = pygsti.circuits.list_all_circuits_without_powers_and_cycles(gates, max_length)
germs = pygsti.alg.find_germs_breadthfirst(gatesetNeighborhood, superGermSet,
randomize=False, seed=2014, score_func='worst',
threshold=threshold, verbosity=1, op_penalty=1.0,
mem_limit=2*1024000)
print(f'{germs=}')
self.assertTrue(self.germs_greedy == set(germs) or self.germs_greedy_alt == set(germs))
def test_germsel_driver_greedy(self):
#GREEDY
options = {'threshold': 1e6 }
germs = pygsti.alg.find_germs(std.target_model(), randomize=True, randomization_strength=1e-3,
num_gs_copies=2, seed=2017, candidate_germ_counts={3: 'all upto', 4: 10, 5:10, 6:10},
candidate_seed=2017, force="singletons", algorithm='greedy',
algorithm_kwargs=options, mem_limit=None, comm=None,
profiler=None, verbosity=1)
self.assertTrue(self.germs_driver_greedy == set(germs) or self.germs_driver_greedy_alt == set(germs) or self.germs_driver_greedy_alt_1 == set(germs))
def test_germsel_driver_grasp(self):
#more args
options = {'threshold': 1e6 , 'return_all': True}
germs = pygsti.alg.find_germs(std.target_model(), randomize=True, randomization_strength=1e-3,
num_gs_copies=2, seed=2017, candidate_germ_counts={3: 'all upto', 4: 10, 5:10, 6:10},
candidate_seed=2017, force="singletons", algorithm='grasp',
algorithm_kwargs=options, mem_limit=None,
profiler=None, verbosity=1)
self.assertTrue(self.germs_driver_grasp[0] == set(germs[0]) or self.germs_driver_grasp_alt == set(germs[0]) or self.germs_driver_grasp_alt_1 == set(germs[0]))
self.assertTrue(self.germs_driver_grasp[1] == germs[1])
#TODO re-enable correctness check for initial candidate sets, for now just check it is not None
self.assertTrue(germs[2] is not None)
def test_germsel_driver_slack(self):
#SLACK
options = dict(fixed_slack=False, slack_frac=0.1)
germs = pygsti.alg.find_germs(std.target_model(), randomize=True, randomization_strength=1e-3,
num_gs_copies=2, seed=2017, candidate_germ_counts={3: 'all upto', 4: 10, 5:10, 6:10},
candidate_seed=2017, force="singletons", algorithm='slack',
algorithm_kwargs=options, mem_limit=None, comm=None,
profiler=None, verbosity=1)
self.assertTrue(self.germs_driver_slack == set(germs))