catalyst.passes.decompose_arbitrary_ppr¶
- decompose_arbitrary_ppr(qnode)[source]¶
Specify that the MLIR compiler pass for decomposing arbitrary Pauli product rotations (PPR) operations will be applied. This will decompose into a collection of PPRs, PPMs and a single-qubit arbitrary PPR in the Z basis. For more details, see Figure 13(d) in arXiv:2211.15465.
Note
For improved integration with the PennyLane frontend, including inspectability with
pennylane.specs(), please usepennylane.transforms.decompose_arbitrary_ppr().The
decompose_arbitrary_pprcompilation pass requires thatto_ppr()be applied first.- Parameters:
qnode (QNode) – QNode to apply the pass to.
- Returns:
~.QNode
Example
import pennylane as qml @qml.qjit(pipelines=[("pipe", ["quantum-compilation-stage"])], target="mlir") @qml.transforms.decompose_arbitrary_ppr @qml.transforms.to_ppr @qml.qnode(qml.device("null.qubit", wires=3)) def circuit(): qml.PauliRot(0.123, pauli_word="XXY", wires=[0, 1, 2]) return
>>> print(circuit.mlir_opt) ... %5 = qec.prepare plus %4 : !quantum.bit %mres, %out_qubits:4 = qec.ppm ["X", "X", "Y", "Z"] %1, %2, %3, %5 : !quantum.bit, !quantum.bit, !quantum.bit, !quantum.bit %6 = qec.ppr ["X"](2) %out_qubits#3 cond(%mres) : !quantum.bit %7 = qec.ppr.arbitrary ["Z"](%cst) %6 : !quantum.bit %mres_0, %out_qubits_1 = qec.ppm ["X"] %7 : !quantum.bit %8:3 = qec.ppr ["X", "X", "Y"](2) %out_qubits#0, %out_qubits#1, %out_qubits#2 cond(%mres_0) : !quantum.bit, !quantum.bit, !quantum.bit ...
code/api/catalyst.passes.decompose_arbitrary_ppr
Download Python script
Download Notebook
View on GitHub