Skip to content

Instantly share code, notes, and snippets.

@IvanIsCoding
Last active July 4, 2024 14:09
Show Gist options
  • Save IvanIsCoding/3aa86987a0bed84d09796bc19228bd73 to your computer and use it in GitHub Desktop.
Save IvanIsCoding/3aa86987a0bed84d09796bc19228bd73 to your computer and use it in GitHub Desktop.
Quantum gates and unitary matrices in Qiskit
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Quantum Gates\n",
"\n",
"Quantum gates are the building blocks of quantum circuits. A quantum gate $U$ is an unitary that takes $|\\psi\\rangle$ to another valid qubit $|\\phi\\rangle$. It is important to remember that:\n",
"\n",
"$$\n",
"UU^{\\dagger} = I\n",
"$$\n",
"\n",
"Thus, the gate $U^{\\dagger}$ undoes the transformation of $U$. For the Pauli X, Y, and Z gates as well as the Hadamard gate, $U = U^{\\dagger}$.\n",
"\n",
"In Python, the gates are a matrix (list of lists) of complex numbers.\n",
"\n",
"We may extract the unitary matrix from a circuit using the **unitary_simulator** in _Qiskit_"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"from qiskit import *"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [],
"source": [
"# The following code is for nicer display of the matrices\n",
"from IPython.display import display, Markdown\n",
"\n",
"def format_float(x):\n",
" if x % 1 == 0:\n",
" return int(x)\n",
" else:\n",
" return x\n",
"\n",
"def format_imaginary(z):\n",
" if abs(z.imag) < 1e-15:\n",
" return \"{}\".format(format_float(z.real))\n",
" elif abs(z.real) < 1e-15:\n",
" if z.imag == 1:\n",
" return \"i\"\n",
" elif z.imag == -1:\n",
" return \"-i\"\n",
" return \"{}i\".format(format_float(z.imag))\n",
" if z.imag > 0:\n",
" return \"{} + {}i\".format(z.real, abs(z.imag))\n",
" else:\n",
" return \"{} - {}i\".format(z.real, abs(z.imag))\n",
"\n",
"def display_matrix(gate, gate_name=\"U\"):\n",
" a00 = format_imaginary(gate[0][0])\n",
" a01 = format_imaginary(gate[0][1])\n",
" a10 = format_imaginary(gate[1][0])\n",
" a11 = format_imaginary(gate[1][1])\n",
" ans = r\"${} = \\begin{{bmatrix}} {} & {} \\\\ {} & {}\\end{{bmatrix}}$\".format(gate_name,a00, a01, a10, a11)\n",
" return Markdown(ans)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Qiskit simulators are available in the _Aer_ module. For this notebook, we will explore mostly the **unitary_simulator** because we are interested in the unitary matrices of the gates."
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [],
"source": [
"simulator = Aer.get_backend(\"unitary_simulator\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The most simple circuit is the quantum wire: a system with no gates.\n",
"We can verify that it is represented by the identity matrix, $I = \\begin{bmatrix}1 & 0 \\\\ 0 & 1\\end{bmatrix}$."
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAGMAAABOCAYAAAA0Cah9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAACIUlEQVR4nO3cLasiYQDF8TPLFTVY1CDYRDEIIzgfwGoWDAYxCNqNgnWC+DlMYjQ7xTBYFNNEEQxGBZvPTctFdhe2OM8Bzw8sj8EDf+Yl6RhjDITCL9sD5IdiEFEMIopBRDGIKAYRxSCiGEQUg4hiEFEMIopBRDGIKAYRxSCiGEQUg4hiEFEMIopBRDGIKAYRxSCiGEQUg4hiEFEMIopBRDGIKAYRxSCiGEQUg4hiEFEMIopBRDGI0MR4Pp+Yz+eoVCpIpVKo1+sIggDVahXD4dD2vFh82R7w22AwwGq1wnQ6hed52G636Ha7uF6vGI/HtufFwxBYLBYGgNlsNi/n7XbbADBhGFpaFi+K25Tv+2i1Wmg2my/n5XIZiUQCrutaWhYv6zHO5zOOxyM6nc4f351OJ9RqNSSTSQvL4kcRAwAKhcLL+ePxQBAEaDQab/19x3He/vlf1mPk83kAQBRFL+ez2QyXywWe59mYZYX1t6lSqQTXdeH7PrLZLIrFIpbLJdbrNQC8PYYh+h8bxxCsiaIIo9EIYRgil8uh3+8jk8lgMpngdrshnU7bnhgLihh/0+v1sN/vcTgcbE+JjfVnxr/sdruPel4ApDHu9zuiKHr7mxQb2tvUJ6K8Mj6VYhBRDCKKQUQxiCgGEcUgohhEFIOIYhBRDCKKQUQxiCgGEcUgohhEFIOIYhBRDCKKQUQxiCgGEcUgohhEFIOIYhBRDCLffqrq/e7JK6AAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 113.176x84.28 with 1 Axes>"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"circuit = QuantumCircuit(1)\n",
"circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1.+0.j 0.+0.j]\n",
" [0.+0.j 1.+0.j]]\n"
]
}
],
"source": [
"job = execute(circuit, backend=simulator)\n",
"result = job.result()\n",
"unitary = result.get_unitary()\n",
"print(unitary)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The first gate we will discuss is the NOT gate, also known as Pauli X gate. It takes $|0\\rangle$ to $|1\\rangle$ and vice versa. A simple circuit consisting of only the $X$ gate looks like:"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAJEAAABOCAYAAAAgsPTZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAADb0lEQVR4nO3dT0iTcRzH8c/zPC5neUjZQfAmiofRBL31B/FQGZQX28qDB5Fc5iWQokt/yFoxVnSou4dqlGPRxR2KcFqXHIJiHXawEMGLBwVhWj7P0yEypMLNrw+/58nPC57Ls8PzZbz57bc9g0ezbdsGkYCuegDyPkZEYoyIxBgRiTEiEmNEJMaISIwRkRgjIjFGRGKMiMQYEYkxIhJjRCTGiEiMEZEYIyIxRkRijIjEGBGJMSISY0QkxohIjBGRGCMiMUZEYoyIxBgRiZWpHsAL9r3JKLnut+OnlFy3VFyJSIwRkRgjIjFGRGKMiMQYEYkxIhJjRCTmmogsy0IikUBDQwP8fj+ampqQzWbR2NiIvr4+1eMVzS4U8D18Htb4+9/n1texcXkQG7fvwrYshdM5wzUR9fb2YmhoCNFoFJlMBpFIBF1dXZibm0NLS4vq8YqmVVRAP9sJ89lz2LYN2zRh3rkH+Hwwrl2FprvmLd81rrjtkUwmMTw8jLGxMbS2tgIA2traMDU1hXQ6jebmZsUTlkbvOAMrlYY98QHWZA720hLKEnFo+3yqR3OEKyKKxWJob2/fDOiX+vp6+Hw+hEIhRZPtjFbhhx7uhJl4CFQdRNmjB9AO7Fc9lmOUr60LCwuYnZ1FOBz+47X5+XkEg0GUl5crmGwXrK3BOBeBVlWlehJHuSIiAKipqdlyvlAoIJvNOv5RpmnatkeprLfvYL14Ce3kCZivXmOnT74oZjYnj2IpjygQCAAA8vn8lvPxeByLi4ue2lQDgPVxEubjJzBuXodx6SKwvAx7fEL1WI5Svieqq6tDKBRCLBZDdXU1amtrkUqlMDo6CgCOR1TMKlHs/4msT59hxu7DuDIIPXQIAH7ujZ4moR07WvI3M688u0f5SqTrOkZGRhAMBtHf34+enh4EAgEMDAzAMAzPbKrtL19h3rgFI3oB+pHDm+f1jtPAysp/vRppbn1UVXd3N6anpzEzM6N6FP6zcRvKV6J/yeVyntsP7VWujGh1dRX5fN5zPzLuVco31n9TWVkJ0zRVj0FFcuVKRN7CiEiMEZEYIyIxRkRijIjEGBGJufa2B3kHVyISY0QkxohIjBGRGCMiMUZEYoyIxBgRiTEiEmNEJMaISIwRkRgjIjFGRGKMiMQYEYkxIhJjRCTGiEjsB2Gp1M7c8wXZAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 173.376x84.28 with 1 Axes>"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"circuit = QuantumCircuit(1)\n",
"circuit.x(0)\n",
"circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We may also verify that $X = \\begin{bmatrix}0 & 1 \\\\ 1 & 0\\end{bmatrix}$ using Qiskit."
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"$X = \\begin{bmatrix} 0 & 1 \\\\ 1 & 0\\end{bmatrix}$"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"unitary = execute(circuit, backend=simulator).result().get_unitary()\n",
"display(\n",
" display_matrix(unitary, \"X\")\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We may apply many gates to a circuit. In the circuit below, we apply $X$ followed by $H$. Notice that this is equivalent to applying a single gate $U = HX$ due to matrix multiplication (multiplication of unitary matrices yields a unitary matrix)."
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAL4AAABOCAYAAACe5qyEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAEmElEQVR4nO3bf0jcdRzH8df3e56/ci31NiW3xkSTuHaGbgS1EP8oFdr+aM2SMBBLZwZNRtH+qEbWFWKxP4oI9od/zKQUR/8orChv6wd0IijWH5fcQozrSuoklzr3/X77QzK+1PTO8/b53t6vB/jPx9PvW3n65k6/apZlWSASRlc9AJEKDJ9EYvgkEsMnkRg+icTwSSSGTyIxfBKJ4ZNIDJ9EYvgkEsMnkRg+icTwSSSGTyIxfBKJ4ZNIDJ9EYvgkEsMnkRg+icTwSSSGTyIxfBKJ4ZNIDJ9EYvgkEsMnkTJUD5AOMj8bVXLdaw83JPXxJ/u3aZAEnH3q5l9zK7jxSSSGTyIxfBKJ4ZNIDJ9EYvgkEsMnkRg+ieSY8E3TRG9vL8rLy5GdnY3KykoEAgFUVFSgra1N9Xhxs5aWsHr8SZiXvvr3bGUF10+ewvXX34Rlmgqn29i55+/E9JfnbGeWZeGDZ27HTPCCoqlSwzHht7a2oru7G+3t7RgdHUVjYyOampoQDodRXV2tery4aTk50B8/BqP/I1iWBcswYLzxFuB2w/XyS9B0x3zLbRZ//xlXYxHs2nef7Xzh1zCuLf+JotKDiiZLDUfcsjAwMIC+vj6MjY2hpqYGAFBbW4uJiQkMDw+jqqpK8YSJ0Y8egTk0DOvy1zCD47Dm55HR2wMt0616tBuKhoPQdBcK99xrO5+fnUTuziLsKNyraLLUcET4fr8f9fX169H/o6ysDG63Gz6fT9FkW6PlZEM/fgxG77tA/h3IOPsOtNtyVY+1oWg4iPziu5GRmW07/212Erv331rbHnBA+HNzc5ienkZXV9d/3jc7Owuv14usrCwFk22D5WW4nmiElp+vepJNRcNBxKIz+PCEx3a+urKIg0dOK5oqdRwRPgAUFxfbzpeWlhAIBNDQkNwdipvRNG3Tx7gvjiT0Oc3Pv4D58SfQ6h6BceFTaA11cV1nK7Nt5IXzVtyPjV4Zx/2PncE9h5+2nfefPoCiBDZ+sjMny7Li+5qVv9LyeNY2TCgUsp339PQgEomk1QtbADC/C8J47324XnsFrudOALEYrEuXVY+1odgvM1i5+gf2+eqwo3DP+puxuoyVv2IoKj2kesRtp3zjl5aWwufzwe/3o6CgACUlJRgaGsLIyNqWTXX48WyIeO/HN7//AYb/bbhePAXddwAA1p7rnx+A9tDhhH+jE+/2upF478ePhoPIyMrFrrsqbeeRH79BXuFe5O7cHfc1k535ZlG+8XVdx+DgILxeLzo6OtDS0gKPx4POzk64XK60eWFrXfkJxqtn4Gp/FvqDD6yf60cfBRYWHL31o+EgivYfgu6y78HIzLcJPc1JJ5rl0B/R5uZmTE5OYmpqSvUo/A+sBPA/sJI0Pj6eds/vKX04MvzFxUWEQqG0+8MVpQ/lL27/T15eHgzDUD0G3cIcufGJUo3hk0gMn0Ri+CQSwyeRGD6JxPBJJMfeskCUStz4JBLDJ5EYPonE8Ekkhk8iMXwSieGTSAyfRGL4JBLDJ5EYPonE8Ekkhk8iMXwSieGTSAyfRGL4JBLDJ5EYPon0N193LEQZkLk9AAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 233.576x84.28 with 1 Axes>"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"circuit = QuantumCircuit(1)\n",
"circuit.x(0)\n",
"circuit.h(0)\n",
"circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"$U = \\begin{bmatrix} 0.7071067811865475 & 0.7071067811865476 \\\\ -0.7071067811865476 & 0.7071067811865475\\end{bmatrix}$"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"unitary = execute(circuit, backend=simulator).result().get_unitary()\n",
"display(\n",
" display_matrix(unitary)\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On a relevant note, different gates may lead to the same composed matrix $U$! Here, we verify that $HX$ = $ZH$."
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAL4AAABOCAYAAACe5qyEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAEXklEQVR4nO3bX2hbZRzG8SfntGtXOsfabCl2c6y0Fo2m0nQMYVIquKYwvdhdkQ5KpVgqulYEK6tMlFyUiiLIEOosuFpZS5QhVadi40W9SCmk9Cp2EUIlxopWzMyycs7xYjg4Vmv+NH0Tf88HcvMm7flBvnk5SU4clmVZIBJGUz0AkQoMn0Ri+CQSwyeRGD6JxPBJJIZPIjF8Eonhk0gMn0Ri+CQSwyeRGD6JxPBJJIZPIjF8Eonhk0gMn0Ri+CQSwyeRGD6JxPBJJIZPIjF8Eonhk0gMn0Ri+CQSwyeRylQPUArOTak57ptP5vf3e774dGcGycKtx7p2/Zi54I5PIjF8Eonhk0gMn0Ri+CQSwyeRGD6JxPBJpKIJ3zRNjI+Po6mpCZWVlWhpaUEwGERzczP6+/tVj5eViWfuxsrXE7Y1y7Jw8am7sBr6SNFU2zM/v4bNJ85svflOY9N3GlYqpXrEHVU039z29fUhEAhgdHQUXq8XCwsL6O7uxvr6OoaHh1WPl7HkLz/gxkYcB48+ZFv/7acobt38Ha6GNkWTbU/rPAWt85RtzQx+A2PsdejPDsKxd6+iyQqjKMKfnp7G5OQk5ufn0d7eDgDo6OjA0tISAoEAWltbFU+YuUQ0BIemo/bwA7b1n2NhVO13YV/tEUWTZcf88isYb7wF/flz0B7tUD3OjiuK8P1+P3w+353o/9LY2Ijy8nJ4PB5Fk2UvEQ3hQN29KNtTaVtfj4Vx6Fhx7vZ/Z859BuPti9BffAHaIydVj1MQysNfW1vDysoKhoaGttwXi8XgdrtRUVGhYLLcJKIhbCRW8c7TTtv6ZjqJtsdHFE2VOePjqzAnLkE//xK0h0+oHqdgiiJ8AKirq7Otp1IpBINBdHUV9mo/h8Pxn4957rKV8f9LfL+IE2cu4L6TZ23rUyMPwpXljp/JbNspvzaX1eONK7Mw35+CfuFlaG25nV7mO3O+LCuz50r5pzpO5+2dMRKJ2NbHxsYQj8fh9XpVjJWTjR9Xkb7xK456OrGv9vCdm7F5E+k/NuBqOK56xH9lXP4A5tQ09NdeyTn6UqJ8x29oaIDH44Hf70dNTQ3q6+sxOzuLubnbu1Whw89kh8j0evxENISyiiocvKfFth7/bgHVtUdQtf/Qjs+2nUyvxzcuTcK8+gl0/6vQ3Pfndcx8Z94tynd8TdMwMzMDt9uNgYEB9Pb2wul0YnBwELqul9wbW9ex49B0+34SX/0269Oc3WJdvw7zwytAOg1j5PyWz/GNd99TPWJBOKwifYn29PQgHA5jeXlZ9Sj8BVYW+AusPC0uLpbU+T2VlqIMP5lMIhKJlNQXV1RalL+5/SfV1dUwDEP1GPQ/VpQ7PlGhMXwSieGTSAyfRGL4JBLDJ5EYPolUtJcsEBUSd3wSieGTSAyfRGL4JBLDJ5EYPonE8Ekkhk8iMXwSieGTSAyfRGL4JBLDJ5EYPonE8Ekkhk8iMXwSieGTSAyfRPoTP/Yi4zVfFwoAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 233.576x84.28 with 1 Axes>"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"circuit = QuantumCircuit(1)\n",
"circuit.h(0)\n",
"circuit.z(0)\n",
"circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"$U = \\begin{bmatrix} 0.7071067811865476 & 0.7071067811865475 \\\\ -0.7071067811865475 & 0.7071067811865476\\end{bmatrix}$"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"unitary = execute(circuit, backend=simulator).result().get_unitary()\n",
"display(\n",
" display_matrix(unitary)\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And gate order matters! Matrix multiplication is not commutative in general. $HZ$ is not the same as $ZH$."
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAL4AAABOCAYAAACe5qyEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAEZElEQVR4nO3bYUjcdRzH8c/9/zqduMb0tpPcGhNN6uoMzzGChRg0T1g92DMJB2JIYtQ0gowZi+IeiFEEMQJbQjNjyhUjrFaR1wN7cCKc+OhyF4hxXUYZ3XI3+f//PRgN/ph65+38/W/fzwvuyc/T+wpvv5x3/3NZlmWBSBhN9QBEKjB8Eonhk0gMn0Ri+CQSwyeRGD6JxPBJJIZPIjF8Eonhk0gMn0Ri+CQSwyeRGD6JxPBJJIZPIjF8Eonhk0gMn0Ri+CQSwyeRGD6JxPBJJIZPIjF8Eonhk0gMn0QqUj1AIdjzzZdKHvfWU205ff+5sbs0SBbefXb3H3MnuPFJJIZPIjF8Eonhk0gMn0Ri+CQSwyeRGD6J5JjwTdPE8PAw6urqUFpaioaGBoTDYdTX16O7u1v1eBkzv76G9WfObLwFTmM9cBrW2prqETc18sL9WPh+xHZmWRYuPncfFiOfKZoqPxzzzm1XVxdCoRAGBwfh9/sxMzOD9vZ2rKysoL+/X/V4GdNaT0FrPWU7M8M/wBh6G/qLvXDt3atosq2l/vgFN1YTOHj0Mdv5X7/Fcevm3/DUNCmaLD8cEf74+DhGR0cxPT2N5uZmAEBLSwvm5uYQCoXQ2NioeMKdM7/9DsY770F/+Ry0J1tUj7OpZDwCl6aj8vAjtvPfl6Io2+/BvsojiibLD0eEHwwGEQgE7kT/n9raWhQXF8Pn8ymaLDfm1Fcw3r8I/dVXoD1xUvU4W0rGIzhQ9SCK9pTazleWojh07N7a9oADwl9eXsbCwgL6+vo2fG1paQlerxclJSUKJsuN8flVmCOXoJ9/DdrjJ1SPs61kPILV5CI+eN5tO19Pp9D09ICiqfLHEeEDQFVVle18bW0N4XAYbW25XaG4HZfLte19iq9NZfUzjSuTMD8eg37hdWhNO3+alslsW3npspXxfZM/z+LEmQt46ORZ2/nYwKPwZLHxc505V5aV2e+s/FUdt/v2honFYrbzoaEhJBIJ+P1+FWPtmHH5E5hj49DfeiOn6HfT6q+LSN/4E0d9rdhXefjOzVi/ifQ/q/DUHFc94l2nfOPX1NTA5/MhGAyioqIC1dXVmJycxNTU7S2b7/Az2RCZXo9vXBqFefUL6ME3oXkfznW0jLfXZjK9Hj8Zj6CopAwHH2iwnSd+mkF55RGU7T+U8WPmOvNuUb7xNU3DxMQEvF4venp60NnZCbfbjd7eXui6XjD/2FrXr8P89AqQTsMYOL/hdXzjw49Uj7ipZDwCz7Hj0HT7Hkws/pjV05xC4rIc+ifa0dGBaDSK+fl51aPwE1hZ4CewcjQ7O1twz++pcDgy/FQqhVgsVtBvXJGzKf/n9v+Ul5fDMAzVY9A9zJEbnyjfGD6JxPBJJIZPIjF8Eonhk0gMn0Ry7CULRPnEjU8iMXwSieGTSAyfRGL4JBLDJ5EYPonE8Ekkhk8iMXwSieGTSAyfRGL4JBLDJ5EYPonE8Ekkhk8iMXwSieGTSP8Ct0Qi42uYDbUAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 233.576x84.28 with 1 Axes>"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"circuit = QuantumCircuit(1)\n",
"circuit.z(0)\n",
"circuit.h(0)\n",
"circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"$U = \\begin{bmatrix} 0.7071067811865476 & -0.7071067811865475 \\\\ 0.7071067811865475 & 0.7071067811865476\\end{bmatrix}$"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"unitary = execute(circuit, backend=simulator).result().get_unitary()\n",
"display(\n",
" display_matrix(unitary)\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It is also important to recall that the entries of the matrix may not be real numbers! For example, consider the Pauli Y gate: it has entries that are pure imaginary numbers"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAJEAAABOCAYAAAAgsPTZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAADNElEQVR4nO3dwUuTcRzH8c/zLJ0HD6FDBG/i8jCYpKeCEolIi25pSo0QQTP/g4guwg7iH+FNaGY3d5DA1VUExdMEBROsuzRMt6dDGEiFa9/W73nw/YLn8gz2fBlvfs+PbfB4QRAEAgx81wMg+ogIZkQEMyKCGRHBjIhgRkQwIyKYERHMiAhmRAQzIoIZEcGMiGBGRDAjIpgREcyICGZEBDMighkRwYyIYEZEMCMimBERzIgIZkQEMyKC2RXXA0RB42reyXW/3R1yct2/xUoEMyKCGRHBjIhgRkQwIyKYERHMiAhmoYmoUqlofn5eyWRSTU1N6unpUaFQUHd3tyYnJ12PV7Xg+Fgno09Vfvvu/Pm9PZ08GlXlw0dHk9VPaCKamJjQ7OyspqamlM/nNTIyorGxMe3u7qqvr8/1eFXz4nH5j4dVebus4OREkhR8/qLTl6/lP8vIv33L8YT/Xih+9lhcXNTCwoLW1tbU398vSRoYGNDGxoaWl5fV29vreMK/4z+4r0puScHqe+nmDZ2+fCX//qBiDx+4Hq0uQhFRNpvV4ODgz4DOdHV1qaGhQel02tFktfEaG+SPPlb5TU7eSl5+73XFMk9cj1U3zm9nBwcH2t7e1vDw8C+v7e/vK5VKKR6PO5jMxh+6J30tSa2t8l88dz1OXYUiIklqb28/d75UKqlQKNT9VuZ53oVHTWIx6fhY/t078vzaPuZqZqvnUS3nESUSCUlSsVg8d35ubk6Hh4eR2lSf8+lAKpXkXUu6nqTunO+JOjs7lU6nlc1m1dLSoo6ODi0tLWllZUWS6h5RNc/HqeX/REFxR7p6VV5bWy1j/XiPiDy7x/lK5Pu+crmcUqmUpqenNT4+rkQioZmZGcVischtqs8ExR15yS7XY/wXXlgfVZXJZLS5uamtrS3Xo/DPxgs4X4n+ZH19Pbr7oUsmlBEdHR2pWCxG7kvGy8r5xvp3mpubVS6XXY+BKoVyJUK0EBHMiAhmRAQzIoIZEcGMiGAW2p89EB2sRDAjIpgREcyICGZEBDMighkRwYyIYEZEMCMimBERzIgIZkQEMyKCGRHBjIhgRkQwIyKYERHMvgN5BbNXkEou3QAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 173.376x84.28 with 1 Axes>"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"circuit = QuantumCircuit(1)\n",
"circuit.y(0)\n",
"circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"$Y = \\begin{bmatrix} 0 & -i \\\\ i & 0\\end{bmatrix}$"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"unitary = execute(circuit, backend=simulator).result().get_unitary()\n",
"display(\n",
" display_matrix(unitary, \"Y\")\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can also verify that the inverse of the Pauli Y gate is itself! Because $Y = Y^{\\dagger}$, then $YY = I$.The same would apply for $X$, $Z$ and $H$."
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAL4AAABOCAYAAACe5qyEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAADd0lEQVR4nO3bv0vUcRzH8df3e9k5OIQdIbiJl8PBSTo5lEhIVrSlKXWECJq5OmW0CDeIf4SbkFbg4A3RcLW6KE4XGJhgbQXSYd7dtyEajn6dd+nn++39fIDL118v5emX7xe/5wVBEAgwxnc9AHCB8GES4cMkwodJhA+TCB8mET5MInyYRPgwifBhEuHDJMKHSYQPkwgfJhE+TCJ8mET4MInwYRLhwyTCh0mED5MIHyYRPkwifJhE+DCJ8GES4cMkwodJZ1wPiIKzL3NOvu/XwesNfb6L3Y1uPi2c8WES4cMkwodJhA+TCB8mET5MInyYRPgwKTThVyoVLS4uKplMqrm5Wd3d3crn8+rq6tLk5KTreTULDg91NHpP5Wcvqo+/e6ej26OqvH7jaNnvRXFzo0IT/sTEhObn5zU1NaVcLqeRkRGNjY1pZ2dHvb29rufVzIvH5d8ZVuXZcwVHR5Kk4MNHlR49kX8/I//KZccLfxbFzY0KRfjLy8taWlrS2tqaZmdnNTAwoLm5OfX19alUKqmnp8f1xGPxb96QJAUvXyn49FmlR4/l3xhS7NZNx8t+L4qbGxGKZ3Wy2ayGhobU399fdbyzs1NNTU1Kp9OOltXHO9skf/SOyk9X5K3n5PdcUixz1/WsP4ri5kY4P+Pv7e1pe3tbw8PDP71vd3dXqVRK8XjcwbLG+NevSV+K0vnz8h8+cD2nJlHcXK9QhC9JbW1tVceLxaLy+fyJX+Z4nvfXt7rEYtLhofzBq/L8+n7NtWz7p7tDsPm0fmbn4ScSCUlSoVCoOr6wsKD9/f1I3dhWeb8nFYvyLiZdL6ldFDfXyfk1fkdHh9LptLLZrFpbW9Xe3q7V1VWtr69L0omHHwTBXz+mnufag8Jb6dw5eRcu1DPr+9eoYdufHHd3GDafFudnfN/3tbKyolQqpenpaY2PjyuRSGhmZkaxWCxyN7Y/BIW38pKdrmccSxQ318sLQvonmslktLm5qa2tLddTeAXWMfAKrAZtbGxE9/oeoRfK8A8ODlQoFCL3jytEh/Ob219paWlRuVx2PQP/sVCe8YGTRvgwifBhEuHDJMKHSYQPkwgfJoX2kQXgJHHGh0mED5MIHyYRPkwifJhE+DCJ8GES4cMkwodJhA+TCB8mET5MInyYRPgwifBhEuHDJMKHSYQPkwgfJn0Ddov3uYGK4ZoAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 233.576x84.28 with 1 Axes>"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"circuit = QuantumCircuit(1)\n",
"circuit.y(0)\n",
"circuit.y(0)\n",
"circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"$U = \\begin{bmatrix} 1 & 0 \\\\ 0 & 1\\end{bmatrix}$"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"unitary = execute(circuit, backend=simulator).result().get_unitary()\n",
"display(\n",
" display_matrix(unitary, \"U\")\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We may take that property for granted because all the matrices analysed so far respect $U = U^{\\dagger}$! But this will not always be the case. Consider the $S$ gate, which we have not discussed but is available in Qiskit. The matrix that represents the gate is:\n",
"\n",
"$$\n",
"S = \\begin{bmatrix}1 & 0 \\\\ 0 & i\\end{bmatrix}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAL4AAABOCAYAAACe5qyEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAADv0lEQVR4nO3bT0ikdRzH8c8MubqLFqm7q0i1OzkrIY2LI23RYZCgpD0VUcgySLgpIkHjoYMkdJrAPLT057LBehEDZVg62EIFzlZeElsH2WBO7TBloHVoZaVYfTq1sBTqzKi/5+n7foGXxxE/wnsefjIzIc/zPAHGhF0PAFwgfJhE+DCJ8GES4cMkwodJhA+TCB8mET5MInyYRPgwifBhEuHDJMKHSYQPkwgfJhE+TCJ8mET4MInwYRLhwyTCh0mED5MIHyYRPkwifJhE+DCJ8GHSA64HBMFbU25+7wcXKvt5F7sr3XxYuOPDJMKHSYQPkwgfJhE+TCJ8mET4MInwYZJvwt/e3tbExISi0ahqamrU0dGhbDartrY2DQwMuJ5Xsl/y3+nq+y/q8nCzPumv1ZVURAsz77ietaug7i6Vb1657e/vVyaT0djYmOLxuBYWFtTb26u1tTWNjIy4nleSn5av6YsPX9VzFy/r8dRVSdJ6Iac/1m85XrazoO4uhy/Cn56e1uTkpObn55VIJCRJ3d3dWlpaUiaTUWdnp+OFpcl99bFOnT2vM0+/du/ayUiXTka6HK7aXVB3l8MXR510Oq2enp570f+jtbVVVVVVisVijpaV52jdcRVWvtQP1y7p959/dD1nz4K6uxzO7/jFYlErKytKpVL/+l6hUFB7e7uqq6sdLCtfInlJDx4/rZvXr+j6VEp19Y/o3Mvvqj3xuutpOwrq7nI4v+MXi0VJUlNT033XNzc3lc1mD/yYEwqFdv0q1ZGjdTr30pgupG/ojY9+1amz5/X1pxd1+7fivm/z2+5KNx/W3+w8/MbGRklSPp+/7/r4+LhWV1cVj8ddzNo3xx46oehTr8jztnX3rzuu5+xZUHfvlfOjTiQSUSwWUzqdVn19vVpaWjQ7O6u5uTlJOvDwPc/b9TGlvK/9+8/f04nTXWqOPqOqI8e0duuGvv3sbT325At6uPnMvm/biYvdlW4+LM7DD4fDmpmZ0eDgoIaGhtTQ0KC+vj4NDw9rdHQ0cP/Y3v3zjr6ZSun2ekEKh1XX8KieeDapjuffdD1tR0HdXa6Q59OnaDKZ1PLysnK5nOspfAKrBHwCq0KLi4uBP9/Dv3wZ/sbGhvL5fOBeuEJwOD/j/5fa2lptbW25noH/MV/e8YGDRvgwifBhEuHDJMKHSYQPkwgfJvn2LQvAQeKOD5MIHyYRPkwifJhE+DCJ8GES4cMkwodJhA+TCB8mET5MInyYRPgwifBhEuHDJMKHSYQPkwgfJhE+TPobA1oaPFZSDzYAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 233.576x84.28 with 1 Axes>"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"circuit = QuantumCircuit(1)\n",
"circuit.s(0)\n",
"circuit.s(0)\n",
"circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"$U = \\begin{bmatrix} 1 & 0 \\\\ 0 & -1\\end{bmatrix}$"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"unitary = execute(circuit, backend=simulator).result().get_unitary()\n",
"display(\n",
" display_matrix(unitary, \"U\")\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We have just verified that $SS = Z$ and not $I$! The (true) inverse of $S$, $S^{\\dagger}$, is available in Qiskit. The matrix that represents the gate is:\n",
"$$\n",
"S = \\begin{bmatrix}1 & 0 \\\\ 0 & -i\\end{bmatrix}\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAL4AAABOCAYAAACe5qyEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAEXklEQVR4nO3af0jcdRzH8dednnpL24bmj3/auryzlE7x3NL1h5NgkwZBtKtsHAYu5ZCx9I8YkhBs3cD8o7EVxELNGAbGsfbPpCV61SSac8us4P6ZHja3zvpDZa4179tfGx1uuNPv1899fb8ecP98RXwdPD9fvnpaNE3TQCSMVfUAIhUYPonE8Ekkhk8iMXwSieGTSAyfRGL4JBLDJ5EYPonE8Ekkhk8iMXwSieGTSAyfRGL4JBLDJ5EYPonE8Ekkhk8iMXwSieGTSAyfRGL4JBLDJ5EYPonE8Ekkhk8ipaoeYAbvnFHzcz86sLbvV7F7rZvXC+/4JBLDJ5EYPonE8Ekkhk8iMXwSieHTiuaik/jm07dUz9AVwyeRkib8WCyGzs5OOJ1OZGRkoLS0FKFQCEVFRWhsbFQ9L2HXwxdx9sOXcLq5AJ80ZKK7xYGR/vdUz0rY8OeHcP7UG5gaH8BXx3bj5rXLqifpImk+uW1oaEAwGER7ezs8Hg9GRkZQV1eHaDSK1tZW1fMSMvnzAM6ffA0vHjyNp1vOAgBmI+OYm51SvGy56+GL+OnrDxCdvIJ/b8/D/nguina9iV3eYwCA3fUnMRedxI/B97GnqUftWB0lRfh9fX3o6enB8PAwqqurAQA1NTUYGxtDMBhEeXm54oWJGf/2Y2wv2wdX5ev3r+U5KpDnqFC4ajkzHVC9JcWjTiAQQG1t7f3o7yksLITNZoPb7Va0bHXsWU8gMnEBVwZO4O8/flc956H+f0BTUtOQkpqGPEcFnDtfVT3NcMrDn56exsTEBLxe77KvRSIRlJSUID09XcGy1av2nUDZ3sP47btufHGkBF2Ht+HXULfqWcuY5YAaISnCB4D8/Py464uLiwiFQoY/5lgslhVfiUqzZ+H5V9pxIHAVb5+6ge1l+zD42UHM/zWt+7a17H7UA5piy8DWgmfWZbPR7/ke5eHn5OQAAMLhcNz1jo4OzMzMwOPxqJilm02bc+HcuR+aFsPdO7dUz4nzqAf0sS352PHyEUUrjaE8fIfDAbfbjUAggN7eXgwODsLv96OrqwsADA9f07QVX4m4dO44pn65gDu3F6DFYvjz2hh++PJdbHtuL7YWuHTfptduvQ7oWjev13tW/lcdq9WK/v5+NDU1we/3Izs7G/X19WhubkZbW5vpfrG9+88tfH+mBfOzEcBqRVb2k3j2BR9K9xxSPS3OpXPHkftUBQqcVbClbUJ06uqqD6gZKQ8fAFwuF4aGhuKu+Xw+FBcXw263K1q1OlXeo6jyHlU9Y0VmOaBGSYrwH2R0dBSVlZWqZ2xYZjmgRlH+jP8gCwsLCIfDpvvgiswjKe/4mZmZWFpaUj2DNrCkvOMTGY3hk0gMn0Ri+CQSwyeRGD6JxPBJJIuW6H8zEW0AvOOTSAyfRGL4JBLDJ5EYPonE8Ekkhk8iMXwSieGTSAyfRGL4JBLDJ5EYPonE8Ekkhk8iMXwSieGTSAyfRGL4JNJ/oq3ajwP1SpEAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 233.576x84.28 with 1 Axes>"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"circuit = QuantumCircuit(1)\n",
"circuit.s(0)\n",
"circuit.sdg(0) # sdg = s dagger\n",
"circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"$U = \\begin{bmatrix} 1 & 0 \\\\ 0 & 1\\end{bmatrix}$"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"unitary = execute(circuit, backend=simulator).result().get_unitary()\n",
"display(\n",
" display_matrix(unitary, \"U\")\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Even though $S \\neq S^{\\dagger}$, $S^{3} = S^{\\dagger}$! The same would apply to $X, Y, Z$ and $H$ because $X^{2}=Y^{2}=Z^{2}=H^{2}=I$. Hence, $H^{3} = H = H^{\\dagger}$ for example."
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAARkAAABOCAYAAAAU7GLsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAENUlEQVR4nO3cT0jkZRzH8c8MmRi6Ubq7dqg2s5WQpsVZ2tgOgwQl7KnoD7aIhJsySNB46CAIHWoCD9JaHbQwEcRAGKpLC5ugW3kocdOVgrm0O04ZaR1S1m1b59ephWVDndGvzzzyfsFcfoPMZy5vfj7MTCgIgkAAYCTsegCA/Y3IADBFZACYIjIATBEZAKaIDABTRAaAKSIDwBSRAWCKyAAwRWQAmCIyAEwRGQCmiAwAU0QGgCkiA8AUkQFgisgAMEVkAJgiMgBMERkApogMAFNEBoApIgPAFJEBYIrIADBFZACYIjIATN3heoAP3hh187rvnd7Z37vY7eNmyc/dO928V7iTAWCKyAAwRWQAmCIyAEwRGQCmiAwAU0QGgCkiA8BU0XwYL5fLqa+vTwMDA1pcXFRdXZ36+/vV3t6uWCymwcFB1xPz8mv6W333+TtavnxR/1xbVdmBQ6o7+YpOvvi262mb8nG3j5slf3fnq2gi09bWplQqpZ6eHkWjUU1PT6u5uVnLy8vq6upyPS8vl+fO6cv3X9LTZz7Sw4nPJEkrmXn9tXLF8bLN+bjbx82Sv7sLURSRGRsb0/DwsCYnJxWLxSRJjY2Nmp2dVSqVUkNDg+OF+Zn/6kMdOXZKR598+ea1wzXHdbjmuMNVW/Nxt4+bJX93F6IozmSSyaSamppuBuY/tbW1KikpUSQScbSsMGUVB5VZOK+L587qz19+cj1n23zc7eNmyd/dhXB+J5PNZrWwsKBEInHbc5lMRvX19SotLXWwrHCxlrM6cPAh/XjhE10YTaji3vt14vm3VB971fW0Tfm428fNkr+7C+H8TiabzUqSqqurb7m+vr6uqakp83+VQqHQlo983VlWoRPP9eh08ge99sFvOnLslCY+PqPVP7K7vq3Ydvu42dfdO928V+/ZeWSqqqokSel0+pbrvb29WlpaUjQadTFr19x19yE98sQLCoKcbly/6nrOtvm428fNkr+7t8t5ZGpqahSJRJRMJjUyMqKJiQnF43ENDQ1JknlkgiDY8pGP7794V1cundf1a2sKcjn9/vOsvvn0TT342LO6576ju76t2Hb7uNnX3TvdvFfv2fmZTDgc1vj4uDo6OhSPx1VZWanW1lZ1dnaqu7vbu0PfG39f1dejCa2uZKRwWBWVD+jRp1r0+DOvu562KR93+7hZ8nd3oUJBvhneIy0tLZqbm9P8/LzrKfxaWx583Cz5uZtfxtuhmZkZ789jABRpZNbW1pROp737EB6A2zk/k/k/5eXl2tjYcD0DwC4oyjsZAPsHkQFgisgAMEVkAJgiMgBMERkApogMAFNF+7UCAPsDdzIATBEZAKaIDABTRAaAKSIDwBSRAWCKyAAwRWQAmCIyAEwRGQCmiAwAU0QGgCkiA8AUkQFgisgAMEVkAJgiMgBMERkApogMAFP/Am2q5yZl6vM8AAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 353.976x84.28 with 1 Axes>"
]
},
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"circuit = QuantumCircuit(1)\n",
"circuit.s(0)\n",
"#circuit.sdg(0)\n",
"circuit.s(0)\n",
"circuit.s(0)\n",
"circuit.s(0)\n",
"circuit.draw(output=\"mpl\")"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"$U = \\begin{bmatrix} 1 & 0 \\\\ 0 & 1\\end{bmatrix}$"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"unitary = execute(circuit, backend=simulator).result().get_unitary()\n",
"display(\n",
" display_matrix(unitary, \"U\")\n",
")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@TarekEl-Shahat
Copy link

good work

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment