Skip to content

Commit e92af47

Browse files
feat: Adapt optimize from #1268
1 parent e4bb6f7 commit e92af47

1 file changed

Lines changed: 26 additions & 14 deletions

File tree

src/qibocal/protocols/two_qubit_interaction/optimize.py

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)