Source code for qibolab.execution_parameters
from dataclasses import dataclass
from enum import Enum, auto
from typing import Optional
from qibolab.result import (
AveragedIntegratedResults,
AveragedRawWaveformResults,
AveragedSampleResults,
IntegratedResults,
RawWaveformResults,
SampleResults,
)
[docs]class AcquisitionType(Enum):
"""Data acquisition from hardware."""
DISCRIMINATION = auto()
"""Demodulate, integrate the waveform and discriminate among states based
on the voltages."""
INTEGRATION = auto()
"""Demodulate and integrate the waveform."""
RAW = auto()
"""Acquire the waveform as it is."""
SPECTROSCOPY = auto()
"""Zurich Integration mode for RO frequency sweeps."""
[docs]class AveragingMode(Enum):
"""Data averaging modes from hardware."""
CYCLIC = auto()
"""Better averaging for short timescale noise."""
SINGLESHOT = auto()
"""SINGLESHOT: No averaging."""
SEQUENTIAL = auto()
"""SEQUENTIAL: Worse averaging for noise[Avoid]"""
RESULTS_TYPE = {
AveragingMode.CYCLIC: {
AcquisitionType.INTEGRATION: AveragedIntegratedResults,
AcquisitionType.RAW: AveragedRawWaveformResults,
AcquisitionType.DISCRIMINATION: AveragedSampleResults,
},
AveragingMode.SINGLESHOT: {
AcquisitionType.INTEGRATION: IntegratedResults,
AcquisitionType.RAW: RawWaveformResults,
AcquisitionType.DISCRIMINATION: SampleResults,
},
}
[docs]@dataclass(frozen=True)
class ExecutionParameters:
"""Data structure to deal with execution parameters."""
nshots: Optional[int] = None
"""Number of shots to sample from the experiment.
Default is the runcard value.
"""
relaxation_time: Optional[int] = None
"""Time to wait for the qubit to relax to its ground Sample between shots
in ns.
Default is the runcard value.
"""
fast_reset: bool = False
"""Enable or disable fast reset."""
acquisition_type: AcquisitionType = AcquisitionType.DISCRIMINATION
"""Data acquisition type."""
averaging_mode: AveragingMode = AveragingMode.SINGLESHOT
"""Data averaging mode."""
@property
def results_type(self):
"""Returns corresponding results class."""
return RESULTS_TYPE[self.averaging_mode][self.acquisition_type]