catalyst.passes.merge_rotations

merge_rotations(fn=None)[source]

Specify that the -merge-rotations MLIR compiler pass for merging roations (peephole) will be applied.

The full list of supported gates are as follows:

qml.RX, qml.CRX, qml.RY, qml.CRY, qml.RZ, qml.CRZ, qml.PhaseShift, qml.ControlledPhaseShift, qml.Rot, qml.CRot, qml.MultiRZ.

Note

Unlike PennyLane circuit transformations, the QNode itself will not be changed or transformed by applying these decorators.

As a result, circuit inspection tools such as draw() will continue to display the circuit as written in Python.

Parameters

fn (QNode) – the QNode to apply the cancel inverses compiler pass to

Return type

QNode

Example

In this example the three qml.RX will be merged in a single one with the sum of angles as parameter.

from catalyst.debug import get_compilation_stage
from catalyst.passes import merge_rotations

dev = qml.device("lightning.qubit", wires=1)

@qjit(keep_intermediate=True)
@merge_rotations
@qml.qnode(dev)
def circuit(x: float):
    qml.RX(x, wires=0)
    qml.RX(0.1, wires=0)
    qml.RX(x**2, wires=0)
    return qml.expval(qml.PauliZ(0))
>>> circuit(0.54)
Array(0.5965506257017892, dtype=float64)