{
 "metadata": {
  "name": "sympy_quantum_computing"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "# Basic Symbolic Quantum Mechanics with [SymPy](http://sympy.org)\n",
      "\n",
      "We first load the IPython extensions that enable LaTeX-based mathematical printing \n",
      "of SymPy objects, and then import the quantum computing libraries from SymPy."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "%load_ext sympyprinting"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 1
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "from sympy import sqrt, symbols, Rational\n",
      "from sympy import expand, Eq, Symbol, simplify, exp, sin\n",
      "from sympy.physics.quantum import *\n",
      "from sympy.physics.quantum.qubit import *\n",
      "from sympy.physics.quantum.gate import *\n",
      "from sympy.physics.quantum.grover import *\n",
      "from sympy.physics.quantum.qft import QFT, IQFT, Fourier\n",
      "from sympy.physics.quantum.circuitplot import circuit_plot"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 2
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h2>Bras and Kets</h2>"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Create symbolic states"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "phi, psi = Ket('phi'), Ket('psi')\n",
      "alpha, beta = symbols('alpha beta', complex=True)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 3
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Create a superposition"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "state = alpha*psi + beta*phi; state"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$\\alpha {\\left|\\psi\\right\\rangle } + \\beta {\\left|\\phi\\right\\rangle }$$"
       ],
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAF8AAAAXCAYAAABtR5P0AAAABHNCSVQICAgIfAhkiAAABFdJREFU\naIHt2XuIVXUQB/CPq4FZblEpYmZPLMsMUTQhDawo6LVgD4rsj6zQSCORHlD9YfTUrCxTotKUWv8p\nKAusv7YHpURlQg+ioJJ8REVtD3u6/THnsucef+fu3r27W8F+4XLOnfnNnJn5zW9m7rkM4H+L5/5t\nA/oBfeZjU4Pyh9a5flmCtgJDGrSjUYzAcmHfaqxDc8arx8eHErRS/xoNfj04BD8l6G2Y3Y92FDEd\n12EJFmOeCNbyOvWciM8S9DYl/vVn8E/PDCniBVzYoO6JenZ6RqNFBP6HHL0dk+vUNVOd/vVn8Kfh\n7QT9b7yDqQ3oXoQxPZC7BbeiI0cbhFnYXKeu8fgwQS/1rz+Dvx/+KOE9ibn9aAucgI+wt0C/Gvvj\n9jr1dajexDyS/qWO6jG4DEdgJHbjZnEUicwoe8hIUT8nYyU2ZfTD8E12PxhvYgMezmjtoh8cjq9L\ndPc2Zuus6ytwgLB7NCbh227ouBxTxGYdjfUiy1eKjK8g6V8x8yeKuvW+aDwXiWA/m1ub6ugV3IQH\n8QZuy9Hz9b5JNN+zC7KrML+G7t7GUOzJ7r8TCbVZ2DavC9kxeEVMQouxTSTolaK8PJqQqenfcdiJ\nOwr0czPDpoqdy/PbcvcniayHjaLRVHCXyPgKWrAmYcNTGFZmYA2sxVF1rG8WfSKFjdiV+95W4A/D\ne7g+R3tMJCkx9XSIeBZR5V8+85dk1wcKAtuy6zRRt54oMfp7EdBROAetOV6T6mO4SxzPItZhTon+\n3sQMvF7C+0Jk9OAS/r0Zr5LdlaBXSvHu7DohIVvlX6XmN+EsvIxfCgLbs+upmWE7SozamV2vwl94\nMfs+QnUmEaekVRqDSujwNE5J0MeKk5lq6HPxboE2CXeXPON4bFWdLHm06OxVRJDzU86U7Lq1RH4f\n/04WO7e4RKBDnIChBXpbYm0rXst9v1h1wFL1voI1+qfsrC+hjxIbWFZam0UszsvRFooxs4JVOqtF\nEVX+VcrOV5nS3QmBA8U4tgm/lSjNY6/OyYjIjIoxQ3AtXk3IHStOz6/deEYjOEhMOqmavAif474S\n2XZ8ICaiCsbj4+z+NFyKSxKy+/hXCf6P4gVSMSPPxFJsEWNkkzh2tdCKM0SGV9AhJoTHs+ekRtX5\nImv6GjPENLMAw3P0ObhAbMzvNeSX4BqxiU06fyecj/szHZ8k5PbxLz/nXyFeLG0Qdb4Jb2VCE/EI\n7sEzXTj3ktj51SLjp4sauQM3SL/fac4+2xO83sY0EcAvRdPcI2b8HaJe/9yF/POiLy4TjfdInf7N\nkq4OfeJfWxf8BdJdv4gbRVB6irW6X/OX1qm7rQZvIcZ1Q0fSv75+vVCcBFJoEhm3pYHntOtePzpY\n+uT1FOPwaRdrSv1r9D36nzV4xfm3DC06x9KeYmE3180UpbQedMfHWugN/5IYXoM3Qecv3lrozz9T\n7hT1vR6U+ThWlJOu8F/4s2gAAxjAAOAf1RffIDO+Bi8AAAAASUVORK5CYII=\n",
       "prompt_number": 4,
       "text": [
        "\u03b1\u22c5\u2758\u03c8\u27e9 + \u03b2\u22c5\u2758\u03c6\u27e9"
       ]
      }
     ],
     "prompt_number": 4
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Dagger the superposition and multiply the original"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "ip = Dagger(state)*state; ip"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$\\left(\\overline{\\alpha} {\\left\\langle \\psi\\right|} + \\overline{\\beta} {\\left\\langle \\phi\\right|}\\right) \\left(\\alpha {\\left|\\psi\\right\\rangle } + \\beta {\\left|\\phi\\right\\rangle }\\right)$$"
       ],
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAANoAAAAaCAYAAADR9UJvAAAABHNCSVQICAgIfAhkiAAAB/lJREFU\neJztm3uwVVMcxz/3Xo+SbgYlj1JpdOsmg6aY8WiSQXlEYhhMQ4hRyiQxHjMZKiWklISrqP7wLoq/\nNhoyyGPIY5Jo3G4NjfLI+/rjt7ezzj5rrb32Ovue22h/Zs6cc35r771+v/09e63fepwqcuKMB4YY\nyl4FHqqgLzm7CTOATq3txG7KQcACoKq1Hckpn2pL2b3AG8DWCvmSU8wW4Dvg/tZ2JKflOBN4tLWd\n0PBsazvQwsTjawt8DZzTij78H9llYnwPqM/4mg+mOHamwR5k4IcPHYFZiF/zgUVAreY41xgfMNgD\nje18YC3JKWQNMMmxfhs6H2zotJoN7FG+K94k6RWkuJZOK1t8t6DRSpc6DgV+Az7VlI0HVhheYy3O\nDgI+sZSr7A/85HhsJTgBuA6YAkwExiA3eVbsuEG4xdgHWJ+i/ueA3xFdTFQjD/mKFNfNApNWATCi\nsq78h6teLpi0CjDHtxZzR1HEVGCyh1M2FiJpkAvnAacYygLP+vvh18IeAkyntIWaD3wQs7nGOAbo\naygLDPY5wD2Wa14DXOVQtwsmH3SYtKoBlpTph49mrnoFjtczaZUU39PA1apB16PVI6ljVhwBNAI7\nHY8fCLydYf0ANwKHeZw3GUkFmhVbFTAYWKPY0sTYG322YGM95lS+FrgWSY8qjUmrv4F3gQFlXNtH\nM1e9XDFplRTfBGAcSkNhetDWejhl4lpgXorj9wT+yLB+X+qAdcA/MftopOe6XbGlibGZ4h+CC7YH\nbRSwEkkvK41Nq8eAKyvoSxq9XLFpZYtvK9JrDo8M8a55H6QV2WapvAdwMdAFWWPbAtwM7AjLqxTn\nOgDtgM2xa3RC8ujjgLnAqtB+IIXlhBpgNbCMdBMpWTGCQl4/G4njOCQ9OQb4PiwzxahyCdAfEbw7\nsBhpEecirWMS68Pz9gF+jZUNwzy5Aun00uGr1Q5k/HYoskzR0rjqlYSrVknxfY6k9M9AaY/WB/jF\n4kQ/5En9AMlfL0CEWqJcSxV9NPLkx5mErA+9Cdym2E+hkD9XI4Pt0y3+tCRtKKSCPyA/xjWhT2OU\n40wxgjRarwIHIAPzj5Ef+eVI2jHH0ZcN4XvvmH0v5J69YzgvrV46ytFqHtLbVwJXvUz4aGWL7wvk\nQdcyEnPr0xNpte+I2YchQQ1Anu6ovAZ4SnOdeqSFBFgOvKiU3R2eFzEceEL5HpgcT6AB6Jbi+Fpk\njKBjOdAUfjbFCNL7rAWuV2wPUxio90HuW0+lPLD4tBl5UFS6YE4Z0+ql86EcrSIeR+5FWhpw18xV\nr4gg9t1HqwhTfF3Dc9pDaY+2Edn6s6fmxCnh+30x+8fh+0AkZ10Yfh8OvKC5zjZEkM7AGcBSpaya\n4u65Cem2K81JyK4YHRuRVq8Gc4wA08JjopYwEi1K07aE76YZyDi1Yd0qnYAfDcen1UtHFlotAi6z\n1JEFrnqZKEcrU3ybkDS/G5SO0dYhN7A78KVirwZOA16mNLXcFL4fjwTVqJyjy/2jscwVwF/AS+H3\njpS2PPUUi5vEk8DRGntXpAXXDdyvBN6P2Y7BPJ3eC/gQ+ZGZYgR5CNWxZV+KZ7D6h+8fGs5XaRu+\n1sXsNUj6GMdHLx1ZaWVbbM9CM1e9TJSrlS6+ZuBPLEs+GyhdHD0qPHGi4ZxmpKVso9hqkPUEE0uB\n15XvIym+4bqcP7Bcz0YD6VLHxQZ7Z0R4NT3WxViL3JOzFNs4isdY8yj0LhGBod4uwFcae/ewnoNi\ndh+9bD74aBXxBC2fOrrqFREon321ijDF1zm8bjfQT+9/Smku+m140pbSw9kXmVJdhewoifgbGYSb\nBoT/UJj5AmlFomD2QBb8XjOc25J0QGawdPn4jcgPfnr43RTjDuAjZMYrojfwWfj5ROAi4EJHn3qg\nX89pQu5jr5jdRy8bvlodgfSK8ZnSLEmjl45ytLLFV4f8PppA/6B9onF6O7IRM95qDUH+SvMOMl6o\nRlk7QDYmj9bUAdJKnoq0hhHNyOzPgrC+tOtNWXASMks1lnAgG3IZsrl3BMUTEKYYpyC7NTog9yVa\n3zkb+WfEOcgUsAtD0W/v2onMrNXF7L56mfDVKu0aqg9p9dLhq5UtvjpEm99Av8VlNXCrxn4psodr\nGZLnVwNvhZX1Q/4QOZXiVGo78rQfTOk60wqklZiPtI4nIHlyI3ADrbffcSBy479BBsc7kTWZRiRX\n/zl2vCnG55Dx0UwkxTycQnyDce9NQGYKTRuGX6H0QQM/vUz4aFUbvjZpyrIkrV46fLRKiq8XspHA\nSBUy0DzXwUEXelKYATMxFrfZt8DThwbc8/0ZHtdPinEccKTDdQKNrQf23fuHIGmlzzjI1QcVV60m\nIA+BLw24aeajV2Apc9XKFl87RJP/0lFd6tiMLEzOAvZ2qDCJ9ch6jW7gHRGf5cmaHbj1IPvh15Mm\nxXgkxbO4aXgAuBNzGt2ItMhJjVlWuGhVjfQmpoV0F1w089XLhotWSfFNAZ5HmdE1/cN6JbJ15KZ0\nPhpZjHktJb5mYeNPz/rHUTodreNkJL3ywSXGJOLxjUIG88sTzpuGTIUf61hPGh9UXLUaTmEpwBcX\nzXz1conRhi2+Y5Glk6lpHJqNTFNmgWm/Yl8Kuw+SaJ98SFnchXT7vuhi7IqkGS6o8XVExhyuD2kt\nspuhXGz32FWrSv3x01cvU4yuWtniewTpaXNycnJycnJycnJycnJ2Uf4FjIcqrwyQNUcAAAAASUVO\nRK5CYII=\n",
       "prompt_number": 5,
       "text": [
        "\n",
        "\u239b_       _    \u239e                \n",
        "\u239d\u03b1\u22c5\u27e8\u03c8\u2758 + \u03b2\u22c5\u27e8\u03c6\u2758\u23a0\u22c5(\u03b1\u22c5\u2758\u03c8\u27e9 + \u03b2\u22c5\u2758\u03c6\u27e9)"
       ]
      }
     ],
     "prompt_number": 5
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Distribute"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "qapply(expand(ip))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$\\alpha \\overline{\\alpha} \\left\\langle \\psi \\right. {\\left|\\psi\\right\\rangle } + \\alpha \\overline{\\beta} \\left\\langle \\phi \\right. {\\left|\\psi\\right\\rangle } + \\beta \\overline{\\alpha} \\left\\langle \\psi \\right. {\\left|\\phi\\right\\rangle } + \\beta \\overline{\\beta} \\left\\langle \\phi \\right. {\\left|\\phi\\right\\rangle }$$"
       ],
       "output_type": "pyout",
       "png": "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\ncOsl0kmXAAAAAElFTkSuQmCC\n",
       "prompt_number": 6,
       "text": [
        "\n",
        "  _           _           _           _      \n",
        "\u03b1\u22c5\u03b1\u22c5\u27e8\u03c8\u2758\u03c8\u27e9 + \u03b1\u22c5\u03b2\u22c5\u27e8\u03c6\u2758\u03c8\u27e9 + \u03b2\u22c5\u03b1\u22c5\u27e8\u03c8\u2758\u03c6\u27e9 + \u03b2\u22c5\u03b2\u22c5\u27e8\u03c6\u2758\u03c6\u27e9"
       ]
      }
     ],
     "prompt_number": 6
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h2>Operators</h2>"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Create symbolic operators"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "A = Operator('A')\n",
      "B = Operator('B')\n",
      "C = Operator('C')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 7
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Test commutativity"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "A*B == B*A"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "pyout",
       "prompt_number": 8,
       "text": [
        "False"
       ]
      }
     ],
     "prompt_number": 8
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Distribute A+B squared"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "expand((A+B)**2)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$A B + \\left(A\\right)^{2} + B A + \\left(B\\right)^{2}$$"
       ],
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAAAZCAYAAABn7SHgAAAABHNCSVQICAgIfAhkiAAABHpJREFU\neJztml2IVVUUx39OTlQ20xiJpZZDE4gUBn0YJE3Q10MZfZEvUS9ST+lDhgWFPRgRFaRGT9mwI8ge\nKoqoCCqikl6ysg/SfOlBjKxetLCymh7Wvnjnsvc5e62zj1dv+wfDPffsfc5e//Wf/XH2uVAo/I+Z\n1e8AjlMuA64HTgSWAhuAr/oaUSFG8SozpwLPdn1fBRwETutPOIUKilctsAz4F5jw30eBaWBl3yIq\nxChetcAsZFrtLB/PR5K6tG8RFWLUeqV9BngamUI2VNTZClyK9L4/gE+Bv3zZGcBc4GXgUeCQsn0N\nw8BC4IfE+iFt85EYD1Rc9yKwH1inD7ExbeQ6xePcxLzS6BulZa8uAf4BphLqjiM97YlA2Q2+7A1L\nEInMBh4BTkmsH9M2DDzl7xdiNaKxn5sJ4+TLtcbjXNR5NU6avla9GgLe9429nVD/Tl/3mkj5HiTR\nI4ntLyMuLMQ6f00KddpWEE7+SiSpACcjRlnR6usmV661HsfI7ZVGn9qrocQg7wFeAQ4DZybUn0Sm\nqu2BshFgETIV/ZbY/n3+mhRGgMtJ3+qq07YdGGPmzsGVyPLoLX/NLcBZie2F0OjrJVeutR7HyO2V\nRl8rXs1DRoYhYC+wL+Ga3cDHkbL1SI++WxGDI32EvRW4P7FuqrZ7gbX++FxkjTzd8zea2GYIh30G\nyZFri8cxHHm90urL7tUUMrUA7AD+pnrmmO8b2dhzfsyf2w/cpQkAXVK3IL0+hVRt1wEvJd7TgsPW\nAXLlWutxFY58Xln0qbyqW6utAE7gyPTzk/8+zx+HmPSfE8Dj/ngEWYd97++5JzVAA4uAXxLqabTt\nptkavy1y5NricS7qvLLoy+bVbOATZq6XppAeeWHFdc8AfwInBcoeQ6aka5WxONJFvUv9nrxW2xxg\nV2L7Fhw205rm2upxFY58Xln0qbyqmubWAK8DP3ad64wIVQ9Jk8BnyL5tLxsRMc+nBmjgZ+C8mjpa\nbRP+vscaTXNt9TgXdV5Z9Km8ii2BFiAPJ98xc/tpsf+MJWcMuAB4MlJ+GOnRC5Gp7GBP+QuER55z\ngOUceQnSzWpk3dphF7AEeDMSg0XbEl+/KTn0dWiaa6vHHdr2yqovi1fbgKsC529DpscHItfdSPVv\nLa7w5e8p43GkT6sXA89VlFu0PQzclNi+BYd+CdQ011aP63Dk8cqqT+VVaAl0NfAr8EGgbK//jI0O\nkz6o0J7tMPCQP96aGqCBHcDphH/xZ9E2jIxo7+QKMBNNct3E45xUeWXR19iri5A14NxI+YQPaluk\n/Avg68D5xcCrwO/AHYa4HLoRcjmwqeecVduDwO2Kti049DOANddNPa7D0dwrsOkze7UA+Ab56eg0\n8C2yB9vNa8gLkmnkoeQjZM91FBlJvvRlh5CdhQ/9307gc2Azsqaz4ND/g9yMmN1E29nIi5W2caTp\na5LrJnnQ4LB71UTf0fKqLziOzX34XDgGR5/jONJifdt3tDlAeCtsUBgkfYOkpVAoFAqFQqFQKAwY\n/wF5Fp03jGX3sQAAAABJRU5ErkJggg==\n",
       "prompt_number": 9,
       "text": [
        "\n",
        "       2          2\n",
        "A\u22c5B + A  + B\u22c5A + B "
       ]
      }
     ],
     "prompt_number": 9
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Create a commutator"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "comm = Commutator(A,B); comm"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$\\left[A,B\\right]$$"
       ],
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAWCAYAAAC/kK73AAAABHNCSVQICAgIfAhkiAAAAj5JREFU\nSInt102ITlEYB/CfMUppNFMmDDU0W1EiaZp34SvFQlmKHTtSZKOURjIkSXZjtiwQiykRvTFi4TMk\nHwsLkSmrocEMY3HO5HXn3nHf+84syL/ezrn/55zn+d/7POe59+UvxZTE9RV8wTWczrH/BAZwoEDs\nbizH4hjzDr5F2yw04RwOYRC7sArTsT7prFxF4GX4jp4CokexACM4mmLbEG2XE3wZ6goGrENXHOcU\n9AEdcbyaYuvFa2xEQ5qAItiB8xhSm/CSUB63U2wNmI9+fPqTo3KOYM24Ltz0W7zLqzIFL3Arw7ZP\nKJXtCb6ctjiVTKAH7XF+H8OKZW52FNaZ4Bsj149tWRrrqwzWjql+pfZDvG6O82pQimMbjsR5g1DT\nL2OsV3mdlcex1aMPcyu4HuGpLckboAKn8FVob0kcFtrs2iyN1aR4Jy7hfQU3+pSLHNAS7gk9PIlO\n4YbOZG3OWyot2IvnWFPBt8axWuGNWIRjGfYhIRvzhPIZSC7IK/w4tuJGgt8stMVqhXcI2e7LsK/E\nDKF7jRFNvlJZjY/Giia0Q9KFt4zjsyScjbT+PQ3747w7hz6MPZxLhTpuyljfFgWcTfAr8EP2985D\nPEnhW3EBn7Elp8bfyBY8jcFH8Ezou5W4KLx8RoQDdhProm0h3gh9fhQzhaw9insGhVIpx99jPMBJ\nof6zMK7wicLBCfZHjR9ZeTFp/idT+CbcnSznSeHDwp+J3TX6rRe+13tr9FOJPYK24Qn0+R//Pn4C\niuR3f19QpToAAAAASUVORK5CYII=\n",
       "prompt_number": 10,
       "text": [
        "[A,B]"
       ]
      }
     ],
     "prompt_number": 10
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Carry out the commutator"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "comm.doit()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$A B - B A$$"
       ],
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAE4AAAASCAYAAAD15uiRAAAABHNCSVQICAgIfAhkiAAAAi9JREFU\nWIXt1z1oFEEcBfCfMYIWkQQMahQipPUDRKtgCj8LY2Up2im2gmgh2CgqWojYSUgbCxVsrFTED6zU\nBBXRdBIEA1ZRokaNxQwak9272d1LQLgHx87N+8+89252dvZoohQWFay/jAmcrlEzgK3YiK94iu+R\nW4EOXMdZTBbUr4X50E3JWxdb8BODCbXrMI2LGdzeyN2uYmYBdIvkzUUL7kXhOwn1B2Ptzhx+NJpq\nq2JqHnXr5m1JNHQENzCFVQn1fcI2eZLBtWEtxvE5UT8VjdItmjcTncKv34IxfEgY8xaPcrgTwkoe\nLmtonnXL5M3EIHpj+xl+qH2nrowGz8zqb4994zhU1swC6Cblba0zSS8W+3vrf4zfO2M7C33x2oML\nsd2GfryLc47WtV8cjdAtk3cOWvEYq2f0DQqruqnGuKv4hqUZ3DnheN+VaqIAquqWzTsHx3B8Vt/5\nONGeGuNGZD+cYZnwwH1fxEgiquoWypu3VbviJG/8e7R3x2veSdOO9biUw08Jd8UaYRtNYAOuSX8Z\nH8bRBujORNm8czCE7Rn9+4UVOJkzbl/k+3P4bZG/m2okEVV1C+fNOh134BPuZ3Bj8Zq3An1RKGvL\nLMGp2B7IGV8WVXSr5P2DzcLp0ZHD90SDQzn8C7zM6O/GTXzBgXomSqCsbtW8uvAKv2Lha+G9aCZu\nCS+D08Kf6IfYjeXCag1HblI4nR7Ezwie44rwHGoUquhWydtEE038P/gNdbvExvNu4QsAAAAASUVO\nRK5CYII=\n",
       "prompt_number": 11,
       "text": [
        "A\u22c5B - B\u22c5A"
       ]
      }
     ],
     "prompt_number": 11
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Create a more fancy commutator"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "comm = Commutator(A*B,B+C); comm"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$\\left[A B,B + C\\right]$$"
       ],
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAGAAAAAWCAYAAAA/45nkAAAABHNCSVQICAgIfAhkiAAAA5VJREFU\naIHt2UmIXUUUBuDP2IJZtHSLjdpiRwhGEYkYp0gwggOGGMHgQnACEXEARVEcEISgRNFFBHUhSvtc\nxSwUXaghDlxMRF2oiIpDL4wSlATNwqBG0w6LU49+eX3rvXt7uNn0v7mn6pz6z3lV95yquo8FHFIc\n1tXeiv14G89WGL8J+/BwD5sXcA6WJ+4P8XfSHYNhvIxH8WfVwOeRdzZYhnU4H6P4Hb/gIezEXnyc\nbNeUERQ1nJ2NfzBewfYk/IcnSnSXJ93rNXzPN29dHI4H8BNux8kduhPFvL6Ib1JfkSPKKrqwCO+K\nH/hmBfvrk+0lGf2EWMzBiv7ni3c5BmrGMCaybydOzdisEHE+k9pFjiyr6MKtuE2k/KcV7J/HX1hc\nohsUJeJn00ti07wtkVVVMSBKyvc4vo/tbqxPcpEzyio6MCLe/kXYJdKuH77F9ozuPvF23FyBZ755\nW+otwMbk47oKtjswlOQiZ5RVdGAcq5L8CSbFYuRwrAjyka7+odS3BzdU8NsEb0v1BThTlLev9P79\nbVzdIRdtoW69WyU2nA9Se3dqjyS5DKvTcykeT/KgOC18lzgnasYxn7xVsVZM/FP4t4L9liqkRQ/d\ngEijzlo3Lt7CM3qMe1rU6SNLdBvFMfbSKsE1wNtSPQPeEr/9rJo+mGEJuhv3dvU9loK4rMe4z01l\nTDcW4wB+7DG+Sd6W6guwV5SgsgNAN5Z1tYu2ULUEjYrJ/9rBR74l6XlcZtwQTseTGf0B8RafIMrH\nvorxzJb3JeVZO4ZzTV3oOnGT2PPa+CHZ97vkjeBGPNjHDvkM2IyLSvqvEhlwf2bcFUm/LqO/IOnf\nqRJcA7wt1TNgU/Ix1sdugzgwdKJoC1V274vxK94r0e1Kz1wGrBZBlpWKI8QVnfis0I3RHjHNhneu\nsEVk2TU9bG4Rx/TcAWUaiq72ijR4OGO/VEzE5oz+M3xR0r8Er4hvJdeW6M8TJ4vc96iZ8vZDS717\nwBr8gTscvBecIk5mazPjiraQ2wNGsQ2niVvkDlGCOlfyVaxM8nq8Lz58fYTXcLSos/vT+MlkOyw2\nr+1ior8s8b9HbKArO/qOmgPeucZWXCjO+NtM3bwn8Jy4IddCMYfBzQU2NOyvpV4GzBRFW6iyBxxK\nNB3fbyKzGkPdm3CTuFKUsyZxZ8P+pr1hk6Ku3dV0IF0YEP83vHGI45hr3CPmd7Kf4QIWsIAFNID/\nASen61ooc9yoAAAAAElFTkSuQmCC\n",
       "prompt_number": 12,
       "text": [
        "[A\u22c5B,B + C]"
       ]
      }
     ],
     "prompt_number": 12
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Expand the commutator"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "comm.expand(commutator=True)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$\\left[A,B\\right] B + \\left[A,C\\right] B + A \\left[B,C\\right]$$"
       ],
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAN8AAAAWCAYAAABAHklQAAAABHNCSVQICAgIfAhkiAAABNdJREFU\neJztm0mIHUUYx3+OI+hhZEYc1FEnA8EoIhFjXEJwBBcIMYLiIeAGIioIBtHggiCESBA9RFAPgo7P\nUwwu6EENowmFiWjA5eBuDkYJBoN6MC7RjMvhq8d02l6+6vrqvRfp/+W9qa/631/9XndVdVUPtGrV\nqi86Ivf3FuAA8CbwpOL4jcB+4MEG534aOA9Y7M/5LvCnjx0PjAHPAw8BvwNrgEuAo4EVRp4pFMoQ\n4jh2tQhYBSwDJoBfgR+AB4DdwE/ATl93kPlpVMWrin/K9kXzdwEnWwr8BcwEJpnVFPAP8EhB7Aof\nezVX7hJ4WsoF1o/leCRwH/AdcDtwWiZ2qs/nWeALZX5T9Jdfnep4uZrjp7Btnxn/0kBOQ8BWn+jr\nAYnmdYP3uKwkvgsBPZIpcwk8q7QYGFbWhbCbL5bjJNJ77wbOKKmzxPs/oczPmh+EMyyThper8bBs\nXxT/IcUJinQr8CJwEDixoQfANDLsv1MQGwFOAfYBv/TR8y5/TArFcBwGXvDHLWO+Z83rQ6S9W5W+\nKX4TK4YW151V+8z5u7oKwLg3GgL2IMNtU30JbC+J3YP0GLfkyl0Czyp1kKmKVk5ZL5bjBqQt1yvq\n7gBGlflZ84NwhkXS8nI1PlbtM+dfGshoBljuv38AzNFsBD0BSX59rnzUl+0DbgzMsalnlTqkufli\nOJ6DTI0+VR6zWplfCn5gc/NpebkKD6v2mfAPnYcvRx4wu0P29/7vcf89RNP+cyHwsP8+gqwYfeXP\ntWsAPFMoluNK5Ed/DPhbUX+zMq9B5Wd13Vm1Lwl/VxEbRobPkzJlM0hPcrbGPKfHgT+QrYO8NiBL\nyZcH5tjUs0odbEc+C45v+PrnBuTVlauIpeAHcSNfKC9X4WXVPhP+IdPFO4BXgL2Zsm6v0+Thdxp4\nH9lvyWs9AuiZAfC0lgXHC5Ae9zNF3UX61AaSn+V1Z9U+E/7aaecEsBb4nEOXaBf4z1AIo8BZwKMl\n8YNID3UyMi3Y3wPP5yjuSSeB85nfjM3qZuT5Qysrjt/4vOo2gseBm4D7FZ4Wv4k1Q8vrzvKaS8G/\ndMjehLxdktc1yPB7r8Y8oyv9catK4hf5+FsFMZfAs0od7KadVhw3+vqTNfXWIYsMmvxS8YPm084m\nvFyJl2X7TPhrpp2XAj8C2wpie/xnUQ80UeE5jSRftNdyFPJKDsjrQFql8LSUJcfNSC99bcX5bkOW\n47ULEoPGrymvMjVtX6/4/6fXWOIPHiupvxBp0KZceXdOXPZu40fAxwXlC4CXkPfirlPmaOFZpQ7x\nI18KjiuA35BnomMy5acjK3krA/KDdPwgnGFTXmDbvqT8y575JoBZ4Ezk5esdyPCfvYtfBi70368G\n3kZeSJ1F9ku+zcQBjkUenI9DngsOeN85Hx9D9k62I43+pCS3rFJ4WioFx662ABcje0izyPPHXmSp\n/Cnga0V+g8Yvlldese1Lzf8QudADarTO2A/sc6xThzSb7CGy5OgMvbTqEL/JrpVL4JmEf9N3O7VK\n7d8L/Uzx0nQvdbhzHASGMUrC3+JN8zJdBbyX0L9XWtPn8/8fOPabYYyS8c/f0XPIXPbOSN9h5P+u\nXov0yepuJLe5uop9lhVDsOV4uPCLVcu/VatWrVq1atWqVat5/QsIXxOgwN127AAAAABJRU5ErkJg\ngg==\n",
       "prompt_number": 13,
       "text": [
        "[A,B]\u22c5B + [A,C]\u22c5B + A\u22c5[B,C]"
       ]
      }
     ],
     "prompt_number": 13
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Carry out and expand the commutators"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "_.doit().expand()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$A B C + A \\left(B\\right)^{2} - B A B - C A B$$"
       ],
       "output_type": "pyout",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAO8AAAAZCAYAAADZu3m9AAAABHNCSVQICAgIfAhkiAAABUBJREFU\neJztm1uIVVUYgD9tJrKaaYyGbMzx1JAmXSRNIySD7kxKNyqwC4REFywII43EiMKiAru+VEwnitSH\ngggSpUKyiB4s7YKWD1lIpVQPillZTQ//Osye3Vp7r8u+nIn1weGcvW77/9f+11r/+vc6EIlExiTj\n6hYg4sQ5wCBwODADWAl8XqtEkUgkl6OB5xPX1wH7gWPqEScSidhyJvAPMKCuu4FhYEFtEkUiESvG\nIW5za6tzGjJ4Z9QmUaRWXPe8qxFXbWVGmZeAOchK8TvwMfCnyjsOmAisBR4BDhramIasKOcCfcAB\n4GfgAWAX0ASWAT85yh9Knv6dwGRExjQu/dKN9M2+DFleBfYCS10U8KCI55mmKjsKpSg7rF3fs4G/\ngSGLsg1kVXhck3e5yntLk3cYsBz4AbgTOCWRNwXYBLwM7LCUuUjy9O8AHgSOzGijgV2/dAJPqjZ1\nLFZtVBVwbOD3PHVUYUehFGmHtes7HnhPVX7HovxNquxFhvydiEJdibR+ZLbZBZxqqDdLtfuchQwg\ns5hpALhgo/9Sdb8sXPplHvqHuAAZvAATkAdeNj7PU0cVdhRKkXbYFvreDtyBLOOfWpR/EfgDMa40\nXciy/yMjK0cH8AnwLXBCTtt7gKssZABxaxqWZbPI078LeMOiHdd+eYHR0eTzkYE7SX0WIS5d2bjK\nbaJsOwqlaDusXd9eZPYYD+xGXIk8vgY2G/LuQ2aXWxNpq1TajRZtfwj0WJSDYgavjf5XA/datOXa\nL0uAu9Xvk5F903Dq021x31Bc5dZRhR2FUqQdtoW+Q4gLB7AF+EsJZOJ4dZOHU+k9Km0vcHMi/SzE\nFfgqp90W11uUadEkfPDa6P8Msipm4dovAJcArzvKWzQ+cuso245CKdoOS9c3bz84D9m8f6Su96jr\nXvVbx3z1PQA8pn53IXu1b1SbOxPlBxGlnkLeY+axzqJMUdjqfyIShczCtV9AZuKGh9xF4iN3mirs\nKJQi7bB2fTsQ1yDp+w8hs8PMjHrPIn77EZq8VYjrd3Eibb1qc7atYA408Td+F/03kP++1bVfAI6i\nnsh6Eh+5k1RlR6EUZYdtoe89/Hcf96gS4tKMetsYmXHSTAAOAd8n0n5F3BXdJj3NNIsySZr4D14X\n/V8DFua059ovINFr0x6oKnzkTlKVHYVSlB1Wpq/Jbe5TAmxndNh6qvqeZKjXA5wOPGHIP4TMLpMR\nl2A/8B0Sns978dwL3ALcr8l7Bf2s1g/MZeRld5LFyF5Eh6v+O4DpwNuG9nz6BdXmdkOdLM5AItW2\nUcmtSGQ0ja/cLaq0o1Cdi7DDKvU1sga4QJN+DTKDLDPUW0j2edvzVP67ibTVKq0/SyDgIWRT70IT\nv5XXVf/ZSJjfhE+/AKwArsgTtkR85W5RpR2FUoQdVqqvLvp1IfAL8L4mb7f6Ns0g89VNdMt/J3Ks\nDOQoWIt1yKyyyNAmwG1IqN202S8SH/23AMdi/oePT790Il7D+nyRS8NH7hZV21EooXZYu76zlGAT\nDfkD6iZrDPmfAV9o0qcihxgOADdo8i8DfgPuYvSeYzoSeRvMEjqDJm4rb4j+c5FIpQ6fflkOXJsj\nb9n4Ps+67CgUXzusVd8+4EskRD6MvOtKuwZvIrPOMHJw+gPkPWQ3MttsVXkHkWjbJvXZhpwueRrx\n603MQc7zbgY2IvvYFcBJGXXyaGI3eEP0T3Il8iAhrF+mIAc06iBE7nawo1Bc7PD/oG/b0qT+96SR\nSCnYnCQZy+xDZrtIJBKJRCKRSCQSiUQikcgY4V+hOFAJDK9DFAAAAABJRU5ErkJggg==\n",
       "prompt_number": 14,
       "text": [
        "\n",
        "           2                \n",
        "A\u22c5B\u22c5C + A\u22c5B  - B\u22c5A\u22c5B - C\u22c5A\u22c5B"
       ]
      }
     ],
     "prompt_number": 14
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Take the dagger"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "Dagger(_)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "latex": [
        "$$- B^{\\dagger} A^{\\dagger} B^{\\dagger} - B^{\\dagger} A^{\\dagger} C^{\\dagger} + \\left(B^{\\dagger}\\right)^{2} A^{\\dagger} + C^{\\dagger} B^{\\dagger} A^{\\dagger}$$"
       ],
       "output_type": "pyout",
       "png": "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\n",
       "prompt_number": 15,
       "text": [
        "\n",
        "                            2              \n",
        "   \u2020  \u2020  \u2020    \u2020  \u2020  \u2020   \u239b \u2020\u239e   \u2020    \u2020  \u2020  \u2020\n",
        "- B \u22c5A \u22c5B  - B \u22c5A \u22c5C  + \u239dB \u23a0 \u22c5A  + C \u22c5B \u22c5A "
       ]
      }
     ],
     "prompt_number": 15
    }
   ],
   "metadata": {}
  }
 ]
}