MOVE_CustomWaveforms#
- class iqm.pulse.gates.move.MOVE_CustomWaveforms(parent, name, locus, calibration_data, builder)#
Bases:
FluxPulseGate
Qubit-resonator MOVE gate using flux pulses on both components.
This class implements the extra phase bookkeeping logic required to make the MOVE gates work as intended. Due to the unknown phase in the MOVE gate definition, the MOVEs need to be applied in pairs, i.e. the resonator state is always moved back to the qubit it came from. Between this pair of MOVE gates you can apply any number of other two-component gates (CZs for example) between the resonator and other qubits. This sequence of gates acting on the resonator is called a MOVE sandwich. At the end of a sandwich we have to apply a local phase correction (z rotation) on the state that was moved back to the qubit.
The
__call__()
method of this class uses theMoveMarker
annotation instruction to mark the beginning and end of each MOVE sandwich, in order to enable the calculation of the angle of the z rotation to be applied on the moved qubit at the end of the sandwich to counteract the phase accumulation during the sandwich relative to the computational frame of the qubit. The phase accumulation has two sources:Phase due to the frequency detuning between the qubit and the resonator, proportional to the time duration the MOVE sandwich.
Phase due to the virtual z rotations applied on the resonator as gates are applied between it and another qubit, which need to be summed up. By convention the resonator VirtualRZ angle of the MOVE implementation itself is currently always zero (since only the sum of the resonator and qubit z rotation angles matters for MOVE), but we also include it in the sum for completeness.
The phases are calculated and applied on the qubits using
apply_move_gate_phase_corrections()
.Module:
iqm.pulse.gates.move
Attributes
Flux pulse Waveform to be played in the coupler flux AWG.
Required calibration data, may be nested
Flux pulse Waveform to be played in the qubit flux AWG.
Include the frequency difference between qubit and resonator in the gate parameters for phase tracking.
True iff the implementation is symmetric in its locus components.
Methods
- Parameters:
parent (QuantumOp) –
name (str) –
locus (Locus) –
calibration_data (OILCalibrationData) –
builder (ScheduleBuilder) –
- root_parameters: dict[str, Parameter | Setting] = {'detuning': Parameter(name='', label='Qubit - resonator detuning', unit='Hz', data_type=<DataType.NUMBER: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None, _parent_name=None, _parent_label=None), 'duration': Parameter(name='', label='Gate duration', unit='s', data_type=<DataType.NUMBER: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None, _parent_name=None, _parent_label=None), 'rz': {'*': Parameter(name='', label='Z rotation angle', unit='rad', data_type=<DataType.NUMBER: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None, _parent_name=None, _parent_label=None)}}#
Include the frequency difference between qubit and resonator in the gate parameters for phase tracking.
- _call()#
The GateImplementation-specific logic for implementing a quantum operation.
Inheriting classes may override this method if the default
__call__()
caching (based on the args & kwargs in the signature) is sufficient. Any additional caching may also be implemented inside this function if needed.- Return type:
- coupler_wave: type[Waveform] | None = None#
Flux pulse Waveform to be played in the coupler flux AWG.
- parameters: NestedParams = {'detuning': Parameter(name='', label='Qubit - resonator detuning', unit='Hz', data_type=<DataType.NUMBER: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None, _parent_name=None, _parent_label=None), 'duration': Parameter(name='', label='Gate duration', unit='s', data_type=<DataType.NUMBER: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None, _parent_name=None, _parent_label=None), 'rz': {'*': Parameter(name='', label='Z rotation angle', unit='rad', data_type=<DataType.NUMBER: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None, _parent_name=None, _parent_label=None)}}#
Required calibration data, may be nested