Pauli Gate
Pauli-gates
%matplotlib inline
import numpy as np
import IPython
import matplotlib.pyplot as plt
from qiskit import QuantumCircuit
from qiskit import BasicAer
from qiskit.tools.jupyter import *
from qiskit.visualization import *
import seaborn as sns
sns.set()
from helper import *
import os
import glob
import moviepy.editor as mpy
Pauli Gates are represented by \( X, Y, Z \)and their matrix form are:
$$ X = \frac{1}{\sqrt{2}} \left( \begin{array}{cc} 0 & 1 \\ 1 & 0 \end{array} \right); Y = \frac{1}{\sqrt{2}} \left( \begin{array}{cc} 0 & -i \\ i & 0 \end{array} \right); Z = \frac{1}{\sqrt{2}} \left( \begin{array}{cc} 1 & 0 \\ 0 & -1 \end{array} \right)$$
Lets see what happens to the qubit by application of these gates
X-Gate
X gate takes \( |0 \rangle\) to \( |1 \rangle \) and vise versa. This gate rotates the qubit by \(\pi \) angle around X axis.
qc = QuantumCircuit(1)
qc.x(0)
style = {'backgroundcolor': 'lavender'}
qc.draw(output='mpl', style = style)
print(getStateVector(qc))
getBlochSphere(qc)
[0.+0.j 1.+0.j]
Which vector will be unaffected by this rotation? A vector pointing along x-axis remains unaffected. We can show this by creating a qubit pointing in x-axis by application of H gate and apply x gate
qc = QuantumCircuit(1)
qc.h(0)
qc.x(0)
style = {'backgroundcolor': 'lavender'}
qc.draw(output='mpl', style = style)
print(getStateVector(qc))
getBlochSphere(qc)
[0.70710678+0.j 0.70710678+0.j]
qc = QuantumCircuit(1)
qc.x(0)
qc.h(0)
qc.x(0)
style = {'backgroundcolor': 'lavender'}
qc.draw(output='mpl', style = style)
In fact, you discovered the eigen vector of X operator. These are represented as:
$$|+\rangle = \tfrac{1}{\sqrt{2}}(|0\rangle + |1\rangle) = \tfrac{1}{\sqrt{2}}\begin{bmatrix} 1 \ 1 \end{bmatrix}$$
$$|-\rangle = \tfrac{1}{\sqrt{2}}(|0\rangle - |1\rangle) = \tfrac{1}{\sqrt{2}}\begin{bmatrix} 1 \ -1 \end{bmatrix}$$
Y-Gate
This gate rotates the qubit around Y axis by $\pi$ angle.
qc = QuantumCircuit(1)
qc.h(0)
qc.y(0)
style = {'backgroundcolor': 'lavender'}
qc.draw(output='mpl', style = style)
print(getStateVector(qc))
getBlochSphere(qc)
[ 0.70710678+0.00000000e+00j -0.70710678+8.65956056e-17j]
Which vector will be unaffected by this rotation? A vector pointing along y-axis remains unaffected. We can show this by creating a qubit pointing in x-axis by application of H gate and rotate it to the direction og y-axis and apply Y gate.
qc = QuantumCircuit(1)
qc.h(0)
qc.u3(0,0,np.pi/2,0)
style = {'backgroundcolor': 'lavender'}
qc.draw(output='mpl', style = style)
print(getStateVector(qc))
getBlochSphere(qc)
[7.07106781e-01+0.j 2.00307049e-16+0.70710678j]
qc = QuantumCircuit(1)
qc.h(0)
qc.u3(0,0,np.pi/2,0)
qc.x(0)
style = {'backgroundcolor': 'lavender'}
qc.draw(output='mpl', style = style)
print(getStateVector(qc))
getBlochSphere(qc)
[7.07106781e-01+0.j 2.00307049e-16-0.70710678j]
In fact, you discovered the eigen vector of Y operator. These are represented as:
$$|\circlearrowright\rangle = \frac{1}{\sqrt{2}}\left(|0\rangle + i|1\rangle\right)$$.
$$|\circlearrowleft\rangle = \frac{1}{\sqrt{2}}\left(|0\rangle - i|1\rangle\right)$$.
Z-gate
This gate rotates the qubit around Z axis by $\pi$ angle.
qc = QuantumCircuit(1)
qc.h(0)
qc.z(0)
style = {'backgroundcolor': 'lavender'}
qc.draw(output='mpl', style = style)
print(getStateVector(qc))
getBlochSphere(qc)
[ 0.70710678+0.00000000e+00j -0.70710678+8.65956056e-17j]
Which vector will be unaffected by this rotation? A vector pointing along z-axis remains unaffected. This is the initial value of qubit which is very easy to verify.
qc = QuantumCircuit(1)
qc.z(0)
style = {'backgroundcolor': 'lavender'}
qc.draw(output='mpl', style = style)
print(getStateVector(qc))
getBlochSphere(qc)
[1.+0.j 0.+0.j]
Similarly, you discovered the eigen vector of Z operator. These are represented as:
$$|0 \rangle = \frac{1}{\sqrt{2}}\left(| + \rangle + |- \rangle\right) $$.
$$|1 \rangle = \frac{1}{\sqrt{2}}\left(|+ \rangle + |- \rangle\right) $$
Multiple Pauli Gates
qc = QuantumCircuit(3)
qc.x(0)
qc.y(1)
qc.z(2)
qc.barrier()
qc.x(0)
qc.y(1)
qc.z(2)
qc.barrier()
style = {'backgroundcolor': 'lavender'}
qc.draw(output='mpl', style = style)
print(getStateVector(qc))
getBlochSphere(qc)
[1.-2.4492936e-16j 0.+0.0000000e+00j 0.+0.0000000e+00j 0.+0.0000000e+00j
0.+0.0000000e+00j 0.+0.0000000e+00j 0.+0.0000000e+00j 0.+0.0000000e+00j]
Making Fun
Lets apply H gate to each qubit in 3 qubits system and then apply X,Y,and Z gate respectively. This operation followed by total 2 $\pi$ roatation and another set of Pauli gates and H gates brings the qubit to original position.
qc = QuantumCircuit(3)
qc.h(0)
qc.h(1)
qc.h(2)
qc.x(0)
qc.y(1)
qc.z(2)
qc.barrier()
for i in range(8):
qc.u3(0,0,np.pi/4,0)
qc.u3(np.pi/4,0,0,1)
qc.u3(0,np.pi/4,0,2)
qc.barrier()
qc.x(0)
qc.y(1)
qc.z(2)
qc.h(0)
qc.h(1)
qc.h(2)
style = {'backgroundcolor': 'lavender'}
qc.draw(output='mpl', style = style)
Lets see where are our individual qubits, finally!
print(getStateVector(qc))
getBlochSphere(qc)
[1.-8.41170949e-17j 0.+0.00000000e+00j 0.+0.00000000e+00j
0.+0.00000000e+00j 0.+0.00000000e+00j 0.+0.00000000e+00j
0.+0.00000000e+00j 0.+0.00000000e+00j]
Lets see what actually happens to each qubit in the intermediate steps:
We can also visualize the 8 complex cofficients for the state vector in the intermediate steps