From 82ec248a42c5210faa58cf5309d9874a1a97e364 Mon Sep 17 00:00:00 2001 From: Alessandro Candido Date: Wed, 11 Dec 2024 13:56:12 +0100 Subject: [PATCH] fix: Start designing sweepers implementation --- .../_core/instruments/qblox/program.py | 41 ++++++++++++++++--- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/src/qibolab/_core/instruments/qblox/program.py b/src/qibolab/_core/instruments/qblox/program.py index 6426dfbca..ab8f8aca3 100644 --- a/src/qibolab/_core/instruments/qblox/program.py +++ b/src/qibolab/_core/instruments/qblox/program.py @@ -3,7 +3,7 @@ from qibolab._core.execution_parameters import AveragingMode, ExecutionParameters from qibolab._core.pulses.pulse import Delay, Pulse, PulseLike, VirtualZ from qibolab._core.sequence import PulseSequence -from qibolab._core.sweeper import ParallelSweepers +from qibolab._core.sweeper import ParallelSweepers, Parameter from .ast_ import ( Instruction, @@ -15,6 +15,10 @@ Program, Reference, Register, + SetAwgGain, + SetAwgOffs, + SetFreq, + SetPhDelta, Stop, Wait, WaitSync, @@ -49,6 +53,27 @@ def execution( ] +SWEEPERS = { + Parameter.frequency: lambda v, o: ([SetFreq(value=v)], [SetFreq(value=o)]), + Parameter.amplitude: lambda v, o: ( + [SetAwgGain(value_0=v, value_1=v)], + [SetAwgGain(value_0=o, value_1=o)], + ), + Parameter.relative_phase: lambda v, o: ( + [SetPhDelta(value=v)], + [SetPhDelta(value=-v)], + ), + Parameter.offset: lambda v, o: ( + [SetAwgOffs(value_0=v, value_1=v)], + [SetAwgOffs(value_0=o, value_1=o)], + ), +} + + +def parameters_update(sweepers: ParallelSweepers) -> list[Instruction]: + return [Nop()] + + def loop( sweepers: list, experiment: list[Line], relaxation_time: int, outer_shots: bool ): @@ -103,11 +128,15 @@ def play( ) ] if isinstance(pulse, Pulse) - else [Line.instr(Wait(duration=int(pulse.duration * sampling_rate)))] - if isinstance(pulse, Delay) - else [Line.instr(SetPhDelta(value=int(pulse.phase * PHASE_FACTOR)))] - if isinstance(pulse, VirtualZ) - else [] + else ( + [Line.instr(Wait(duration=int(pulse.duration * sampling_rate)))] + if isinstance(pulse, Delay) + else ( + [Line.instr(SetPhDelta(value=int(pulse.phase * PHASE_FACTOR)))] + if isinstance(pulse, VirtualZ) + else [] + ) + ) )