diff --git a/examples/entangled_states.ipynb b/examples/entangled_states.ipynb index 7838f55b..1a5b5a78 100644 --- a/examples/entangled_states.ipynb +++ b/examples/entangled_states.ipynb @@ -4,21 +4,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Entangled State Example\n", + "# Entangled States\n", "\n", - "This example shows how to enact and measure a graph state on a set of connected qubits that form a graph with the qubits as nodes and pairs of coupled qubits as edges. " + "In this notebook we explore the subset of methods in `entangled_states.py` that are related specifically to [graph states](https://en.wikipedia.org/wiki/Graph_state). Although it is worth noting that the module also alows one to create [GHZ](https://en.wikipedia.org/wiki/Greenberger%E2%80%93Horne%E2%80%93Zeilinger_state) states.\n", + "\n", + "\n", + "Graph states are a very simple entangled state construct as there are only two steps:\n", + "1. prepare all qubits on the desired lattice in the $|+\\rangle$ state \n", + "2. Do a CZ gate between all the edges on the lattice that have two qubit gates\n", + "\n", + "There is a very simple way to benchmark short depth circuits on [NISQ](https://arxiv.org/abs/1801.00862) hardware. First choose a random connected subgraph on $N$ qubits, compute the fidelity of the graph state to the ideal and repeat $K$ times. Do this for increasingly large graphs. Then plot the mean fidelity as a function of the number of qubits." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## setup" + "## Setup" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -39,7 +46,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## graph state measurement and plotting functions" + "## Parity measurements of graph states\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### graph state measurement and plotting functions" ] }, { @@ -51,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -90,11 +105,11 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ - "def plot_graph_state():\n", + "def plot_graph_state_parity():\n", " from matplotlib import pyplot as plt\n", " df = pd.read_json('graph-state.json')\n", " for focal_node in df['focal_node'].unique():\n", @@ -104,6 +119,7 @@ " plt.legend(loc='best')\n", " plt.xlabel('theta')\n", " plt.ylabel('parity')\n", + " plt.ylim([0,1])\n", " plt.tight_layout()\n", " plt.show()" ] @@ -112,7 +128,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## creating a graph on a Rigetti lattice and running graph state measurements on it" + "### creating a graph on a Rigetti lattice and running graph state measurements on it" ] }, { @@ -128,9 +144,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/anaconda3/lib/python3.7/site-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n", + " if cb.is_numlike(alpha):\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# define the graph by its nodes and edges\n", "nodes = [1, 2, 3]\n", @@ -143,13 +180,6 @@ "_ = plt.axis(\"off\")" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, @@ -159,9 +189,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running graph state on QC1\n", + "Running graph state on QC2\n", + "Running graph state on QC3\n", + "Noiseless\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd4VFX+x/H3mZaZ9EASUpHeRZogRRRRWhBBJYK66lpYV12wLIqrQkT96Sqr4ooiNuyKKAiEogJWQLpUEQgtQCCBJJA+5fz+CK4QggSTyc3MfF/Pkwfmzs3MZzTkM/fOuecorTVCCCFEXWMyOoAQQghRGSkoIYQQdZIUlBBCiDpJCkoIIUSdJAUlhBCiTpKCEkIIUSd5raCUUm8ppQ4rpTad4X6llHpJKbVDKbVBKdXJW1mEEEL4Hm8eQU0HBvzB/QOB5ie+RgGvejGLEEIIH+O1gtJafwcc/YNdrgLe1eVWAJFKqXhv5RFCCOFbLAY+dyKw76TbmSe2Hay4o1JqFOVHWYSEhHRu1apVrQQUQvie0tJCdhTsPuP9zSNaYLNYay+QOM2aNWtytNYxZ9vPyIJSlWyrdN4lrfU0YBpAly5d9OrVq72ZSwjhY/Kzf+WTbybxw9Gf+DnITDPV7Iz7WrSbpqV2WoX3YHC3v9OlcXOUquzXkfAWpdSequxnZEFlAskn3U4CDhiURQjhY5zHs0j/9nm+2r+YlbYSSkwmYsxwmacFoWY7Cz0/U2L6/VMMu8dDP90Il6eYdeYsPi/7mtnffUWjr+w0sXfmsg6j6N+2IzbL798ze91+nlu0jQN5xSREOhjbvyVDOyYa8XIDkpEFNQe4Ryn1MdANyNdan3Z6TwgReNK/eYzJGbPIMkGcB8Y0GUbKpU+gi3L56aepzNnxBT+Yj5FrNhNm1bR3JtO7+Y2M6DWSIKsZgJhP7+eL/EVkWxQxLs1VEf0ZPfx5ALSrjFWr32PRlhmsMe3ja5bx9fplvPyTlYamdnRteTPB1qakfzcBe/RqwuIUdpdmxlddgP+TkqolyluzmSulPgIuBaKBQ8AEwAqgtZ6qyo+pX6Z8pF8R8Fet9VnP3ckpPiH8W/o3j5G2axYlpt9PuwV5NN1cZjJUGZlWCzaPpllpNJ3ih3BLn1E0CA/980/odrJz0+fMXf8eK0t3sslmRitFmAuKzBr3Saf/7B4P5+d25a37367OSwx4Sqk1WusuZ93P15bbqKygnE4nmZmZlJSUGJTq7Ox2O0lJSVit8uGsEH/kijfbkWWp5DMhrWlUEkbL8L7c2PtuOiR5YdCv28XhX+czb+3bvFL2K6Wm0wc6xzo9LL59c80/dwCpakEZeYqvxmRmZhIWFkajRo3q5IedWmuOHDlCZmYmjRs3NjqOEHXaIXPl2xUw644fsZi9ePmm2UJs6yHc2noIL05vV+ku2ZWVp/AKv5jqqKSkhPr169fJcgJQSlG/fv06fYQnRF0R4a78rE6MS3u3nCpo4K58e8wZtoua5xcFBdTZcvpNXc8nhNG01ny84U3yzQpV4aMHu8fDece61mqee5sOw+6pUJZaU+wJYsKc1Xgq3idqnN8UlBDCd5W5y3j8h0d4at2L9CoqpffhZGKdHpTWxDo9NM/uwpA+T9ZqppRLnyCt8TDi3RqlNfFuzQ2FToqspXyx/1/8/cNllDjlcMqb/OIzqLrg1ltvZd68ecTGxrJpU6Xz4wohKpFTnMN9S0azPmcjt+Uew+YYS1zfq1j31XaO5xUTFukg1aDrj1IufYKUS5/4fcPhX+j8wSDGRh1k2fEnuf7Nsbx1Uy8ig221ni0QBGRBeePiu1tuuYV77rmHm266qYZSCuH/NudsZvSS0RwryubZwznsCf0nt91+F1azias7J5/9AWpbbCuuGPImz826kX9Gw68lzzNsahnv3tKb5HrBRqfzOwF3im/2uv08/PlG9ucVo4H9ecU8/PlGZq/bX63H7d27N/Xq1auZkEIEgLk753LzwptRhUd5/8ABMh1389dR92KtxYEQf0rTPlzR5/947nA2ZsceckKmMGzqEjbtzzc6md/xuyOox+duZsuBY2e8f93ePMrcnlO2FTvdPDhzAx+t3Fvp97RJCGfClW1rNKcQgcrtcfPi2heZvnk67T3B/HffTmaH38Vf7nyYIMsZxpjXNZ1vpt/Rneh103iwgcIV8zqp01xMub4HfVrGGp3Ob9Txtyo1r2I5nW27EKLm5Jfmc9fiu5i+eTpDdCzT9/xCesitjLjrcexWHymn3/RNo/95V/Dvw9lg201ww3e4/d0f+fgMb3TFufO7I6izHen0fGYJ+/OKT9ueGOngk79191YsIQLezrydjF4ymgOFBxijmnP7rsV8FHIDw+75N8E2H/xVZDLBsNcY8M5gOLKTcfUziG3+PuNmaQ7kl3Df5TJLenUF3BHU2P4tcVR4p+awmhnbv6VBiYTwf0v3LuX69OspdBbyb0snbs9YzGf2qxl094uEBvlgOf3GFgwjPmKACuOZY2UUqR00bPMRLy3ZzNiZG3DKmZlq8eGfjD/nt9F6NT2Kb+TIkXzzzTfk5OSQlJTE448/zm233VYTkYXwOekZ6UxeO5mswixCraEcdx6nbf22PFSaTMeN05hjS+Gye6YS4Q/Ds8MawPUzGPBWf3RQPOPsv9K8/SfMXHsdh46VkHJ+HP9dslOW7PgT/GKy2K1bt9K6dWuDElWdr+QUojrSM9JJW5ZGifv3qb3Myszo4Au5ddMMFlr70mX0B0SHOQxM6QU7FsMHw5nfuAsPc4hkRzs2r70WtO2UlVgdVjNPX31+QJdUVSeLDbhTfEII75q8dvIp5QTg1m4+zvuBJeaedLr7Pf8rJ4BmfSFlEoMyfuL/Qtuxr3gTYY3eRauyU3Yrdrp5btE2g0L6loA7xSeE8K6swqxKtx+0WGh118fERobUcqJa1OVWOLKTlOUvo3vcyrgDiwlu9F+UuQxlyUc7IynN7s+BvI5GJ/UJcgQlhKhR9eyVX7Ae62hAQv3wWk5jgCsmQqvBDF4+nYaFzTAFZWOy5qMUmGx52OM/JzpO1pOqCikoIUSNKXOX4SoprnQ28qtM7Q1KVctMZrh6GsS1x2X/hYojzZXJSVDsImOy+RgpKCFEjXlz05vkU8Qt+ceId7rKZwF3ukjLOUrq5jlGx6s9thAY+TFZZ5i26Zgzu5YD+Sb5DEoIUSN25+/m9Q2vM6CgkPtz87k/99S56Tz69Avk/Vp4PHHWUA66Ck+7KxI//hyuBskRVA3Zt28fffr0oXXr1rRt25bJkycbHUmIWqO15okVT2C32Ln3yPFK9zmsoms5lfHG5BVg95x6sa5Za+44dIQdhwsMSuU7ArOgNsyAF9pBWmT5nxtmVPshLRYL//nPf9i6dSsrVqxgypQpbNmypQbCClH3zdk5h5VZK7nZGUeip4wyferJmWJtY1+nsQalM05KdiZpOUf/d7oz2OPBDbRz5/HQZxtwy6q8fyjwCmrDDJg7GvL3Abr8z7mjq11S8fHxdOrUCYCwsDBat27N/v3VW8JDCF+QW5LLpNWTaGdP5I6MxXxhH8q6jk+SRQwercgihk2dn+TCIX8zOmrti0gipbCILzMPsGH3Ppbs3U+c28342FjW7M3m3eW7jU5Yp/nfZ1ALxkHWxjPfn7kK3KWnbnMWwxf3wJp3Kv+euPNh4DNVjrB7927WrVtHt27dqvw9QviqSasncbzsOI/t28Ea2tD59pdIio6AoX8HIO7EV0DqO778DbCz/PO3EK0Zn3OUu+JiadFyJc8uDKJvqwY0rC+LHVYm8I6gKpbT2bafo4KCAq655hpefPFFwsMD4JoPEdBWHlzJnJ1zGJlfRlSZndKhb5aXkyjXPhWufAkikgEFYfFc7FQMclnJNs3HHHSIcZ9vwNemnKst/ncEdbYjnRfanTi9V0FEMvw1vVpP7XQ6ueaaa7jhhhu4+uqrq/VYQtR1pe5SJi5/nASPmTuPHGDu+dO4sUMbo2PVPe1Ty79+8+uXPPTxCJY1Oo/g5nNZtq4eH6/ax8iuDY3LWEcF3hFU3/FgrTAPmNVRvr0atNbcdttttG7dmvvvv79ajyWEL3hj4xvsOb6XCYcOMiPybkbKm7KqadGPer0f4qFDWRwo2UaL5ht4Kn0rBypZpy7QBV5BVTzkjkguv33yO5w/4ccff+S9995jyZIldOjQgQ4dOjB//vyaySxEHZORl8EbG14npaCQw6W9GHrbI5hNsjhflfUeS0pCb3oVl5Br+xy36SiPzNoop/oq8L9TfFVR8ZC7BvTq1Ut+uERA8GgPj383jmCXk0E5EThueJmYsCCjY/kWkwl1zTQee/1ShrpLadHyC5auv5HZ6/czrGOS0enqjMA7ghJCVMvsrR+xNncro46WsPeil7mwWbzRkXyTPYKE1A8Yk1dERulmWjbeStqcLRw+XnL27w0QUlBCiCo7UpTDpJXP0rG4lMNhD3FDvx5GR/JtDdowou+ztC8ppdD+EcWefCZ8ITOd/0YKSghRZU+n30oxbprn92bUTX9FVZyqW5wz8/nX8njSAAp1GT2avc+CTVnM33jQ6Fh1ghSUEKJKflj1CouKdtE7N5xhN0wiwmE1OpLfaDbgeUapKNZ4MuiZtILxX2wit7Ds7N/o56SghBBnVZKzjad+fpn4Mk23C6fSLinS6Ej+xWzhtmGf0NSlORQ8C4oPMHGezOUpBSWE+GNlRbz82UgyrWZa2e9gZM/zjU7kl2zhCaRdNJ7DJrii4RTmrNvLkl8OGR3LUFJQNaSkpISuXbtywQUX0LZtWyZMmGB0JCGqT2s2fXYbHwSVkVzclGeuu1s+d/KiDm1TuT66C+lBRfw9+j3+9fkmjpU4jY5lmIAsqPSMdPrN7Ef7d9rTb2Y/0jOqN8URQFBQEEuWLOHnn39m/fr1LFy4kBUrVtRAWiGM41wxlX8fW4PFY+WpK18m2BaYl07WptH9XyHO7OD7iI10KFrK0/O3Gh3JMAFXUOkZ6aQtS+Ng4UE0moOFB0lbllbtklJKERoaCpTPyed0OuWdpvBNJ62XNnvZE6y3B5HSaDQdE+UC0toQbA1m/CXPkmGz0ibmI1atWs6PO3KMjmUIr74dUkoNACYDZuANrfUzFe5vCLwDRJ7YZ5zWulrzA/175b/55egvZ7x/Q/YGyjynjo4pcZcw/sfxzPx1ZqXf06peKx7q+tBZn9vtdtO5c2d27NjB3XffLcttCN+zYQauL/6BxV1CjtnEC1FRdC4uY4IsB1GrejXsw+Dkvrytv2Zy4Ys8/GEsTms4WfklJEQ6GNu/JUM7Jhod0+u8dgSllDIDU4CBQBtgpFKq4lTHjwIztNYdgRHAK97K85uK5XS27efCbDazfv16MjMzWblyJZs2bar2YwpRm4oWjGeR3US/pAT6JCdy3KS4pKiQ4oXymWpte7DHBMJsYUyN9vCSawKfFt/BzqDr+aToDn6Y9Qqz1/n/gqjePILqCuzQWmcAKKU+Bq4CTh47qYHfFk2KAA5U90nPdqTTb2Y/DhaefhFcfEg8bw94u7pPD0BkZCSXXnopCxcupF27djXymELUhsWmY0yMrkeJ6ff3rq9ERRCdk8uVBuYKRFH2KB666FHGfT+OTZFHufHYcQCSVA4T9TSeTbcwtOPjBqf0Lm9+BpUInLzwUuaJbSdLA25USmUC84F/eDEPAGM6jcFutp+yzW62M6bTmGo9bnZ2Nnl5eQAUFxfz9ddf06pVq2o9phC17cWoqFPKCaDEZOLFqCiDEgW2QY0HcWGhm+ejIuibnED7Rsn0S0pgaaiF28veNzqe13mzoCobIVBxuu+RwHStdRIwCHhPKXVaJqXUKKXUaqXU6uzs7GqFSmmSQlqPNOJD4lEo4kPiSeuRRkqTlGo97sGDB+nTpw/t27fnwgsv5IorrmDw4MHVekwhatthS+W/Es60XXiXUoo+xcdwKsVhiwWtFAetFtKi67EuzP/Xj/LmKb5MIPmk20mcfgrvNmAAgNZ6uVLKDkQDh0/eSWs9DZgG0KVLl2qvaZHSJKXahVRR+/btWbduXY0+phC1LcZjItvsOW17hC3WgDQC4N3ISKgwIrjEZOKlevX8/rSrN98WrQKaK6UaK6VslA+CmFNhn71AXwClVGvADlTvEEkI8efsXUHPwmOnbbaqIB6+SFaJNsohS+WXq5xpuz/xWkFprV3APcAiYCvlo/U2K6UmKqWGnNjtAeAOpdTPwEfALVpW/RPCEMXfPMtyhwMHMaecAn+i1+M1fsZBVF1cSOXrbZ1puz/x6nVQJ65pml9h2/iT/r4F6FlDz1WnL4yV3hV12sENzMtewaHo+oy94CFu6tDf6ETihDGdxpC2LI0S9+8LGdo8cFf7uw1MVTv84pNPu93OkSNH6mwJaK05cuQIdrv97DsLYYCy755jWkQkDldD/nJBP6PjiJNUHNgFcHFREQ22HTE4mff5xcRaSUlJZGZmUt0Rft5kt9tJSpKpYkQdlLOdLzKXkBVdjxsb3V6nz0QEqpMHdv3zmwf4dtcibv75BXTKzSiT2eB03uMXBWW1WmncuLHRMYTwSc7v/8MbERFYShMZ3d3fx4X5vn90Gs1Xe74mPSKf4CXv0fLyW4yO5DV+cYpPCPEn5e3li13pHLCa6R13Ew6ZrbzOOy/8PIY1u5qZYaEcWz0JPG6jI3mNFJQQAcz5w4u8Hh6KuTiOBy8eanQcUUX3dLobk7IyI6yIrGX+O6OEFJQQger4Ieb8OpMDVgstQ0aQGCUzlvuKaEc0I1vdzMLQEHYufxbcLqMjeYUUlBAByrn8ZV4PD8FcHMuY7lcZHUeco793vB2HtvN2WBnHV/rnUZQUlBCBqDiXuVs+YL/VQrhrGN2b1jc6kThHobZQrm99Jz857KxY/iy4/W9peCkoIQKQ86fXeD3UhrU4hjs6D5ah5T7qri5/IdQTxrRQN6Wr3zM6To2TghIi0JQWkL7hDTKtVpz5g7m6k1yf56tsZhvDW/yDX4JspK94DlzVX3i1LpGCEiLAuFa/xbRgC0El9bm2dX9CgmRouS8b0z2VcGc9poVA2drpRsepUVJQQgQSVynpa19ln9VKbnYKN/VoZHQiUU1mk5krm93HfquFj356AZwlZ/8mHyEFJUQAca17j9ccmtCyevRM6E3j6BCjI4kacG/PwUSUxPNmiKJg1RtGx6kxUlBCBAq3i/mrJrPPaiX70CBukaMnv2G3Wris4b3kms28vW4KOP1jtV0pKCEChGvjp7xmcxLlqke87UIuaSGr5PqT+3pfTuTxRrwXbCJnxRSj49QIKSghAoHHw4KfJrHXauVA1kBu7t4Is0mGlvuTqBAbneP/QakyMXXTG1BWaHSkapOCEiIAuH6ZyzRTIbG6HpaS8xneOdnoSMILRvfuQVheKz5zWNj743+MjlNtUlBC+DutWbDsGXbbrGRlDWRYx2Qigq1GpxJe0CQmlCZRf8OkFf/d9iGUHjc6UrVIQQnh59w7FzNN55KooijMa8tfLmpkdCThRX/v1ZGQox1Z6LCy+fv/MzpOtUhBCeHnFnz/JLttVo4fHULXRtG0SQg3OpLwooua1CPEeiOhbsXzGbPRxflGR/rTpKCE8GPuPct4zZVFQ1Mk+7NacrMMLfd7SilGXdwGa053VgZZWP7tBKMj/WlSUEL4sYXfpbHbZsVWdg0Nwh30a9vA6EiiFqScn0Cp62qiXWZeyPwST9FRoyP9KVJQQvgp94H1vFayl8bmCNZtb8oN3c7DapZ/8oHAZjFxS49meA5fwi9WMwuXjDM60p8iP61C+KlF345nl81Kom0EVrOZEV1laHkgub5rQw4X9aehy8ZLh37AWXDI6EjnTApKCD/kzv6F1wp+paklnB82N2XQ+fHEhtmNjiVqUUSwldQuDSnK6s9+i5kZi/9pdKRzJgUlhD/ZMANeaMdX0/uQYbPSV13A8VIPN3VvZHQyYYC/9mzM7oIeNHQpns1dR/vp7ej3VjvSv3nM6GhVIgUlhL/YMIP0r8fSL8zN2Jj6WLQmcf887qm/lk4NI41OJwzQKDqEaxrNJcvkwaMUWikOmhVpu2b5RElJQQnhJ9K/n0haVCgHrRZQCpdSPB0dRmPbh7KkewD72fojZRXmXSwxKSZnzDIoUdVJQQnhJyYHuSkxnfpPusRk4jVZ8imgHTrDb/ksH/jt7wMRhRBVkWUxn9N2ERjiPOe2vS6RghLCT8TZIs6wXT5/CmSDw/ph95zaRlaPZnBYP4MSVZ0UlBB+4pr6nU7bZsPCmIseNiCNqCs+2TmYxlmdiHV6UFpj0pqmZU6+236h0dHOymJ0ACFEDdCaX/b8gNWqKXVHoiz5aGckxUcH4szvYHQ6YaADecXsZwTkjwAgKmY2v9Zfzj/K3gVGGhvuLKSghPADB35NZ6nNSaPc81h/6K5T7ntu0TaGdkw0KJkwWkKkg/15xf+7nZfXm9D6KyiJ3AI52yG6uYHp/pic4hPCD7y/qnz11F+OXHvafQdO+uUkAs/Y/i1xWH8fKKOd9VCFTfg8LATX0rq9XpQUlBA+7tjhTXzmPEyLovqUuGJPuz8h0mFAKlFXDO2YyNNXn09ipAMFxIQFUZjbi2yLmW93LYCsTUZHPCM5xSeEj/v0+8cpMplICL3ltPscVjNj+7es/VCiThnaMfGU07wPfVaf+bmzmRHhpO83T8OIDwxMd2ZyBCWED3MWHuGD/C10M4Xz7e5EWsSGkhhpRwGJkQ6evvp8+fxJnObB/m2g4CKW2a3s27EA9q81OlKlvFpQSqkBSqltSqkdSqlKFyRRSqUqpbYopTYrpT70Zh4h/M387x8n22wi2XoVuUVOnr+uAz+O68uuZ1L4cdxlUk6iUvVDg7ij40i0VnwSGQ1LnzI6UqW8VlBKKTMwBRgItAFGKqXaVNinOfAw0FNr3Ra411t5hPA32u1i+oGlNPNY+HBTO4Z1TKRdYuUX6wpR0V29OmF3tueT4FDKdnwNe5YbHek03jyC6grs0FpnaK3LgI+BqyrscwcwRWudC6C1PuzFPEL4lR9XvsgOMzTXPdFa8UC/FkZHEj7EYjZxZ4cbKDE7mR8eC0ueBK2NjnUKbxZUIrDvpNuZJ7adrAXQQin1o1JqhVJqQGUPpJQapZRarZRanZ2d7aW4QviW6ds+Jsat+Wx7X27p2YikqGCjIwkfc2uX/tiJ4aXgONjzA+z61uhIp/BmQVU2v3/FerYAzYFLKb+k+Q2l1GkTh2mtp2mtu2itu8TExNR4UCF8zZatn/OTKqVdWStC7SHcfWkzoyMJH2RSJka2TiXbkcdae4M6dxTlzYLKBJJPup0EHKhkny+01k6t9S5gG+WFJYT4A++sfYkQj2bJ3qu4u09TIoKtRkcSPurm84djwsIEe3PIXAXbvzQ60v94s6BWAc2VUo2VUjZgBDCnwj6zgT4ASqloyk/5ZXgxkxA+72DWehY5c+hQFEtEeKIs5y6qpb6jPpefdzl7IrLJMMeh69BRlNcKSmvtAu4BFgFbgRla681KqYlKqSEndlsEHFFKbQGWAmO11ke8lUkIf/DeDxMB2Jg1hH/2b4HdKus9ieoZ0SoVbSrmX9YuqKwNsHWu0ZEAL88kobWeD8yvsG38SX/XwP0nvoQQZ3Gs4BCfHf+VTkUOsqI7c9UFcp2TqL4uDbrQOKIxuzzHydiTSMMlT2FplQImY9/8yEwSQviQmT+kUWRSZGdfwb8GtcZkqmwskhDnRilFaotUiky7mGjuiyXnF9j0udGxpKCE8BVOZynvH/yBdsWKqOSr6NU82uhIwo9c2fRKgsxB5DYzs9XTkNKvnwS3y9BMUlBC+Ij5K/9DtgmsRy5k3MDWRscRfiYiKIIBjQZw0LOcKdZrCTq2G/2zsbPPSUEJ4QO01ry9fSaNytw0aHonbRLCjY4k/FBqy1SKXUU4LoxlvacJxV/9H7hKDcsjBSWED1i25WN2KidJuS24b0A7o+MIP3V+9Pm0qteKjLLFzIy4meDig5SunG5YnioVlFLqM6VUilJKCk0IA7y+ZgoxLjfNWo6VBQiF1yilGN5iOL/mbuP8yzvzk6cVzqXPgtOYVZmrWjivAtcD25VSzyilWnkxkxDiJFszl7NG59P+WANu79fV6DjCz6U0SSHYEszG44tY2fguQp05HP32VUOyVKmgtNZfa61vADoBu4GvlFLLlFJ/VUrJHCtCeNEr3z5BsMdDl1b3E+GQf27Cu0KsIQxuMpiFuxcy8MqB/KjbY132IpQW1HqWKp+yU0rVB24BbgfWAZMpL6yvvJJMCMH+3N1879xLz4Jghl8xyOg4IkCktkyl1F3KisNfktX5AcI8+WSk/6fWc1T1M6jPge+BYOBKrfUQrfUnWut/AKHeDChEIHth0SMAXNZsFEEWmdJI1I6W9VrSPqY9M36dQcrAwfxovpCYDa9RVpBbqzmqegT1hta6jdb6aa31QQClVBCA1rqL19IJEcCyC3L5tngDvYoUg/rdZnQcEWBSW6SyK38XG4+sw3r5I4RRyFuTHqDxuHR6PrOE2ev2ez1DVQvqyUq21b31gc8iPSOdfjP70f6d9vSb2Y/0jHSjIwlxRs+mp1FigiHJ12IyywBaUbv6N+pPmC2MT7d9ygF7C9Z5mjJKf8bOoOv5pOgOfpj1itdL6g8ni1VKxVG+Cq5DKdWR3xchDKf8dJ/PSM9I57EfJuDU5RedHSw8yGM/TADKR60IUZdkFxSyvOAbujhd9BvwoNFxRACyW+xc1fQqPt72MaZ9igFqL79N/Zikcpiop/FsuoWhHR/3WoazvS3rD0yifLHB54H/nPi6H/iX11J5wdMrnv9fOf3GqUt5esXzBiUS4syenPci+RYPw2N6g1WuexLGGN5yOC6Pi1j7bOzKecp9waqM28ve9+rz/+ERlNb6HeAdpdQ1WuvPvJrEy/LLDle6CH1+2eHaDyPEH9h7pJANx2bRTDkZeEWa0XFEAGsS0YQuDbrwpXMF9x47/YgmweTd5fvOdorvRq31+0AjpdRpazZprX3m8MPjjMRky6t0uxB1wex1+3lu0TaOOX+ChqWMLGu6sDvXAAAgAElEQVSMCo83OpYIcKktU3nw0GqWO+z0LC455b4SR5xXP+s52ym+kBN/hgJhlXz5jG7Hm2H3eE7ZFuTRdDvezKBEQvxu9rr9zPjqX9ij/wHJH2DSmvW5QbUyUkqIP9K3YV/qWYL5JDzilO0us53ggRO9+txnO8X3mlLKDBzTWr/g1SRe9rJzOUtz8pkcFUmWxYwGupQU87zT5wYjCj80Z+mjbI9ZTYmp/D2jB1gVs52SpY8ytOPbxoYTAc1mtjG01Qje2fQ2WZHJxOVlQkQSlr7joX2qV5/7rGNXtdZuYIhXU9SC4OIsUgqL+DLzABt272NIQSFr7HZKSuUzKGG8PeEr/1dOvykxmdgTvtKgREL87toW1+JGM+vSuyEtD+7b5PVygqpfB7VMKfWyUupipVSn3768mqymRSSdcvO2/GOUKsX7MQkGBRLid9mWypduP9N2IWpTclgyzSObM3XD1Fq9jrSqBdUDaAtM5Peh5pO8Fcor+o4/ZbhuE6eLS4pKeT84iIKy2p8EUYiTNXCf23YhalN6Rjq7j+3Goz1oNAcLD5K2LM3rJVXV2cz7VPJ1mVeT1bT2qXDlSxCRzG/jzS8sbkExZXy49WNjs4mAd7G5B2h9yja7R3Nv02EGJRLid5PXTsbpOfU6qBJ3CZPXTvbq8/7hIImTKaVSKD+Ksv+2TWvt3SEcNa19avmX1jA9hesObePfBe14a+M73NT2RuwW+9kfQ4gadrzEScGhHIhTRHk0eQriPDCmyTBSLn3C6HhCkFWYdU7ba0qVCkopNZXyqY36AG8A1wK+++mtUnDZYwS9PYDrgsL51L2Tz7fP4vrWI41OJgLQF9+v5mj4JmIJZdHNK7GYqvy+UYhaERcSx8HCg5Vu96Yqfwaltb4JyNVaPw50B5K9F6sWnNcdml3OQ8XfQFESU9e/edohrBDeVuby4Fz1BD8FB5HaMlXKSdRJYzqNwW4+9QyT3WxnTKcxXn3eqhbUbwvSFymlEgAn0Ng7kWrRZY8SVJbPsOJQcssOsSBjgdGJRID57rvFHArdggXFNRfcbnQcISqV0iSFtB5pxIfEo1DEh8ST1iPN6xNtV/Xt2jylVCTwLLDmxLY3vBOpFiV0hNZX8sj2JcwKac1/105jcNPBmJQsbSC8T3s8hC5/nC8SQriiYV+iHdFGRxLijFKapNT6yg9V/U08CbgV+Avl60A9CzzlrVC1qs8j2FxFDCkIJqt4D0v3LTU6kQgQm76ZwT57BgUmEyPb3mR0HCHqnKoW1DuUj+B7Cfgv0Bp411uhalVsa1T7VB4rXIkqi2Ty6qnoCsN9hahxbidRy57k3bB6tIhsQYeYDkYnEqLOqWpBtdRa36a1XnriaxTQ0pvBatWl4wjCxcBjDnYd/4Wfsn4yOpHwc/sXv0q2+RC7gxQjW49EKZkxQoiKqlpQ65RSF/12QynVDfjRO5EMUK8JquONpBWsQTlDeHHVVKMTCX9Wkk/4T5OYEp5EqDWUQY0HGZ1IiDqpqgXVjfL5+HYrpXZT/jnUJUqpjUqpDV5LV5t6P4jdZKbfsSA2565hQ7Z/vCxR9xz76t+U6uOsCtUMbTaUYKs3V9QRwndVtaAGUD6s/JITX42BQcBg4ErvRKtlEYmoC28j7fhGlDuIyWteMzqR8Ee5ewheO40nQtviwc11La8zOpEQdVaVhplrrfd4O0id0Ot+QlZP57J8G4vN37E9dzvNo5obnUr4kbJFEyj1KJbXV3SP706jiEZGRxKizpILfk4WGoO66E7Sjm9FeSxMWfu60YmEP8lcje2XWYy3d6eYPEa0GmF0IiHqNCmoinqOJtwSyiXHrCzJXETm8UyjEwl/oDWehQ+TQySr4qzEh8RzSdIlRqcSok6TgqrIEYWp52geO7YDNExd/6bRiYQ/2PIFpsyVTFADyDf9SmrLVMwms9GphKjTvFpQSqkBSqltSqkdSqlxf7DftUoprZTq4s08VXbRndS3RtDzmJm5GV+QXZRtdCLhy1yl6K/Gk2E6j/XxFqwmK1c3v9roVELUeV4rKKWUGZgCDATaACOVUm0q2S8MGA3Unatjg8Iw936Afx3bg0e7eHPjdKMTCV+2choqbw+PlV5DqWM1/Rv1p569ntGphKjzvHkE1RXYobXO0FqXAR8DV1Wy3xOUz+1X4sUs5+7C24iz1adbgWLGthnkl+YbnUj4oqKj8N1zrLV14dcGilJPkQyOEKKKvFlQicC+k25nntj2P0qpjkCy1nreHz2QUmqUUmq1Ump1dnYtnW6zOrD2eYix+ftx6hLe2/xh7Tyv8C/f/htdepwHjw8nJOYnWtdrTfvo9kanEsIneLOgKptc7H+zsCqlTMALwANneyCt9TStdRetdZeYmJgajHgWHf/CeUFxdCqEdze/R5GzqPaeW/i+nB2w6g2+Dx1IdqTmSNleRraSefeEqCpvFlQmp666mwQcOOl2GNAO+ObE9EkXAXPqzEAJAIuNoMv/xX35WRR7jjNj20yjEwlf8vUEPOYgHsgZTMNG6wm3hTOg8QCjUwnhM7xZUKuA5kqpxkopGzACmPPbnVrrfK11tNa6kda6EbACGKK1Xu3FTOdMtb+OZkHJtCvWvP7zW5S5y4yOJHzB7h/gl3l8Ve968m1m9pX+xLBmw3BYHEYnE8JneK2gtNYu4B5gEbAVmKG13qyUmqiUGuKt561xJjPB/cbzj/xsjrmOMGfHXKMTibrO44FFj+AOTWDs/l6c32orbu0mtWWq0cmE8ClevQ5Kaz1fa91Ca91Ua/3UiW3jtdZzKtn30rp29PQbU5shtLY1olmJhynrpuH2uI2OJOqyjTPg4HoWxY3iuNtEtvqWnok9aRje0OhkQviUKk0WG/BMJsIHpnHXnL9yv93EpTMuJb80n7iQOMZ0GkNKkxSjEwqjbZgBiydCfiYoE57wZB7Z2ZpOrXbxa2kOI1umGZ1QCJ8jBVVF5pYDyA5piNJF5JXmAXCw8CCP/TABQEoqkG2YAXNHg7O4/LZ24yk4xMWl33IgIpNEdyK9EnsZm1EIHyRz8VWVUkwNt6ErDBF26lKeXvG8QaFEnbB44u/ldILFU8YNYZ+xLX+9zLsnxJ8kBXUOct2VzyaRX3a4lpOIOiW/8hnvvwx1YjPZGNZsWC0HEsI/SEGdg1iX55y2iwARkXTapgKlmBcWwoDGA4iyRxkQSgjfJwV1Du7NzcXuObWM7B4P9+bmGpRI1Al9x+NRp36cOyssgiKlGNlqpEGhhPB9UlDnoK8nnLSco8Q7XaA1Jq15NOcofT3hRkcTBppT1oUCj5USbcWjFfs80UwJSyDR0YJ20e2MjieEz5KCOgfBAyfSv8TDl5kHeOVQNh6lsCorwQMnGh1NGGjLwtcJV8Xc6hxLk9IPuNQymkJbAUcOXmh0NCF8mhTUuWifiuWq/0JEMt2LS0l0ung7MhHaywwBAcvjYXjZLDZ5GrHM0xYAa9RyPK5gcrJaGRxOCN8mBXWu2qfCfZuwTMilX4mdX6wFrNizyehUwii/LqSp6SDTXIMBhbLkYwnbijPvQhIi5NSvENUhBfVnKcWQzqOxaM0bS58yOo0wyrKXKHAksDA0iJCmzxDS7GnAg0VHMLZ/S6PTCeHTpKCqoVm3m+lVotjs2cS+ozKSL+DsWwV7l/NC/W7Y4mdjsuWhFCgF9thFWCPWG51QCJ8mBVUdJhNXNh1OgRmmpj9hdBpR25ZNxmWL4BO9A2VynnKXU5cyee1kg4IJ4R+koKrpij7jSHZqthZ9TW5BqdFxRG05shO9dR6fqn4oa+UzjGQVZtVyKCH8ixRUNSmLjZToHmy3az5If8XoOKK2LH8Zj7LwfH4fIoNiK90lLiSulkMJ4V+koGrAjZc/gU1rth1+n2MlzrN/g/BtBdl41n3IZ+6L6dy2FRfEtj5tF7vZzphOYwwIJ4T/kIKqARGhDehtb8qq0BLmLvzc6DjCy/TKaZjcJbynriSlWz7fZn5L17iuxIfEo1DEh8ST1iNNlmARoppkPagacvPFD/H1139j987JFJddi8Mmyyv4pbIiylZM4zt3ZwZccQHPrb2P5lHNmdJ3CnaL3eh0QvgVOYKqIRckdKexKZyfw46wYPHXRscRXlK08h2CyvL4un4qq4pepsRdwqRLJkk5CeEFUlA1RCnFDR1uY2uQjSM/T6LU5TY6kqhpHjfF373EWk9zHJ2KWHNoNY9e9ChNIpoYnUwIvyQFVYNSWqZix8zekB0s+m6F0XFEDdvx3YfULzvA4ub9+HzXdIY0HcKQpkOMjiWE35KCqkGhtlAGN+rPgtAQipdNwuWWhQz9RZnTjeu7yWw0x5NuW0ajiEY80u0Ro2MJ4dekoGpYartbKDUpSh2r+eqndUbHETVk3txPaeHZzrNNG3G87DjP9X6OYGuw0bGE8GtSUDWsdf3WtItswWfhIRR88yIejzY6kqimXTmFRK2fytTIWNY79/NQ14doWU8mghXC26SgvCC1zY1k2KwkqCUsXbfV6DiiGrTWvPrpPKIcm5kW5aB/o/4MbzHc6FhCBAQpKC8Y0HgAoZZg5oQHcfirF9FajqJ81ez1+2l78F3GxsYQHxLPhO4TUEoZHUuIgCAF5QUOi4Ormg/jy5BQepbO4/tNGUZHEn9CbmEZr8z9gVVx28ixWJh06fOE2cKMjiVEwJCC8pLhLYbjUpolYSb2LvqvHEX5oKcXbKV58HS+DXHwQNvbaBvd1uhIQgQUKSgvaRrZlM4NOvNRZAz9jn/Gqu37jY4kzsGKjCPM3/QNy6MzudQUwQ2dRxsdSYiAIwXlRaktUjlgdrHTUcrW+VOMjiOqqNTlZtzslUQkv0+0282TFz8lnzsJYQApKC+6/LzLiQqK4t36SVye+wk/7z5sdCRRBa8u3ckh67sUmot51pRIRKNLjI4kRECSgvIim9nG0OZDWW5zY7XksXbeNKMjibPYmV3A1HUfYAnfxD25+XTsOdboSEIELCkoLxvefDhuPLxf7zwuOfwevxzINTqSqGD2uv30fGYJjcelM+jVGVhi5tDdZeZWWzw0u8LoeEIELCkoL0sOT6Z7fHfmRwVznimLZXPfNjqSOMnsdfv515fvkFd/AiGtxmFtOBmzhqf378HUYzSY5J+IEEaRf321ILVlKoecx5gf0ZCL9k8n4/BxoyOJE5769gNMsTMx2fJQCpTyYFIuvnLUh/NlxgghjCQFVQsuSb6EGEcM85Kb0Ma0h6XzPjA6kjihKGQuyuQ8ZZvLBC9ERYIlyKBUQgiQJd9rhdVk5ermVzNtwzR+ccTRYfcbdHuqKYePl5EQ6WBs/5YM7ZhodMyAZLLmVbq9yFJay0mEEBV59QhKKTVAKbVNKbVDKTWukvvvV0ptUUptUEotVkqd5808Rrqm+TUopXg7sSOdTduZV3YbO4Ou55OiO/hh1ivMXicX8hohwhZ7TtuFELXHawWllDIDU4CBQBtgpFKqTYXd1gFdtNbtgZnAs97KY7T40Hh6J/ZmSdkOyjTEqHxMCpJMOUxU01ifLkPQjXB7RCeoMA2V3ePh4YQeBiUSQvzGm0dQXYEdWusMrXUZ8DFw1ck7aK2Xaq2LTtxcASR5MY/hhrccTom5lG9CHKdsD1Zl3F72vkGpAptz+1xQinouN0pr4p0u0nKOkrJultHRhAh43vwMKhHYd9LtTKDbH+x/G7DAi3kM1zOhJwlOFzPCw+hXVHzKfQmmIwalClzLdx3g/TATXYpLeCvrMKdOZlR8hu8SQtQWbxZUZZOXVTqlt1LqRqALUOmcMkqpUcAogIYNG9ZUvlpnNpm5qkTxapidy5ITyDGbiXO5GZObRx9PBLKAeO3RWvPoklc5ajEz+XD26T+sEX59MC+ET/DmKb5MIPmk20nAgYo7KaUuBx4BhmitKx06pbWeprXuorXuEhMT45WwtaVe6xTQmmyLBa0UB60W0qLrsbSbXHNTmxZuyeCQWkh7UxIdSk8dZo7VAX3HGxNMCPE/3iyoVUBzpVRjpZQNGAHMOXkHpVRH4DXKyykgZlJ9K/dnqDAzdonJxLNZyw1KFHg8Hs2TP76CMpXymOPEaL3QWEBBRDJc+RK0TzU0oxDCi6f4tNYupdQ9wCLADLyltd6slJoIrNZazwGeA0KBT08sZ7BXaz3EW5nqgqzCrEq3Hy05RFGZi2CbXJrmbR+v20S+dSkX2VvTatNsuPif0Pcxo2MJISrw6m9DrfV8YH6FbeNP+vvl3nz+uiguJI6DhQdP2x7j0rywYBOPXNXBgFSBw+n28MKqV1B2N+MPrIfYtnDJg0bHEkJUQqY6qmVjOo3Bbrafss2qzDyQewT7qpdZu1dmO/emactWUWxfxmCiaFiQA8NelSmNhKijpKBqWUqTFNJ6pBEfEo9CEWQOwqndmBK6cI/lC16Y8SWlLrfRMf1ScZmb1ze9igXFffs2QO+xEH+B0bGEEGcgBWWAlCYpfHntl2y4eQPfj/ieDjEdeMSzn7UhDv6a/wpTluwwOqJfev7bb3A71nBjYTGxMW3g4geMjiSE+ANSUAZzWBy83Pdlzgs/j/viool3bGb7tx+z9eAxo6P5lfxiJx/veB2HNnFH7lEY9hqYrUbHEkL8ASmoOiAiKIJXL3+VMHt9/h6fwB2Od5kw8ydcbo/R0fzGU1/Ph+DN3J53lIjeD0GDtkZHEkKchRRUHREXEsdrV7yGyxbMo3FWLsp5nbd+3GV0LL9wKL+YLzNfJ8rt4caQJtDzXqMjCSGqQAqqDmkS2YRX+k0j2xrE8sSfmf31AnbnFBody+eN//Jz3MF7+Ft+AcFDXwOzXGsmhC+Qgqpj2se05/leT7PDZiU04XXGzlyNx1PpFIaiCnbnFLDx6KskOF0Mv3AMxLYyOpIQooqkoOqgi5sOYmJyClsdHnJdT/Lhyt1GR/JZExe8xnF7PqOIwtZjjNFxhBDnQAqqjrqyz9P80x3GobAsnl/5BAfyis7+TeIUG/cdYU/JezQuczH0qrfAZDY6khDiHEhB1VUmEzcPmsYt+cdxRqzi1tlPo7Wc6jsXb6U/yGGbmzsTB2COkVN7QvgaKai6LK4d9zcfyZDjhexXs3l08etGJ/IZKzesZ6NlOS1cZgb2n2R0HCHEnyAFVcepy/7FhFIbXYoVczJf5vNt88/+TQFOezwsWfp3DlnNjL7oUZRZTu0J4YukoOq6oDBsA57mlUN7qV8SRtqKR1iVtcroVHXauvmTWRCWT2tTAy5pe63RcYQQf5JcEOIL2gzF0eRdZuxdyeUxzRn15d+ItEdwpPgIcSFxjOk0hpQmKUanrBPcR/fw447/cjQqhBeueM7oOEKIapAjKF+gFAyaRIzHybAiDy6Pk5ziHDSag4UHSVuWRnpGutEpjac1GR/ezgcRDtqFdKRTXEejEwkhqkEKylfUb4rqdR/LQ7Ph1BXjKXGXMHntZGNy1QUbZsAL7dCPRzLX/StFykRan0eNTiWEqCYpKF/S6z6yLJV/4H/wDEvJ+70NM2DuaMjfx2GzmQ/DQ0kpKqbl/vVGJxNCVJMUlC+x2glyh1Z6l3JF1HKYOmLxRHAWA/BaZDhupbj76NHy7UIInyYF5WOaHG6O3VNhGQ6tCfKUUeQMvNkmdH4m6SHBXJacwKdhodi05uegIHR+ptHRhBDVJAXlYyaXLict5yjxThdKa+KdLm44dpwyayH/WPIPSlwlRkesPSX5fBESSlp0PbItFlCKIpOJtOh6fBjSwOh0QohqkmHmPqYBOaQUalIKTz1aalPq5FG1ivu/uZ/JfSZj9ffVYguy4f2reSUqjBLTqe+zSkwmXoiK4AaDogkhaoYcQfkYFZFU6fZuRcGUZg3j+/3f89D3D+HyuGo5WS3K3QNv9afgyHYOWip/j1VqKa7lUEKImiYF5Wv6jger47TN9WMa0C3yMkqyBvPVnq947MfH8Gg/XDL+8FZ4qz+7io9yWWwLzjR9boQttlZjCSFqnhSUr2mfCle+BBHJgCr/s8MNWA5vZrr1Ga5KGETp4SuYlzGPJ5Y/6V8zoO9bBW8N4BszDI2NpthcyjVN/oJVBZ2ym1UF8fBF9xsUUghRU+QzKF/UPrX862RNL8M062881+BRGjT9P17f5WQmn2IzBTGu24MopSp/LF+x42v0J39har1oXnGAckbzWr+X6HFeC7omtWXy2slkFWbJ1E9C+BEpKH9x/rUQFIaacRNjnfcRf/5knthcxofb3sdmdvDAhaONTvjnbfqMwll38nB8IkutbsxFnfho2H9oHRcNQEqTFCkkIfyQnOLzJy36w42fwbED3LhlFP/t8hdc+RcyfcvrvLhqqtHp/pxVb7Bn9t8YmZTEUovGljeUz6+d8r9yEkL4Lykof9OoF9wyF0oL6Lfir7x/0S3ogo68uWUKL658y+h0Vac1fPsc3y15hBFJiezSNuxH7uSzG8bRJKby2TSEEP5FCsofJXSEWxeCyULnJTfyefebMBW3482tL/D88veMTnd2Hg+eBeOYuu4l7omLpbAsjtAjY/nslptpFB1idDohRC2RgvJXMS3LS8pRjxYLbiK96w1Yy1rz1rbneOa7D41Od2ZuJwWzbufe3TOZEhWJLuhE6NH7mHHbIBrWDzY6nRCiFilfG4bcpUsXvXr1aqNj+I7jh+C9YXBkO9mDXmbQz59QbNpJx6DRZOxpzIG8YhIiHYzt35KhHRONzVpWxK4ZIxlTvI09NhueI0MId/bh4zu6k1xPykkIf6GUWqO17nLW/aSgAkBxLnwwHPavIXfAJC7fNJtS0x60JxhlLkQ7I9FHB/J//W6u9ZJK/+YxJmfMIssEkR4PRUphtwSTn3kLkebWfHTHRSRFSTkJ4U+qWlByii8QOKLgL7OhcW+iFtxPl3wHKI3JUohSYLLlYYqdyVPfflCrsdK/eYy0XbM4aFZopcg1mylTioRDzYgyt+HjUd2lnIQIYFJQgSIoFK6fAa2vZFf4Ripet6tMTopC51BYWktz+GnNixmzKDGdGkQrxZGoDXzyt4tIjDx9SichROCQggokliC4dvoZJ1g1WfLp9vqt3PHph2zIPOqVCM4jO/h24RjGvdmRrDP89GWbFfERUk5CBDqZSSLQmC3EuTVZltOnPnJojTNsGyuK1rFs4RSiPN25rtUw/tqtG6FBf/5HxVVwmFWrp7Bw10K+0gUcN5uIsCgcGoormYGpgftPP5UQwo9IQQWge48eJS066pR1lOweDxNyjnJ5g2Z8FdmA9woOsaXsK6btWsRrW5M5P+JyRncbTvfGyVV6Dk9ZEevXvs6C7Z/zpTObo2YzIQp6OJqQGDmE/NKubN/6PDsarD4tR3J+1xp/zUII3+PVglJKDQAmA2bgDa31MxXuDwLeBToDR4DrtNa7vZlJQIqlHuQcYXJUJFkWM3EuN2Ny80hxKijMZvCubxmsPeSYTXwR3ZCZtsNsKn2bUd+8Q/Di9gxsdCX39rySd+c9whf5i8i2KGJcmiHhV3B5y04s2PoRC4v2cshsIkhr2npiSSjqyZqsrnzuKv+RC7YdpKgsla7aw5GYtf97jPrZnViaf63B/4WEEHWB14aZK6XMwK/AFUAmsAoYqbXectI+dwHttdZ3KqVGAMO01tf90ePKMPMasGEGzB0NzpMW9bM6ypfxaJ8Kpcdh/1rIXPW/r19cx/giNIT00FByzSaC3OAyadwnjbZQWqOVwqI1TYqCKc7vyC/HryDcHk67hAjaJoTTJiGcdokRNKofQu9nl7I/7/SFBRMjHfw47rLa+C8hhDBAVYeZe/MIqiuwQ2udcSLQx8BVwJaT9rkKSDvx95nAy0oppX3t4ixf89tSHYsnQn4mRCSVL4T42/agMGhySfkXgNa0yt1Fq32ruG/fTyzZ9yOP2Qtwq1NHOWilCHd7aKOep3XzxrRLCKdtYgQJEfZKl/sY278lD3++kWLn7x86OaxmxvZv6ZWXLYTwLd4sqERg30m3M4FuZ9pHa+1SSuUD9YGck3dSSo0CRp24WaCU2uaVxOWiKz6/n/iD15UPXHfiq2ocjeydK3sXoYBluwesqerjmBzh9cyh9RKV2WLTbleZu+Do/mFPHjuXIYT++P/LH18T+Ofr8sfXBN5/XedVZSdvFlRlK+RV/J1WlX3QWk8DptVEqLNRSq2uyqGnr5HX5Tv88TWBf74uf3xNUHdelzevg8oETh7ylQQcONM+SikLEAF45wIcIYQQPsWbBbUKaK6UaqyUsgEjgDkV9pkD3Hzi79cCS+TzJyGEEODFU3wnPlO6B1hE+TDzt7TWm5VSE4HVWus5wJvAe0qpHZQfOY3wVp5zUCunEg0gr8t3+ONrAv98Xf74mqCOvC6fm81cCCFEYJC5+IQQQtRJUlBCCCHqJCmoSiilnlBKbVBKrVdKfamUSjA6U01QSj2nlPrlxGubpZSKNDpTdSmlhiulNiulPEopw4fFVpdSaoBSaptSaodSapzReWqCUuotpdRhpdQmo7PUFKVUslJqqVJq64mfvzFGZ6oupZRdKbVSKfXzidf0uOGZ5DOo0ymlwrXWx078fTTQRmt9p8Gxqk0p1Y/ykZIupdS/AbTWDxkcq1qUUq0BD/Aa8E+ttc/Og1WV6cF8kVKqN1AAvKu1bmd0npqglIoH4rXWa5VSYcAaYKgv/79S5dO9hGitC5RSVuAHYIzWeoVRmeQIqhK/ldMJIVRy8bAv0v/f3v2FSFWGcRz//pJIw0iEvQy8iS5coiiCpS42EowoJRC6KGjxppAuuqkgISPwVqQgghCMsCDYILKC7KI/GNpFCCmbd4WJWBaC/SFLfl28Z8xqdGebmX3PzPw+MHCGPQeel905D/Puc57H/tB2ZyLhIcqzaSPN9oLtYXYWWU4X24PZPg902oONNNufMmbPN9o+ZfvL5vgcsEDpjDOyXPzcvL26eVW993UPqpYAAAMFSURBVCVBXYaknZJOAA8Dz9WOZwi2Ah/UDiL+oVt7sJG+6U0CSeuAW4HDdSPpn6QVko4A3wMHbFdd08QmKEkfSTra5bUZwPZ22zcA+4An6kbbu8XW1ZyzHfiTsrbW62VNY6Kn1l/RHpJWA/PAk//aeRlJti/YvoWyu3KHpKpbshM7sND2hh5PfQN4D9gxxHAGZrF1SXoUuB+4Z1S6dizhdzXqemkPFi3R/J9mHthn++3a8QyS7bOSPgbuBaoVt0zsN6grkXTjJW83AV/XimWQmgGSzwCbbP9aO574j17ag0ULNAUFe4AF27tqxzMIkqY6lb2SVgEbqHzvSxVfF5LmgZso1WHfAo/bPlk3qv41LaWuoUwvBjg06tWJkh4EXgKmgLPAEdsb60b1/0m6D9jN3+3BdlYOqW+S3gRmKSMcTgM7bO+pGlSfJN0FfAZ8RblPADxr+/16UfVH0s3Aa5S/vauAt2y/UDWmJKiIiGijbPFFREQrJUFFREQrJUFFREQrJUFFREQrJUFFREQrJUFFDJGkNZK2NcezkvYv8fq5cemmH7FUSVARw7UG2NbH9XNAElRMpDwHFTFEkjodyY8DfwC/AGeAacqIhkdsW9JtwC5gdfPzOeBOYC9wEvgNmAGeAh4AVgGfA4+NSsuqiKVKgooYoqbT9X7b05JmgXeA9ZQeewcpCecw8Amw2fYPkh4CNtre2vRDuzjnStJa2z81x69TnvZ/d3lXFbE8JrZZbEQlX9j+DqAZa7CO0qJpGjhQWryxAjh1mevvlvQ0cC2wFjgGJEHFWEqCilhev19yfIHyGRRwzPbMlS6UtBJ4Gbjd9glJzwMrhxVoRG0pkogYrnPAdYuccxyYkjQDZYyDpPVdru8kozPNHKItgw42ok3yDSpiiGz/KOmgpKOUQofTXc45L2kL8KKk6ymfy92U7bu9wCuSOkUSr1I6aH9DGc8RMbZSJBEREa2ULb6IiGilJKiIiGilJKiIiGilJKiIiGilJKiIiGilJKiIiGilJKiIiGilvwD8xUB6JsOhewAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "nodes = [1, 2, 3]\n", "graph = nx.from_edgelist([(1, 2), (2, 3)])\n", @@ -171,7 +224,269 @@ "if not os.path.exists('graph-state.json'):\n", " run_graph_state(qc, nodes, graph)\n", " \n", - "plot_graph_state()" + "print('Noiseless')\n", + "plot_graph_state_parity()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running graph state on QC1\n", + "Running graph state on QC2\n", + "Running graph state on QC3\n", + "Noisey\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "qc_noisy = get_qc('9q-square-qvm',noisy=True)\n", + "\n", + "\n", + "run_graph_state(qc_noisy, nodes, graph)\n", + "\n", + "print('Noisey')\n", + "plot_graph_state_parity()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Tomography of the graph state\n", + "\n", + "An old school way of determining the quality of quantum hardware is to produce a state and then do tomography on state and compare it to the ideal state. So lets do that on our graph state, using the tomography tools in forest benchmarking." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "from forest.benchmarking.tomography import generate_state_tomography_experiment, linear_inv_state_estimate\n", + "from forest.benchmarking.observable_estimation import estimate_observables\n", + "from forest.benchmarking.operator_tools.project_state_matrix import project_state_matrix_to_physical" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "prep_prog = create_graph_state(graph)\n", + "qubits = list(prep_prog.get_qubits())\n", + "num_shots = 4000" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# set up the experiment\n", + "experiment = generate_state_tomography_experiment(program=prep_prog, qubits=qubits)\n", + "\n", + "# get noiseless results\n", + "results = list(estimate_observables(qc, experiment, num_shots=num_shots))\n", + "\n", + "# simple estimator\n", + "rho = linear_inv_state_estimate(results, qubits=qubits)\n", + "rho_est = project_state_matrix_to_physical(rho)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from forest.benchmarking.superoperator_tools import *\n", + "from forest.benchmarking.plotting.state_process import plot_pauli_bar_rep_of_state\n", + "\n", + "# vec(rho) then convert it to the pauli rep\n", + "n_qubits = 3\n", + "pl_basis = n_qubit_pauli_basis(n_qubits)\n", + "c2p = computational2pauli_basis_matrix(2**n_qubits)\n", + "rho_pauli = np.real(c2p @ vec(rho_est)) \n", + "\n", + "# plot\n", + "f, (ax1) = plt.subplots(1, 1, figsize=(17, 3.2))\n", + "plot_pauli_bar_rep_of_state(rho_pauli.flatten(), ax1, pl_basis.labels, 'Noiseless three qubit graph state')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# get noisey results\n", + "results_noisy = list(estimate_observables(qc_noisy, experiment, num_shots=num_shots))\n", + "\n", + "# simple estimator\n", + "rho_noisy = linear_inv_state_estimate(results_noisy, qubits=qubits)\n", + "rho_noisy_est = project_state_matrix_to_physical(rho_noisy)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "rho_pauli_noisy = np.real(c2p @ vec(rho_noisy_est)) \n", + "\n", + "f, (ax2) = plt.subplots(1, 1, figsize=(17, 3.2))\n", + "plot_pauli_bar_rep_of_state(rho_pauli_noisy.flatten(), ax2, pl_basis.labels, 'Noisey three qubit graph state')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The fidelity between the noiseless and noisy states is 0.883 \n", + "\n", + "The Trace distance between the noiseless and noisy states is 0.169\n" + ] + } + ], + "source": [ + "from forest.benchmarking.distance_measures import fidelity, trace_distance\n", + "\n", + "print('The fidelity between the noiseless and noisy states is', np.round(np.real(fidelity(rho,rho_noisy)),3),'\\n')\n", + "\n", + "print('The Trace distance between the noiseless and noisy states is', np.round(np.real(trace_distance(rho,rho_noisy)),3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Direct Fidelity estimation of the graph state\n", + "\n", + "Two common problems with state tomography are\n", + "1. the ways of visuzlizing the state are not helpful for large numbers of qubits\n", + "2. most of the time you care about the fidelity of the state to a target state.\n", + "\n", + "Here we use the direct fidelity estimation method in forest benchmarking to directly measure the fidelity of the graph state.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "from pyquil.api import get_benchmarker\n", + "from forest.benchmarking.direct_fidelity_estimation import ( generate_exhaustive_state_dfe_experiment, \n", + " acquire_dfe_data,\n", + " estimate_dfe )" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "bm = get_benchmarker()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The estimated fidelity is 1.0\n" + ] + } + ], + "source": [ + "# state dfe on a perfect quantum computer\n", + "state_exp = generate_exhaustive_state_dfe_experiment(prep_prog, qubits, bm)\n", + "\n", + "results = acquire_dfe_data(qc, state_exp, num_shots=num_shots)\n", + "\n", + "fid_est, fid_std_err = estimate_dfe(results, 'state')\n", + "\n", + "print('The estimated fidelity is ', fid_est)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The estimated fidelity is 0.9853584875887785\n" + ] + } + ], + "source": [ + "# state dfe on a perfect quantum computer\n", + "results_noisy = acquire_dfe_data(qc_noisy, state_exp, num_shots=num_shots)\n", + "\n", + "fid_est_noisy, fid_std_err_noisy = estimate_dfe(results_noisy, 'state')\n", + "\n", + "print('The estimated fidelity is ', fid_est_noisy)" ] }, { @@ -183,9 +498,22 @@ } ], "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", - "pygments_lexer": "ipython3" + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" } }, "nbformat": 4, diff --git a/forest/benchmarking/entangled_states.py b/forest/benchmarking/entangled_states.py index cafe1eda..5beae31a 100644 --- a/forest/benchmarking/entangled_states.py +++ b/forest/benchmarking/entangled_states.py @@ -49,7 +49,7 @@ def ghz_state_statistics(bitstrings): } -def create_graph_state(graph: nx.Graph, use_pragmas=True): +def create_graph_state(graph: nx.Graph, use_pragmas=False): """Write a program to create a graph state according to the specified graph A graph state involves Hadamarding all your qubits and then applying a CZ for each