Skip to content

Commit

Permalink
fix: Drop readout splitting for Qblox
Browse files Browse the repository at this point in the history
  • Loading branch information
alecandido committed Feb 7, 2025
1 parent daf2698 commit f297663
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 14 deletions.
8 changes: 5 additions & 3 deletions src/qibolab/_core/instruments/qblox/sequence/acquisition.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from collections.abc import Iterable

from qibolab._core import pulses
from qibolab._core.sequence import PulseSequence
from qibolab._core.pulses.pulse import PulseLike
from qibolab._core.serialize import Model

from .waveforms import Waveform
Expand All @@ -25,14 +27,14 @@ class AcquisitionSpec(Model):


def acquisitions(
sequence: PulseSequence, num_bins: int
sequence: Iterable[PulseLike], num_bins: int
) -> dict[MeasureId, AcquisitionSpec]:
return {
str(acq.id): AcquisitionSpec(
acquisition=Acquisition(num_bins=num_bins, index=i),
duration=int(acq.duration),
)
for i, acq in enumerate(
p for _, p in sequence if isinstance(p, pulses.Acquisition)
p for p in sequence if isinstance(p, pulses.Acquisition)
)
}
6 changes: 3 additions & 3 deletions src/qibolab/_core/instruments/qblox/sequence/program.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from collections.abc import Sequence
from collections.abc import Iterable, Sequence

from qibolab._core.execution_parameters import AveragingMode, ExecutionParameters
from qibolab._core.identifier import ChannelId
from qibolab._core.sequence import PulseSequence
from qibolab._core.pulses.pulse import PulseLike
from qibolab._core.sweeper import ParallelSweepers

from ..q1asm.ast_ import (
Expand Down Expand Up @@ -81,7 +81,7 @@ def finalization() -> list[Instruction]:


def program(
sequence: PulseSequence,
sequence: Iterable[PulseLike],
waveforms: WaveformIndices,
acquisitions: dict[MeasureId, AcquisitionSpec],
options: ExecutionParameters,
Expand Down
2 changes: 1 addition & 1 deletion src/qibolab/_core/instruments/qblox/sequence/sequence.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,5 +88,5 @@ def compile(
) -> dict[ChannelId, Q1Sequence]:
return {
ch: Q1Sequence.from_pulses(seq, sweepers, options, sampling_rate, ch)
for ch, seq in sequence.split_readouts.by_channel.items()
for ch, seq in sequence.by_channel.items()
}
6 changes: 2 additions & 4 deletions src/qibolab/_core/instruments/qblox/sequence/sweepers.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
PulseId,
PulseLike,
)
from qibolab._core.sequence import PulseSequence
from qibolab._core.serialize import Model
from qibolab._core.sweeper import ParallelSweepers, Parameter

Expand Down Expand Up @@ -200,7 +199,6 @@ def params_reshape(params: Params) -> IndexedParams:
Moreover, it reorganize them by loop, to group the updates.
"""

return {
key: _channels_pulses(pars) for key, pars in groupby(params, key=lambda t: t[0])
}
Expand All @@ -210,7 +208,7 @@ def params_reshape(params: Params) -> IndexedParams:
SweepSequence = list[ParameterizedPulse]


def sweep_sequence(sequence: PulseSequence, params: list[Param]) -> SweepSequence:
def sweep_sequence(sequence: Iterable[PulseLike], params: list[Param]) -> SweepSequence:
"""Wrap swept pulses with updates markers."""
parbyid = {p.pulse: p for p in params}
return [(p, parbyid.get(p.id)) for _, p in sequence]
return [(p, parbyid.get(p.id)) for p in sequence]
7 changes: 4 additions & 3 deletions src/qibolab/_core/instruments/qblox/sequence/waveforms.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from collections.abc import Iterable
from typing import Annotated, Union

from pydantic import AfterValidator

from qibolab._core.pulses import Pulse, Readout
from qibolab._core.sequence import PulseSequence
from qibolab._core.pulses.pulse import PulseLike
from qibolab._core.serialize import ArrayList, Model

__all__ = []
Expand All @@ -30,7 +31,7 @@ class WaveformSpec(Model):


def waveforms(
sequence: PulseSequence, sampling_rate: float
sequence: Iterable[PulseLike], sampling_rate: float
) -> dict[ComponentId, WaveformSpec]:
def waveform(pulse: Pulse, component: str) -> WaveformSpec:
return WaveformSpec(
Expand All @@ -48,7 +49,7 @@ def pulse_(event: Union[Pulse, Readout]) -> Pulse:
(pulse_uid(pulse_(event)), 0): waveform(pulse_(event), "i"),
(pulse_uid(pulse_(event)), 1): waveform(pulse_(event), "q"),
}
for _, event in sequence
for event in sequence
if isinstance(event, (Pulse, Readout))
)
for k, v in d.items()
Expand Down

0 comments on commit f297663

Please sign in to comment.