@@ -117,7 +117,7 @@ class OptimizeTwoQubitGateData(Data):
117117
118118 data : dict [tuple , npt .NDArray ] = field (default_factory = dict )
119119 """Raw data."""
120- ordered_pairs : list [QubitPairId ] = field (default_factory = dict )
120+ _sorted_pairs : list [QubitPairId ] = field (default_factory = dict )
121121 thetas : list = field (default_factory = list )
122122 """Angles swept."""
123123 native : str = "CZ"
@@ -127,6 +127,17 @@ class OptimizeTwoQubitGateData(Data):
127127 durations : list = field (default_factory = list )
128128 """Durations swept."""
129129
130+ @property
131+ def sorted_pairs (self ):
132+ return [
133+ pair if isinstance (pair , tuple ) else tuple (pair )
134+ for pair in self ._sorted_pairs
135+ ]
136+
137+ @sorted_pairs .setter
138+ def sorted_pairs (self , value ):
139+ self ._sorted_pairs = value
140+
130141 def parse (self , i , j ):
131142 return {
132143 key : value [
@@ -148,13 +159,13 @@ def _acquisition(
148159 """
149160
150161 data = OptimizeTwoQubitGateData (
151- ordered_pairs = [order_pair (pair , platform ) for pair in targets ],
162+ _sorted_pairs = [order_pair (pair , platform ) for pair in targets ],
152163 thetas = params .theta_range .tolist (),
153164 amplitudes = params .amplitude_range .tolist (),
154165 durations = params .duration_range .tolist (),
155166 native = params .native ,
156167 )
157- for ordered_pair in data .ordered_pairs :
168+ for ordered_pair in data .sorted_pairs :
158169 for target_q , control_q in (
159170 (ordered_pair [0 ], ordered_pair [1 ]),
160171 (ordered_pair [1 ], ordered_pair [0 ]),
@@ -228,7 +239,7 @@ def _fit(
228239 best_amp = {}
229240 best_dur = {}
230241 best_virtual_phase = {}
231- for pair in data .ordered_pairs :
242+ for pair in data .sorted_pairs :
232243 for target_q , control_q in (
233244 (pair [0 ], pair [1 ]),
234245 (pair [1 ], pair [0 ]),
@@ -297,23 +308,24 @@ def _plot(
297308 target : QubitPairId ,
298309):
299310 """Plot routine for OptimizeTwoQubitGate."""
300- pair = target if list [target ] in data .ordered_pairs else (target [1 ], target [0 ])
311+ if target not in data .sorted_pairs :
312+ target = (target [1 ], target [0 ])
301313 fitting_report = ""
302314
303315 fig = make_subplots (
304316 rows = 2 ,
305317 cols = 2 ,
306318 subplot_titles = (
307- f"Qubit { pair [0 ]} { data .native } angle" ,
308- f"Qubit { pair [1 ]} Leakage" ,
309- f"Qubit { pair [1 ]} { data .native } angle" ,
310- f"Qubit { pair [0 ]} Leakage" ,
319+ f"Qubit { target [0 ]} { data .native } angle" ,
320+ f"Qubit { target [1 ]} Leakage" ,
321+ f"Qubit { target [1 ]} { data .native } angle" ,
322+ f"Qubit { target [0 ]} Leakage" ,
311323 ),
312324 )
313325 if fit is not None :
314326 for target_q , control_q in (
315- pair ,
316- list (pair )[::- 1 ],
327+ target ,
328+ list (target )[::- 1 ],
317329 ):
318330 condition = [target_q , control_q ] == list (target )
319331 fig .add_trace (
@@ -327,7 +339,7 @@ def _plot(
327339 zmax = 2 * np .pi ,
328340 name = "{fit.native} angle" ,
329341 colorbar_x = - 0.1 ,
330- colorscale = "RdBu " ,
342+ colorscale = "Twilight " ,
331343 showscale = condition ,
332344 ),
333345 row = 1 if condition else 2 ,
@@ -358,9 +370,9 @@ def _plot(
358370 .reshape (len (data .durations ), len (data .amplitudes ))
359371 .T ,
360372 zmin = 0 ,
361- zmax = 0.05 ,
373+ zmax = 0.25 ,
362374 name = "{fit.native} angle" ,
363- colorscale = "Reds " ,
375+ colorscale = "Inferno " ,
364376 showscale = condition ,
365377 ),
366378 row = 1 if condition else 2 ,
0 commit comments