Skip to content

Commit

Permalink
Add to_npz function and update kernel path
Browse files Browse the repository at this point in the history
  • Loading branch information
Jacfomg committed Jan 15, 2024
1 parent 5657dc3 commit 8b3bbb0
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 5 deletions.
9 changes: 9 additions & 0 deletions src/qibocal/auto/operation.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,15 @@ def save(self, path):
self._to_json(path)
self._to_npz(path)

def to_npz(self, path):
"""Helper function to use np.savez while converting keys into strings."""
if self.data:
np.savez(
path,
**{json.dumps(i): self.data[i] for i in self.data},
)
print({json.dumps(i): self.data[i] for i in self.data})

def _to_npz(self, path):
"""Helper function to use np.savez while converting keys into strings."""
if self.data:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,11 @@
from qibolab.pulses import PulseSequence
from qibolab.qubits import QubitId

from qibocal import update
from qibocal.auto.operation import Data, Parameters, Qubits, Results, Routine

SAMPLES_FACTOR = 16


@dataclass
class CalibrateStateDiscriminationParameters(Parameters):
Expand Down Expand Up @@ -46,7 +49,7 @@ class CalibrateStateDiscriminationResults(Results):
[
("i", np.float64),
("q", np.float64),
("msr", np.float64),
("signal", np.float64),
("phase", np.float64),
]
)
Expand Down Expand Up @@ -126,7 +129,7 @@ def _acquisition(
CalibrateStateDiscriminationType,
(qubit, i),
dict(
msr=result.magnitude,
signal=result.magnitude,
phase=result.phase,
i=result.voltage_i,
q=result.voltage_q,
Expand All @@ -145,9 +148,15 @@ def _fit(data: CalibrateStateDiscriminationData) -> CalibrateStateDiscrimination
traces = []
for i in range(2):
# This is due to a device limitation on the number of samples
# We want the number of samples to be a factor of 16
trace = (
data[qubit, i]["i"][: (len(data[qubit, i]["i"]) // 16) * 16]
+ 1j * data[qubit, i]["q"][: (len(data[qubit, i]["i"]) // 16) * 16]
data[qubit, i]["i"][
: (len(data[qubit, i]["i"]) // SAMPLES_FACTOR) * SAMPLES_FACTOR
]
+ 1j
* data[qubit, i]["q"][
: (len(data[qubit, i]["i"]) // SAMPLES_FACTOR) * SAMPLES_FACTOR
]
)
traces.append(trace)
"""
Expand Down Expand Up @@ -212,7 +221,7 @@ def _plot(
def _update(
results: CalibrateStateDiscriminationResults, platform: Platform, qubit: QubitId
):
pass
update.kernel(results, platform, qubit)


calibrate_state_discrimination = Routine(_acquisition, _fit, _plot, _update)
Expand Down
11 changes: 11 additions & 0 deletions src/qibocal/update.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
from qibolab.platform import Platform
from qibolab.qubits import QubitId, QubitPairId

from qibocal.protocols.characterization.signal_experiments.calibrate_state_discrimination import (
CalibrateStateDiscriminationResults,
)

CLASSIFICATION_PARAMS = [
"threshold",
"iq_angle",
Expand Down Expand Up @@ -218,3 +222,10 @@ def josephson_energy(Ej: float, platform: Platform, qubit: QubitId):

def coupling(g: float, platform: Platform, qubit: QubitId):
platform.qubits[qubit].g = float(g)


def kernel(
results: CalibrateStateDiscriminationResults, platform: Platform, qubit: QubitId
):
path = platform.qubits[qubit].kernel_path
results.to_npz(path=path)
15 changes: 15 additions & 0 deletions tests/test_update.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,23 @@
import random
import re

import numpy as np
import pytest
from qibolab import create_platform
from qibolab.native import VirtualZPulse
from qibolab.pulses import Drag

from qibocal import update
from qibocal.protocols.characterization.signal_experiments.calibrate_state_discrimination import (
CalibrateStateDiscriminationResults,
)

PLATFORM = create_platform("dummy")
QUBITS = list(PLATFORM.qubits.values())
PAIRS = list(PLATFORM.pairs)
RANDOM_FLOAT = random.random()
RANDOM_INT = random.randint(0, 10)
RANDOM_ARRAY = np.random.rand(10)


def generate_update_list(length):
Expand Down Expand Up @@ -162,3 +167,13 @@ def test_twpa_update(qubit):

assert qubit.twpa.local_oscillator.frequency == RANDOM_INT
assert qubit.twpa.local_oscillator.power == RANDOM_FLOAT


@pytest.mark.parametrize("qubit", QUBITS)
def test_kernel_update(qubit):
kernel = {qubit.name: RANDOM_ARRAY}
results = CalibrateStateDiscriminationResults(data=kernel)

update.kernel(results, PLATFORM, qubit.name)

assert (np.load(qubit.kernel_path)[str(qubit.name)] == RANDOM_ARRAY).all()

0 comments on commit 8b3bbb0

Please sign in to comment.