gate_library#
Standard gateset for use with the quantify_scheduler.
Module Contents#
Classes#
| A single qubit rotation around an axis in the equator of the Bloch sphere. | |
| A single qubit rotation of 180 degrees around the X-axis. | |
| A single qubit rotation of 90 degrees around the X-axis. | |
| A single qubit rotation of 180 degrees around the Y-axis. | |
| A single qubit rotation of 90 degrees around the Y-axis. | |
| A single qubit rotation about the Z-axis of the Bloch sphere. | |
| A single qubit rotation of 180 degrees around the Z-axis. | |
| A single qubit rotation of 90 degrees around the Z-axis. | |
| A single qubit Hadamard gate. | |
| Conditional-NOT gate, a common entangling gate. | |
| Conditional-phase gate, a common entangling gate. | |
| Reset a qubit to the \(|0\rangle\) state. | |
| A projective measurement in the Z-basis. | 
Functions#
| 
 | Maps an input angle  | 
- class Rxy(theta: float, phi: float, qubit: str, **device_overrides)[source]#
- Bases: - quantify_scheduler.operations.operation.Operation- A single qubit rotation around an axis in the equator of the Bloch sphere. - This operation can be represented by the following unitary as defined in https://doi.org/10.1109/TQE.2020.2965810: \[\begin{split}\mathsf {R}_{xy} \left(\theta, \varphi\right) = \begin{bmatrix} \textrm {cos}(\theta /2) & -ie^{-i\varphi }\textrm {sin}(\theta /2) \\ -ie^{i\varphi }\textrm {sin}(\theta /2) & \textrm {cos}(\theta /2) \end{bmatrix}\end{split}\]- Parameters:
- theta – Rotation angle in degrees, will be casted to the [-180, 180) domain. 
- phi – Phase of the rotation axis, will be casted to the [0, 360) domain. 
- qubit – The target device element. 
- device_overrides – Device level parameters that override device configuration values when compiling from circuit to device level. 
 
 
- class X(qubit: str, **device_overrides)[source]#
- Bases: - Rxy- A single qubit rotation of 180 degrees around the X-axis. - This operation can be represented by the following unitary: \[\begin{split}X180 = R_{X180} = \begin{bmatrix} 0 & -i \\ -i & 0 \\ \end{bmatrix}\end{split}\]- Parameters:
- qubit – The target device element. 
- device_overrides – Device level parameters that override device configuration values when compiling from circuit to device level. 
 
 
- class X90(qubit: str, **device_overrides)[source]#
- Bases: - Rxy- A single qubit rotation of 90 degrees around the X-axis. - It is identical to the Rxy gate with theta=90 and phi=0 - Defined by the unitary: \[\begin{split}X90 = R_{X90} = \frac{1}{\sqrt{2}}\begin{bmatrix} 1 & -i \\ -i & 1 \\ \end{bmatrix}\end{split}\]- Parameters:
- qubit – The target device element. 
- device_overrides – Device level parameters that override device configuration values when compiling from circuit to device level. 
 
 
- class Y(qubit: str, **device_overrides)[source]#
- Bases: - Rxy- A single qubit rotation of 180 degrees around the Y-axis. - It is identical to the Rxy gate with theta=180 and phi=90 - Defined by the unitary: \[\begin{split}Y180 = R_{Y180} = \begin{bmatrix} 0 & -1 \\ 1 & 0 \\ \end{bmatrix}\end{split}\]- Parameters:
- qubit – The target device element. 
- device_overrides – Device level parameters that override device configuration values when compiling from circuit to device level. 
 
 
- class Y90(qubit: str, **device_overrides)[source]#
- Bases: - Rxy- A single qubit rotation of 90 degrees around the Y-axis. - It is identical to the Rxy gate with theta=90 and phi=90 - Defined by the unitary: \[\begin{split}Y90 = R_{Y90} = \frac{1}{\sqrt{2}}\begin{bmatrix} 1 & -1 \\ 1 & 1 \\ \end{bmatrix}\end{split}\]- Parameters:
- qubit – The target device element. 
- device_overrides – Device level parameters that override device configuration values when compiling from circuit to device level. 
 
 
- class Rz(theta: float, qubit: str, **device_overrides)[source]#
- Bases: - quantify_scheduler.operations.operation.Operation- A single qubit rotation about the Z-axis of the Bloch sphere. - This operation can be represented by the following unitary as defined in https://www.quantum-inspire.com/kbase/rz-gate/: \[\begin{split}\mathsf {R}_{z} \left(\theta\right) = \begin{bmatrix} e^{-i\theta/2} & 0 \\ 0 & e^{i\theta/2} \end{bmatrix}\end{split}\]- Parameters:
- theta – Rotation angle in degrees, will be cast to the [-180, 180) domain. 
- qubit – The target device element. 
- device_overrides – Device level parameters that override device configuration values when compiling from circuit to device level. 
 
 
- class Z(qubit: str, **device_overrides)[source]#
- Bases: - Rz- A single qubit rotation of 180 degrees around the Z-axis. - Note that the gate implements \(R_z(\pi) = -iZ\), adding a global phase of \(-\pi/2\). This operation can be represented by the following unitary: \[\begin{split}Z180 = R_{Z180} = -iZ = e^{-\frac{\pi}{2}}Z = \begin{bmatrix} -i & 0 \\ 0 & i \\ \end{bmatrix}\end{split}\]- Parameters:
- qubit – The target device element. 
- device_overrides – Device level parameters that override device configuration values when compiling from circuit to device level. 
 
 
- class Z90(qubit: str, **device_overrides)[source]#
- Bases: - Rz- A single qubit rotation of 90 degrees around the Z-axis. - This operation can be represented by the following unitary: \[\begin{split}Z90 = R_{Z90} = e^{-\frac{\pi/2}{2}}S = e^{-\frac{\pi/2}{2}}\sqrt{Z} = \frac{1}{\sqrt{2}}\begin{bmatrix} 1-i & 0 \\ 0 & 1+i \\ \end{bmatrix}\end{split}\]- Parameters:
- qubit – The target device element. 
- device_overrides – Device level parameters that override device configuration values when compiling from circuit to device level. 
 
 
- class H(*qubits: str, **device_overrides)[source]#
- Bases: - quantify_scheduler.operations.operation.Operation- A single qubit Hadamard gate. - Note that the gate uses \(R_z(\pi) = -iZ\), adding a global phase of \(-\pi/2\). This operation can be represented by the following unitary: \[\begin{split}H = Y90 \cdot Z = \frac{-i}{\sqrt{2}}\begin{bmatrix} 1 & 1 \\ 1 & -1 \\ \end{bmatrix}\end{split}\]- Parameters:
- qubit – The target device element. 
- device_overrides – Device level parameters that override device configuration values when compiling from circuit to device level. 
 
 
- class CNOT(qC: str, qT: str, **device_overrides)[source]#
- Bases: - quantify_scheduler.operations.operation.Operation- Conditional-NOT gate, a common entangling gate. - Performs an X gate on the target qubit qT conditional on the state of the control qubit qC. - This operation can be represented by the following unitary: \[\begin{split}\mathrm{CNOT} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ \end{bmatrix}\end{split}\]- Parameters:
- qC – The control device element. 
- qT – The target device element 
- device_overrides – Device level parameters that override device configuration values when compiling from circuit to device level. 
 
 
- class CZ(qC: str, qT: str, **device_overrides)[source]#
- Bases: - quantify_scheduler.operations.operation.Operation- Conditional-phase gate, a common entangling gate. - Performs a Z gate on the target device element qT conditional on the state of the control device element qC. - This operation can be represented by the following unitary: \[\begin{split}\mathrm{CZ} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & -1 \\ \end{bmatrix}\end{split}\]- Parameters:
- qC – The control device element. 
- qT – The target device element 
- device_overrides – Device level parameters that override device configuration values when compiling from circuit to device level. 
 
 
- class Reset(*qubits: str, **device_overrides)[source]#
- Bases: - quantify_scheduler.operations.operation.Operation- Reset a qubit to the \(|0\rangle\) state. - The Reset gate is an idle operation that is used to initialize one or more qubits. - Note - Strictly speaking this is not a gate as it can not be described by a unitary. - Examples - The operation can be used in several ways: - from quantify_scheduler.operations.gate_library import Reset reset_1 = Reset("q0") reset_2 = Reset("q1", "q2") reset_3 = Reset(*[f"q{i}" for i in range(3, 6)]) - Parameters:
- qubits – The device element(s) to reset. NB one or more device element can be specified, e.g., - Reset("q0"),- Reset("q0", "q1", "q2"), etc..
- device_overrides – Device level parameters that override device configuration values when compiling from circuit to device level. 
 
 
- class Measure(*qubits: str, acq_channel: Hashable | None = None, acq_index: tuple[int, Ellipsis] | int | None = None, acq_protocol: Literal['SSBIntegrationComplex', 'Timetag', 'TimetagTrace', 'Trace', 'TriggerCount', 'ThresholdedTriggerCount', 'NumericalSeparatedWeightedIntegration', 'NumericalWeightedIntegration', 'ThresholdedAcquisition'] | None = None, bin_mode: quantify_scheduler.enums.BinMode | str | None = None, feedback_trigger_label: str | None = None, **device_overrides)[source]#
- Bases: - quantify_scheduler.operations.operation.Operation- A projective measurement in the Z-basis. - The measurement is compiled according to the type of acquisition specified in the device configuration. - Note - Strictly speaking this is not a gate as it can not be described by a unitary. - Parameters:
- qubits – The device elements you want to measure. 
- acq_channel – Only for special use cases. By default (if None): the acquisition channel specified in the device element is used. If set, this acquisition channel is used for this measurement. 
- acq_index – Index of the register where the measurement is stored. If None specified, this defaults to writing the result of all device elements to acq_index 0. By default None. 
- acq_protocol ("SSBIntegrationComplex" | "Trace" | "TriggerCount" | "NumericalSeparatedWeightedIntegration" | "NumericalWeightedIntegration" | None, optional) – Acquisition protocols that are supported. If - Noneis specified, the default protocol is chosen based on the device and backend configuration. By default None.
- bin_mode – The binning mode that is to be used. If not None, it will overwrite the binning mode used for Measurements in the circuit-to-device compilation step. By default None. 
- feedback_trigger_label (str) – The label corresponding to the feedback trigger, which is mapped by the compiler to a feedback trigger address on hardware, by default None. 
- device_overrides – Device level parameters that override device configuration values when compiling from circuit to device level. 
 
 
- _modulo_360_with_mapping(theta: float) float[source]#
- Maps an input angle - theta(in degrees) onto the range- ]-180, 180].- By mapping the input angle to the range - ]-180, 180](where -180 is excluded), it ensures that the output amplitude is always minimized on the hardware. This mapping should not have an effect on the device element in general.- -180 degrees is excluded to ensure positive amplitudes in the gates like X180 and Z180. - Note that an input of -180 degrees is remapped to 180 degrees to maintain the positive amplitude constraint. - Parameters:
- theta (float) – The rotation angle in degrees. This angle will be mapped to the interval - ]-180, 180].
- Returns:
- The mapped angle in degrees, which will be in the range - ]-180, 180]. This mapping ensures the output amplitude is always minimized for transmon operations.
- Return type:
 - Example - ` >>> _modulo_360_with_mapping(360) 0.0 >>> _modulo_360_with_mapping(-180) 180.0 >>> _modulo_360_with_mapping(270) -90.0 `