Pulse Operations & Conversion#
Provides a Qrisp frontend for IQM’s Pulla pulse-level compiler. This module does
not perform pulse-level compilation itself — it lets you construct pulse-aware
Qrisp circuits, extract them as IQM Pulse Circuit objects, and then
hand them to Pulla for compilation into a pulse schedule (playlist). For more info
on how to modify and build pulse level compilation schedules, please visit the Pulla
documentation.
A typical workflow:
import os
from qrisp import QuantumVariable, h, cx, measure
from iqm.qrisp_iqm import IQMBackend, extract_iqm_pulse, quantum_op_to_qrisp_func
from iqm.pulse.quantum_ops import QuantumOp
os.environ["IQM_SERVER_URL"] = "https://resonance.iqm.tech/"
os.environ["IQM_QUANTUM_COMPUTER"] = "garnet"
os.environ["IQM_TOKEN"] = "<YOUR_TOKEN>"
backend = IQMBackend()
dqa = backend.iqm_client.get_dynamic_quantum_architecture()
# Define a custom pulse operation (e.g. a delay)
delay = quantum_op_to_qrisp_func(QuantumOp(name="delay", params={"duration": (float,)}))
@extract_iqm_pulse(dqa=dqa)
def my_circuit():
qv = QuantumVariable(2)
h(qv[0])
delay(qv[0], duration=300e-9) # survives transpilation as a native pulse op
cx(qv[0], qv[1])
return measure(qv)
# Extract as IQM pulse Circuit
meas_keys, iqm_pulse_qc = my_circuit()
from iqm.pulla.pulla import Pulla
p = Pulla()
# Compile to a pulse playlist via Pulla
compiler = p.get_standard_compiler()
playlist, context = compiler.compile([iqm_pulse_qc])
extract_iqm_pulse() traces a Qrisp function via Jasp and converts it to an
IQM Pulse Circuit. IQMPulseOperation lets you embed native
pulse instructions (delays, barriers, custom gates) that survive transpilation unchanged.
Circuit Conversion#
Converts a Qrisp QuantumCircuit to an IQM |
Pulse Operations#
Qrisp Operation that represents an IQM Pulse quantum operation. |
Jasp-trace a Qrisp function and compile it to |
|
Create a function for appending IQM Pulse quantum operations to a Qrisp quantum circuit. |
Custom Pulse Operations#
Applies a |