{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyNQGhgVkCofw9IyY481Q4Ma"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"code","execution_count":1,"metadata":{"id":"B2Y6k1uDEZ2B","executionInfo":{"status":"ok","timestamp":1726998571942,"user_tz":-120,"elapsed":21686,"user":{"displayName":"Taketo Imaizumi","userId":"04834569526942888751"}},"outputId":"e1537e25-8ea5-46be-d4ed-5b480411c6c5","colab":{"base_uri":"https://localhost:8080/"}},"outputs":[{"output_type":"stream","name":"stdout","text":["Collecting qutip\n","  Downloading qutip-5.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.2 kB)\n","Requirement already satisfied: numpy>=1.22 in /usr/local/lib/python3.10/dist-packages (from qutip) (1.26.4)\n","Requirement already satisfied: scipy>=1.9 in /usr/local/lib/python3.10/dist-packages (from qutip) (1.13.1)\n","Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from qutip) (24.1)\n","Downloading qutip-5.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (28.0 MB)\n","\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m28.0/28.0 MB\u001b[0m \u001b[31m23.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hInstalling collected packages: qutip\n","Successfully installed qutip-5.0.4\n"]}],"source":["import ipywidgets as widgets\n","from IPython.display import display\n","import numpy as np\n","! pip install qutip # for Google Colab\n","from qutip import (\n","    Qobj,\n","    QobjEvo,\n","    Bloch,\n","    basis,\n","    sigmax,\n","    sigmay,\n","    sigmaz,\n","    qeye,\n","    mesolve,\n","    expect,\n","    tensor,\n","    ket2dm,\n","\n",")\n","from qutip.piqs.piqs import purity_dicke\n","from qutip.visualization import matrix_histogram\n","from qutip.measurement import measure, measurement_statistics\n","import matplotlib.pyplot as plt"]},{"cell_type":"markdown","source":["### Reference links about QuTip\n","\n","\n","*   Quantum measurement: https://qutip.readthedocs.io/en/qutip-5.0.x/guide/guide-measurement.html"],"metadata":{"id":"EzQ54qFwJmfP"}},{"cell_type":"markdown","source":["# Performing a basic measurement (Observable)\n","First we need to select some states to measure. For now, let us create $|0\\rangle$ state and $|1\\rangle$ state:"],"metadata":{"id":"yOiOPHmwHUVo"}},{"cell_type":"code","source":["g_state =  basis(2, 0)\n","print(g_state)\n","\n","e_state =  basis(2, 1)\n","print(e_state)"],"metadata":{"id":"N6XeBRnAKA0q","executionInfo":{"status":"ok","timestamp":1726998571943,"user_tz":-120,"elapsed":4,"user":{"displayName":"Taketo Imaizumi","userId":"04834569526942888751"}},"colab":{"base_uri":"https://localhost:8080/"},"outputId":"126a1707-7254-48ad-ee4a-088dc69657a1"},"execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":["Quantum object: dims=[[2], [1]], shape=(2, 1), type='ket', dtype=Dense\n","Qobj data =\n","[[1.]\n"," [0.]]\n","Quantum object: dims=[[2], [1]], shape=(2, 1), type='ket', dtype=Dense\n","Qobj data =\n","[[0.]\n"," [1.]]\n"]}]},{"cell_type":"markdown","source":["With qutip `measure` function, you can see the demo of how quantum measurement is done. For the first argument is the satate vector (or density matrix) of the measured quantum state and the second is the operators or the sets of projection operators you want to measure.\n","\n","You can run the same cell multiple times and see if the measurement result will change.\n","\n","Link: https://qutip.readthedocs.io/en/qutip-5.0.x/apidoc/functions.html#qutip.measurement.measure"],"metadata":{"id":"zZxS23XNHn23"}},{"cell_type":"code","source":["# measure sigmaz of the up state\n","measure(g_state, sigmaz()) # this will show +1 always"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"4aw_odqzIS4D","executionInfo":{"status":"ok","timestamp":1726998591736,"user_tz":-120,"elapsed":315,"user":{"displayName":"Taketo Imaizumi","userId":"04834569526942888751"}},"outputId":"3af5a5ee-ce9d-42f9-fbdc-3161cb4b331d"},"execution_count":3,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(1.0,\n"," Quantum object: dims=[[2], [1]], shape=(2, 1), type='ket', dtype=Dense\n"," Qobj data =\n"," [[1.]\n","  [0.]])"]},"metadata":{},"execution_count":3}]},{"cell_type":"code","source":["# measure sigmaz of the down state\n","measure(e_state, sigmaz()) # this will show -1 always"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"RWtiWLcJIYuj","executionInfo":{"status":"ok","timestamp":1726998612309,"user_tz":-120,"elapsed":379,"user":{"displayName":"Taketo Imaizumi","userId":"04834569526942888751"}},"outputId":"6d72950b-ba62-4777-a420-4ed88c3b17ab"},"execution_count":4,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(-1.0,\n"," Quantum object: dims=[[2], [1]], shape=(2, 1), type='ket', dtype=Dense\n"," Qobj data =\n"," [[0.]\n","  [1.]])"]},"metadata":{},"execution_count":4}]},{"cell_type":"code","source":["# measure sigmax of the up state\n","measure(g_state, sigmax()) # the result will change every time"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"voqb1euGIgzM","executionInfo":{"status":"ok","timestamp":1726998634809,"user_tz":-120,"elapsed":280,"user":{"displayName":"Taketo Imaizumi","userId":"04834569526942888751"}},"outputId":"cac93f6f-47d5-4f4e-8631-f41e0282a4bb"},"execution_count":8,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(-1.0,\n"," Quantum object: dims=[[2], [1]], shape=(2, 1), type='ket', dtype=Dense\n"," Qobj data =\n"," [[ 0.70710678]\n","  [-0.70710678]])"]},"metadata":{},"execution_count":8}]},{"cell_type":"code","source":["# measure sigmax of the down state\n","measure(e_state, sigmax()) # the result will change every time"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"hQMyyQL_Iwyx","executionInfo":{"status":"ok","timestamp":1726998655550,"user_tz":-120,"elapsed":428,"user":{"displayName":"Taketo Imaizumi","userId":"04834569526942888751"}},"outputId":"04885cba-8794-46b5-9135-a440d1a03d17"},"execution_count":15,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(1.0,\n"," Quantum object: dims=[[2], [1]], shape=(2, 1), type='ket', dtype=Dense\n"," Qobj data =\n"," [[0.70710678]\n","  [0.70710678]])"]},"metadata":{},"execution_count":15}]},{"cell_type":"markdown","source":["With `measurement_statistics` function, we can obtain the statistics result of the quantum measurement. Here we try to plot the bar graph of each probability."],"metadata":{"id":"IK-rDziSI5_w"}},{"cell_type":"code","source":["# measure sigmaz of |0> state\n","# Get eigenvalues, eigenstates, and probabilities of measuring sigmaz\n","eigenvalues, eigenstates, probabilities = measurement_statistics(g_state, sigmaz())\n","\n","# Plot the results\n","plt.bar(eigenvalues, probabilities)\n","\n","# Set x-ticks to only show -1 and +1\n","plt.xticks([-1, 1], labels=[\"-1\", \"+1\"])\n","plt.ylim(0,1)\n","\n","# Labeling and title\n","plt.xlabel(\"Eigenvalues\")\n","plt.ylabel(\"Probability\")\n","plt.title(r\"Measurement of $\\sigma_z$ of $|0\\rangle$\")\n","\n","# Show the plot\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":474},"id":"JV-nODtSI4QP","executionInfo":{"status":"ok","timestamp":1726998988637,"user_tz":-120,"elapsed":402,"user":{"displayName":"Taketo Imaizumi","userId":"04834569526942888751"}},"outputId":"8fbc4689-195f-4332-b241-d81e175dec28"},"execution_count":18,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 1 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAAAjcAAAHJCAYAAAB5WBhaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAySklEQVR4nO3deVxV1f7/8fcBFVAEVJTBSDRvlqk4E6WpxZXUKLWcSySza2pm3EopE80Uh0q/3UzTa9rgdDO1wdKUTOunpUk0mENahLcEZ1AwUNi/P/p6vp4AhePRg8vX8/E4jzhrr733Z1Nx3o+91trHZlmWJQAAAEN4uLsAAAAAVyLcAAAAoxBuAACAUQg3AADAKIQbAABgFMINAAAwCuEGAAAYhXADAACMQrgBAABGIdwAAACjEG4AAIBRCDcAcBG2bdumW265RdWqVZPNZlNaWpq7Szqv8tQbHh6u8ePHX7baAFch3ABOWrhwoWw2m2w2m7744oti2y3LUlhYmGw2m+666y43VIizNm/erPHjx+v48eMuPe7p06fVq1cvHT16VDNmzNBbb72levXqufQcruSqevPz8zV69GiFhobKx8dHkZGRWrduXbF+zzzzjBo0aOCK0oFyIdwAF8nb21uLFy8u1r5x40b997//lZeXlxuqwrk2b96sCRMmuDzc7Nu3T7/++queeOIJPfzww7r//vtVo0YNl57DlVxV76BBg/TSSy9pwIAB+p//+R95enqqa9euxUJ+bGysfvnlF+3YscNVlwCUCeEGuEhdu3bVO++8ozNnzji0L168WK1atVJwcLCbKnON3Nxcd5dQYR08eFCSFBAQ4N5CysgV9W7dulVLly5VcnKypk+frocffliffvqp6tWrp6eeesqhb2RkpIKCgvTBBx9cTNlAuRFugIvUr18/HTlyxOG2fEFBgZYvX67+/fuXuM9vv/2mBx98UEFBQfLy8tJNN92k119/3aHPr7/+qmHDhqlRo0by8fFRrVq11KtXL6Wnpzv0O3HihEaNGqXw8HB5eXmpTp06+vvf/67U1FR7n0GDBik8PLxYHePHj5fNZiv2/scff1T//v1Vo0YNtWvXrlx1n3ucPXv26P7775e/v79q166tZ599VpZlaf/+/brnnnvk5+en4OBgvfjii079js6eZ+/evRo0aJACAgLk7++v+Ph45eXl2fs8+eSTkqT69evbhxL/+nv8q2+++UZdunSRn5+ffH19dccdd+jLL790+J126NBBktSrVy/ZbDZ17NjxvMc8a+7cuWrZsqWqVq1qr+fsy9lhnEtZ77mWL18uT09PPfzww/Y2b29vDR48WFu2bNH+/fvt7WeHZAk3uNwqubsA4EoXHh6uqKgoLVmyRF26dJEkffzxx8rOzlbfvn318ssvO/TPysrSzTffLJvNphEjRqh27dr6+OOPNXjwYOXk5GjUqFGS/pz4uXnzZvXt21fXXHON0tPTNXv2bHXs2FE//vijqlatKkkaOnSoli9frhEjRqhx48Y6cuSIvvjiC+3cuVMtW7Z06pp69eqlv/3tb5o8ebIsyypX3efq06ePbrzxRk2ZMkWrV6/W888/r5o1a+q1117T7bffrqlTp2rRokV64okn1KZNG912221Onat3796qX7++kpOTlZqaqn//+9+qU6eOpk6dqp49e2rPnj1asmSJZsyYocDAQElS7dq1S73+HTt2qH379vLz89NTTz2lypUr67XXXlPHjh21ceNGRUZG6h//+Ifq1q2ryZMna+TIkWrTpo2CgoIu+Lt9/PHHNXPmTHXu3Fnx8fH673//qxkzZuj06dO666671KpVqzL+W7o89f7VN998o+uvv15+fn4O7W3btpUkpaWlKSwszN5+9913a8GCBTp06NB5f+eAS1kAnLJgwQJLkrVt2zbrlVdesapXr27l5eVZlmVZvXr1sjp16mRZlmXVq1fP6tatm32/wYMHWyEhIdbhw4cdjte3b1/L39/ffoyz/zzXli1bLEnWm2++aW/z9/e3hg8fft5a4+LirHr16hVrT0pKss79M3D2fb9+/Yr1LWvd5x7n4YcftredOXPGuuaaayybzWZNmTLF3n7s2DHLx8fHiouLK/e5zp7nwQcfdOjXo0cPq1atWvb306dPtyRZv/zySwm/neK6d+9uValSxdq3b5+97ffff7eqV69u3Xbbbfa2DRs2WJKsd955p0zH3bRpkyXJeuSRRxzaJ0yYYEmytm7dWqbjXK5669WrZyUlJTm03XTTTdbtt99erO+OHTssSdacOXMc2nNzcy0fHx9r4cKF5bgi4OIwLAW4QO/evXXq1Cl9+OGHOnHihD788MMSh6Qsy9K7776r2NhYWZalw4cP218xMTHKzs62Dyf5+PjY9zt9+rSOHDmihg0bKiAgwGHIKSAgQF999ZV+//13l13P0KFDna77XA899JD9Z09PT7Vu3VqWZWnw4MEO9Tdq1Eg///yz0+f6a73t27fXkSNHlJOTU+5rLyws1CeffKLu3bs7DBGFhISof//++uKLL5w6riTNmDFDNWvW1PTp0x3azw4X7dmzp0LVW5JTp06VOEne29vbvv1cVatW1R133MHQFC4rhqUAF6hdu7aio6O1ePFi5eXlqbCwUPfdd1+xfocOHdLx48c1d+5czZ07t8RjnZ30eerUKSUnJ2vBggX67bff7MNDkpSdnW3/edq0aYqLi1NYWJhatWqlrl27auDAgRe1BLd+/fpO132ua6+91uG9v7+/vL297UND57YfOXLE6XP99TxnVwAdO3as2PDJhRw6dEh5eXlq1KhRsW033nijioqKtH//ft10003lOu6ZM2e0bt063XPPPapWrZrDtoKCAkkqd62Xst7S+Pj4KD8/v1j7H3/8Yd/+Vx07dlRycrJLzg+UBeEGcJH+/ftryJAhyszMVJcuXUpckVJUVCRJuv/++xUXF1ficZo1ayZJevTRR7VgwQKNGjVKUVFR8vf3l81mU9++fe3Hkf68a9S+fXutXLlSn3zyiaZPn66pU6dqxYoV9jlA504aPldhYWGJ7X/9gCpP3efy9PQsU5ske3hz5lwXOmZFkJ6erpMnT6pJkybFtm3fvl3Sn2GkogsJCdFvv/1WrP3AgQOSpNDQ0GLbtm7dqtatW1/y2oCzCDeAi/To0UP/+Mc/9OWXX2rZsmUl9qldu7aqV6+uwsJCRUdHn/d4y5cvV1xcnMNKoj/++KPEZ7WEhIRo2LBhGjZsmA4ePKiWLVtq0qRJ9nBTo0aNEvf79ddfy3Rt5an7Yl2Kc5UW7ko7f9WqVbV79+5i23bt2iUPDw+HCbNldeLECUlSlSpVHNoty9I777yjm266SQ0bNpQk3XPPPUpJSbFvz8vL0+bNmxUVFXXZ6i1N8+bNtWHDBuXk5Djcafrqq6/s2891+vRprVmzRpMnT3ZZDcCFMOcGcBFfX1/Nnj1b48ePV2xsbIl9PD09de+99+rdd9/VDz/8UGz7oUOHHPr+9c7Dv/71L4e7LYWFhQ5DVJJUp04dhYaGOgwdXHfddcrOztZ3331nbztw4IBWrlxZpmsrT90X61Kc6+wwUFke4ufp6anOnTvrvffec1gunpWVpcWLF6tdu3ZODR+dHTpbv369Q/vMmTOVmpqqxMREe9t7772nkydP6uTJkxo0aJB69uxpX410ueotzX333afCwkKHIcP8/HwtWLBAkZGRxYLUxo0blZOTU+r/E8ClwJ0bwIVKG0Y515QpU7RhwwZFRkZqyJAhaty4sY4eParU1FStX79eR48elSTdddddeuutt+Tv76/GjRtry5YtWr9+vWrVqmU/1okTJ3TNNdfovvvuU0REhHx9fbV+/Xpt27bN4Y5P3759NXr0aPXo0UMjR45UXl6eZs+ereuvv77EicAXU7cruPpcZ5dXP/PMM+rbt68qV66s2NjYYnNfznr++ee1bt06tWvXTsOGDVOlSpX02muvKT8/X9OmTXPqmmrVqqXu3btr1apVGjBggG699VZ98cUXWrJkiR566CENGDCg2D5PPvmk0tPTtXLlylKH3i5VvaWJjIxUr169lJiYqIMHD6phw4Z64403lJ6ervnz5xfr//777ysiIqLYvCjgknLLGi3AAOcuBT+fvy4FtyzLysrKsoYPH26FhYVZlStXtoKDg6077rjDmjt3rr3PsWPHrPj4eCswMNDy9fW1YmJirF27dln16tWzL5vOz8+3nnzySSsiIsKqXr26Va1aNSsiIsJ69dVXi9XxySefWE2aNLGqVKliNWrUyHr77bdLXQp+6NChEq+lLHWf7zhxcXFWtWrVih23Q4cO1k033VTuc5V2nrP/bs5d+j1x4kSrbt26loeHR5mWhaemploxMTGWr6+vVbVqVatTp07W5s2bHfqUd2n1sWPHrEGDBlk1atSwvLy8rBYtWljz588vsW9SUpLVqVMn69SpU2U69qWot6Sl4JZlWadOnbKeeOIJKzg42PLy8rLatGljrVmzpsRjhIeHW2PHji3T+QBXsVlWBZpxBwDQCy+8oBUrVuiTTz6Rr6+v2+oIDw/XoEGDnP5m8O+//17NmjXTV199VeqwGnApMCwFABXI7NmztWTJEn366aduDTau8P777ys4OFht2rRxdym4yjChGAAqkMTERO3YsUN169aVr6+vfH197UvFrzQPPfSQtm/fXq7VaoArcOcGACqQsqzoulI4891VgCu49c7Npk2bFBsbq9DQUNlsNq1ateqC+3z22Wdq2bKlvLy81LBhQy1cuPCS1wkAV6P0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KTc3VwkJCfr666+VkpIiDw8P9ejRQ0VFRU5f3+eff66BAwfqscce048//qjXXntNCxcu1KRJkyRJ7777rmbMmKHXXntNP/30k1atWqWmTZs6fT4AZWQBQDnExcVZnp6eVrVq1RxekyZNsizLsiRZK1eutCzLsmbPnm3VqlXLOnXqlH3/efPmWZKsb775xrIsy5o4caLVuXNnh3Ps37/fkmTt3r3bsizL6tChg9WuXTuHPm3atLFGjx5tWZZlnT592goMDLTefPNN+/Z+/fpZffr0KfU6Dh06ZEmyvv/+e8uyLOuXX35xqGvBggWWv7+/wz4rV660zv2zeccdd1iTJ0926PPWW29ZISEhlmVZ1osvvmhdf/31VkFBQal1AHA97twAKLdOnTopLS3N4TV06NBi/Xbv3q1mzZrJ29vb3ta2bVuHPt9++602bNggX19f++uGG26QJIdho2bNmjnsFxISooMHD0qSKlWqpN69e2vRokWS/rxL895772nAgAH2/j/99JP69eunBg0ayM/PT+Hh4ZKkjIwMp38P3377rZ577jmH2ocMGaIDBw4oLy9PvXr10qlTp9SgQQMNGTJEK1eutA9ZAbh0mFAMoNyqVaumhg0buuRYJ0+eVGxsrKZOnVpsW0hIiP3nypUrO2yz2WwOQ0oDBgxQhw4ddPDgQa1bt04+Pj72FVySFBsbq3r16mnevHkKDQ1VUVGRmjRpooKCghLr8vDwkGVZDm2nT58uVvuECRPUs2fPYvt7e3srLCxMu3fv1vr167Vu3ToNGzZM06dP18aNG4tdDwDXIdwAuGQaNWqkt99+W/n5+fbVVNu2bXPo07JlS7377rsKDw9XpUrO/0m65ZZbFBYWpmXLlunjjz9Wr1697AHiyJEj2r17t+bNm6f27dtLkr744ovzHq927do6ceKEcnNzVa1aNUkq9gycli1bavfu3ecNej4+PoqNjVVsbKyGDx+uG264Qd9//71atmzp9LUCOD+GpQCUW35+vjIzMx1e565uOqt///4qKirSww8/rJ07d2rt2rV64YUXJMm+6mj48OE6evSo+vXrp23btmnfvn1au3at4uPjVVhYWK66+vfvrzlz5mjdunUOQ1I1atRQrVq1NHfuXO3du1effvqpEhISznusyMhIVa1aVU8//bT27dunxYsXa+HChQ59xo0bpzfffFMTJkzQjh07tHPnTi1dulRjx46V9OeKq/nz5+uHH37Qzz//rLfffls+Pj6qV69eua4LQPkQbgCU25o1axQSEuLwateuXbF+fn5++uCDD5SWlqbmzZvrmWee0bhx4yTJPg8nNDRU/+///T8VFhaqc+fOatq0qUaNGqWAgAB5eJTvT9SAAQP0448/qm7durr11lvt7R4eHlq6dKm2b9+uJk2a6PHHH9f06dPPe6yaNWvq7bff1kcffaSmTZtqyZIlDsvPJSkmJkYffvihPvnkE7Vp00Y333yzZsyYYQ8vAQEBmjdvnm699VY1a9ZM69ev1wcffKBatWqV67oAlI/N+uugMgBcQosWLVJ8fLyys7Pl4+Pj7nIAGIg5NwAuqTfffFMNGjRQ3bp19e2332r06NHq3bs3wQbAJUO4AXBJZWZmaty4ccrMzFRISIh69eplf8gdAFwKDEsBAACjMKEYAAAYhXADAACMQrgBAABGIdwAAACjEG4AAIBRCDcAAMAohBsAAGAUwg0AADAK4QYAABjl/wOhNeUnWTIBjwAAAABJRU5ErkJggg==\n"},"metadata":{}}]},{"cell_type":"code","source":["# measure sigmaz of |1> state\n","# Get eigenvalues, eigenstates, and probabilities of measuring sigmaz\n","eigenvalues, eigenstates, probabilities = measurement_statistics(e_state, sigmaz())\n","\n","# Plot the results\n","plt.bar(eigenvalues, probabilities)\n","\n","# Set x-ticks to only show -1 and +1\n","plt.xticks([-1, 1], labels=[\"-1\", \"+1\"])\n","plt.ylim(0,1)\n","\n","# Labeling and title\n","plt.xlabel(\"Eigenvalues\")\n","plt.ylabel(\"Probability\")\n","plt.title(r\"Measurement of $\\sigma_z$ of $|1\\rangle$ state\")\n","\n","# Show the plot\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":474},"id":"_0SB424SJcBo","executionInfo":{"status":"ok","timestamp":1726999132720,"user_tz":-120,"elapsed":325,"user":{"displayName":"Taketo Imaizumi","userId":"04834569526942888751"}},"outputId":"ea3430cd-b20f-4fc2-c1a8-c52842041c30"},"execution_count":20,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 1 Axes>"],"image/png":"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iYmJ+uqrr5SSkiIfHx898MADys/Pd3v/Pv/8c/Xp00dPPfWUdu7cqTfffFPz5s3TuHHjJEnvv/++pkyZojfffFM//vijli9frkaNGrm9PQAeZgFAMfTt29fy9fW1KlWq5PQYN26cZVmWJclatmyZZVmWNWPGDKtatWrWuXPnHMvPnj3bkmR9/fXXlmVZ1tixY60OHTo4bePQoUOWJGvPnj2WZVlW27ZtrdatWzv1admypfXcc89ZlmVZubm5VkhIiPX22287Xu/Zs6fVvXv3Ivfj6NGjliTru+++syzLsn7++WenuubOnWsFBQU5LbNs2TLr4n8277rrLmv8+PFOfd555x0rPDzcsizLevXVV60bb7zRysnJKbIOAN7DmSAAxda+fXvt2LHD6TFw4MAC/fbs2aPGjRvLz8/P0daqVSunPt98843Wr1+vgIAAx+Omm26SJKfhqsaNGzstFx4eriNHjkiSypUrp27dumn+/PmS/jzr88EHH6h3796O/j/++KN69uypunXrKjAwUJGRkZKkgwcPuv17+Oabb/TSSy851T5gwAAdPnxYZ8+eVdeuXXXu3DnVrVtXAwYM0LJlyxxDZQC8j4nRAIqtUqVKqlevnkfWdebMGcXHx2vixIkFXgsPD3f8XL58eafXbDab01BW79691bZtWx05ckRr166Vv7+/44o1SYqPj1ft2rU1e/Zs1axZU/n5+WrYsKFycnIKrcvHx0eWZTm15ebmFqh9zJgx6tKlS4Hl/fz8FBERoT179mjdunVau3atBg0apMmTJ2vDhg0F9gdA6SMEASgx9evX17vvvqvs7GzH1WPbtm1z6tOsWTO9//77ioyMVLly7v+TdNtttykiIkKLFy/WJ598oq5duzqCxvHjx7Vnzx7Nnj1bbdq0kSRt2rTpkuurXr26Tp8+raysLFWqVEmSCtxDqFmzZtqzZ88lA6G/v7/i4+MVHx+vwYMH66abbtJ3332nZs2aub2vADyD4TAAxZadna20tDSnx8VXc13Qq1cv5efn6/HHH9euXbu0evVqvfLKK5LkuMpq8ODBOnHihHr27Klt27Zp//79Wr16tRISEpSXl1esunr16qWZM2dq7dq1TkNhVapUUbVq1TRr1izt27dPn376qRITEy+5rujoaFWsWFHPP/+89u/frwULFmjevHlOfUaNGqW3335bY8aM0Q8//KBdu3Zp0aJFGjlypKQ/rzB766239P333+unn37Su+++K39/f9WuXbtY+wWgZBCCABTbqlWrFB4e7vRo3bp1gX6BgYFasWKFduzYoSZNmuiFF17QqFGjJMkxT6hmzZr6f//v/ykvL08dOnRQo0aNNGzYMAUHB8vHp3j/RPXu3Vs7d+5UrVq1dPvttzvafXx8tGjRIm3fvl0NGzbU008/rcmTJ19yXVWrVtW7776rjz/+WI0aNdLChQudLsuXpLi4OH300Udas2aNWrZsqVtvvVVTpkxxhJzg4GDNnj1bt99+uxo3bqx169ZpxYoVqlatWrH2C0DJsFl/HfQGgBI0f/58JSQkKCMjQ/7+/t4uB4DBmBMEoES9/fbbqlu3rmrVqqVvvvlGzz33nLp160YAAuB1hCAAJSotLU2jRo1SWlqawsPD1bVrV8fNBAHAmxgOAwAARmJiNAAAMBIhCAAAGIkQBAAAjEQIAgAARiIEAQAAIxGCAACAkQhBAADASIQgAABgJEIQAAAw0v8HvXbx4fzhReMAAAAASUVORK5CYII=\n"},"metadata":{}}]},{"cell_type":"code","source":["# measure sigmax of the |0> state\n","# Get eigenvalues, eigenstates, and probabilities of measuring sigmaz\n","eigenvalues, eigenstates, probabilities = measurement_statistics(g_state, sigmax())\n","\n","# Plot the results\n","plt.bar(eigenvalues, probabilities)\n","\n","# Set x-ticks to only show -1 and +1\n","plt.xticks([-1, 1], labels=[\"-1\", \"+1\"])\n","plt.ylim(0,1)\n","\n","# Labeling and title\n","plt.xlabel(\"Eigenvalues\")\n","plt.ylabel(\"Probability\")\n","plt.title(r\"Measurement of $\\sigma_x$ of $|0\\rangle$ state\")\n","\n","# Show the plot\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":474},"id":"9avtxouhJiKj","executionInfo":{"status":"ok","timestamp":1726999179930,"user_tz":-120,"elapsed":337,"user":{"displayName":"Taketo Imaizumi","userId":"04834569526942888751"}},"outputId":"d9b7713a-7a61-46d1-c3d0-d57148b2f921"},"execution_count":21,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 1 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAAAjcAAAHJCAYAAAB5WBhaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyn0lEQVR4nO3deVwVZf//8fcBZXHDBWWLRPMuMxV3wjSz+IpW9FVzN0Vus9vS1Lgrb8pcMkUzl7s7c6s0y+3O1LJMU1LLr95pEi2mlpphJbiDoQHC/P7o57k9AXo4AgcvX8/H4zzyXHPNzGdgzuHdzDUzNsuyLAEAABjCw90FAAAAlCTCDQAAMArhBgAAGIVwAwAAjEK4AQAARiHcAAAAoxBuAACAUQg3AADAKIQbAABgFMINAAAwCuEGAAAYhXADwGi7du1S27ZtVblyZdlsNqWkpLi7pCsqTs1hYWEaP358mdUGXAsINzDWokWLZLPZZLPZtG3btgLTLctSaGiobDab7r//fjdUiIu2b9+u8ePH68yZMyW63NzcXPXs2VOnTp3SzJkz9dZbb6lu3boluo6SVlI1Z2dna/To0QoODpavr68iIiK0ceNGhz7PPvus6tevX1KlS7r632Vp7Qu4vhBuYDwfHx8tXbq0QPvWrVv1888/y9vb2w1V4VLbt2/XhAkTSvwP2sGDB/XTTz/pySef1COPPKKHHnpINWrUKNF1lLSSqnnQoEGaMWOG+vfvr3/+85/y9PTUvffe6xD0Y2Ji9OOPP2rPnj0lVv/V/i5La1/A9YVwA+Pde++9euedd3ThwgWH9qVLl6ply5YKDAx0U2UlIysry90llFvHjh2TJFWvXt29hRRDSdS8c+dOLV++XImJiZo2bZoeeeQRffLJJ6pbt66efvppe7+IiAgFBARo7dq1V1s2UL5YgKEWLlxoSbLeeecdy2azWevWrbNPy87OtmrUqGFNnz7dqlu3rnXfffc5zPvzzz9bcXFxVp06dSwvLy+rUaNG1uuvv+7Q5/Dhw9ajjz5q3XzzzZaPj49Vs2ZNq0ePHtaPP/7o0C8zM9MaOXKkVbduXcvLy8uqXbu2FRUVZe3evdveJzY21qpbt26BbRg3bpx16cf04vs9e/ZYffv2tapXr241a9asWHVfupz9+/db/fv3t6pVq2b5+/tbY8aMsfLz863U1FTrgQcesKpWrWoFBARYL730UoFlOLOui+v54YcfrNjYWMvPz8+qVq2aNWjQICsrK8uhz59ff/45/llycrLVuXNnq2rVqlblypWtu+++29qxY4fDz/TPy+zQocNll3nRvHnzrObNm1u+vr4FllGvXj2nllFWNdetW9caN26cQ9tTTz1leXp6WhkZGQ7tkydPtiRZqamp9rbBgwdbbdu2dar+K+3Ll/tdOvN5cWZfcHYfx/WtQqmnJ8DNwsLCFBkZqWXLlqlLly6SpI8++kgZGRnq06ePXn75ZYf+6enpuv3222Wz2TR8+HDVrl1bH330kQYPHqzMzEyNGjVK0h+DPrdv364+ffrohhtu0OHDhzVnzhzddddd+u6771SpUiVJ0tChQ7Vy5UoNHz5cjRo10smTJ7Vt2zbt3btXLVq0cGmbevbsqb/85S+aPHmyLMsqVt2X6t27t2699VZNmTJFH374oV544QXVrFlT8+bN0913362pU6dqyZIlevLJJ9W6dWvdeeedLq2rV69eqlevnhITE5WcnKzXXntNderU0dSpU9W9e3d9//33WrZsmWbOnCl/f39JUu3atYvc/j179qh9+/aqVq2ann76aVWsWFHz5s3TXXfdpa1btyoiIkJ/+9vfFBISosmTJ2vEiBFq3bq1AgICrvizfeKJJzRr1ix16tRJcXFx+vnnnzVz5kzl5ubq/vvvV8uWLZ38LZVdzX/25Zdf6uabb1a1atUc2tu0aSNJSklJUWhoqCTpgQce0MKFC3X8+PHL/sylK+/Ll/tdfvTRR1f8vFxpX3BlH8d1yt3pCigtF4/c7Nq1y3rllVesqlWrWufOnbMsy7J69uxpdezY0bIsq8CRm8GDB1tBQUHWiRMnHJbXp08fy8/Pz76Mi/+91I4dOyxJ1uLFi+1tfn5+1rBhwy5ba3GP3PTt27dAX2frvnQ5jzzyiL3twoUL1g033GDZbDZrypQp9vbTp09bvr6+VmxsbLHXdXE9f/3rXx36devWzapVq5b9/bRp05w6WnNR165dLS8vL+vgwYP2tl9//dWqWrWqdeedd9rbNm/ebD9654xPP/3UkmQ9+uijDu0TJkywJFk7d+50ajllWXNhR25uu+026+677y7Qd8+ePZYka+7cufa2rKwsy9fX11q0aNEV1+XMvlzU79LZz8vl9oXi7OO4vjHmBteFXr166fz58/rggw909uxZffDBB+rXr1+BfpZl6d1331VMTIwsy9KJEyfsr+joaGVkZCg5OVmS5Ovra58vNzdXJ0+eVIMGDVS9enV7H+mPsROff/65fv311xLbnqFDh7pc96Uefvhh+789PT3VqlUrWZalwYMHO9R/yy236NChQy6v68/1tm/fXidPnlRmZmaxtz0vL08ff/yxunbt6nClT1BQkPr166dt27a5tFxJmjlzpmrWrKlp06Y5tHfo0EGS9P3337u03NKsuTDnz58vdKC8j4+PffpFlSpV0j333OPUuJur2Zed/bwUxdV9HNcnwg2uC7Vr11ZUVJSWLl2qVatWKS8vTz169CjQ7/jx4zpz5ozmz5+v2rVrO7zi4uIk/XfA5/nz5zV27FiFhobK29tb/v7+ql27ts6cOaOMjAz7Ml988UV9++23Cg0NVZs2bTR+/Hh7UHBVvXr1XK77UjfeeKPDez8/P/n4+NhPB1zafvr0aZfX9ef1XLz65+Iyi+P48eM6d+6cbrnllgLTbr31VuXn5+vIkSPFXu6FCxe0ceNGdenSRZUrV3aYlpOTI0kFTvO4u+ai+Pr6Kjs7u0D777//bp9+qbvuuktbtmy54nKvZl929vNSFFf3cVyfGHOD60a/fv00ZMgQpaWlqUuXLoVejZKfny9JeuihhxQbG1vocpo2bSpJevzxx7Vw4UKNGjVKkZGR8vPzk81mU58+fezLkf44atS+fXutXr1aH3/8saZNm6apU6dq1apV9jFANput0HXl5eUV2v7nP07FqftSnp6eTrVJso/tcWVdV1pmeXD48GH99ttvaty4cYFpu3fvlvRHELkWBAUF6ZdffinQfvToUUlScHCwQ/vOnTvVqlWrKy7XmX25KM5+Xori6j6O6xPhBteNbt266W9/+5v+85//aMWKFYX2qV27tqpWraq8vDxFRUVddnkrV65UbGyspk+fbm/7/fffC70/R1BQkB577DE99thjOnbsmFq0aKFJkybZ/yDUqFGj0Pl++uknp7atOHVfrdJYV1Hhrqj1V6pUSfv37y8wbd++ffLw8LAPli2Os2fPSpK8vLwc2i3L0jvvvKPbbrtNDRo0kCQNHz5cubm5mjdvnvLz89WtWzfVr19fM2fOLNOai9KsWTNt3rxZmZmZDkebPv/8c/v0i3Jzc7V+/XpNnjzZqWVfaV8u6nfp7OelqPnLch/HtY/TUrhuVKlSRXPmzNH48eMVExNTaB9PT089+OCDevfdd/Xtt98WmH78+HGHvn8+8vCvf/3L4WhLXl5egUPuderUUXBwsMNpg5tuukkZGRn6+uuv7W1Hjx7V6tWrndq24tR9tUpjXRdPAzlz4zZPT0916tRJ7733ng4fPmxvT09P19KlS9WuXTuXTh9dPHW2adMmh/ZZs2YpOTlZCQkJ9raEhAQtX75cv/zyi5566ilZluXwR7usai5Kjx49lJeXp/nz59vbsrOztXDhQkVERDgEqa1btyozM7PIz8RFzu7LRf0unfm8XGn+strHce3jyA2uK0Udzr7UlClTtHnzZkVERGjIkCFq1KiRTp06peTkZG3atEmnTp2SJN1///1666235Ofnp0aNGmnHjh3atGmTatWqZV/W2bNndcMNN6hHjx4KDw9XlSpVtGnTJu3atcvhj2GfPn00evRodevWTSNGjNC5c+c0Z84c3XzzzU4PknS27pJQ0uu6eHn1s88+qz59+qhixYqKiYkpMPblohdeeEEbN25Uu3bt9Nhjj6lChQqaN2+esrOz9eKLL7q0TbVq1VLXrl21Zs0a9e/fX3fccYe2bdumZcuW6eGHH1b//v3tfUNCQjRgwAD7Yzu2bdsmD4/L/79iadRclIiICPXs2VMJCQk6duyYGjRooDfffFOHDx/W66+/7tD3/fffV3h4eIFxUX/m7L5c1O/Smc/L5eavXLlyme7juMa54QotoExcein45RR2E7/09HRr2LBhVmhoqFWxYkUrMDDQuueee6z58+fb+5w+fdqKi4uz/P39rSpVqljR0dHWvn37rLp169ovm87OzraeeuopKzw83H7jtvDwcOvVV18tUMfHH39sNW7c2PLy8rJuueUW6+233y7yUvDjx48Xui3O1H255cTGxlqVK1cusNwOHTpYt912W7HXVdR6Lv5uLr3cd+LEiVZISIjl4eHh9E38oqOjrSpVqliVKlWyOnbsaG3fvt2hT3Evqz59+rQ1aNAgq0aNGpa3t7fVvHnzIm8QN3/+fEtSgXWWdc2FXQpuWZZ1/vx568knn7QCAwMtb29vq3Xr1tb69esL9AsLC7PGjBlzxfUUZ18u7HfpzOflcvNf5Ow+juubzbLK0Yg+ALgGfP755+rRo4ciIiLk7++vuXPnuq2WsLAwDRo0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\n"},"metadata":{}}]},{"cell_type":"code","source":["# measure sigmax of the |1> state\n","# Get eigenvalues, eigenstates, and probabilities of measuring sigmaz\n","eigenvalues, eigenstates, probabilities = measurement_statistics(e_state, sigmax())\n","\n","# Plot the results\n","plt.bar(eigenvalues, probabilities)\n","\n","# Set x-ticks to only show -1 and +1\n","plt.xticks([-1, 1], labels=[\"-1\", \"+1\"])\n","plt.ylim(0,1)\n","\n","# Labeling and title\n","plt.xlabel(\"Eigenvalues\")\n","plt.ylabel(\"Probability\")\n","plt.title(r\"Measurement of $\\sigma_x$ of $|1\\rangle$ state\")\n","\n","# Show the plot\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":474},"id":"mD0rdu-VJne4","executionInfo":{"status":"ok","timestamp":1726999211254,"user_tz":-120,"elapsed":309,"user":{"displayName":"Taketo Imaizumi","userId":"04834569526942888751"}},"outputId":"90a80ab1-1296-4132-e548-e2f3c7fa0213"},"execution_count":22,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 1 Axes>"],"image/png":"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69atnRo+ujp0tmnTJof2WbNmKSEhQWPHjrW3jR07VitWrNAvv/yiZ555RpZl5Xq5fHHXXBS2bt2q1NTUPN8TV+X3WM7rd5mf98uNli+pYxw3P87c4JaS1+nsa02dOlWbN29WWFiYhgwZovr16+vcuXNKSEjQpk2bdO7cOUlS586d9fbbb8vHx0f169fXzp07tWnTJlWtWtW+rosXL+q2227TI488otDQUHl7e2vTpk3avXu3wx/DXr16acyYMeratatGjhypy5cva86cObrjjjvyPUkyv3UXhaLe1tXLq59//nn16tVLZcuWVVRUVI65L1e99NJL2rhxo1q3bq1hw4apTJkymjdvntLT0zV9+nSn9qlq1arq0qWL1q5dq759++qee+7R9u3btXz5cg0ePFh9+/a19w0KClK/fv3sX9uxfft2ubld//8Vi6Pm63n99dd14cIF++TfdevW6eeff5b0xxCRj4+PJOmDDz5QaGhojnlRf5bfYzmv32V+3i/XW75ChQoleozjJueCK7SAEnHtpeDX8+dLwS3LspKTk63hw4dbwcHBVtmyZa2AgADr/vvvt+bPn2/vc/78eSs6Otry8/OzvL29rcjISOvgwYNWzZo17ZdNp6enW88884wVGhpqVaxY0apQoYIVGhpqvfHGGznq+PTTT60GDRpY5cqVs+rWrWu98847eV4Kfvr06Vz3JT91X289AwYMsCpUqJBjvW3btrXuuuuuAm8rr+1c/d1ce7nvpEmTrKCgIMvNzS1fl4UnJCRYkZGRlre3t1W+fHmrffv21o4dOxz6FPSy6vPnz1sDBw60KleubHl4eFhNmjSx3nrrrVz7zp8/35KUY5slXXNel4LXrFnTkpTr49qfbUhIiDVu3Lgbbqcgx3Juv8v8vF+ut/xV+T3GcWuzWVYpmtEHADeBL7/8Uo888ojCwsLk5+enuXPnuqyWkJAQDRw40KlvBt+3b58aNWqkL7/8Ui1btiz64gAXYVgKAAogMTFR3bt31zvvvKM6derozjvv1HPPPXfDYZ3S6IMPPlBAQIBatGjh6lKAIsWEYgDIp4sXL6pz586KjY1V27ZtFRQUpL59++b7SqPSZvDgwdqzZ0+BrlYDbgacuQGAfKpYsaLDFW2SNGfOHBdVU3jF/b1VgKu49MzNtm3bFBUVpRo1ashms2nt2rU3XGbLli1q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\n"},"metadata":{}}]},{"cell_type":"code","source":[],"metadata":{"id":"2quA-Su4Js0H"},"execution_count":null,"outputs":[]}]}