{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Examples For `sympy.physics.quantum` Section" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "from matplotlib import pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[A,B]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ ">>> from sympy.physics.quantum import Commutator, Dagger, Operator, Ket, qapply\n", ">>> A = Operator('A')\n", ">>> B = Operator('B')\n", ">>> C = Operator('C')\n", ">>> D = Operator('D')\n", ">>> a = Ket('a')\n", ">>> comm = Commutator(A, B)\n", ">>> comm" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "->> qapply(Dagger(comm*a)).doit()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "-[A,B]*D - [A,C]*D + A*[B,D] + A*[C,D]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ ">>> Commutator(C+B, A*D).expand(commutator=True)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "|0101>" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ ">>> from sympy.physics.quantum.qubit import Qubit\n", ">>> q = Qubit('0101')\n", ">>> q" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "|0111>" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ " >>> q.flip(1)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "<0101|" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ ">>> Dagger(q)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "<0101|0101>" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ ">>> ip = Dagger(q)*q\n", ">>> ip" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ ">>> ip.doit()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "H(0)*H(1)*|00>" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ ">>> from sympy.physics.quantum.qubit import Qubit, measure_all\n", ">>> from sympy.physics.quantum.gate import H, X, Y, Z\n", ">>> from sympy.physics.quantum.qapply import qapply\n", ">>> c = H(0)*H(1)*Qubit('00')\n", ">>> c" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[(|00>, 1/4), (|01>, 1/4), (|10>, 1/4), (|11>, 1/4)]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ ">>> q = qapply(c)\n", ">>> measure_all(q) " ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ ">>> from sympy.physics.quantum.qft import QFT\n", ">>> from sympy.physics.quantum.circuitplot import circuit_plot" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "SWAP(0,2)*H(0)*C((0),S(1))*H(1)*C((0),T(2))*C((1),S(2))*H(2)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ ">>> fourier = QFT(0,3).decompose()\n", ">>> fourier" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n+i5fvqzq6mpNnz5d6enpHlSHSCE0EXPa29v1ySefSJJaWlo8rgb91dDQoG3btkmSQqGQt8VEiDFG\n1dXVysnJUWpqalh/bW2tzp8/rzlz5nhQ3eCFQiFt37497JRsQ0ODampqPKrKG4QmYkpNTY1uuOEG\nPfroo5KkSZMmdQYohjdjjJ5++mnNmDFDTz31lCQpKytLf/31l8eVDd6hQ4fU2tra46nXiooKOY4T\ns6dm29vbtXnzZj311FOdwdnQ0KD8/HzV19d7XF10cSMQYkYoFNLEiRN16tSpLttTU1P1559/avTo\n0R5VBhtff/21iouLdf78+c5tycnJCgQC2r59u4eV9c7mppfNmzdrxYoVmjVrlsaNG9elzxijAwcO\nqKWlRc3NzWH9/R3LK21tbXrggQd0++23a+vWrZo0aZLWr1+vxx57zOvSomqE1wUAtg4fPqxz586F\nbR8xYoR2796thx56yIOqYOuDDz7oEpiSdOnSJe3YscOjiiJnz549GjFihPbs2RN2erajo0Pp6enK\nysrqNTCHu/T0dH355ZfKy8uTJD3//PMJF5iSJNMHSTQajZbQrS/jx4832dnZ3fbt37/fOI5jli1b\n1ud+vJ4nre817/OapjGGRhs2bcaMGUpKSuryMzp27FhduHDB89povbcff/xRaWlpXdYuNTVVq1at\n8ry23lpf6urqdObMGd17773d9u/bt69f1zO9nm9P7ZdfftGkSZP05ptvqrW1VXfddZeWL1+uUCjk\neW3RXHduBEJM2bVrl2bMmKHU1FSlpaXJ5/Ppm2++UUpKiteloQ8zZ87U66+/rmuuuUajRo1SSkqK\nHnzwQb344otelzYoV57P7O5RE0mqqqqSpJi9c1aSzp49q4KCgs5rmFdO1X7//fcxv379xY1AiEm/\n/fabLl68qFtvvVWO43hdDvrh33//VUNDg66//npde+21XpfTp75uzlm8eLE++ugjnTx5UhkZGWH9\nEyZM0DXXXKOff/550GN5qb6+XllZWV22tbW16dy5c5o4caJHVUUfoQkAvegtyK7c0X311VeroaEh\nrL++vl7Tpk3Tww8/rLfffntQY2F44PQsAPRTU1OTCgsLNXXqVDU3N+vEiRPKz8/X1q1bJUnl5eXK\nz89XQUGBHMfRjh07VFhY2HmqFrGLI00A6EU0j/440hz+ONIEAMASoQkAgCVCEwAAS4QmAACWCE0A\nACwRmgAAWOJ/OQGAXmRmZkbtrVOZmZlRGQcDx3OaAABY4vQsAACWCE0AACwRmgAAWCI0AQCwRGgC\nAGCJ0AQAwBKhCQCAJUITAABLhCYAAJYITQAALBGaAABYIjQBALBEaAIAYInQBADAEqEJAIAlQhMA\nAEuEJgAAlghNAAAsEZoAAFgiNAEAsERoAgBgidAEAMASoQkAgCVCEwAAS4QmAACWCE0AACwRmgAA\nWCI0AQCwRGgCAGCJ0AQAwBKhCQCAJUITAABLhCYAAJYITQAALP0f3P1WNaYjtJkAAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ ">>> circuit_plot(fourier, nqubits=3);\n", "plt.savefig('./images/circuitplot-qft.pdf', format='pdf')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 }