{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "1a798359", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:19:58.176696Z", "iopub.status.busy": "2024-04-26T18:19:58.176422Z", "iopub.status.idle": "2024-04-26T18:19:58.180073Z", "shell.execute_reply": "2024-04-26T18:19:58.179629Z" }, "nbsphinx": "hidden" }, "outputs": [], "source": [ "# Copyright 2024 Keysight Technologies Inc." ] }, { "cell_type": "raw", "id": "6029c5cd", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Example: Running Stochastic Calibration\n", "=======================================\n", "\n", "This example will show how to characterize the noise acting on a system so that it can\n", "be corrected. We begin by initializing a noisy simulator with a 2-qubit rotation about\n", ":math:`Z` by some angle :math:`\\theta`\\. Then we show how to find :math:`\\theta` using\n", "stochastic calibration." ] }, { "cell_type": "code", "execution_count": 2, "id": "9310183d", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:19:58.181955Z", "iopub.status.busy": "2024-04-26T18:19:58.181655Z", "iopub.status.idle": "2024-04-26T18:20:00.460689Z", "shell.execute_reply": "2024-04-26T18:20:00.460197Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "import trueq as tq\n", "\n", "# make a noisy simulator\n", "sim = tq.Simulator().add_depolarizing(p=0.001)\n", "sim.add_overrotation(single_sys=0.01, multi_sys=0.01)\n", "\n", "# adding a rotation by 12 degrees to the first qubit in every 2-qubit gate,\n", "# i.e. Z(12) is the noise we are going to try to characterize\n", "mat = tq.Gate.from_generators(\"Z\", 12).mat\n", "sim.add_kraus([np.kron(mat, np.eye(2))])" ] }, { "cell_type": "raw", "id": "6ac74944", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "We are going to perform stochastic calibration for a :math:`CZ` gate. We choose to\n", "look at the :math:`XI` Pauli decay because it anticommutes with our suspected error,\n", ":math:`ZI`\\. Equivalently, we could have chosen to use the :math:`YI` Pauli decay\n", "to characterize our :math:`ZI` error. To minimize the experimental footprint, we use\n", "data at a single sequence length as in :cite:`Kelly2014`\\." ] }, { "cell_type": "code", "execution_count": 3, "id": "1b9bf718", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:20:00.463275Z", "iopub.status.busy": "2024-04-26T18:20:00.462843Z", "iopub.status.idle": "2024-04-26T18:20:00.482968Z", "shell.execute_reply": "2024-04-26T18:20:00.482525Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "30\n" ] } ], "source": [ "cycle = tq.Cycle({(0, 1): tq.Gate.cz})\n", "\n", "# generate SC circuits with 24 random cycles to get decays associated with XI\n", "circuits = tq.make_sc(cycle, [24], pauli_decays=[\"XI\"])\n", "print(len(circuits))" ] }, { "cell_type": "raw", "id": "61e97fc2", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Find the expectation value and standard deviation of the circuit when corrections of\n", "the form :math:`Z(\\phi)` are applied on the first qubit prior to each :math:`CZ` gate.\n", "The expectation values correspond to the :math:`XI` diagonal entry of the\n", "superoperator in the Pauli basis; values close to :math:`1` indicate that the\n", "suspected error is small." ] }, { "cell_type": "code", "execution_count": 4, "id": "7c682ad1", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:20:00.485008Z", "iopub.status.busy": "2024-04-26T18:20:00.484706Z", "iopub.status.idle": "2024-04-26T18:20:03.935112Z", "shell.execute_reply": "2024-04-26T18:20:03.934582Z" } }, "outputs": [], "source": [ "# 20 equidistant points between -40 and 40 for trial values of phi\n", "angles = np.linspace(-40, 40, 20)\n", "\n", "all_circuits = tq.CircuitCollection()\n", "for j, phi in enumerate(angles):\n", " # adds a Z(phi) rotation on qubit 0 gate before every CZ gate\n", " c = tq.compilation.CycleReplacement(\n", " cycle, replacement=[tq.Cycle({(0): tq.Gate.from_generators(\"Z\", phi)}), cycle]\n", " )\n", " new_circs = tq.CircuitCollection(map(c.apply, circuits))\n", "\n", " # run circuit collection (with Z(phi)s inserted)\n", " sim.run(new_circs)\n", "\n", " # put all circuits into one callection, organized by the custom keyword \"phi\"\n", " all_circuits.append(new_circs.update_keys(phi=phi))" ] }, { "cell_type": "raw", "id": "7f60d52a", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Plot the expectation values as a function of :math:`\\phi`\\:" ] }, { "cell_type": "code", "execution_count": 5, "id": "3a0485dc", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:20:03.937771Z", "iopub.status.busy": "2024-04-26T18:20:03.937378Z", "iopub.status.idle": "2024-04-26T18:20:04.230575Z", "shell.execute_reply": "2024-04-26T18:20:04.230053Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAEiCAYAAADklbFjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCkUlEQVR4nO3de1yUZf7/8fcAAqIyioiMRkFqKaG5YhgeylYUNqPcDmplHtZ0NW0t2lJLRcvykJmta1pa2jcr7eQpDXM9ddCkQCtE7bCYpYAZCaQCyty/P/wx6wQoIsMceD0fj3k8uK/7umc+MxfovOe657pNhmEYAgAAAAAANc7L2QUAAAAAAOCpCN0AAAAAADgIoRsAAAAAAAchdAMAAAAA4CCEbgAAAAAAHITQDQAAAACAgxC6AQAAAABwEEI3AAAAAAAOQugGAAAAAMBBCN0AAI8we/ZstW3bVlar1dmlaOrUqTKZTJd0HzfffLNGjBhRrv3tt99WUFCQfv/990u6/5qSmZkpHx8fZWRkOLsUt3X99dfrscceq1Lf06dPKywsTC+++KKDqwIA1BRCNwDA7RUUFGjWrFkaP368vLzs/2srKirS888/ry5dushsNsvf319XXXWVxo4dq2+//dZJFZ/fZ599po8++kjjx4+3ay8tLVVycrIefPBBNWzY0G7fjh071L17dwUEBCg0NFT/+Mc/LimYp6am6oEHHlB0dLTq1atX6YcIkZGR6tu3r6ZMmVLtxzrXJ598ov79+6tly5by9fWV2WxWly5d9OSTTyo3N7da9/nmm29q3rx5NVKfI4wfP14LFixQTk7OBfvWq1dPSUlJevrpp1VUVFQL1QEALhWhGwDg9l599VWdOXNGd999t137sWPH1L17dyUlJSkkJERPPvmkFixYoH79+mnt2rWKiopyUsXn9+yzz6pXr15q3bq1Xfu6det04MABjRw50q59z5496tWrl06ePKm5c+fq/vvv18svv6y77rqr2jVs2LBBS5Yskclk0pVXXnnevqNGjdKqVav0ww8/VPvxJGnKlCm64YYblJaWpqFDh2rhwoV65plndM011+i5555T165dq3W/rh66b7vtNgUGBlZ59nrYsGE6duyY3nzzTQdXBgCoEQYAAG6uQ4cOxqBBg8q19+3b1/Dy8jLefffdcvuKioqMRx55xCH1JCcnG9X9LzY3N9fw8fExlixZUm7frbfeanTv3r1c+1/+8hfDYrEY+fn5trbFixcbkoyNGzdWq46cnBzj5MmThmEYxpgxY877fEpKSowmTZoYkydPrtZjGYZhrFixwpBk9O/f3yguLi63//jx40ZycnK17rtv377GFVdcUe3aasPYsWONK664wrBarVXqf8sttxg9evRwcFUAgJrATDcAwK1lZWXp66+/VlxcnF37rl27tH79eg0fPlx33HFHueP8/Pw0Z84cSdLSpUtlMpm0e/fucv2eeeYZeXt76/Dhw3b3ffPNN6tJkyZq0KCBOnTooBdeeOGCtS5fvlzR0dGqX7++goKCNHDgQP300092fdavX68zZ86Uez5FRUVKSUkp115QUKBNmzZp0KBBCgwMtLUPHjxYDRs21Ntvv33BuirSvHlz1a9fv0p969Wrp549e2rNmjV27SdPntT+/ft17NixC97HlClTFBwcrFdeeUW+vr7l9pvNZk2dOtWubc2aNerbt69atGghPz8/tWrVSk899ZRKS0ttfXr27Kn169frxx9/lMlkkslkUnh4uG1/cXGxkpOT1bp1a/n5+SksLEyPPfaYiouLq/Tcz/e7sG3bNttj/vF2bg2S1Lt3b/3444/as2dPlR63d+/e+vTTT5WXl1el/gAA5/FxdgEAAFyKHTt2SJI6depk17527VpJ0n333XfB+7jzzjs1ZswYvfHGG/rTn/5kt++NN95Qz5491bJlS0nSpk2bdMstt8hisWjcuHEKDQ3Vvn379MEHH2jcuHGVPsbTTz+tyZMnq3///rr//vv1yy+/aP78+brhhhu0e/duNW7c2PZ8mjZtqiuuuMLu+LS0NJWUlJR7nt98843OnDmjzp0727X7+vqqY8eOFX6Q4AjR0dFas2aNCgoKbOE/NTVVN910k5KTk8sF5nN9++23+vbbb3X//feX+676+SxbtkwNGzZUUlKSGjZsqC1btmjKlCkqKCjQs88+K0l64oknlJ+fr59//lnPP/+8JNkew2q16tZbb9Wnn36qkSNHql27dvrmm2/0/PPP69tvv9Xq1avP+/gX+l1o166dXn/9dbtjjh8/bvu6wx9fP+ns9/n/+DtYkejoaBmGoR07duiWW26p0usFAHAOQjcAwK3t379fkhQREWHXvm/fPklS+/btL3gfjRo1Ur9+/fTWW29p9uzZtsXYdu/erczMTD366KOSzi5k9ve//10Wi0V79uyxBWVJMgyj0vv/8ccflZycrOnTp+vxxx+3td9+++3605/+pBdffNHWvn///nKzoOd7ntnZ2ZIki8VS7hiLxaJPPvnkgs+/Jlx55ZWyWq3av3+/YmJiLurYsuf2x+/YG4ahX3/91a6tcePG8vE5+/blzTfftJuNHzVqlEaNGqUXX3xR06dPl5+fn3r37q2WLVvqt99+06BBg+zu680339R//vMfbd++Xd27d7e1R0VFadSoUdqxY0el3yOvyu9C8+bN7R7TMAzdeuut8vPz07Jly+zur2zhuMzMzPO9VDZl37PPzMwkdAOAi+P0cgCAW/v111/l4+NTboa0oKBA0tlAXRWDBw/WkSNHtHXrVlvbG2+8ofr169tOT9+9e7eysrL00EMP2YUsSee9RNj7778vq9Wq/v3769ixY7ZbaGio2rRpY/eYv/76q5o0aVLh85RUbt+pU6cknT1d/o/8/f1t+x2trK5zTyXv2bOnDMM47yy39L+x+uMY5ufnq1mzZna3c0+/PjdwFxYW6tixY+rRo4fttPYLeeedd9SuXTu1bdvWblz+/Oc/S5LduPxRdX4XnnrqKX3wwQdatmyZIiMjy+1v0qRJlU7FL+srqcr9AQDOw0w3AMAjlZ3iXFhYWC4UVaR3796yWCx644031KtXL1mtVr311lu67bbbbMG9bHXui131/LvvvpNhGGrTpk2F++vVq2e3fb5Z8z/uKwueFX0HuaioqMrfy75UZXVV5/rkZa/vHy9x1rBhQ23atEmS9NFHH9lOGS+zd+9eTZo0SVu2bLEF9zL5+fkXfNzvvvtO+/btU7NmzSrcf/To0UqPvdjfhZSUFE2bNk0TJ06scI0B6exrWNXX71JebwBA7SJ0AwDcWtOmTXXmzBkVFhbazWq3bdtW0tnvPPfo0eOC9+Pt7a177rlHixcv1osvvqjPPvtMR44cKXdKcnVYrVaZTCZ9+OGH8vb2Lrf/3Bnepk2b6rfffivXp2nTppKk3377TZdddpmtvey08rLTzM+VnZ2tFi1aXHL9VVFWc3Bw8EUfWzZWGRkZdu0+Pj62heN+/vlnu33Hjx/XjTfeqMDAQD355JNq1aqV/P39lZ6ervHjx8tqtV7wca1Wq9q3b6+5c+dWuD8sLOyin0tFsrKydO+996p3796aPn16pf2OHz9e5dfvUl5vAEDtInQDANxaWWDLyspShw4dbO2JiYmaMWOGli9fXqXQLZ09xfy5557TunXr9OGHH6pZs2aKj4+37W/VqpWks+Hwj6uIn0+rVq1kGIYiIiJ01VVXXfD5vPfeexW2S2ef57nfU4+KipKPj4++/PJL9e/f39ZeUlKiPXv22LU5UlZWlry8vC74/Cpy9dVXq02bNlq9erXmzZunBg0aXPCYbdu26ddff9X777+vG264wa6OP6psNrhVq1b66quv1KtXr4ueMa7q78KpU6d0++23q3Hjxnrrrbds6wX80eHDh1VSUqJ27dpV6fHLnmdV+wMAnIfvdAMA3FpsbKwk6csvvyzXnpCQoCVLllS4CnVJSYn++c9/2rV16NBBHTp00JIlS/Tee+9p4MCBtkW7pLMrpEdERGjevHk6fvy43bHnOyX89ttvl7e3t6ZNm1au3x8XC4uNjdVvv/2m//73v3b9oqOj5evrW+55ms1mxcXFafny5SosLLS1v/766/r999911113VVpXTUpLS9M111wjs9lsa7uYS4ZNnTpVx44d04gRI3T69Oly+//4upWdMXBue0lJiV588cVyxzZo0KDC08379++vw4cPa/HixeX2nTp1SidOnLBtHzp0yO574lX9XRg1apS+/fZbrVq1qsLv6pdJS0uTpEoXbquov8lksv3+AwBcl8k437sEAADcQPv27dW+fXu9+eabdu2//PKL+vTpo6+++kqJiYnq1auXGjRooO+++04rVqxQdnZ2ue9CP/fcc7YwvmvXrnIrcW/cuFGJiYlq0aKFhg0bJovFov3792vv3r3auHGjpLMB8o8Be+bMmZo4caK6du2qfv36qVGjRsrKytKqVas0cuRI22Pm5ubqsssu04IFCzRy5Ei7x05MTNSvv/5qu0xamfT0dHXt2lWRkZEaOXKkfv75Zz333HO64YYbbDWVMZlMuvHGG7Vt27bzvqY//vij7XJXH3zwgXbt2qWnnnpKknTFFVfYXYrt9OnTCg0N1QMPPGDrI52dja7KJcPKPP7445oxY4ZatWqlgQMHKiIiQidOnFBGRobeeust27XUW7VqpV9//VVt2rRRYGCg/vGPf8hkMun111+X1WrVV199pa1bt6pnz56SpGeffVaPPfaYHn74YV133XVq2LChEhMTZbValZiY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p09XWlqa9uzZo6VLl2r48OF68803JUnnfi28adOm2rRpk4YPH66QkBBFRUVp4MCBmj59ulavXl3jTwAAALg3by+TkhMjJalc8C7bTk6MlLdXZbEcAADXVeUvop4+fdq2Cnh0dLQ+/vhj/fWvf9X3338vk+l//wk+/PDDdsdlZWUpIyNDGRkZevfdd23X0AYAACiTEGXRwkGdlLx2r3ILim3toVynGwDg5qocukNCQvT111+rQ4cOkqSgoCBt2rRJQ4YM0ddff23rN2vWLI0fP962HRERoYiICCUmJtZg2QAAwNMkRFnUrXWw2k/9SJK0bNh16tGmGTPcAAC3VuXTy19//XWFhITYtfn6+uqtt97S9u3bbW3ffPONbrvtNuXn59v1zcvL06xZsy6xXAAA4MnODdgxEUEEbgCA26ty6L7ssssUGhpa4b5u3brZfl6+fLkSEhLUtWtX7dmzR7t379awYcN0/fXXy2q1XnrFAAAAAAC4iSqfXt67d28NGDBAt912m5o1a2Zrt1qt2rVrl15//XXFxMRo6NChuv/++/X999+rc+fOCg4O1oIFC7RkyRKu6w0AADzGyZIzipyyUZKU+WS8Anyr/LYKAFCHVHmme/Xq1Tpx4oRuueUWNWvWTG3btlVkZKRatWqll156SUOGDNHQoUM1adIktW3bVidOnNDHH3+szp07a8OGDSotLXXk8wAAAAAAwOVUOXQ3aNBA48aN065du/Trr79q69at+vTTT3XDDTdowYIF6tKli6SzlwxLT0/XokWL1LVrV33wwQcKDw9X165dlZWV5bAnAgAAAACAq6ly6D7X5Zdfrq+//lpBQUFavny5Tp48adv38MMPy2w22/WfPHmyZsyYofj4+EurFnARpdb/XZs+NSvPbhsAAAAAylQrdD/yyCNKTExUjx49JJ1dPC01NVWnTp2q9JjevXtry5Yt1asScCEpGdmKm/u/FfuHLv1C3WdtUUpGthOrAgAAAOCKqhW6H3zwQX355ZdKSEiQYRhasGCBunbtqsDAQLVr104DBw7UzJkz9eGHH9odd9lll9VI0YCzpGRka/TydOUWFNu15+QXafTydII3AAAAADvVCt2S1KFDBz3xxBNq1aqVPv/8cxUWFurTTz/VQw89pCZNmmjNmjXq379/TdYKOFWp1dC0dZmq6ETysrZp6zI51RwAAACA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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "all_circuits.plot.compare(\"f_24_XI\", \"phi\")" ] }, { "cell_type": "raw", "id": "0e472eb6", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "The y-axis is the expectation value after 24 (randomized) applications of the cycle\n", "of interest, and the x-axis is the correction angle we have compiled into the circuit.\n", "The maximum expectation value corresponds to the value of :math:`XI` closest to 1, so\n", "finding the angle at which the plot peaks tells us which angle to rotate by to correct\n", "the noise. The peak occurs at approximately :math:`\\phi = -12`\\, which is consistent\n", "with the noise applied by the simulator." ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "nbsphinx,raw_mimetype,-all", "main_language": "python", "notebook_metadata_filter": "-all", "text_representation": { "extension": ".py", "format_name": "percent" } }, "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.10" } }, "nbformat": 4, "nbformat_minor": 5 }