{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "5af5d87f", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:27.941233Z", "iopub.status.busy": "2024-04-26T18:21:27.940952Z", "iopub.status.idle": "2024-04-26T18:21:27.944608Z", "shell.execute_reply": "2024-04-26T18:21:27.944189Z" }, "nbsphinx": "hidden" }, "outputs": [], "source": [ "# Copyright 2024 Keysight Technologies Inc." ] }, { "cell_type": "raw", "id": "072a747d", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Example: Emulating a device from measured error profiles\n", "========================================================\n", "\n", "In this example, we will see how to use the data from error diagnostics\n", "routines to construct a realistic emulator of a quantum processor.\n", "\n", "For the sake of this example, the device in question will also be a simulator.\n", "To avoid confusion, we will name it ``device``. Our device will be a\n", "minimalistic 3-qubit processor vulnerable to 2 noise sources. The first source\n", "consists of relaxation processes, and the second source consists of unitary\n", "overrotations of the entangling operations. The overrotation percentages are\n", "different for each of the two possible entanglers. This first code block deals\n", "only with initializing the ``device`` simulator; if you are interested solely\n", "in creating an emulator from KNR data retrieved from a device or simulator,\n", "skip to :ref:`this subsection `\\." ] }, { "cell_type": "code", "execution_count": 2, "id": "bd70bfbb", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:27.946531Z", "iopub.status.busy": "2024-04-26T18:21:27.946257Z", "iopub.status.idle": "2024-04-26T18:21:30.222988Z", "shell.execute_reply": "2024-04-26T18:21:30.222487Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import matplotlib.pyplot as plt\n", "import trueq as tq\n", "import trueq.simulation as tqs\n", "\n", "# initiate a simulator\n", "device = tq.Simulator()\n", "\n", "# define time scales for single- and two-qubit gates\n", "t_single_qb_gate = 50e-9\n", "# 50 ns single-qubit gates\n", "t_entangling_gate = 450e-9\n", "# 450 ns entangling gates\n", "\n", "# define time scales for relaxation processes\n", "t1 = 100e-6 # 100 us population relaxation time\n", "t2 = 100e-6 # 100 us phase relaxation time\n", "\n", "# add a relaxation noise source based on the time scales above\n", "device.add_relaxation(\n", " t1=t1, t2=t2, t_single=t_single_qb_gate, t_multi=t_entangling_gate\n", ")\n", "\n", "# define matches for introducing entangling operations with different fidelities\n", "entangler_01_match = tqs.LabelMatch((0, 1)) & tqs.GateMatch(tq.Gate.cx)\n", "entangler_12_match = tqs.LabelMatch((1, 2)) & tqs.GateMatch(tq.Gate.cx)\n", "\n", "# add different unitary overrotation noise sources depending on the entangler\n", "device.add_overrotation(multi_sys=0.12, match=entangler_01_match)\n", "device.add_overrotation(multi_sys=0.08, match=entangler_12_match)" ] }, { "cell_type": "raw", "id": "49bae7ba", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Acquiring error profiles\n", "------------------------\n", "\n", "Now that our device is properly defined, let's pretend that we don't know the\n", "underlying error profile, and that we wish to learn it. To do so, let's\n", "perform typical :tqdoc:`KNR` experiments on two hard cycles, each defined\n", "respectively by a :math:`{\\rm CNOT}` operation between qubit :math:`0`\n", "(control) and :math:`1` (target) and by a :math:`{\\rm CNOT}` operation between\n", "qubit :math:`1` (control) and :math:`2` (target). Since the former has a\n", "significantly worse infidelity than the latter (as seen in the device\n", "simulator above), their respective KNR sequences necessitate slightly\n", "different numbers of random cycles to yield better estimates (see the\n", ":doc:`../error_diagnostics/parameter_selection` example)." ] }, { "cell_type": "code", "execution_count": 3, "id": "abb2c9f0", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:30.225654Z", "iopub.status.busy": "2024-04-26T18:21:30.225136Z", "iopub.status.idle": "2024-04-26T18:21:37.749851Z", "shell.execute_reply": "2024-04-26T18:21:37.749382Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# define the twirl over all three qubits to ensure thorough diagnostics\n", "twirl = tq.Twirl(\"P\", (0, 1, 2))\n", "\n", "# define the cycles of interest for the diagnostics\n", "cycle1 = tq.Cycle({(0, 1): tq.Gate.cx})\n", "cycle2 = tq.Cycle({(1, 2): tq.Gate.cx})\n", "\n", "# initialize a circuit collection with KNR circuits to characterize each hard cycle\n", "knr_circuits = tq.make_knr(\n", " cycle1, n_random_cycles=[4, 16, 24], n_circuits=30, subsystems=1, twirl=twirl\n", ")\n", "knr_circuits += tq.make_knr(\n", " cycle2, n_random_cycles=[4, 24, 32], n_circuits=30, subsystems=1, twirl=twirl\n", ")\n", "\n", "# run the circuits on our device\n", "device.run(knr_circuits, n_shots=1e4)\n", "\n", "# plot the error profile:\n", "layout = tq.visualization.Graph.linear(3, show_labels=True) # specify the chip layout\n", "knr_circuits.plot.knr_heatmap(layout) # plot the heatmap" ] }, { "cell_type": "raw", "id": "6c3cb13c", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "In the :tqdoc:`KNR` heatmap above, we can see the reconstructed error profile\n", "for each of the two hard cycles of interest. The labels on the left (e.g.\n", ":math:`ZI`\\) indicate specific errors, and the heatmap associates those errors\n", "with a probability. The cycle whose noise profile is plotted on the left,\n", "``cycle1``, is significantly noisier than ``cycle2``, with some errors\n", "reaching a probability of roughly :math:`1.2\\%`\\. Note that the accuracy of\n", "the emulator is limited by the quality of the error diagnostics. For\n", "instance, in the above reconstructed map, some error probabilities have an\n", "uncertainty associated to them, as observed by the varying color spectrum in\n", "each of the heatmap's cells. Moreover, certain errors are sometimes conflated\n", "(e.g. :math:`\\{IZ,ZZ\\}`\\), meaning that the diagnostic protocol couldn't\n", "distinguish which of the errors occured. In our case, the conflated errors\n", "are not expected to be a problem because they occur with very low probability\n", "compared to the dominant errors.\n", "\n", ".. _make_emulator:\n", "\n", "Using the reconstructed error profiles to make an emulator\n", "----------------------------------------------------------\n", "\n", "Once the :tqdoc:`KNR` circuits are run, an emulator can be easily constructed\n", "by instantiating a new :py:class:`~trueq.Simulator` and adding the measured\n", "error profile via the :py:meth:`~trueq.Simulator.add_knr_noise` method:" ] }, { "cell_type": "code", "execution_count": 4, "id": "fe5e595f", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:37.752012Z", "iopub.status.busy": "2024-04-26T18:21:37.751824Z", "iopub.status.idle": "2024-04-26T18:21:37.842725Z", "shell.execute_reply": "2024-04-26T18:21:37.842228Z" } }, "outputs": [], "source": [ "emulator = tq.Simulator().add_knr_noise(knr_circuits)" ] }, { "cell_type": "raw", "id": "b170ddd2", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "To see if our ``emulator`` correctly mimics the ``device``, let's submit a\n", "circuit to each and compare the distribution of results. In this example, we\n", "choose a circuit that ideally produces a GHZ state :math:`|\\psi\\rangle = (|\n", "000\\rangle+ | 111 \\rangle)/\\sqrt{2}`\\:" ] }, { "cell_type": "code", "execution_count": 5, "id": "c3e9de63", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:21:37.844949Z", "iopub.status.busy": "2024-04-26T18:21:37.844561Z", "iopub.status.idle": "2024-04-26T18:21:37.874907Z", "shell.execute_reply": "2024-04-26T18:21:37.874468Z" } }, "outputs": [ { "data": { "text/html": [ "
0 1 2 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.cx Aliases: Gate.cx Gate.cnot Locally Equivalent: CNOT Generators: ZX: -90.00 IX: 90.00 ZI: 90.00 1.00 1.00 1.00 1.00 CX CX Labels: (1, 2) Name: Gate.cx Aliases: Gate.cx Gate.cnot Locally Equivalent: CNOT Generators: ZX: -90.00 IX: 90.00 ZI: 90.00 1.00 1.00 1.00 1.00 CX CX 1 Labels: (0,) Name: Meas M Labels: (1,) Name: Meas M Labels: (2,) Name: Meas M
" ], "text/plain": [ "DisplayWrapper(" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tq.visualization.plot_results(\n", " device_results, emulator_results, labels=[\"Device\", \"Emulator\"]\n", ")\n", "\n", "plt.gca().set_yscale(\"log\")" ] }, { "cell_type": "raw", "id": "f49f35d8", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Notice that the ``emulator`` and the ``device`` yield very similar output\n", "distributions. Of course, the two histograms differ slightly, and this can be\n", "due to two causes. First, the results displayed in the histograms were\n", "obtained from finite measurement samples, and are therefore susceptible to\n", "small statistical deviations. Due to the logarithmic scaling of the plot,\n", "these statistical deviations are visually amplified for unlikely outcomes such\n", "as :math:`010` and :math:`101`\\. Second, the emulator originates from\n", "approximated error profiles. Small inaccuracies in the reconstructed error\n", "profiles may in turn yield small inaccuracies in the emulator." ] } ], "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 }