Skip to content

Commit

Permalink
get rid of ZhSweeper
Browse files Browse the repository at this point in the history
  • Loading branch information
hay-k committed Feb 16, 2024
1 parent bdf72db commit 2d57ccb
Showing 1 changed file with 25 additions and 45 deletions.
70 changes: 25 additions & 45 deletions src/qibolab/instruments/zhinst.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,23 +165,11 @@ def __init__(self, pulse):
"""Qibolab pulse."""
self.zhpulse = select_pulse(pulse, pulse.type.name.lower())
"""Zurich pulse."""
self.zhsweepers = []


class ZhSweeper:
"""Zurich sweeper from qibolab sweeper for pulse parameters Amplitude,
Duration, Frequency (and maybe Phase)"""

def __init__(self, pulse, sweeper, qubit):
p = ZhPulse(pulse)

self.pulse = p.pulse
"""Qibolab pulse associated to the sweeper."""

self.zhpulse = p.zhpulse
"""Zurich pulse associated to the sweeper."""

self.zhsweepers = [self.select_sweeper(pulse.type, sweeper, qubit)]
"""Zurich sweepers."""
def add_sweeper(self, sweeper, qubit):
"""Add sweeper to list of sweepers associated with this pulse."""
self.zhsweepers.append(self.select_sweeper(self.pulse.type, sweeper, qubit))

@staticmethod # pylint: disable=R0903
def select_sweeper(ptype, sweeper, qubit):
Expand Down Expand Up @@ -218,10 +206,6 @@ def select_sweeper(ptype, sweeper, qubit):
count=len(sweeper.values),
)

def add_sweeper(self, sweeper, qubit):
"""Add sweeper to list of sweepers."""
self.zhsweepers.append(self.select_sweeper(self.pulse.type, sweeper, qubit))


class ZhSweeperLine:
"""Zurich sweeper from qibolab sweeper for non pulse parameters Bias, Delay
Expand Down Expand Up @@ -651,17 +635,6 @@ def sequence_zh(self, sequence, qubits, couplers):
for element in aux_list:
if pulse == element.pulse:
if isinstance(aux_list[aux_list.index(element)], ZhPulse):
if isinstance(pulse, CouplerFluxPulse):
aux_list[aux_list.index(element)] = ZhSweeper(
pulse, sweeper, couplers[pulse.qubit]
)
else:
aux_list[aux_list.index(element)] = ZhSweeper(
pulse, sweeper, qubits[pulse.qubit]
)
elif isinstance(
aux_list[aux_list.index(element)], ZhSweeper
):
if isinstance(pulse, CouplerFluxPulse):
aux_list[aux_list.index(element)].add_sweeper(
sweeper, couplers[pulse.qubit]
Expand Down Expand Up @@ -856,10 +829,12 @@ def couplerflux(self, exp: lo.Experiment, couplers: Dict[str, Coupler]):
time = round(pulse.pulse.duration * NANO_TO_SECONDS, 9) + round(
pulse.pulse.start * NANO_TO_SECONDS, 9
)
if isinstance(pulse, ZhPulse):
exp.play(signal=channel_name, pulse=pulse.zhpulse)
else:
if isinstance(pulse, ZhSweeperLine):
self.play_sweep(exp, coupler, pulse, section="flux")
elif isinstance(pulse, ZhPulse) and pulse.zhsweepers:
self.play_sweep(exp, coupler, pulse, section="flux")
elif isinstance(pulse, ZhPulse):
exp.play(signal=channel_name, pulse=pulse.zhpulse)

previous_section = section_uid

Expand Down Expand Up @@ -889,10 +864,12 @@ def flux(self, exp: lo.Experiment, qubits: Dict[str, Qubit]):
time = round(
pulse.pulse.duration * NANO_TO_SECONDS, 9
) + round(pulse.pulse.start * NANO_TO_SECONDS, 9)
if isinstance(pulse, ZhPulse):
exp.play(signal=qubit.flux.name, pulse=pulse.zhpulse)
else:
if isinstance(pulse, ZhSweeperLine):
self.play_sweep(exp, qubit, pulse, section="flux")
elif isinstance(pulse, ZhPulse) and pulse.zhsweepers:
self.play_sweep(exp, qubit, pulse, section="flux")
elif isinstance(pulse, ZhPulse):
exp.play(signal=qubit.flux.name, pulse=pulse.zhpulse)
previous_section = section_uid

def drive(self, exp: lo.Experiment, qubits: Dict[str, Qubit]):
Expand Down Expand Up @@ -920,7 +897,10 @@ def drive(self, exp: lo.Experiment, qubits: Dict[str, Qubit]):
pulse.pulse.duration * NANO_TO_SECONDS, 9
) + round(pulse.pulse.start * NANO_TO_SECONDS, 9)
pulse.zhpulse.uid += f"{i}_{j}"
if isinstance(pulse, ZhSweeper):
if (
isinstance(pulse.zhsweepers, ZhPulse)
and pulse.zhsweepers
):
self.play_sweep(exp, qubit, pulse, section="drive")
elif isinstance(pulse, ZhPulse):
exp.play(
Expand Down Expand Up @@ -1179,7 +1159,7 @@ def sweep_recursion(self, qubits, couplers, exp, exp_calib, exp_options):
if sweeper.parameter is Parameter.frequency:
for pulse in sweeper.pulses:
line = "drive" if pulse.type is PulseType.DRIVE else "readout"
zhsweeper = ZhSweeper.select_sweeper(
zhsweeper = ZhPulse.select_sweeper(
pulse.type, sweeper, qubits[sweeper.pulses[0].qubit]
)
zhsweeper.uid = "frequency" # Changing the name from "frequency" breaks it f"frequency_{i}
Expand All @@ -1201,7 +1181,7 @@ def sweep_recursion(self, qubits, couplers, exp, exp_calib, exp_options):
aux_max = max(abs(sweeper.values))

sweeper.values /= aux_max
parameter = ZhSweeper.select_sweeper(
parameter = ZhPulse.select_sweeper(
pulse.type, sweeper, qubits[sweeper.pulses[0].qubit]
)
sweeper.values *= aux_max
Expand All @@ -1213,7 +1193,7 @@ def sweep_recursion(self, qubits, couplers, exp, exp_calib, exp_options):
parameter = ZhSweeperLine.select_sweeper(sweeper)

elif parameter is None:
parameter = ZhSweeper.select_sweeper(
parameter = ZhPulse.select_sweeper(
sweeper.pulses[0].type, sweeper, qubits[sweeper.pulses[0].qubit]
)

Expand Down Expand Up @@ -1302,9 +1282,9 @@ def sweep_recursion_nt(
aux_max = max(abs(sweeper.values))

sweeper.values /= aux_max
zhsweeper = ZhSweeper(
zhsweeper = ZhPulse.select_sweeper(
pulse, sweeper, qubits[sweeper.pulses[0].qubit]
).zhsweeper
)
sweeper.values *= aux_max

zhsweeper.uid = "amplitude"
Expand All @@ -1317,9 +1297,9 @@ def sweep_recursion_nt(
)

elif parameter is None:
parameter = ZhSweeper(
parameter = ZhPulse.select_sweeper(
sweeper.pulses[0], sweeper, qubits[sweeper.pulses[0].qubit]
).zhsweeper
)
device_path = f"/{path}/qachannels/*/oscs/0/gain" # Hardcoded SHFQA device

with exp.sweep(
Expand Down

0 comments on commit 2d57ccb

Please sign in to comment.