{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "f2571669", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:29.331761Z", "iopub.status.busy": "2024-03-26T19:00:29.331490Z", "iopub.status.idle": "2024-03-26T19:00:29.334014Z", "shell.execute_reply": "2024-03-26T19:00:29.333590Z" }, "nbsphinx": "hidden" }, "outputs": [], "source": [ "# Copyright 2024 Keysight Technologies Inc." ] }, { "cell_type": "raw", "id": "91087b90", "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": "7e21e253", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:29.335842Z", "iopub.status.busy": "2024-03-26T19:00:29.335577Z", "iopub.status.idle": "2024-03-26T19:00:31.597116Z", "shell.execute_reply": "2024-03-26T19:00:31.596721Z" } }, "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": "cafc3e1c", "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": "cb1a4507", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:31.599481Z", "iopub.status.busy": "2024-03-26T19:00:31.598923Z", "iopub.status.idle": "2024-03-26T19:00:31.618476Z", "shell.execute_reply": "2024-03-26T19:00:31.618109Z" } }, "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": "d4fb2a63", "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": "875c52ba", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:31.620527Z", "iopub.status.busy": "2024-03-26T19:00:31.620121Z", "iopub.status.idle": "2024-03-26T19:00:35.050596Z", "shell.execute_reply": "2024-03-26T19:00:35.050137Z" } }, "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": "d3775f0c", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Plot the expectation values as a function of :math:`\\phi`\\:" ] }, { "cell_type": "code", "execution_count": 5, "id": "bf22916c", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:35.053160Z", "iopub.status.busy": "2024-03-26T19:00:35.052798Z", "iopub.status.idle": "2024-03-26T19:00:35.335334Z", "shell.execute_reply": "2024-03-26T19:00:35.334948Z" } }, "outputs": [ { "data": { "image/png": "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MxwXY9u6dauys7P18MMPSzp5IbM///nPCg8P17Zt2xxBWZKMMVW+/k8//aTU1FRNnTpVjz76qKP9pptu0u9+9zvNmTPH0b5z584Ks6Bn+py5ubmSpPDw8Ar7hIeH67PPPjvr568Jl1xyiex2u3bu3Km4uLhz2rf8s52+xt4Yo19//dWprWnTpvLxOfnPlMWLFzvNxo8cOVIjR47UnDlzNHXqVPn5+alv375q3bq1fvvtNw0ZMsTptRYvXqx//vOf2rhxo3r27Oloj4mJ0ciRI7Vp06Yq15FX57cQGhrq9J7GGN1www3y8/PTwoULnV6v/MJx2dnZZ/qqHMrX2WdnZxO6AcCiOL0cAGAJv/76q3x8fCrMkBYWFko6GairY+jQodq/f7/Wr1/vaHvzzTfVsGFDx+npW7duVU5Ojv7yl784hSxJZ7xF2Pvvvy+73a7bbrtNBw8edDzCwsLUvn17p/f89ddf1axZs0o/p6QK244ePSrp5Onyp/P393dsd7Xyuk49lbx3794yxpxxllv631idPoYFBQVq2bKl0+PU069PDdxFRUU6ePCgevXq5Tit/WzeeecddezYUR06dHAal9///veS5DQupzuf38KTTz6pjz76SAsXLlR0dHSF7c2aNavWqfjlfSVVuz8AwPMw0w0AsLTyU5yLiooqhKLK9O3bV+Hh4XrzzTfVp08f2e12vfXWW7rxxhsdwb386tznetXz77//XsYYtW/fvtLtDRo0cHp+plnz07eVB8/K1iCXlJRUe132hSqv63zuT17+/Z5+i7OAgACtWbNGkvTJJ584Thkv9+2332rixIlat26dI7iXKygoOOv7fv/999qxY4datmxZ6fYDBw5Uue+5/hbS0tI0ZcoUTZgwodJrDEgnv8Pqfn8X8n0DADwDoRsAYAktWrTQiRMnVFRU5DSr3aFDB0kn1zz36tXrrK/j7e2tO++8U6+++qrmzJmjf/3rX9q/f3+FU5LPh91ul81m08cffyxvb+8K20+d4W3RooV+++23Cn1atGghSfrtt9/Upk0bR3v5aeXlp5mfKjc3V61atbrg+qujvObg4OBz3rd8rLKyspzafXx8HBeO+/nnn522HT58WNdcc40CAwP1xBNPqG3btvL391dmZqbGjRsnu91+1ve12+3q1KmTZs6cWen2iIiIc/4slcnJydFdd92lvn37aurUqVX2O3z4cLW/vwv5vgEAnoHQDQCwhPLAlpOTo86dOzvak5KSNG3aNC1atKhaoVs6eYr5888/rxUrVujjjz9Wy5Yt1b9/f8f2tm3bSjoZDk+/iviZtG3bVsYYRUVF6dJLLz3r53nvvfcqbZdOfs5T16nHxMTIx8dHX331lW677TZHe2lpqbZt2+bU5ko5OTny8vI66+erzGWXXab27dtr+fLlmjVrlho3bnzWfTZs2KBff/1V77//vq6++mqnOk5X1Wxw27Zt9fXXX6tPnz7nPGNc3d/C0aNHddNNN6lp06Z66623HNcLON2+fftUWlqqjh07Vuv9yz9ndfsDADwPa7oBAJaQkJAgSfrqq68qtA8YMEDz58+v9CrUpaWl+utf/+rU1rlzZ3Xu3Fnz58/Xe++9p9tvv91x0S7p5BXSo6KiNGvWLB0+fNhp3zOdEn7TTTfJ29tbU6ZMqdDv9IuFJSQk6LffftO///1vp36xsbHy9fWt8DmDgoKUmJioRYsWqaioyNH+xhtv6D//+Y9uvfXWKuuqSRkZGbr88ssVFBTkaDuXW4Y9/vjjOnjwoIYPH67jx49X2H7691Z+xsCp7aWlpZozZ06FfRs3blzp6ea33Xab9u3bp1dffbXCtqNHj+rIkSOO53v27HFaJ17d38LIkSP13XffadmyZZWu1S+XkZEhSVVeuK2y/jabzfH7BwBYj82c6V8PAAB4kE6dOqlTp05avHixU/svv/yifv366euvv1ZSUpL69Omjxo0b6/vvv9eSJUuUm5tbYS30888/7wjjW7ZsqXAl7tWrVyspKUmtWrVScnKywsPDtXPnTn377bdavXq1pJMB8vSAPX36dE2YMEHdu3fXoEGD1KRJE+Xk5GjZsmUaMWKE4z3z8/PVpk0bzZ49WyNGjHB676SkJP3666+O26SVy8zMVPfu3RUdHa0RI0bo559/1vPPP6+rr77aUVM5m82ma665Rhs2bDjjd/rTTz85bnf10UcfacuWLXryySclSRdffLHTrdiOHz+usLAw3X///Y4+0snZ6OrcMqzco48+qmnTpqlt27a6/fbbFRUVpSNHjigrK0tvvfWW417qbdu21a+//qr27dsrMDBQ//d//yebzaY33nhDdrtdX3/9tdavX6/evXtLkp599lk98sgjevDBB3XllVcqICBASUlJstvtSkpK0scff6zBgwerR48eKisr086dO/X2229r9erVjlux9e7dWxs3bnQa07P9FlauXKnrr79eN998swYNGuT0WQMCApzaHnjgAX344YfavXu306x7+ZXsd+/e7bR/UlKSDh8+XGtXpwcAuIABAMAiZs6caQICAkxxcXGFbcXFxea5554zV155pQkICDC+vr6mffv25oEHHjA//PBDhf65ubnG29vbXHrppVW+3+eff2769u1rmjRpYho3bmw6d+5sXnrpJcf21NRUU9lfpe+9957p2bOnady4sWncuLHp0KGDGT16tNm1a5dTvxtuuMH06dOnwv7vv/++sdlsZs+ePRW2ffbZZ6Z79+7G39/ftGzZ0owePdoUFhY69SkqKjKSzO23317lZyu3fv16I6nSxzXXXOPU9+OPPzaSzPfff1/pa6Smpp71/cpt2LDB3HLLLSY8PNw0aNDABAYGmm7dupnU1FSTm5vr1Pdf//qXueqqq0zDhg1Nq1atzCOPPGJWr15tJJn169c7+v3nP/8xd955p2natKmRZC6++GLHttLSUvPMM8+Yyy+/3Pj5+ZlmzZqZ2NhYM2XKFFNQUODod80111Q6pmf6LSxYsKDK7/DUGsrKykx4eLiZOHFihdcPDg42V111lVPb4cOHja+vr5k/f361v1cAgOdhphsAYBkFBQW65JJLNGPGDN17770X9FoHDx5UeHi4Jk+erEmTJtVQhefms88+U+/evbVz506nK56XlZUpOjpat912m9OMcnWtWrVK119/vb7++utq3b+8ugYNGiSbzaZly5bV2GvWJ8uXL9edd96pH3/80el+69nZ2br88sv10UcfaeDAgY72WbNmacaMGfrxxx9r7er0AICax5puAIBlBAUF6ZFHHtGzzz5bratWn8nChQtVVlbmdPp0bevVq5f69eunGTNmOLV7e3vriSee0OzZsyvcXqs61q9fr9tvv71GA/eOHTv00UcfnddBAJz0zDPPaMyYMU6BWzo5XgkJCU6B+/jx45o5c6YmTpxI4AYAi2OmGwBQr6xbt07Z2dmaNGmSrr32Wr3//vvuLgkAANRhhG4AQL3Su3dvbdq0ST169NCiRYvUunVrd5cEAADqMEI3AAAAAAAuwppuAAAAAABchNANAAAAAICL+Li7AE9kt9u1f/9+NWnSRDabzd3lAAAAAAA8jDFGRUVF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HTlyxNHnwQcf1IoVK/TOO+9o48aN2r9/v2666SY3Vl0/tGnTRtOnT1dGRoa++uor/f73v9eNN96ob7/9VhLj4km+/PJLvfzyy+rcubNTe50YIwNLWrVqlenQoYP59ttvjSSzdetWx7Y5c+aYZs2amWPHjjnaxo0bZy677DI3VFq/ffDBB8Zms5nS0lJjDGPjaWbMmGGioqIczxkf91uwYIEJCgqq0L5q1Srj5eVl8vLyHG1z5841gYGBTuOFmhcXF2dGjx7teF5WVmZatWplpk2b5saqIMksW7bM8dxut5uwsDDz7LPPOtoOHz5s/Pz8zFtvveWGCuu3AwcOGElm48aNxpiTY9GgQQPzzjvvOPrs2LHDSDKbN292V5n1VrNmzcz8+fMZFw9SVFRk2rdvb9asWWOuueYaM3bsWGNM3fmzw0y3BeXn52v48OF644031KhRowrbN2/erKuvvlq+vr6Otv79+2vXrl367bffarPUeu3QoUN688031b17dzVo0EASY+NpCgoK1Lx5c8dzxsdzbd68WZ06dVJoaKijrX///iosLHTMVqDmlZaWKiMjQ4mJiY42Ly8vJSYmavPmzW6sDKfLyclRXl6e01gFBQUpPj6esXKDgoICSXL8HZORkaHjx487jU+HDh100UUXMT61qKysTEuWLNGRI0eUkJDAuHiQ0aNHa+DAgU5jIdWdPzuEbosxxuiee+7RyJEj1a1bt0r75OXlOf3DVJLjeV5enstrrO/GjRunxo0bq0WLFtqzZ48++OADxzbGxnP88MMPeumll/TnP//Z0cb4eC7Gxj0OHjyosrKySr97vnfPUj4ejJX72e12/eUvf1GPHj0UExMj6eT4+Pr6VrhmBeNTO7755hsFBATIz89PI0eO1LJlyxQdHc24eIglS5YoMzNT06ZNq7CtrowRodtDjB8/Xjab7YyPnTt36qWXXlJRUZEmTJjg7pLrjeqOTbmHH35YW7du1SeffCJvb28NHTpUxhg3foK67VzHR5L27dunAQMG6NZbb9Xw4cPdVHnddz5jAwBWN3r0aGVlZWnJkiXuLgX/ddlll2nbtm3asmWLRo0apWHDhik7O9vdZUHS3r17NXbsWL355pvy9/d3dzku4+PuAnDSQw89pHvuueeMfS655BKtW7dOmzdvlp+fn9O2bt266a677tLrr7+usLCwClf0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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "all_circuits.plot.compare(\"f_24_XI\", \"phi\")" ] }, { "cell_type": "raw", "id": "ff43e2ef", "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": "raw_mimetype,nbsphinx,-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 }