{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Project 1: Depolarizing channel\n", "# Solution" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Imports\n", "import numpy as np\n", "from qiskit import QuantumRegister, QuantumCircuit, Aer, execute\n", "from qiskit.ignis.verification.tomography import state_tomography_circuits, StateTomographyFitter\n", "import matplotlib.pyplot as plt\n", "from qiskit.quantum_info import partial_trace\n", "from qiskit.quantum_info.states import DensityMatrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 1\n", "\n", "Create a function that returns a quantum circuit implementing a depolarizing channels with parameter $p$ on a specified qubit `system`, using three ancillary qubits `ancillae = [a1, a2, a3]`." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def depolarizing_channel(q, p, system, ancillae):\n", " \"\"\"Returns a QuantumCircuit implementing depolarizing channel on q[system]\n", " \n", " Args:\n", " q (QuantumRegister): the register to use for the circuit\n", " p (float): the probability for the channel between 0 and 1\n", " system (int): index of the system qubit\n", " ancillae (list): list of indices for the ancillary qubits\n", " \n", " Returns:\n", " A QuantumCircuit object\n", " \"\"\"\n", " \n", " dc = QuantumCircuit(q)\n", " \n", " # \n", " theta = 1/2 * np.arccos(1-2*p)\n", " \n", " #\n", " dc.ry(theta, q[ancillae[0]])\n", " dc.ry(theta, q[ancillae[1]])\n", " dc.ry(theta, q[ancillae[2]])\n", "\n", " dc.cx(q[ancillae[0]], q[system])\n", " dc.cy(q[ancillae[1]], q[system])\n", " dc.cz(q[ancillae[2]], q[system])\n", "\n", " return dc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 2\n", "Write a circuit that prepares the `system` qubit in an initial state that has non-zero populations and coherences (both real and imaginary parts)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": {}, "execution_count": 5 } ], "source": [ "# We create the quantum circuit\n", "q = QuantumRegister(5, name='q')\n", "\n", "# Index of the system qubit\n", "system = 2\n", "\n", "# Indices of the ancillary qubits\n", "ancillae = [1, 3, 4]\n", "\n", "# Prepare the qubit in a state that has coherence and different populations \n", "prepare_state = QuantumCircuit(q)\n", "prepare_state.u(np.pi/4, np.pi/4, 0, q[system])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 3\n", "\n", "For different values of $p \\in [0, 1]$: \n", "1. Concatenate `prepare_state` and `depolarizing_channel` in a circuit and create the corresponding `tomography_circuits` (check the [preliminaries](preliminaries.html) for help with the tomography).\n", "2. Execute the `tomography_circuits` in the simulator and collect the rsults" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# For example, let's consider 10 equally spaced values of p\n", "p_values = np.linspace(0, 1, 10)\n", "\n", "# Here we will create a list of results for each different value of p\n", "tomography_circuits = []\n", "\n", "for p in p_values:\n", " circ = prepare_state + depolarizing_channel(q, p, system, ancillae)\n", " tomography_circuits.append(state_tomography_circuits(circ, q[system]))\n", "\n", "tomography_results = []\n", "for tomo_circ in tomography_circuits:\n", " job = execute(tomo_circ, Aer.get_backend('qasm_simulator'), shots=8192)\n", " tomography_results.append(job.result())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Task 4\n", "1. Process the results of the simulation by performing the tomographic reconstruction.\n", "2. Find analytically what is the density matrix of the system qubit after the depolarizing channel as a function of $p$.\n", "3. Plot the values of $\\rho_{11}$, $\\rho_{22}$, $\\Re \\rho_{12}$, $\\Im \\rho_{12}$ as functions of $p$ and compare them to the analytical prediction.\n", "\n", "Up to the statistical errors due to the finite number of shots, the simulated points should match the analytical prediction." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "output_type": "display_data", "data": { "text/plain": "
", "image/svg+xml": "\n\n\n \n \n \n \n 2021-05-10T15:20:34.006910\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAEYCAYAAAAaryJBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABFf0lEQVR4nO3deXxcdbn48c8zM0kme7N0T9KkdG8CLdQWpEKRxVp25LJYkUUviBfccEPwyg/hCl4VRRBBVgFZBSxQRRBx4UJLS6FJ971N96RJm32ZeX5/nMlkMs2eSWaSPO++8urMOWfOPGcmmWfO9/s930dUFWOMMWaguaIdgDHGmOHJEpAxxpiosARkjDEmKiwBGWOMiQpLQMYYY6LCEpAxxpiosARkjDEmKiwBGWOMiQpLQKbPRGS7iJwRK/uJpIGKKfR5YvF16A4RuU1Ebot2HJEkIj8RkW9EO46BJCLLRWRm2LJ+eW9jLgGJyHwR+T8ROSwih0TkXRH5RGBdmz/MwP1GEckO28cqEVERyQ/cVxGZFLbNbSLyVNi+OvyjF5F3RKRCRBLClleH/PhFpC7k/uL29isiV4lIsYjUisg+EXlAREaExXJARJJDln1ZRN7pJL7tgeeuEpHKwGv4FRGJufd4qAp5D0J/J8b1w3MMuuTUEyKyTURyIrSv+YHPEglb/jcR+V4Xjx0JfBF4sAfPN05ESsOWTRaR+tDPm77o63OISKaIvCwiNSKyQ0Q+H7bJz4Dbe7uPnrx/MfXhJCJpwGvAr4FMYDzw/4CGTh62Dbg8ZB9FQFKE48oHPgUocF7oOlVNafkBdgLnhix7up193QTcDXwHSAdOBCYAb4pIfMimbuDrPQz1XFVNDezvLuB7wCM93Ifpm9D3P0VV90Q7oEHoVcL+zvpgNvCRHj3n2Czgwy4eexWwVFXrevB8i4C/hC27H/igB/vo7+e4H2gERgOLgQfCzniWAKeJyJhe7qPb719MJSBgCoCqPqOqPlWtU9W/qurqTh7zJM63lBZXAr+PcFxfBN4HHg/sv1cCCfb/ATeq6l9UtUlVtwOXAPnAF0I2/1/g26FnRt2lqodVdQlwKXCliBQGnn+ciPxRRA4GvqV8LSS27SJys4isDZzpPSYi3pD10wNngZUiskZEevUBISK5IvJSIIZyEbkvbJNZIrI68K31ubAYvi8iWwJneWtF5MKw+L/dyWM7XN/Z6xIpEnYWLiKPi8gdPdzHk0Ae8Grg7Oq7geUdvjeB4/5O4LhrROQRERktIn8OvI5viUhGyPYReZ8D+/qFiNwduP2hiJwpIlki0hz63rRjCXBBb583zGxgVVhc+ThfcFe194AQnwX+EXhMgogcERGftJ7d+gJnHaFnpIuApSHPdRlQCfytq0AH6DmSgc8BP1TValX9N87rfUXLNqpaD6wEPtPLfXT7/Yu1BLQR8InIEyLy2dA/jE68D6QF/nDcwGVARE51Q3wReDrw8xkRGd3L/XwS8AIvhS5U1WqcX6gzQxavAN4Bvt3L50JVlwOlwKfEaYp7FfgY58zydOAbIhL6S7YY55fuGJwvA7cCiEhc4LF/BUYBNwJPi8jUnsQTeH9eA3bgJNzxwLNhm10CLAQKgGNxvoW22IJzJpqOk8ifEpGx3Xxsu+u7+brEBFW9grZn2T/t5nvzOZzfrSnAucCfgR8AI3E+A74GkXufQxQBqwPv+3SgOLBsU+BDriP/wPkikh6+QkReCyTH9n5ea2dfszj6TGc2UKqqZd2IfwOAqjbgtEj8LaTFYwtwlqq+FYgtDjgFeDNwPw2nKetbXTwPA/UcOL8Dzaq6MWTZx8DMsO3WAcf1ch8dvn/hYioBqeoRYD5OU9fvgIMisqQbH/gtZ0Fn4rxwuyMVk4jMx2nSel5VV+L8QoS3mXZXNlCmqs3trNsbWB/qv4EbxWmL7q09ON/2PgGMVNXbVbVRVbfivMaXhWx7n6ruUtVDwJ20Nm2eCKQAdwUe+zZOIrmcnpkLjAO+o6o1qlof+PYU6l5V3ROI4VWcDxAAVPWFwDq/qj4HbArss8vHdrK+O69LT7wS8oH4Si/30RPdeW9+rar7VXU38C9gmaquCiSBl3E+kLu7r54owkk6k4FqVd0XWLYaQETuFpF/iciTgQ9WAFS1Cefb/GfDd6iq56jqiA5+zgndNrDPmRx9pnM8gaQUOBv8PxH5h4i8HfaFZgRQ1c7xtJwFHNNyP+AU4GNVbXnMj4FHVLVNf00X+vs5UoAjYcsOA6lhy6pwjr/H++js/QsXUwkIQFXXqepVqpoDFOJ8YP2yi4c9iZMUrqL95jcfEBe2LA5o6kZIVwJ/Dfm29Ad63wxXBmSLiKeddWMD64NUtQTnA+D7vXw+cL7VH8JJouNCvzHifAsOTe67Qm7vwHntCfy/S1X9YevH9zCWXGBHBwm4xb6Q27U4v+wAiMgXReSjkPgLaZu0O3xsJ+u787r0xAUhH4gX9HIfPdGd92Z/yO26du63vE6Rep8RZ2BQFrCekA9VWs+KjgPGq+qnAttcHLaL1YFt+2J64P91Ycvn0tpfUgbMV9VTcT47vhSyXQVtP5jDj2OvqlaErA82jYnILOAM4J4extzfz1ENpIUtS6NtogXnuCv7sI9uvX8xl4BCqep6nH6Xwi6224EzGGERYc1bATtxmnxCFeD8cXVIRBJxmm1OFWe02j7gm8BxgT+gnnoPZ0DFRWHPk4LzbaG9NtwfAf9J7z4EPhF43L9xksu2sG+Mqaq6KOQhuSG383DOngj8nyttR9Tl0fMzzV1AXgcJuFMiMgHnzOQGIEtVRwAlgHT2uG7G1NXrEgm1tB0c01kHb2fCO9Mj9d5Eel8TcZq5GnE+iEoCy0/EaTb/JE5THzgd6ieHPf6skPVBgb6r6g5+/hy2+WigLvQLTyAxnorTT0Ggr7kl4aYCa0Iev5pAv3RAaHI4jrZnJtC2b2YBzmfOzsDnxreBz4lIVwMf+vs5NgIeEZkcsuw42h43OMn74z7so933L1xMJSARmSYiN0lgCJ+I5OKc/r/fjYd/Cfi0qta0s+454FYRyRERV6BD71zgxbDt4kTE2/KD863MB8zAaa6ZhfPG/Iu2Ax+6RVUP4/Rd/FpEFopIXKBD9Hmcvpon23nM5kD83e4YF5E0ETkHp3/lKVUtBpYDVSLyPRFJFBG3iBQGklSL/wq8RpnALYHnBViG8wH63UDMC3Bev/D+m64sx2lqvEtEkgOvc/gHT0eScT58DwaO8Wq6+GLSg5i6el0i4SPg84H9L8T5EOyN/Tgf7i0i9d5Eel8KZAS+XBUCxSKyCOes6J9ABq3NOIdxmokBEKfvdzrOF6e2O1X9rLYdZRj6E97kUwwkiMh/Bt7bKcAzwGuhA5tEZJaILMP5chP64b2UwPsUaAYfCawNrJuG80Hcso8CIEFVW862HsJpPpsV+Pkt8DqBjn1xBqE8HhrsQDxH4PPxJeD2wN/gycD5hHz2BD77TiDQzxSuq3109v6Fi6kEhHMKNw9YJiI1OImnBLipqweq6hZVXdHB6tuB/8N5QSqAnwKLA01coZbiNEm0/FwJPKaqO1V1X8sPcB+wuDff5FX1pzhNPD/D+QNchvMt/PRAJ2RH8Sd3sC7UqyJSFdjfLcAvgKsDz+sDzsH5Rd2G0/TwME6Hfos/4Hxr2YrT13VH4LGNOB9Enw087jfAFwNnqEcJfEv9QTvH7gvsZxLOWWkpzki9LqnqWuDnOGeR+3G+Kb7bncd2sd/uvC5BHR1bN3wd59grcQZ7vNKLfQD8BOfLVKWIfLun701nurOvHhz/CpwziBLgNJwP9/uBzwX6CCppbcZJx2kmbnE28Ebgvem1wN/qJThf3g7hnGl9SNjgFFX9SFXnAT8Ebg5Z9XtgUaAlpAjYoq1DsncDl4jIvJCYl4bsszbsM6MaqFfVg4FNcjn693cgngPgq0AicAAnIV+vqqFnL+cC72jnlxB0to/uv3+qaj/2A7AdOCPacdjP4P0BbgNuC7nvCXyY+XGSmjdk3Szg94HbPwAuD1n3AnDhAMUcH3L7M8Avwtb/D/CNbuxnKbCou8+J0y8V18NY+/05Ao9dBhR29t528fhuv389/gZvjDHdoarNgb6Jrar657B1H4nIfhH5F87Z8M9CVtfSjf6DCJklIj/DaWqvB64Ji7O7Z7vvAH/vzobqnGlO73LD6DwH6pwN9kW33z8JZCwzzInIduDLGrjewJieCvQZoarvhCy7BjhHVS9q/1FmMGjvvY3Ifi0BGWOMiYZYG4RgjDFmmBiyfUDZ2dman58f7TCMMWZQWblyZZmq9mX2lW4bsgkoPz+fFSs6GpVtjDGmPSLS6QX6kWRNcMYYY6LCEpAxxpiosARkjDEmKoZsH1B7mpqaKC0tpb6+s1Ikw4fX6yUnJ4e4uPCJwo0xpv8NqwRUWlpKamoq+fn5iPR1EuXBTVUpLy+ntLSUgoKCaIdjjBmGhlUTXH19PVlZWcM++QCICFlZWXY2aIyJmmGVgIBOk09ZXRk1jW2rOdQ01lBW11Xl3sHJErExJpqGXQLqTKI7kV3Vu6hurAac5LOreheJ7sQoR2aMMUPPsOoD6kpyfDK5KbnsrNqJ1+OlrrmOjIQMRAS/+nGJ5WtjjIkUS0BhkuOTyUrM4mDtQUYmjSTDm0F9cz3ldeVo4F+8K55ETyIJ7gRrxjLGmF6yBBSmprGGQ/WHGJk0kkP1h0j2JJMan0pqfCrgjB5r8jdR11zHkcYjKIogxLvjSXQnEu+O7zIpud1uioqKaG5upqCggCeffJIRI0YMwNEZY0zssDalEC19PrkpuYxKGkVuSi4f7dvGxQ/8mwNVzmgxESfZpCekMyppFKOTRjMycSSJ7kTqmus4WHeQ/bX7OVB7gCMNR2jyNRFe8iIxMZGPPvqIkpISMjMzuf/++6NxuMYYE1WWgELU+erITcklOT4ZcJrjlnzQyMqdh7n3rU0dPk5ESPAkMMI7IpiUshOziXPHUdVUxYG6A+yv3c/B2oNUNVa1eexJJ53E7t27AXjqqaeYO3cus2bN4rrrrsPn67ik+m9+8xsKCwuZMGECv/71ryNw9MYYM7CsCS5EdmJ28PbUW/9MQ7M/eP+pZTt5atlOEjwuNtzx2S735RIXiZ5EEj2tI+h8fh/1PudMan/tfnw+H0v/upRrrrmGkjUlPPfcc/zprT+R5k3jO9/4Dk8//TRf/OIXqWmsoc5XF4zvj3/8I2+++SarVq2irKyMoqIirr/+ejweezuNMYOHfWJ14F/fPY07lq7jr2v2Ud/kxxvn4jMzx3DL2b0qsw6A2+Um2ZVMXV0dn/nkZ9i9ezfTpk/jtNNP44EHHuCDFR9wxvwz8KmP5oZmRo4c2aZZsMW9997L7373O+Li4hg7dixxcXHU1NTwta99jfj4eBYsWMDixYvZunUrd955J4cPH+bFF1+MxMtijDERExNNcCKyUEQ2iMhmEfl+O+vzROTvIrJKRFaLyKL+jmlUmpfUBA8NzX4SPC4amv2kJngYlert875b+oB27NgBCk/87gmS45K5+qqrWbN6DctWLOPV917lqm9dxY6qHaTEpdDob6S+uZ7GxkY+/vhjpkyZAsDevXvJyspiyZIlXHzxxfzud79jyZIlAEycOJFHHnmkz/EaY0x/iHoCEhE3cD/wWWAGcLmIzAjb7FbgeVWdDVwG/GYgYiurbmDxvAm8/NWTWTxvAgerGyK6/6SkJO69915+/vOfc+qpp/Liiy9y4MAB0hPScdW52Lx1M9mJ2YxPGU9yXDINvgbe/fBdjhw5wvI1y6moq+B73/8eN954I6WlpeTmOmdJbrc7onEaY0x/iIUmuLnAZlXdCiAizwLnA2tDtlEgLXA7HdgzEIE9eMWc4O07Lijsl+eYPXs2xx57LB9//DF33HEHZ511Fs2+ZtSt/O8v/zc4FDw5Ppl4dzw71u9g8eLF3HjNjVTXVLPovEVccMUFvPCHFyjZUsLE6RNp9jX3S6zGGBNJsZCAxgO7Qu6XAvPCtrkN+KuI3AgkA2e0tyMRuRa4FiAvLy/igUZKdXV1m/uvvvpq8PY5F54T7PNJjk9u0weUHJ/MRx99xDnnnMOll17aZh9XX341/3XDf/GPv/6DTy/8NPtr9nOo/BB33X4XH374IXf+z53c8oNbBuT4jDGmO2IhAXXH5cDjqvpzETkJeFJEClXVH7qRqj4EPAQwZ84cbWc/Ma+9oeC5KbnU+epIxklA119//VGPS05O5vHHHm+zbHTyaB596FHqffXUNdexv3Y/AB7x4PV48br73p9ljDG9FQsJaDeQG3I/J7As1JeAhQCq+p6IeIFs4MCARDiAQoeCt0iOTyYZJyG98847Pdpfy8i75Ljk4LJmfzN1zXUcqj/EkcYj3PvhvYxJHsPM7JlMGTGFOHccj5Y8SmFWIXPHzg0+bvne5ZSUl3BN4TW9OzhjjAkR9UEIwAfAZBEpEJF4nEEGS8K22QmcDiAi0wEvcHBAoxxCPC4PqfGpjEwaSVp8GjfOvpFTck5hb/VeHi5+mHs/vJdNFZu48e0beWXTK/jVz/K9y/n2P75NYVb/9IUZY4afqJ8BqWqziNwAvAG4gUdVdY2I3A6sUNUlwE3A70TkmzgDEq7S8PltTK+JCGOSxzAmeQxnTHC61/zq57Utr3Hnsjt5efPLrC1fy1kTzqKioYLd1bsZlzzOJmI1xvRJ1BMQgKouBZaGLfvvkNtrgZMHOq7hzCUuzpt0HjurdvLg6ge57tjr+MpxX2FL5Rbe3/M+e2qcgYjxrnimZU5jZvbMdpsPjTGmIzGRgExsWr53Oc9veJ7rjr2O5zc8z9wxc5k7di5TM6cGt6lvrmf9ofW8sf0NyuvKERFS4lKYkTWDGVkzgrOIG2NMOEtApl0tfT4/O/VnzB07l7lj5ra538Lr8TJr1CxmjZoVXFbVWMXa8rW8uPFFqpucIeeZ3kxmZs1kWuY0vJ7uj76zwRDGDF2WgEy7SspL2iSbuWPn8rNTf0ZJeUmbZNCe1PhU5o2dx7yxrZdzldeVs6Z8Db9f+3safA2oKuNTxlOYXcgxI47B42r/V7Ewq7BN4gtNjMaYwU2Gal/+nDlzdMWKFW2WrVu3junTez+Z6FAUrddEVdlbs5eSshK2VG6hWZsRhPz0fAqzCslLywuWQG9JOpdMvYTnNzx/1FmYMSZyRGSlqs7pesu+szMgExUiwriUcYxLGRdc5lc/2w9vZ3XZal7b+hqK4hEPkzMms6hgUXAwhCUfY4YGS0BRkJKSctR0PMYZeTdxxEQmjpgYXNbka+KVza/w8uaXOX7U8Tyx5gkO1h7kzPwzKcwqZIR3RPQCNsb0iSWgrlTtgxevhosfh9TR0Y5m2Fl1YBW/XvVrfv3pXwf7gG565yamZExh++HtVDZUAk6/04ysGczMmklSXFJ0gzbGdEsszIQQ2/7xU9j5Pvzj7ojudvv27UybNo2rrrqKKVOmsHjxYt566y1OPvlkJk+ezPLlyzt87HAqx93eYIifL/g5Df4GvjDjC9ww+wZumH0DF0y6gGZ/M8+sf8ZJWKt+zbPrn6WkrIRGX2OUj8IY0x4bhNCRO0ZBczv1fzwJcGvfpqBLSUmhpKSESZMmsWrVKmbOnMknPvEJjjvuOB555BGWLFnCY489xiuvvHLUY//4xz/y1FNP8fzzzwfLce/bt6/X5biH8sCMg7UHKSkrYWPFRpr8TQDBkXcT0yfidlndJGPC2SCEWPD11fDGrbD+NWiuA08iTD8HzrozYk9RUFBAUVERADNnzuT0009HRCgqKmL79u3tPsbKcXffyKSRnJZ3GqflnQY4I+9Kq0tZU7aGN3e8iV/9uMRFQXoBhVmF5KTmdDi9kF2PZEzkWQLqSOoYSEgFXwN4vM7/CWkR7QdKSEgI3na5XMH7LpeL5uaji8o1NTV1Wo773HPP5dJLL2Xx4sXBctwXX3xxxOId7ESE3NRcclNbJ1/3+X1sO7yNFftX8MqWVwCIc8UxNWMqhdmFjEwaCdj1SMb0B0tAnak5ACdcDXOuhhWPQfX+qIazdu1ajhw5wtatW8nPz+fmm2/ma1/7GqWlpcEzKSvH3TNul5tJGZOYlDEpuKzR18jGio38beffKKsrAyDRk8jVhVfzrXe+xWXTLrPrkYyJAEtAnbns6dbb5/wienEErFq1isWLF3P55ZdTU1PDRRddxLXXXsuTTz5JaWkps2bNwu/3d70j06l4dzyF2YUUZreWnqhtqmVt+VpmZM3gwdUPcvyo49lQsQGPy8P0rOkkehKjGLExg5MloChouQaopKQkuOzxxx8P3s7Pz2+zrkVH5bgvuugibrjhBl5//XXOPfdcAMrLy7nllltYtWoVP/nJT7j55pv74UiGj6S4JPzqZ/2h9cHJWcclj6O2uZan1z1NXXMdAKOTRlOYXcjkjMnEueKiHLUxsc0S0CDSWTnuxx57rM2yrKwsfvvb3w5UaENeZ5Ozfrnoy4AzyGF/7X7WlK3hn6X/pNnv9OPlpeVRmFVIfnp+cHohY4wloEGlp+W4TeR0Z3LW0MJ+p084HXCmF9pVtYuSshL+vP3P+NWPW9wcM+IYirKLGJs81gr7mWHLEpAx3dDeUOu5Y+d2OQjBJS4mpE1gQtqE4LJmfzNbKrfw3p732FuzF3D6naZlTmNm1kyyErMiG7wxMcoSkDEDzOPyMDVz6lGF/TZUbOAv2/9CRX0FilphPzPkWQIyJgZ4PV6OG3kcx408LrisvcJ+Gys28smxn+SiKReR4HauG7MLYs1gZQnImBjVXmG/t7a/xQ/f/SHrDq1jVNIodlfv5u2db/PdT3yXZn9zh4X9jIlF9ttqzCByRv4ZpCWkBQv0/bv03/zopB/hcXn43erfdVrYz5hYYwnImEFm7ti5XDL1kmCBvkUTF7VZ31lhv8LsQkYnjbaRdyYmWAIyZpBZvnc5z294PnhB7NwxbUfjdVTYb1PlJv5Z+k/21zpTSiV6EoMj7zK8GQN+HMZYAuqAzX5sYlFnF8R2NiQ8zh0XHFHXoq65jvWH1vPa1teChf3S4tOC2yXHJXe4P/v7MJFgjcMdaJn9ePlepzBcyx9+YVZhF4/snuFUVM5ETmcXxPZUoieR2aNmc8WMK7hx9o3cOPtGLph0AU3+Jp5d/2ywsN8z65+h+GBxm8J+/f33YYYHK0jXiZY/qkumXhLR2Y8jXVSuL4ZyQToTGaGF/Rr9ThLKSclBVbln5T1cOu1Smx18CBl2BelEZCHwK8ANPKyqd7WzzSXAbYACH6vq5/s7rvDO3kj9cXWnqNwFF1zAV7/61TZF5oyJhs4K+00cMTE4O3h5fTm7juzqtLCfMaGinoBExA3cD5wJlAIfiMgSVV0bss1k4GbgZFWtEJFRAxFbV529vdHdonJ+v/+oInPGxIKWwn57q/ey7fA2rjv2Op5b/xx1TXVHFfabkjGFwuxCRiUNyJ+sGWSinoCAucBmVd0KICLPAucDa0O2+U/gflWtAFDVA/0dVG87e7vS3aJyVmTOxLLO/j4unHwh0FrY7+2db3Ow7iCqSlJcEjMyZzAzeybpCelRPgoTbbGQgMYDu0LulwLzwraZAiAi7+I0092mqn8J35GIXAtcC5CXl9enoLoz+3FvdLeoXE5OjhWZMzGrO38f7RX2q2mqYW35Wl7Z/AqHGw4jIoxIGMHMrJlMy5xGUlxSVI7HREfUByGIyMXAQlX9cuD+FcA8Vb0hZJvXgCbgEiAH+CdQpKqVHe03EoMQ+sM3vvENTjrppKOKytXU1HDDDTfg9XqZP38+F1xwQZv7/dUEFwuviRneKuorWFO+hvWH1lPXXIeqMiZ5DDOzZzJlxBTi3FbYbyANt0EIu4HckPs5gWWhSoFlqtoEbBORjcBk4IOBCTFyelJULvy+MUNRhjeD+ePnM3/8fODown5NviZEhLzUPIqyi6yw3xASCwnoA2CyiBTgJJ7LgPARbq8AlwOPiUg2TpPc1oEMMlKsqJwxneuosN/OIzspKS9h6balKMrqg6uZNXIWF0y+gHHJ4xARuxh2kIl6AlLVZhG5AXgDp3/nUVVdIyK3AytUdUlg3VkishbwAd9R1fLoRW2MGUgucZGfnk9+en5w2Xu73+Omf9xEXXMdCZ4E9lTv4a0db3HtsddSVldGdmJ29AI23RL1BASgqkuBpWHL/jvktgLfCvwYYwwnjT+JX572y+DF4u/ufpd7FtxDSnwKb2x/g/I65ztqSnwKM7NmWmG/GBQTCcgYY3oj/GLx+TlOP9KsUbOC27RX2C/Tmxkceef1eKMRusESkDFmEOvOxeLtFfYrrytnTfkafr/29zT4GlBVxqWMozC7kEkjJvWosJ9NzNp7loCMMYNSXy4Wz0rM4pScUzgl5xTAGXm3t2YvJWUl/H3n32nWZlziYkLahC4L+7VMzNryvKFxmc5ZAjLGDEqRvFhcRBiXMo5xKeOCy/zqZ/uR7RSXFfP6ttdRVdwuN5NHtC3s1/K8/TFx8VBnCcgYMyi117w1d2zf52ts4RIXE9MnMjE9pLCfv4lNFW0L+3ndXqZlTuPcY86N+MTFQ50loA6UP/ww3sIikk9sbTeueX8Z9SXFZH35y1GMzBgTLXGu9gv7vbTxJV7Y8ALHjzqeJ9Y8QUV9BQsLFnZZ2G+4s8uJO+AtLGL3N79JzfvLACf57P7mN/EWFkVk/1aQzpihofhgMQ+ufpD7Tr+PJz77BPeffj9vbH+DNWVreG7Dc9y36j7uW3Vfu4X9hjs7A+pA8onzGH/PPez+5jfJuPwyKp55lvH33NPmjKi3/vjHP/Lmm2+yatWqYEG666+/PioF6YwxfdNeX9QvFvziqFFwB2sPsqZ8DY+VPNamsF9hdiET0yfidg2/We/tE68TySfOI+Pyyyj7zQNkf/X6iCQfaL8g3datW7n77rs5fPgwL774Ilu3buXOO+8M3jfGxKbu9kWNTBrJgqQFLMhdALQt7Pfmjjfxqx+XuChIL6Awq3BYFPazBNSJmveXUfHMs2R/9XoqnnmWpLnz+pyEOipIN2XKFB555BEuvvhiACZOnNjmvjFmaGkp7Jeb2joXs8/vY9vhbaw8sJI/bfkTina7sN9f7riOkcd/khMWXRlctnLpExz88P9YeOuD/XosvWUJqAMtfT4tzW5Jc+e1ud9bHRWkM8YYt8vNpIxJTMqYFFwWXtgPINGTyIysGczMai3sN/L4T+K79W5WAicsupKVS5/Ad+vdjLzje9E4lG6xBNSB+pLiNsmmpU+ovqS4Twmoo4J0xhjTnvYK+9U21QYL+1U1VgGQnp+O50eLybntbpb++y2y/7IS9x3fa3NGFGssAXWgvaHWySf2vQnuo48+4pxzzjmqIF15eTm33HILq1at4ic/+QnXXnttm/s333xzn57XGDN0JMUlMWfMHOaMmYM2N9OweTOHPlzOvq2VrD8mlfFvraBs4RwWxXDyAUtAA66jgnRZWVn89re/bbMs/L4xZnhTv5/GHTuoLymhcdt2QMHlJmHSJEaeejp70/1Meul1yhbOIfsvK1k5/wk7AzKtrCCdMaY7VJXmffuoKy6mYeMm1NeMiBA/YQLeoiLSzj4bcbVeyrly6RP4fvhT3Hd8j0WLrmTl/Cfa9AnFIktAxhgTA5orKqgvKaF+7Tq0oR5VJW70GLxFhaQuWIDEx3f6+IMf/h8jQ/p8Tlh0JSsDy7EEZIwxBsBfU0PdmjXUl6zBV3UEEcE9YgTewkIyv3gFrsTEHu+zvaHWJyy6MmaTDwzDBKSqQ/7iru5yCs0aY/qTv7GRhg0bqCsupvmgM4zalZSEd8YMRnzuItzp6VGOMHqGVQLyer2Ul5eTlZU17JOQqlJeXo7Xa9UgjemL0ImL1eejYcsWDv9pCfVr1pB0/GwkLo6EqVNJPeMM4kZ1fCHpcDSsElBOTg6lpaUcDHwLGe68Xi85OTnRDsOYQUlVadq1C191Dbu+8hVSzzyT+Lw81O+n8oUXGP+rX5Fy0onRDjOmDasEFBcXR0FBQbTDMMYMQk0HDjiDBNavR5uaAIjPySVt0WdJmjuXPTfdRPzll1H57LPk3HtvxOaOHMqGVQIyxpju8B0+TF1JCfVr16J1dQC4s7NJLCoia/58XOEj0qbQLxMXD3WWgIwxg1Kkikb6a2upX7eO+pISmisrAXCnpZNYOJPMz38eV3LXBeX6Y+Li4cASkDFmUGopGtkyZ2PoBMId0cZG6jduor6kmKZ9+0AElzcR74zppJ13Hp6MjB7H0V8TFw8HMlSH4s6ZM0dXrFgR7TCMMf2o5cO/vaKR6vfTuHUrdcUlNO7cAYB4PCRMmUJiURGe0aMjMho2UmdisUJEVqrqnAF5LktAxpjB7OC991L2mwfI+MJikubMcaat8fsQl4v4ggISi4qIy8trM22N6dhAJiBrgjPGDDrNZWXUFRdT9eZbHFm6lMQTTqDypZdJmDKV7K9ej1h5+0EhJt4lEVkI/ApwAw+r6l0dbPc54EXgE6pqpzfGDAO+qipn+POaNfiqq0EET2YWiFD19tvk/va3bfqA4vPyrO9lkIh6AhIRN3A/cCZQCnwgIktUdW3YdqnA14FlAx+lMWYg+OvrnRFpxSU0HyoHwJ2ainfmTEZceinu1NTgtuUPP0zOL38Z8aKRZuBEPQEBc4HNqroVQESeBc4H1oZt92PgbuA7AxueMaY/aFMTDZs3U1dcTNOePc6ItIQEEqZNI+3sRXiysjp9fH8VjTQDJxYS0HhgV8j9UqDNb5CIHA/kqurrItJhAhKRa4FrAfLy8vohVGMM9HzkV7CQWnExDdu2gSri9pAweTIpJ5+MZ9y4YT8/43AUCwmoUyLiAn4BXNXVtqr6EPAQOKPg+jcyY4avzq7B6aiQWlxeHolFRaSdc46NSDNAbCSg3UBuyP2cwLIWqUAh8E7gG9IYYImInGcDEYyJjpb+lt3f/CbpF5xP5QsvkvqZz1Cz7H1qlr3fo0JqZviKhQT0ATBZRApwEs9lwOdbVqrqYSC75b6IvAN825KPMQPPV11D/dpAIbUjh4mfWMChxx4n/cILGHPLD3AlJUU7RDOIRD0BqWqziNwAvIEzDPtRVV0jIrcDK1R1SXQjNGZ48jc20rB+vVNIrawMaFtIrX7deiqfez44/1nd+RfYAADTI1FPQACquhRYGrbsvzvYdsFAxGTMcKI+Hw2bt1BfUkxjaSkArvh4p5DamWceVUjN5j8zkRATCcgY0z2RmHespZBaXXExjVu2oupHXG4SjplI0ty5pF90UZcj0upLitskG7sGx/SGJSBjBpHezADdtP8A9SXF1G/Y0KaQWuKxRaQtXIi43T2Ow67BMZFgCciYQSR09Fl7M0D7KiupK1lD/dq1+OtqAfCMHOkUUvvUp44upGZMFFkCMmaQST5xXrD6ZvqFF9CwYT21y5ehqq2F1BZ3r5CaMdFkCciYQSC0kFrtyg+pevNNkk6cR9Wbb5Fy+hlkXnlltEM0pscsARkTY9Tvp3HbNupWF7cppOadOhVX+ghq/v3vo2aAdqekWP+LGXR6VJBORNyq6uvHeCLGCtKZwUBVadq9h/qSYho2bwG/D5BAIbVC4iZMaDMibahV3zSxJ2YroorII8CNqlorIqeo6j/7L7S+sQRkYlFLIbWGDRvQxkYA4saNw1tURMIxx1ghNRN1sVwR9b+BR0SkGfgIiNkEZEy0+aqqqF+zhvo1a/DX1KCqeDKzSCwqJPnqq3ElJEQ7RGOiqqcJ6MfABmAi8HzkwzEmNnXV9BVaSM1XWQGAKzmltZBaSkq0QjcmZvU0AX1XVctEJBmnhLY1OpthIfQC0KQ5J1D50svsv+suUk8/nQO/+hWuBC/e6d0rpGaMcfQ0Ad0lIjeqao2IPNMvERkTQ1oKqTUfPEDyKaew6ytfIbGokPq16xh7++2knb3ICqkZ00s9TUA/Ah4N6QP6W8QjMiZK2hRS27QJfIERaRPy8BYVkXb22ZSNH0fZbx4g+6vXk37O2dEO2ZhBzfqAzLDVXFFBfUkJ9WvW4m+oB2gtpHbaaUhcXJvta95fRsUzzwbLDyTNtbnPjOmLbiWgQFlsF/AdVS23PiAz2IQWUvNXVwHgHjECb2EhmVd+EVdiYqePt/IDxkRelwkoUCzuR0AjUC4iv1LVR0Tkun6PzpheaK+Qmjs5OVhIzZ2e3uN9WvkBYyKvywtRRWQbcJKq7hORscD/ADtU9bYBiK/X7ELU4UF9Phq2bKG+uISm3aWoarCQmrew8KhCasaYzsXahajVwAEAVd0rIl/CGYBwW/+FZYwj9PqblkJqlS+9TN3HH5M0exaIK1BI7RPE5VxoI9KMGUS6k4AeAF4Qke+p6mYgD6jt37Ci68CRem54ZhX3fX42o1K90Q5n2GrafwB/YxO7vvIVUs88k/jcHPwNjVS+8ALjf/lLUj55UrRDNMb0QZcJSFV/IyL7gIdF5DggFXhaRP4D+EhVN/V3kAPt3r9t4oPth7j3rU3ccWFRtMMZFnyHD1PXMiItpJBayqfmk1hUxJ7vfpf4yy/j8EsvkXPvvdbvYswQ0NPJSD3ADGA2MAs4TlU/3T+h9U1v+oCm3vpnGpr9Ry1P8LjYcMdnIxXasOevrXWmrSkpwXf4MACu1DQSC2finTGj3UJqB++9N3j9zcivfW2gQzZm2IjZ2bAHk94koANH6rlj6Tr+UrKXxmbF4xImjkzmU5OzSY73kJYYx8SRyeRnJZObmUSc29VP0Q8doYXUmvbtAxFc3kS8M2bgLZyJJyOjy320DIFurwS1MSayYm0QwrAxKs1LaoKHJp+S4HHR6PMzNz+TH54zE4DK2ka2ldXwcWklr63eS7Ov9WxpZGoC+dnJFGQnMy49EZerb53h0e6H6k3dGfX5nEJqxSVtCqklTJlCyoIFeEaP7vEgAbv+xpihyxJQmLLqBhbPm8Dn5+bxh+U7OVhVH1w3Iime2XnxzM5r+61dVTlY3cD2slre3VzGnsp6gmeWIoxL91IQSE4jUxO69SEc7X6o0Mk3Qytvjr/nHiCkkFrxaho2bUb9PsTlJr6ggKTZs0g//zzE1fczRLv+xpihy5rg+pnfr+w5XMf2slq2lVVzsKohuM7tcpGbmUh+djITs5MZkRQfU/1QoU1fh57+A1lXXw3qxx9SSC2xqIiESZOskJoxQ4Q1wQ0hLpeQk5FETkYS8ydnt1nX5PNTWlHHtrJq/vhhJYdrG/nCvDz+tbmMrQdraPYr8R7hzOmj+dF5MwcsZl9VVWCOtDXET5xI2W8eIHn+fJJPnEfCtGm4vDY03RjTd5aAoijO7Qo2zYW65eViNu6vJs4tNDYreyrreeq9HcH1yQme4FlTbmYS3jh3r2Pw19dTv3Yd9SXFNB86BIA7NRXvzELij5lE4yOPBiff9Nc3WPIxxkRMTCQgEVmIM7mpG3hYVe8KW/8tnIlPm4GDwDWquuOoHQ0RZdUNfOHEtv1Q3zpranB9VX0TO8prWbevijfW7KMx0GSnQEZSPAUjkynISiYnIxFPyEg9bWqiYfNm6oqLadqzxxmRlpBAwrRppJ19dptCajXvL2PvD35A8p1381+bPNzzP7Ot898YE1FR7wMSETewETgTKAU+AC5X1bUh25wGLFPVWhG5Hligqpd2tt9Y6QMaSKpKRW0T28pq2HagikMbN5O2fRPJB/YASlJiAqnTpjBu3vGMnVKAu5Nh5C2j4H6yN4mnl+9k8dw8bh5b2+koOGPM4Dfc+oDmAptVdSuAiDwLnA8EE5Cq/j1k+/eBLwxohAOoV8OfQwqp+TZuIre5iVwR4idMIPGyM4gvKAARDlQ1sPVgDf8qr2Hv25sh8OVDRBifkRhsDsxKjueT28fTsLks+BxPLdvJU0CCZzwb+vUVMMYMF7GQgMYDu0LulwKdtfF8CfhzeytE5FrgWoC8vLxIxTeguhr+DIFCasXF1K9dd3QhtQULkPj4dvc9Os3L6DQvJx2T1Wa5z6/sqaxjW1kNr6/eS3l1w9GDIdzCGdNHc9v5AzcYwhgztMVCE9zFwEJV/XLg/hXAPFW9oZ1tvwDcAJyqqg3h60MN5ia4NsOf//AM2dddB34/vqojAHgyM/EWFuKdPr3LQmp9ccvLxTy9bCdxbqHJpxyfN4L5k1pH8nnj3eRnOWdN+VnJJMb3fjCEMSY2DLcmuN1Absj9nMCyNkTkDOAWupF8BquWQmoNWzYHhz8nnXgiCVMmk1hY2KtCan3R1WCIukYf28tr2FZWw983HKC+0Rdcl5YY5ySnkcnkZiQR7+nbRanRnhnCGBN5sZCAPgAmi0gBTuK5DPh86AYiMht4EOdM6cDAhxh56vPRsHkL9SXFNJaWAiBxcXinTcOTlU3j1q3B4c/i9gx48gF48IrWL0F3XFB41PrEeDfTx6YxfWzaUesO1zWxvayGkt2HWbp6L03+wJm2KlkpCcH+pnEjEnF3Y9qiaM8MYYyJvKg3wQGIyCLglzjDsB9V1TtF5HZghaouEZG3gCJgb+AhO1X1vM72GUtNcC2F1OqKi2ncshVVP+Jyk3DMRLxFRcTl5ASn5wmf+yz8/mCnqpTXOHPqbSurYU9lHS25SYAxIdMWjUpNYNoP/xIzM0MYMxzYbNgREM0E1LT/APUlxdRv2IA2NQEQn5NL4rFFxE+ciLg77ivpzSi4ocLvV/YdqWd7WQ1by2o4UNVAbUMz/9x0sM1giNOnj+b/nT/TmuKM6QeWgCKgNwmoNx/+vspK6krWUL+2bSG1xKIiEqZOxdXBiDTTfS2DIeLdQqNPmTMhg0+GDIZI8LjIy0xyBkNkJ5OSEAsty8YMTsNtEELM6GoIdEshtbri4mAhNXdaOomFM8lc/Pl2C6mZvmt3MMSZU4Lr65t87DpUy7ayGt7dXEZNyGCIpHh3sEkvr4/TFhljIsvOgMK0JJ0Rl/wHFX94hvQLL8SVnISIIN5EvNOnd7uQmom+6oZmtpfVsL28hh3ltW36k0YkxgWTU/i0RR2x0XhmqLMzoChKPnEeySedSPmDD5G6cCFZX7qGuNGjox2W6aWUBA+F49MpHH/0KMKWAoMf7qxgycd7aPa3fhkbmZrAxECT3tg0b7DAoI3GMyZyLAGFqXl/GTXvvR8cAt24bbsloCGq0wKDVQ1sK6vhXxsPsvdwPfe9vQlfSGPBU8t28lSgX2rjnYsGOHJjhgZrggsx1IdAm947cKSeO5au442SvTQ0K3FuYfrYNObmZ5IUGPQQ5xJyM5OCpdnTE+OiHLUxPWdNcFFi5Z9NR0aleUlN8NDoUxI8Lhp9fo4dn86t58wIbtPk87PrUC3by2tYsf0QR+qbg+sSPK7WaYuyk0iKtz89Y+wMyJhuuu7JFYxM9bYZjRc6W0Rn6pt87Ch3yrJvK6ulrql1pF5KgpuC7BQKspPIzUwiwWMj9Uz02HVAEWAJyAwWVfVNbC+rZWtZNbsO1dIY0tmUmRRHwcgUCrKSGZ/RvWmLjOkLa4IzZhhJ9cZRlJNOUU7bkXqtBQarWb79ELtX1eELfGGsbWjmrXX7+e7CqRyfl8notITgdE7GDBaWgIyJUSJCZnI8mcmZnDAhs826W15azfbyWl5auZvK2mb2HakPrnMJjB+RyMSRTpmMzOR4S04mJlkCMmYQmXrrn9tcTPvW+gO8tf5Am8lZm31+9lTWs628hlc/3sOh2qbg9vFuZ6TexOwU8rOTSPXaSD0TPdYHZMwg0jIc/K9r9lHf5Mcb5+IzM8dwy9nTuzUzQ0Ozj12HnOq328tqqGpoHamXGOemINsZRp6flWzTFg1T1gdkjGlXy3DwhmY/CR4XDc1+UhM83Z4WKMHjZtKoFCaNSjlqXW1jM9vLatlyoIa/rTvQ5kwrzesJTluUm5lEXDemLTKmK5aAjBlkyqobWDyv7eSskZAU72HGuDRmjGunwGBtE9vKa1hdepjXQwoM1jY08+a6/Xz7rCnMzstgXHpicNoiY7piTXDGmF675aXVPL18F2fNGMUZ08ew53DbAoNjQwoMjky1kXqDgTXBGWNiWvhgiL+uPcBf17YdDOH3K3sDBQbfWLufg1UNwe3dIuRmJpKfnczE7GRGJFndrOHIzoCMMT3W18EQTT4/pRV1weq3h2sbnRUiJHhcTMhKCk5dlNxFgUErkRFZdgZkjIlpfR0MEed2BZvmTgtbV9/kY+ehWrYerOHfm8uoDRmpl5zgCZ415WU50xZZiYzByxKQMaZX+mswhDfOzZTRqUwZnXrUuqr6JnaU17JuXxULf/UvfCE1nEJLZKy9fWG3Cgya6LImOGPMoBTeDJjgEeYWZHHatFEcqWvCH5KcRqV5gwUGx4QUGDRHsyY4Y4zpQngzYKPPz4TMJK45uaDNdqrKgaoGth6s4R8bD7LvcD0tX7xFhPEZicHmwKw+TFtkfVE9ZwnIGDNodacZUEQYneZldJqXk47JarPO51f2VNaxtayG11fvpby6daSex+0iLzMpUMOp6wKD1hfVc9YEZ4wx7Whs9rPzUC3by2rYVlZDVX3rnHreeHdwlN759/27TQmNFqFD0gcTa4Izxpgoi/e4Op22yCkwWMN/fmoib67bz5aD1fj84HEJJ0zI4KazptDY7CfeY4MhOmIJyBhjeigp3sP0sWlMH5vGoqKxVNY1selAdXBIekZSHHsP1/P+1i00+5wLdhXITkkIDiMfN8IKDMZEAhKRhcCvADfwsKreFbY+Afg9cAJQDlyqqtsHOk5jjGlPe31R588a32YbVaW8ppFtZTW8t7Wc3RV1wcEQiDAmrXXaor4UGBxMgyGi3gckIm5gI3AmUAp8AFyuqmtDtvkqcKyqfkVELgMuVNVLO9uv9QEZYwYLv1/ZF5i2aGtZDQeqGiDw2exyCTkZScHklJEU12lyuuv5v3Nayff5e+HdfP+SBT2OZbj1Ac0FNqvqVgAReRY4H1gbss35wG2B2y8C94mIaLSzpzHGRIDLJYwbkci4EYl8clJ2m3XNPj+7AyP1/vTRbipqGoPr4j0u8rKSKchK5nMPvEujT/mx51E+4d7AxtW/Jv/DmpgeDBELCWg8sCvkfikwr6NtVLVZRA4DWUDZgERojDFR4nG7mJCVzISsZJjadl19k4/SgxXs31HCva57SHTVkUAzuzWLKzxvcYXnLdSdAByISuxdiYUEFDEici1wLUBeXl6UozHGmAjxNcPhnVC+Fco3Q205AF5gkieeSRkFcOX3WP3qfUyufJdEaaRO49mQcSqzvnR/dGPvRCwkoN1Absj9nMCy9rYpFREPkI4zGKENVX0IeAicPqB+idYYY/qD3w9Ve50Ec2gLVO0L9gPhcsOIPMg8Bor+A5IyoZ1+oAr/4yRIE353Agm+Rir9XkgdPcAH0n2xkIA+ACaLSAFOorkM+HzYNkuAK4H3gIuBt63/xxgTU6r2wYtXw8WPd/yhrwo1ZU6CKd8MlbtAA3WVRCB1LGQdA1MWOrd7OBLu1PEKKdfAnKthxWMsqN7ft2PqZ1FPQIE+nRuAN3CGYT+qqmtE5HZghaouAR4BnhSRzcAhnCRljDGx4x8/hZ3vwz/uhjN+BOVbnJ+K7eBrHThAcraTZCacDMfmgjuCH8OXPd16+5xfRG6//STqw7D7iw3DNsb0q8ZaOLQVHjoV/M1Hr3d54Pr3IGMCeBIGPr5eGm7DsI0xJjY1N0LlDqe5rHwL1B9uXReXCJkTYfEfYeXjsPEv0FwHnkSYfg6cdWdM97/EAktAxpjhze+Dw7tam8xqDrauc8dBRr7T+Z93IiRmtL+PtX8CXwN4vM7/CWmWfLrBEpAxZnDrbud/1b7Wzv8je1pHmIkL0nMgaxLMvACSR/a485+aA3DC1cHOf2K88z9WWAIyxgxuoZ3/n761tbmscodzdgNOQkkZ7XT+TzoDUseBK4KzVA+yzv9YYQnIGDO4NFQ5Cebh09t2/q94xPlxeeC/ljvXy0RyhJmJOHt3jDGxp6keKra1ns001rSuS0hx+mSueAU+eBQ2/tk6/wcpS0DGmN7rTv9LR3xNULkz0Pm/GeoqWtd5EiCzwOmXmbgAElLb30fJS9b5P4hZAjLG9F5o/0t7fR9+PxzZHTK9TEjnvMvjTC+TNQmOu8yZXqanrPN/ULMLUY0xPXfHKGhuOHq5ywOf+nbb6WXSxjud/1mTnIEAvSy0ZgaGXYhqjIk9dRWtszHPvQ42vQllm0CbwRUHeSfBGbfBuFnO5JnGdMESkDGmVWONM71M+Wbn/6b61nXedOcsZvwJMPNCaKiGsg2B/pdGyJ4MOSdEL3Yz6FgCMmYw6kvnf3OjM0FmS79M/ZHWdfFJzvQy2VNg8mec+x2x/hfTR5aAjBmMuuz8b5leJjCMuaaste/FHQcZBU6iyT/ZObPpDbv40vSRJSBjBpPwzv/Qiy8/dVPrcnFBeq7T+V/4OUjKss5/E3MsARkTy1Sh9lDrHGZzr4VNf4Oyja2d/xM+CWf+GMYURXZ6GWP6mSUgY3qiL30vnak/EkgyW5wZAHxNreuSsgKzMZ8ERZdAQw2UrW/t/M+aBOOOi1wsxgwQS0DG9ERXfS+daaqDQ9tCRpjVtq6LT3Gay8YUwfRzOy9gZp3/ZoiwC1GN6Y6OLrz0JMCtB1rvB6eXaSlgVtl228yJztlM5kRnTjNjYoxdiGpMrPn6anjjVlj/mjPxpTsB8ubBxNPg7//Tup0rrnV6mdy5HRcwM8ZYAjKmXapQfaC18//wbijf5CQfl8fpe4lPhdlf6F0BM2OMJSAzSPRX539dRWsp5sodIfVlBFJGOs1lE09z5jPbX+LMAhDa95IyKnKxGDPMWB+QGRxe+xasfMzpfO9p539Ddev0MhXb2vbleEc4zWVZxzhNZ+64iIZtzGBjfUDGtOjowsvwzv/mhtbpZco3ty1gFpfkJJhR02HqIojzDlj4xpiOWQIysa29zv/cuVBwatvOf3c8ZOQ7ZzP5nwJvWtRCNsZ0jyUgE1v8fqjaG1LAbN/Rnf/edPjEl3pXwMwYEzMsAZmBp+pMjhkcYVbaWsAMgbSxTuf/lM9C6hjYv+bozn9LPsYMepaATOf6Mvqs/nDrCLOK7eAPnV4mG7ImQv58Z9LMzgqY2azLxgxJUU1AIpIJPAfkA9uBS1S1ImybWcADQBrgA+5U1ecGNNDhrKupZxprnRFmLfOYNdU5y0UgIdXpkxl7HMw4HzzxAxu7MSamRXUYtoj8FDikqneJyPeBDFX9Xtg2UwBV1U0iMg5YCUxX1crO9m3DsPuoo6lnXG6YHzLtf1yiM61MVmB6mfjkgYvRGBNxw2kY9vnAgsDtJ4B3gDYJSFU3htzeIyIHgJFA5YBEOFz4fU5fTMtEmXO+BFv+DmWbWqf9LzgFFt4FI6dEO1pjzBAQ7QQ0WlX3Bm7vAzrtZBCRuUA8sKWD9dcC1wLk5eVFMMwhQtXp02np/D+yx1kGgQJmOU6T2YzznellXvsWlG1onfY/I9+SjzEmYvo9AYnIW8CYdlbdEnpHVVVEOmwPFJGxwJPAlarBIVNtqOpDwEPgNMH1OuhY0JfO/9pDrbMxV+5wzm5apI52ksykMyB1XOcFzGzaf2NMP+r3BKSqZ3S0TkT2i8hYVd0bSDAHOtguDXgduEVV3++nUGNLV53/DVVOgjm0xWkya25sXZeU6Qxjzp0LRf8B7l6+zTb6zBjTj6LdBLcEuBK4K/D/n8I3EJF44GXg96r64sCGFwUdTT0T3vmfkOIkmVEzYOrZNr2MMWbQiXYCugt4XkS+BOwALgEQkTnAV1T1y4FlpwBZInJV4HFXqepHAx9uPwgWMAv0y8y5Bra807bzf+Kp8NmfOiPNjDFmiIhqAlLVcuD0dpavAL4cuP0U8NQAhxZZfj8c2R0yvUxIX4rL01rA7LjLnOazV7/ZtvN/xARLPsaYISfaZ0BDhyrUHGzt/A+dXkbEqSeTdQxMOwdSRndewMw6/40xw4AloPZ0NgKtrgLKA7VlKnc4TWgtUkY5SabgFGdIc2fTy3TGOv+NMcOAJaD2vH0n7HgPXv4KFMyHpvrWdYkjnM7/8SfAzAttehljjOklS0ChwkegbX3b+QkvfmaMMabPOrkKcRj6+moo/A/wJDr3PYnOdTRfL45uXMYYMwRZAgqVOsaZwdnXEBiB1gAJaT2ficAYY0yXrAkunI1AM8aYAWEJKJyNQDPGmAFhTXDGGGOiwhKQMcaYqLAEZIwxJiosARljjIkKS0DGGGOiwhKQMcaYqBDVwV25uiMichCnxlBvZQNlEQpnsBhuxzzcjhfsmIeLvhzzBFUdGclgOjJkE1BficgKVZ0T7TgG0nA75uF2vGDHPFwMlmO2JjhjjDFRYQnIGGNMVFgC6thD0Q4gCobbMQ+34wU75uFiUByz9QEZY4yJCjsDMsYYExWWgIwxxkTFsE5AIrJQRDaIyGYR+X476xNE5LnA+mUikh+FMCOqG8f8LRFZKyKrReRvIjIhGnFGUlfHHLLd50RERSTmh692pTvHLCKXBN7rNSLyh4GOMdK68budJyJ/F5FVgd/vRdGIM1JE5FEROSAiJR2sFxG5N/B6rBaR4wc6xi6p6rD8AdzAFmAiEA98DMwI2+arwG8Dty8Dnot23ANwzKcBSYHb1w+HYw5slwr8E3gfmBPtuAfgfZ4MrAIyAvdHRTvuATjmh4DrA7dnANujHXcfj/kU4HigpIP1i4A/AwKcCCyLdszhP8P5DGgusFlVt6pqI/AscH7YNucDTwRuvwicLiIygDFGWpfHrKp/V9XawN33gZwBjjHSuvM+A/wYuBuoH8jg+kl3jvk/gftVtQJAVQ8McIyR1p1jViAtcDsd2DOA8UWcqv4TONTJJucDv1fH+8AIERk7MNF1z3BOQOOBXSH3SwPL2t1GVZuBw0DWgETXP7pzzKG+hPMNajDr8pgDTRO5qvr6QAbWj7rzPk8BpojIuyLyvogsHLDo+kd3jvk24AsiUgosBW4cmNCipqd/7wPOSnKbdonIF4A5wKnRjqU/iYgL+AVwVZRDGWgenGa4BThnuf8UkSJVrYxmUP3scuBxVf25iJwEPCkiharqj3Zgw9VwPgPaDeSG3M8JLGt3GxHx4Jy2lw9IdP2jO8eMiJwB3AKcp6oNAxRbf+nqmFOBQuAdEdmO01a+ZJAPROjO+1wKLFHVJlXdBmzESUiDVXeO+UvA8wCq+h7gxZm0c6jq1t97NA3nBPQBMFlECkQkHmeQwZKwbZYAVwZuXwy8rYHevUGqy2MWkdnAgzjJZ7D3C0AXx6yqh1U1W1XzVTUfp9/rPFVdEZ1wI6I7v9uv4Jz9ICLZOE1yWwcwxkjrzjHvBE4HEJHpOAno4IBGObCWAF8MjIY7ETisqnujHVSoYdsEp6rNInID8AbOCJpHVXWNiNwOrFDVJcAjOKfpm3E6+y6LXsR9181j/l8gBXghMN5ip6qeF7Wg+6ibxzykdPOY3wDOEpG1gA/4jqoO2rP7bh7zTcDvROSbOAMSrhrMXyhF5BmcLxHZgX6tHwFxAKr6W5x+rkXAZqAWuDo6kXbMpuIxxhgTFcO5Cc4YY0wUWQIyxhgTFZaAjDHGRIUlIGOMMVFhCcgYY0xUWAIyxhgTFZaAjDHGRIUlIGMGkIjki8h6EXlaRNaJyIsikhTtuIyJBktAxgy8qcBvVHU6cASn7pQxw44lIGMG3i5VfTdw+ylgfjSDMSZaLAEZM/DC57+y+bDMsGQJyJiBlxeoRwPweeDf0QzGmGixBGTMwNsA/JeIrAMygAeiHI8xUTFsyzEYE0XNqvqFaAdhTLTZGZAxxpiosHpAxhhjosLOgIwxxkSFJSBjjDFRYQnIGGNMVFgCMsYYExWWgIwxxkTF/wedcgTaLzoUEAAAAABJRU5ErkJggg==\n" }, "metadata": { "needs_background": "light" } } ], "source": [ "tomo_rhos = np.zeros((2,2,len(p_values)), dtype=complex)\n", "\n", "for (i, p) in enumerate(p_values):\n", " tomo_fitter = StateTomographyFitter(tomography_results[i], tomography_circuits[i])\n", " tomo_rhos[:,:,i] = tomo_fitter.fit()\n", "\n", "# Simulated results\n", "plt.plot(p_values, np.real(tomo_rhos[0,1,:]),\"C0*\", label='Re $\\\\rho_{01}$')\n", "plt.plot(p_values, np.imag(tomo_rhos[0,1,:]),\"C1*\", label='Im $\\\\rho_{01}$')\n", "plt.plot(p_values, np.real(tomo_rhos[0,0,:]),\"C2x\", label='$\\\\rho_{00}$')\n", "plt.plot(p_values, np.real(tomo_rhos[1,1,:]),\"C3x\", label='$\\\\rho_{11}$')\n", "\n", "# Theoretical prediction\n", "\n", "# We obtain the density operator of the initial state\n", "rho0 = partial_trace(DensityMatrix.from_instruction(prepare_state), [0, 1, 3, 4]).data\n", "\n", "plt.plot(p_values, np.real(rho0[0,1])*(1-p_values), \"C0\", linewidth=.5)\n", "plt.plot(p_values, np.imag(rho0[0,1])*(1-p_values), \"C1\", linewidth=.5)\n", "plt.plot(p_values, 0.5*p_values + np.real(rho0[0,0])*(1-p_values), \"C2\", linewidth=.5)\n", "plt.plot(p_values, 0.5*p_values + np.real(rho0[1,1])*(1-p_values), \"C3\", linewidth=.5)\n", "\n", "plt.xlabel('p')\n", "plt.ylabel('$\\\\rho_{xx}$')\n", "plt.legend();\n", "\n", "plt.title(\"SIMULATION Depol. channel. Full tomo. $|\\\\psi_0\\\\rangle = U_3(\\\\pi/4,\\\\pi/4,0)|0\\\\rangle$\");" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.8.5" } }, "nbformat": 4, "nbformat_minor": 2 }