{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "42c8cd6e", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:15.195465Z", "iopub.status.busy": "2024-03-26T19:00:15.195217Z", "iopub.status.idle": "2024-03-26T19:00:15.197749Z", "shell.execute_reply": "2024-03-26T19:00:15.197339Z" }, "nbsphinx": "hidden" }, "outputs": [], "source": [ "# Copyright 2024 Keysight Technologies Inc." ] }, { "cell_type": "raw", "id": "ef5bc225", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Example: Running Randomized Compiling\n", "=====================================\n", "\n", "This example provides a short demonstration of |True-Q|'s\n", ":py:meth:`~trueq.randomly_compile` function and how it can be used to generate a set\n", "of randomly compiled circuits from a single input circuit, while implementing the same\n", "unitary as the original circuit. For more background information, check out our\n", "Randomized Compiling (:tqdoc:`RC`\\) user guide page.\n", "\n", ".. note::\n", " Randomized compiling produces a new circuit collection after each call, so the\n", " output of this example will be different if it's executed again.\n", "\n", "Generating randomly compiled circuits\n", "-------------------------------------\n", "\n", "We begin by creating a simple two-qubit circuit with alternating cycles:" ] }, { "cell_type": "code", "execution_count": 2, "id": "7fdb3ac8", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:15.199736Z", "iopub.status.busy": "2024-03-26T19:00:15.199422Z", "iopub.status.idle": "2024-03-26T19:00:17.509264Z", "shell.execute_reply": "2024-03-26T19:00:17.508776Z" } }, "outputs": [ { "data": { "text/html": [ "
0 1 Key: Labels: (0,) Name: Gate.h Aliases: Gate.h Gate.f Gate.cliff12 Generators: Z: 127.28 X: 127.28 0.71 0.71 0.71 -0.71 H Labels: (0, 1) Name: Gate.cz Aliases: Gate.cz Locally Equivalent: CNOT Generators: ZZ: -90.00 ZI: 90.00 IZ: 90.00 1.00 1.00 1.00 -1.00 CZ CZ Labels: (1,) Name: Gate.h Aliases: Gate.h Gate.f Gate.cliff12 Generators: Z: 127.28 X: 127.28 0.71 0.71 0.71 -0.71 H Labels: (0,) Name: Gate.h Aliases: Gate.h Gate.f Gate.cliff12 Generators: Z: 127.28 X: 127.28 0.71 0.71 0.71 -0.71 H Labels: (0, 1) Name: Gate.cz Aliases: Gate.cz Locally Equivalent: CNOT Generators: ZZ: -90.00 ZI: 90.00 IZ: 90.00 1.00 1.00 1.00 -1.00 CZ CZ Labels: (1,) Name: Gate.h Aliases: Gate.h Gate.f Gate.cliff12 Generators: Z: 127.28 X: 127.28 0.71 0.71 0.71 -0.71 H Labels: (0,) Name: Gate.h Aliases: Gate.h Gate.f Gate.cliff12 Generators: Z: 127.28 X: 127.28 0.71 0.71 0.71 -0.71 H Labels: (0, 1) Name: Gate.cz Aliases: Gate.cz Locally Equivalent: CNOT Generators: ZZ: -90.00 ZI: 90.00 IZ: 90.00 1.00 1.00 1.00 -1.00 CZ CZ Labels: (1,) Name: Gate.h Aliases: Gate.h Gate.f Gate.cliff12 Generators: Z: 127.28 X: 127.28 0.71 0.71 0.71 -0.71 H 1 Labels: (0,) Name: Meas M Labels: (1,) Name: Meas M
" ], "text/plain": [ "DisplayWrapper(" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sim = tq.Simulator()\n", "ideal_result = sim.sample(circuit, n_shots=np.inf)\n", "ideal_result.plot()" ] }, { "cell_type": "raw", "id": "d34a64b2", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "We can also inspect the operator that this circuit is implementing:" ] }, { "cell_type": "code", "execution_count": 4, "id": "1878e54b", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:17.614034Z", "iopub.status.busy": "2024-03-26T19:00:17.613863Z", "iopub.status.idle": "2024-03-26T19:00:17.715141Z", "shell.execute_reply": "2024-03-26T19:00:17.714704Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "circuit_operator = sim.operator(circuit).mat()\n", "tq.math.Superop(circuit_operator).plot_rowstack()" ] }, { "cell_type": "raw", "id": "220a29b7", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "To generate a set of randomly compiled versions of this circuit, we call the\n", ":py:meth:`~trueq.randomly_compile` function and pass our circuit as argument,\n", "together with the desired number of compilations:" ] }, { "cell_type": "code", "execution_count": 5, "id": "e8e07790", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:17.717031Z", "iopub.status.busy": "2024-03-26T19:00:17.716862Z", "iopub.status.idle": "2024-03-26T19:00:17.724073Z", "shell.execute_reply": "2024-03-26T19:00:17.723631Z" } }, "outputs": [], "source": [ "n_compilations = 30\n", "rc_circuits = tq.randomly_compile(circuit, n_compilations=n_compilations)" ] }, { "cell_type": "raw", "id": "075fe993", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "This function returns a :py:class:`~trueq.CircuitCollection` of 30 randomized versions\n", "of our original circuit. For example, the first circuit in this collection looks like\n", "this:" ] }, { "cell_type": "code", "execution_count": 6, "id": "2ebc807f", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:17.726468Z", "iopub.status.busy": "2024-03-26T19:00:17.726303Z", "iopub.status.idle": "2024-03-26T19:00:17.738822Z", "shell.execute_reply": "2024-03-26T19:00:17.738410Z" } }, "outputs": [ { "data": { "text/html": [ "
0 1 Key: twirl: Paulis on [0, 1] protocol: RC Labels: (0,) Name: Gate.h Aliases: Gate.h Gate.f Gate.cliff12 Generators: Z: 127.28 X: 127.28 0.71 0.71 0.71 -0.71 H Labels: (1,) Name: Gate.y Aliases: Gate.y Gate.cliff2 Generators: Y: -180.00 1.00 -1.00 Y 2 Labels: (0, 1) Name: Gate.cz Aliases: Gate.cz Locally Equivalent: CNOT Generators: ZZ: -90.00 ZI: 90.00 IZ: 90.00 1.00 1.00 1.00 -1.00 CZ CZ Labels: (0,) Name: Gate.cliff13 Aliases: Gate.cliff13 Generators: X: -127.28 Z: 127.28 -0.71 0.71 0.71 0.71 13 Labels: (1,) Name: Gate.cliff13 Aliases: Gate.cliff13 Generators: X: -127.28 Z: 127.28 -0.71 0.71 0.71 0.71 13 3 Labels: (0, 1) Name: Gate.cz Aliases: Gate.cz Locally Equivalent: CNOT Generators: ZZ: -90.00 ZI: 90.00 IZ: 90.00 1.00 1.00 1.00 -1.00 CZ CZ Labels: (0,) Name: Gate.cliff6 Aliases: Gate.cliff6 Generators: Y: -90.00 0.71 0.71 -0.71 0.71 6 Labels: (1,) Name: Gate.cliff13 Aliases: Gate.cliff13 Generators: X: -127.28 Z: 127.28 -0.71 0.71 0.71 0.71 13 4 Labels: (0, 1) Name: Gate.cz Aliases: Gate.cz Locally Equivalent: CNOT Generators: ZZ: -90.00 ZI: 90.00 IZ: 90.00 1.00 1.00 1.00 -1.00 CZ CZ Labels: (0,) Name: Gate.x Aliases: Gate.x Gate.cliff1 Generators: X: 180.00 -1.00 -1.00 X Labels: (1,) Name: Gate.cliff6 Aliases: Gate.cliff6 Generators: Y: -90.00 0.71 0.71 -0.71 0.71 6 1 Labels: (0,) Name: Meas M Labels: (1,) Name: Meas M
" ], "text/plain": [ "DisplayWrapper(" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "rc_circuit_operator = sim.operator(rc_circuits[0]).mat()\n", "tq.math.Superop(rc_circuit_operator).plot_rowstack()" ] }, { "cell_type": "raw", "id": "607cce31", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "For a phase-insensitive comparison, we can calculate the process infidelity between\n", "these two operators. The process infidelity is a metric for how different two\n", "operations are; an infidelity of zero means they are equivalent up to a phase. We can\n", "use the built-in :py:meth:`~trueq.math.general.proc_infidelity` function for this:" ] }, { "cell_type": "code", "execution_count": 8, "id": "9be82d83", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:17.840919Z", "iopub.status.busy": "2024-03-26T19:00:17.840755Z", "iopub.status.idle": "2024-03-26T19:00:17.843691Z", "shell.execute_reply": "2024-03-26T19:00:17.843272Z" } }, "outputs": [ { "data": { "text/plain": [ "-8.881784197001252e-16" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tq.math.proc_infidelity(circuit_operator, rc_circuit_operator)" ] }, { "cell_type": "raw", "id": "049225ca", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Finally, when we sample from the final state's probability distribution every\n", "circuit yields the same result:" ] }, { "cell_type": "code", "execution_count": 9, "id": "2708ebd2", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:17.845551Z", "iopub.status.busy": "2024-03-26T19:00:17.845380Z", "iopub.status.idle": "2024-03-26T19:00:17.869692Z", "shell.execute_reply": "2024-03-26T19:00:17.869260Z" } }, "outputs": [], "source": [ "for rc_circuit in rc_circuits:\n", " assert tq.utils.dicts_close(sim.sample(rc_circuit, n_shots=np.inf), ideal_result)" ] }, { "cell_type": "raw", "id": "a2face39", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Measuring RC performance\n", "------------------------\n", "\n", "To test how well Randomized Compiling works in practice, let's walk through a short\n", "simulation of the circuit above with a noisy simulator and look at how the RC circuits\n", "perform relative to the bare circuit.\n", "\n", "First, we create a simulator with an overrotation error as the noise source and\n", "simulate the outcomes of the bare circuit under this noise model:" ] }, { "cell_type": "code", "execution_count": 10, "id": "1048b627", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:17.871506Z", "iopub.status.busy": "2024-03-26T19:00:17.871336Z", "iopub.status.idle": "2024-03-26T19:00:17.968661Z", "shell.execute_reply": "2024-03-26T19:00:17.968250Z" } }, "outputs": [ { "data": { "image/png": "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FCg2NlbZ2dnOxd15eXkym3+6MLZo0SJVVlbqwQcfdBln+vTpmjFjhiRp6tSpKisr0/jx41VcXKw+ffooOzv7mtZBAQAAGA5OsbGxMplMcjgczrapU6de1u83v/mNkpKSalVESkqKUlJSanwtJyfHZf/gwYM/O57JZNJzzz2n5557rlZ1AAAAXI3h4HTgwIH6rAMAAKDBMxycbrnllvqsAwAAoMFz+wGYkrRz507l5eWpsrLSpf3++++/pqIAAAAaIreC0w8//KDhw4fr//7v/1zWPZlMJkmS3W6vuwoBAAAaCLee4zRx4kRFR0fr+PHjCgwM1I4dO/Tll18qLi7ussXcAAAA3sKtK065ubn6xz/+odDQUJnNZpnNZvXp00fp6el64okn9M0339R1nQAAAB7n1hUnu92uFi1aSPrxa1OOHj0q6ccF5Hv27Km76gAAABoQt644devWTd9++62io6MVHx+vuXPnytfXV6+++qrat29f1zUCAAA0CG4Fp2nTpqmsrEyS9Nxzz+nXv/61+vbtq5tuukkrVqyo0wIBAAAaCreCU2JiovPnjh07avfu3Tp16pRCQkKcn6wDAADwNtf0HCdJys/PlyRFRkZeczEAAAANmVuLwy9cuKBnn31WwcHBioqKUlRUlIKDgzVt2jRVVVXVdY0AAAANgltXnP77v/9bq1at0ty5c5WQkCDpx0cUzJgxQydPntSiRYvqtEgAAICGwK3g9M4772j58uUaMmSIsy0mJkaRkZEaNWoUwQkAAHglt27V+fn5KSoq6rL26Oho+fr6XmtNAAAADZJbwSklJUWzZs1SRUWFs62iokIvvPCCUlJS6qw4AACAhsTwrboRI0a47H/++ee6+eab1aNHD0nSt99+q8rKSg0cOLBuKwQAAGggDAen4OBgl/0HHnjAZZ/HEQAAAG9nODgtXbq0PusAAABo8K7pAZhFRUXOL/Xt3LmzWrduXSdFAQAANERuLQ4vKyvTo48+qrZt26pfv37q16+fIiIiNHbsWJWXl9d1jQAAAA2CW8HJarVq/fr1+uijj1RcXKzi4mL97//+r9avX69JkybVdY0AAAANglu36t5//3299957GjBggLPt3nvvVUBAgB5++GEegAkAALySW1ecysvLFRYWdll7mzZtuFUHAAC8llvBKSEhQdOnT9f58+edbefOndPMmTOd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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "noisy_sim = tq.Simulator().add_overrotation(single_sys=0.1, multi_sys=0.1)\n", "noisy_result = noisy_sim.sample(circuit, n_shots=np.inf)\n", "noisy_result.plot()" ] }, { "cell_type": "raw", "id": "b4cacf36", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Note that we are no longer seeing the equal superposition that the noise-free\n", "simulation produced.\n", "\n", "Next, we simulate the randomly compiled circuits under the same noise model, and\n", "sum the outcomes over all circuits:" ] }, { "cell_type": "code", "execution_count": 11, "id": "8247941c", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:17.970507Z", "iopub.status.busy": "2024-03-26T19:00:17.970344Z", "iopub.status.idle": "2024-03-26T19:00:18.078807Z", "shell.execute_reply": "2024-03-26T19:00:18.078386Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# run all circuits on the simulator\n", "noisy_sim.run(rc_circuits, n_shots=np.inf)\n", "\n", "# sum over the outcomes\n", "rc_result = rc_circuits.sum_results()\n", "\n", "# for plotting, we normalize the summed results to be between 0 and 1\n", "rc_result.normalized().plot()" ] }, { "cell_type": "raw", "id": "83294d7e", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Under Randomized Compiling, the noisy simulation produces a result that is much\n", "closer to the noise-free simulation. In fact, we can use the\n", ":py:meth:`trueq.Results.tvd` method of the :py:class:`~trueq.Results` class to\n", "quantify this difference:" ] }, { "cell_type": "code", "execution_count": 12, "id": "4fa8174f", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:18.080648Z", "iopub.status.busy": "2024-03-26T19:00:18.080485Z", "iopub.status.idle": "2024-03-26T19:00:18.083699Z", "shell.execute_reply": "2024-03-26T19:00:18.083280Z" }, "lines_to_next_cell": 2 }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Noisy simulation without RC: 0.1686\n", "Noisy simulation with RC: 0.0336\n" ] } ], "source": [ "bare_tvd = noisy_result.tvd(ideal_result)\n", "rc_tvd = rc_result.normalized().tvd(ideal_result)\n", "\n", "print(\"Noisy simulation without RC: {:.4f}\".format(bare_tvd[0]))\n", "print(\"Noisy simulation with RC: {:.4f}\".format(rc_tvd[0]))" ] }, { "cell_type": "raw", "id": "e0891e10", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "The TVD, or Total Variation Distance is a measure for how far two probability\n", "distributions are apart. A value of zero means the distributions are equivalent.\n", "\n", "Finally, we can produce a visual summary of these results:" ] }, { "cell_type": "code", "execution_count": 13, "id": "af340413", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:18.085504Z", "iopub.status.busy": "2024-03-26T19:00:18.085336Z", "iopub.status.idle": "2024-03-26T19:00:18.221409Z", "shell.execute_reply": "2024-03-26T19:00:18.220994Z" }, "lines_to_next_cell": 0 }, "outputs": [ { "data": { "image/png": "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XmDt2rVlth87diynT582vw4dOlTFFYuIiMi1oE517tzb2xt7e3uysrIslmdlZeHr61vmNr6+vpdtf/bsWcaNG8fnn3/Ogw8+CEDHjh1JS0tjxowZF93mA3B0dMTR0bEiDklERERqsWq94uTg4EDnzp1JTEw0LyspKSExMZHu3buXuU337t0t2gOsWbPG3L6oqIiioiLs7CwPzd7enpKSkgo+AhEREbmeVOsVJ7gwdcCAAQMIDAyka9euxMfHk5eXR0REBADh4eH4+fkRGxsLwPDhwwkKCmLmzJk8+OCDLF68mO3bt/Puu+8C4O7uTlBQENHR0Tg7O9O8eXPWrVvHwoULiYuLq7bjFBERkWtftQensLAwsrOzmTBhApmZmQQEBLBq1SrzAPD09HSLq0c9evRg0aJFjB8/nnHjxtGmTRu++OILbr75ZnObxYsXM3bsWPr168eJEydo3rw5U6ZM4bnnnqvy4xMREZHao9qDE0BkZCSRkZFlrktOTr5oWZ8+fejTp88l+/P19WXevHkVVZ6IiIgIUEs/VSciIiJSGRScRERERKyk4CQiIiJiJQUnERERESspOImIiIhYScFJRERExEoKTiIiIiJWUnASERERsZKCk4iIiIiVFJxERERErKTgJCIiImIlBScRERERKyk4iYiIiFhJwUlERETESgpOIiIiIlZScBIRERGxkoKTiIiIiJUUnERERESsVCOC0+zZszEajTg5OdGtWze2bt162fZLly6lXbt2ODk50aFDB7755ptLtn3uuecwGAzEx8dXcNUiIiJyvan24LRkyRKioqKIiYlhx44ddOrUidDQUI4ePVpm+02bNvHUU08xaNAgdu7cSe/evenduze7du26qO3nn3/O5s2badKkSWUfhoiIiFwHqj04xcXFMXjwYCIiImjfvj0JCQm4uLgwd+7cMtvPmjWL++67j+joaG688UYmT57Mrbfeyttvv23RLiMjgxdffJGPP/6YunXrVsWhiIiISC1XrcGpsLCQ1NRUQkJCzMvs7OwICQkhJSWlzG1SUlIs2gOEhoZatC8pKaF///5ER0dz0003VU7xIiIict2pU507P3bsGMXFxfj4+Fgs9/HxYe/evWVuk5mZWWb7zMxM8/tp06ZRp04dhg0bZlUdBQUFFBQUmN/n5ORYewgiIiJyHan2W3UVLTU1lVmzZjF//nwMBoNV28TGxuLh4WF++fv7V3KVIiIici2q1uDk7e2Nvb09WVlZFsuzsrLw9fUtcxtfX9/Ltl+/fj1Hjx6lWbNm1KlThzp16nDw4EFeeukljEZjmX2OHTuW06dPm1+HDh26+oMTERGRWqdag5ODgwOdO3cmMTHRvKykpITExES6d+9e5jbdu3e3aA+wZs0ac/v+/fvz008/kZaWZn41adKE6OhoVq9eXWafjo6OuLu7W7xERERE/q5axzgBREVFMWDAAAIDA+natSvx8fHk5eUREREBQHh4OH5+fsTGxgIwfPhwgoKCmDlzJg8++CCLFy9m+/btvPvuuwA0aNCABg0aWOyjbt26+Pr60rZt26o9OBEREalVqj04hYWFkZ2dzYQJE8jMzCQgIIBVq1aZB4Cnp6djZ/e/C2M9evRg0aJFjB8/nnHjxtGmTRu++OILbr755uo6BBEREblOVHtwAoiMjCQyMrLMdcnJyRct69OnD3369LG6/z/++KOclYmIiIj8T637VJ2IiIhIZVFwEhEREbGSgpOIiIiIlRScRERERKyk4CQiIiJiJQUnERERESspOImIiIhYScFJRERExEoKTiIiIiJWUnASERERsZKCk4iIiIiVFJxERERErKTgJCIiImIlBScRERERKyk4iYiIiFhJwUlERETESgpOIiIiIlZScBIRERGxUo0ITrNnz8ZoNOLk5ES3bt3YunXrZdsvXbqUdu3a4eTkRIcOHfjmm28s1ptMJiZMmEDjxo1xdnYmJCSEAwcOVOYhiIiIyHWg2oPTkiVLiIqKIiYmhh07dtCpUydCQ0M5evRome03bdrEU089xaBBg9i5cye9e/emd+/e7Nq1y9xm+vTpvPnmmyQkJLBlyxbq1atHaGgo586dq6rDEhERkVqo2oNTXFwcgwcPJiIigvbt25OQkICLiwtz584ts/2sWbO47777iI6O5sYbb2Ty5MnceuutvP3228CFq03x8fGMHz+eRx55hI4dO7Jw4UIOHz7MF198UYVHJiIiIrVNtQanwsJCUlNTCQkJMS+zs7MjJCSElJSUMrdJSUmxaA8QGhpqbv/777+TmZlp0cbDw4Nu3bpdsk8RERERa9Spzp0fO3aM4uJifHx8LJb7+Piwd+/eMrfJzMwss31mZqZ5femyS7X5u4KCAgoKCszvT58+DUBOTo4NR2Od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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tq.visualization.plot_results(\n", " ideal_result,\n", " noisy_result,\n", " rc_result,\n", " labels=[\"Ideal Outcome\", \"Without RC\", \"With RC\"],\n", ")" ] }, { "cell_type": "raw", "id": "9cf4e239", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Randomized Compiling with Qudits\n", "--------------------------------\n", "\n", "Randomized compiling works for higher-dimensional qudits in the same way as for\n", "qubits. The random gates which are added around hard cycles are drawn uniformly\n", "from the :math:`d`\\-dimensional Weyl-Heisenberg group, and the original circuit must\n", "be expressed in terms of gates belonging to the :math:`d`\\-dimensional Clifford group,\n", "that is the group which preserves the :math:`d`\\-dimensional Weyl-Heisenberg group\n", "(see :doc:`../../guides/fundamentals/qudit_math` for more information).\n", "\n", "Let's start by defining a simple circuit following the qubit example above but for\n", "qutrits:" ] }, { "cell_type": "code", "execution_count": 14, "id": "6406dee5", "metadata": { "execution": { "iopub.execute_input": "2024-03-26T19:00:18.223863Z", "iopub.status.busy": "2024-03-26T19:00:18.223682Z", "iopub.status.idle": "2024-03-26T19:00:18.255571Z", "shell.execute_reply": "2024-03-26T19:00:18.255154Z" } }, "outputs": [ { "data": { "text/html": [ "
0 1 Key: Labels: (0,) Name: Gate.f3 Aliases: Gate.f3 0.58 0.58 0.58 0.58 -0.29 0.50j -0.29 -0.50j 0.58 -0.29 -0.50j -0.29 0.50j F3 Labels: (0, 1) Name: Gate.cz3 Aliases: Gate.cz3 1.00 1.00 1.00 1.00 -0.50 0.87j -0.50 -0.87j 1.00 -0.50 -0.87j -0.50 0.87j CZ CZ Labels: (1,) Name: Gate.f3 Aliases: Gate.f3 0.58 0.58 0.58 0.58 -0.29 0.50j -0.29 -0.50j 0.58 -0.29 -0.50j -0.29 0.50j F3 Labels: (0,) Name: Gate.f3 Aliases: Gate.f3 0.58 0.58 0.58 0.58 -0.29 0.50j -0.29 -0.50j 0.58 -0.29 -0.50j -0.29 0.50j F3 Labels: (0, 1) Name: Gate.cz3 Aliases: Gate.cz3 1.00 1.00 1.00 1.00 -0.50 0.87j -0.50 -0.87j 1.00 -0.50 -0.87j -0.50 0.87j CZ CZ Labels: (1,) Name: Gate.f3 Aliases: Gate.f3 0.58 0.58 0.58 0.58 -0.29 0.50j -0.29 -0.50j 0.58 -0.29 -0.50j -0.29 0.50j F3 Labels: (0,) Name: Gate.f3 Aliases: Gate.f3 0.58 0.58 0.58 0.58 -0.29 0.50j -0.29 -0.50j 0.58 -0.29 -0.50j -0.29 0.50j F3 Labels: (0, 1) Name: Gate.cz3 Aliases: Gate.cz3 1.00 1.00 1.00 1.00 -0.50 0.87j -0.50 -0.87j 1.00 -0.50 -0.87j -0.50 0.87j CZ CZ Labels: (1,) Name: Gate.f3 Aliases: Gate.f3 0.58 0.58 0.58 0.58 -0.29 0.50j -0.29 -0.50j 0.58 -0.29 -0.50j -0.29 0.50j F3 1 Labels: (0,) Name: Meas M Labels: (1,) Name: Meas M
" ], "text/plain": [ "DisplayWrapper( 0 1 Key: twirl: Paulis on [0, 1] protocol: RC Labels: (0,) Name: Gate 0.58 -0.29 -0.50j -0.29 0.50j -0.29 0.50j -0.29 0.50j -0.29 0.50j -0.29 -0.50j 0.58 -0.29 0.50j Labels: (1,) Name: Gate.y3pow2 Aliases: Gate.y3pow2 1.00 -0.50 -0.87j -0.50 0.87j Y3 2 Labels: (0, 1) Name: Gate.cz3 Aliases: Gate.cz3 1.00 1.00 1.00 1.00 -0.50 0.87j -0.50 -0.87j 1.00 -0.50 -0.87j -0.50 0.87j CZ CZ Labels: (0,) Name: Gate -0.29 0.50j -0.29 -0.50j 0.58 -0.29 -0.50j -0.29 0.50j 0.58 0.58 0.58 0.58 Labels: (1,) Name: Gate -0.29 -0.50j -0.29 0.50j 0.58 -0.29 0.50j -0.29 0.50j -0.29 0.50j 0.58 -0.29 0.50j -0.29 -0.50j 3 Labels: (0, 1) Name: Gate.cz3 Aliases: Gate.cz3 1.00 1.00 1.00 1.00 -0.50 0.87j -0.50 -0.87j 1.00 -0.50 -0.87j -0.50 0.87j CZ CZ Labels: (0,) Name: Gate -0.29 0.50j -0.29 -0.50j 0.58 -0.29 -0.50j -0.29 0.50j 0.58 0.58 0.58 0.58 Labels: (1,) Name: Gate -0.29 0.50j 0.58 -0.29 -0.50j -0.29 0.50j -0.29 0.50j -0.29 0.50j -0.29 0.50j -0.29 -0.50j 0.58 4 Labels: (0, 1) Name: Gate.cz3 Aliases: Gate.cz3 1.00 1.00 1.00 1.00 -0.50 0.87j -0.50 -0.87j 1.00 -0.50 -0.87j -0.50 0.87j CZ CZ Labels: (0,) Name: Gate 1.00 -0.50 -0.87j -0.50 0.87j Labels: (1,) Name: Gate 0.58 0.58 0.58 -0.29 -0.50j 0.58 -0.29 0.50j -0.29 0.50j 0.58 -0.29 -0.50j 1 Labels: (0,) Name: Meas M Labels: (1,) Name: Meas M " ], "text/plain": [ "DisplayWrapper(" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tq.visualization.plot_results(\n", " ideal_result,\n", " noisy_result,\n", " rc_result,\n", " labels=[\"Ideal Outcome\", \"Without RC\", \"With RC\"],\n", ")" ] } ], "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 }