Skip to content

Commit 3589203

Browse files
committed
style: add docstrings to exaplain QND claculation, add method to ResonatorOptimizationData to improve code readability
1 parent acc3e21 commit 3589203

1 file changed

Lines changed: 21 additions & 34 deletions

File tree

src/qibocal/protocols/readout_optimization/resonator_optimization.py

Lines changed: 21 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,18 @@ def frequencies(self, qubit):
125125
"""Unique qubit frequency"""
126126
return np.unique(self[qubit, 0, 0, 0].frequency)
127127

128+
def select_samples(self, qubit, state, measure, pi, freq=None, amp=None):
129+
"""
130+
Return samples for a given qubit, state, and measure, filtering
131+
by frequency and amplitude.
132+
"""
133+
samples = self.data[qubit, state, measure, pi]
134+
if freq is not None:
135+
samples = samples[samples.frequency == freq]
136+
if amp is not None:
137+
samples = samples[samples.amplitude == amp]
138+
return samples
139+
128140

129141
def _acquisition(
130142
params: ResonatorOptimizationParameters,
@@ -255,26 +267,16 @@ def _fit(data: ResonatorOptimizationData) -> ResonatorOptimizationResults:
255267
pi,
256268
) in product(enumerate(freq_vals), enumerate(amp_vals), [0, 1]):
257269
version = "pi" if pi else "standard"
258-
data_state_0 = data[qubit, 0, 0, pi]
259-
data_state_1 = data[qubit, 1, 0, pi]
270+
state_0 = data.select_samples(qubit, 0, 0, pi, freq=freq, amp=amp)
271+
state_1 = data.select_samples(qubit, 1, 0, pi, freq=freq, amp=amp)
260272
iq_values = np.concatenate(
261273
(
262-
data_state_0[
263-
(data_state_0.frequency == freq)
264-
& (data_state_0.amplitude == amp)
265-
].iq_values,
266-
data_state_1[
267-
(data_state_1.frequency == freq)
268-
& (data_state_1.amplitude == amp)
269-
].iq_values,
274+
state_0.iq_values,
275+
state_1.iq_values,
270276
)
271277
)
272278

273-
nshots = len(
274-
data_state_0[
275-
(data_state_0.frequency == freq) & (data_state_0.amplitude == amp)
276-
].iq_values
277-
)
279+
nshots = len(state_0.iq_values)
278280
states = [0] * nshots + [1] * nshots
279281
if pi:
280282
states.reverse()
@@ -303,25 +305,10 @@ def _fit(data: ResonatorOptimizationData) -> ResonatorOptimizationResults:
303305
) in product(enumerate(freq_vals), enumerate(amp_vals), [0, 1]):
304306
version = "pi" if pi else "standard"
305307

306-
m1_state_1 = data[qubit, 1, 0, pi][
307-
(data[qubit, 1, 0, pi].frequency == freq)
308-
& (data[qubit, 1, 0, pi].amplitude == amp)
309-
].samples
310-
311-
m1_state_0 = data[qubit, 0, 0, pi][
312-
(data[qubit, 0, 0, pi].frequency == freq)
313-
& (data[qubit, 0, 0, pi].amplitude == amp)
314-
].samples
315-
316-
m2_state_1 = data[qubit, 1, 1, pi][
317-
(data[qubit, 1, 1, pi].frequency == freq)
318-
& (data[qubit, 1, 1, pi].amplitude == amp)
319-
].samples
320-
321-
m2_state_0 = data[qubit, 0, 1, pi][
322-
(data[qubit, 0, 1, pi].frequency == freq)
323-
& (data[qubit, 0, 1, pi].amplitude == amp)
324-
].samples
308+
m1_state_1 = data.select_samples(qubit, 1, 0, pi, freq=freq, amp=amp)
309+
m1_state_0 = data.select_samples(qubit, 0, 0, pi, freq=freq, amp=amp)
310+
m2_state_1 = data.select_samples(qubit, 1, 1, pi, freq=freq, amp=amp)
311+
m2_state_0 = data.select_samples(qubit, 0, 1, pi, freq=freq, amp=amp)
325312

326313
result, _, _ = compute_qnd(m1_state_1, m1_state_0, m2_state_1, m2_state_0)
327314
grids["qnd"][version][j, k] = result

0 commit comments

Comments
 (0)