qat.pbo
comes with a plugin, called KAKCompression
that can compress sequences of single qubit gates into some universal pattern of gates
(typically three Pauli rotations).
This plugin comes with a preset of possible (named) patterns you can pick from:
Instances of the plugin can be constructed via the .from_pattern
static method.
Let us try to use this plugin on some examples !
from qat.lang.AQASM import *
from qat.core import Batch
prog = Program()
qbits = prog.qalloc(2)
H(qbits[0])
RX(0.232)(qbits[0])
CNOT(qbits)
RZ(1.89)(qbits[1])
H(qbits[1])
circuit = prog.to_circ()
circuit.display()
input = Batch(jobs=[circuit.to_job()])
from qat.plugins import KAKCompression
from qat.pbo.kak import list_decompositions
for decomposition in list_decompositions():
plugin = KAKCompression(decomposition=decomposition)
new_circuit = plugin.compile(input, None).jobs[0].circuit
print(f"Using decomposition: {decomposition}")
new_circuit.display()