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()])
No description has been provided for this image
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
No description has been provided for this image
Using decomposition: ZXZ
No description has been provided for this image
Using decomposition: XZX
No description has been provided for this image
Using decomposition: ZYZ
No description has been provided for this image
Using decomposition: u3
No description has been provided for this image
Using decomposition: ibm
No description has been provided for this image
Using decomposition: rx+
No description has been provided for this image