Compression 1-qubit gates¶
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:
- $RZ-RX-RZ$ (key: ZXZ)
- $RX-RZ-RX$ (key: XZX)
- $RZ-RY-RZ$ (key: ZYZ)
- $U_3$ (which is universal by itself) (key: u3 or ibm)
- $RZ-RX(\pi/2)-RZ-RX(\pi/2)-RZ$ (key: rx+ or ions)
Instances of the plugin can be constructed via the .from_pattern
static method.
Let us try to use this plugin on some examples !
In [1]:
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()])
In [2]:
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()
Using decomposition: ions
Using decomposition: ZXZ
Using decomposition: XZX
Using decomposition: ZYZ
Using decomposition: u3
Using decomposition: ibm
Using decomposition: rx+