Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Quantum Circuit Plotting with SymPy
{
"metadata": {
"name": "Sympy Circuit Plot"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": "# Quantum Circuit Plotting with SymPy\nRick Muller, rpmuller@gmail.com\n\nExplore what can and cannot be done using existing sympy circuit plotting. The initial aim will be to support everything that is on the [qasm2circ website](http://www.media.mit.edu/quanta/qasm2circ/). When you see a heading listing an example number, it will refer to the example circuit on that page.\n\nNote: The examples on this page will require *at least* the [development (i.e. github) branch of sympy](http://github.com/sympy/sympy), and may require work in my current branch (which changes from week to week). If you'd like to play with newer features, and the examples on this page aren't working for you, email me (rpmuller@gmail.com) and I can send you instructions for how to get these to work."
},
{
"cell_type": "code",
"collapsed": false,
"input": "from sympy import *\nfrom sympy.physics.quantum.circuitplot import CircuitPlot,labeller,Mz,CreateOneQubitGate\nfrom sympy.physics.quantum.gate import *\nfrom sympy.physics.quantum.qasm import Qasm",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Rough priorities of tasks\n* Stack multiple gates vertically\n* Block multiqubit gate\n* Latex matrices as gates\n* Do circuits resize correctly?\n\n## Qasm tests status\n1. Works\n2. Works\n3. Works\n4. Works\n5. Can't plot matrices as operators\n6. Works\n7. Works\n8. Works\n9. Works\n10. Multi-qubit blocks + classical lines\n11. Multi-qubit blocks\n12. Multi-qubit blocks\n13. Multi-qubit blocks (kinda works if you convert defbox->def by hand)\n14. Multi-qubit blocks \n15. D-shaped measurement\n16. D-shaped measurement + slash gate + vertical line gates\n17. D-shaped measurement"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## X gate test"
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(CNOT(1,0),2)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 2,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x103844f90>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAJ8AAACOCAYAAAAvkdreAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAABOVJREFUeJzt3U9IVGscxvFnRASbXZQzhTSroCgQJUxoJIlQaNbtWmbW\nxlUQ0aJlBElCokigkIi0nUVtjAKL/kKSOuJCgqGlKChStui9i8uVUqcuYT523u8HzmbODPwOfD1n\nfBfzpkIIQYBBlXsAxIv4YEN8sCE+2BAfbIgPNsQHG+KDDfHBhvhgQ3ywIT7YEB9siA82xAcb4oMN\n8cGG+GBDfLAhPtgQH2yIDzbEBxvigw3xwYb4YEN8sCE+2BAfbIgPNsQHG+KDDfHBhvhgE118y8vL\nmpqa0srKinuU6EUTXwhBN27cUCaT0alTp5TJZHTz5k3xk9Q+qVh+EHx0dFRdXV1aXV1dfy2dTmt4\neFjnz583ThavaOJraWnR69evN72ez+c1MTFhmAgV40ulUjs9CyJT8TtfCCFRx+3bt1VbW/vDNe7Z\ns0d37961zxbrEc1jd21tTYVCQa9evdLq6qrS6bTy+byKxaJqamrc40Upmvikf+/m7969U3Nzs96+\nfasTJ064R4paVPH9J5VKKcLL3nWiWefD7kN8sCE+2BAfbIgPNsQHG+KDDfHBhvhgQ3ywIT7YEB9s\niA82xAcb4oMN8cGG+GBDfLAhPtgQH2yIDzbEBxvigw3xwYb4YEN8sCE+2BAfbIgPNsQHG+KDDfHB\nhvhgQ3ywIT7YEB9siA82xAcb4oMN8cGG+GBDfLCJIr61tTWNjY2pra1NmUxGkpTNZnXmzBk9fPhQ\nX79+NU8Yp0THF0JQT0+PcrmchoaG1N3drcnJSUnS+/fvdeXKFQ0ODiqXy6m3t5f92HZYYjf++/bt\nmzo7O/XhwweNjIzoyJEj6+c2bvxXKpV04cIFNTc3q7+/X1VVif6b3DUSG9/Vq1f15s0bPX78WOl0\n+odzW+06ubKyoo6ODp0+fVq3bt3ayVGjlcj4pqam1NHRoenpae3du3fT+Upbni4sLOj48eN69uzZ\nD3dK/BmJfL709/fr8uXLW4b3M/v27dPFixc1MDDwhybD9xJ351teXlYul9PMzIwOHjy45Xt+ttlz\nuVxWY2OjyuXypsc1tlfi7nzPnz9XU1NTxfB+5dChQzp27Jhevny5zZNho8TFt7S0tL6W97vq6uq0\nuLi4TROhkoqP3VQqtdOzIDIV73whhL/yePLkiU6ePPnT9/zq+hobGzUxMWG/lqQfiXvs5vN5lctl\nlUql3/r85OSkFhYW1NLSss2TYaPExVdTU6POzs7fXi4ZGBhQV1eXqqurt3kybJS4pRZJ+vTpkxoa\nGvTixYstF4srLbXMzMyotbVVpVJJ2Wx2J0aNWuLufJJUX1+vO3fu6Ny5c/r48eP/+sz8/LwKhYLu\n3btHeDslJFhfX184cOBAGB0dDV++fFl//fvL/vz5c3jw4EHIZrNhcHDQMWa0Eh1fCCGMj4+Hs2fP\nhrq6unD9+vVQLBaDpFAsFsO1a9fC/v37Q3t7e3j69Kl71Ogk8jvfVubm5nT//n3Nzs7q0aNHKhQK\nOnr0qC5duqTDhw+7x4tSNPFh90nkPxz4OxAfbIgPNsQHG+KDDfHBhvhgQ3ywIT7YEB9siA82xAcb\n4oMN8cGG+GBDfLAhPtgQH2yIDzbEBxvigw3xwYb4YEN8sCE+2BAfbIgPNsQHG+KDDfHBhvhgQ3yw\nIT7YEB9siA82xAcb4oPNP9fJa3Lg9ZGkAAAAAElFTkSuQmCC\n",
"text": "<matplotlib.figure.Figure at 0x104db1e10>"
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(X(0),1)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x104dec090>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAGIAAABSCAYAAACv3wGjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAAtdJREFUeJzt2rFKI1EYxfHv3gTBwsIgRMTphKQShTyCjVgpIhZhwEZ9\nAPMMtnYRLMVCsNTaxsbSTgjIQCwsgqVNgmeLRVlXdo1mbnIyc36Qxqsf9/JnJmaIAwCTkfOj3oD8\nphAkFIKEQpBQCBIKQUIhSCgECYUgoRAkFIKEQpBQCBIKQUIhSCgECYUgoRAkFIKEQpBQCBIKQUIh\nSGQmRKlUMudckFepVAq+f5eVL5g55yzUUULOfpOZK2LcKQSJXITY3t62KIrMe2/ee4uiyE5PT9/X\n9/f339fK5bKtrq4Of5PIiK+O0uv1sLCwAO89Hh4ePqy9vr6iUqng+Pj4R7PTkIsrwsysUCjY7u6u\nAbCzs7MPawcHB3Z0dGR7e3sj2l3O/mvqdDo2Pz9vs7OzliSJmZkdHh5aFEVWr9cHmj2oYtDpZGZm\nZmx9fd3Oz8/t6urKnp6ebGJi4r8Rhib4zW9I+j3K9fU1nHOoVCpoNBqpzh5Erm5Nb6rVqrVaLUuS\nxKIoSnX2T/3zzTrU44JQr37d399boVAwAHZyctL33wXff/Brbkisj6M8Pj5ic3MT7XYbk5OTmJub\nQ6/XS2X2oHIT4vn5GRsbG+h0OgCAnZ0dOOdwcXEx8Ow05CLEy8sLtra2kCTJ+89ub2/hnMPKyspA\ns9OS+RDdbhdxHOPu7u7T2vLyMrz3aLVaP5qdpkx/sm6327a2tmZLS0u2uLj4aT2OYwNgzWZzBLv7\nS/DUQ/LnUS4vL1Gr1VAsFuG9R7lcxs3NzYffj+MYU1NT8N7De49arYZms/nl7FBy+TmCafabTN+a\nxolCkFAIEpl5+jo9Pf2tRx3fnR1aZt6sx51uTSQUgoRCkFAIEgpBQiFIKAQJhSChECQUgoRCkFAI\nEgpBQiFIKAQJhSChECQUgoRCkFAIEgpBQiFIKAQJhSChECQUgoRCkFAIEgpBQiFIKAQJhSChECQU\ngsQvZm2jeF2BKWgAAAAASUVORK5CYII=\n",
"text": "<matplotlib.figure.Figure at 0x104dcfa90>"
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Sympy now prints a normal X gate when it's a one-qubit gate, but the circ+ when it's a CNOT!"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Z gate test\n"
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(CPHASE(1,0),2)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x104e03d10>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAJ8AAACOCAYAAAAvkdreAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAAxhJREFUeJzt3a9KLGEAhvF3ThDGYfNWb8AgiAhuEEEQrFq8AatgNJhN\nYrFatBi9hQXxz2LRG/AWVias5Tvh4IHDweojfs8PvjLpHXjYGTbsNqWUEgnwix6gehmfMMYnjPEJ\nY3zCGJ8wxieM8QljfMIYnzDGJ4zxCWN8whifMMYnjPEJY3zCGJ8wxieM8QljfMIYnzDGJ4zxCWN8\nwhifMMYnjPEJY3zCGJ8wxieM8QljfMIYnzDVxTedTvP8/Jy3tzd6SvWqia+UkqOjowyHw6ytrWU4\nHOb4+Dj+JDWnqeUHwa+urrK/v5++7/9e67ouFxcX2d3dBZfVq5r4VldXc39//9/10WiU8XgMLNKn\n8TVN89VbVJlP3/lKKT/qnJycpG3bf+5xfn4+p6en+LZaTzWP3dlslu3t7dzd3aXv+3Rdl9FolJub\nm8zNzdHzqlRNfMmfT/PJZJKVlZU8Pj5meXmZnlS1quL70DRNKrztb6ea7/n0/RifMMYnjPEJY3zC\nGJ8wxieM8QljfMIYnzDGJ4zxCWN8whifMMYnjPEJY3zCGJ8wxieM8QljfMIYnzDGJ4zxCWN8whif\nMMYnjPEJY3zCGJ8wxieM8QljfMIYnzDGJ4zxCWN8whifMMYnjPEJY3zCGJ8wxieM8QljfMIYnzDG\nJ0xV8ZVS8vDwkCSZTCbwGlUT32w2y+bmZjY2NpIk6+vr2drayvv7O7ysXtXEd3Z2ltvb2/R9nyTp\n+z7j8Tjn5+fwsnpV8zf3i4uLeXl5+e/60tJSnp6egEX6NL6mab56iyrz6WO3lPKjzuXlZbqu++ce\nu67L9fU1vq3WU807397eXg4ODtK2bQaDQdq2zeHhYXZ2duhp1armne/DdDrN6+trFhYWMhgM6DlV\nqy4+fR/VPHb1/RifMMYnjPEJY3zCGJ8wxieM8QljfMIYnzDGJ4zxCWN8whifMMYnjPEJY3zCGJ8w\nxieM8QljfMIYnzDGJ4zxCWN8whifMMYnjPEJY3zCGJ8wxieM8QljfMIYnzDGJ4zxCWN8whifMMYn\njPEJY3zCGJ8wvwE1RQZX6PcgBAAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x104e12290>"
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(Z(0),1)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x104ecba90>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAGIAAABSCAYAAACv3wGjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAAtdJREFUeJzt2rFLanEYxvHnpxI4iHTAyaDVpX+gpYZcisSgpdH+gdbm\n/osggmgIonJKg4YmoVyaWiOpqaEiKOogvnfoXsHrvZXXc/XxnOcDLucHL698qePJnJkZZOhiw15A\nPigECYUgoRAkFIKEQpBQCBIKQUIhSCgECYUgoRAkFIKEQpBQCBIKQUIhSCgECYUgoRAkFIKEQpBQ\nCBKhCuF5Hpxzgb48zxvI7i5M/2DmnEPQb+d/zPyTUP1EjDKFIJEY9gKDcn9/j4mJCTSbTaTTaeRy\nOaTTaTjnAAD1eh2Pj484PDzE0tLS4Be0EPns7Wxvb5vneXZwcGCtVqvjrFwuWzwet7W1tZ5mBiky\nIZaXl+3s7Kzr+vn5uSWTSSsWiz3PDFIk7hG+7yMWi2F2drbj+vX1NQqFAqamprC3tzec5X6KxMfX\nm5sbNBoNzMzMtK89PDxgenoavu/j4uICmUymp5lBi0SI372/vyOfz+Pq6gq1Wg25XK7vmf2KzKem\nX8wMpVIJ9XodJycnn0YYqL/dPACM5Osr6+vr5pyz3d3db91EB7b7t7YZEV+F2NzcNOecbWxsdFx/\ne3uz09PTf5oZlMiEqFarlkgkrFQqdZ3t7+9buVzueWaQIhHi8vLSUqmUzc3NWbPZ7DpfXFy019fX\nnmYGLfTPEXd3d1hYWMDk5CSOjo4Qj8c7ziuVCgAgmUwOY722UId4fn7G/Pw8zAzHx8dIpVLts5eX\nF2xtbWFlZQXFYnGIW34I9XPE6uoqdnZ2kM1mkc1mAQCtVgtPT09oNBrwfR9jY2O4vb3VA12Q9MWQ\n9E0hSCgEiVD9rWl8fLz9jVuQMwchVDfrUaZfTSQUgoRCkFAIEgpBQiFIKAQJhSChECQUgoRCkFAI\nEgpBQiFIKAQJhSChECQUgoRCkFAIEgpBQiFIKAQJhSChECQUgoRCkFAIEgpBQiFIKAQJhSChECQU\ngsQP7FOjI42FrL0AAAAASUVORK5CYII=\n",
"text": "<matplotlib.figure.Figure at 0x104ecb610>"
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Making arbitrary gates:\n\nIt's pretty easy to overload single-qubit operators, and you can even specify fairly complicated LaTeX:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "VGate = CreateOneQubitGate('V')\nSqrtX = CreateOneQubitGate('sqrt-X','\\sqrt{X}')",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(SqrtX(0)*VGate(0),1)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 7,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x104ee3b10>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": "<matplotlib.figure.Figure at 0x104e66850>"
}
],
"prompt_number": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": "You can even make these controlled:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(CGate(1,SqrtX(0)),2)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 8,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x104e7d690>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAJ8AAACOCAYAAAAvkdreAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAABgdJREFUeJzt3T9oE30YwPHnfimFtnaIDgG1m5pNLQQRLOqgaMkglFqK\nQqAgVhEc1E6iLoKIxT8gpmDBQeKik3bopqCCxT8QXISKiNVJjdA20mLM8w5ifWtJm8SkzyX3/UCW\nu+Tu6eXrXSJ69VRVBTDgrAdAcBEfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAf\nzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAfzBAf\nzBAfzAQuvsnJSXn9+rVMTU1ZjxJ4gYlPVeX06dMSiURk27ZtEolE5Ny5c8Itqe14QbkheCqVkv7+\nfslms3PLWlpa5NatW7J//37DyYIrMPFt3bpVxsbGFizv6OiQx48fG0yEgvF5nrfcsyBgCn7mU9W6\nely8eFGamprm/YzNzc1y5coV89mC+gjMZXd2dlbi8bg8e/ZMstmstLS0SEdHh9y/f18aGxutxwuk\nwMQn8uts/uLFC9myZYs8f/5cYrGY9UiBFqj4fvM8TwL4Y/tOYP6eD/5DfDBDfDBDfDBDfDBDfDBD\nfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBD\nfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDBDfDDTYD3AYlauXCnfvn2ryrar9UtuwuGwZDKZ\nqmy73vj6bvS1eNf4WpzZCpddmCE+mPH1Z75Kcq56f848z5OfP39Wbfv1KjBnvs7OTpmZmZF8Pl/x\nB+GVJxDxjY6Oys6dO/kFfz4TiG+7+/btk1QqJStWrKjAVIvj227x6v7M9/TpU9m0adOyhIfS1P2Z\nr6enR5LJpKxatapCUy2OM1/x6vrMl06nZc2aNcsWHkpT1/FdvnxZTp48ueTzent7pa2tTZxz4pyT\ntrY2uX379tz6I0eOzK2LRCLS2dlZzbGDQ33sX8YbHx/XQ4cOFf38XC6n69atU+ecvnv3bt66fD6v\n0WhUh4aGltyOzw+pr9TtmW9wcFAGBgaKfn4oFJLDhw+LqkoqlZq37tSpU3L16lXp7++v9JiBVrPx\nTU9PF1z36dMnmZqakg0bNpS0zb6+PmlsbJTh4eG5ZRcuXJD29nbZu3dv2bOigEKnRBHxxeNv2WxW\nDxw4oMeOHSt4Oj9x4oS+evWqrEtBb2+vep6nIyMjOjw8rIODgyW93vp41dSjrHdomfwdXy6X0/Pn\nz+uZM2e0tbVVJycnF7zm69ev2tXVVfY+Hz58qJ7naTQa1YGBgX+eGYX5+kgVeiMzmYw2NzfrtWvX\nFqw7e/asPnr06J/2G41G1TmnHz58KPm1xFe8mvzMFw6H5eDBg3Ljxo15y6enp+Xly5eyY8eOsrf9\n5s0bCYVCoqpy8+bNfx0Vi7GufzGLjZdOp9XzPB0dHZ1bdunSJX3w4EHZ+/v48aN2d3frxMSENjU1\n6erVqzWXy1VsZszn6yO11Bu5fft2jcfjqqo6MzOje/bsKXtfmUxGu7q69MuXL6qq2tfXp57n6b17\n90raDvEVz9dHaqk38u7du+qc07dv3+rQ0JDeuXOnrP18//5de3p69P3793PLxsbG1PM83bVrV0Vn\nxh++PlJLvZG5XE7Xrl2rx48f1927d2s+ny95Hz9+/NBEIqHpdHrBuvb2dnXO6fj4eMVmxh81+YXj\nt1AoJEePHpXr169Ld3d3yf8dcmJiQuLxuGzevFk2bty4YH0ikRBVlWQyWamR8X/W9S+mmPE+f/6s\n69ev19nZ2aK3OzIyorFYTBsaGtQ5p5FIRJ88eTLvOYlEQltbW9U5p845jcVimkwmKzIzfqn7f8+3\n3GpxZis1fdlFbSM+mCE+mCE+mPH1HQvC4XDV7iZVLeFw2HqEmuHrb7uob1x2YYb4YIb4YIb4YIb4\nYIb4YIb4YIb4YIb4YIb4YIb4YIb4YIb4YIb4YIb4YIb4YIb4YIb4YIb4YIb4YIb4YIb4YIb4YIb4\nYIb4YIb4YIb4YIb4YIb4YIb4YOY//+8dU2zbIwsAAAAASUVORK5CYII=\n",
"text": "<matplotlib.figure.Figure at 0x104e79550>"
}
],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Unfortunately, there isn't a general way to make a block multi-qubit gate. You need to overload the plot_gate function, which I haven't. And, I guess you also have to make sure that all of the qubits are contiguous.\n\n**Todo** Create multi-qubit gate."
},
{
"cell_type": "code",
"collapsed": false,
"input": "class SqrtSWAP(TwoQubitGate):\n gate_name = 'sqrt-SWAP'\n gate_name_latex = u'\\sqrt{SWAP}'",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": "# This doesn't work:\n# CircuitPlot(SqrtSWAP(0,1),2)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 1: EPR Creation\n\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test1.png\" width=\"200\" />"
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(CNOT(1,0)*H(1),2,labels=labeller(2))",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 11,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x104ef0e50>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nFgkqlFaxxQAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x104e99310>"
}
],
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": "A couple of notes:\n\n* The top wire in a figure is the nth qubit in the circuit, not the 0-th or 1st.\n* The gates in a circuit are ordered left to right. In other words, the first gate to be applied is the left-most gate in the circuit.\n\nBoth of these make perfect sense from a physics point of view, but they may not be what you expect."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## qasm version:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "q = Qasm('qubit q0','qubit q1','h q0','cnot q0,q1')\nq.plot()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": "<matplotlib.figure.Figure at 0x104f219d0>"
}
],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Works, but note that I haven't implemented the subscripts in qasm parser yet. It's not hard to rewrite the labelling so that it sticks an underscore between the alphabetical characters and the numbers, but I don't want to limit the way the code works based on assumptions of use cases that I haven't fully thought through. In the meantime, if you stick underscores in the label names, these will work:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "q = Qasm('qubit q_0','qubit q_1','h q_0','cnot q_0,q_1')\nq.plot()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nFgkqlFaxxQAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x104f61610>"
}
],
"prompt_number": 13
},
{
"cell_type": "markdown",
"metadata": {},
"source": "You can also call the commands directly:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "q = Qasm()\nq.qubit('q_0')\nq.qubit('q_1')\nq.h('q_0')\nq.cnot('q_0','q_1')\nq.plot()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nFgkqlFaxxQAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x104f6ee90>"
}
],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 2: Teleportation Gate\n\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test2.png\" width=\"400\" />"
},
{
"cell_type": "code",
"collapsed": false,
"input": "circuit = CGate(2,Z(0))*CGate(1,X(0))*Mz(2)*Mz(1)*H(2)*CNOT(2,1)*CNOT(1,0)*H(1)\ncp = CircuitPlot(circuit,3,labels=labeller(3))",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nSUVORK5CYII=\n",
"text": "<matplotlib.figure.Figure at 0x104f7d890>"
}
],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": "# qasm version\nq = Qasm('qubit q_0','qubit q_1','qubit q_2','h q_1',\n 'cnot q_1,q_2','cnot q_0,q_1','h q_0',\n 'measure q_1','measure q_0',\n 'c-x q_1,q_2','c-z q_0,q_2')\nq.plot()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nSUVORK5CYII=\n",
"text": "<matplotlib.figure.Figure at 0x104fa6ad0>"
}
],
"prompt_number": 16
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 3: Swap Gate\n\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test3.png\" width=\"200\" />"
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(CNOT(1,0)*CNOT(0,1)*CNOT(1,0),2,labels=labeller(2))",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 17,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x104fae810>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n/wBlCPw07MzN4AAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x104f4edd0>"
}
],
"prompt_number": 17
},
{
"cell_type": "markdown",
"metadata": {},
"source": "#### qasm version:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "q = Qasm('qubit q_0','qubit q_1','cnot q_0,q_1','cnot q_1,q_0','cnot q_0,q_1')\nq.plot()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n/wBlCPw07MzN4AAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x104fc6110>"
}
],
"prompt_number": 18
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 4: QFT on 3 Qubits\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test4.png\" width=\"300\"/>"
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(SWAP(0,2)*H(0)* CGate((0,),S(1)) *H(1)*CGate((0,),T(2))*CGate((1,),S(2))*H(2),3,labels=labeller(3,'j'))",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 19,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x104f7de50>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAd0AAADFCAYAAAARzygsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHCdJREFUeJzt3X9QFPf9P/DnHhTBs+BpQS0NImgspkicaK0GQUSYimFM\nkWoZh4oGMVFSjNGZJOIoHRO1MVosMZpoaYNTa2EiOC1W/HEccP4oagVUkhqEir9APXuIHES4/f7h\nyFc+B3hwd7u3+nzM3Izu3r55vVnunrfv9+6eIIqiCCIiInI4ldwFEBERPS8YukRERBJh6BIREUmE\noUtERCQRhi4REZFEGLpEREQSYegSERFJhKFLREQkEYYuERGRRBi6REREEmHoEhERSYShS0REJBGG\nLhERkUQYukRERBJh6BIREUmEoUtERCQRhi4REZFEGLpEREQSYegSERFJhKFLREQkEYYuERGRRBi6\nREREEmHoEhERSYShS0REJBGGLhERkUQYukRERBKRPXTz8/Oxfft2ucuQzZAhQyAIgkMeQ4YMkbt7\nnezZT2fqF2D/fehs/SMi+xFEURTlLMBkMiE0NBTl5eVQqWT/DCA5QRDgqF3gyLb7yp61OFO/APvX\n42z9IyL7kT3lPDw8EB0djQMHDshdChERkUPJfqQLANevX0diYiKOHz8udymS45GuvG3ZA490icha\nVh/ppqWloaGhwSFF+Pr6Yvjw4Th37pxD2iciInIGVoduU1MTWltbe31OamoqQkJC+lVIWloatm3b\n1q9tn1VxcXEICQmBSqXCgAEDMHXqVCxZsgQAUFNTg+joaPj7+0OlUkGj0SA8PBxZWVkyV90/ra2t\n+PDDDxEbG4uEhATExcVh8+bNaG5uRmxsrNzl9UlVVRVUKhUGDx6MV199FbNmzcL06dOhUqng7u6O\nqKiozmVeXl5QqVT43//+J3fZRCQF0UpJSUliXV1dr8954403xN/85jfWNmkhLCxMvHHjRr+3V6Kn\n7YJTp06JgiCIq1ev7nb9xo0bRUEQxPz8/D63LaXearl9+7YYEhIi7ty5s8vyL774QvT39xcTEhKs\nbksO/7eeDz74QFy2bJnY1tbWuezixYuiIAhicnJyl+fW1dWJ3t7evbZHRM8Ou55ItXv3bmRmZvZ7\n+2XLluHTTz+1Y0XKV1JSAgCIiorqdr1Wq4WLiwumT58uYVX2lZiYiKioKCxdurTL8uTkZLi7u2Pm\nzJkyVdY/FRUVyMrKgpubW+cynU4HAJgxY0aX544cORKvvvqqpPURPQ9aWloslpnNZphMJhmq+f9k\nP3v5SfHx8SgsLERbW5vcpTgNnU4HNzc3hIaGWqx7+PAh9Ho9goOD4eXlJUN1tquqqsLhw4cRHx/f\n7frAwEBERkZKXFX//fvf/0ZERAQEQeiy/PGHp7CwsC7LRVHED37wA8nqI3oemEwmBAcH49ixY53L\nzGYzli9fjvfff1/GypwsdF1cXDB//nzk5OTIXYpTMJvN0Ov1mDRpEjw8PCzWl5eXo6WlxeKNXEmq\nq6sBAJcvX+52/ZQpUzBy5EgpS7LJzZs3sWDBAovlJSUlGDVqFHx9fbssb21tVdyRPJGz8/DwQHZ2\nNhISEnDs2LHOwK2srMRvf/tbWWtztbWByspK/OlPf8LNmzcxfPhwm0+GSklJwaxZs5CcnGxraYpX\nUVEBo9HY49CxVqsFAISHh0tYlX0FBQUBeDS18PXXX2PWrFmYPHkyXF0f/WmuWbNGzvL6LCYmxmLZ\nt99+i5s3b2LhwoUW6zw8PDB//nwpSiN6roSFhSEvLw/x8fGYPHkyDAYDDh06BE9PT3kLs3byt7sT\nqa5fvy6uWLFCFEVRvHDhgigIgnjhwgWbJ5rffPNN8ciRI/3aFoDiHj35/e9/LwqCIP70pz8Vf/7z\nn1s8hg4dKqpUKvHOnTuK+F30ZNWqVaIgCJ0PtVotJiYmigaDQRH9etrLaM+ePaIgCGJ2dnavz3Pm\n/vHBBx/2edh0pLtlyxZkZGQAeHQJC4AuJ4/Ywmw292s7UWE3Ffi/c39P0ul0cHV1hVarxcCBA7us\n6+jogKenJ4KCgjB06NAe23CW30dv/fz444+xYMEC5OfnQ6vV4vTp09i7dy/u3LmDwsLCbrdxln4B\nvfcN6Hk+tzfO1D8iJXpySPnEiRPw9vbGvn37ZD9HxKY53aVLl3YeqpeUlMDHxwdjxoyxqSCDwYDy\n8nJER0fb1I7SiaKI0tJShISEWAQuAJw9exYmk0nR87lPevnll7F+/XrodDrU1tYiMDAQhw8fRlNT\nk9yl2aykpAS+vr4ICAiQuxSi58KTgXvo0CEAQF5eXuccr5xsCt2xY8d2/ru4uNguc4u7du1CSkqK\nze0o3aVLl3D37l1Mmzat2/VlZWUAlD2fu3nz5m6XjxgxAosWLYIoiv0e8XAW165dQ11dXY/7kYjs\n77vvvoNare4yh/t4jre2tlbW2mw+kQoAjEYjKioqsHjx4s5lZ86cQU5ODiZOnAi9Xo/Vq1cjMDCw\n13ba29uxf/9+nDp1yh5lKdrjIcnuLhUCAL1eD6BvQ5bOpLm5GSdPnuxxvdFoRHBwMAYPHixhVfbX\nn6FlIrKNu7s7tmzZYrE8LCxM9teiXUK3rKwMHR0dnWfZtrW1IT4+HqdPn8awYcMQFBSEhIQE/Otf\n/+q1ndzcXMyePRvu7u72KEvRdDodBEHoNXRHjx6NESNGSFyZfZSWlqKyshKiKFrMiTY2NiI7Oxuf\nf/65TNXZz+PQVfKIBBHZj12u0y0uLoa3tzfGjRsH4NEbzaBBgzBs2DAAwCuvvILq6mrU1dX12s6O\nHTuQmppqj5IUzWw2Q6fTISAgAD4+Phbrq6ur0djY2GMgK8Hx48chCALeeuutLvO2V65cwWuvvYa0\ntDS8/vrrMlZoO7PZjGPHjmHIkCGdl0YR0fPNLke6xcXFXQ7Z6+rqupxRKwgCNBoNLl68CH9//27b\nOHnyJPz8/BR75GYPtbW1SElJQX19PRobG2EwGBAREYH4+HgsX74cBQUFyMzMRHV1NQRBQEFBAWbO\nnIl169Ypbs6woaEBZ8+exdGjRzF37lw8fPiwc4Rjw4YNij2Rzmw24xe/+AUePHiAq1evoqamBiqV\nClOmTIGXlxcWLlyIhIQEucskIpnYHLpNTU04f/58lwv/79y5Y3HGrbu7O+7fv99jO5mZmVi1apWt\n5SjaqFGjcOTIkR7Xz5kzB3PmzJGwIsf58ssvATy69WdPt4BUIpVKhYKCArnLICIn1afh5cdzb3l5\nefjPf/4DADh48CBEUezy9WuDBw+2uM6wubm5x3vM1tfX49atW5g4cWKfiiciIlKSPs/pVlVVYd68\necjJyYHRaERGRgbWrl3b5f64P/7xj3Hr1q3O/7e3t8NgMPR4D92srCzO5RIR0TOvz8PLAQEBiIyM\nhMFgQFJSEtLT0y3uKTtt2jTcvn0b9fX1eOGFF6DT6fDSSy91e+OMBw8eoKioCJs2bep/LxRMo9E8\n9Y5GtrTtLOzZT2fqF2D/fehs/SMi++lz6KrV6l7nHQHA1dUVOTk5+PDDDzF16lRotVrs37+/2+cW\nFRUhOTnZYcHj7AwGg9wlSMKafgqCoMjbH1q7D5XaPyKyH0G08l0gNzcXMTExUKvVjq6JnlPPeig9\n6/0jclbO9NqzOnSJHM2ZXhiO8Kz3j8hZOdNrz6m+xJ6IiOhZxtAlIiKSCEOXiIhIIgxdIiIiiTB0\niYiIJMLQJSIikghDl4iISCIMXSIiIokwdImIiCTC0CUiIpIIQ5eIiEgiDF0iIiKJMHSJiIgkwtAl\nIiKSCEOXiIhIIgxdIiIiiTB0iYiIJMLQJSIikghDl4iISCIMXSIiIokwdImIiCTC0CUiIpIIQ5eI\niEgiDF0iIiKJMHSJiIgkwtAlIiKSCEOXiIhIIgxdIiIiiTB0iYiIJCJ76Obn52P79u1yl0FERORw\ngiiKopwFmEwmhIaGory8HCqV7J8BSEaCIEDmP0eHUlr/hgwZgnv37jmsfY1GA4PB4LD2rWXPfjpL\nn6grZ3rtyZ5yHh4eiI6OxoEDB+QuhYiecO/ePYii6LCHIwO9L+zZT2fpEzkv2Y90AeD69etITEzE\n8ePH5S6FZORMn0YdQWn9c3S9zvL7sGcdztIn6sqZ9ovVR7ppaWloaGhwSBG+vr4YPnw4zp0755D2\niYiInIHVodvU1ITW1tZen5OamoqQkJB+FZKWloZt27b1a1siIiIlsOucbmtrK6ZPn96vbSdPnoyr\nV6/i5s2b9iyJiBwgLi4OISEhUKlUGDBgAKZOnYolS5YAAGpqahAdHQ1/f3+oVCpoNBqEh4cjKytL\n5qr7p7W1FR9++CFiY2ORkJCAuLg4bN68Gc3NzYiNjZW7PFIa0UpJSUliXV2dtU/vl7/+9a/imjVr\nHPozyHn14c9RkZTWv6fVe+rUKVEQBHH16tXdrt+4caMoCIKYn5/fr/al0lsdt2/fFkNCQsSdO3d2\nWf7FF1+I/v7+YkJCgtVtkXycab/Ifvbyk+Lj41FYWIi2tja5SyGJ3b59GwDw3XffyVwJWaukpAQA\nEBUV1e16rVYLFxeXfo9+OYPExERERUVh6dKlXZYnJyfD3d0dM2fOlKkyUiqnCl0XFxfMnz8fOTk5\ncpdCEmlra8OvfvUrvPDCCwAAb29v7Nu3T+aqyBo6nQ5ubm4IDQ21WPfw4UPo9XoEBwfDy8tLhups\nV1VVhcOHDyM+Pr7b9YGBgYiMjJS4KlI6m0O3srISK1euREJCAt555x2bC0pJScHu3bttboeU4b33\n3sPBgwc7RzeampqQnJyMCxcuyFwZ9cZsNkOv12PSpEnw8PCwWF9eXo6WlhaEhYXJUJ19VFdXAwAu\nX77c7fopU6Zg5MiRUpZEzwCbQvfGjRvIzs7G1q1bkZ6ejszMTFy8eNGmgjQaDSZMmICjR4/a1A4p\nwx//+EeYTKYuy9ra2pCdnS1TRWSNiooKGI3GHoeOtVotACA8PFzCquwrKCgIALBs2TKkp6dDr9ej\nvb29c/2aNWvkKo0UzNWWjbds2YKMjAwAj85YBAA3Nzfbq8KjT9L9IQiCXX4+yaejowNbt27F1q1b\n5S7F7p6Vv8/H87lFRUU4c+aMxfry8nIIgvDUI11n/n0EBwfj3XffxSeffIKPPvoIH330EQYOHIi4\nuDhkZmZCo9F0u50z9+l55iz7xabQXbp0KTw9PQE8ehH6+PhgzJgxNhVkMBhQXl6Ozz77rF/bi05y\n1xGyzi9/+Uvk5+d3OYJQq9U4ePAgZsyYIWNl9udMd8WxRm9vUjqdDq6urtBqtRg4cGCXdR0dHfD0\n9ERQUBCGDh3a689wht9Hb/38+OOPsWDBAuTn50Or1eL06dPYu3cv7ty5g8LCwm63cYY+UVfO9Nqz\naXh57Nixnf8uLi62y1DSrl27kJKSYnM7pAxZWVkYNWoUvv/972PQoEHw8PDAkiVLEBERIXdp1ANR\nFFFaWoqQkBCLwAWAs2fPwmQyKXo+90kvv/wy1q9fD51Oh9raWgQGBuLw4cNoamqSuzRSILucvWw0\nGlFRUWERuvfv30d8fDzq6+utaqe9vR379+/Hr3/9a3uURQowbNgwfP311/jqq6/whz/8AZWVldi2\nbZvTDAWRpUuXLuHu3buYNm1at+vLysoAKHs+d/Pmzd0uHzFiBBYtWgRRFPs9BUbPN5uGlx8rKytD\nR0dHl5Mq9uzZg2vXruGrr76yem4uNzcXs2fPhru7uz3KIoVQqVS83lFBHs/ndnepEADo9XoAUOyR\nbnNzM06ePNnjeqPRiODgYAwePFjCquhZYZfQLS4uhre3N8aNG9e57I033gCAzhOtrLFjxw787W9/\ns0dJROQgOp0OgiD0GrqjR4/GiBEjJK7MPkpLS1FZWQlRFC1GXBobG5GdnY3PP/9cpupI6ewyvFxc\nXGzzp9qTJ0/Cz89PsS9UoueB2WyGTqdDQEAAfHx8LNZXV1ejsbGxx0BWguPHj0MQBLz11ltd5m2v\nXLmC1157DWlpaXj99ddlrJCUzOYj3aamJpw/fx4LFy60qZ3MzEysWrXK1nKIyAFqa2uRkpKC+vp6\nNDY2wmAwICIiAvHx8Vi+fDkKCgqQmZmJ6upqCIKAgoICzJw5E+vWretx7tdZNTQ04OzZszh69Cjm\nzp2Lhw8fdk55bdiwAdHR0TJXSEpm9ZfYL1q0CBkZGfDz80NeXh7Gjx+PF198EXv37kVSUhJqamq6\nvTuLSqVCXV0d/Pz8emy7vr4eiYmJKC4u7ndHiJydM122YA1+ib28bZH9ONN+6fPwclVVFebNm4ec\nnBwYjUZkZGRg7dq1Nt0OLSsrC6mpqf3enoiISAn6HLoBAQGIjIyEwWBAUlIS0tPTsW7dul636e0T\nxoMHD1BUVIS5c+f2tRQiIiJF6fOcrlqtxpEjR576vL/85S8oKyuDIAh47733EBoaiuXLl1s8r6io\nCMnJybwuk8jJaDQah74ue7qNotTs2U9n6RM5L6vndHNzcxETEwO1Wu3omoieSc40r0R9x/2nXM60\n76wOXSKyjTO98KnvuP+Uy5n2nVN9iT0REdGzjKFLREQkEYYuERGRRBi6REREEmHoEhERSYShS0RE\nJBGGLhERkUQYukRERBJh6BIREUmEoUtERCQRhi4REZFEGLpEREQSYegSERFJhKFLREQkEYYuERGR\nRBi6REREEmHoEhERSYShS0REJBGGLhERkUQYukRERBJh6BIREUmEoUtERCQRhi4REZFEGLpEREQS\nYegSERFJhKFLREQkEYYuERGRRBi6REREEmHoEhERSYShS0REJBHZQzc/Px/bt2+XuwwiIiKHE0RR\nFOUswGQyITQ0FOXl5VCpZP8MQOQwgiBA5pcb2UBp+2/IkCG4d++eQ9rWaDQwGAwOadsRnGnfyZ5y\nHh4eiI6OxoEDB+QuhYjomXHv3j2IouiQh6PC/Hkg+5EuAFy/fh2JiYk4fvy43KUQOYwzfdqmvlPa\n/nNkvfxd9J/VR7ppaWloaGhwSBG+vr4YPnw4zp0755D2iYiInIHVodvU1ITW1tZen5OamoqQkJB+\nFZKWloZt27b1a1siIiIlsOucbmtrK6ZPn96vbSdPnoyrV6/i5s2b9iyJiIj+j7i4OISEhEClUmHA\ngAGYOnUqlixZAgCoqalBdHQ0/P39oVKpoNFoEB4ejqysLJmrfjZYPae7aNEirF+/HiNHjnRYMfv3\n70dVVRU2bNjgsJ9BJBdnmleivlPa/ntavadPn8aUKVOwatUq/O53v7NYv2nTJnzwwQc4cOAA5syZ\n06e2nY0z1Sv72ctPio+PR2FhIdra2uQuhchuTCZT59n5t2/flrka6qsrV67gz3/+MwCgo6ND5mrs\np6SkBAAQFRXV7XqtVgsXF5d+j17KSRRF7Nu3D2azucvyuro6lJaWylTVI04Vui4uLpg/fz5ycnLk\nLoXILs6dOwdfX18sXLgQAODn58e/bwV5//338dJLLyE1NRUAMGbMGNy4cUPmquxDp9PBzc0NoaGh\nFusePnwIvV6P4OBgeHl5yVCdbdra2rBz504kJyd3Bm9dXR0iIiJQVVUla202h25lZSVWrlyJhIQE\nvPPOOzYXlJKSgt27d9vcDpHcRFHE3Llzce/ePdy/fx/Ao/MeUlJS0NjYKHN19DR6vR7bt29Ha2sr\nmpubAQD19fV48803Za7MdmazGXq9HpMmTYKHh4fF+vLycrS0tCAsLEyG6mzn7u6OwsJC1NTUIDk5\nGQAQERGBlStXYtmyZbLWZlPo3rhxA9nZ2di6dSvS09ORmZmJixcv2lSQRqPBhAkTcPToUZvaIZJb\nTU1Nt+Hq6uqKf/7znzJURH2Rm5sLk8nUZVl7ezsOHTrkNPOD/VVRUQGj0djj0LFWqwUAhIeHS1iV\nfanVahQWFnZm0ooVK/D222/LXBXgasvGW7ZsQUZGBoBHbzAA4ObmZntVgMVYvLUEQbDLzydylObm\nZixcuLBzyJmUpb29XfG3rH08n1tUVIQzZ85YrC8vL4cgCL0e6SrtvXbFihVYsWKF3GXYFrpLly6F\np6cngEc70cfHB2PGjLGpIIPBgPLycnz22Wf92l7pn0Dp2TJlyhScOXMG7e3tncu8vLxw/fp1qNVq\nGSujp/nmm28wYcKELke77u7uWLRoEXbs2CFjZdbpLRR1Oh1cXV2h1WoxcODALus6Ojrg6emJoKAg\nDB06tMc2nP299vEc7sqVK7F48WLExMQgMDAQu3fvlvVDk00/eezYsZ3/Li4utstQxK5du5CSkmJz\nO0TO4MCBA3jllVfg7u4OtVqNH/3oRygqKmLgKsDYsWPx5ZdfYvDgwRg0aBAGDBiA2bNn45NPPpG7\nNJuIoojS0lKEhIRYBC4AnD17FiaTSbHzucCjKwYiIyOxcuVKvP32251DzTU1NVizZo2stdl0pPuY\n0WhERUUFFi9e3Lns9OnT0Ov1aGpqwokTJ5Cenv7Undje3o79+/fj1KlT9iiLSHbDhw/HqVOncPXq\nVbS0tGDs2LGKG5Z7nsXHx2POnDn45ptv4OPjAx8fH7lLstmlS5dw9+5dJCYmdru+rKwMgLLncz08\nPPD3v/8dQUFBncseB+/du3dlrMxOoVtWVoaOjo7OSfmWlhbk5+dj48aNAIC8vDzMmjULly9fxg9/\n+MMe28nNzcXs2bPh7u5uj7KInIafn5/cJVA/fe9738NPfvITucuwm8fzud1dKgQ8OmsbgKKPdAF0\nCdzH1Gq17KNMdhnYLi4uhre3N8aNGwcA+Pbbb7F582ZcuXIFABAdHQ2TyYQTJ0702s6OHTs6r4cj\nIiL70+l0EASh19AdPXo0RowYIXFlzwe7he6Tn4rGjx+PEydOICAgAABw7do1AOj1JKuTJ0/Cz8+P\nO5qIyEHMZjN0Oh0CAgK6HSqvrq5GY2Njj4FMtrM5dJuamnD+/HmL8f+f/exnnf/euHEj3n333V6/\ngSgzM9MuN9cgIqKuamtrERUVhXHjxqGxsRFXr15FREQEPv30UwBAQUEBZsyYgRkzZkAQBBQUFGDm\nzJmy3zLxWdSnOd3HJ4Dk5eVh/PjxePHFF3Hw4EGIoojY2Nhut9mzZw98fX2xadOmHtutr6/HrVu3\nMHHixL6UQ0REVhg1ahSOHDnS4/o5c+ZYfKkBOUafj3Srqqowb9485OTkwGg0IiMjA2vXru3224f+\n8Y9/QKVSYdOmTWhra8N///vfbtvMysriXC4RET3z+hy6AQEBiIyMhMFgQFJSEtLT07Fu3TqL5+l0\nOjQ0NCAmJga3bt1CYWFht9+V++DBAxQVFWHu3Ln96wEREZFC9PmSIbVa3eswBfDoq7BiY2M7bxIO\nPBqaNhqNFs8tKipCcnIyr10kIrIjjUbjsPdVjUbjkHafB1Z/iX1ubi5iYmJkv8aJiIhIqawOXSIi\nIrKNsr8qg4iISEEYukRERBJh6BIREUmEoUtERCQRhi4REZFEGLpEREQSYegSERFJhKFLREQkEYYu\nERGRRBi6REREEmHoEhERSYShS0REJBGGLhERkUQYukRERBJh6BIREUmEoUtERCQRhi4REZFEGLpE\nREQSYegSERFJhKFLREQkEYYuERGRRBi6REREEmHoEhERSYShS0REJBGGLhERkUQYukRERBJh6BIR\nEUmEoUtERCQRhi4REZFEGLpEREQSYegSERFJhKFLREQkEYYuERGRRP4fwerIlYbtu8AAAAAASUVO\nRK5CYII=\n",
"text": "<matplotlib.figure.Figure at 0x104f47bd0>"
}
],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": "# qasm version:\nq = Qasm(\"def\tc-S,1,'S'\",\n \"def\tc-T,1,'T'\",\n \"qubit\tj0\",\n \"qubit\tj1\",\n \"qubit\tj2\",\n \"h\tj0\",\n \"c-S\tj1,j0\",\n \"c-T\tj2,j0\",\n \"nop\tj1\",\n \"h\tj1\",\n \"c-S\tj2,j1\",\n \"h\tj2\",\n \"swap\tj0,j2\")\nq.plot()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAd0AAADFCAYAAAARzygsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHPdJREFUeJzt3XtQVOf9BvDnLKhcEnG1eBlaRNTgJYhO4ngJAVFhKsYx\nAlUZS8UUsV5SvMSZJuIonWh+NiqDQatNWtpiahSnouOg4gVWoWpRE6SKVhGiUSPGVQi4ILDv7w+H\nrbgLLuzuOXvk+cwwA+fd8/I9HHafPe97zllJCCFAREREDqdRugAiIqLOgqFLREQkE4YuERGRTBi6\nREREMmHoEhERyYShS0REJBOGLhERkUwYukRERDJh6BIREcmEoUtERCQThi4REZFMGLpEREQyYegS\nERHJhKFLREQkE4YuERGRTBi6REREMmHoEhERyYShS0REJBOGLhERkUwYukRERDJh6BIREcmEoUtE\nRCQThi4REZFMGLpEREQyYegSERHJhKFLREQkE8VDNzs7G1u2bFG6DMX07NkTkiQ55Ktnz55Kb56J\nPbfTmbYLsP8+dLbtIyL7kYQQQskCDAYDgoODUVRUBI1G8fcAspMkCY7aBY7su73sWYszbRdg/3qc\nbfuIyH4UTzl3d3dERERg3759SpdCRETkUIof6QLA7du3ERcXhxMnTihdiux4pKtsX/bAI10ispbV\nR7pJSUm4d++eQ4rw8fFB3759ceHCBYf0T0RE5AysDt3q6mrU1dW1+ZglS5YgKCjI9PPVq1cRHR2N\n5cuXY8WKFZg7dy4qKystrpuUlITU1FRry+kUoqKiEBQUBI1Gg27dumH8+PGYP38+AKCsrAwRERHw\n8/ODRqOBVqtFaGgo0tPTFa66Y+rq6rBu3TpMmzYNsbGxiIqKwoYNG1BTU4Np06YpXV67lJSUQKPR\noEePHnjrrbcwZcoUTJgwARqNBm5ubggPDzct8/LygkajwaNHj5Qum4jkIKwUHx8vKioq2nzMr3/9\na/Hb3/5WCCHEo0ePhI+Pj/jyyy9N7evXrxevv/66ePLkicX1Q0JCxJ07d6wt6aXwol1w5swZIUmS\nWLlypcX2Tz75REiSJLKzs9vdt5zaquX+/fsiKChIbN++vcXyzz//XPj5+YnY2Fir+1LC8/V89NFH\nYtGiRaK+vt607NKlS0KSJJGQkNDisRUVFcLb27vN/ojo5WHXE6m++OILpKWlAQD+8Ic/oLGxEbNn\nzza1/+Y3v8HVq1fx5z//2eL6ixYtwtatW+1ZkuqdPHkSABAeHm6xPS8vDy4uLpgwYYKMVdlXXFwc\nwsPDsWDBghbLExIS4ObmhsmTJytUWccUFxcjPT0dXbt2NS3T6XQAgIkTJ7Z4bP/+/fHWW2/JWh9R\nZ/D48WOzZUajEQaDQYFq/sdhZy9nZWVhzJgxLS4D0mq1GDJkCLKysiyuExMTg5ycHNTX1zuqLNXR\n6XTo2rUrgoODzdoaGhpQWFiIwMBAeHl5KVCd7UpKSnDkyBHExMRYbB84cCAmTZokc1Ud9/XXXyMs\nLAySJLVY3vzmKSQkpMVyIQR+8pOfyFYfUWdgMBgQGBiI48ePm5YZjUYsXrwYH374oYKVOSh0f/zx\nR1y/fh2+vr5mbf369cP58+ctrufi4oJZs2YhMzPTEWWpjtFoRGFhIUaPHg13d3ez9qKiIjx+/Njs\nhVxNSktLAQDXrl2z2D5u3Dj0799fzpJscvfuXcyZM8ds+cmTJzFgwAD4+Pi0WF5XV6e6I3kiZ+fu\n7o6MjAzExsbi+PHjpsC9ePEifv/73ytam6utHVy8eBF//etfcffuXfTt2xepqan49ttvAQDdu3c3\ne7ynpyeqq6vR0NCALl26mLUnJiZiypQpSEhIsLU01SsuLkZVVVWrQ8d5eXkAgNDQUBmrsq+hQ4cC\neDq1cOXKFUyZMgVjxoyBq+vTf81Vq1YpWV67RUZGmi27fv067t69i7lz55q1ubu7Y9asWXKURtSp\nhISEYO/evYiJicGYMWOg1+tx6NAhi7kkJ5tC986dO8jIyEBqaiouXbqEwMBAJCQkoLq6GgBazGk1\n8/T0BAA8evQI3t7eZu1arRajRo3CsWPHOnQE8Pywnpo1D0nm5ubi3LlzZu1FRUWQJKnNI11n/3sE\nBgZixYoV2LRpE9avX4/169fDw8MDUVFRSEtLg1artbies2/Xs5r3Y3veHKlp+4ic3cGDBwHAKabh\nbArdjRs3IiUlBcDTS1iAp0Hr4uICwPILR0NDAwCgqampzb6NRmOHahIqu6lAWy+uOp0Orq6uyMvL\ng4eHR4u2pqYmdO/eHUOHDkWvXr1a7cNZ/h5tbeenn36KOXPmIDs7G3l5eTh79ix27tyJH374ATk5\nORbXcZbtAl4ckK3N57bFmbaPSI2eHVL+17/+BW9vb+zatUvxc0RsmtNdsGCB6VD95MmT6N27NwYP\nHmzxCLZZbW0tJEnCq6++arFdr9ejqKgIERERtpSmekIInDp1CkFBQWaBCwDnz5+HwWBQ9Xzus0aO\nHIm1a9dCp9OhvLwcAwcOxJEjR0yjJmp28uRJ+Pj4wN/fX+lSiDqFZwP30KFDAIC9e/ea5niVZFPo\nBgQEmL7Pz883DZ/16dMHkiTh4cOHZuvU1taiR48epmHm5+3YsQOJiYm2lPVSuHz5Mh48eIC3337b\nYntBQQEAdc/nbtiwweLyfv36Yd68eRBCdHjEw1l89913qKioaHU/EpH9PXnyBJ6eni3mcJvneMvL\nyxWtzeYTqQCgqqoKxcXFeO+99wA8nbcdNWoUbt68afbY69evY+TIkRb7aWxsxO7du3HmzBl7lKVq\nzUOSli4VAoDCwkIA7RuydCY1NTU4ffp0q+1VVVUIDAxEjx49ZKzK/joytExEtnFzc8PGjRvNloeE\nhCj+XLTLJUMFBQVoampqcZbt1KlTcfbs2RaPKysrw3fffdfqNZlZWVmYOnUq3Nzc7FGWqul0OkiS\n1GboDho0CP369ZO5Mvs4deoULl68aHHusrKyEhkZGabzBdSsIydREdHLyy6hm5+fD29vbwwbNsy0\nbOHChaitrcXOnTtNyz777DMMHz7cdP/g523btg1LliyxR0mqZjQaodPp4O/vj969e5u1l5aWorKy\nstVAVoMTJ05AkiQsXLiwxbztjRs38M477yApKQnvvvuughXazmg04vjx4+jZs6fp0igi6tzsMryc\nn59vdsjet29f5OfnY9WqVbhw4QJ+/PFHPHz4EIcPHzZdg/ms06dPw9fXV7VHbvZQXl6OxMRE3Lp1\nC5WVldDr9QgLC0NMTAwWL16M/fv3Iy0tDaWlpZAkCfv378fkyZOxZs0a1c0Z3rt3D+fPn8exY8cQ\nHR2NhoYG0wjHxx9/rNoT6YxGI2bMmIHa2lrcvHkTZWVl0Gg0GDduHLy8vDB37lzExsYqXSYRKcTq\nz9OdN28e1q5da3Z3oOrqavTq1Qupqak2HaXOnj0bH3zwAd58880O96FG/DxdZfuyB36eLpFzc6bn\nVLuGl5uvR9y7dy/++9//AgAOHDgAIYRNH79269YtfP/9950ucImIqHNp95xuSUkJZs6ciczMTFRV\nVSElJQWrV6+26f646enpnMslIqKXXrvndP39/TFp0iTo9XrEx8cjOTnZ4j1lrVVbW4vc3Fz83//9\nX4f7UDOtVuuwW/61dgtFJdhzO51puwD770Nn2z4isp92h66npyeOHj1qtwJyc3ORkJDQae81q9fr\nlS5BFtZspzPNu7SHtftQrdtHRPZjdehGRka2eY/fjpoxY4bd+yQiInJGVp+9TORoL/uR4Mu+fUTO\nypmeew75EHsiIiIyx9AlIiKSCUOXiIhIJgxdIiIimTB0iYiIZMLQJSIikglDl4iISCYMXSIiIpkw\ndImIiGTC0CUiIpIJQ5eIiEgmDF0iIiKZMHSJiIhkwtAlIiKSCUOXiIhIJgxdIiIimTB0iYiIZMLQ\nJSIikglDl4iISCYMXSIiIpkwdImIiGTC0CUiIpIJQ5eIiEgmDF0iIiKZMHSJiIhkwtAlIiKSCUOX\niIhIJgxdIiIimTB0iYiIZKJ46GZnZ2PLli1Kl0FERORwkhBCKFmAwWBAcHAwioqKoNEo/h6AFCRJ\nEhT+d3QotW1fz5498fDhQ4f1r9VqodfrHda/tey5nc6yTdSSMz33FE85d3d3REREYN++fUqXQkTP\nePjwIYQQDvtyZKC3hz2301m2iZyX4ke6AHD79m3ExcXhxIkTSpdCCnKmd6OOoLbtc3S9zvL3sGcd\nzrJN1JIz7Rerj3STkpJw7949hxTh4+ODvn374sKFCw7pn4iIyBlYHbrV1dWoq6tr8zFLlixBUFCQ\n2fLHjx9jxIgRba6blJSE1NRUa8shIiJSHbvO6dbV1WHChAktlhUVFSE0NBSXLl1qc90xY8bg5s2b\nuHv3rj1LIiIHiIqKQlBQEDQaDbp164bx48dj/vz5AICysjJERETAz88PGo0GWq0WoaGhSE9PV7jq\njqmrq8O6deswbdo0xMbGIioqChs2bEBNTQ2mTZumdHmkNsJK8fHxoqKiwtqHi9LSUjF16lQRHx8v\nxo4dKzQazQvX+eqrr8SqVaus/h30cmnHv6MqqW37XlTvmTNnhCRJYuXKlRbbP/nkEyFJksjOzu5Q\n/3Jpq4779++LoKAgsX379hbLP//8c+Hn5ydiY2Ot7ouU40z7xWFnLw8ZMgQHDx5ERkYGAgICrJrE\njomJQU5ODurr6x1VFjmp+/fvAwCePHmicCVkrZMnTwIAwsPDLbbn5eXBxcXFbPRLTeLi4hAeHo4F\nCxa0WJ6QkAA3NzdMnjxZocpIrRS/ZOhZLi4umDVrFjIzM5UuhWRSX1+P2bNn42c/+xkAwNvbG7t2\n7VK4KrKGTqdD165dERwcbNbW0NCAwsJCBAYGwsvLS4HqbFdSUoIjR44gJibGYvvAgQMxadIkmasi\ntbM5dC9evIjly5cjNjYWy5Yts7mgxMREfPHFFzb3Q+rwu9/9DgcOHDCNblRXVyMhIQH/+c9/FK6M\n2mI0GlFYWIjRo0fD3d3drL2oqAiPHz9GSEiIAtXZR2lpKQDg2rVrFtvHjRuH/v37y1kSvQRsCt07\nd+4gIyMDmzdvRnJyMtLS0l54wtSLaLVajBo1CseOHbOpH1KHv/zlLzAYDC2W1dfXIyMjQ6GKyBrF\nxcWoqqpqdeg4Ly8PABAaGipjVfY1dOhQAMCiRYuQnJyMwsJCNDY2mtpXrVqlVGmkYq62rLxx40ak\npKQAeHrGIgB07drV9qrw9J10R0iSZJffT8ppamrC5s2bsXnzZqVLsbuX5f+zeT43NzcX586dM2sv\nKiqCJEkvPNJ15r9HYGAgVqxYgU2bNmH9+vVYv349PDw8EBUVhbS0NGi1WovrOfM2dWbOsl9sCt0F\nCxage/fuAJ4+CXv37o3BgwfbVJBer0dRURH++Mc/dmh9a07YIufxi1/8AtnZ2S2OIDw9PXHgwAFM\nnDhRwcrsz5nuimONtl6kdDodXF1dkZeXBw8PjxZtTU1N6N69O4YOHYpevXq1+Tuc4e/R1nZ++umn\nmDNnDrKzs5GXl4ezZ89i586d+OGHH5CTk2NxHWfYJmrJmZ57Ng0vBwQEmL7Pz8+3y1DSjh07kJiY\naHM/pA7p6ekYMGAAXn31Vbzyyitwd3fH/PnzERYWpnRp1AohBE6dOoWgoCCzwAWA8+fPw2AwqHo+\n91kjR47E2rVrodPpUF5ejoEDB+LIkSOorq5WujRSIbucvVxVVYXi4mKbQ7exsRG7d+/Gr371K3uU\nRSrQp08fXLlyBf/85z/x2Wef4eLFi0hNTXWaoSAyd/nyZTx48ABvv/22xfaCggIA6p7P3bBhg8Xl\n/fr1w7x58yCE6PAUGHVuNg0vNysoKEBTU1Ob1+NZ8yKalZWFqVOnws3NzR5lkUpoNBpe76gizfO5\nli4VAoDCwkIAUO2Rbk1NDU6fPt1qe1VVFQIDA9GjRw8Zq6KXhV1CNz8/H97e3hg2bJjF9rq6Oggh\nYDAYLF5e0Gzbtm3Ys2ePPUoiIgfR6XSQJKnN0B00aBD69esnc2X2cerUKVy8eBFCCLODhcrKSmRk\nZOBPf/qTQtWR2tlleDk/P9/sXe39+/fx85//HIGBgdizZw8kSUL//v0xceJE/OMf/zDr4/Tp0/D1\n9VXtE5WoMzAajdDpdPD390fv3r3N2ktLS1FZWdlqIKvBiRMnIEkSFi5c2GLe9saNG3jnnXeQlJSE\nd999V8EKSc1sPtKtrq7GN998g7lz57ZY7u3tjcOHD1vdT1paGj744ANbyyEiBygvL0diYiJu3bqF\nyspK6PV6hIWFISYmBosXL8b+/fuRlpaG0tJSSJKE/fv3Y/LkyVizZk2rc7/O6t69ezh//jyOHTuG\n6OhoNDQ0mKa8Pv74Y0RERChcIamZ1R9iP2/ePKSkpMDX1xd79+7FiBEj8Nprr2Hnzp2Ij49HWVlZ\nh+/OcuvWLcTFxSE/P79D6xOpgTNdtmANfoi9sn2R/TjTfmn38HJJSQlmzpyJzMxMVFVVISUlBatX\nr7bpdmjp6elYsmRJh9cnIiJSg3aHrr+/PyZNmgS9Xo/4+HgkJydjzZo1HS6gtrYWubm5iI6O7nAf\nREREatDuOV1PT08cPXrUbgXk5uYiISGB12USORmtVuvQ52Vrt1GUmz2301m2iZyX1XO6WVlZiIyM\nhKenp6NrInopOdO8ErUf9596OdO+szp0icg2zvTEp/bj/lMvZ9p3TvUh9kRERC8zhi4REZFMGLpE\nREQyYegSERHJhKFLREQkE4YuERGRTBi6REREMmHoEhERyYShS0REJBOGLhERkUwYukRERDJh6BIR\nEcmEoUtERCQThi4REZFMGLpEREQyYegSERHJhKFLREQkE4YuERGRTBi6REREMmHoEhERyYShS0RE\nJBOGLhERkUwYukRERDJh6BIREcmEoUtERCQThi4REZFMGLpEREQyYegSERHJhKFLREQkE4YuERGR\nTBQP3ezsbGzZskXpMoiIiBxOEkIIJQswGAwIDg5GUVERNBrF3wMQOYwkSVD46UY2UNv+69mzJx4+\nfOiQvrVaLfR6vUP6dgRn2neKp5y7uzsiIiKwb98+pUshInppPHz4EEIIh3w5Ksw7A8WPdAHg9u3b\niIuLw4kTJ5QuhchhnOndNrWf2vafI+vl36LjrD7STUpKwr179xxShI+PD/r27YsLFy44pH8iIiJn\nYHXoVldXo66urs3HLFmyBEFBQaaf//3vfyM6OhqRkZEYMWIEEhIScOfOHYvrJiUlITU11dpyiIiI\nVMeuc7p1dXWYMGECAODChQtYvXo1MjIykJOTg9OnT+PatWsYNWoUvv32W7N1x4wZg5s3b+Lu3bv2\nLImIiJ4TFRWFoKAgaDQadOvWDePHj8f8+fMBAGVlZYiIiICfnx80Gg20Wi1CQ0ORnp6ucNUvCWGl\n+Ph4UVFRYe3DRWRkpCgrK2ux7OuvvxaSJInZs2dbXOerr74Sq1atsvp3EKlJO55u5ITUtv9eVO+Z\nM2eEJEli5cqVFts/+eQTIUmSyM7ObnffzsaZ6nXY2cs6nQ5hYWG4f/++adnIkSPh5eWF48ePW1wn\nJiYGOTk5qK+vd1RZRLIzGAyms/OffT6QOty4cQN/+9vfAABNTU0KV2M/J0+eBACEh4dbbM/Ly4OL\ni4tp9FJNhBDYtWsXjEZji+UVFRU4deqUQlU95bDQ9ff3R2VlJR4/ftxiebdu3WAwGCyu4+Liglmz\nZiEzM9NRZRHJ6sKFC/Dx8cHcuXMBAL6+vvz/VpEPP/wQw4cPx5IlSwAAgwcPbvW8FLXR6XTo2rUr\ngoODzdoaGhpQWFiIwMBAeHl5KVCdberr67F9+3YkJCSYgreiogJhYWEoKSlRtjhrD4lbG14uLi4W\ny5YtE7NnzxZLly41La+trRX37t1r8djbt28LSZLExIkTW/09er1ejBkzxtqyiJyW0WgUfn5+AkCL\nLzc3N7PnBjmfgoIC4eHh0WLfubq6imnTpildmlXaenlvamoSPXr0EMHBwRbbCwsLhSRJIikpqd19\nO4uamhoREhIi5s2bJwAIPz8/sWXLFqXLsm14+c6dO8jIyMDmzZuRnJyMtLQ0XLp0CQDg4eGB3r17\nt3j8li1boNFosG7dulb71Gq1GDVqFI4dO2ZLaUSKKysrQ2VlpdlyV1dXHD58WIGKqD2ysrLMRuUa\nGxtx6NAhp7nms6OKi4tRVVXV6tBxXl4eACA0NFTGquzL09MTOTk5pkxaunQp3n//fYWrAlxtWXnj\nxo1ISUkB8PQFBgC6du1q8bHXr1/H1q1b8dFHH2Hs2LEv7Pv5sXhrSZLUofWI5FJTU4O5c+eahpxJ\nXRobG1V/y9rm+dzc3FycO3fOrL2oqAiSJCEkJKTVPtT2Wrt06VIsXbpU6TJsG16+cuWK6fsVK1aI\nPn36WFy3rq5OjB49WqxYseKFv+fBgwfijTfesLYsIqc2duxY4erq2mKI0svLS9TU1ChdGr3AlStX\nhLu7u9nUwMKFC5UuzSptvbzPmDFDdOnSRdTW1pq1NTY2Cg8PDzF8+PAO9e0sysvLTUPKzw41NzU1\nKVqXTW/XAgICTN/n5+dbHIoQQmDevHmIjIzExo0bX9jnjh07kJiYaEtZRE5j3759eOONN+Dm5gZP\nT0/89Kc/RW5uLjw9PZUujV4gICAAf//739GjRw+88sor6NatG6ZOnYpNmzYpXZpNhBA4deoUgoKC\n4OHhYdZ+/vx5GAyGNo9ynZ3BYMCkSZOwfPlyvP/++6ah5rKyMqxatUrR2mwaXm5WVVWF4uJivPfe\ne2Ztq1evxvDhw1tsaGZmJuLi4swe29jYiN27d+PMmTP2KItIcX379sWZM2dw8+ZNPH78GAEBAaob\nluvMYmJiMH36dFy9ehW9e/c2O09FjS5fvowHDx5YfA0GgIKCAgDqns91d3fHwYMHMXToUNOy5uB9\n8OCBgpXZ6ZKhgoICNDU1mU3KZ2RkwMXFxeydRfNOfV5WVhamTp0KNzc3e5RF5DR8fX0xZMgQBq4K\ndenSBa+//vpLEbjA/+ZzLV0qBACFhYUAoOojXQAtAreZp6cnfH19Fajmf+xypJufnw9vb28MGzbM\ntOzEiRNYuXIlpkyZgl/+8pem5W2dhLBt2zbs2bPHHiUREZEFOp0OkiS1GbqDBg1Cv379ZK6sc7Bb\n6D7/rigmJgZVVVX48ssvTe/uhRCQJAnJyclmfZw+fRq+vr7c0UREDmI0GqHT6eDv72/xyL20tBSV\nlZWIjIxUoLrOwebh5erqanzzzTdm4/96vR5NTU0wGo1oampq8X3zZUbPSktLw7Jly2wth4iInlNe\nXo7w8HAMGzYMlZWVuHnzJsLCwrB161YAwP79+zFx4kRMnDgRkiRh//79mDx5suK3THwZtetIt/mI\nde/evRgxYgRee+01HDhwAEIITJs2rcNF3Lp1C99//z3efPPNDvdBRESWDRgwAEePHm21ffr06Zg+\nfbqMFXVe7T7SLSkpwcyZM5GZmYmqqiqkpKRg9erV6N+/f4eLSE9PN93blIiI6GXV7tD19/fHpEmT\noNfrER8fj+TkZKxZs6bDBdTW1iI3NxfR0dEd7oOIiEgN2n0ilaenZ5vDFO2Vm5uLhIQEXkpBRGRH\nWq3WYa+rWq3WIf12BpIQ1t25OysrC5GRkbyTDhERUQdZHbpERERkG3V/VAYREZGKMHSJiIhkwtAl\nIiKSCUOXiIhIJgxdIiIimTB0iYiIZMLQJSIikglDl4iISCYMXSIiIpkwdImIiGTC0CUiIpIJQ5eI\niEgmDF0iIiKZMHSJiIhkwtAlIiKSCUOXiIhIJgxdIiIimTB0iYiIZMLQJSIikglDl4iISCYMXSIi\nIpkwdImIiGTC0CUiIpIJQ5eIiEgmDF0iIiKZMHSJiIhkwtAlIiKSCUOXiIhIJgxdIiIimTB0iYiI\nZMLQJSIikglDl4iISCYMXSIiIpn8P2pPJMCXxYyuAAAAAElFTkSuQmCC\n",
"text": "<matplotlib.figure.Figure at 0x10513a450>"
}
],
"prompt_number": 20
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 5\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test5.png\" width=\"300\" />"
},
{
"cell_type": "code",
"collapsed": false,
"input": "# Note: you currently have to escape (double backslash) the \\b and \\t, \n# I guess b/c they're whitespace shortcuts\nclass Rot1(OneQubitGate):\n gate_name = 'Rot'\n gate_name_latex = r'\\begin{array}{ll}\\cos\\theta&-\\sin\\theta\\end{array}'",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": "# This doesn't work:\n#CircuitPlot(Rot1(0),1)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 22
},
{
"cell_type": "raw",
"metadata": {},
"source": "Can't stick a matrix in a qubit operator:\n\n ValueError: \n \\begin{array}{ll}\\cos\\theta&-\\sin\\theta\\end{array}\n ^\n Unknown symbol: \\begin (at char 0), (line:1, col:1)\n\nDoesn't work any better when I have $ at the beginning/end of the string."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 6\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test6.png\" width=\"200\" />"
},
{
"cell_type": "code",
"collapsed": false,
"input": "U = CreateOneQubitGate('U')\nCircuitPlot(Mz(0)*H(1)*CGate((0,1,3),U(2))*X(3)*CGateS((2,3),X(1)),4,labels=labeller(4,'j'))",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 23,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x104e68c90>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n3nvvxVNPPYWrV68a3MPIyMhAaGgoVCqVOWIRWQ0598zods7OztBoNH0uv7XAbW1tkZ2dbXC8qqoq\nTJs2DZWVldi7dy+USiVmzJhhrrg9mKW0NRoNRo8eDS8vL/19+fn5mDBhAoDug4q3zun1Zfv27di7\nd685IhERDZoJEyZgwoQJ0Ol0WLFihUVPiDDL9IhGo7ltYt7LywsjRowA0D2vt2HDBoN72UePHoW7\nuzvGjBljjkhERINOkiQoFApcuXLFYld2m1zazc3NKCsr6/UgZFlZGbZs2YKRI0filVdeMThOUlKS\nWS7OISIabKWlpdixYwcqKipw7do1bNmyBXfffbdFHqtf0yM3d/n37dsHb29vTJ48Gfv374ckSViw\nYMFt6/v6+sLX1xc7d+7EnDlzkJ+f3+vedk1NDerr6zF9+vQBfhlERPK4cOECHBwcEBkZiSeeeAIt\nLS344osvLPZ4/d7TPnPmDMLDw5GWloampiYkJCQgPj4e48eP169z7NgxuLm54fvvvwcAzJkzB6Wl\npfj66697HTM5ORkxMTED/BKIiOQzZcoU/WXuxcXFOHv2LCZOnGixx+t3aXt4eCAoKAharRbLly9H\nXFwc1q9f32MdW1tbPPzww/r56crKStjZ2cHX1/e28VpaWpCTk4OFCxcO8EsgIho++n32iIODAw4e\nPGhwnenTp2PFihVITk6GUqlEYWEh/v3vf+uv6b9VTk4OVq5cycvPiYiMoJCMvK4yIyMDISEhvJKL\niISkUChk/ZgLcz2+0aVNRCQyJycnNDY2yvb4arUaWq3W5HFY2kREArGqv1xDRESGsbSJiATC0iYi\nEghLm4hIICxtIiKBsLSJiATC0iYiEghLm4hIICxtIiKBsLSJiATC0iYiEghLm4hIICxtIiKBsLSJ\niATC0iYiEghLm4hIICxtIiKBsLSJiATC0iYiEghLm4hIICxtIiKBsLSJiATC0iYiEghLm4hIICxt\nIiKBsLSJiATC0iYiEghLm4hIICxtIiKBsLSJiATC0iYiEghLm4hIIP8HREoLX9Re54kAAAAASUVO\nRK5CYII=\n",
"text": "<matplotlib.figure.Figure at 0x104fa8a10>"
}
],
"prompt_number": 23
},
{
"cell_type": "code",
"collapsed": false,
"input": "# Qasm version:\nq = Qasm(\"def\tc-U,3,'U'\",\n \"qubit\tj0\",\n \"qubit\tj1\",\n\t\"qubit\tj2\",\n \"qubit\tj3\",\n \"toffoli\tj0,j1,j2\",\n \"X\tj0\",\n \"c-U\tj2,j3,j0,j1\",\n \"H\tj2\",\n \"measure\tj3\")\nq.plot()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": "<matplotlib.figure.Figure at 0x104f09dd0>"
}
],
"prompt_number": 24
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 7\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test7.png\" width=\"400\" />"
},
{
"cell_type": "code",
"collapsed": false,
"input": "V = CreateOneQubitGate('V')\n\nCircuitPlot(CGate(1,V(0))*Mz(1)*H(1)*CGate(1,U(0))*H(1),2,labels=labeller(2))",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 25,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x10515b450>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": "<matplotlib.figure.Figure at 0x104f81cd0>"
}
],
"prompt_number": 25
},
{
"cell_type": "code",
"collapsed": false,
"input": "# Qasm\nq = Qasm(\"def\tc-U,1,'U'\",\"def\tc-V,1,'V'\",\n \"qubit\tq0\",\"qubit\tq1\",\n \"H\tq0\",\"c-U\tq0,q1\",\"H\tq0\",\n \"measure\tq0\",\"c-V\tq0,q1\")\nq.plot()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n/wP2A4+dkgwG1gAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x1052efe10>"
}
],
"prompt_number": 26
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 8\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test8.png\" width=\"400\" />"
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(H(2)*H(2)*CGate(0,Z(2))*H(2)*CNOT(1,0)*CNOT(2,1)*CNOT(1,0)*CNOT(2,1)*H(1),3,labels=labeller(3))",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 27,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x105104c50>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nuLhGpxPNnLsrLy9Heno6goKCTI1DRESkWq3a023sFlrN3bj9888/R3Z2NiRJwl//+lf4+PggMjKy\nwXTp6emYN2+eOm7RJTMnJyezvm5+xYGISD0k0dwu6H2SkpIwefLkujvrEFHrSJLE32O1YFx/lk0t\n68/g0iUi06jlj56Mw/Vn2dSy/lT3I/ZERETtFUuXiIhIJixdIiIimbB0iYiIZMLSJSIikglLl4iI\nSCYsXSIiIpmwdImIiGTC0iUiIpIJS5eIiEgmLF0iIiKZsHSJiIhkwtIlIiKSCUuXiIhIJixdIiIi\nmbB0iYiIZMLSJSIikglLl4iISCYsXSIiIpmwdImIiGTC0iUiIpIJS5eIiEgmLF0iIiKZsHSJiIhk\nwtIlIiKSCUuXiIhIJixdIiIimbB0iYiIZMLSJSIikglLl4iISCaqKN2UlBSsWrVK6RhERERmJQkh\nhNIhKisr4ePjg9zcXGg0qtgOIGpzkiRBBX9uZCSuP8umlvWnioazt7eHVqtFcnKy0lGIiIjMRhWl\nCwALFizA6tWrlY5B1GZ++eUXbN68Gb6+vujRowcAwMXFBRMmTMC2bdtw9+5dhRNScwoKCvDqq6/C\nw8MDXbp0AQD06dMHCxYswOnTpxVOR5bK4NKNiopCaWmp2YK4urrCxcUFR48eNdtzEMlBCIEVK1bA\nzc0Nmzdvxssvv4zjx48DAI4ePYrnn38eH374Idzd3ZGQkKCKQ170fz///DOefPJJjBgxAlVVVdi2\nbRvy8/MBALt370bXrl0xYcIEjB8/HqdOnVI4LVkcYaCwsDBRUFBg6ORGOXjwoAgNDTXrcxCZU01N\njQgNDRWjR48WZ86cqTfut39uJ06cEAMHDhQLFy4Uer1ezpjUhNOnT4uHHnpILFu2TJSXl9cbd//6\nq66uFh999JHo3r27yMrKkjsmGaEVdWdWqjm8DACjRo1CUVERLl26pHQUIqNERUXh4sWL+Pbbb+Hh\n4dHstIMGDUJ2djb279+PpUuXypSQmnLp0iX4+/tj+fLliI2NRceOHZuctkOHDnjhhReQmJiIoKAg\nHm4mg6mqdAEgIiKC53bJIh0+fBg7duzA9u3bYW9vb9A8nTt3xtdff434+HicP3/ezAmpOW+88QZC\nQkIwe/Zsg+fRarV4/fXX8dJLL5kxGbUnqivd4OBgpKamoqqqSukoRK2yevVqREZGonPnzq2ar0eP\n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\n",
"text": "<matplotlib.figure.Figure at 0x105107650>"
}
],
"prompt_number": 27
},
{
"cell_type": "code",
"collapsed": false,
"input": "#Qasm:\nq = Qasm(\"def\tc-Z,1,'Z'\",\n \"qubit\tq0,\\psi\",\"qubit\tq1,0\",\"qubit\tq2,0\",\n \"H\tq1\",\"cnot\tq0,q1\",\"cnot\tq1,q2\",\"cnot\tq0,q1\",\"cnot\tq1,q2\",\n \"H\tq0\",\"c-Z\tq2,q0\",\"H\tq0\",\"H\tq0\")\nq.plot()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x10544bad0>"
}
],
"prompt_number": 28
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 9\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test9.png\" width=\"300\" />"
},
{
"cell_type": "code",
"collapsed": false,
"input": "SqrtX = CreateOneQubitGate('sqrt-X','\\sqrt{X}')\nSqrtXdag = CreateOneQubitGate('sqrt-X-dag','\\sqrt{X}^\\dagger')\n\nCircuitPlot(CGate(2,SqrtX(0))*CNOT(2,1)*CGate(1,SqrtXdag(0))*CNOT(2,1)*CGate(1,SqrtX(0)),3,labels=labeller(3))",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 29,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x104f62a10>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x105168090>"
}
],
"prompt_number": 29
},
{
"cell_type": "code",
"collapsed": false,
"input": "q = Qasm(\"def\tc-X,1,'\\sqrt{X}'\",\"def\tc-Xd,1,'{\\sqrt{X}}^\\dagger'\",\n \"qubit\tq0\",\"qubit\tq1\",\"qubit\tq2\",\n \"c-X\tq1,q2\",\"cnot\tq0,q1\",\"c-Xd\tq1,q2\",\n \"cnot\tq0,q1\",\"c-X\tq0,q2\")\nq.plot()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nP378uMybN89J1eh39uzZOpexPx2jyrnXoOBev369tG3bVvLz80VE5NKlS9KxY0eJioqqcz+vvfaa\neHl5SU5OTr3HS0pKkj179ugtz+005M0zY8YMOXPmjF3brFixQjRNkyVLltjMX7Bggezateuh2/NE\nd1xCQoIUFhY+dL34+Hjp3LmzaJommqZJ586d5dNPP7UunzFjhnVZ+/btZcSIEQ7XxP50jCrnnsPB\n/a9//Uu8vb3lr3/9q816Xbt2lTfffLPWfZw7d05atmxZ5/IfS0pKki+//FJveVYA3Gaqy+3bt+tc\nVlRUJOPHj7e73SUlJdK8eXPp2rWrdd67774rmzZt0rW90a+V0ZOjjBih6WH062n0VBePOff0FvfT\n4I6JiZE2bdrIvXv3rPPy8/NF07RaR8p3796VgQMHysKFCx96rGvXrkn//v31luaWanvzmM1mGT9+\nvMyePbvO7RYsWCDHjh1z6Jjjxo0TTdNk586dsnHjRnn//fcbVG9T0ZC2GzFC04P9acvTzj2Hbk7e\nuHEDWVlZiI6OtnmOdP/+/fD29sbgwYNt1hcRTJ06FaNGjcL777//0P2vX78e06dPd6Q0t1VdXY3U\n1FT87Gc/w6efforbt2/XWKe0tBR5eXkIDw936BgzZswAACxcuBBnzpzRdYOF6ldWVlbnsuLiYty+\nfRs9evSwa59Tp06Fj48PNm7caJ33xz/+EeHh4RgxYoTDtVLtPPLc05vwPx5x5+bmiqZpkpaWZrPO\n5MmTa72pmJKSIkuXLrWZ9+Nrez9WVVUlffv2lfLycr2luaW6XtrS0lLx8/Or8dqJiLz11lty4MCB\nBh23Z8+eYjKZpKCgwK7t7HgreJza2u7OIzQ92J81edK559CI+8EPakJDQ63zKioqsG/fPgwZMsRm\n3Y8//hheXl5ISUmxmX/w4MFa952RkYGYmBiPfdQpMDAQEyZMwNq1a23ml5WV4bvvvqvx+tnj9OnT\n8PLygojgo48+amipTZZHjtDIs849vQn/4xG3xWKRvn37WkcJ9+7dk9/+9rfWEcQD+/btk6CgIJk4\ncaJMmDDBOsXHx8uLL75Y63EiIyPl4sWLdn8CuZv6XtoTJ06IpmmSlZVlnffee+/Jjh07HD5eUVGR\nxMXFSWFhobRo0UI6depkc/+hIfV6urra7q4jND3Yn7XzlHPP4ZuTZ8+elZEjR8r8+fNl/vz5snDh\nQvHy8pIbN25Y1wkMDBSTySSaponJZLL577feeqvGMQ4dOuTQXV139LDOiIqKkpiYGBG5f+N2+PDh\nDh+rtLRUxowZI1evXhURkalTp4qmafKPf/zDafV6svra/tJLL0nPnj1t5t2+fdvad446deqUPPnk\nk6Jpmq6nrOzF/qybJ5x7Df4BzgMTJkyQfv362V3Aj8XHx0tubm6D9uEuHtYZGRkZYjKZ5Pvvv5d1\n69bJ5s2bHTrOnTt3ZOzYsTZ9c+TIEdE0TYYNG+a0ej2ZaiM0PdifdfOEc89pwd2tWzdJTk62u4AH\nCgoKZMiQIQ5v724e1hn37t2Tzp07y8svvyzPPvusWCwWu49RVVUlCQkJcuLEiRrLwsPDxWQyyblz\n55xSrydTbYSmB/uzbp5w7jnlb5VcuHAB+fn5iIyMdHgfq1evxpw5c5xRjhK8vLwwc+ZMrF69GnFx\ncdA0za7tCwsLERMTg379+iEsLKzG8oSEBIgI0tPTnVVykzV37lzs2rUL58+fx1/+8hdMnjzZof2U\nl5cjKSkJK1eutP4Bo6SkJADAunXrnFYv1c8jzj29CV/XiPu5556T9u3bi8lkkp49e8qyZcvs/vQo\nKyuTfv36OfTJ5670vLQlJSXSvXt3qaio0L3fnTt3yoABA8Tb21tMJpN06NBBDh48aLNOQkKCtGrV\nynpfYcCAAZKent7gej3Vw9rubiM0Pdif9VP93LMruB/8TRJn++KLL2T16tUu2bdRVDtxVKvXmfS0\n/Q9/+IOYTCZZv3693fsvKCiQ6OhoWblyZa3LU1NTRdM0WbBggd37rgv7Ux0uDe4tW7ZIWVmZ3Qdo\nqprCm8dTqDZC04P9qQ5H6tX+b0NyMk3ToNJLq1q9zuSJbffENumlWtsdqdel/yMFIiJyPm+jC/BU\ngYGBdt+tNlJgYKDRJRA5RVM493iphJo81b5a6+GJbaL/j5dKiIgUw0sl1OSp9tVaD1768my8VEJE\npBheKiEiUgyDm4hIMQxuIiLFMLiJiBTD4CYiUgyDm4hIMQxuIiLFMLiJiBTD4CYiUgyDm4hIMQxu\nIiLFMLiJiBTD4CYiUgyDm4hIMQxuIiLFMLiJiBTD4CYiUgyDm4hIMQxuIiLFMLiJiBTD4CYiUgyD\nm4hIMQxuIiLFMLiJiBTD4CYiUgyDm4hIMQxuIiLF/D+wFhCqL5zsXAAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x104fc60d0>"
}
],
"prompt_number": 30
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 10\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test10.png\" width=\"300\" />"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 11\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test11.png\" width=\"300\" />"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 12\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test12.png\" width=\"300\" />"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 13\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test13.png\" width=\"300\" />"
},
{
"cell_type": "code",
"collapsed": false,
"input": "# Only works if you convert the defboxes to defs and remove qubit s2:\nqasm_lines = \"\"\"\\\n\tdef\tCU,1,'U'\n\tdef\tCU2,1,'U^2'\n\tdef\tCU4,1,'U^4'\n\tdef\tc-S,1,'S'\n\tdef\tc-T,1,'T'\n\n\tqubit\tj0,0\t# QFT qubits\n\tqubit\tj1,0\n\tqubit\tj2,0\n\tqubit\ts0\t# U qubits\n\n\th\tj0\t# equal superposition\n\th\tj1\n\th\tj2\n\n\tCU4\tj0,s0\t# controlled-U\n\tCU2\tj1,s0\n\tCU\tj2,s0\n\n\th\tj0\t# QFT\n\tc-S\tj0,j1\n\th\tj1\n\tnop\tj0\n\tc-T\tj0,j2\n\tc-S\tj1,j2\n\th\tj2\n\tnop\tj0\n\tnop\tj0\n\tnop\tj1\n\t\n\tmeasure\tj0\t# final measurement\n\tmeasure\tj1\t\n\tmeasure\tj2\"\"\"\n\nq = Qasm(*qasm_lines.splitlines())\nq.plot()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAA8AAAAD9CAYAAABz2h51AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt0VPW9///XDBETRgMTyq0ohKRIuMTAUUwRlEuAHkI9\nbUmOglYgCkFoVlHQrhblC3isLSpwQMCiInZBrRKOQI+yNGBzI8Q0BOVW4EACAoIESUwgJJjL/P7g\nl6kxk5DLTPbM7Odjrawl+/r6mMne8957fz7b4nA4HAIAAAAAwM9ZjQ4AAAAAAEBboAAGAAAAAJgC\nBTAAAAAAwBQogAEAAAAApkABDAAAAAAwBQpgAAAAAIApUAADAAAAAEyBAhgAAAAAYAoUwAAAAAAA\nU6AABgAAAACYAgUwAAAAAMAUKIABAAAAAKZAAQwAAAAAMAUKYAAAAACAKVAAAwAAAABMgQIYAAAA\nAGAKFMAAAAAAAFOgAAYAAAAAmAIFMAAAAADAFCiAAQAAAACmQAEMAAAAADAFCmAAAAAAgClQAAMA\nAAAATIECGAAAAABgChTAAAAAADwuJCREFovFsJ+QkBCj/xfAC1gcDofD6BAAAAAA/JvFYpGRpYfR\n+4d3MPwO8LZt27Rq1SqjYzSbr+YGAAAAALMy/A5weXm5RowYodzcXFmthtfjTearuW8kJCRExcXF\nHtu+3W5XUVGRx7YPAEbg2AkAN2b0HVij9w/vYHjlFhQUpPHjx2vr1q1GR2kWX819I8XFxXI4HB77\n8eQXRAAwCsdOAGidadOmaciQIbJarQoICNDZs2cbXX7Pnj265ZZb1L59ew0bNkyPPfZYGyWFrzO8\nAJakpKQkrVmzxugYzearuQEAAABv8uc//1lbtmzR8OHDVVNTo+PHjze4bGVlpbZu3aqKigrNmTNH\n2dnZeuutt9owLXxZkwvguXPn6sKFCx4J0bNnT3Xv3l379u3zyPYb0to2GZUbAAAA8DeZmZlKSEiQ\nJBUUFDS43Pr169W/f3/V1NQoJiamreLBTzS5AC4tLVVFRUWjyyQlJSkqKsr572PHjikuLk7z5s3T\n/PnzNW3aNBUWFrpcd+7cuVqxYkVT47hFQ23y9txGmTRpkqKiomS1WnXzzTfr3nvv1cyZMyVJ+fn5\nGj9+vEJDQ2W1WmW32zVy5EitXr3a4NQAYCyOnQDQNFlZWYqPj1dgYGCDBfDJkycVFBSkY8eOyWKx\n6L777mvjlPB1bn0EuqKiQqNGjZIklZSUKCYmRnFxcVq+fLmWLVumiIgIxcTEqLKyst660dHROn36\ntM6fP+/OSM3mq7nbwvvvv6/XX39d0vXCf8+ePXrjjTckSeHh4UpJSdETTzwhSXr77beVnp6upKQk\nw/ICgDfg2AkATVNSUqLg4GCFhoY2WABv3LhRU6dOVUZGhgYNGqROnTq1cUr4OrcWwG+++aZWrlwp\nSXrppZdUVVWlyZMnO+c/8cQTOnbsmNavX+9y/Tlz5hjep9ZXc7eVjIwMSdK4ceNczk9NTVW7du2c\nF0IAABw7AeBGzp49q169ekmS+vTpo/z8/HrLbN26VT/72c9UXl6uvLw83X///W0dE37AY4NgJScn\nKzo6us4rgux2uyIiIpScnOxynfj4eO3YsUPXrl3zVKwb8tXcbSU9PV3t27fXiBEj6s2rrKxUVlaW\nIiMj1bFjRwPSAdKXX36pOXPmaMCAAfr5z3+uvLw8oyMBpjh2lpWV6fnnn1dkZKRGjhypDz74wOhI\naIb9+/crLi5OAwYMUGJiok6fPm10JJhMenq6Ro4cKel6Afz9O8ClpaUqKChQVFSUsrOzVVVVRQGM\nFgnwxEYvX76sEydO6Cc/+Um9eT169FBOTo7L9dq1a6eHHnpIGzdu1IwZMzwRrVG+mrut1NTUKCsr\nS0OHDlVQUFC9+bm5ubp69SoHIximsLBQgwcP1jfffKOqqiodPXpUO3fuVEpKioYPH250PJiUGY6d\n1dXVuu+++3TkyBHn2Bp79+7Vyy+/rDlz5hicDjeSm5urUaNGqby8XA6HQ8ePH9f//M//6ODBg/rh\nD39odDyYRFZWll588UVJUlhYmIqKinT58mXdeuutkqR169Y5jye1T9W05LhpsVjclBi+qtV3gA8c\nOKB58+ZpypQpeuqppyRJX3zxhSQpODi43vI2m02lpaUu+9NKUmJiot58883WxmoRX83dVvbv36+S\nkpIGH9FLTU2VJOfVO6CtrVmzRpcvX1ZVVZUkyeFw6OrVq/rNb35jcDKYmRmOnR9//LGOHz9eZ2DJ\nq1evasGCBc6/R3iv3/72t7p69aocDockqaqqSleuXNF///d/G5wMZlJUVOTsz9unTx9J/xoJeu/e\nverXr59sNpuk6wVw37591a1bt2bvx5PvbOfHN35adQf43Llz2rBhg1asWKHDhw8rMjJSM2bMUGlp\nqSSpffv29dap/eB+88036tKlS735drtdQ4YM0a5duzR27FiX+3388ceb/eqhlStX3vAqkadz+7ra\nq20pKSnau3dvvfm5ubmyWCw+fRcDvi03N9dlV4QjR44YkAa4zgzHzkOHDrl8q8K3336rS5cutehL\nKtrO4cOH60379ttv9Y9//MOANDCjCxcu1DlOhIWFSbpeAA8aNEgffvihFi1aJOn6ZzMnJ0ePPPKI\nIVnh+1pVAL/yyitasmSJJDk7qrdv317t2rWT5PoRg9o7qNXV1Y1uu6ampsF5DQ1G1VqeyO1Pj1mk\np6crICBAqamp6tChQ5151dXVCg4OVv/+/dW5c+dGt+NP/0/gG4qLi/ncwTBmPnaWl5ere/fuRsdA\nC6Wnp/vk5w6+JyMjo85TMLV3gPPz8/X222/rsccec87Lzc1VRUVFi5+a4TONVhXAs2bNcj4unJGR\noa5du6pv376Nvri6rKxMFovF+Tz/9xUVFSk3N1evvfZaa6K1iKs7u7VamtvhcLg1o6c1dFBwOBzK\nzMxUVFRUvS9wkpSXl6fy8vIm3cHwtf8n8B2FhYUaNGiQiouLnY9ddujQgT7A8DizHzurq6s1dOjQ\nOn2AO3ToQB9gH/H9PsABAQEKDg6mDzDcrqFj5e7du7Vw4ULnv4ODg9W5c2dlZmYqNjZWt99+u3Ne\na/r/St59LEXbaFUf4H79+jn/Oy0tzXklplu3brJYLCouLq63TllZmTp16uR8pPj71q1bp8TExNbE\najFfzd0W/vnPf+rSpUsNvmx89+7dkny7Dxt8X9euXfXZZ59p5syZ6t+/v6TrJ0qKXxjFLMfOdu3a\nKTMzUwsWLNCgQYMkSe+99x7Fr48YOnSo9uzZo0mTJkmSEhIS9Nlnn1H8ok0UFhbqk08+qfcUTGho\nqE6dOqWZM2fWmZ6amqrbbrvN+cokoLncMgp0SUmJ9u/f73w8wWazaciQIS6H0D9x4oQGDx7scjtV\nVVV677339Omnnza6v8TERH322WfNyrh8+fIGv4DU8nRuX1Z7tc3VKzyk6yP3SS2/Gge4S8+ePbV2\n7VpJ168033XXXQYngpmZ6dhps9m0cOFCLVy4UBaLRT/96U+NjoRmiIqK0pYtW2SxWPT6668bHQcm\ncOnSJcXFxSkvL09Xr15VeHi4nnnmGc2ePVuSdPfdd2vatGmyWq2qqqrSf/zHf+jChQv67LPPFBQU\n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\nIy3aV1O6nZpdqwrgV155RUuWLJEkZ0duV8VjS9TU1DQ4r6HBqFqrXbt2kq5fOfm+2ju/1dXVjW7j\n+7ldbQveqfZxk5SUFO3du7fe/NzcXFkslhteSOF37l38/fdRXV2tDRs2aMOGDUZHgYlFRkZq/vz5\nWrZsmV588UW9+OKL6tChgyZNmqSVK1fKbre7XM8X/j7dcW7whXZ+l6/lbYmysjI9/vjjevzxx42O\nAhPIyMioc5Gs9g5wfn6+3n777ToXYnJzc1VRUdHii2pm+PttrVYVwLNmzXI+LpyRkaGuXbuqb9++\nrQpUVFSk3Nxcvfbaa63aTku4urNbq6ysTBaLpcFRLBvKzVUY79LYQSE9PV0BAQFKTU1Vhw4d6syr\nrq5WcHCw+vfvr86dOze6D37n3sNisfjV7+Phhx/W5s2b61yICwoK0n/9139p/vz5BiaDWTR2DH35\n5Zf1yCOPaNu2bUpNTVVOTo42bdqkr7/+Wjt27HC5jrf8fXr63OAt7WwKfztuOhwO9e3bt96Iuzab\nTTt27ODRdbhVQ8eS3bt3a+HChc5/BwcHq3PnzsrMzFRsbKxuv/1257zW9v/1p79fT2lVH+B+/fo5\n/zstLc0tj/+sW7dOiYmJrd5OS3Tr1k0Wi0XFxcX15pWVlalTp07OR6G/z8jcaD2Hw6HMzExFRUXV\n+4IjSXl5eSovL+dECUP98Y9/VEhIiLMfos1mU58+feqNugsYZfDgwVq8eLHS09N18uRJhYeH6+OP\nP3Z2MfI1nBt8n8Vi0VtvvSWbzeZ8SvGWW27RhAkTnAMSAZ5UWFioTz75pN5FstDQUJ06dcr5XvFa\nqampuu2221wOygv3cMso0CUlJdq/f3+rC+Cqqiq99957mjp1aqPLJSYmaujQoc36yczMvOH+bTab\nhgwZotOnT9ebd+LECQ0ePLhVueG9/vnPf+rSpUsNngx3794tiT5eMFavXr107Ngxvfjii5KkNWvW\nKC8vT7fccovByWBmS5cudTm9R48eSkhIkMPhaLRbkzfj3OAf7r//fh0+fFi//e1vJUnvvvuu3nvv\nPR4VhUddunRJo0aNUnh4uI4cOaLw8PA6T4refffdWrdunaxWq6qqqhQbG6u77rpLu3btcq67atWq\nOttcsmSJunbtqk8//VQXL15UTk5OWzfLL7TqEehau3fvVnV1daPvv2vKQSY5OVkTJ05UYGBgo8vV\n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\n7HC5jje0j/M6vEVDn8Xdu3dr4cKFzn8HBwerc+fOyszMVGxsrG6//XbnvNb2/3XXZ7VVfYD79evn\n/O+0tDSX1bzD4VBCQoJiY2P1yiuv3HCb69atU2JiYmtitVi3bt1ksVhUXFxcb15ZWZk6derkfBT6\n+4zMDdyIw+FQZmamoqKi6p0kJSkvL0/l5eX0E4KhNm7cqG7dujkvrAYGBmrx4sUUv0AbyMjIUM+e\nPZ2PL/qjwYMHa/HixUpPT9fJkycVHh6ujz/+2NkFzpdwXoc3KCws1CeffFLvIktoaKhOnTrlfC91\nrdTUVN12220uBxxuS24ZBbqkpET79+93WQAvXLhQAwcO1OLFi53TGhotuaqqSu+9956mTp3a6P4S\nExM1dOjQZv1kZmbesB02m01DhgzR6dOn6807ceKEBg8e3KrcgFH++c9/6tKlS84R+r5v9+7dkugn\nBGOFh4friy++0DvvvCPp+oA1v/nNbwxOBfi/s2fP6tSpUw2eI3zZ0qVLXU7v0aOHEhIS5HA4Gu12\n5604r8NIly5d0qhRoxQeHq4jR44oPDy8zlOwd999t9atWyer1aqqqirFxsbqrrvu0q5du5zrrlq1\nqs42lyxZoq5du+rTTz/VxYsXlZOT47H8rXoEutbu3btVXV1drxP+hg0b1K5du3qDC+zevVuPPvpo\nve0kJydr4sSJCgwMbHR/r7/+eqszN2TixIn1+hjn5+fr7Nmz+t3vfudynabmBoxS+8iJq9ckSNeH\nr5eMHZIekKSbbrpJEydOlCTddtttBqcBzMEbXkviCVeuXFF2dnaD80tKShQZGekcvdaXcF6HkTp3\n7qy0tLQG53+3GA4ICGiwm0GtU6dOaeDAgSooKNDmzZtltVoVHR3trrj1uKUATktLU5cuXeo8pvb3\nv/9dzzzzjCZMmKBf/vKXzulVVVWyWl3feF67dq02b97sjkgtNnv2bK1atUqbNm1y5n711Vc1cODA\nerfxa3lDbqAx6enpslgsjZ4of/SjH6lHjx5tnAwAYLSWDIDlCzIzM3XgwAE5HI56/RcLCwu1YcMG\nj95U8STO6/AnoaGhCg0NVU1NjRISEjw+MJvbCuDvX2GKj49XSUmJ/vKXvzgbUXsAeu655+ptIzs7\nW7169TL8D7V79+5KS0vTs88+q3379uny5csqLi7WRx995Bwu/7u8JTfQkJqaGqWnpyssLExdu3at\nN//IkSMqLCx0+VoMAIB/q6mp0SeffKKQkBDn64L8xd///ndZLBbNnj1bL730knN8gYKCAk2ePFlz\n587Vz3/+c4NTNh/ndfgrh8Mhq9Wqc+fOqXPnzrr55ps9sp9WF8ClpaX6/PPP6703rqioqFnbWbly\npZ5++unWxnGLqKgoffDBB01a1ptyA9918uRJJSYm6syZMyosLFRRUZFGjx6t+Ph4/epXv9L27du1\ncuVKHTlyRBaLRdu3b9fYsWO1aNEiv+wHBgC4rqamRr/4xS9UVlam06dPKz8/X1arVcOGDVPHjh01\nbdo0TZkyxeiYrXbhwgXl5eVp165diouLU2VlpbO72gsvvKDx48cbnLB5OK/DX+3bt085OTmKiYmR\n3W7XsmXLtGzZMo/tz+Jo4njSCQkJWrJkiXr16qUtW7bozjvv1B133KFNmzZp+vTpys/PV+/evVsU\n4syZM3r00UcbfZbcExISErR48WKfyw00xNOvxvG1V+/4Wt7m8Oe2Sf7fPqCtuftvyhv/Rt2ZyVva\nx3kd3sJTn5WjR4/KYrHotttu05gxY1RWVqbt27crPDzcY/tv9ijQBw8e1IMPPqiNGzeqpKRES5Ys\n0cKFC1tcRErS6tWrlZSU1OL1jeKruQEAAADAaBEREerXr59sNptycnJ06NChesWvuzW7AA4LC1NM\nTIyKioo0ffp0Pffcc1q0aFGLA5SVlSklJUVxcXEt3oYRfDU3AAAAAJhVs/sA22w27dy5020BUlJS\nNGPGDI+P9tWQlu7X6NyAK3a73aOfSbvd7rFtAwA8x93nB288H7izjd7SPs7rgPs1uQ9wcnKyYmNj\nZbPZPJ2pzfhjmwD8iz/3bfLntkn+3z4AAHyJ0edlt/bxb2oBDAC+xuiDtSf5c9sk/28fAAC+xOjz\nsjv375b3AAMAAAAA/JOnH8dvyv7dhTvAAPyW0VcrPcmf2yb5f/sAAIAxmj0KNAAAAAAAvogCGAAA\nAABgChTAAAAAAABToAAGAAAAAJgCBTAAAAAAwBQogAEAAAAApkABDAAAAAAwBQpgAAAAAIApUAAD\nAAAAAEyBAhgAAAAAYAoUwAAAAAAAU6AABgAAAACYAgUwAAAAAMAUKIABAAAAAKZAAQwAAAAAMAUK\nYAAAAACAKVAAAwAAAABMgQIYAAAAAGAKFMAAAAAAAFOgAAYAAAAAmAIFMAAAAADAFCiAAQAAAACm\nQAEMAAAAADAFCmAAAAAAgClQAAMAAAAATIECGAAAAABgChTAAAAAAABToAAG4PVCQkJksVia/SOp\n2euEhIT4RPt8pW0AAADexOJwOBxGh/A227Zt0+nTp/XrX//a6CgAdL3Qa6tDVVvuq633aUTbWsqX\nsgIAAN9BAexCeXm5RowYodzcXFmt3CQHjEYB7Fv7aUxISIiKi4vduk273a6ioiK3bhMAAPgnqjsX\ngoKCNH78eG3dutXoKADgV4qLi+VwONz64+6CGgAA+C8K4AYkJSVpzZo1RscA4AHz589XVlaW0THc\nKicnR8uXL9fixYs1fvx4ZWRkGB0JAADA6/hsATx37lxduHDBY9vv2bOnunfvrn379nlsHwDaXnp6\nuv7yl7+ourra6Chuc/XqVW3btk3z5s3T4sWLlZiYqAkTJujcuXNGRwMAAPAqPlsAl5aWqqKiotnr\nHTt2THFxcZo3b57mz5+vadOmqbCw0OWyc+fO1YoVK1obFYCXKCkp0YEDB9S/f3+jo7jViRMntHTp\nUhUUFEiSxo8fr/Lycu3Zs8fgZDeWk5OjsWPHqmvXrrJarerWrZtGjx6td955x7nMO++8o4iICFmt\nVgUGBmr48OE6dOiQgakBAICv8tkCuCVKSkoUExOjuLg4LV++XMuWLVNERIRiYmJUWVlZb/no6Gid\nPn1a58+fNyAtAHd74403NGvWLKNjuF1kZKSysrIUFhYmSTp79qwkqW/fvkbGapLo6Gjt2rVLv/jF\nLyRJO3fuVGpqqh5++GHnMg8//LCOHj2q/v376/Dhw8rKytKgQYOMigwAAHyYqQrgl156SVVVVZo8\nebJz2hNPPKFjx45p/fr1LteZM2cOfYEBL9OSu4Z33XWXJkyYoPbt2xuYvGma276goCA988wzOnz4\nsCTpD3/4g+bPn6+oqCijmtBsaWlp6tq1q+68806X88vLyzVw4ECFh4e3cTIAAOBPTFUAJycnKzo6\nus6rjex2uyIiIpScnOxynfj4eO3YsUPXrl1rq5gAbqC5dw137typJ598UgMHDnTON/p1QI1pyV3R\n3bt3a+DAgVq/fr169uypl19+2aj4zXb+/HkdP35cI0eObHCZrKwsDRs2rA1TAQAAf2SaAvjy5cs6\nceKEevXqVW9ejx49lJeX53K9du3a6aGHHtLGjRs9HRFAMzX1rmF+fr6+/PJLLV26VEuXLtX//d//\n6Z133tGOHTvaOHHzNPeu6Icffiir1ao//vGPunbtmr744ou2jNtiqampkqRRo0Y1uExaWppGjx7d\nRokAAIC/CjA6gLudPn1aL7zwgjp06KCgoCAFBgbqmWeecX4RDA4OrreOzWZTaWmpKisrddNNN9Wb\nXzui6owZMzyeH0DT1N41/M///M8Gl6m9azh9+vQ60//0pz/pkUce0f333+/hlC3XnPZJ10e3vnDh\ngiZOnKivvvpK2dnZ6tGjh3r37t1WkVssLS1NkhotcD///HO98MILbZQIAAD4K78qgMvLyzV27Fh9\n8MEHuuOOO1RQUKDo6GgNGTJEP/jBDyTJZf8/m80mSfrmm2/UpUuXevPtdruGDBmiXbt2aezYsZ5t\nBIAmaepdw/j4eOe/v/zyS61cuVJfffWVli1bpsuXL2vixImejtoizWlfQUGBHnjgAV25csU5z2Kx\nqKSkxNMx3SI1NVXdunVTRESEy/lXrlxRYGBgG6cCAAD+yK8K4J07d+rixYu6/fbbJUmdOnXSU089\npXHjxunAgQOSrn8p/L7aEaBv9F7QmpqaZmdytT8ArdeSu4Y9e/bUSy+9pJdeeqnRbXvD321z21da\nWtqk7XpD277ryy+/VH5+vh566KEGl9m9e7eGDx/e6Ha8rV0AAMA7+VUBbLfbVVJSosjISMXGxurB\nBx/UggULJMnlnd1aZWVlslgsuvXWW13OLyoqUm5url577bVmZ/LmgXYAX+GquPHkXcO2/rtty/YZ\nfUz6flubeqf7u6P3u2J0uwAAgG/wq0Gw7rvvPufgL6tXr9b999+vtWvXSpK6desmi8Wi4uLieuuV\nlZWpU6dOzkehv2/dunVKTEz0aHYATVd717Cxoqkpdw29lb+377v2798vSRoxYkSDy+zbt0+DBw9u\nq0gAAMCP+VUBLEm/+c1vdObMGR06dEj33HOP8x2+NptNQ4YM0enTp+utc+LEiQa/XFVVVem9997T\n1KlTPZobQNP5+6jB/t6+77p69aok6Y477nA5f/v27X7RTgAA4B38pgCeNGmSoqKinP8eMGCAfvnL\nXzpfDyJJEydOVE5OTp318vPzdfbs2ToD5XxXcnKyJk6cyAAsgBfx97uG/t6+77r77rslSRcvXqw3\nr6CgQKtXr9bTTz/d1rEAAICf8psCOC8vT+PGjXP+u7CwUH/961/1//7f/3NOmz17tsrKyrRp0ybn\ntFdffVUDBw7UzJkzXW537dq1SkpK8lxwAM3m73cN/b193zVlyhRFRUVp4cKFdfrx7tixQ/PmzdM7\n77zj8vV0AAAALeE3g2Bt3LhR6enpWrBggS5fvqyysjKtXLnSeXdBkrp37660tDQ9++yz2rdvny5f\nvqzi4mJ99NFHCgio/78iOztbvXr1Uo8ePdqyKQBu4Lt3DX/4wx/WmVd713DHjh1GRHMLf2/fdwUG\nBiotLU0LFy7U8OHD1alTJ1ksFo0dO1bJyckUvwAAwK0sDh8dOjMhIUGLFy9W7969PbaPyZMn6+mn\nn65TRANoexaLpc7dwYqKCg0bNkz/9m//pjfffNM5svCOHTv0+uuv64033mh05Pfm7KsttFX7jGhb\nW2TwhnYBAADf4Dd3gN3tzJkz+uqrryh+AS/k73cN/b19AAAARqEAbsDq1avp+wt4sY4dO2rVqlVG\nx/AYf28fAACAEfxmECx3KisrU0pKiuLi4oyOAgAAAABwE5++A1zbL87dUlJSNGPGDI9tHwDMym63\nu/3Yarfb3bo9AADgv3x2EKzk5GTFxsbKZrMZHQWAh7XlIEfeMAiWr+8HAADAW/lsAQzAPEJCQlRc\nXNwm+7Lb7SoqKmqTfdVqq/YZ0TYAAABvQgEMAAAAADAFBsECAAAAAJgCBTAAAAAAwBQogAEAAAAA\npkABDAAAAAAwBQpgAAAAAIApUAADAAAAAEyBAhgAAAAAYAoUwAAAAAAAU6AABgAAAACYAgUwAAAA\nAMAUKIABAAAAAKZAAQwAAAAAMAUKYAAAAACAKVAAAwAAAABMgQIYAAAAAGAKFMAAAAAAAFOgAAYA\nAAAAmAIFMAAAAADAFCiAAQAAAACmQAEMAAAAADAFCmAAAAAAgClQAAMAAAAATIECGAAAAABgChTA\nAAAAAABToAAGAAAAAJgCBTAAAAAAwBQogAEAAAAApkABDAAAAAAwBQpgAAAAAIApUAADAAAAAEyB\nAhgAAAAAYAoUwAAAAAAAU/j/AA6Oyz8LRU6nAAAAAElFTkSuQmCC\n",
"text": "<matplotlib.figure.Figure at 0x106e8f350>"
}
],
"prompt_number": 40
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 14\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test14.png\" width=\"300\" />"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 15\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test15.png\" width=\"300\" />"
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(Mz(1)*CPHASE(0,1),2,labels=['+','\\psi'])",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 31,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x10544ba90>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": "<matplotlib.figure.Figure at 0x1050dad10>"
}
],
"prompt_number": 31
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 16\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test16.png\" width=\"300\" />"
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(Mz(0)*CNOT(1,0)*CPHASE(1,2),4,labels=['0','\\phi','\\psi','\\psi'])",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 32,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x105607bd0>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x1056076d0>"
}
],
"prompt_number": 32
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Example 17\nGoal:\n\n<img src=\"http://www.media.mit.edu/quanta/qasm2circ/test17.png\" width=\"300\" />"
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(Mz(2)*Mz(1)*CPHASE(1,2)*CPHASE(1,0)*CPHASE(3,2),4,labels=['\\phi','+','+','\\psi'])",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 33,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x1050f53d0>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nORwOPfPMMz2c0s+WSiRpypQpqqio0OXLl+2OAqCPuXHjhsLCwhQdHd1ucWdnZysxMVEFBQWaMGGC\nBg8e3MMpe6C4T548qebm5k6dk5qaylo3gB5VWVmpqKgoSVJMTIxKS0vvOiY3N1fz589XfX29Pv/8\nc82YMaOnY0rqgeJes2bNfZ+dvVNCQoLy8vJ0+/ZtH6UCgNYOHjyouLg4SS3FfeeMu6amRmVlZZo4\ncaKcTqeampp6b3F3Rb9+/bRo0SJlZ2fbHcVvFBQUaOLEiQoMDJTU8gw4zNDc3KyVK1cqPDxcDzzw\ngGbNmqX//Oc/dsfCHY4cOeJZrx49erSqq6t18+ZNz/7NmzcrJSVFUsvPoySK+07JycnasmWL3TH8\nwqlTpzR79mx9+eWXnmWn1NRU5eTk2JwMHfH6668rIyND33zzjZqamrRv3z798Ic/VG1trd3R8B3V\n1dWe9eqYmBhJ376y5Pjx4xozZoxCQ0MltRT3Y489pmHDhnV6HG/cOu+3xR0eHq7Y2Fjt3bvX7ii2\ny8zMvGvZqK6uTm+99ZZNidBRDQ0Neu+991RXV+d5zO12q76+Xrt377YxGb6rqqqqVQmPHj1aUktx\nNzc369NPP9W8efMktXxPCwsLuzzbtiyr21tg9z/l+3M4HF0+1+129+h4JikpKekzn2tvc+vWLSUl\nJSkpKcnuKFDLDPr/69vStzPu0tJSbd++vdVdkUVFRXK5XK2O7wxv/Mz2yIy7K/fmV1dXq6ioSPHx\n8V0arzdtmZmZCgkJafU5BgQEKCEhwfZsbPfe3G63oqOj7/o7GhoaqiNHjtier69t7Tl8+HCrGXRY\nWJgiIiJ06NAhNTU1adSoUZ593V3f9sbn0eE3mVq6dKlWrVqlRx55pM39SUlJOnHixF2PV1RUKDIy\nUv37979r37Zt2xQbG9vm9d555x1FREQoOTm5I/F6tbq6Oj399NMqKytTbW2tgoODFRISoqKiIs/M\nAP5r//79ev7559XU1KSGhgaFhobqhRde0EcffcT/mHpYW2/ydPXqVc2cOVMnT55s9f2YPHmyGhoa\n9MUXX7R647v4+HidPn1aFRUVXhm/S6wOSkpKssrLyzt6eKvzzp8/36lzGhsbrYkTJ1r19fWdHq+3\ncrlc1vvvv28tW7bMysjIsL7++mu7I6ETzp07Z/3mN7+xJFl5eXmW2+22O1Kf9N3Ku379uhUXF2cN\nHDjQCggIsGJiYqyNGzd69qekpFhOp9OyrJZOmj17tvXUU09ZDofDCgkJseLi4qzMzMxW11+1apU1\ndOhQy+l0WlevXrWOHj3a7vjd4bUZtzfP+/jjj1VSUqLVq1d3aizA39n9tqJ9nS+//uXl5Tp+/Lh+\n/OMfa9euXZowYYJ+8IMf+GT8HnlysrM2btyoXbt22R0DADosOjpa0dHRcrvdWrp0qU+Xwfzu5YBO\np1NRUVEaPny43VEAoNMsy5LD4dClS5d8dve33xV3ZmamVqxYYXcMAOiU4uJibdq0SaWlpbp27Zoy\nMjI0YMAAn4zl86WSsLAwBQcHd+jYCxcu6MqVK5o0aZKPUwGA95w+fVqhoaFKTEzUzJkzVVtbq08+\n+cRn4/m8uDMzMzt87IYNG5SWlubDNADgfY8//rjnz4WFhT4fz2+WSmpra5Wfn6+FCxfaHQUA/Fqn\nituXz5Lm5+dr2bJl3JAAAPfR4aWSOXPmKCIiwmdBXnrpJZ9dGwB6kw7fgAOg+7gBx152f/179Q04\nAOAL4eHhti7HhoeHe+U6zLiBHmT3jA+9g9+8qgQA0DEUNwAYhuIGAMNQ3ABgGIobAAxDcQOAYShu\nADAMxQ0AhqG4AcAwFDcAGIbiBgDDUNwAYBiKGwAMQ3EDgGEobgAwDMUNAIahuAHAMBQ3ABiG4gYA\nw1DcAGAYihsADENxA4BhKG4AMAzFDQCGobgBwDAUNwAYhuIGAMNQ3AA8hgwZIofDYds2ZMgQu78E\nRnBYlmXZHUKS9uzZo4qKCi1fvtzuKIDPOBwO+cmPXJvszmf3+Kbwm+Kur6/X9OnTVVRUpIAA/iOA\n3snfi8nufHaPbwq/acjg4GDFx8crNzfX7igA2rBkyRLFxsYqICBAgYGBqqysvOfxn332mQYOHKj+\n/ftr6tSpevnll3soae/nN8UtSWlpacrKyrI7BoA27NixQ7t379a0adPkdrt19uzZdo9tbGxUbm6u\nXC6XUlNT5XQ6tW3bth5M27t1uLjT09NVVVXlyywaMWKEIiMjVVxc7NNxAHTNoUOHtHTpUklSWVlZ\nu8dt3bpVY8eOldvt1nPPPddT8fqMDhd3TU2NXC6XL7NIavkHYu3atT4fB0DnHTlyRAkJCQoKCmq3\nuM+dO6fg4GCdOXNGDodDzzzzTA+n7P38aqlEkqZMmaKKigpdvnzZ7igA7nDjxg2FhYUpOjq63eLO\nzs5WYmKiCgoKNGHCBA0ePLiHU/Z+Pi/ukydPqrm5uVPnpKamstYN+JnKykpFRUVJkmJiYlRaWnrX\nMbm5uZo/f77q6+v1+eefa8aMGT0ds0/weXGvWbPmvs8+3ykhIUF5eXm6ffu2j1LBH/33v//VyZMn\nVV9fb3cUn7h06ZIkdXoi4y8OHjyouLg4SS3FfeeMu6amRmVlZZo4caKcTqeampoobh/xu6USSerX\nr58WLVqk7Oxsu6OgBzQ3N+sXv/iFHn74YU2bNk1Dhw7V+vXr7Y7lNd98841mzZql733ve5Kk4cOH\na+/evTan6rwjR4541qtHjx6t6upq3bx507N/8+bNSklJkSQVFBRIEsXtI35Z3JKUnJysLVu22B0D\nPeDdd9/V+++/L5fLpZs3b6q2tlZvvvmmDh48aHc0r1i6dKkKCgo8T+5fu3ZN8+fP9/mrtLyturra\ns14dExMj6dtXlhw/flxjxoxRaGiopJbifuyxxzRs2LBOj2PnLfembH5b3OHh4YqNjTVyZoLOycrK\nUl1dXavH6urqtGnTJpsSeU9dXZ3y8vLU0NDQ6nHLsrR7926bUnVeVVVVqxIePXq0pJbibm5u1qef\nfqp58+ZJkhoaGlRYWNjl2bZlWWz32QK7/y29P4fD0eVz3W53j44H/7Fz507t3LnT7hg+UV9fr7S0\nNKWlpdkdpUMKCgo869vStzPu0tJSbd++vdVdkUVFRXK5XK2O7wx+fu+vR2bcXXnvgerqahUVFSk+\nPr5L47GZs6Wnp2vAgAGtvoehoaH6+OOPbc/mjW3y5Ml3vf9OcHCwTp8+bXu2O7f2HD58uNUMOiws\nTBERETp06JCampo0atQoz77urm/b/TUwYfPajDspKUknTpy46/GKigodO3ZM/fv3v2vftm3bFBsb\n2+b1Nm/erOTkZG/Fgx976623dPjwYZ05c0a3bt1SSEiIXnzxRf3kJz+xO5pXfPjhh5oxY4bq6urk\ndrvV1NSk3/72txozZozd0Trk6tWr+sc//qF333231ePR0dEqLy/Xz3/+81aP79+/XyNHjvS8dBA+\nYHVQUlKSVV5e3tHDW513/vz5Tp3T2NhoTZw40aqvr+/0eDCT2+22CgoKLEnWyZMn7Y7jdQ0NDdZf\n//pXa8eOHVZlZaXdcdr13Uq4fv26FRcXZw0cONAKCAiwYmJirI0bN3r2p6SkWE6n07Kslp/Z2bNn\n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\n",
"text": "<matplotlib.figure.Figure at 0x1050f58d0>"
}
],
"prompt_number": 33
},
{
"cell_type": "markdown",
"metadata": {},
"source": "# Surface code \nThese are the X and Z checks from a surface code:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(Mz(4)*H(4)*CNOT(4,0)*CNOT(4,1)*CNOT(4,2)*CNOT(4,3)*H(4),5,labels=['d_4','d_3','d_2','d_1','a_0'])",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 34,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x105701350>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAd4AAAExCAYAAADSjMOUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtcV3WC//H3ARIRB8PGS7giSgyaZpmy3jCtlFEs3Ua8\ntF3UYlCQlTFNfYQz48zWTDYZg6t433JtmpS8pqjkDVHRUDZ3H13cFC+YIomaiYAg5/eHG781ReB7\nOd8v317Px+P7eEznez7nvM8o5833nPP9aJimaQoAAFjCy9UBAAD4KaF4AQCwEMULAICFKF4AACxE\n8QIAYCGKFwAAC1G8AABYiOIFAMBCFC8AABaieAEAsBDFCwCAhSheAAAsRPECAGAhihcAAAtRvAAA\nWIjiBQDAQhQvAAAWongBALAQxQsAgIUoXgAALETxAgAahObNm8swDJe8mjdv7rDjMEzTNB22NQAA\nnMQwDLmqshy5b7f6xLt+/XrNmzfP1TEAAHAat/rEW1paqsjISOXm5srLy61+J3Cq5s2b69KlS07b\nfmBgoC5evOi07QNwT552buETrxP4+fkpKipK69atc3UUS126dEmmaTrt5cwfPADu66d0bhk7dqy6\ndesmLy8v+fj46MyZM3ddf//+/WratKkaNWqk3r1766WXXrIoqZsVryQlJiZqwYIFro4BAGhAVqxY\noY8++kh9+/ZVVVWVvv766xrXraio0Lp161RWVqaEhATl5OTo3//93y3LWufiTUpK0vnz552ZRZLU\npk0btW7dWnl5eU7fFwDAc2RnZ2v8+PGSpPz8/BrXW758uTp16qSqqio9+eSTVsWrVufivXLlisrK\nypyZpVpSUpJSUlIs2Ze7+9WvfqWHH35YXl5e8vX1VZ8+ffTrX/9aknT8+HFFRUUpJCREXl5eCgwM\nVP/+/TV//nwXpwbg7jzx3LJv3z7FxMSocePGNRbviRMn5Ofnp6NHj8owDPXr18/ilJLMOho3bpx5\n8uTJuq5ut8cee8w8e/asZftzpdr+GA4cOGAahmG++uqrd3z/z3/+s2kYhrl+/Xqbtg/AM3nauaW2\n/Y0cOdI0TdPs1KmTOWbMmDuu84c//MGsqqoye/XqZXbt2tVh+64Pt7vH+4OEhATu9f6vPXv2SJIG\nDRp0x/d37dolb29vDRgwwMJUABo6Tzq3nDlzRsHBwZKk9u3b6/jx47ets27dOg0fPlylpaU6fPiw\nHnvsMatjSnLDh6t+EBMTo4yMDJWXl7s6istlZWWpUaNGioyMvO29iooK7du3Tw899JCaNWvmgnSO\n8f333ystLU2xsbFavHixSkpKXB3Joc6ePavXX39dEyZM0Nq1a3Xjxg1XR3Kozz//XNOnT9e//Mu/\naO/eva6O41CmaWr37t2aNGmSZs6cqa+++srVkRzGk84tWVlZ6t+/v6SbxfvjS81XrlxRfn6+Hn74\nYeXk5KiystJlxeu2l5pN0zTffPNNc+nSpZbu0xXu9sdw48YN89577zUjIyPv+P6+fftMwzDMpKQk\nm7bvDs6fP2+2adPGbNKkiSnJbNKkidm+fXuzuLjY1dEc4tChQ2bTpk1NX19fU5LZtGlTc9CgQWZl\nZaWroznE+++/bzZp0sT09vY2DcMwmzRpYr722muujuUwSUlJpr+/v2kYhunj42M2adLE/Oijj1wd\nq0487dxyt/3Fx8ebly5dMk3TNOfOnWsahmFeuXKl+v233nrLvHr1qmmapvm73/3ONAzDLCwsrNe+\nHfWy+xPvzp07NWbMGM2YMUMvvfSS3n//fUVERNi7WUlSXFycli1b5pBtNVRHjhzRd999V+Olnl27\ndklS9W96DdHrr7+uoqIiXbt2TZJ07do1nT17Vm+//baLkznGhAkTdPXq1eqrN1evXlVOTo42b97s\n4mT2KysrU3x8vK5du6YbN27INE1du3ZN77zzjk6dOuXqeHY7evSolixZopKSEpmmqcrKSl27dk2/\n/vWvVVFR4ep4dvG0c8vFixd17733Srr5iVf6/082Hzp0SOHh4fL395d08xJ7WFiYWrVqVa99mA76\n/rOPPQe6fPlyJScnKy8vT0FBQTp16pTCw8P1+OOP27PZaoGBgerWrZu2b9+ugQMHOmSbDc0P92Ay\nMzN16NCh297Pzc2VYRiuu2TiAFu3br3tJFZeXq6MjAz96U9/clEqxzBN845fjbt69ao++eQTDRs2\nzAWpHOfLL7+UYRi3Lffx8dG+ffvUrl07F6RynOzs7DseX0VFhfLz8xUeHu6CVI7hSeeW8+fP31Ki\nHTp0kHSzeLt06aLNmzfr97//vSTp+vXrOnjwoJ577jmXZJVk+6Xmzz77zLznnnvMDz/88Jb1fv7z\nn5tvvPFGnT++12bixInmtm3b6jVGDrwkYNWrJs8884x5zz33mCUlJbe9V1lZaTZp0sTs3Lmzx/3/\nwYsXL8e8PO3ccierV68216xZU/3f3333nWkYhvmXv/zFXLZsmXn69Onq9/bu3WsahmGuXLnyrsfm\nzGO1+VJzcnKyAgICFBMTU73syy+/VHFxscO+F3Xx4kXl5uYqKiqqXuNMJ06R5ozX3Y4jOztbDz/8\nsJo0aXLb+4cPH1ZpaWmdfiN19THe7bVz587bjq9Jkybav3+/y7M54jVnzpzbji8gIEBFRUUuz+aI\n1/Dhw9W4cePqY/Px8VF4eHj1peeG/KqoqFBISIi8vb2rj8/Pz0/PPfecy7PV5eVp55aa7N2795as\nAQEBuu+++5Sdna3Kykq1bdu2+r0fPunb8kneUcdhU/FevnxZW7du1aBBg275C7l79241atRIPXv2\ntGWzt1m8eLHi4uIcsq2G6IsvvrjrLzI/PD3aUO7B1OTxxx/X+++/X3156Be/+IXS09PVu3dvFydz\njFdffVV//OMf9fOf/1yS1LdvX2VnZ6tFixYuTuYYf//73/XSSy9V3z8bPny49uzZ4xH/0MkPl8yf\neuopNWrUSNLNe/bLly93cTL7eNK5paioSDt27NB99913y/KQkBCdPHmyelKQH+zatUv/8A//UP3V\nI5cw6+j/XmrOzc01DcMwU1NTb1ln1KhRZr9+/UzTNM38/Pzq5bm5uebkyZPN//iP/zAnTJhgHjt2\nrNb9VVRUmA8//LBZWlpa14gNVk1/DGlpaaZhGLdcQvm/fvWrX5mGYdQ60Ug9/phdriFltQXH17A1\ntOPztHPL/93fhQsXzP79+5tNmzY1vby8zPbt25tpaWnV70+cONHMyckxTfNmnwwZMsR89NFHq5+8\n79+//20dNnv2bLNFixZmTk6OWVRUZB44cOCO+7aXTQ9XBQQESNItvzGUlpZq9+7d1fNkpqam6q9/\n/avKy8sVExOjgwcPqlWrVurUqZOeffZZffrpp3fdR3p6uoYOHXrLJayfmqysLBmGccfv2Ek3p0d7\n4IEHdP/991ucDEBD5gnnlvvuu0+7d++u8f2FCxdW/28fHx9lZGTcdXsnT55U586dlZ+fr9WrV8vL\ny8thV29/zKbiDQsLU9euXXXixAlJN5/wS0xMVHl5udq1a6cLFy5UX1bbs2ePmjZtWv3EWffu3fXl\nl1/q5MmTCgkJqXEfaWlpWr16tS3xPEJVVZWysrLUoUMHtWzZ8rb3v/zySxUVFSk6OtoF6QA0VJxb\n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\ng3X//ffbEg0AbBYUFKRPPvlEgwcP1n//939r2rRpatu27R3XPXz4sJKTk1VVVaU1a9bonnvusTgt\nGiqbn2oOCwvTpk2bblkWGhqqsWPH3rLs448/VnR0tBo1alSn7aampmratGm2xgIAu/ziF7/QgQMH\n9Prrr+uRRx7RY489ptGjR6tly5aSpCVLlmj58uU6f/684uPj9corr1C6qBe7JtCozdmzZ3X58mU9\n+OCD1cvu9lWfgoICFRYWqkePHs6MBQB31bJlS82bN09/+tOf9MEHH2j16tW6dOmSJGnPnj367W9/\nqyFDhtg0vSTg1OLNzMxUYWFh9WXn//mf/9EHH3ygkpISRUdH37b+/PnzlZiY6MxIAFBnTZs2VVxc\nHF9thEM5tXjHjRt3y38vWrRIzz33nB577LHb1i0pKVFmZib/tBYAwKPV69l3W6dC++abbzR9+nQV\nFhZq7ty52rx5823rZGZmKjY2lunWAAAezTDrOL9ienq6oqOj6zSXKQAAuLM6Fy8AALAf06wAAGAh\nihcAAAtRvAAAWIjiBQDAQhQvAAAWongBALAQxQsAgIUoXgAALETxAgBgIYoXAAALUbwAAFiI4gUA\nwEIULwAAFqJ4AQCwEMULAICFKF4AACxE8QIAYCGKFwAAC1G8AABYiOIFAMBCFC8AABaieAEAsBDF\nCwCAhSheAAAsRPECAGAhihcAAAtRvAAAWIjiBQDAQhQvAAAWongBALAQxQsAgIUoXgAALETxAgBg\nof8H6OW5hJftKC0AAAAASUVORK5CYII=\n",
"text": "<matplotlib.figure.Figure at 0x105701ed0>"
}
],
"prompt_number": 34
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(Mz(4)*CNOT(0,4)*CNOT(1,4)*CNOT(2,4)*CNOT(3,4),5,labels=['d_4','d_3','d_2','d_1','a_0'])",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 35,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x104fc2b10>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": "<matplotlib.figure.Figure at 0x105703210>"
}
],
"prompt_number": 35
},
{
"cell_type": "markdown",
"metadata": {},
"source": "# Steane code\n\nMake $|\\bar{0}\\rangle$, Fig 12 from [Aliferis, Gottesman, and Preskill](http://arxiv.org/pdf/quant-ph/0504218.pdf)."
},
{
"cell_type": "code",
"collapsed": false,
"input": "CircuitPlot(CNOT(6,0)*CNOT(5,4)*CNOT(3,2)*CNOT(5,1)*CNOT(3,0)*CNOT(6,2)*CNOT(6,4)*CNOT(3,0),\n 7,labels=[\"0\",\"0\",\"0\",\"+\",\"0\",\"+\",\"+\"])",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 36,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x105862d50>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nrl3VpUsX9ezZU++//74GDRpkdzT8gOrqal1//fXavXu3LMuSZVlKSEjQq6++yvOSvMix/7JpaWnK\nzs62OwaATmzPnj166KGHVFtbq+PHj6u6uloVFRW666677I6GVpg9e7Y+/fRTHT9+XG63WydOnFBe\nXp5WrVpldzS/5thiERoaqujoaBUWFtodBUAntXr16ibXiFmWpZ07d6qqqsqmVGitlStXNjml7na7\n9dprr9mUqHPokFMhLperzWMbGxs7dH6wn7+vP39fvs7g1KlTCgkJsTsG2uh//ud//PJ76JRl6pBi\n0ZangVVWVqqoqEiLFy/ukPnBGZz09Dhv8Pfl8zdff/21Lr74Yrnd7jOvde/eXTfddJPy8vJsTIbW\neO655zR79mydOHHizGs9e/ZUfn6+fvWrX9mYzDwn7VuMFYvJkyfr448/bvJ6cXGxtm7dqu7duzeZ\n9tJLLyk6OrrZz1uyZInS0tJMxQMAj/Xr1095eXm68847VVNTo+PHj+uXv/ylXn75ZbujoRX+8Ic/\naO/evXr55ZdVW1uroKAgPf30035XKpym1X8rJCUlRXPmzFFUVJRHM0hJSdFjjz2myMjIVo+pr6/X\n8OHD9eGHH6pHjx4ezQ++zUmt2xv8ffn8VUNDg3bv3q0hQ4aw/nzQkSNHdMEFF+jEiRMKDAy0O45X\nOGnf0iEXb3q6sDk5OYqPj6dUAHCEgIAAXX755XbHQBuFhoZKkt+WCqdx5HMssrKyuB0IAAAf5Ljb\nTTdv3qzIyEhFRETYHQUAAHjIccVi/vz5uvfee+2OAQAA2sDrxSI4OLjV57VKSkp08OBBDR8+3Mup\nAACAN3j9Gov58+e3+r0LFy5URkaGF9MAAABvcsypELfbrYKCAiUmJtodBQAAtJFHxcKbjwstKChQ\namqqYx5JCgAAPNfqUyGjR49Wnz59vBYkISHBa58NAAA6RqufvAl0BCc9Pc4b/H35/B3rz3f5+7pz\n0vI55hoLAADg+ygWAADAGIoFAAAwhmIBAACMoVgAAABjKBYAAMAYigUAADCGYgEAAIyhWAAAAGMo\nFgAAwBiKBQAAMIZiAQAAjKFYAAAAYygWAADAGIoFAAAwhmIBAACMoVgAAABjKBYAAMAYigUAADCG\nYgEAAIyhWAAAAGMoFgAAwBiKBQAAMIZiAQAAjKFYAAAAYygWAADAGIoFAAAwhmIBAACMoVgAAABj\n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\ntn76059aW7dubTLtu6vtn//8pxUbG2vdcsstVl1dXUdGRCe1bds2Kzw83Hruueesmpqas6Z9d9us\nra215s6da4WHh1sfffRRR8cE/E55ebn1s5/9zJo2bZpVWVl51rTvfvcaGhqs3Nxcq2/fvtaKFSs6\nOqZltFgcPXrU6t+/v/X666+fee3Pf/6zNXToUOvkyZPNfsYvf/lL66uvvmpPDL8zb9486/LLL7e+\n/vrrZqd/vw/W1dVZY8aMscaPH281NjZ2RER0Uvv377ciIiKst956q9npzf1f5a233rIiIiKs/fv3\nezse4LeOHz9u/fznP7ceeeSRZvfzzX33PvnkE6tfv35WYWFhR0T8V5b2DP5+sXjwwQetsLAwq6Gh\n4cxrlZWVVrdu3azFixc3+xkrVqywHnroofbE8CsHDx60QkJCmhwJ+q7mNiC3220NHjzYWr9+vTfj\noZMbO3as9dRTT7U4vaWDoE899ZR1++23eysW4Pf+8z//07rtttta/M9jS9+9tWvXWgMHDjzr97K3\nGb14MycnRzExMWfdQhoaGqrBgwcrJyen2TFJSUnKz89XXV2dySg+Kzs7W0lJSYqKivJoXM+ePTVz\n5kxlZWV5KRk6u/Lycq1fv14ZGRkej83IyFBhYaHKy8u9kAzwbw0NDVq8eLEeeOABuVwuj8bGxcUp\nODhY69ev91K6powVi2PHjmnv3r2KjIxsMi0iIkLbtm1rdlxAQICSk5O1fPlyU1F8Vn19vZYsWaLp\n06e3afxdd92ljRs3qrS01HAyQHrxxReVnJys4OBgj8cGBwcrOTlZL774oheSAf5t7dq1uvDCCzVi\nxAiPx7pcLqWnp3foXZjGisXpK8Kb2+kEBQWpurpap06danZsWlqasrOzTUXxWZ999pl69Oihq666\nqk3je/furVGjRqmwsNBwMkB69913lZyc3Obx48aN07vvvmswEdA5rF27tl3fveTkZK1du7bDbkE1\nViyqq6slSd27d28y7fSzF44ePdrs2NDQUEVHR3f6X4hHjhxRWFhYuz4jLCxMlZWVhhIB/9Le7bNf\nv35sm0AbVFZWKjw8vM3je/fura5du8rtdhtM1bKupj4oICBAkpo9/3P6SMUPPWuhsbHRSBZPz0E5\nTWvy/9B77rvvPlNxgDMuv/zyH3zPD22bvv79BOzwxhtvaMKECed8zw99t3r37m0yUouMHbHo27dv\ni9PcbrdcLleLC1VZWamioiLFxcUZyWJ9e7eLz/3s2bNH/fv3V0NDwznfd65lvPnmm/XGG2/Yviz8\n+N/PddddpzVr1pzzPefaNtesWaPrrrvO9uXghx9f+7n//vs1Z86cc77nXN+98vJy9erVq8PyGisW\nYWFhcrlcOnLkSJNpbrdbISEhZ06JfN+SJUuUlpZmKorP+ulPf6oLL7ywzaeEysvL9cEHH2j06NGG\nkwHS2LFjtWzZsjaPX7ZsmcaOHWswEdA53H777XrllVfa/ITlZcuWtesaDU8ZKxZBQUGKjo5WcXFx\nk2l79+7VsGHDmh1XX1+vlStXauLEiaai+CyXy6UZM2a0+ZbR7OxsJScnn/mbDYBJ48eP14YNG1RW\nVubx2LKyMm3YsEHjx4/3QjLAv/3iF79Qnz59tG7dOo/HNjQ06Pnnn1d6eroXkjXP6HMs4uPjtWXL\nlrNe27dvn0pLS5WUlNTsmJycHMXHx6tHjx4mo/isO++8U5s2bdKmTZs8GldaWqpFixa1+VZV4If0\n7t1bd911lx555JEzh15bw7IszZ49W3fddVeHneMF/M2MGTP02GOPqba21qNxS5Ys0UUXXdTmuw3b\nxGqH7z95s7y83AoJCbGWL19+5rWZM2daQ4cOtU6dOtXsZ4wcOZJHen/Pu+++a4WFhVk7duxodvr3\nV9vBgwetK664wnr66ac7Ih46saqqKuvKK69s9WOFGxsbrdmzZ1tXXnmlVVVV1VExAb/T0NBgjR07\n1kpISLBqa2ubTG/u1/mbb75phYWFWXv27OmIiGcYPWIRHh6ujRs3asWKFZo1a5amTJmi0tJSrV27\nVl27Nr0BZfPmzYqMjFRERITJGD5v1KhRWrhwoeLi4vT888+3eItQfX298vLydM011yghIUF//OMf\nOzgpOpvg4GCtXbtWa9as0fjx47V79+4W37t7925NmDBB77zzjtauXdumB2sB+FaXLl30yiuvKCAg\nQLGxsdq0aVOLRw4rKir08MMP65577lF+fr4GDRrUsWHb00qa++umnkhOTraKioraE8GvFRUVWWPG\njLEuuOAC65577rHy8vKsv/3tb5Yk6/HHH7cGDBhgXXPNNVZeXp7dUdHJHDt27MzfBoqNjbVefvll\na/369ZYk65VXXrFiY2OtsLAw68EHH7Sqq6vtjgv4jYaGBmvBggXWoEGDrCuuuMJasGCB9e6771qS\nrFWrVll33HGHFRISYqWmploHDhywJaPLsjw4Wfo9KSkpmjNnjsd/10KSSkpKNGHCBG3cuLGts+80\niouLlZ2drR07dqi6ulrvv/++MjIydPfdd7d4USzQEerq6vTXv/5Vubm5+uabb7RhwwbdfvvtSkhI\n0G233abzzjvP7oiAX2psbNSGDRv02muv6auvvtL69es1ZswY/frXv9akSZMUEhJiWzbbisWf/vQn\njRgxosWLOgEAgO8xeo1Fa7ndbhUUFCgxMdGO2QMAAC9pd7Foy+N5CwoKlJqayqN9AQDwM+06FZKT\nk6PRo0e3+ERNAADQubSrWAAAAHyXLddYAAAA/0SxAAAAxlAsAACAMRQLAABgDMUCAAAYQ7EAAADG\nUCwAAIAxFAsAAGAMxQIAABhDsQAAAMZQLAAAgDEUCwAAYAzFAgAAGEOxAAAAxlAsAACAMRQLAABg\nDMUCAAAYQ7EAAADGUCwAAIAxFAsAAGAMxQIAABhDsQAAAMZQLAAAgDEUCwAAYAzFAgAAGEOxAAAA\nxlAsAACAMRQLAABgDMUCAAAYQ7EAAADGUCwAAIAxFAsAAGAMxQIAABjz/wCbmjDe6ZbjyQAAAABJ\nRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x105862310>"
}
],
"prompt_number": 36
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Let's use the power of python to make this a little easier:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "import operator\ndef prod(c): return reduce(operator.mul, c, 1)\n\nsteane_pairs = [(6,0),(5,4),(3,2),(5,1),(3,0),(6,2),(6,4),(3,0)]\ncircuit2 = prod([CNOT(i,j) for i,j in steane_pairs])\nlabels=[\"0\",\"0\",\"0\",\"+\",\"0\",\"+\",\"+\"]\nCircuitPlot(circuit2,7,labels=labels)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 37,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x1059d0b50>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nrl3VpUsX9ezZU++//74GDRpkdzT8gOrqal1//fXavXu3LMuSZVlKSEjQq6++yvOSvMix/7JpaWnK\nzs62OwaATmzPnj166KGHVFtbq+PHj6u6uloVFRW666677I6GVpg9e7Y+/fRTHT9+XG63WydOnFBe\nXp5WrVpldzS/5thiERoaqujoaBUWFtodBUAntXr16ibXiFmWpZ07d6qqqsqmVGitlStXNjml7na7\n9dprr9mUqHPokFMhLperzWMbGxs7dH6wn7+vP39fvs7g1KlTCgkJsTsG2uh//ud//PJ76JRl6pBi\n0ZangVVWVqqoqEiLFy/ukPnBGZz09Dhv8Pfl8zdff/21Lr74Yrnd7jOvde/eXTfddJPy8vJsTIbW\neO655zR79mydOHHizGs9e/ZUfn6+fvWrX9mYzDwn7VuMFYvJkyfr448/bvJ6cXGxtm7dqu7duzeZ\n9tJLLyk6OrrZz1uyZInS0tJMxQMAj/Xr1095eXm68847VVNTo+PHj+uXv/ylXn75ZbujoRX+8Ic/\naO/evXr55ZdVW1uroKAgPf30035XKpym1X8rJCUlRXPmzFFUVJRHM0hJSdFjjz2myMjIVo+pr6/X\n8OHD9eGHH6pHjx4ezQ++zUmt2xv8ffn8VUNDg3bv3q0hQ4aw/nzQkSNHdMEFF+jEiRMKDAy0O45X\nOGnf0iEXb3q6sDk5OYqPj6dUAHCEgIAAXX755XbHQBuFhoZKkt+WCqdx5HMssrKyuB0IAAAf5Ljb\nTTdv3qzIyEhFRETYHQUAAHjIccVi/vz5uvfee+2OAQAA2sDrxSI4OLjV57VKSkp08OBBDR8+3Mup\nAACAN3j9Gov58+e3+r0LFy5URkaGF9MAAABvcsypELfbrYKCAiUmJtodBQAAtJFHxcKbjwstKChQ\namqqYx5JCgAAPNfqUyGjR49Wnz59vBYkISHBa58NAAA6RqufvAl0BCc9Pc4b/H35/B3rz3f5+7pz\n0vI55hoLAADg+ygWAADAGIoFAAAwhmIBAACMoVgAAABjKBYAAMAYigUAADCGYgEAAIyhWAAAAGMo\nFgAAwBiKBQAAMIZiAQAAjKFYAAAAYygWAADAGIoFAAAwhmIBAACMoVgAAABjKBYAAMAYigUAADCG\nYgEAAIyhWAAAAGMoFgAAwBiKBQAAMIZiAQAAjKFYAAAAYygWAADAGIoFAAAwhmIBAACMoVgAAABj\n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\ntn76059aW7dubTLtu6vtn//8pxUbG2vdcsstVl1dXUdGRCe1bds2Kzw83Hruueesmpqas6Z9d9us\nra215s6da4WHh1sfffRRR8cE/E55ebn1s5/9zJo2bZpVWVl51rTvfvcaGhqs3Nxcq2/fvtaKFSs6\nOqZltFgcPXrU6t+/v/X666+fee3Pf/6zNXToUOvkyZPNfsYvf/lL66uvvmpPDL8zb9486/LLL7e+\n/vrrZqd/vw/W1dVZY8aMscaPH281NjZ2RER0Uvv377ciIiKst956q9npzf1f5a233rIiIiKs/fv3\nezse4LeOHz9u/fznP7ceeeSRZvfzzX33PvnkE6tfv35WYWFhR0T8V5b2DP5+sXjwwQetsLAwq6Gh\n4cxrlZWVVrdu3azFixc3+xkrVqywHnroofbE8CsHDx60QkJCmhwJ+q7mNiC3220NHjzYWr9+vTfj\noZMbO3as9dRTT7U4vaWDoE899ZR1++23eysW4Pf+8z//07rtttta/M9jS9+9tWvXWgMHDjzr97K3\nGb14MycnRzExMWfdQhoaGqrBgwcrJyen2TFJSUnKz89XXV2dySg+Kzs7W0lJSYqKivJoXM+ePTVz\n5kxlZWV5KRk6u/Lycq1fv14ZGRkej83IyFBhYaHKy8u9kAzwbw0NDVq8eLEeeOABuVwuj8bGxcUp\nODhY69ev91K6powVi2PHjmnv3r2KjIxsMi0iIkLbtm1rdlxAQICSk5O1fPlyU1F8Vn19vZYsWaLp\n06e3afxdd92ljRs3qrS01HAyQHrxxReVnJys4OBgj8cGBwcrOTlZL774oheSAf5t7dq1uvDCCzVi\nxAiPx7pcLqWnp3foXZjGisXpK8Kb2+kEBQWpurpap06danZsWlqasrOzTUXxWZ999pl69Oihq666\nqk3je/furVGjRqmwsNBwMkB69913lZyc3Obx48aN07vvvmswEdA5rF27tl3fveTkZK1du7bDbkE1\nViyqq6slSd27d28y7fSzF44ePdrs2NDQUEVHR3f6X4hHjhxRWFhYuz4jLCxMlZWVhhIB/9Le7bNf\nv35sm0AbVFZWKjw8vM3je/fura5du8rtdhtM1bKupj4oICBAkpo9/3P6SMUPPWuhsbHRSBZPz0E5\nTWvy/9B77rvvPlNxgDMuv/zyH3zPD22bvv79BOzwxhtvaMKECed8zw99t3r37m0yUouMHbHo27dv\ni9PcbrdcLleLC1VZWamioiLFxcUZyWJ9e7eLz/3s2bNH/fv3V0NDwznfd65lvPnmm/XGG2/Yviz8\n+N/PddddpzVr1pzzPefaNtesWaPrrrvO9uXghx9f+7n//vs1Z86cc77nXN+98vJy9erVq8PyGisW\nYWFhcrlcOnLkSJNpbrdbISEhZ06JfN+SJUuUlpZmKorP+ulPf6oLL7ywzaeEysvL9cEHH2j06NGG\nkwHS2LFjtWzZsjaPX7ZsmcaOHWswEdA53H777XrllVfa/ITlZcuWtesaDU8ZKxZBQUGKjo5WcXFx\nk2l79+7VsGHDmh1XX1+vlStXauLEiaai+CyXy6UZM2a0+ZbR7OxsJScnn/mbDYBJ48eP14YNG1RW\nVubx2LKyMm3YsEHjx4/3QjLAv/3iF79Qnz59tG7dOo/HNjQ06Pnnn1d6eroXkjXP6HMs4uPjtWXL\nlrNe27dvn0pLS5WUlNTsmJycHMXHx6tHjx4mo/isO++8U5s2bdKmTZs8GldaWqpFixa1+VZV4If0\n7t1bd911lx555JEzh15bw7IszZ49W3fddVeHneMF/M2MGTP02GOPqba21qNxS5Ys0UUXXdTmuw3b\nxGqH7z95s7y83AoJCbGWL19+5rWZM2daQ4cOtU6dOtXsZ4wcOZJHen/Pu+++a4WFhVk7duxodvr3\nV9vBgwetK664wnr66ac7Ih46saqqKuvKK69s9WOFGxsbrdmzZ1tXXnmlVVVV1VExAb/T0NBgjR07\n1kpISLBqa2ubTG/u1/mbb75phYWFWXv27OmIiGcYPWIRHh6ujRs3asWKFZo1a5amTJmi0tJSrV27\nVl27Nr0BZfPmzYqMjFRERITJGD5v1KhRWrhwoeLi4vT888+3eItQfX298vLydM011yghIUF//OMf\nOzgpOpvg4GCtXbtWa9as0fjx47V79+4W37t7925NmDBB77zzjtauXdumB2sB+FaXLl30yiuvKCAg\nQLGxsdq0aVOLRw4rKir08MMP65577lF+fr4GDRrUsWHb00qa++umnkhOTraKioraE8GvFRUVWWPG\njLEuuOAC65577rHy8vKsv/3tb5Yk6/HHH7cGDBhgXXPNNVZeXp7dUdHJHDt27MzfBoqNjbVefvll\na/369ZYk65VXXrFiY2OtsLAw68EHH7Sqq6vtjgv4jYaGBmvBggXWoEGDrCuuuMJasGCB9e6771qS\nrFWrVll33HGHFRISYqWmploHDhywJaPLsjw4Wfo9KSkpmjNnjsd/10KSSkpKNGHCBG3cuLGts+80\niouLlZ2drR07dqi6ulrvv/++MjIydPfdd7d4USzQEerq6vTXv/5Vubm5+uabb7RhwwbdfvvtSkhI\n0G233abzzjvP7oiAX2psbNSGDRv02muv6auvvtL69es1ZswY/frXv9akSZMUEhJiWzbbisWf/vQn\njRgxosWLOgEAgO8xeo1Fa7ndbhUUFCgxMdGO2QMAAC9pd7Foy+N5CwoKlJqayqN9AQDwM+06FZKT\nk6PRo0e3+ERNAADQubSrWAAAAHyXLddYAAAA/0SxAAAAxlAsAACAMRQLAABgDMUCAAAYQ7EAAADG\nUCwAAIAxFAsAAGAMxQIAABhDsQAAAMZQLAAAgDEUCwAAYAzFAgAAGEOxAAAAxlAsAACAMRQLAABg\nDMUCAAAYQ7EAAADGUCwAAIAxFAsAAGAMxQIAABhDsQAAAMZQLAAAgDEUCwAAYAzFAgAAGEOxAAAA\nxlAsAACAMRQLAABgDMUCAAAYQ7EAAADGUCwAAIAxFAsAAGAMxQIAABjz/wCbmjDe6ZbjyQAAAABJ\nRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x10538bed0>"
}
],
"prompt_number": 37
},
{
"cell_type": "markdown",
"metadata": {},
"source": "We can now extend this to a full Steane check:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "circuit1 = prod([CNOT(i+7,j+7) for i,j in steane_pairs])\ndecoder = prod([CNOT(i+7,j+7) for i,j in reversed(steane_pairs)])\ntransverse = prod([CPHASE(i+7,i) for i in range(7)])\nCircuitPlot(decoder*transverse*circuit2*circuit1,14,labels=labels+labels)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 38,
"text": "<sympy.physics.quantum.circuitplot.CircuitPlot at 0x1059c6b90>"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nPql/HrVVusp5blLe42dtKQ0FCxn33nvvj91WU1MTuVwuPvWpTzW4ffXq1VFdXR0TJ04sSC2eq1Wa\n7rzzzvj9738f991338e+J5fL7XD8DjrooJg1a1YceuihxSix6D6pf5Q241earC3mJgBkSdaP61nr\n38aNG6Njx45b7+70ofbt28fKlSujdevWKVUGZEm5rp35fD5at24dq1at+tjzwhE77t/o0aNjyZIl\nn/jFYtJRrnOTD5Tr+FlbSkvBbpfasWPHyOVysWbNmu221dTUxJ577rn1tqkfNWnSpBg2bFihSqFE\nHXfccfH73/8+3nvvvSa1X7BgQdTW1sbnPve5AlcGlDNrCwAAaWndunXcf//90a5du60nudq1axez\nZs0SMALNXi6XixNOOCGmT5/e5M+YNm1anHjiiQWsCih31pbSUrCQsV27dtGjR49YunTpdtsWL14c\nRxxxRIPt6urqYvr06XHOOecUqhRK1Gc+85k45phj4t57721S+4kTJ8b5558fLVsW7AJcIAOsLQAA\npOm4446LN998M2699daIiHjzzTejb9++KVcFUBqGDx8e48ePb9LVUtXV1fHPf/4zTjjhhCJUBpQz\na0vpKFjIGBFx0kknxdNPP73Na6+++mosW7YsBg8e3GCbmTNnxkknneQbfs3E97///fjlL38ZGzZs\nSNTu9ddfj1mzZsWQIUOKVBlQzqwtAACkqX379nH66adv/TcAH+jbt2+sX78+qqqqErXL5/Px3//9\n33HBBRdEixYtilQdUK6sLaWjoCHjhRdeGDU1NXHPPfdsfe3mm2+OQw45JIYOHdpgmwkTJsSIESMK\nWQYl7Otf/3r06tUrvv3tb8fmzZsb1WbVqlXRv3//uOaaa6Jjx45FrhAoR9YWAAAAKD0VFRUxadKk\nOOecc+Jvf/tbo9rk8/m49tpr4/XXX3feGGiQtaV0FDRk7NSpUzz66KMxbdq0+MEPfhBDhw6NZcuW\nxUMPPdTgbeiefPLJ6Nq1a3Tu3LmQZVDCcrlc3HbbbVFRUREnnnhi/OMf/9jh+6urq+Ooo46Kb37z\nm3HJJZfsmiKBsmNtAQAAgNL09a9/PW6++eY47rjjYvbs2VFfX/+x7129enUMHz485syZEw888EC0\na9duF1YKlBNrS2koaMgYEXH44YfHAw88EKNHj45bb701Zs2aFV26dGnwvWPHjnVytxnabbfdYtas\nWdG7d+/o2bNnnHzyyTFv3rxYsWJFREQsW7Ys7r777vjyl78cgwcPjh//+Mfxk5/8JOWqgVJnbQEA\nAIDSdNppp8XMmTPjJz/5SRx44IHxP//zP7FkyZJ49913I+KDi1G+973vxQEHHBC1tbXxpz/9KTp1\n6pRy1UCps7akL5dvypMx/3+VlZUxatSo6NatW+K2b7zxRpx99tnx6KOPNnX3ZMCGDRti2rRpMXny\n5Hj11Vfj7bffjs6dO8cRRxwRF154YfTv3z9T90bO5XJNehgtpcH4lQ9rCwBQrrJ+XNc/gOSytLbk\n8/l45plnYvz48fHoo4/GmjVrYv369fH5z38+vvOd78T3vve92HvvvdMuk0bK0txsjrI0ftaW9KQW\nMl5++eXRq1evGDx4cFN3D2UnSwt3c2T8KFXmJgBkR9aP6/oHkJy1hVJlbpY340chFPx2qY1RU1MT\nVVVVMWjQoDR2DwAAAAAAAOyEnQ4Zc7lc4jZVVVUxZMiQJrUFAAAAAAAA0tVyZxr3798/9tprr8Tt\nBg4cuDO7BQAAAAAAAFK0U89kBJJxn+vyZvwoVeYmAGRH1o/r+geQnLWFUmVuljfjRyGk8kxGAAAA\nAAAAoHwJGQEAAAAAAIBEhIwAAAAAAABAIkJGAAAAAAAAIBEhIwAAAAAAAJCIkBEAAAAAAABIRMgI\nAAAAAAAAJCJkBAAAAAAAABIRMgIAAAAAAACJCBkBAAAAAACARISMAAAAAAAAQCJCRgAAAAAAACAR\nISMAAAAAAACQiJARAAAAAAAASETICAAAAAAAACQiZAQAAAAAAAASETICAAAAAAAAiQgZAQAAAAAA\ngESEjAAAAAAAAEAiQkYAAAAAAAAgESEjAAAAAAAAkIiQEQAAAAAAAEhEyAgAAAAAAAAkImQEAAAA\nAAAAEhEyAgAAAAAAAIkIGQEAAAAAAIBEhIwAAAAAAABAIkJGAAAAAAAAIBEhIwAAAAAAAJCIkBEA\nAAAAAABIpGRCxjlz5sRNN92UdhkAAAAAAADAJ8jl8/l82kVERNTW1kbv3r2juro6KipKJvuEgsrl\nclEiP3I0gfGjVJmbAJAdWT+u6x9ActYWSpW5Wd6MH4VQMmlemzZtol+/fjF79uy0SwEAAAAAAAB2\noGSuZIyIWL58eZx99tkxf/78tEuBovDtkPJm/ChV5iYAZEfWj+v6B5CctYVSZW6WN+NHITT6SsaL\nL744Vq5cWcxaokuXLtGpU6dYsGBBUfcDAAAAAAAANF2jQ8Z169bFxo0bi1lLRHwQZo4ZM6bo+wEA\nAAAAAACapmSeyfihI488MpYuXRpvvfVW2qUAAAAAAAAADSh6yPj888/Hli1bErUZPnx4jB8/vkgV\nAQAAAAAAADuj6CHj6NGjY9myZYnaDB48OObNmxebNm0qUlXl6e9//3vceeed8dhjj3kgKyVl3bp1\nMX369Jg+fXqsW7cu7XJIyNoCAADsyPLly+Puu++OBx54IDZv3px2OQBlwfmW8rV58+Z44IEH4u67\n747ly5enXQ5so9TWlpZpF9CQFi1axOmnnx5TpkyJIUOGpF1O6urr6+Occ86JX//611FRURG5XC4O\nPPDA+MMf/hDt27dPuzyauYcffjgGDhwYFRUffGehvr4+Zs+eHX379k25Mj6JtQUAAPgkY8aMiSuv\nvDJatmwZFRUV0bZt23jsscfis5/9bNqlAZQk51vK2yuvvBJf/epXo6amJvL5fNTV1cXPfvaz+MEP\nfpB2aTRzpbq2lNwzGT80bNiwmDx5ctpllISZM2fGnDlzora2NmpqamL9+vWxcOHCuPrqq9MujWZu\n48aNMXjw4KipqYn33nsv3nvvvaipqYnBgwfHxo0b0y6PT2BtAQAAduTll1+OH//4x7Fx48ZYv359\nrFu3LlauXBlnnXVW2qUBlCznW8rbWWedFStXroz33nsv1q9fHxs3boyrrroqFi1alHZpNHOluraU\nbMjYoUOH6NGjRzzyyCNpl5K6e+65J2pqarZ5bfPmzTFjxoyUKoIPPPnkkx+77YknntiFldAU1hYA\nAGBH5s6dG1u2bNnmtXw+H88991y8++67KVUFUNqcbylf69ati+eee267W1DW1dXF3LlzU6oKPlCq\na8suuV1qLpdrctv6+vpdur9ysmLFimbT1yxpDmO2bt26OPbYY9Muoyiaw/hZW8qTMQOA7Mj6cV3/\nyt/7778fe+65Z9plQLPSHNaWrMvq+ZYs9umj3n///bjsssvisssuS7uUgmsO45d1aa8tuyRkbMrD\nJ1evXh3V1dUxceLEXbK/UvbYY4/FiSeeGBs2bNj6Wtu2beO6666LSy+9NMXKSCqXy2VqftbX18f+\n++8fS5cu3dqvXC4X++67b7z22mtbn9OYFVkbP2tLdmRtbgJAc5b147r+lZe333479t9//22+Nb/b\nbrvFiSeeGHPmzEmxMmhesra2ZF1zOt+Sxbk5cODAmDdvXmzevHnra23bto0lS5ZEx44dU6ys8LI4\nfllWqmt8v7xSAAAgAElEQVRLwRKAc889N3r06LHdf3Pnzo3+/fs3uO3ZZ5/92M+bNGlSDBs2rFDl\nlbWvfvWrcf3110e7du3iU5/6VEREnH322XHJJZekXBnNXUVFRTz88MNx0EEHRdu2bSMi4qCDDopH\nHnkkcwFjFllbAACAHdlnn31izpw5sffee8cee+wRER/8HXHnnXemWxhACXO+pbzdcccd0adPn2jd\nunVEROy9997xm9/8JnMBI+WnVNeWXL6RUXVlZWWMGjUqunXrlmgHlZWVcd1110XXrl0b3aauri56\n9uwZTz311NYfZiJqa2tj8eLFcdhhh/mGQZnK6rdD8vl8LFmyJP7zP/8z6uvrM3uZfVbHz9pS/rI6\nNwGgOcr6cV3/ytOWLVti0aJFccghh2Syf1Dqsrq2ZF1zON+S5bn55ptvRpcuXaKuri5atGiRdjlF\nkeXxy7JSW1t2yaVGSTs6c+bMOOmkkwSMH9GmTZs49NBD0y4DtpPL5eKAAw7Y+m/Ki7UFAADYkRYt\nWsTBBx+cdhkAZcX5lvL27//+7xERmQ0YKV+ltrbskmcyJjVhwoSYMWNG2mUAAAAAAAAADSi5h6Y9\n+eST0bVr1+jcuXPapQAAAAAAAAANKLmQcezYsak/qBIAAAAAAAD4eEUPGdu3bx9t2rRp1HvfeOON\nWLFiRfTs2bPIVQEAAAAAAABNVfRnMo4dO7bR7x03blyMGDGiiNUAAAAAAAAAO6tkbpdaU1MTVVVV\nMWjQoLRLAQAAAAAAAHYgUciYy+WKVUdUVVXFkCFDiroPAAAAAAAAYOc1+nap/fv3j7322qtohQwc\nOLBonw0AAAAAAAAUTi6fz+fTLoJkcrlcGLbylPWx07/ylvX+ZZmxA4DsyPpxXf/KW9b7B6XKz155\ny/L4ZblvEfpHaSuV8SuZZzICAAAAAAAA5UHICAAAAAAAACQiZAQAAAAAAAASETICAAAAAAAAiQgZ\nAQAAAAAAgESEjAAAAAAAAEAiQkYAAAAAAAAgESEjAAAAAAAAkIiQEQAAAAAAAEhEyAgAAAAAAAAk\nImQEAAAAAAAAEhEyAgAAAAAAAIkIGQEAAAAAAIBEhIwAAAAAAABAIkJGAAAAAAAAIBEhIwAAAAAA\nAJCIkBEAAAAAAABIRMgIAAAAAAAAJCJkBAAAAAAAABIRMgIAAAAAAACJCBkBAAAAAACARISMAAAA\nAAAAQCJCRgAAAAAAACARISMAAAAAAACQiJARAAAAAAAASETICAAAAAAAACQiZAQAAAAAAAASETIC\nAAAAAAAAiQgZAQAAAAAAgESEjAAAAAAAAEAiqYSMc+bMiZtuuimNXQMAAAAAAAA7KZfP5/O7eqe1\ntbXRu3fvqK6ujooKF1MmlcvlIoVhowCyPnb6V96y3r8sM3YAkB1ZP67rX3nLev+gVPnZK29ZHr8s\n9y1C/yhtpTJ+qSR8bdq0iX79+sXs2bPT2D3scuvXr4/XXnstIiLefvvtkvjhh4iIurq6ePPNN+Ol\nl16KiIhNmzalXBEAAABAeXO+hVK2Zs2aWLx48dZ/w85I7TLCESNGxPjx49PaPRRdPp+P+fPnx+DB\ng6NTp05xzDHHRERE9+7d45BDDolx48bFu+++m26RNFvLli2La6+9Nrp27Rpf+MIX4pRTTomIiE6d\nOsXw4cPj+eefT7lCAAAAgPLifAulavPmzTF9+vTo06dPdO3aNY4//viIiOjatWv06dMnpk+fHps3\nb065SsrRToWMF198caxcubJJbbt06RKdOnWKBQsW7EwJUJIWLVoUhx9+eFx00UXx9a9/Pd588814\n/fXXIyLinXfeiYkTJ8af/vSn2G+//WLcuHEpV0tzUldXFyNHjozDDjss3nnnnXj44YdjxYoV8fLL\nL0dExN///vfo2LFjnHDCCdG/f3/fZgIAAAD4BM63UMqqqqpiv/32i0mTJsXIkSNj9erV8eqrr0ZE\nxOrVq2PkyJExadKk6NatW1RVVaVcLeVmp57JWFlZGaNGjYpu3bptfW3RokVx5ZVXRrdu3SKXy8Wq\nVavihhtuiH322We79k8//XSMGzcupkyZ0tQSmqVSudcuDXvuuefihBNOiJ/+9Kdx3nnnRS6X27rt\no2P36quvxoABA2LQoEHx05/+NI1yCyrrc7Pc+/f+++/HoEGD4v3334/77rsv9txzz222/2v/3n//\n/bj88svjoYceij/+8Y+x9957p1EyjVTucxMA+D9ZP67rX3nLev+gVPnZK23N+XxL1udmFvo3c+bM\nGDly5NarGP/VR/v3xz/+MU4//fS46aab4rTTTtvVpZJQqczPgt4u9d13341jjz02Bg0aFKNHj44b\nb7wxunfvHscee2y8//77273/yCOPjKVLl8Zbb71VyDIgNW+++WYMGDAgxo0bF0OGDNkmYGzIAQcc\nEI8//njMnDkzJk2atIuqpLkaMWJEbNmyJebOnbvdL7wf1apVqxg9enQMHDgwTjnlFLdLAAAAAGiA\n8y2UqieeeCK+//3vR1VV1XYBY0P69OkTVVVVMWLEiPjzn/+8CyokCwoaMl5//fVRV1cXZ5xxxtbX\nLrjggli0aFHcdtttDbYZPny4ZzOSGaNHj45vfetbMXjw4Ea32WuvvWL27Nlx9dVXx8aNG4tYHc3Z\nSy+9FHPmzInp06dHq1atGt3upz/9aey2225x//33F7E6AAAAgPLjfAul7Mc//nGMHj06DjvssEa3\nOeyww2LMmDFx1VVXFbEysqSgIePMmTPjyCOPjIqK//vYDh06RPfu3WPmzJkNthk8eHDMmzcvNm3a\nVMhSYJerra2Nu+66K0aOHJm47cEHHxw9evT42J8T2Fm33HJLnHfeebHHHnskapfL5eKiiy6KCRMm\nFKkyAACA9GzatCnuvvvuGDp0aNx4442xevXqtEsCyojzLZSqF154IV566aUm3fb0W9/6Vrz00kvx\nwgsvFKEysqZgIeN7770Xixcvjq5du263rXPnzvGXv/ylwXYtWrSI008/3XMZKXvTp0+PL33pS7H/\n/vs3qf3w4cP9YkFRbNiwIaZMmRLnn39+k9qfcsopsWTJknj++ecLXBkAAEB6NmzYEL169Yrhw4fH\n5MmT4+qrr44DDzwwXnvttbRLA8qA8y2UsokTJ8bQoUNjt912S9x2t912i6FDh8bEiROLUBlZU7CQ\n8fXXX4+IiPbt22+3rV27drFu3boGn8sYETFs2LCYPHlyoUqBVDz99NPRv3//Jrfv379/VFdXR319\nfQGrgohFixZFly5dolu3bk1q36pVqzj++OPjqaeeKnBlAAAA6Zk8eXK8+uqrUVNTExEf3KFozZo1\ncdlll6VcGVAOnG+hlD311FM7da76pJNOMjdplIKFjOvWrYuIaDAZb9euXURErF27tsG2HTp0iB49\nesQjjzxSqHJgl1u7dm106NChye1btWoVrVu3jvXr1xewKoh49913d2puRnywTn/cGg4AAFCOHnjg\ngdiwYcM2r9XX18ejjz6aTkFAWXG+hVK2s/Nzzz33NDdplJaF+qAWLVpExAf3k/6oD69g3LJlyw4/\n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\n0EEHbfsVUaNGjeLLX/5yfO5zn0u5umRcb4F0uN5CsSq1nKhgZ0CjRo2irKysxnuAL1u2bIc/+6+q\nqooHHnggLrvsskKVUrIOOuig6N27d9xxxx21Gj9z5sw46qij4oQTTihwZfCPb/fceeedsXnz5sRj\nN2/eHHfeeWcMGjSoDiqDbOvVq1csWrQoXn/99VqNHzduXAwePLjAVQEAAKTrC1/4QvzlL3+JYcOG\nRUREeXl53HfffSV321DXWyAdrrdQrEotJypozN6tW7d4+umnP7bstddei5UrV0bPnj1rHFNeXh7d\nunWLAw88sJCllKxBgwbFXXfdFevXr080Lp/Px+jRo01s1Jn27dtHu3btYurUqYnHlpeXR7t27aJ9\n+/Z1UBlkW8OGDePyyy+P2267LfHYl156KZ577rm48MIL66AyAACAdB155JHxk5/8JCIizj///JIL\nGCNcb4G0uN5CMSulnKigIeOgQYOioqIi7r333m3LbrvttujQocMO7/06bty4vfLwyVJx7LHHxgUX\nXBC9evWKLVu27Pa466+/PjZv3hw9evSow+rY1/3sZz+La665Zpf3g/7//fnPf46hQ4fGz372szqs\nDLLtmmuuifLy8igvL9/tMe+991507949brzxRl/kAQAAKGKut0A6XG+hWJVSTlTQkLFly5Yxb968\nuP/+++Oaa66J/v37x8qVK+PRRx+NBg0abLf9ggULok2bNtGqVatCllHyxowZE/Xr148vf/nLsWbN\nmp1uu2XLlrjmmmti+vTpMXPmzG33oYe6cNppp8XYsWPj7LPPjnnz5u1y+8cffzzOPvvsGDNmTEk9\ndB2KzRFHHBGzZs2Kb37zmzFx4sQdPtT5I6+99lp8/vOfj4suuigGDhy4l6oEAACgNlxvgXS43kIx\nK5WcqOBPJT3ppJNi1qxZMWLEiLjzzjtj2rRp0bp16xq3HTVqVAwdOrTQJZS8/fbbLx566KH4zGc+\nE0cddVRcddVV8eKLL35sm1WrVsXw4cPjyCOPjKVLl8b8+fOjRYsWKVXMvuTCCy+MKVOmxCWXXBJf\n+MIXory8/GPfptiyZUuUl5fHF77whbj44otjypQpcdFFF6VYMWTDySefHI8//niMHj06jj/++Bg7\ndmysW7du2/p8Ph/z5s2Liy66KDp27BhXXXVV3HjjjSlWDAAAwO5yvQXS4XoLxapUcqJcflfx/E70\n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\nT7mywsv6uZfl/rLcW0T2+wOAYlWw26UefvjhkcvlYvXq1dutq6ioiKZNm267beonTZgwIQYMEqVx\ngQAAIABJREFUGFCoUgAAikLfvn1jwoQJtRpbWVkZkydPjssuu6zAVQGlztwCxWX27Nnx9a9/PRo2\nbBgHHnhgXHzxxTF79uy0ywIAgDpXsJCxUaNGUVZWFsuXL99u3bJly+Lkk0+ucVxVVVU88MAD/pML\nAGTOwIEDY/LkybFhw4bEY8vLy+PUU0+No48+ug4qA0qZuQWKS5MmTeKee+6JDRs2RGVlZfz617+O\nJk2apF0WAADUuYKFjBER3bp1i6effvpjy1577bVYuXJl9OzZs8Yx5eXl0a1btzjwwAMLWQoAQOra\ntm0bX/ziF2PYsGGJbt/01ltvxY9//OP49re/XYfVAaXK3AIAAEAxKGjIOGjQoKioqIh7771327Lb\nbrstOnToEP37969xzLhx42LIkCGFLAMAoGjceeedMW/evPjRj360W2HAG2+8Eeeee2584xvfiHPO\nOWcvVAiUInMLAAAAaStoyNiyZcuYN29e3H///XHNNddE//79Y+XKlfHoo49GgwYNttt+wYIF0aZN\nm2jVqlUhywAAKBpNmjSJP/zhDzFnzpzo2rVr/P73v4/q6urttluzZk2MGjUqOnXqFL169Yrrr78+\nhWqBUmFuAQAAIG3bJ3976KSTTopZs2bt1rajRo2K7373u4UuAQCgqBx22GHx+OOPx+TJk+M73/lO\nbNy4Mbp37x6HHnpoRET06dMnHn744TjvvPPi/vvvj9NPPz3lioFSYG4BAAAgTQX9JWMSK1asiLfe\neis6duyYVgkAAHtNw4YNY+DAgfH888/HpEmT4uCDD4633norIiJOOeWUePnll+O//uu/hABAIuYW\nAAAA0pLL784DPHagb9++MXz48Gjbtm3iscOGDYtTTz01evbsWdvdAwBQ5HK53G49L47i472jmDk+\nIR1ZP/ey3F+We4vIfn8AUKxS+SVjRUVFzJkzJ3r06JHG7gEAAAAAAIA9sMchYy6XSzxmzpw50a9f\nv1qNBQAAAAAAANLVYE8Gd+3aNZo3b554XPfu3fdktwAAAAAAAECK9uiZjAAAsDOej1O6vHcUM8cn\npCPr516W+8tybxHZ7w8AilUqz2QEAAAAAAAASpeQEQAAAAAAAEhEyAgAAAAAAAAkImQEAAAAAAAA\n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\nbZkyZUq5ogAA0MqOPfbYrF+/Ps8++2yz5rdv357vfe97+yyBoLne9773ZfHixc2ef/DBB52bAJ3A\npEmTcvTRR+/6fVWvXr3St2/fTJ8+vcLJAADah7KVjFVVVTnxxBP3+OySZ555Zq+3K2psbMyCBQvy\nyU9+slxRAABoZQcddFAmTpyY22+/vVnzCxcuzFFHHZW//Mu/LHMySGpqajJnzpxs27at8Oy2bdsy\nZ86c1NTUtEIyANqSgw46aNedtSZNmpSvfe1reeqpp/Kud72r0tEAANqFspWMSTJmzJisWLHiTcvW\nrFmTdevWpbq6eo8z9fX1GTNmTHr27FnOKAAAtLKamprMmzcv//u//1torqmpKTNmzMjUqVNbKRmd\n3XHHHZchQ4bk3/7t3wrP1tfXZ8iQITnuuONaIRkAbU2PHj0yceLEzJkzJ1dccUUOPfTQSkcCAGg3\nyloy1tTUpKGhIXfdddeuZTNnzszxxx+/12ftzJ49O7W1teWMAQDAAXDsscfmrLPOyvjx47N9+/b9\nnvvSl76Ubdu2Zdy4ca2Yjs7uuuuuyxVXXPGWzw19o1/84he5/PLLc91117ViMgAAAOgYyloyDhgw\nIMuXL88999yTK664IpMnT866deuyZMmSdOvWbbftH3300QwaNCgDBw4sZwwAAA6QWbNmpWvXrvno\nRz+al19+eZ/bbt++PVdccUXuu+++LFy4MN27dz9AKemMTjvttNTV1eXMM8/M8uXL33L7H/zgBznz\nzDMza9asnHbaaa0fEAAAANq53Zu/FjrhhBOyaNGi/dr25ptvzrRp08odAQCAA+Rtb3tb7r333lx+\n+eU56qijMmHChNTU1GTo0KG7tlm/fn3mzJmTOXPmZNiwYfnJT36Svn37VjA1ncUnPvGJHHLIITnv\nvPNy7LHHZurUqTnrrLPytre9Lcn/F9/3339/Zs+enV//+te58847M3LkyAqnBgAAgPahrFcyFvH8\n88/nhRdeyMknn1ypCAAAlEG3bt0yc+bM/PKXv0y/fv0ycuTI9O/fP+9+97uTJEOHDs3vfve7fO97\n38uDDz6oYOSAGjlyZJ599tnU1NSkrq4uhx56aI466qgkyaGHHpq6urrU1NTkueeeUzACAABAAaWm\npqam5g5fdNFFueaaazJ48ODCs1dddVWGDx+e6urq5u4eAOgESqVSWvDPFSqgsbExv/vd77J58+YM\nGTIkr7/+enr06FHpWGXX0c/Njnp8L7/8cn7/+9/nmGOOyaZNm9KnT59KR6IZOur5CdBaOvrnZkc/\nPgBoq8p+u9T90dDQkKVLl+b666+vxO4BAGhF3bp1y8CBAzNw4EC/7KHN6dOnT/r06ePcBAAAgBZq\n8e1SS6VS4ZmlS5dm0qRJzZoFAAAAAAAAKqtFVzKOHj06hx12WOG5sWPHtmS3AAAAAAAAQAW16JmM\nAACtzfNVaKs6+rnZ0Y+P9s35CVBMR//c7OjHBwBtVYtvlwoAAAAAAAB0LkpGAAAAAAAAoBAlIwAA\nAAAAAFCIkhEAAAAAAAAoRMkIAAAAAAAAFKJkBAAAAAAAAApRMgIAAAAAAACFKBkBAAAAAACAQpSM\nAAAAAAAAQCFKRgAAAAAAAKAQJSMAAAAAAABQiJIRAAAAAAAAKETJCAAAAAAAABSiZAQAAAAAAAAK\nUTICAAAAAAAAhSgZAQAAAAAAgEKUjAAAAAAAAEAhSkYAAAAAAACgECUjAAAAAAAAUIiSEQAAAAAA\nAChEyQgAAAAAAAAUomQEAAAAAAAAClEyAgAAAAAAAIUoGQEAAAAAAIBClIwAAAAAAABAIUpGAAAA\nAAAAoBAlIwAAAAAAAFCIkhEAAAAAAAAoRMkIAAAAAAAAFKJkBAAAAAAAAAqpSMl4//33Z8aMGZXY\nNQAAAAAAANBCpaampqYDvdPXXnstp59+elauXJkuXVxMCQDsXalUSgX+uQJvqaOfmx39+GjfnJ8A\nxXT0z82OfnwA0FZVpOHr1atXRo4cmfvuu68SuwcAAAAAAABaoGKXEdbW1qaurq5SuwcAAN5g586d\n+f73v58LL7wwZ555ZpLkrLPOys0335yXX365wukAAACAtqZFJeNll12WjRs3Nmv2iCOOyIABA7Jq\n1aqWRAAAAFpg586dmTVrVoYMGZJp06Zl+PDhmTZtWpLkggsuyE9/+tO8613vyqRJk7J27doKpwUA\nAADaim4tGd68eXNef/31Ny1bvXp1vvCFL2Tw4MEplUp58cUXc8MNN+Twww/fbf6yyy7LN7/5zdx5\n550tiQEAADTD66+/nokTJ+aFF17It7/97Zx66qkplUq71ldXV6e6ujobN27MrFmzcuqpp+a73/1u\nTjrppAqmBgAAANqCst4u9ZVXXsmIESMybty43HTTTfnGN76RIUOGZMSIEdm+fftu259yyilZu3Zt\nNmzYUM4YAADAW9i5c2cuvPDC7NixI8uWLctpp532poLxjfr3759rr702M2bMyOjRo/PUU08d4LQA\nAABAW1PWknH69OlpbGzMueeeu2vZpZdemtWrV2fevHl7nJk6dapnMwIAwAF2xx135Nlnn83dd9+d\nHj167NfMuHHjcvXVV+fCCy9s5XQAAABAW1fWkrG+vj6nnHJKunT548v27ds3Q4YMSX19/R5nqqur\ns3jx4mzdurWcUQAAgH2oq6vLV77ylfTs2bPQ3CWXXJL/+Z//yeOPP95KyQCActq0aVOS5LXXXqtw\nEgCgoylbybhly5Y888wzGTRo0G7rBg4cuNdfQnTt2jXjx4/3XEYAADhAfvrTn+b3v/99PvShDxWe\n7dq1ay699NLccsstrZAMACiXHTt2pKamJu985zuTJP369cvMmTMrnAoA6EjKVjI+99xzSZLevXvv\ntq6qqiqbN2/e43MZk2TKlCmZO3duuaIAAAD7UF9fnwsvvDBdu3Zt1vxFF12UBQsWlDkVAFBO3/rW\nt3LHHXfk9ddfT5I0NDTk85//fH7wgx9UOBkA0FGUrWTcvHlzkqR79+67rauqqkqSvPzyy3uc7du3\nb0488cQsW7asXHEAAIC92LhxY4488shmz/fv3z/btm3b9UtLAKDtqaury6uvvvqmZa+++qq7EQAA\nZdOtXC/0h7+CLpVKu637wxWMO3bs2Odr7Ny5syxZ9pQBAGi/fLfTVrXnc/POO+/Mpz71qX1u81bH\n16tXrzImgmLa8/sPoJIWLFjQIe9I4HsBAA68spWM/fr12+u6hoaGlEqlHHzwwXtc/9JLL2XlypVl\n+0uqpqamsrwOAFB5pVLJdzttUns+Nz/zmc9k8ODBmTZt2l632dfxbdmyJYcddli2bt3qF3pURHt+\n/wEcKJ/97Gdz6623ZuvWrbuWVVVVZe7cuTn33HMrmKz8fC8AQGWU7Xap/fv3T6lUyqZNm3Zb19DQ\nkD59+uy6beqfuu222zJlypRyRQEAAPZh1KhRLbqCYcGCBRk1apSCEQDasK9+9asZOnRo3v72t6eq\nqioHHXRQzjrrrJxzzjmVjgYAdBBlu5KxqqoqJ554YtauXbvbumeeeSbDhg3b41xjY2MWLFiQ//qv\n/ypXFAAAYB9GjRqV2trarFy5MsOHDy8029TUlLq6ulx//fWtlA4AKIfevXtn5cqV+fGPf5w1a9bk\n5JNPztChQysdCwDoQMp2JWOSjBkzJitWrHjTsjVr1mTdunWprq7e40x9fX3GjBmTnj17ljMKAACw\nF127dk1NTU2uv/76wrcWW7p0abZs2ZIzzzyzldIBAOVSKpXy/ve/P5/61KcUjABA2ZW1ZKypqUlD\nQ0PuuuuuXctmzpyZ448/PpMnT97jzOzZs1NbW1vOGAAAwFv49Kc/nbVr1+bqq6/e76Lxl7/8ZT75\nyU/mtttuS5cuZf2vBAAAANDOlO12qUkyYMCALF++PF/84hezatWqbNmyJZs2bcqSJUvSrdvuu3r0\n0UczaNCgDBw4sJwxAACAt1BVVZVFixblzDPPzIsvvpjrrrsuhx566B633blzZx544IFccsklmTVr\nVkaMGHGA0wIAAABtTVlLxiQ54YQTsmjRov3a9uabb860adPKHQEAANgP/fv3z49//ONcdtllOfro\nozN27NhMnjw5xxxzTJLkN7/5Te67777ccsst6d27d+rr63PGGWdUODUAAADQFlTsHkfPP/98Xnjh\nhZx88smVigAAAJ1e7969M3/+/Dz11FM59thjM2XKlAwZMiRJcsYZZ+TnP/95/uVf/iWPP/64ghEA\nAADYpexXMu6vWbNmeRYjAAC0Ef369ctVV12Vq666qtJRAAAAgHagIlcyNjQ0ZOnSpRk3blwldg8A\nAAAAAAC0QItLxlKpVHhm6dKlmTRpUrNmAQAAAAAAgMpq0e1SR48encMOO6zw3NixY1uyWwAAAAAA\nAKCCSk1NTU2VDgEAsDelUin+uUJb5NyEyvH+A+CNfC8AQGVU5JmMAAAAAAAAQPulZAQAAAAAAAAK\nUTICAAAAAAAAhSgZAQAAAAAAgEKUjAAAAAAAAEAhSkYAAAAAAACgECUjAAAAAAAAUIiSEQAAAAAA\nAChEyQgAAAAAAAAUomQEAAAAAAAAClEyAgAAAAAAAIUoGQEAAAAAAIBClIwAAAAAAABAIUpGAAAA\nAAAAoBAlIwAAAAAAAFCIkhEAAAAAAAAoRMkIAAAAAAAAFKJkBAAAAAAAAApRMgIAAAAAAACFKBkB\nAAAAAACAQpSMAAAAAAAAQCFKRgAAAAAAAKAQJSMAAAAAAABQiJIRAAAAAAAAKETJCAAAAAAAABSi\nZAQAAAAAAAAKUTICAAAAAAAAhSgZAQAAAAAAgEKUjAAAAAAAAEAhSkYAAAAAAACgkIqUjPfff39m\nzJhRiV0DAAAAAAAALVRqampqOtA7fe2113L66adn5cqV6dLFxZQAwN6VSqVU4J8r8Jbzw9W1AAAM\n+0lEQVScm1A53n8AvJHvBQCojIo0fL169crIkSNz3333VWL3AAAAAAAAQAtU7DLC2tra1NXVVWr3\nAEAb9fTTT+dzn/tcjj766BxyyCFJkqOPPjqf+9zn8vTTT1c4HZ3Zq6++mnnz5uW0007L4YcfniQZ\nOHBgRo8enYULF2bHjh0VTggd044dO/Ld7343o0ePzsCBA1NVVZUkOfXUUzNv3ry8+uqrFU4IAADQ\nObWoZLzsssuycePGZs0eccQRGTBgQFatWtWSCABAB7FmzZqMGjUqf/3Xf523ve1tWbhwYZ577rkk\nycKFC9O9e/ecfvrp+dCHPpQ1a9ZUOC2dyY4dO3L11Vdn0KBBeeCBB/KlL30pv/zlL5Mkjz32WCZM\nmJCvf/3rOeqoo/Ltb3+7smGhg/nOd76To446Kv/0T/+UCRMm5LHHHssLL7yQJLn66qvzwAMPZNCg\nQbn66qsV/QAAAAdYi57JeNFFF+Waa67J4MGDdy1bvXp1vvCFL2Tw4MEplUp58cUXc8MNN+z6a+83\nWrFiRWbNmpU777yzuREAgA5g1apVGTNmTP7+7/8+U6dOTc+ePXete+PzVbZu3ZrZs2dn+vTpWbRo\nUd773vdWKjKdxLZt23LOOedky5YtmTdvXo488shd6/702T+PPfZYzjvvvIwfPz7XXnttBdJCx/Ll\nL38599xzT+6+++4MHz78Teve+P579tlnM2nSpFRVVaW+vj7du3evRFwAKsgzGQGgMsp6u9RXXnkl\nI0aMyLhx43LTTTflG9/4RoYMGZIRI0Zk+/btu21/yimnZO3atdmwYUM5YwAA7chvf/vbfOQjH0ld\nXV2uuOKKNxWMf6pHjx65/PLLU1dXl49+9KP57W9/ewCT0tk0NTXl4osvTlNTUx566KE3FYx7cvLJ\nJ+eRRx7Jvffem29+85sHJiR0UN/61rdy77335pFHHtmtYPxTRx55ZBYvXpxSqbTrPQsAAEDrK2vJ\nOH369DQ2Nubcc8/dtezSSy/N6tWrM2/evD3OTJ061bMZAaAT+/znP5/a2tqcffbZ+z1z9tlnp7a2\nNldddVUrJqOze/jhh7Ny5cr867/+635fGfWOd7wjixcvzle/+tVmP1YAOruNGzfmH//xH7N48eL0\n69dvv2a6d++eu+++O4899lj+4z/+o5UTAgAAkJS5ZKyvr88pp5ySLl3++LJ9+/bNkCFDUl9fv8eZ\n6urqLF68OFu3bi1nFACgHdiwYUO+//3vp7a2tvBsbW1tli1b5o4ItJq6urp89rOfzUEHHVRobvDg\nwamurs7cuXNbKRl0bHPnzk11dfWbHsuxPw466KBcdtllmT17dislA6Ct2bZtWxYtWpQkWb9+fYXT\nAEDnU7aSccuWLXnmmWcyaNCg3dYNHDgwjz/++B7nunbtmvHjx3suIwB0QnPmzMn48ePTu3fvwrO9\ne/fO+PHjM2fOnFZIRme3bt26LF++POeff36z5mtqanLbbbelsbGxzMmgY2tsbMxtt92WmpqaZs2f\nf/75Wb58edatW1fmZAC0NU8//XQGDx6c8847L0lyzDHH5KabbqpwKgDoXMpWMj733HNJssdfElZV\nVWXz5s17fC5jkkyZMsVfegNAJ/TQQw9l/PjxzZ4/99xz89BDD5UxEfy/ZcuW5UMf+lAOPvjgZs2f\ndNJJ6dWrV5588skyJ4OO7cknn0zPnj1z0kknNWv+4IMPzqhRo7Js2bIyJwOgrTn//POzcePGbNmy\nJUny+uuv50tf+lJWr15d4WQA0HmUrWTcvHlzkuzxeTVVVVVJkpdffnmPs3379s2JJ57oP4IA0Mls\n2rQp/fv3b/b84YcfnpdeeqmMieD/tfTcTJyf0BzleO/179/few+gg9u8eXOeeOKJNDU1vWl5Y2Nj\nFi5cWKFUAND5dCvXC3Xt2jVJUiqVdlv3hysYd+zYsc/X2LlzZ1my7CkDANA2HXfccW+5zVt9t/vu\np7XcfPPN+1z/VufeBz7wgTKmgc5jfz7X32qbz33uc+WKA0A7sX379lx55ZW58sorKx0FADqFspWM\n/fr12+u6hoaGlEqlvd5u6qWXXsrKlStzyy23lCXLn/4VEwDQNn3wgx/MtGnTMmbMmL1uUyqV9vrd\n/uCDD+bGG2/Mf/7nf7ZWRDqpe+65J3ffffc+/xJ+X+fmzp07M2jQoDz88MN597vf3VoxocN5+umn\n88EPfjBr165Nly57v/HOvt5/H/vYxzJhwoRMmDChtWIC0AaMHTs2ixcvzrZt23YtO+igg/Kb3/ym\nxVfFAwD7p2y3S+3fv39KpVI2bdq027qGhob06dNn121T/9Rtt92WKVOmlCsKANBOnHPOOZk/f36z\n5+fPn59zzjmnjIng/334wx/Oj370o2zYsKFZ88uWLcs73vGO/MVf/EWZk0HHdswxx+Qd73hHsx+l\nsWHDhvzoRz/K6NGjy5wMgLZm/vz5OeOMM9KzZ8+8/e1vT79+/fLAAw8oGAHgACpbyVhVVZUTTzwx\na9eu3W3dM888k2HDhu1xrrGxMQsWLMgnP/nJckUBANqJCy64IA8//HDWr19feHb9+vV5+OGHc8EF\nF7RCMjq7Qw45JOPHj8/cuXObNT979ux8+tOfditfKKhUKuXTn/50Zs+e3az5uXPnZvz48TnkkEPK\nnAyAtqZPnz5ZunRp1qxZkxUrVmTDhg3527/920rHAoBOpWwlY5KMGTMmK1aseNOyNWvWZN26damu\nrt7jTH19fcaMGZOePXuWMwoA0A4cfPDBOf/88/PlL3+50O3Om5qacvXVV+f888/f6+3YoaWmTp2a\nurq6rFu3rtDcI488kh//+Mc577zzWikZdGznnXdefvKTn+QnP/lJobl169alrq4uNTU1rZQMgLbo\nne98Z4477rh07dq10lEAoNMpa8lYU1OThoaG3HXXXbuWzZw5M8cff3wmT568x5nZs2entra2nDEA\ngHbkuuuuy6pVq/KVr3xlv4rGpqamXHPNNXn88cdz3XXXHYCEdFZ/9Vd/lcsvvzyjR4/Oxo0b92vm\niSeeyNlnn5277rprr48KAPatqqoqd955Z8aNG5cnnnhiv2Y2btyYMWPG5PLLL88JJ5zQygkBAABI\nylwyDhgwIMuXL88999yTK664IpMnT866deuyZMmSdOvWbbftH3300QwaNCgDBw4sZwwAoB3p3bt3\nlixZkkWLFuWCCy7I6tWr97rt6tWrM3HixHz3u9/NkiVL0rt37wOYlM7oyiuvzLhx43Lqqafm/vvv\nT2Nj4x63a2hoyK233pqRI0dm1qxZGTVq1AFOCh3LqFGjMmvWrIwcOTK33nprGhoa9rhdY2Nj7r//\n/px22mkZO3ZsrrzyygOcFAAAoPPavflroRNOOCGLFi3ar21vvvnmTJs2rdwRAIB2ZsCAAfnhD3+Y\nr3/96znjjDMydOjQTJw4MUcccUSS5I477sgdd9yRX/3qV7n44otzyy23uE0qB0SpVMpXvvKVDBs2\nLNOnT89nPvOZTJkyJSeddFKS5IEHHsjDDz+cu+66K+9///vz4IMPZvjw4RVODR1DdXV1jjzyyHzt\na1/LF7/4xVxwwQX5m7/5m13PW7z22mtz++23Z9CgQbnpppvy8Y9/vMKJAQAAOpdSU5EHIP2Jiy66\nKNdcc00GDx5cePb555/PxIkTs3z58ubuHgDogLZu3Zp777039913X37/+9/n4Ycfzic+8YmMHTs2\nZ599dnr06FHpiHRiP//5zzN37tysWbMmDz30UD7ykY9k2LBhmTx5cgYNGlTpeNBhrV27NnPnzs3P\nfvazbN68OT/84Q9TW1ubiy++OMOGDat0PAAAgE6pYiXjVVddleHDh6e6urq5uwcAAAAAAAAqoKzP\nZNxfDQ0NWbp0acaNG1eJ3QMAAAAAAAAt0OKSsVQqFZ5ZunRpJk2a1KxZAAAAAAAAoLJadLvU+vr6\njB49OlVVVeXMBAAAAAAAALRhLSoZAQAAAAAAgM6nIs9kBAAAAAAAANovJSMAAAAAAABQiJIRAAAA\nAAAAKETJCAAAAAAAABSiZAQAAAAAAAAKUTICAAAAAAAAhSgZAQAAAAAAgEKUjAAAAAAAAEAhSkYA\nAAAAAACgECUjAAAAAAAAUIiSEQAAAAAAAChEyQgAAAAAAAAUomQEAAAAAAAAClEyAgAAAAAAAIUo\nGQEAAAAAAIBClIwAAAAAAABAIUpGAAAAAAAAoBAlIwAAAAAAAFCIkhEAAAAAAAAoRMkIAAAAAAAA\nFKJkBAAAAAAAAApRMgIAAAAAAACFKBkBAAAAAACAQpSMAAAAAAAAQCFKRgAAAAAAAKAQJSMAAAAA\nAABQiJIRAAAAAAAAKETJCAAAAAAAABSiZAQAAAAAAAAKUTICAAAAAAAAhSgZAQAAAAAAgEKUjAAA\nAAAAAEAhSkYAAAAAAACgkP8D2WIY392hucIAAAAASUVORK5CYII=\n",
"text": "<matplotlib.figure.Figure at 0x105b1a6d0>"
}
],
"prompt_number": 38
},
{
"cell_type": "markdown",
"metadata": {},
"source": "That's only 7 real lines of code to plot the encoding."
},
{
"cell_type": "code",
"collapsed": false,
"input": "",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 38
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.