pulse_library#
Standard pulse-level operations for use with the quantify_scheduler.
Module Contents#
Classes#
Dataclass defining a reference level for pulse amplitudes in units of 'V', 'dBm', or 'A'. |
|
Operation that shifts the phase of a clock by a specified amount. |
|
An operation that resets the phase of a clock. |
|
Operation that sets updates the frequency of a clock. |
|
Operation that represents setting a constant offset to the output voltage. |
|
The IdlePulse Operation is a placeholder for a specified duration of time. |
|
RampPulse Operation is a pulse that ramps from zero to a set amplitude over its duration. |
|
A real valued staircase pulse, which reaches it's final amplitude in discrete steps. |
|
Digital pulse that is HIGH for the specified duration. |
|
A real-valued pulse with the specified amplitude during the pulse. |
|
A pulse that can be used to implement a conditional phase gate in transmon device elements. |
|
A real valued square pulse convolved with a Hann window for smoothing. |
|
A linear chirp signal. A sinusoidal signal that ramps up in frequency. |
|
A Gaussian pulse with a derivative component added to the out-of-phase channel. |
|
The GaussPulse Operation is a real-valued pulse with the specified |
|
The WindowOperation is an operation for visualization purposes. |
|
A pulse where the shape is determined by specifying an array of (complex) points. |
|
Hermite pulse intended for single qubit gates in diamond based systems. |
|
Operation that marks a time reference for timetags. |
Functions#
|
Generates a list of square pulses equivalent to a (very) long square pulse. |
|
Calculates a SquarePulse to counteract charging effects based on a list of pulses. |
- class ReferenceMagnitude[source]#
Dataclass defining a reference level for pulse amplitudes in units of ‘V’, ‘dBm’, or ‘A’.
- classmethod from_parameter(parameter: qcodes.InstrumentChannel) ReferenceMagnitude | None[source]#
Initialize from ReferenceMagnitude QCoDeS InstrumentChannel values.
- class ShiftClockPhase(phase_shift: float, clock: str, t0: float = 0)[source]#
Bases:
quantify_scheduler.operations.operation.OperationOperation that shifts the phase of a clock by a specified amount.
This is a low-level operation and therefore depends on the backend.
Currently only implemented for Qblox backend, refer to
NcoPhaseShiftStrategyfor more details.- Parameters:
phase_shift – The phase shift in degrees.
clock – The clock of which to shift the phase.
t0 – Time in seconds when to execute the command relative to the start time of the Operation in the Schedule.
duration – (deprecated) The duration of the operation in seconds.
- class ResetClockPhase(clock: str, t0: float = 0)[source]#
Bases:
quantify_scheduler.operations.operation.OperationAn operation that resets the phase of a clock.
- Parameters:
clock – The clock of which to reset the phase.
- class SetClockFrequency(clock: str, clock_freq_new: float | None, t0: float = 0)[source]#
Bases:
quantify_scheduler.operations.operation.OperationOperation that sets updates the frequency of a clock.
This is a low-level operation and therefore depends on the backend.
Currently only implemented for Qblox backend, refer to
NcoSetClockFrequencyStrategyfor more details.- Parameters:
clock – The clock for which a new frequency is to be set.
clock_freq_new – The new frequency in Hz. If None, it will reset to the clock frequency set by the configuration or resource.
t0 – Time in seconds when to execute the command relative to the start time of the Operation in the Schedule.
duration – (deprecated) The duration of the operation in seconds.
- class VoltageOffset(offset_path_I: float, offset_path_Q: float, port: str, clock: str = BasebandClockResource.IDENTITY, t0: float = 0, reference_magnitude: ReferenceMagnitude | None = None)[source]#
Bases:
quantify_scheduler.operations.operation.OperationOperation that represents setting a constant offset to the output voltage.
Please refer to Voltage offsets in the reference guide for more details.
- Parameters:
offset_path_I (float) – Offset of path I.
offset_path_Q (float) – Offset of path Q.
port (str) – Port of the voltage offset.
clock (str, optional) – Clock used to modulate the voltage offset. By default the baseband clock.
duration (float, optional) – (deprecated) The time to hold the offset for (in seconds).
t0 (float, optional) – Time in seconds when to start the pulses relative to the start time of the Operation in the Schedule.
reference_magnitude – Scaling value and unit for the unitless amplitude. Uses settings in hardware config if not provided.
- class IdlePulse(duration: float)[source]#
Bases:
quantify_scheduler.operations.operation.OperationThe IdlePulse Operation is a placeholder for a specified duration of time.
- Parameters:
duration – The duration of idle time in seconds.
- class RampPulse(amp: float, duration: float, port: str, clock: str = BasebandClockResource.IDENTITY, reference_magnitude: ReferenceMagnitude | None = None, offset: float = 0, t0: float = 0)[source]#
Bases:
quantify_scheduler.operations.operation.OperationRampPulse Operation is a pulse that ramps from zero to a set amplitude over its duration.
The pulse is given as a function of time \(t\) and the parameters offset and amplitude by
\[P(t) = \mathrm{offset} + t \times \mathrm{amp}.\]- Parameters:
amp – Unitless amplitude of the ramp envelope function.
duration – The pulse duration in seconds.
offset – Starting point of the ramp pulse
port – Port of the pulse.
clock – Clock used to modulate the pulse. By default the baseband clock.
reference_magnitude – Scaling value and unit for the unitless amplitude. Uses settings in hardware config if not provided.
t0 – Time in seconds when to start the pulses relative to the start time of the Operation in the Schedule.
- class StaircasePulse(start_amp: float, final_amp: float, num_steps: int, duration: float, port: str, clock: str = BasebandClockResource.IDENTITY, reference_magnitude: ReferenceMagnitude | None = None, t0: float = 0)[source]#
Bases:
quantify_scheduler.operations.operation.OperationA real valued staircase pulse, which reaches it’s final amplitude in discrete steps.
In between it will maintain a plateau.
- Parameters:
start_amp – Starting unitless amplitude of the staircase envelope function.
final_amp – Final unitless amplitude of the staircase envelope function.
num_steps – The number of plateaus.
duration – Duration of the pulse in seconds.
port – Port of the pulse.
clock – Clock used to modulate the pulse. By default the baseband clock.
reference_magnitude – Scaling value and unit for the unitless amplitude. Uses settings in hardware config if not provided.
t0 – Time in seconds when to start the pulses relative to the start time of the Operation in the Schedule.
- class MarkerPulse(duration: float, port: str, t0: float = 0, clock: str = DigitalClockResource.IDENTITY, fine_start_delay: float = 0, fine_end_delay: float = 0)[source]#
Bases:
quantify_scheduler.operations.operation.OperationDigital pulse that is HIGH for the specified duration.
Marker pulse is played on marker output. Currently only implemented for Qblox backend.
- Parameters:
duration – Duration of the HIGH signal.
port – Name of the associated port.
t0 – Time in seconds when to start the pulses relative to the start time of the Operation in the Schedule.
clock – Name of the associated clock. By default
DigitalClockResource. This only needs to be specified if a custom clock name is used for a digital channel (for example, when a port-clock combination of a device element is used with a digital channel).fine_start_delay – Delays the start of the pulse by the given amount in seconds. Does not delay the start time of the operation in the schedule. If the hardware supports it, this parameter can be used to shift the pulse by a small amount of time, independent of the hardware instruction timing grid. Currently only implemented for Qblox QTM modules, which allow only positive values for this parameter. By default 0.
fine_end_delay – Delays the end of the pulse by the given amount in seconds. Does not delay the end time of the operation in the schedule. If the hardware supports it, this parameter can be used to shift the pulse by a small amount of time, independent of the hardware instruction timing grid. Currently only implemented for Qblox QTM modules, which allow only positive values for this parameter. By default 0.
- class SquarePulse(amp: complex, duration: float, port: str, clock: str = BasebandClockResource.IDENTITY, reference_magnitude: ReferenceMagnitude | None = None, t0: float = 0)[source]#
Bases:
quantify_scheduler.operations.operation.OperationA real-valued pulse with the specified amplitude during the pulse.
- Parameters:
amp – Unitless complex valued amplitude of the envelope.
duration – The pulse duration in seconds.
port – Port of the pulse, must be capable of playing a complex waveform.
clock – Clock used to modulate the pulse. By default the baseband clock.
reference_magnitude – Scaling value and unit for the unitless amplitude. Uses settings in hardware config if not provided.
t0 – Time in seconds when to start the pulses relative to the start time of the Operation in the Schedule.
- class SuddenNetZeroPulse(amp_A: float, amp_B: float, net_zero_A_scale: float, t_pulse: float, t_phi: float, t_integral_correction: float, port: str, clock: str = BasebandClockResource.IDENTITY, reference_magnitude: ReferenceMagnitude | None = None, t0: float = 0)[source]#
Bases:
quantify_scheduler.operations.operation.OperationA pulse that can be used to implement a conditional phase gate in transmon device elements.
The sudden net-zero (SNZ) pulse is defined in Negîrneac et al. [NAM+21].
- Parameters:
amp_A – Unitless amplitude of the main square pulse.
amp_B – Unitless scaling correction for the final sample of the first square and first sample of the second square pulse.
net_zero_A_scale – Amplitude scaling correction factor of the negative arm of the net-zero pulse.
t_pulse – The total duration of the two half square pulses
t_phi – The idling duration between the two half pulses
t_integral_correction – The duration in which any non-zero pulse amplitude needs to be corrected.
port – Port of the pulse, must be capable of playing a complex waveform.
clock – Clock used to modulate the pulse. By default the baseband clock.
reference_magnitude – Scaling value and unit for the unitless amplitude. Uses settings in hardware config if not provided.
t0 – Time in seconds when to start the pulses relative to the start time of the Operation in the Schedule.
- decompose_long_square_pulse(duration: float, duration_max: float, single_duration: bool = False, **kwargs) list[source]#
Generates a list of square pulses equivalent to a (very) long square pulse.
Intended to be used for waveform-memory-limited devices. Effectively, only two square pulses, at most, will be needed: a main one of duration
duration_maxand a second one for potential mismatch between Nduration_maxand overall duration.- Parameters:
duration – Duration of the long pulse in seconds.
duration_max – Maximum duration of square pulses to be generated in seconds.
single_duration – If
True, only square pulses of durationduration_maxwill be generated. IfFalse, a square pulse ofduration<duration_maxmight be generated if necessary.**kwargs – Other keyword arguments to be passed to the
SquarePulse.
- Returns:
: A list of :class`SquarePulse` s equivalent to the desired long pulse.
- class SoftSquarePulse(amp: float, duration: float, port: str, clock: str = BasebandClockResource.IDENTITY, reference_magnitude: ReferenceMagnitude | None = None, t0: float = 0)[source]#
Bases:
quantify_scheduler.operations.operation.OperationA real valued square pulse convolved with a Hann window for smoothing.
- Parameters:
amp – Unitless amplitude of the envelope.
duration – The pulse duration in seconds.
port – Port of the pulse, must be capable of playing a complex waveform.
clock – Clock used to modulate the pulse. By default the baseband clock.
reference_magnitude – Scaling value and unit for the unitless amplitude. Uses settings in hardware config if not provided.
t0 – Time in seconds when to start the pulses relative to the start time of the Operation in the Schedule.
- class ChirpPulse(amp: float, duration: float, port: str, clock: str, start_freq: float, end_freq: float, reference_magnitude: ReferenceMagnitude | None = None, t0: float = 0)[source]#
Bases:
quantify_scheduler.operations.operation.OperationA linear chirp signal. A sinusoidal signal that ramps up in frequency.
- Parameters:
amp – Unitless amplitude of the envelope.
duration – Duration of the pulse.
port – The port of the pulse.
clock – Clock used to modulate the pulse.
start_freq – Start frequency of the Chirp. Note that this is the frequency at which the waveform is calculated, this may differ from the clock frequency.
end_freq – End frequency of the Chirp.
reference_magnitude – Scaling value and unit for the unitless amplitude. Uses settings in hardware config if not provided.
t0 – Shift of the start time with respect to the start of the operation.
- class DRAGPulse(G_amp: float, D_amp: float, phase: float, duration: float, port: str, clock: str, reference_magnitude: ReferenceMagnitude | None = None, sigma: float | None = None, t0: float = 0)[source]#
Bases:
quantify_scheduler.operations.operation.OperationA Gaussian pulse with a derivative component added to the out-of-phase channel. It uses the specified amplitude and sigma. If sigma is not specified it is set to 1/4 of the duration.
The DRAG pulse is intended for single qubit gates in transmon based systems. It can be calibrated to reduce unwanted excitations of the \(|1\rangle - |2\rangle\) transition (Motzoi et al. [MGRW09] and Gambetta et al. [GMMW11]).
The waveform is generated using
waveforms.drag().- Parameters:
G_amp – Unitless amplitude of the Gaussian envelope.
D_amp – Unitless amplitude of the derivative component, the DRAG-pulse parameter.
duration – The pulse duration in seconds.
phase – Phase of the pulse in degrees.
clock – Clock used to modulate the pulse.
port – Port of the pulse, must be capable of carrying a complex waveform.
reference_magnitude – Scaling value and unit for the unitless amplitude. Uses settings in hardware config if not provided.
sigma – Width of the Gaussian envelope in seconds. If not provided, the sigma is set to 1/4 of the duration.
t0 – Time in seconds when to start the pulses relative to the start time of the Operation in the Schedule.
- class GaussPulse(G_amp: float, phase: float, duration: float, port: str, clock: str = BasebandClockResource.IDENTITY, reference_magnitude: ReferenceMagnitude | None = None, sigma: float | None = None, t0: float = 0)[source]#
Bases:
quantify_scheduler.operations.operation.OperationThe GaussPulse Operation is a real-valued pulse with the specified amplitude and sigma. If sigma is not specified it is set to 1/4 of the duration.
The waveform is generated using
waveforms.drag()with a D_amp set to zero, corresponding to a Gaussian pulse.- Parameters:
G_amp – Unitless amplitude of the Gaussian envelope.
duration – The pulse duration in seconds.
phase – Phase of the pulse in degrees.
clock – Clock used to modulate the pulse. By default the baseband clock.
port – Port of the pulse, must be capable of carrying a complex waveform.
reference_magnitude – Scaling value and unit for the unitless amplitude. Uses settings in hardware config if not provided.
sigma – Width of the Gaussian envelope in seconds. If not provided, the sigma is set to 1/4 of the duration.
t0 – Time in seconds when to start the pulses relative to the start time of the Operation in the Schedule.
- create_dc_compensation_pulse(pulses: list[quantify_scheduler.operations.operation.Operation], sampling_rate: float, port: str, t0: float = 0, amp: float | None = None, reference_magnitude: ReferenceMagnitude | None = None, duration: float | None = None) SquarePulse[source]#
Calculates a SquarePulse to counteract charging effects based on a list of pulses.
The compensation is calculated by summing the area of all pulses on the specified port. This gives a first order approximation for the pulse required to compensate the charging. All modulated pulses ignored in the calculation.
- Parameters:
pulses – List of pulses to compensate
sampling_rate – Resolution to calculate the enclosure of the pulses to calculate the area to compensate.
amp – Desired unitless amplitude of the DC compensation SquarePulse. Leave to None to calculate the value for compensation, in this case you must assign a value to duration. The sign of the amplitude is ignored and adjusted automatically to perform the compensation.
duration – Desired pulse duration in seconds. Leave to None to calculate the value for compensation, in this case you must assign a value to amp. The sign of the value of amp given in the previous step is adjusted to perform the compensation.
port – Port to perform the compensation. Any pulse that does not belong to the specified port is ignored.
clock – Clock used to modulate the pulse.
reference_magnitude – Scaling value and unit for the unitless amplitude. Uses settings in hardware config if not provided.
phase – Phase of the pulse in degrees.
t0 – Time in seconds when to start the pulses relative to the start time of the Operation in the Schedule.
- Returns:
: Returns a SquarePulse object that compensates all pulses passed as argument.
- class WindowOperation(window_name: str, duration: float, t0: float = 0.0)[source]#
Bases:
quantify_scheduler.operations.operation.OperationThe WindowOperation is an operation for visualization purposes.
The
WindowOperationhas a starting time and duration.
- class NumericalPulse(samples: numpy.ndarray | list, t_samples: numpy.ndarray | list, port: str, clock: str = BasebandClockResource.IDENTITY, reference_magnitude: ReferenceMagnitude | None = None, t0: float = 0, interpolation: str = 'linear')[source]#
Bases:
quantify_scheduler.operations.operation.OperationA pulse where the shape is determined by specifying an array of (complex) points.
If points are required between the specified samples (such as could be required by the sampling rate of the hardware), meaning \(t[n] < t' < t[n+1]\), scipy.interpolate.interp1d will be used to interpolate between the two points and determine the value.
- Parameters:
samples – An array of (possibly complex) values specifying the shape of the pulse.
t_samples – An array of values specifying the corresponding times at which the
samplesare evaluated.port – The port that the pulse should be played on.
clock – Clock used to (de)modulate the pulse. By default the baseband clock.
reference_magnitude – Scaling value and unit for the unitless samples. Uses settings in hardware config if not provided.
t0 – Time in seconds when to start the pulses relative to the start time of the Operation in the Schedule.
interpolation – Specifies the type of interpolation used. This is passed as the “kind” argument to scipy.interpolate.interp1d.
- class SkewedHermitePulse(duration: float, amplitude: float, skewness: float, phase: float, port: str, clock: str, reference_magnitude: ReferenceMagnitude | None = None, t0: float = 0)[source]#
Bases:
quantify_scheduler.operations.operation.OperationHermite pulse intended for single qubit gates in diamond based systems.
The waveform is generated using
skewed_hermite().- Parameters:
duration – The pulse duration in seconds.
amplitude – Unitless amplitude of the hermite pulse.
skewness – Skewness in the frequency space.
phase – Phase of the pulse in degrees.
clock – Clock used to modulate the pulse.
port – Port of the pulse, must be capable of carrying a complex waveform.
reference_magnitude – Scaling value and unit for the unitless amplitude. Uses settings in hardware config if not provided.
t0 – Time in seconds when to start the pulses relative to the start time of the Operation in the Schedule. By default 0.
- class Timestamp(port: str, t0: float = 0, clock: str = DigitalClockResource.IDENTITY)[source]#
Bases:
quantify_scheduler.operations.operation.OperationOperation that marks a time reference for timetags.
Specifically, all timetags in
TimetagandTimetagTraceare measured relative to the timing of this operation, if they have a matching port and clock, and iftime_ref=TimeRef.TIMESTAMPis given as an argument.- Parameters:
port – The same port that the timetag acquisition is defined on.
clock – The same clock that the timetag acquisition is defined on.
t0 – Time offset (in seconds) of this Operation, relative to the start time in the Schedule. By default 0.