Skip to main contentIBM Quantum Documentation Preview
This is a preview build of IBM Quantum™ documentation. Refer to docs.quantum.ibm.com for the official documentation.

Migrate from Qiskit Pulse to fractional gates

With the introduction of fractional gates, pulse-level control on all IBM Quantum™ processors has been deprecated and will be removed in early 2025. Additionally, the qiskit.pulse module has been deprecated as of the Qiskit SDK v1.3.0 and will be removed in Qiskit SDK v2.0.0. This change was motivated by our ongoing focus on utility-scale experiments and support for users exploring applications that might lead to quantum advantage.


Execute single- and two-qubit rotations directly with fractional gates

The most common use-case of pulse-level control was to build custom pulse schedules that modify the ECR or RX pulses to directly execute single- and two-qubit rotations. The typical process was to use the RXCalibrationBuilder and RZXCalibrationBuilder (or RZXCalibrationBuilderNoEcho) and add either a RXGate or RZXGate instruction to a QPU's target, then build a transpilation pipeline containing the calibration builder passes to calibrate the single- and two-qubit rotations for a specified angle. In the background this created a calibration, which is a map between a ScheduleBlock and a gate in a QuantumCircuit.

You can now accomplish this on Heron processors using the new use_fractional_gates flag. As specified in the fractional gates guide, both RX(θ)R_X(\theta) and RZZ(θ)R_ZZ(\theta) must be loaded using this flag, which returns a backend whose Target attribute contains information about these gates.

service = QiskitRuntimeService()
backend = service.backend('ibm_torino', use_fractional_gates=True)

Use Qiskit Dynamics

The qiskit.pulse module contained much more functionality than just executing single and two-qubit rotations more efficiently. Much of the control over device physics can be modeled using the Qiskit Dynamics package found in the Qiskit Ecosystem. In particular, the package has its own analogous representation of many of the features provided by qiskit.pulse in the form of a qiskit_dynamics.signals module. The documentation of this package contains a few tutorials which may be helpful: