{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2024-08-16T10:22:06.895774Z", "iopub.status.busy": "2024-08-16T10:22:06.895212Z", "iopub.status.idle": "2024-08-16T10:22:06.899624Z", "shell.execute_reply": "2024-08-16T10:22:06.898972Z" }, "id": "60d1a836f542" }, "outputs": [], "source": [ "# Copyright 2021 The Cirq Developers\n", "# Licensed under the Apache License, Version 2.0 (the \"License\");\n", "# you may not use this file except in compliance with the License.\n", "# You may obtain a copy of the License at\n", "#\n", "# https://www.apache.org/licenses/LICENSE-2.0\n", "#\n", "# Unless required by applicable law or agreed to in writing, software\n", "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", "# See the License for the specific language governing permissions and\n", "# limitations under the License." ] }, { "cell_type": "markdown", "metadata": { "id": "058c886e7d6d" }, "source": [ "# State Histograms\n", "State Histograms are useful to visualize the output of running a quantum circuit. For details on how to create and run your own quantum circuits, please see [Cirq basics](../start/basics.ipynb)" ] }, { "cell_type": "markdown", "metadata": { "id": "78cd9ffef102" }, "source": [ "\n", " \n", " \n", " \n", " \n", "
\n", " View on QuantumAI\n", " \n", " Run in Google Colab\n", " \n", " View source on GitHub\n", " \n", " Download notebook\n", "
" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2024-08-16T10:22:06.903131Z", "iopub.status.busy": "2024-08-16T10:22:06.902621Z", "iopub.status.idle": "2024-08-16T10:22:24.194600Z", "shell.execute_reply": "2024-08-16T10:22:24.193792Z" }, "id": "614826b3777a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "installing cirq...\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\r\n", "tensorflow-metadata 1.15.0 requires protobuf<4.21,>=3.20.3; python_version < \"3.11\", but you have protobuf 4.25.4 which is incompatible.\u001b[0m\u001b[31m\r\n", "\u001b[0m" ] }, { "name": "stdout", "output_type": "stream", "text": [ "installed cirq.\n" ] } ], "source": [ "try:\n", " import cirq\n", "except ImportError:\n", " print(\"installing cirq...\")\n", " !pip install --quiet cirq\n", " print(\"installed cirq.\")\n", " import cirq\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": { "id": "acebe6240f0b" }, "source": [ "### Basic usage" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2024-08-16T10:22:24.199102Z", "iopub.status.busy": "2024-08-16T10:22:24.198179Z", "iopub.status.idle": "2024-08-16T10:22:24.427778Z", "shell.execute_reply": "2024-08-16T10:22:24.427041Z" }, "id": "c1c6adeeb0e1" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5gElEQVR4nO3deVhUdf//8dfILiCuCCgCLomakXsuqSVumWmbWVaI7TfmVqbm7Z6ilkWLX63uciltT/OuO9fUdkUUy8pcMiU30hQUFBU+vz+6nJ/EImNzgGPPx3XNJfM553ze7xlgfHGWGYcxxggAAMCGKpR1AwAAAJeKIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAP8QzgcDk2cOLGs27AdnjegfCPIAG4wf/58ORwO583T01O1atXSwIEDtX///rJur1Bff/21Jk6cqOPHj5d4m//+97/q1KmTgoODVbFiRdWtW1f9+vXT8uXLnescOHBAEydOVGpq6iX39r///c+S8DBx4kQ5HA4dOXKk0OWRkZG68cYb/3adxYsXKykp6W/PA+DiCDKAG02ePFlvvPGG5s6dq549e+rNN99Up06ddPr06bJurYCvv/5akyZNKnGQeeaZZ3TTTTfJ4XBozJgxeu6553Trrbdq586devvtt53rHThwQJMmTfrbQWbSpEmXvL07nTp1Sv/+979d2oYgA5Qez7JuALic9OzZUy1btpQk3X///apevbpmzJihZcuWqV+/fmXc3aU7d+6cpkyZoq5du2rlypUFlqenp5dBV6XD19e3rFtwWVZWlvz9/cu6DaBUsEcGsNC1114rSdq9e3e+8e3bt+u2225T1apV5evrq5YtW2rZsmX51jl79qwmTZqkBg0ayNfXV9WqVVOHDh20atUq5zqdO3dW586dC9QdOHCgIiMji+xr4sSJGjlypCQpKirKeUjs119/LXT9I0eOKDMzU+3bty90eXBwsCRp3bp1atWqlSQpPj7eOe/8+fMlSV988YVuv/121alTRz4+PgoPD9fw4cN16tSpfL3Pnj1bkvIdrjsvLy9PSUlJatKkiXx9fVWzZk099NBDOnbsWJGP9+/46zkyJ06c0LBhwxQZGSkfHx8FBwera9eu2rx5s6Q/vyeffPKJ9u7d6+z9wu9Fenq67rvvPtWsWVO+vr6KiYnRggULCtQ9evSo7rnnHlWqVEmVK1dWXFyctm7dmu/5lP58vgICArR7927dcMMNCgwM1IABAySV7Pm+cI59+/bpxhtvVEBAgGrVquX8Pnz//fe6/vrr5e/vr4iICC1evNhNzy7w97FHBrDQ+WBQpUoV59gPP/yg9u3bq1atWho9erT8/f317rvvqm/fvvrggw908803S/ozbCQmJur+++9X69atlZmZqU2bNmnz5s3q2rXr3+rrlltu0Y4dO/TWW2/pueeeU/Xq1SVJNWrUKHT94OBg+fn56b///a8effRRVa1atdD1GjVqpMmTJ2v8+PF68MEHnUGuXbt2kqT33ntP2dnZeuSRR1StWjVt3LhRL774on777Te99957kqSHHnpIBw4c0KpVq/TGG28UqPHQQw9p/vz5io+P15AhQ7Rnzx699NJL2rJli7766it5eXld9PH/8ccfhY7n5eVddNuHH35Y77//vgYPHqzGjRvr6NGj+vLLL/XTTz+pefPmGjt2rDIyMvTbb7/pueeekyQFBARI+vMwVefOnbVr1y4NHjxYUVFReu+99zRw4EAdP35cQ4cOdfbRu3dvbdy4UY888oiio6P10UcfKS4urtCezp07p+7du6tDhw565plnVLFiRUkle77Py83NVc+ePdWxY0fNnDlTixYt0uDBg+Xv76+xY8dqwIABuuWWWzR37lzde++9atu2raKioi76fAGWMwD+tnnz5hlJZvXq1eb33383aWlp5v333zc1atQwPj4+Ji0tzbluly5dTNOmTc3p06edY3l5eaZdu3amQYMGzrGYmBjTq1evYut26tTJdOrUqcB4XFyciYiIyDcmyUyYMMF5/+mnnzaSzJ49e0r0GMePH28kGX9/f9OzZ08zdepUk5KSUmC95ORkI8nMmzevwLLs7OwCY4mJicbhcJi9e/c6xxISEkxhL09ffPGFkWQWLVqUb3z58uWFjv/VhAkTjKRib399zv/6vAUFBZmEhIRi6/Tq1avA82+MMUlJSUaSefPNN51jZ86cMW3btjUBAQEmMzPTGGPMBx98YCSZpKQk53q5ubnm+uuvL/DcxsXFGUlm9OjRBeqV9Pk+P8e0adOcY8eOHTN+fn7G4XCYt99+2zm+ffv2As8JUJY4tAS4UWxsrGrUqKHw8HDddttt8vf317Jly1S7dm1Jf+4J+Oyzz9SvXz+dOHFCR44c0ZEjR3T06FF1795dO3fudF7lVLlyZf3www/auXNnWT4kp0mTJmnx4sVq1qyZVqxYobFjx6pFixZq3ry5fvrppxLN4efn5/w6KytLR44cUbt27WSM0ZYtWy66/XvvvaegoCB17drV+dwdOXJELVq0UEBAgNauXVuiPj744AOtWrWqwK1mzZoX3bZy5crasGGDDhw4UKJaF/rf//6nkJAQ3Xnnnc4xLy8vDRkyRCdPntT69eslScuXL5eXl5ceeOAB53oVKlRQQkJCkXM/8sgjBcZcfb7vv/9+59eVK1dWw4YN5e/vn+/8roYNG6py5cr65ZdfSvioAWtxaAlwo9mzZ+uKK65QRkaGXn/9dX3++efy8fFxLt+1a5eMMRo3bpzGjRtX6Bzp6emqVauWJk+erD59+uiKK67QlVdeqR49euiee+7RVVddVVoPp4A777xTd955pzIzM7VhwwbNnz9fixcvVu/evbVt27aLnhi7b98+jR8/XsuWLStwTktGRsZF6+/cuVMZGRnOc3L+qqQnHXfs2NF5OO1CJTmxd+bMmYqLi1N4eLhatGihG264Qffee6/q1q170W337t2rBg0aqEKF/H9DNmrUyLn8/L+hoaHOQ0Tn1a9fv9B5PT09nWH5Qq48376+vgUOLQYFBal27dr5zlE6P27VOUmAqwgygBu1bt3aedVS37591aFDB9111136+eefFRAQ4DwH4/HHH1f37t0LneP8f1YdO3bU7t279dFHH2nlypX6z3/+o+eee05z5851/uXscDhkjCkwR25urhUPz6lSpUrq2rWrunbtKi8vLy1YsEAbNmxQp06ditwmNzdXXbt21R9//KFRo0YpOjpa/v7+2r9/vwYOHFii81Py8vIUHBysRYsWFbq8qHN83Klfv3669tprtWTJEq1cuVJPP/20ZsyYoQ8//FA9e/a0vH5hfHx8CoQjV59vDw+PQucuarywnzugLBBkAIt4eHgoMTFR1113nV566SWNHj3a+Ve7l5eXYmNjLzpH1apVFR8fr/j4eJ08eVIdO3bUxIkTnUGmSpUqhe7iP/+XfXH++lf2pWrZsqUWLFiggwcPFjvv999/rx07dmjBggW69957neMXXoV1sd7q1aun1atXq3379vkOm5S20NBQ/etf/9K//vUvpaenq3nz5po6daozyBTVf0REhL777jvl5eXlCx7bt293Lj//79q1a5WdnZ1vr8yuXbtK3KMrzzdgZ5wjA1ioc+fOat26tZKSknT69GkFBwerc+fOevnll53/8V/o999/d3599OjRfMsCAgJUv3595eTkOMfq1aun7du359tu69at+uqrry7a2/n3GSnJG+JlZ2frm2++KXTZp59+KunPcyeKm/f8X/YX/iVvjNHzzz9f4t769eun3NxcTZkypcA2586dc+ldii9Fbm5ugUMywcHBCgsLy/d98ff3L/RQ2Q033KBDhw7pnXfecY6dO3dOL774ogICApx7tLp3766zZ8/q1Vdfda6Xl5fnvBy6JFx5vgE7Y48MYLGRI0fq9ttv1/z58/Xwww9r9uzZ6tChg5o2baoHHnhAdevW1eHDh/XNN9/ot99+09atWyVJjRs3VufOndWiRQtVrVpVmzZtcl72e96gQYP07LPPqnv37rrvvvuUnp6uuXPnqkmTJsrMzCy2rxYtWkiSxo4dq/79+8vLy0u9e/cu9I3UsrOz1a5dO11zzTXq0aOHwsPDdfz4cS1dulRffPGF+vbtq2bNmkn6M1xVrlxZc+fOVWBgoPz9/dWmTRtFR0erXr16evzxx7V//35VqlRJH3zwQaHnWpzvbciQIerevbs8PDzUv39/derUSQ899JASExOVmpqqbt26ycvLSzt37tR7772n559/XrfddtulfaNK4MSJE6pdu7Zuu+02xcTEKCAgQKtXr1ZycrJmzZqVr/933nlHI0aMUKtWrRQQEKDevXvrwQcf1Msvv6yBAwcqJSVFkZGRev/99/XVV18pKSlJgYGBkv48LNm6dWs99thj2rVrl6Kjo7Vs2TLnZeMl2ZvmyvMN2FqZXS8FXEbOX36dnJxcYFlubq6pV6+eqVevnjl37pwxxpjdu3ebe++914SEhBgvLy9Tq1Ytc+ONN5r333/fud1TTz1lWrdubSpXrmz8/PxMdHS0mTp1qjlz5ky++d98801Tt25d4+3tba6++mqzYsWKEl1+bYwxU6ZMMbVq1TIVKlQo9lLss2fPmldffdX07dvXREREGB8fH1OxYkXTrFkz8/TTT5ucnJx863/00UemcePGxtPTM9/lwj/++KOJjY01AQEBpnr16uaBBx4wW7duLXBJ8blz58yjjz5qatSoYRwOR4FLsV95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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "q = cirq.LineQubit.range(4)\n", "circuit = cirq.Circuit([cirq.H.on_each(*q), cirq.measure(*q)])\n", "result = cirq.Simulator().run(circuit, repetitions=100)\n", "_ = cirq.plot_state_histogram(result, plt.subplot())\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "da358e505449" }, "source": [ "### Plotting circuits with sparse output\n", "If the results have sparse output, you can use the `result.histogram` to compute the histogram and plot only states that have non-zero sample count. For example:" ] }, { "cell_type": "markdown", "metadata": { "id": "3bed4f1d4222" }, "source": [ "#### Default plot\n", "The default call to `cirq.plot_state_histogram` would plot all possible output states (including 0's). This can get messy, especially if the output is sparse." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2024-08-16T10:22:24.431588Z", "iopub.status.busy": "2024-08-16T10:22:24.430959Z", "iopub.status.idle": "2024-08-16T10:22:24.812228Z", "shell.execute_reply": "2024-08-16T10:22:24.811372Z" }, "id": "789958187e7d" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABXHklEQVR4nO3dd3xT5f8+/ittk3Sng+4FlFH2aBllFWgZBcseCkoZyrDMKktU1luLiICDJbKnFmSoyBSK7FlQFCiIrBYQpBtKaV+/P/jlfAhtscVCe/xez8cjD8h955zzyp2Tk6tnJBoRERARERGpkFlJF0BERET0rBhkiIiISLUYZIiIiEi1GGSIiIhItRhkiIiISLUYZIiIiEi1GGSIiIhItRhkiIiISLUYZIiIiEi1GGSI/h+h0WgwadKkki5DdThuRKUbgwxRMVi6dCk0Go1ys7CwgJeXF/r27Yvr16+XdHn5OnDgACZNmoTk5ORCT/Pdd98hJCQErq6usLa2Rvny5dGjRw9s3bpVeUxiYiImTZqE+Pj4Z65ty5YtzyU8TJo0CRqNBrdv3863v2zZsnjppZf+9XJWr16N2bNn/+v5ENE/Y5AhKkZTpkzBihUrMH/+fISHh2PlypUICQnB/fv3S7q0PA4cOIDJkycXOsjMmDEDHTp0gEajwfjx4zFr1ix07doVCQkJWLt2rfK4xMRETJ48+V8HmcmTJz/z9MXp3r17ePfdd4s0DYMM0YtjUdIFEP2XhIeHIygoCADw+uuvo0yZMvjoo4+wefNm9OjRo4Sre3YPHz7E1KlT0apVK2zfvj1P/61bt0qgqhfD0tKypEsosoyMDNjY2JR0GUQvBPfIED1HTZs2BQBcvHjRpP3s2bPo1q0bnJycYGlpiaCgIGzevNnkMdnZ2Zg8eTIqVqwIS0tLODs7o0mTJtixY4fymObNm6N58+Z5ltu3b1+ULVu2wLomTZqE0aNHAwDKlSunHBL7888/83387du3kZqaisaNG+fb7+rqCgDYs2cP6tWrBwDo16+fMt+lS5cCAH7++Wd0794dvr6+0Ov18PHxwahRo3Dv3j2T2ufMmQMAJofrjHJzczF79mxUq1YNlpaWcHNzw6BBg3D37t0Cn++/8eQ5MmlpaRg5ciTKli0LvV4PV1dXtGrVCidOnADw6DX54YcfcPnyZaX2x1+LW7duYcCAAXBzc4OlpSVq1aqFZcuW5VnunTt38Nprr8He3h4ODg6IjIzEqVOnTMYTeDRetra2uHjxItq1awc7Ozv07t0bQOHG+/F5XLlyBS+99BJsbW3h5eWlvA6//PILWrZsCRsbG/j5+WH16tXFNLpE/x73yBA9R8Zg4OjoqLSdOXMGjRs3hpeXF8aNGwcbGxt888036NSpE9avX4/OnTsDeBQ2YmJi8Prrr6N+/fpITU3FsWPHcOLECbRq1epf1dWlSxecP38ea9aswaxZs1CmTBkAgIuLS76Pd3V1hZWVFb777jsMGzYMTk5O+T6uSpUqmDJlCt5//30MHDhQCXKNGjUCAMTGxiIzMxNDhgyBs7Mzjhw5gs8//xzXrl1DbGwsAGDQoEFITEzEjh07sGLFijzLGDRoEJYuXYp+/fph+PDhuHTpEr744gucPHkS+/fvh1ar/cfn//fff+fbnpub+4/TDh48GOvWrcPQoUNRtWpV3LlzB/v27cPvv/+OunXrYsKECUhJScG1a9cwa9YsAICtrS2AR4epmjdvjgsXLmDo0KEoV64cYmNj0bdvXyQnJ2PEiBFKHREREThy5AiGDBmCgIAAbNq0CZGRkfnW9PDhQ7Rp0wZNmjTBjBkzYG1tDaBw422Uk5OD8PBwNGvWDNOnT8eqVaswdOhQ2NjYYMKECejduze6dOmC+fPno0+fPggODka5cuX+cbyInjshon9tyZIlAkB27twpf/31l1y9elXWrVsnLi4uotfr5erVq8pjQ0NDpUaNGnL//n2lLTc3Vxo1aiQVK1ZU2mrVqiXt27d/6nJDQkIkJCQkT3tkZKT4+fmZtAGQiRMnKvc//vhjASCXLl0q1HN8//33BYDY2NhIeHi4fPDBB3L8+PE8jzt69KgAkCVLluTpy8zMzNMWExMjGo1GLl++rLRFRUVJfpunn3/+WQDIqlWrTNq3bt2ab/uTJk6cKACeentyzJ8cN4PBIFFRUU9dTvv27fOMv4jI7NmzBYCsXLlSaXvw4IEEBweLra2tpKamiojI+vXrBYDMnj1beVxOTo60bNkyz9hGRkYKABk3blye5RV2vI3z+PDDD5W2u3fvipWVlWg0Glm7dq3Sfvbs2TxjQlSSeGiJqBiFhYXBxcUFPj4+6NatG2xsbLB582Z4e3sDeLQn4KeffkKPHj2QlpaG27dv4/bt27hz5w7atGmDhIQE5SonBwcHnDlzBgkJCSX5lBSTJ0/G6tWrUadOHWzbtg0TJkxAYGAg6tati99//71Q87CyslL+n5GRgdu3b6NRo0YQEZw8efIfp4+NjYXBYECrVq2Usbt9+zYCAwNha2uL3bt3F6qO9evXY8eOHXlubm5u/zitg4MDDh8+jMTExEIt63FbtmyBu7s7XnnlFaVNq9Vi+PDhSE9PR1xcHABg69at0Gq1eOONN5THmZmZISoqqsB5DxkyJE9bUcf79ddfV/7v4OCAypUrw8bGxuT8rsqVK8PBwQF//PFHIZ810fPFQ0tExWjOnDmoVKkSUlJSsHjxYuzduxd6vV7pv3DhAkQE7733Ht57771853Hr1i14eXlhypQp6NixIypVqoTq1aujbdu2eO2111CzZs0X9XTyeOWVV/DKK68gNTUVhw8fxtKlS7F69WpERETg119//ccTY69cuYL3338fmzdvznNOS0pKyj8uPyEhASkpKco5OU8q7EnHzZo1Uw6nPa4wJ/ZOnz4dkZGR8PHxQWBgINq1a4c+ffqgfPny/zjt5cuXUbFiRZiZmf4NWaVKFaXf+K+Hh4dyiMioQoUK+c7XwsJCCcuPK8p4W1pa5jm0aDAY4O3tbXKOkrH9eZ2TRFRUDDJExah+/frKVUudOnVCkyZN0KtXL5w7dw62trbKORhvv/022rRpk+88jB9WzZo1w8WLF7Fp0yZs374dX331FWbNmoX58+crfzlrNBqISJ555OTkPI+np7C3t0erVq3QqlUraLVaLFu2DIcPH0ZISEiB0+Tk5KBVq1b4+++/MXbsWAQEBMDGxgbXr19H3759C3V+Sm5uLlxdXbFq1ap8+ws6x6c49ejRA02bNsWGDRuwfft2fPzxx/joo4/w7bffIjw8/LkvPz96vT5POCrqeJubm+c774La81vviEoCgwzRc2Jubo6YmBi0aNECX3zxBcaNG6f81a7VahEWFvaP83ByckK/fv3Qr18/pKeno1mzZpg0aZISZBwdHfPdxW/8y/5pnvwr+1kFBQVh2bJlSEpKeup8f/nlF5w/fx7Lli1Dnz59lPbHr8L6p9r8/f2xc+dONG7c2OSwyYvm4eGBN998E2+++SZu3bqFunXr4oMPPlCCTEH1+/n54fTp08jNzTUJHmfPnlX6jf/u3r0bmZmZJntlLly4UOgaizLeRGrGc2SInqPmzZujfv36mD17Nu7fvw9XV1c0b94cCxYsUD74H/fXX38p/79z545Jn62tLSpUqICsrCylzd/fH2fPnjWZ7tSpU9i/f/8/1mb8npHCfCFeZmYmDh48mG/fjz/+CODRuRNPm6/xL/vH/5IXEXz66aeFrq1Hjx7IycnB1KlT80zz8OHDIn1L8bPIycnJc0jG1dUVnp6eJq+LjY1NvofK2rVrhxs3buDrr79W2h4+fIjPP/8ctra2yh6tNm3aIDs7GwsXLlQel5ubq1wOXRhFGW8iNeMeGaLnbPTo0ejevTuWLl2KwYMHY86cOWjSpAlq1KiBN954A+XLl8fNmzdx8OBBXLt2DadOnQIAVK1aFc2bN0dgYCCcnJxw7Ngx5bJfo/79+2PmzJlo06YNBgwYgFu3bmH+/PmoVq0aUlNTn1pXYGAgAGDChAl4+eWXodVqERERke8XqWVmZqJRo0Zo2LAh2rZtCx8fHyQnJ2Pjxo34+eef0alTJ9SpUwfAo3Dl4OCA+fPnw87ODjY2NmjQoAECAgLg7++Pt99+G9evX4e9vT3Wr1+f77kWxtqGDx+ONm3awNzcHC+//DJCQkIwaNAgxMTEID4+Hq1bt4ZWq0VCQgJiY2Px6aefolu3bs/2QhVCWloavL290a1bN9SqVQu2trbYuXMnjh49ik8++cSk/q+//hrR0dGoV68ebG1tERERgYEDB2LBggXo27cvjh8/jrJly2LdunXYv38/Zs+eDTs7OwCPDkvWr18fb731Fi5cuICAgABs3rxZuWy8MHvTijLeRKpWYtdLEf2HGC+/Pnr0aJ6+nJwc8ff3F39/f3n48KGIiFy8eFH69Okj7u7uotVqxcvLS1566SVZt26dMt3//vc/qV+/vjg4OIiVlZUEBATIBx98IA8ePDCZ/8qVK6V8+fKi0+mkdu3asm3btkJdfi0iMnXqVPHy8hIzM7OnXoqdnZ0tCxculE6dOomfn5/o9XqxtraWOnXqyMcffyxZWVkmj9+0aZNUrVpVLCwsTC4X/u233yQsLExsbW2lTJky8sYbb8ipU6fyXFL88OFDGTZsmLi4uIhGo8lzKfaXX34pgYGBYmVlJXZ2dlKjRg0ZM2aMJCYm5lu/kfHy67/++ivffj8/v6defp2VlSWjR4+WWrVqiZ2dndjY2EitWrVk7ty5JtOkp6dLr169xMHBQQCYvBY3b96Ufv36SZkyZUSn00mNGjXyvVT9r7/+kl69eomdnZ0YDAbp27ev7N+/XwCYXA4dGRkpNjY2+T6fwo53QfMICQmRatWqFWqciEqKRoRnbBERqcHGjRvRuXNn7Nu3r8BvWSb6fw2DDBFRKXTv3j2TE5pzcnLQunVrHDt2DDdu3CjRk52JShOeI0NEVAoNGzYM9+7dQ3BwMLKysvDtt9/iwIED+PDDDxliiB7DPTJERKXQ6tWr8cknn+DChQu4f/8+KlSogCFDhpic7E1EDDJERESkYvweGSIiIlItBhkiIiJSrf/8yb65ublITEyEnZ1dsX0lOxERET1fIoK0tDR4enrm+S2xx/3ng0xiYiJ8fHxKugwiIiJ6BlevXs33192N/vNBxviV31evXoW9vX0JV0NERESFkZqaCh8fH+VzvCD/+SBjPJxkb2/PIENERKQy/3RaCE/2JSIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1bIo6QKIiIhIHcqO+yFP25/T2pdAJf+He2SIiIhItRhkiIiISLUYZIiIiEi1GGSIiIhItRhkiIiISLUYZIiIiEi1GGSIiIhItRhkiIiISLVKNMhMmjQJGo3G5BYQEKD0379/H1FRUXB2doatrS26du2KmzdvlmDFREREVJqU+B6ZatWqISkpSbnt27dP6Rs1ahS+++47xMbGIi4uDomJiejSpUsJVktERESlSYn/RIGFhQXc3d3ztKekpGDRokVYvXo1WrZsCQBYsmQJqlSpgkOHDqFhw4YvulQiIiIqZUp8j0xCQgI8PT1Rvnx59O7dG1euXAEAHD9+HNnZ2QgLC1MeGxAQAF9fXxw8eLDA+WVlZSE1NdXkRkRERP9NJRpkGjRogKVLl2Lr1q2YN28eLl26hKZNmyItLQ03btyATqeDg4ODyTRubm64ceNGgfOMiYmBwWBQbj4+Ps/5WRAREVFJKdFDS+Hh4cr/a9asiQYNGsDPzw/ffPMNrKysnmme48ePR3R0tHI/NTWVYYaIiOg/qsQPLT3OwcEBlSpVwoULF+Du7o4HDx4gOTnZ5DE3b97M95waI71eD3t7e5MbERER/TeVqiCTnp6OixcvwsPDA4GBgdBqtdi1a5fSf+7cOVy5cgXBwcElWCURERGVFiV6aOntt99GREQE/Pz8kJiYiIkTJ8Lc3ByvvPIKDAYDBgwYgOjoaDg5OcHe3h7Dhg1DcHAwr1giIiIiACUcZK5du4ZXXnkFd+7cgYuLC5o0aYJDhw7BxcUFADBr1iyYmZmha9euyMrKQps2bTB37tySLJmIiIhKEY2ISEkX8TylpqbCYDAgJSWF58sQERH9C2XH/ZCn7c9p7Z/Lsgr7+V2qzpEhIiIiKgoGGSIiIlItBhkiIiJSLQYZIiIiUi0GGSIiIlItBhkiIiJSLQYZIiIiUq0S/UI8tcvvenrg+V1TT0RERKa4R4aIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUi0GGiIiIVItBhoiIiFSLQYaIiIhUq9QEmWnTpkGj0WDkyJFK2/379xEVFQVnZ2fY2tqia9euuHnzZskVSURERKVKqQgyR48exYIFC1CzZk2T9lGjRuG7775DbGws4uLikJiYiC5dupRQlURERFTalHiQSU9PR+/evbFw4UI4Ojoq7SkpKVi0aBFmzpyJli1bIjAwEEuWLMGBAwdw6NChEqyYiIiISosSDzJRUVFo3749wsLCTNqPHz+O7Oxsk/aAgAD4+vri4MGDBc4vKysLqampJjciIiL6b7IoyYWvXbsWJ06cwNGjR/P03bhxAzqdDg4ODibtbm5uuHHjRoHzjImJweTJk4u7VCIiIiqFSmyPzNWrVzFixAisWrUKlpaWxTbf8ePHIyUlRbldvXq12OZNREREpUuJBZnjx4/j1q1bqFu3LiwsLGBhYYG4uDh89tlnsLCwgJubGx48eIDk5GST6W7evAl3d/cC56vX62Fvb29yIyIiov+mEju0FBoail9++cWkrV+/fggICMDYsWPh4+MDrVaLXbt2oWvXrgCAc+fO4cqVKwgODi6JkomIiKiUKbEgY2dnh+rVq5u02djYwNnZWWkfMGAAoqOj4eTkBHt7ewwbNgzBwcFo2LBhSZRMREREpUyJnuz7T2bNmgUzMzN07doVWVlZaNOmDebOnVvSZREREVEpUaqCzJ49e0zuW1paYs6cOZgzZ07JFERERESlWol/jwwRERHRs2KQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVYpAhIiIi1WKQISIiItVikCEiIiLVKnKQWb58ObKysvK0P3jwAMuXLy+WooiIiIgKo8hBpl+/fkhJScnTnpaWhn79+hVLUURERESFUeQgIyLQaDR52q9duwaDwVAsRREREREVhkVhH1inTh1oNBpoNBqEhobCwuL/Js3JycGlS5fQtm3b51IkERERUX4KHWQ6deoEAIiPj0ebNm1ga2ur9Ol0OpQtWxZdu3Yt9gKJiIiIClLoIDNx4kQAQNmyZdGzZ09YWlo+t6KIiIiICqPQQcYoMjISwKOrlG7duoXc3FyTfl9f3+KpjIiIiOgfFDnIJCQkoH///jhw4IBJu/Ek4JycnGIrjoiIiOhpihxk+vbtCwsLC3z//ffw8PDI9womIiIiohehyEEmPj4ex48fR0BAwPOoh4iIiKjQivw9MlWrVsXt27efRy1ERERERVLkIPPRRx9hzJgx2LNnD+7cuYPU1FSTGxEREdGLUuRDS2FhYQCA0NBQk3ae7EtEREQvWpGDzO7du59HHURERERFVuQgExIS8jzqICIiIiqyIgeZvXv3PrW/WbNmz1wMERERUVEUOcg0b948T9vj3yXDc2SIiIjoRSnyVUt37941ud26dQtbt25FvXr1sH379iLNa968eahZsybs7e1hb2+P4OBg/Pjjj0r//fv3ERUVBWdnZ9ja2qJr1664efNmUUsmIiKi/6gi75ExGAx52lq1agWdTofo6GgcP3680PPy9vbGtGnTULFiRYgIli1bho4dO+LkyZOoVq0aRo0ahR9++AGxsbEwGAwYOnQounTpgv379xe1bCIiIvoPKnKQKYibmxvOnTtXpGkiIiJM7n/wwQeYN28eDh06BG9vbyxatAirV69Gy5YtAQBLlixBlSpVcOjQITRs2LC4SiciIiKVKnKQOX36tMl9EUFSUhKmTZuG2rVrP3MhOTk5iI2NRUZGBoKDg3H8+HFkZ2cr31sDAAEBAfD19cXBgwcZZIiIiKjoQaZ27drQaDQQEZP2hg0bYvHixUUu4JdffkFwcDDu378PW1tbbNiwAVWrVkV8fDx0Oh0cHBxMHu/m5oYbN24UOL+srCxkZWUp9/ltw0RERP9dRQ4yly5dMrlvZmYGFxcXWFpaPlMBlStXRnx8PFJSUrBu3TpERkYiLi7umeYFADExMZg8efIzT09ERETqUeQg4+fnV6wF6HQ6VKhQAQAQGBiIo0eP4tNPP0XPnj3x4MEDJCcnm+yVuXnzJtzd3Quc3/jx4xEdHa3cT01NhY+PT7HWTERERKVDkS+/BoC4uDhERESgQoUKqFChAjp06ICff/65WArKzc1FVlYWAgMDodVqsWvXLqXv3LlzuHLlCoKDgwucXq/XK5dzG29ERET031TkPTIrV65Ev3790KVLFwwfPhwAsH//foSGhmLp0qXo1atXoec1fvx4hIeHw9fXF2lpaVi9ejX27NmDbdu2wWAwYMCAAYiOjoaTkxPs7e0xbNgwBAcH80RfIiIiAvAMQeaDDz7A9OnTMWrUKKVt+PDhmDlzJqZOnVqkIHPr1i306dMHSUlJMBgMqFmzJrZt24ZWrVoBAGbNmgUzMzN07doVWVlZaNOmDebOnVvUkomIiOg/SiNPXn70D/R6Pc6cOaOc12J04cIFVK9eHffv3y/WAv+t1NRUGAwGpKSkFPthprLjfsi3/c9p7Yt1OURERKVBfp97z+szr7Cf30U+R8bHx8fkvBWjnTt38qRaIiIieqGKfGjprbfewvDhwxEfH49GjRoBeHSOzNKlS/Hpp58We4FEREREBSlykBkyZAjc3d3xySef4JtvvgEAVKlSBV9//TU6duxY7AUSERERFeSZfmupc+fO6Ny5c3HXQkRERFQkRT5H5ujRozh8+HCe9sOHD+PYsWPFUhQRERFRYRQ5yERFReHq1at52q9fv46oqKhiKYqIiIioMIocZH777TfUrVs3T3udOnXw22+/FUtRRERERIVR5CCj1+tx8+bNPO1JSUmwsHimU26IiIiInkmRg0zr1q0xfvx4pKSkKG3Jycl45513lG/kJSIiInoRirwLZcaMGWjWrBn8/PxQp04dAEB8fDzc3NywYsWKYi+QiIiIqCBFDjJeXl44ffo0Vq1ahVOnTsHKygr9+vXDK6+8Aq1W+zxqJCIiIsrXM53UYmNjg4EDBxZ3LURERERFUuRzZIiIiIhKCwYZIiIiUi0GGSIiIlItBhkiIiJSrSIHmfLly+POnTt52pOTk1G+fPliKYqIiIioMIocZP7880/k5OTkac/KysL169eLpSgiIiKiwij05debN29W/r9t2zYYDAblfk5ODnbt2oWyZcsWa3FERERET1PoINOpUycAgEajQWRkpEmfVqtF2bJl8cknnxRrcURERERPU+ggk5ubCwAoV64cjh49ijJlyjy3ooiIiIgKo8jf7Hvp0qXnUQcRERFRkRUqyHz22WeFnuHw4cOfuRgiIiKioihUkJk1a1ahZqbRaBhkiIiI6IUpVJDh4SQiIiIqjfjNvkRERKRaRT7Zt3///k/tX7x48TMXQ0RERFQURQ4yd+/eNbmfnZ2NX3/9FcnJyWjZsmWxFUZERET0T4ocZDZs2JCnLTc3F0OGDIG/v3+xFEVERERUGMVyjoyZmRmio6MLfXUTERERUXEotpN9L168iIcPHxbX7IiIiIj+UZEPLUVHR5vcFxEkJSXhhx9+yPMbTERERETPU5GDzMmTJ03um5mZwcXFBZ988sk/XtFEREREVJyKHGR27979POogIiIiKrIinyNz7949ZGZmKvcvX76M2bNnY/v27cVaGBEREdE/KXKQ6dixI5YvXw4ASE5ORv369fHJJ5+gY8eOmDdvXrEXSERERFSQIgeZEydOoGnTpgCAdevWwd3dHZcvX8by5cuL9CvZRERERP9WkYNMZmYm7OzsAADbt29Hly5dYGZmhoYNG+Ly5cvFXiARERFRQYocZCpUqICNGzfi6tWr2LZtG1q3bg0AuHXrFuzt7Yu9QCIiIqKCFDnIvP/++3j77bdRtmxZ1K9fH8HBwQAe7Z2pU6dOsRdIREREVJAiX37drVs3NGnSBElJSahVq5bSHhoais6dOxdrcURERERP80w/UeDu7g47Ozvs2LED9+7dAwDUq1cPAQEBxVocERER0dMUOcjcuXMHoaGhqFSpEtq1a4ekpCQAwIABA/DWW28Ve4FEREREBSlykBk1ahS0Wi2uXLkCa2trpb1nz57YunVrsRZHRERE9DRFPkdm+/bt2LZtG7y9vU3aK1asyMuviYiI6IUq8h6ZjIwMkz0xRn///Tf0en2xFEVERERUGEUOMk2bNlV+ogAANBoNcnNzMX36dLRo0aJYiyMiIiJ6miIfWpo+fTpCQ0Nx7NgxPHjwAGPGjMGZM2fw999/Y//+/c+jRiIiIqJ8FXmPTPXq1XH+/Hk0adIEHTt2REZGBrp06YKTJ0/C39//edRIRERElK8i7ZHJzs5G27ZtMX/+fEyYMOF51URERERUKEXaI6PVanH69OnnVQsRERFRkRT50NKrr76KRYsWPY9aiIiIiIqkyCf7Pnz4EIsXL8bOnTsRGBgIGxsbk/6ZM2cWW3FERERET1PkIPPrr7+ibt26AIDz58+b9Gk0muKpioiIiKgQihxkdu/e/TzqICIiIiqyZ/r1ayIiIqLSgEGGiIiIVKtEg0xMTAzq1asHOzs7uLq6olOnTjh37pzJY+7fv4+oqCg4OzvD1tYWXbt2xc2bN0uoYiIiIipNSjTIxMXFISoqCocOHcKOHTuQnZ2N1q1bIyMjQ3nMqFGj8N133yE2NhZxcXFITExEly5dSrBqIiIiKi2KfLJvcdq6davJ/aVLl8LV1RXHjx9Hs2bNkJKSgkWLFmH16tVo2bIlAGDJkiWoUqUKDh06hIYNG5ZE2URERFRKlKpzZFJSUgAATk5OAIDjx48jOzsbYWFhymMCAgLg6+uLgwcP5juPrKwspKammtyIiIjov6nUBJnc3FyMHDkSjRs3RvXq1QEAN27cgE6ng4ODg8lj3dzccOPGjXznExMTA4PBoNx8fHyed+lERERUQkpNkImKisKvv/6KtWvX/qv5jB8/HikpKcrt6tWrxVQhERERlTYleo6M0dChQ/H9999j79698Pb2Vtrd3d3x4MEDJCcnm+yVuXnzJtzd3fOdl16vh16vf94lExERUSlQontkRARDhw7Fhg0b8NNPP6FcuXIm/YGBgdBqtdi1a5fSdu7cOVy5cgXBwcEvulwiIiIqZUp0j0xUVBRWr16NTZs2wc7OTjnvxWAwwMrKCgaDAQMGDEB0dDScnJxgb2+PYcOGITg4mFcsERERUckGmXnz5gEAmjdvbtK+ZMkS9O3bFwAwa9YsmJmZoWvXrsjKykKbNm0wd+7cF1wpERERlUYlGmRE5B8fY2lpiTlz5mDOnDkvoCIiIiJSk1Jz1RIRERFRUTHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqMcgQERGRajHIEBERkWoxyBAREZFqlWiQ2bt3LyIiIuDp6QmNRoONGzea9IsI3n//fXh4eMDKygphYWFISEgomWKJiIio1CnRIJORkYFatWphzpw5+fZPnz4dn332GebPn4/Dhw/DxsYGbdq0wf37919wpURERFQaWZTkwsPDwxEeHp5vn4hg9uzZePfdd9GxY0cAwPLly+Hm5oaNGzfi5ZdffpGlEhERUSlUas+RuXTpEm7cuIGwsDClzWAwoEGDBjh48GCB02VlZSE1NdXkRkRERP9NpTbI3LhxAwDg5uZm0u7m5qb05ScmJgYGg0G5+fj4PNc6iYiIqOSU2iDzrMaPH4+UlBTldvXq1ZIuiYiIiJ6TUhtk3N3dAQA3b940ab9586bSlx+9Xg97e3uTGxEREf03ldogU65cObi7u2PXrl1KW2pqKg4fPozg4OASrIyIiIhKixK9aik9PR0XLlxQ7l+6dAnx8fFwcnKCr68vRo4cif/973+oWLEiypUrh/feew+enp7o1KlTyRVNREREpUaJBpljx46hRYsWyv3o6GgAQGRkJJYuXYoxY8YgIyMDAwcORHJyMpo0aYKtW7fC0tKypEomIiKiUqREg0zz5s0hIgX2azQaTJkyBVOmTHmBVREREZFalNpzZIiIiIj+CYMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqRaDDBEREakWgwwRERGpFoMMERERqZYqgsycOXNQtmxZWFpaokGDBjhy5EhJl0RERESlQKkPMl9//TWio6MxceJEnDhxArVq1UKbNm1w69atki6NiIiISlipDzIzZ87EG2+8gX79+qFq1aqYP38+rK2tsXjx4pIujYiIiEpYqQ4yDx48wPHjxxEWFqa0mZmZISwsDAcPHizByoiIiKg0sCjpAp7m9u3byMnJgZubm0m7m5sbzp49m+80WVlZyMrKUu6npKQAAFJTU4u9vtyszHzbn8eyiIiISlp+n3vP6zPPOF8ReerjSnWQeRYxMTGYPHlynnYfH58XVoNh9gtbFBERUYl63p95aWlpMBgMBfaX6iBTpkwZmJub4+bNmybtN2/ehLu7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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "q = cirq.LineQubit.range(6)\n", "circuit = cirq.Circuit([cirq.H(q[0]), [cirq.CNOT(q[0], q[i]) for i in range(1, 6, 1)], cirq.measure(*q, key='measure_all')])\n", "result = cirq.Simulator().run(circuit, repetitions=100)\n", "_ = cirq.plot_state_histogram(result, plt.subplot())\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "d7c05a17460b" }, "source": [ "#### Sparse plots\n", "To plot only non-zero entries in the histogram, you can first compute a histogram using `result.histogram()` and pass its result to `cirq.plot_state_histogram`" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2024-08-16T10:22:24.816130Z", "iopub.status.busy": "2024-08-16T10:22:24.815471Z", "iopub.status.idle": "2024-08-16T10:22:24.916387Z", "shell.execute_reply": "2024-08-16T10:22:24.915697Z" }, "id": "2405b58effd0" }, "outputs": [ { "data": { "image/png": "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/v73v+vvf/+7MjMz1aZNG02bNs0RZEqqv169evr2229VWFjoFDx2797t2H7xv2vXrtWZM2eczsrs27ev1DW6crwBkzFHBqhA3bp1U/v27ZWSkqJz584pNDRU3bp102uvveb4xf9Hx44dc3x94sQJp22BgYFq1KiR8vLyHG0NGzbU7t27nfbbtWuXNm7ceNnaLj5npDQPxDtz5ow2bdpU7LbPPvtM0u9zJy417sW/7P/4l7xlWXrxxRdLXdugQYNUUFCgqVOnFtnnwoULLj2luCwKCgqKXJIJDQ1VrVq1nH4uAQEBxV4qu/nmm5Wenq53333X0XbhwgW9/PLLCgwMdJzRiouL0/nz5/XGG284+hUWFjpuhy4NV443YDLOyAAVbOzYsbrzzjs1f/58PfLII5o1a5Y6d+6s6667Tg8++KAaNGigjIwMbdq0SYcPH9auXbskSc2aNVO3bt0UHR2tqlWratu2bY7bfi+6//779cILLyguLk7Dhg1TZmam5syZo+bNmysnJ+eSdUVHR0uSnnrqKd19993y8fFR3759i32Q2pkzZ9SpUyd17NhRN910kyIiIpSVlaVly5Zpw4YN6t+/v1q3bi3p93AVEhKiOXPmKCgoSAEBAerQoYOioqLUsGFDjRkzRkeOHFFwcLDef//9YudaXKxt1KhRiouLU6VKlXT33Xera9euevjhh5WcnKydO3eqd+/e8vHx0d69e7VkyRK9+OKLuuOOO8r2gyqFU6dOqU6dOrrjjjvUsmVLBQYGavXq1dq6datmzJjhVP+7776rpKQktWvXToGBgerbt68eeughvfbaaxo6dKhSU1MVGRmppUuXauPGjUpJSVFQUJCk3y9Ltm/fXo8//rj27dunqKgoLV++3HHbeGnOprlyvAGjue1+KeAqcvH2661btxbZVlBQYDVs2NBq2LChdeHCBcuyLGv//v3WfffdZ4WHh1s+Pj5W7dq1rVtvvdVaunSpY79//etfVvv27a2QkBCrcuXKVlRUlDVt2jQrPz/fafy3337batCggeXr62u1atXKWrlyZaluv7Ysy5o6dapVu3Zty8vL65K3Yp8/f9564403rP79+1v16tWz/Pz8rCpVqlitW7e2nnvuOSsvL8+p/4cffmg1a9bM8vb2drpd+Mcff7RiY2OtwMBAq3r16taDDz5o7dq1q8gtxRcuXLBG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HsfX15dPLwdQKpyRAVBqubm5uu+++xQYGKiaNWtqxowZ6tatmx577DFHH5vNpmXLljntFxISovnz5zu17d69W506dZK/v79atGih9evXO7b98SzIunXrlJCQoOzsbNlsNtlsNk2aNKnY+nbt2qXu3bsrKChIwcHBio6O1rZt2y45xltvvaW2bdsqKChI4eHhuueee5SZmSnp98tg3bt3lyRdc801stlsGjp0qKTfP2k5OTlZ9evXV+XKldWyZUstXbq0zMcWQNkQZACU2tixY7V+/Xp9+OGHWrVqldatW6ft27eXeazHH39cO3bsUExMjPr27asTJ04U6depUyelpKQoODhYaWlpSktL05gxY4odc8iQIapTp462bt2q1NRUjRs3Tj4+Ppcc4/z585o6dap27dqlZcuW6ZdffnGElYiICL3//vuSpD179igtLU0vvviiJCk5OVkLFy7UnDlz9MMPP2j06NG69957nQIZgIrHpSUApXL69GnNnTtXb7/9tnr27ClJWrBggerUqVOm8UaMGKGBAwdKkmbPnq0VK1Zo7ty5euKJJ5z6+fr6ym63y2azXfZy08GDBzV27FhFRUVJkho3buzYVtIY999/v+PrBg0a6KWXXlK7du10+vRpBQYGqmrVqpKk0NBQxxybvLw8Pf3001q9erViYmIc+3711Vd67bXX1LVr1zIcEQBlwRkZAKWyf/9+5efnq0OHDo62qlWr6tprry3TeBcDgCR5e3urbdu2+umnn/5SjUlJSXrggQcUGxurZ555Rvv377/sPqmpqerbt6/q1q2roKAgRwg5ePBgifvs27dPZ86cUa9evRQYGOhYFi5cWKrXBFB+CDIAypXNZpNlWU5t58+fvyKvPWnSJP3www+65ZZb9MUXX6hZs2b64IMPSuyfm5uruLg4BQcHa9GiRdq6daujf35+fon7nT59WpL0ySefaOfOnY7lxx9/ZJ4McIURZACUSsOGDeXj46MtW7Y42k6ePKmff/7ZqV+NGjWUlpbmWN+7d6/OnDlTZLzNmzc7vr5w4YJSU1PVtGnTYl/b19dXBQUFpaqzSZMmGj16tFatWqUBAwZo3rx5JY6xe/dunThxQs8884xuvPFGRUVFOSb6/vG1JTnt26xZM/n5+engwYNq1KiR0xIREVGqOgGUD+bIACiVwMBADRs2TGPHjlW1atUUGhqqp556Sl5ezn8P9ejRQ6+88opiYmJUUFCgJ598Uj4+PkXGmzVrlho3bqymTZtq5syZOnnypNN8lT+KjIzU6dOntWbNGrVs2VJVqlRRlSpVnPqcPXtWY8eO1R133KH69evr8OHD2rp1q2MeTnFj1K1bV76+vnr55Zf1yCOP6Pvvv9fUqVOdxq1Xr55sNps+/vhj3XzzzapcubKCgoI0ZswYjR49WoWFhercubOys7O1ceNGBQcHKz4+/q8cagCusACglE6dOmXde++9VpUqVaywsDBr+vTpVteuXa1HH33U0efIkSNW7969rYCAAKtx48bWp59+atntdmvevHmWZVnWgQMHLEnW4sWLrfbt21u+vr5Ws2bNrC+++MIxxtq1ay1J1smTJx1tjzzyiFWtWjVLkjVx4sQiteXl5Vl33323FRERYfn6+lq1atWyRowYYZ09e/aSYyxevNiKjIy0/Pz8rJiYGGv58uWWJGvHjh2O/aZMmWKFh4dbNpvNio+PtyzLsgoLC62UlBTr2muvtXx8fKwaNWpYcXFx1vr16//qYQbgAptl/eliNgC4oFu3bmrVqpVSUlLcXQqA/0LMkQEAAMYiyAAAAGNxaQkAABiLMzIAAMBYBBkAAGAsggwAADAWQQYAABiLIAMAAIxFkAEAAMYiyAAAAGMRZAAAgLEIMgAAwFj/D83ekPJo7L3UAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "histogram = result.histogram(key = 'measure_all')\n", "_ = cirq.plot_state_histogram(histogram, plt.subplot())\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "7dab59bc0b62" }, "source": [ "### Histogram for processed results.\n", "`result.histogram()` also allows you to pass a `fold_func` parameter that can be used to process the sampled measurement results and convert to a countable value to generate a histogram.\n", "\n", "As an example, suppose you want to plot a histogram of the parity of the number of times a `1` occurs in a measurement result. We can do this using `fold_func` as follows:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2024-08-16T10:22:24.919947Z", "iopub.status.busy": "2024-08-16T10:22:24.919359Z", "iopub.status.idle": "2024-08-16T10:22:25.024260Z", "shell.execute_reply": "2024-08-16T10:22:25.023583Z" }, "id": "64d8a54596bc" }, "outputs": [ { "data": { "image/png": "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IkJ33HGH/P39tXr1ajVv3lzSz2cCPv74Y9111106efKkjh49qqNHj+rYsWNKSEjQ3r177Xc5hYSEaNeuXdq7d68r35LdjBkzlJGRoU6dOmndunV68sknFRsbq86dO+vbb7+t1Rh+fn72r0+dOqWjR4+qR48eMsZox44dF91/+fLlCg4O1sCBA+3H7ujRo4qNjVVAQIA++eSTWtWxcuVKffjhh1WWsLCwi+4bEhKirVu36siRI7V6rV/64IMPFB4erhEjRtjbvLy8NGHCBJWUlCgzM1OStHbtWnl5eenBBx+09/Pw8FBKSkqNY48dO7ZKm7PHe8yYMfavQ0JCdO2118rf399hfte1116rkJAQ/d///V8t3zVQv7i0BNSh+fPnq127dioqKtLrr7+uTz/9VD4+Pvbt+/btkzFGTz/9tJ5++ulqxygoKFCzZs307LPPasiQIWrXrp2uv/563XrrrfrDH/6gG2+88XK9nSpGjBihESNGqLi4WFu3blV6eroyMjI0ePBgff311xedGHvo0CE988wzWr16dZU5LUVFRRd9/b1796qoqMg+J+fXajvpuHfv3vbLab9Um4m9s2fPVlJSkiIiIhQbG6vbbrtN999/v1q1anXRfQ8ePKi2bdvKw8Pxb8j27dvbt5//b5MmTeyXiM5r06ZNteN6enraw/IvOXO8fX19q1xaDA4OVvPmzR3mKJ1vr685SYCzCDJAHeratav9rqWhQ4eqV69euvfee7Vnzx4FBATY52BMmjRJCQkJ1Y5x/pdV7969tX//fr377rtav369/ud//kdz587VwoUL7X8522w2GWOqjFFRUVEfb88uKChIAwcO1MCBA+Xl5aUlS5Zo69at6tOnT437VFRUaODAgTp+/LieeOIJRUdHy9/fXz/++KNGjRpVq/kplZWVaty4sZYtW1bt9prm+NSlu+66SzfffLPeeecdrV+/Xn/961/1l7/8Rf/85z81aNCgen/96vj4+FQJR84e76uuuqrasWtqr+7/O8AVCDJAPbnqqquUlpamfv366e9//7umTJli/6vdy8tL8fHxFx0jNDRUycnJSk5OVklJiXr37q3p06fbg8zVV19d7Sn+83/ZX8iv/8q+VF26dNGSJUuUm5t7wXG/+uorfffdd1qyZInuv/9+e/sv78K6WG2tW7fWRx99pJ49ezpcNrncmjRpoj/+8Y/64x//qIKCAnXu3FnPPfecPcjUVH+LFi305ZdfqrKy0iF47N692779/H8/+eQTnT592uGszL59+2pdozPHG7Ay5sgA9ahv377q2rWr5s2bp9LSUjVu3Fh9+/bVq6++av/F/0s//fST/etjx445bAsICFCbNm1UVlZmb2vdurV2797tsN/OnTu1adOmi9Z2/jkjtXkg3unTp7V58+Zqt/3rX/+S9PPciQuNe/4v+1/+JW+M0UsvvVTr2u666y5VVFRo5syZVfY5d+6cU08pvhQVFRVVLsk0btxYTZs2dfi++Pv7V3up7LbbblNeXp7efvtte9u5c+f0t7/9TQEBAfYzWgkJCSovL9drr71m71dZWWm/Hbo2nDnegJVxRgaoZ5MnT9add96p9PR0PfLII5o/f7569eqlG264QQ8++KBatWql/Px8bd68WT/88IN27twpSerQoYP69u2r2NhYhYaGatu2bfbbfs974IEH9OKLLyohIUGjR49WQUGBFi5cqOuuu07FxcUXrCs2NlaS9OSTT+qee+6Rl5eXBg8eXO2D1E6fPq0ePXqoe/fuuvXWWxUREaHCwkKtWrVKn332mYYOHapOnTpJ+jlchYSEaOHChQoMDJS/v7+6deum6OhotW7dWpMmTdKPP/6ooKAgrVy5stq5FudrmzBhghISEnTVVVfpnnvuUZ8+ffTwww8rLS1NOTk5uuWWW+Tl5aW9e/dq+fLleumll3THHXdc2jeqFk6ePKnmzZvrjjvuUExMjAICAvTRRx8pKytLc+bMcaj/7bffVmpqqm666SYFBARo8ODBeuihh/Tqq69q1KhRys7OVlRUlFasWKFNmzZp3rx5CgwMlPTzZcmuXbvqscce0759+xQdHa3Vq1fbbxuvzdk0Z443YGkuu18KuIKcv/06KyuryraKigrTunVr07p1a3Pu3DljjDH79+83999/vwkPDzdeXl6mWbNm5ne/+51ZsWKFfb8///nPpmvXriYkJMT4+fmZ6Oho89xzz5mzZ886jP/mm2+aVq1aGW9vb9OxY0ezbt26Wt1+bYwxM2fONM2aNTMeHh4XvBW7vLzcvPbaa2bo0KGmRYsWxsfHxzRo0MB06tTJ/PWvfzVlZWUO/d99913ToUMH4+np6XC78DfffGPi4+NNQECAueaaa8yDDz5odu7cWeWW4nPnzpnx48ebRo0aGZvNVuVW7P/+7/82sbGxxs/PzwQGBpobbrjBPP744+bIkSPV1n/e+duvf/rpp2q3t2jR4oK3X5eVlZnJkyebmJgYExgYaPz9/U1MTIx55ZVXHPYpKSkx9957rwkJCTGSHL4X+fn5Jjk52VxzzTXG29vb3HDDDdXeqv7TTz+Ze++91wQGBprg4GAzatQos2nTJiPJ4XbopKQk4+/vX+37qe3xrmmMPn36mOuuu65WxwlwFZsxzNgCACtYtWqVhg0bps8//7zGpywD/2kIMgDghs6cOeMwobmiokK33HKLtm3bpry8PJdOdgbcCXNkAMANjR8/XmfOnFFcXJzKysr0z3/+U1988YWef/55QgzwC5yRAQA3lJGRoTlz5mjfvn0qLS1VmzZtNHbsWIfJ3gAIMgAAwMJ4jgwAALAsggwAALCsK36yb2VlpY4cOaLAwMA6eyQ7AACoX8YYnTx5Uk2bNq3yWWK/dMUHmSNHjigiIsLVZQAAgEtw+PDhaj/d/bwrPsicf+T34cOHFRQU5OJqAABAbRQXFysiIsL+e7wmV3yQOX85KSgoiCADAIDFXGxaCJN9AQCAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZXm6ugAri5qyxtUlAG7t+1m3u7oEAFc4zsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLcmmQmT59umw2m8MSHR1t315aWqqUlBQ1bNhQAQEBSkxMVH5+vgsrBgAA7sTlZ2Suu+465ebm2pfPP//cvm3ixIl67733tHz5cmVmZurIkSMaPny4C6sFAADuxOUfUeDp6anw8PAq7UVFRVq0aJEyMjLUv39/SdLixYvVvn17bdmyRd27d7/cpQIAADfj8jMye/fuVdOmTdWqVSuNHDlShw4dkiRlZ2ervLxc8fHx9r7R0dGKjIzU5s2baxyvrKxMxcXFDgsAALgyuTTIdOvWTenp6Vq7dq0WLFigAwcO6Oabb9bJkyeVl5cnb29vhYSEOOwTFhamvLy8GsdMS0tTcHCwfYmIiKjndwEAAFzFpZeWBg0aZP/6xhtvVLdu3dSiRQv94x//kJ+f3yWNOXXqVKWmptrXi4uLCTMAAFyhXH5p6ZdCQkLUrl077du3T+Hh4Tp79qwKCwsd+uTn51c7p+Y8Hx8fBQUFOSwAAODK5FZBpqSkRPv371eTJk0UGxsrLy8vbdiwwb59z549OnTokOLi4lxYJQAAcBcuvbQ0adIkDR48WC1atNCRI0c0bdo0XXXVVRoxYoSCg4M1evRopaamKjQ0VEFBQRo/frzi4uK4YwkAAEhycZD54YcfNGLECB07dkyNGjVSr169tGXLFjVq1EiSNHfuXHl4eCgxMVFlZWVKSEjQK6+84sqSAQCAG7EZY4yri6hPxcXFCg4OVlFRUZ3Pl4masqZOxwOuNN/Put3VJQCwqNr+/narOTIAAADOIMgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLcukD8QDACnhmFFAzVz8vijMyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAstwmyMyaNUs2m02PPvqova20tFQpKSlq2LChAgIClJiYqPz8fNcVCQAA3IpbBJmsrCy9+uqruvHGGx3aJ06cqPfee0/Lly9XZmamjhw5ouHDh7uoSgAA4G5cHmRKSko0cuRIvfbaa7r66qvt7UVFRVq0aJFefPFF9e/fX7GxsVq8eLG++OILbdmyxYUVAwAAd+HyIJOSkqLbb79d8fHxDu3Z2dkqLy93aI+OjlZkZKQ2b95c43hlZWUqLi52WAAAwJXJ05Uv/tZbb2n79u3Kysqqsi0vL0/e3t4KCQlxaA8LC1NeXl6NY6alpWnGjBl1XSoAAHBDLjsjc/jwYf3pT3/SsmXL5OvrW2fjTp06VUVFRfbl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GZeekUlJSVFGRobeffddBQYG2ue9BAcHy8/PT8HBwRo9erRSU1MVGhqqoKAgjR8/XnFxcdyxBAAAXBtkFixYIEnq27evQ/vixYs1atQoSdLcuXPl4eGhxMRElZWVKSEhQa+88splrhQAALgjlwYZY8xF+/j6+mr+/PmaP3/+ZagIAABYidvctQQAAOAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAslwaZTz/9VIMHD1bTpk1ls9m0atUqh+3GGD3zzDNq0qSJ/Pz8FB8fr71797qmWAAA4HZcGmROnTqlmJgYzZ8/v9rts2fP1ssvv6yFCxdq69at8vf3V0JCgkpLSy9zpQAAwB15uvLFBw0apEGDBlW7zRijefPm6amnntKQIUMkSUuXLlVYWJhWrVqle+6553KWCgAA3JDbzpE5cOCA8vLyFB8fb28LDg5Wt27dtHnz5hr3KysrU3FxscMCAACuTG4bZPLy8iRJYWFhDu1hYWH2bdVJS0tTcHCwfYmIiKjXOgEAgOu4bZC5VFOnTlVRUZF9OXz4sKtLAgAA9cRtg0x4eLgkKT8/36E9Pz/fvq06Pj4+CgoKclgAAMCVyW2DTMuWLRUeHq4NGzbY24qLi7V161bFxcW5sDIAAOAuXHrXUklJifbt22dfP3DggHJychQaGqrIyEg9+uij+vOf/6y2bduqZcuWevrpp9W0aVMNHTrUdUUDAAC34dIgs23bNvXr18++npqaKklKSkpSenq6Hn/8cZ06dUoPPfSQCgsL1atXL61du1a+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txEYGKhJkyZp4sSJqqysVK9evVRUVKRNmzYpKChISUlJioqKUo8ePTR69GhVVFTo97//vX3/+Ph4xcXFaejQoZo9e7batWunI0eOaM2aNRo2bJi6dOniwncHoCb+/v4aO3asJk+erNDQUEVGRmr27Nk6ffq0Ro8erZMnT2rOnDmaPHmyxowZo+zsbKWnpzuMMWHCBPXs2VMvvPCChgwZonXr1mnt2rWueUO4rJgjA7cyc+ZMPf3000pLS1P79u116623as2aNWrZsqW9z8iRI7Vz504NGzZMfn5+9nabzaYPPvhAvXv3VnJystq1a6d77rlHBw8eVFhYmCveDoBamjVrlhITE/WHP/xBnTt31r59+7Ru3TpdffXVioyM1MqVK7Vq1SrFxMRo4cKFev755x327969u1577TW99NJLiomJ0fr16/XUU0+56N3gcrIZY4yriwAAALgUnJEBAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABcFl9//33stlsysnJqbHPxo0bZbPZVFhYeNnqAmBNBBkAbqdHjx7Kzc1VcHCwJCk9Pd3hgz8vxaWOQagC3BuftQTA7Xh7eys8PNzVZQCwAM7IAKi1U6dO6f7771dAQICaNGmiOXPmqG/fvnr00UftfWw2m1atWuWwX0hISJUP+du9e7d69OghX19fXX/99crMzLRv++VZkI0bNyo5OVlFRUWy2Wyy2WyaPn16tfXt3LlT/fr1U2BgoIKCghQbG6tt27ZdcIw33nhDXbp0UWBgoMLDw3XvvfeqoKBA0s+Xwfr16ydJuvrqq2Wz2TRq1ChJUmVlpdLS0tSyZUv5+fkpJiZGK1asuORjC+DSEGQA1NrkyZOVmZmpd999V+vXr9fGjRu1ffv2Sx7rscce044dOxQXF6fBgwfr2LFjVfr16NFD8+bNU1BQkHJzc5Wbm6tJkyZVO+bIkSPVvHlzZWVlKTs7W1OmTJGXl9cFxygvL9fMmTO1c+dOrVq1St9//709rERERGjlypWSpD179ig3N1cvvfSSJCktLU1Lly7VwoULtWvXLk2cOFH33XefQyADUP+4tASgVkpKSrRo0SK9+eabGjBggCRpyZIlat68+SWNN27cOCUmJkqSFixYoLVr12rRokV6/PHHHfp5e3srODhYNpvtopebDh06pMmTJys6OlqS1LZtW/u2msZ44IEH7F+3atVKL7/8sm666SaVlJQoICBAoaGhkqTGjRvb59iUlZXp+eef10cffaS4uDj7vp9//rleffVV9enT5xKOCIBLwRkZALWyf/9+nT17Vt26dbO3hYaG6tprr72k8c4HAEny9PRUly5d9O233/6mGlNTUzVmzBjFx8dr1qxZ2r9//0X3yc7O1uDBgxUZGanAwEB7CDl06FCN++zbt0+nT5/WwIEDFRAQYF+WLl1aq9cEUHcIMgDqlM1mkzHGoa28vPyyvPb06dO1a9cu3X777fr444/VoUMHvfPOOzX2P3XqlBISEhQUFKRly5YpKyvL3v/s2bM17ldSUiJJWrNmjXJycuzLN998wzwZ4DIjyAColdatW8vLy0tbt261t504cULfffedQ79GjRopNzfXvr53716dPn26ynhbtmyxf33u3DllZ2erffv21b62t7e3KioqalVnu3btNHHiRK1fv17Dhw/X4sWLaxxj9+7dOnbsmGbNmqWbb75Z0dHR9om+v3xtSQ77dujQQT4+Pjp06JDatGnjsERERNSqTgB1gzkyAGolICBAo0eP1uTJk9WwYUM1btxYTz75pDw8HP8e6t+/v/7+978rLi5OFRUVeuKJJ+Tl5VVlvPnz56tt27Zq37695s6dqxMnTjjMV/mlqKgolZSUaMOGDYqJiVGDBg3UoEEDhz5nzpzR5MmTdccdd6hly5b64YcflJWVZZ+HU90YkZGR8vb21t/+9jc98sgj+vrrrzVz5kyHcVu0aCGbzab3339ft912m/z8/BQYGKhJkyZp4sSJqqysVK9evVRUVKRNmzYpKChISUlJv+VQA3CGAYBaOnnypLnvvvtMgwYNTFhYmJk9e7bp06eP+dOf/mTv8+OPP5pbbrnF+Pv7m7Zt25oPPvjABAcHm8WLFxtjjDlw4ICRZDIyMkzXrl2Nt7e36dChg/n444/tY3zyySdGkjlx4oS97ZFHHjENGzY0ksy0adOq1FZWVmbuueceExERYby9vU3Tpk3NuHHjzJkzZy44RkZGhomKijI+Pj4mLi7OrF692kgyO3bssO/37LPPmvDwcGOz2UxSUpIxxpjKykozb948c+211xovLy/TqFEjk5CQYDIzM3/rYQbgBJsxv7qYDQBO6Nu3rzp27Kh58+a5uhQA/4GYIwMAACyLIAMAACyLS0sAAMCyOCMDAAAsiyADAAAsiyADAAAsiyADAAAsiyADAAAsiyADAAAsiyADAAAsiyADAAAsiyADAAAs6/8BMh2DwrQX+xYAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def count_ones(bits):\n", " return 'even' if sum(bits) % 2 == 0 else 'odd'\n", "\n", "q = cirq.LineQubit.range(6)\n", "# Uniform superposition over all 2 ** 6 states.\n", "circuit = cirq.Circuit([cirq.H.on_each(*q), cirq.measure(*q, key='measure_all')])\n", "result = cirq.Simulator().run(circuit, repetitions=100)\n", "# Create a customized histogram by processing the measurement results using `fold_func`.\n", "custom_histogram = result.histogram(key = 'measure_all', fold_func=count_ones)\n", "# Plot the custom histogram using cirq.plot_state_histogram\n", "_ = cirq.plot_state_histogram(custom_histogram, plt.subplot())\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "ac5483d0a913" }, "source": [ "### Modifying plot properties\n", "You can pass additional arguments to the `cirq.plot_state_histogram` method to modify plot properties like `title`, `xlabel`, `ylabel` and `tick_label`. For example:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2024-08-16T10:22:25.027686Z", "iopub.status.busy": "2024-08-16T10:22:25.027177Z", "iopub.status.idle": "2024-08-16T10:22:25.173466Z", "shell.execute_reply": "2024-08-16T10:22:25.172799Z" }, "id": "16aa0365af6a" }, "outputs": [ { "data": { "image/png": "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3X9WtWpVl9qNMU5t96abbrLfzXSpKywslHT+aFZcXFyJff54VxVwOSDMABZxxx13aN68edq8eXO5txtfccUVkuRwZ45U/EhJkYYNG2rEiBEaMWKEjh49quuvv14vvviiPcyUFo7Cw8P17bffqrCw0OHozJ49e+zLvVFRXXv37nU4ApWfn6/U1FTFxMTY2y72OTXOcnY/9erVU82aNVVQUOBQJ3A545oZwCLGjx+v6tWr69FHH9WRI0eKLf/pp5/0yiuvSDp/JKdu3bpav369Q5/XX3/dYb6goEBZWVkObfXr11doaKjy8vLsbdWrVy/WT5J69eql9PR0ffjhh/a2c+fOafbs2apRo4Zuvvlm1wdaCWJiYuTn56dXX33V4ejPm2++qaysLPXu3dveVtrY3a169eqSigfQP6tataruueceLVq0qMQjdceOHauI8gCvxpEZwCKuuuoqvffee7r//vt17bXXOjwBeNOmTfZboos8+uijmj59uh599FG1b99e69ev1759+xy2efLkSTVq1Ej33nuvoqKiVKNGDX3++efatm2bXnrpJXu/du3a6cMPP1RCQoI6dOigGjVqqE+fPho2bJj+8Y9/6JFHHlFKSooiIiL08ccfa+PGjUpKSqqQC5bdoV69epo4caKmTp2q22+/XXfeeaf27t2r119/XR06dHB4yF1pY3e3du3aSZJGjx6t2NhYVa1aVQ888ECJfadPn641a9aoU6dOGjp0qFq2bKmMjAzt2LFDn3/++UU9owewJM/eTAXAVfv27TNDhw41ERERxs/Pz9SsWdN069bNzJ492+FW5lOnTpkhQ4aY4OBgU7NmTdO/f39z9OhRh9t88/LyzLhx40xUVJSpWbOmqV69uomKijKvv/66wz5zcnLM//3f/5latWoZSQ63Kh85csQMGjTI1K1b1/j5+Zk2bdoUuyW86FbkWbNmObSvWbPGSDIfffSRQ3vRrdTbtm0r87MoujX72LFjZfb7863ZRV577TXTokUL4+vra0JCQszw4cPNiRMnnB57WVy9NfvcuXNm1KhRpl69esZmszncpl3Sdo4cOWLi4+NNWFiY8fX1NQ0aNDC33nqrmTdvnlP1AZcSmzFOXmEHAADghbhmBgAAWBphBgAAWBphBgAAWBphBgAAWBphBgAAWBphBgAAWNol/9C8wsJCHT58WDVr1qy0x5IDAICLY4zRyZMnFRoaWuxltn92yYeZw4cPF3sjLwAAsIa0tDQ1atSozD6XfJgpepx6WlqagoKCPFwNAABwRnZ2tsLCwpx6LcolH2aKTi0FBQURZgAAsBhnLhHhAmAAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBpPp4uAPAWEROWebqEC3Jgem9PlwBUKKv+bkr8flYWjswAAABLI8wAAABLI8wAAABLI8wAAABLI8wAAABLI8wAAABLI8wAAABLI8wAAABLI8wAAABLI8wAAABLI8wAAABLI8wAAABLI8wAAABLI8wAAABLI8wAAABL82iYWb9+vfr06aPQ0FDZbDYtWbKkWJ/du3frzjvvVHBwsKpXr64OHTrol19+qfxiAQCAV/JomMnNzVVUVJSSk5NLXP7TTz/phhtuUIsWLbR27Vp9++23mjRpkgICAiq5UgAA4K18PLnznj17qmfPnqUu/+tf/6pevXpp5syZ9rarrrqqMkoDAAAW4bXXzBQWFmrZsmW65pprFBsbq/r166tTp04lnor6o7y8PGVnZztMAADg0uW1Yebo0aPKycnR9OnTdfvtt2vlypW6++671a9fP61bt67U9RITExUcHGyfwsLCKrFqAABQ2bw2zBQWFkqS+vbtq7Fjx6pt27aaMGGC7rjjDs2dO7fU9SZOnKisrCz7lJaWVlklAwAAD/DoNTNlqVu3rnx8fNSyZUuH9muvvVZffvllqev5+/vL39+/ossDAABewmuPzPj5+alDhw7au3evQ/u+ffsUHh7uoaoAAIC38eiRmZycHO3fv98+n5qaqp07d6p27dpq3Lixxo0bp/vvv1833XSTunfvrhUrVmjp0qVau3at54oGAABexaNhZvv27erevbt9PiEhQZIUFxenBQsW6O6779bcuXOVmJio0aNHq3nz5lq0aJFuuOEGT5UMAAC8jEfDTHR0tIwxZfYZPHiwBg8eXEkVAQAAq/Haa2YAAACcQZgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACWRpgBAACW5tEws379evXp00ehoaGy2WxasmRJqX0ff/xx2Ww2JSUlVVp9AADA+3k0zOTm5ioqKkrJycll9vvkk0/01VdfKTQ0tJIqAwAAVuHjyZ337NlTPXv2LLPPoUOHNGrUKP3vf/9T7969K6kyAABgFR4NM+UpLCzUQw89pHHjxqlVq1ZOrZOXl6e8vDz7fHZ2dkWVBwAAvIBXh5kZM2bIx8dHo0ePdnqdxMRETZ06tQKrchQxYVml7cudDkznKBcA4NLgtXczpaSk6JVXXtGCBQtks9mcXm/ixInKysqyT2lpaRVYJQAA8DSvDTMbNmzQ0aNH1bhxY/n4+MjHx0cHDx7Uk08+qYiIiFLX8/f3V1BQkMMEAAAuXV57mumhhx5STEyMQ1tsbKweeughDRo0yENVAQAAb+PRMJOTk6P9+/fb51NTU7Vz507Vrl1bjRs3Vp06dRz6+/r6qkGDBmrevHlllwoAALyUR8PM9u3b1b17d/t8QkKCJCkuLk4LFizwUFUAAMBKPBpmoqOjZYxxuv+BAwcqrhgAAGBJXnsBMAAAgDMIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNIIMwAAwNJ8nOn03//+1+kN3nnnnU73Xb9+vWbNmqWUlBT99ttv+uSTT3TXXXdJks6ePatnnnlGy5cv188//6zg4GDFxMRo+vTpCg0NdXofAADg0uZUmCkKGOWx2WwqKChweue5ubmKiorS4MGD1a9fP4dlp06d0o4dOzRp0iRFRUXpxIkTeuKJJ3TnnXdq+/btTu8DAABc2pwKM4WFhRWy8549e6pnz54lLgsODtaqVasc2l577TV17NhRv/zyixo3blwhNQEAAGtxKsyU5syZMwoICHBXLeXKysqSzWZTrVq1Su2Tl5envLw8+3x2dnYlVAYAADzF5TBTUFCgadOmae7cuTpy5Ij27dunpk2batKkSYqIiNCQIUMqok6dOXNGTz/9tAYMGKCgoKBS+yUmJmrq1KkVUsPlKmLCMk+XcMEOTO/t6RIAABXM5buZXnzxRS1YsEAzZ86Un5+fvb1169Z644033FpckbNnz6p///4yxmjOnDll9p04caKysrLsU1paWoXUBAAAvIPLYWbhwoWaN2+eBg4cqKpVq9rbo6KitGfPHrcWJ/3/IHPw4EGtWrWqzKMykuTv76+goCCHCQAAXLpcPs106NAhNWvWrFh7YWGhzp4965aiihQFmR9//FFr1qxRnTp13Lp9AABgfS6HmZYtW2rDhg0KDw93aP/444913XXXubStnJwc7d+/3z6fmpqqnTt3qnbt2mrYsKHuvfde7dixQ59++qkKCgqUnp4uSapdu7bDKS4AAHD5cjnMTJ48WXFxcTp06JAKCwu1ePFi7d27VwsXLtSnn37q0ra2b9+u7t272+cTEhIkSXFxcXr22WftD+tr27atw3pr1qxRdHS0q6UDAIBLkMthpm/fvlq6dKmee+45Va9eXZMnT9b111+vpUuXqkePHi5tKzo6WsaYUpeXtQwAAEC6wOfM3HjjjcUeaAcAAOAJF/zQvO3bt2v37t2Szl9H065dO7cVBQAA4CyXw8yvv/6qAQMGaOPGjfYn8WZmZqpr16764IMP1KhRI3fXCAAAUCqXnzPz6KOP6uzZs9q9e7cyMjKUkZGh3bt3q7CwUI8++mhF1AgAAFAql4/MrFu3Tps2bVLz5s3tbc2bN9fs2bN14403urU4AACA8rh8ZCYsLKzEh+MVFBQoNDTULUUBAAA4y+UwM2vWLI0aNUrbt2+3t23fvl1PPPGE/va3v7m1OAAAgPI4dZrpiiuukM1ms8/n5uaqU6dO8vE5v/q5c+fk4+OjwYMH66677qqQQgEAAEriVJhJSkqq4DIAAAAujFNhJi4urqLrAAAAuCAX/NA8STpz5ozy8/Md2oKCgi6qIAAAAFe4fAFwbm6uRo4cqfr166t69eq64oorHCYAAIDK5HKYGT9+vL744gvNmTNH/v7+euONNzR16lSFhoZq4cKFFVEjAABAqVw+zbR06VItXLhQ0dHRGjRokG688UY1a9ZM4eHhevfddzVw4MCKqBMAAKBELoeZjIwMNW3aVNL562MyMjIkSTfccIOGDx/u3uoAuF3EhGWeLuGCHJje29MlAPBSLp9matq0qVJTUyVJLVq00L///W9J54/YFL14EgAAoLK4HGYGDRqkb775RpI0YcIEJScnKyAgQGPHjtW4cePcXiAAAEBZXD7NNHbsWPvPMTEx2rNnj1JSUtSsWTNFRka6tTgAAIDyuHxk5s/Cw8PVr18/1a5dW8OGDXNHTQAAAE676DBT5Pjx43rzzTfdtTkAAACnuC3MAAAAeAJhBgAAWBphBgAAWJrTdzP169evzOWZmZkXWwsAAIDLnA4zwcHB5S5/+OGHL7ogAAAAVzgdZubPn1+RdQAAAFwQrpkBAACWRpgBAACWRpgBAACWRpgBAACW5tEws379evXp00ehoaGy2WxasmSJw3JjjCZPnqyGDRsqMDBQMTEx+vHHHz1TLAAA8Eouh5m3335by5Yts8+PHz9etWrVUteuXXXw4EGXtpWbm6uoqCglJyeXuHzmzJl69dVXNXfuXG3ZskXVq1dXbGyszpw542rZAADgEuVymJk2bZoCAwMlSZs3b1ZycrJmzpypunXrauzYsS5tq2fPnnrhhRd09913F1tmjFFSUpKeeeYZ9e3bV5GRkVq4cKEOHz5c7AgOAAC4fLkcZtLS0tSsWTNJ0pIlS3TPPfdo2LBhSkxM1IYNG9xWWGpqqtLT0xUTE2NvCw4OVqdOnbR582a37QcAAFiby2GmRo0aOn78uCRp5cqV6tGjhyQpICBAp0+fdlth6enpkqSQkBCH9pCQEPuykuTl5Sk7O9thAgAAly6nnwBcpEePHnr00Ud13XXXad++ferVq5ck6YcfflBERIS763NZYmKipk6d6ukyAKBSRExYVn4nL3Rgem9Pl+B1+C4vnMtHZpKTk9WlSxcdO3ZMixYtUp06dSRJKSkpGjBggNsKa9CggSTpyJEjDu1HjhyxLyvJxIkTlZWVZZ/S0tLcVhMAAPA+Lh+ZqVWrll577bVi7e4+GtKkSRM1aNBAq1evVtu2bSVJ2dnZ2rJli4YPH17qev7+/vL393drLQAAwHs5FWa+/fZbtW7dWlWqVNG3335bZt/IyEind56Tk6P9+/fb51NTU7Vz507Vrl1bjRs31pgxY/TCCy/o6quvVpMmTTRp0iSFhobqrrvucnofAADg0uZUmGnbtq3S09NVv359tW3bVjabTcYY+/KieZvNpoKCAqd3vn37dnXv3t0+n5CQIEmKi4vTggULNH78eOXm5mrYsGHKzMzUDTfcoBUrViggIMDpfQAAgEubU2EmNTVV9erVs//sLtHR0Q6h6M9sNpuee+45Pffcc27bJwAAuLQ4FWbCw8NL/PnPygomAAAAFcHlu5keeeQR5ebmFms/cOCAbrrpJrcUBQAA4CyXw8w333yjyMhIh6fwvv3224qKilLdunXdWhwAAEB5XL41e+vWrfrLX/6i6OhoPfnkk9q/f78+++wzvfzyyxo6dGhF1AgAAFAql8OMr6+vZs2apWrVqun555+Xj4+P1q1bpy5dulREfQAAAGVy+TTT2bNn9eSTT2rGjBmaOHGiunTpon79+mn58uUVUR8AAECZXD4y0759e506dUpr165V586dZYzRzJkz1a9fPw0ePFivv/56RdQJAABQIpePzLRv3147d+5U586dJZ1/FszTTz+tzZs3a/369W4vEAAAoCwuH5l58803S2y/7rrrtHLlyosuCAAAwBUuH5kpycqVK9W/f39dddVV7tgcAACA0y44zBw8eFBTpkxRRESE7rvvPlWpUkULFy50Z20AAADlcuk0U35+vhYvXqw33nhDGzduVExMjH799Vd9/fXXatOmTUXVCAAAUCqnj8yMGjVKoaGheuWVV3T33Xfr119/1dKlS2Wz2VS1atWKrBEAAKBUTh+ZmTNnjp5++mlNmDBBNWvWrMiaAAAAnOZ0mHnnnXf01ltvqWHDhurdu7ceeugh9ezZsyJrA4ALFjFhmadLuCAHpvf2dAmA5Th9mmnAgAFatWqVvvvuO7Vo0ULx8fFq0KCBCgsLtWvXroqsEQAAoFQu383UpEkTTZ06VQcOHNC//vUv3XPPPXrwwQfVqFEjjR49uiJqBAAAKJXLD80rYrPZFBsbq9jYWGVkZGjhwoWaP3++O2sDAAAo10U9NG/69OnKzMxU7dq1NWbMGH3zzTfuqgsAAMApFxVmpk2bpoyMDHfVAgAA4LKLCjPGGHfVAQAAcEGcDjPjx49Xfn5+RdYCAADgMqfDzKJFi9SuXTvt3LnT3rZr1y6Fh4dXRF0AAABOcTrMfPfdd7rpppvUpUsXvfDCCyosLFRYWBivMgAAAB7l9K3Z1apVU3Jysu69914NGTJES5cu1YQJE4qFmTvvvNPtRQIAAJTG5efMdO/eXUlJSerXr5/uueceh2U2m00FBQVuKw4AAKA8Lt3NdPr0aY0ePVr9+/fXpEmTdPbsWRUWFtonggwAAKhsTh+Z2bRpk+Li4uTv76+NGzeqXbt2FVkXAACAU5w+MhMdHa2+ffsqJSWFIAMAALyG00dmPv/8c910000VWQsAAIDLnD4yQ5ABAADe6KJeZ1DRCgoKNGnSJDVp0kSBgYG66qqr9Pzzz/MaBQAAYOfyrdmVacaMGZozZ47efvtttWrVStu3b9egQYMUHBys0aNHe7o8AADgBbw6zGzatEl9+/ZV7969JUkRERF6//33tXXrVg9XBgAAvIVXn2bq2rWrVq9erX379kmSvvnmG3355Zfq2bNnqevk5eUpOzvbYQIAAJcul4/MHD9+XJMnT9aaNWt09OhRFRYWOizPyMhwW3ETJkxQdna2WrRooapVq6qgoEAvvviiBg4cWOo6iYmJmjp1qttqAAAA3s3lMPPQQw9p//79GjJkiEJCQmSz2SqiLknSv//9b7377rt677331KpVK+3cuVNjxoxRaGio4uLiSlxn4sSJSkhIsM9nZ2crLCyswmoEAACe5XKY2bBhg7788ktFRUVVRD0Oxo0bpwkTJuiBBx6QJLVp00YHDx5UYmJiqWHG399f/v7+FV4bAADwDi5fM9OiRQudPn26Imop5tSpU6pSxbHEqlWrFju1BQAALl8uH5l5/fXXNWHCBE2ePFmtW7eWr6+vw/KgoCC3FdenTx+9+OKLaty4sVq1aqWvv/5aL7/8sgYPHuy2fQAAAGtzOczUqlVL2dnZuuWWWxzajTGy2WxufXP27NmzNWnSJI0YMUJHjx5VaGioHnvsMU2ePNlt+wAAANbmcpgZOHCgfH199d5771X4BcA1a9ZUUlKSkpKSKmwfAADA2lwOM99//72+/vprNW/evCLqAQAAcInLFwC3b99eaWlpFVELAACAy1w+MjNq1Cg98cQTGjdunNq0aVPsAuDIyEi3FQcAAFAel8PM/fffL0kOdxTZbLYKuQAYAACgPC6HmdTU1IqoAwAA4IK4HGbCw8Mrog4AAIAL4nKYkaSffvpJSUlJ2r17tySpZcuWeuKJJ3TVVVe5tTgAAIDyuHw30//+9z+1bNlSW7duVWRkpCIjI7Vlyxa1atVKq1atqogaAQAASuXykZkJEyZo7Nixmj59erH2p59+Wj169HBbcQAAAOVx+cjM7t27NWTIkGLtgwcP1q5du9xSFAAAgLNcDjP16tXTzp07i7Xv3LlT9evXd0dNAAAATnP5NNPQoUM1bNgw/fzzz+rataskaePGjZoxY4YSEhLcXiAAAEBZXA4zkyZNUs2aNfXSSy9p4sSJkqTQ0FA9++yzGj16tNsLBAAAKIvLYcZms2ns2LEaO3asTp48Ken8260BAAA8weVrZm655RZlZmZKOh9iioJMdna2brnlFrcWBwAAUB6Xw8zatWuVn59frP3MmTPasGGDW4oCAABwltOnmb799lv7z7t27VJ6erp9vqCgQCtWrNCVV17p3uoAAADK4XSYadu2rWw2m2w2W4mnkwIDAzV79my3FgcAAFAep8NMamqqjDFq2rSptm7dqnr16tmX+fn5qX79+qpatWqFFAkAAFAap8NM0duyCwsLK6wYAAAAV7l8AfDbb7+tZcuW2efHjx+vWrVqqWvXrjp48KBbiwMAACiPy2Fm2rRpCgwMlCRt3rxZr732mmbOnKm6detq7Nixbi8QAACgLC4/NC8tLU3NmjWTJC1ZskT33nuvhg0bpm7duik6Otrd9QEAAJTJ5SMzNWrU0PHjxyVJK1euVI8ePSRJAQEBOn36tHurAwAAKIfLR2Z69OihRx99VNddd5327dunXr16SZJ++OEHRUREuLs+AACAMrl8ZCY5OVldunTRsWPHtGjRItWpU0eSlJKSogEDBri9QAAAgLK4fGSmVq1aeu2114q1T5061S0FAQAAuMLlMLN+/foyl990000XXAwAAICrXA4zJd2xZLPZ7D8XFBRcVEEAAACucPmamRMnTjhMR48e1YoVK9ShQwetXLmyImoEAAAolcthJjg42GGqW7euevTooRkzZmj8+PFuL/DQoUN68MEHVadOHQUGBqpNmzbavn272/cDAACsyeXTTKUJCQnR3r173bU5SeePAnXr1k3du3fXZ599pnr16unHH3/UFVdc4db9AAAA63I5zHz77bcO88YY/fbbb5o+fbratm3rrrokSTNmzFBYWJjmz59vb2vSpIlb9wEAAKzN5TDTtm1b2Ww2GWMc2jt37qy33nrLbYVJ0n//+1/Fxsbqvvvu07p163TllVdqxIgRGjp0aKnr5OXlKS8vzz6fnZ3t1poAAIB3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lKT9+/crJydH6enpOn36tP35CC1btpSfn5+HRuaorHFKsl8jtH//fknSd999p5o1a6px48aqXbu2rr32Wt1+++0aOnSo5s6dq7Nnz2rkyJF64IEHFBoa6smhObjYcUrnn4+UkZGhX375RQUFBfbvs1mzZqpRo4ZHxvVHOTk59vql8xfD7ty5U7Vr11bjxo01ZswYvfDCC7r66qvVpEkTTZo0SaGhobrrrrskyTLf5cWOU/L+71Iqf5xF9R8+fFjS+aAiyX702Nm/U552seOUnPv9tQRP3051uZk9e7Zp3Lix8fPzMx07djRfffWVfdnp06fNiBEjzBVXXGGqVatm7r77bvPbb785rH/gwAHTs2dPExgYaOrWrWuefPJJc/bs2coeRrkudpw333yzkVRsSk1NreSRlK2scU6ZMqXEMcyfP9/e5/jx42bAgAGmRo0aJigoyAwaNMicPHnSAyMp28WOMy4ursQ+a9asqfzBlKDottQ/T3FxccaY87ctT5o0yYSEhBh/f39z6623mr179zpswwrfpTvG6e3fpTHlj3P+/PklLp8yZYp9G878nfI0d4zTmd9fK7AZY4x7YhEAAEDl45oZAABgaYQZAABgaYQZAABgaYQZAABgaYQZAABgaYQZAABgaYQZAABgaYQZAJB04MAB2Ww2+xNtK9uCBQuKvaX5QthsNi1ZsuSitwNYCWEGsJD09HSNGjVKTZs2lb+/v8LCwtSnTx+Hd8hcDE//h758+XL5+flpx44dDu0vvfSS6tatq/T09DLXf//991W1alXFx8e7vO+wsDD99ttvat26tcvrStIjjzzi8Nh/AJWHMANYxIEDB9SuXTt98cUXmjVrlr777jutWLFC3bt3v6D/vL1Rr1699PDDD+vhhx9WXl6eJGnXrl165plnlJycXO4bi998802NHz9e77//vs6cOePSvqtWraoGDRrIx4dX1gFWQ5gBLGLEiBGy2WzaunWr7rnnHl1zzTVq1aqVEhIS9NVXX0kq+chKZmambDab1q5dK0k6ceKEBg4cqHr16ikwMFBXX3215s+fL+n8m5Ml6brrrpPNZlN0dLSk82/Kfu6559SoUSP5+/urbdu2WrFihX0fRfv997//rRtvvFGBgYHq0KGD9u3bp23btql9+/aqUaOGevbsqWPHjpU5zr///e/KycnRlClTdO7cOcXFxalPnz66//77y1wvNTVVmzZt0oQJE3TNNddo8eLFDssHDx6syMhIe0jKz8/Xddddp4cffrjEz66sz+lCvPzyy2rTpo2qV6+usLAwjRgxQjk5OcX6LVmyRFdffbUCAgIUGxurtLQ0h+X/+c9/dP311ysgIEBNmzbV1KlTde7cuQuuC7gkePrlUADKd/z4cWOz2cy0adPK7Jeammokma+//treduLECYcXAcbHx5u2bduabdu2mdTUVLNq1Srz3//+1xhjzNatW40k8/nnn5vffvvNHD9+3BhjzMsvv2yCgoLM+++/b/bs2WPGjx9vfH19zb59+xz226JFC7NixQqza9cu07lzZ9OuXTsTHR1tvvzyS7Njxw7TrFkz8/jjj5c73tWrVxsfHx/Tv39/ExISYn7//fdy15k0aZK59957jTHnX4x5yy23OCw/efKkadq0qRkzZowxxpinnnrKREREmKysrBI/u7I+p5LExcWZvn37lrr873//u/niiy9MamqqWb16tWnevLkZPny4ffn8+fONr6+vad++vdm0aZPZvn276dixo+natau9z/r1601QUJBZsGCB+emnn8zKlStNRESEefbZZ+19JJlPPvmk3M8LuJQQZgAL2LJli5FkFi9eXGY/Z8JMnz59zKBBg5xe3xhjQkNDzYsvvujQ1qFDBzNixAiH9d544w378vfff99IMqtXr7a3JSYmmubNm5c3XGOMMQ888ICRZD788MNy+xYUFJiwsDCzZMkSY4wxx44dM35+fubnn3926Ldp0ybj6+trJk2aZHx8fMyGDRtKHXtZn1NJygszf/bRRx+ZOnXq2OeL3nD8xzeS796920gyW7ZsMcYYc+uttxYLtO+8845p2LChfZ4wg8sRp5kACzBufLn98OHD9cEHH6ht27YaP368Nm3aVGb/7OxsHT58WN26dXNo79atm3bv3u3QFhkZaf85JCREktSmTRuHtqNHj5Zb46FDh7RixQpVq1ZNGzZssLf/8ssvqlGjhn2aNm2aJGnVqlXKzc1Vr169JEl169ZVjx499NZbbzlst0uXLnrqqaf0/PPP68knn9QNN9xQag2ufk7l+fzzz3XrrbfqyiuvVM2aNfXQQw/p+PHjOnXqlL2Pj4+POnToYJ9v0aKFatWqZf+cv/nmGz333HMOn8HQoUP122+/OWwHuNwQZgALuPrqq2Wz2bRnz54y+1Wpcv5X+o/h5+zZsw59evbsqYMHD2rs2LE6fPiwbr31Vj311FNuqdPX19f+s81mK7GtsLCw3O0MHTpU7dq106effqo5c+Zo3bp1kqTQ0FDt3LnTPj3++OOSzl/4m5GRocDAQPn4+MjHx0fLly/X22+/7bC/wsJCbdy4UVWrVtX+/fvLrMGdn9OBAwd0xx13KDIyUosWLVJKSoqSk5Mlnb92x1k5OTmaOnWqw2fw3Xff6ccff1RAQMAF1QZcCggzgAXUrl1bsbGxSk5OVm5ubrHlmZmZkqR69epJkn777Tf7spJus65Xr57i4uL0r3/9S0lJSZo3b54kyc/PT5JUUFBg7xsUFKTQ0FBt3LjRYRsbN25Uy5YtL2pcJXnjjTf05Zdf6s0331T37t01fPhwDR48WLm5ufLx8VGzZs3sU+3atXX8+HH95z//0QcffODwn/zXX3+tEydOaOXKlfZtz5o1S3v27NG6deu0YsWKci/oLe1zclVKSooKCwv10ksvqXPnzrrmmmt0+PDhYv3OnTun7du32+f37t2rzMxMXXvttZKk66+/Xnv37nX4DIqmoiALXI64BxGwiOTkZHXr1k0dO3bUc889p8jISJ07d06rVq3SnDlztHv3bgUGBqpz586aPn26mjRpoqNHj+qZZ55x2M7kyZPVrl07tWrVSnl5efr000/t/1nWr19fgYGBWrFihRo1aqSAgAAFBwdr3LhxmjJliq666iq1bdtW8+fP186dO/Xuu++6dYwHDx5UQkKC/va3vyk8PFySNGPGDH322WeaMGGCZs+eXWydd955R3Xq1FH//v3tR4OK9OrVS2+++aZuv/12ff3115o8ebI+/vhjdevWTS+//LKeeOIJ3XzzzWratGmx7Zb1OZUmKyurWHisU6eOmjVrprNnz2r27Nnq06ePNm7cqLlz5xZb39fXV6NGjdKrr74qHx8fjRw5Up07d1bHjh3tNd1xxx1q3Lix7r33XlWpUkXffPONvv/+e73wwgtl1gZc0jx90Q4A5x0+fNjEx8eb8PBw4+fnZ6688kpz55132i/uNcaYXbt2mS5dupjAwEDTtm1bs3LlSocLgJ9//nlz7bXXmsDAQFO7dm3Tt29fhwtl//nPf5qwsDBTpUoVc/PNNxtjzl9g++yzz5orr7zS+Pr6mqioKPPZZ5/Z1ynpwuE1a9YYSebEiRP2tvnz55vg4OASx1ZYWGhuvfVWc9tttxVbtmHDBlO1alWzdu3aYsvatGljvxD5zz788EPj5+dn0tLSTMuWLc2wYcMclt95552ma9eu5ty5c8XGUN7n9GdxcXFGUrFpyJAhxpjzd4Q1bNjQBAYGmtjYWLNw4UKHz6fos1m0aJFp2rSp8ff3NzExMebgwYMO+1mxYoXp2rWrCQwMNEFBQaZjx45m3rx59uXiAmBchmzGuPHKQgAAgErGSVYAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBphBkAAGBp/w/ThUvcXG9qLwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def binary_labels(num_qubits):\n", " return [bin(x)[2:].zfill(num_qubits) for x in range(2 ** num_qubits)]\n", "\n", "q = cirq.LineQubit.range(3)\n", "circuit = cirq.Circuit([cirq.H.on_each(*q), cirq.measure(*q)])\n", "result = cirq.Simulator().run(circuit, repetitions=100)\n", "_ = cirq.plot_state_histogram(result, plt.subplot(), title = 'Custom Plot Title', xlabel = 'Custom X-Axis Label', ylabel = 'Custom Y-Axis Label', tick_label=binary_labels(3))\n", "plt.show()" ] } ], "metadata": { "colab": { "name": "state_histograms.ipynb", "toc_visible": true }, "kernelspec": { "display_name": "Python 3", "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.10.14" } }, "nbformat": 4, "nbformat_minor": 0 }