PRX_CustomWaveformsSX#

class iqm.pulse.gates.prx.PRX_CustomWaveformsSX(parent, name, locus, calibration_data, builder)#

Bases: PRX_SinglePulse_GateImplementation, CustomIQWaveforms

ABC for PRX gates implemented using SX gate, hot-swappable waveforms and phase manipulation.

The schedule used to implement the PRX gate depends on the arguments:
  1. If the rotation angle \(\theta = \pi/2\), the timebox will consist of just the SX IQ pulse, with phase.

  2. If not, the timebox will consist of two IQ pulses, with phase.

The formula for the PRX gate implemented using SX gates and z rotations is

\[R_\phi(\theta) = R_z(\phi-\pi/2) \: \text{SX} \: R_z(\pi-\theta) \: \text{SX} \: R_z(-\phi-\pi/2).\]

The fusing of z rotations to IQPulses is done inside the _call() method.

All parameters in the pulse here is referring to the state of the qubits.

Module: iqm.pulse.gates.prx

Attributes

dependent_waves

If set True, the Q channel waveform is considered to depend on the I channel's waveform so that they share the waveform parameters, (e.g. a DRAG PRX implementation).

root_parameters

Parameters independent of the of Waveforms.

wave_i

Waveform for the I channel.

wave_q

Waveform for the Q channel.

Methods

Parameters:
root_parameters: dict[str, Parameter | Setting] = {'amplitude_i': Parameter(name='', label='pi pulse I channel amplitude', unit='', data_type=<DataType.NUMBER: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None, _parent_name=None, _parent_label=None), 'amplitude_q': Parameter(name='', label='pi pulse Q channel amplitude', unit='', data_type=<DataType.NUMBER: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None, _parent_name=None, _parent_label=None), 'duration': Parameter(name='', label='pi pulse duration', unit='s', data_type=<DataType.NUMBER: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None, _parent_name=None, _parent_label=None), 'rz_after': Parameter(name='', label='RZ after IQ pulse', unit='rad', data_type=<DataType.NUMBER: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None, _parent_name=None, _parent_label=None), 'rz_before': Parameter(name='', label='RZ before IQ pulse', unit='rad', data_type=<DataType.NUMBER: 1>, collection_type=<CollectionType.SCALAR: 0>, element_indices=None, _parent_name=None, _parent_label=None)}#

Parameters independent of the of Waveforms. Inheriting classes may override this to include parameters common to all such implementations.

_call(angle, phase=0)#

Convert pulses into timebox, via extra Z rotations.

There are exceptions while using pi/2 and pi rotation in angle, for calibration reason. The duration of the timebox can be different.

Parameters:
Return type:

TimeBox

classmethod _get_pulse(*, amplitude_i, amplitude_q, n_samples, **rest_of_calibration_data)#

Builds a single sqrt(X) pulse from the calibration data.

Parameters:
  • amplitude_i (float) –

  • amplitude_q (float) –

  • n_samples (int) –

Return type:

IQPulse

dependent_waves: bool = True#

If set True, the Q channel waveform is considered to depend on the I channel’s waveform so that they share the waveform parameters, (e.g. a DRAG PRX implementation). If not provided, will be initialised as True.