{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "55c15204", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:45.973997Z", "iopub.status.busy": "2024-04-26T18:16:45.973716Z", "iopub.status.idle": "2024-04-26T18:16:45.977424Z", "shell.execute_reply": "2024-04-26T18:16:45.976991Z" }, "nbsphinx": "hidden" }, "outputs": [], "source": [ "# Copyright 2024 Keysight Technologies Inc." ] }, { "cell_type": "raw", "id": "4ff4661f", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Example: Phase Tracking with the Compiler\n", "=========================================\n", "\n", "Phase tracking is a technique that exploits the ability of quantum control hardware to\n", "perform accurate and arbitrary phase rotations of pulse shapes in order to reduce the\n", "number of pulse shapes required to form a device's native quantum gate set. Moreover,\n", "it causes the native gate set to be continuously parametric which greatly reduces the\n", "synthesis cost of arbitrary unitaries. For example, if an :math:`R_x(90)` gate is\n", "tuned up, then any single qubit unitary can be synthesized using two of these pulses\n", "and phase tracking.\n", "\n", "Below, we call these phase rotation gates *virtual gates* because they are not\n", "directly used to update the quantum state. Instead, virtual gates are better thought\n", "of as pulse compiler directives, where the pulse compiler is a program that prepares a\n", "sequence of waveforms for the control electronics given a circuit of native gates. In\n", "a multi-qubit device that employs phase tracking, the pulse compiler accumulates a\n", "phase on each qubit in the circuit whenever a virtual gate is encountered. Any time a\n", "non-virtual gate is encountered on a given subset of qubits, the corresponding\n", "cummulative phases are used to modify the phases of the pulse shape.\n", "\n", "We illustrate how phase tracking works using the following single-qubit circuit\n", "expressed as rotations in matrix multiplication order. This circuit is assumed to\n", "be the output of a pre-compiler that has already converted some original circuit into\n", ":math:`R_x(90)` and :math:`R_z(\\phi)` rotations.\n", "\n", ".. math::\n", "\n", " R_z(d)\\cdot R_x(90) \\cdot R_z(c)\\cdot R_x(90)\n", " \\cdot R_z(b) \\cdot R_x(90) \\cdot R_z(a)\n", "\n", "This can be rewritten as\n", "\n", ".. math::\n", "\n", " R_z(a+b+c+d) \\cdot R_z(-(a+b+c)) \\cdot R_x(90) \\cdot R_z(a+b+c)\n", " \\\\ \\quad\n", " \\cdot R_z(-(a+b)) \\cdot R_x(90) \\cdot R_z(a+b) \\cdot R_z(-a)\n", " \\cdot R_x(90) \\cdot R_z(a)\n", "\n", "and further simplified to\n", "\n", ".. math::\n", "\n", " R_z(a+b+c+d)R_{a+b+c}(90)R_{a+b}(90) R_a(90)\n", "\n", "where we have defined a nutation about some vector in the x-y plane as\n", "\n", ".. math ::\n", "\n", " R_\\phi(\\theta)=R_z(-\\phi)R_x(90)R_z(\\phi)\n", " =\\operatorname{exp}(-i \\theta (\\cos(\\phi)X-\\sin(\\phi)Y)/2).\n", "\n", "Thus if a pulse shape for the :math:`R_x(90)` gate is tuned up, and our control\n", "electronics are able to rotate it in quadrature by arbitrary angles thereby producing\n", "operations :math:`R_\\phi(90)`\\, then we have sufficient control to perform the\n", "original circuit. Note further that any qubit unitary can be decomposed into an\n", "alternating sequence :math:`R_z(c)\\cdot R_x(90) \\cdot R_z(b) \\cdot R_x(90) \\cdot\n", "R_z(a)` where :math:`a`\\, :math:`b`\\, :math:`c` are its ZXZ Euler angles. It follows\n", "that this is the *only* pulse shape that is required to perform single qubit gates.\n", "\n", "For most systems, the final accumulated phase in the z-axis, :math:`R_z(a+b+c+d)`\\,\n", "does not actually need to be implemented on the qubit. This is because the final\n", "operation will be a measurement of the qubit along the z-axis, whose outcome will not\n", "be affected by a z-rotation.\n", "\n", "The process of phase tracking on multi-qubit gates is similar to the single qubit\n", "case, which will be seen in the examples below. As previously mentioned, a different\n", "phase needs to be tracked for each qubit, and pulse shapes may require a parameter for\n", "every qubit they act on." ] }, { "cell_type": "code", "execution_count": 2, "id": "ed6f121a", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:45.979347Z", "iopub.status.busy": "2024-04-26T18:16:45.979077Z", "iopub.status.idle": "2024-04-26T18:16:48.525906Z", "shell.execute_reply": "2024-04-26T18:16:48.525386Z" } }, "outputs": [], "source": [ "import trueq as tq\n", "import numpy as np" ] }, { "cell_type": "raw", "id": "5e359322", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Using the Controlled-Z Gate\n", "---------------------------\n", "A device whose only native two-qubit gate is the CZ gate is the simplest case because\n", "this commutes with the virtual Z gate on both qubits. This means we only need to apply\n", "accumulated phases to the single qubit gates.\n", "\n", "First, we define a config object that contains all of the necessary gate factories.\n", "Since we will be doing phase tracking, we require not only the parametric native gate\n", "factories and the virtual gate factory, but also a factory for each of the static\n", "gates that correspond to the parametric gates at parameter value 0.\n", "\n", "factories for our parametric gates. the first is a 90 degree rotation about an\n", "axis in the x-y plane, equivalent to z(-a)*x(90)*z(a). the second is our cz gate\n", "which happens to need no parameters because it commutes with virtual gates" ] }, { "cell_type": "code", "execution_count": 3, "id": "81058fd1", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:48.528725Z", "iopub.status.busy": "2024-04-26T18:16:48.528230Z", "iopub.status.idle": "2024-04-26T18:16:48.543688Z", "shell.execute_reply": "2024-04-26T18:16:48.543230Z" } }, "outputs": [], "source": [ "r90 = tq.config.GateFactory.from_hamiltonian(\n", " \"r90\", [[\"Z\", \"-theta\"], [\"X\", \"90\"], [\"Z\", \"theta\"]]\n", ")\n", "cz = tq.config.GateFactory.from_matrix(\"cz\", np.diag([1, 1, 1, -1]))\n", "\n", "# factory for our virtual gate\n", "z = tq.config.GateFactory.from_hamiltonian(\"z\", [[\"Z\", \"theta\"]])\n", "\n", "# factory for static gates, equal to our parametric gates at 0\n", "x90 = tq.config.GateFactory.from_matrix(\"x90\", r90(0))\n", "factories = [x90, z, cz, r90]" ] }, { "cell_type": "raw", "id": "e6293e1d", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Next, we initialize our phase-tracking compiler pattern. Note that it chooses the\n", "virtual gate factory by looking for a rotation about the Z-axis in units of degrees.\n", "If this is not the case for you, specify any other single qubit rotation manually\n", "using ``virtual=factory``." ] }, { "cell_type": "code", "execution_count": 4, "id": "ea0a4440", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:48.545711Z", "iopub.status.busy": "2024-04-26T18:16:48.545360Z", "iopub.status.idle": "2024-04-26T18:16:48.550525Z", "shell.execute_reply": "2024-04-26T18:16:48.550076Z" } }, "outputs": [], "source": [ "phase_tracker = tq.compilation.PhaseTrack(factories=factories)" ] }, { "cell_type": "raw", "id": "9038b013", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Next we set up our compiler and the rest of its passes. There are two essential steps:\n", "\n", " 1. Convert all abstract gates into the static gates and the virtual gate\n", " (:py:class:`~trueq.compilation.Native1Q` and\n", " :py:class:`~trueq.compilation.Native2Q`\\).\n", " 2. Use the :py:class:`~trueq.compilation.PhaseTrack` pattern to accumulate phases and\n", " compile them into the parametric gate parameters.\n", "\n", "There are additionally justification, merge, and identity removal book-keeping passes\n", "that can be adjusted to one's needs." ] }, { "cell_type": "code", "execution_count": 5, "id": "3ded477f", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:48.552380Z", "iopub.status.busy": "2024-04-26T18:16:48.552100Z", "iopub.status.idle": "2024-04-26T18:16:48.554923Z", "shell.execute_reply": "2024-04-26T18:16:48.554493Z" } }, "outputs": [], "source": [ "compiler = tq.Compiler(\n", " [\n", " tq.compilation.Native2Q(factories),\n", " tq.compilation.Justify(),\n", " tq.compilation.Merge(),\n", " tq.compilation.RemoveId(),\n", " tq.compilation.Native1Q(factories),\n", " phase_tracker,\n", " tq.compilation.RemoveEmptyCycle(),\n", " ]\n", ")" ] }, { "cell_type": "raw", "id": "d298d00a", "metadata": { "lines_to_next_cell": 2, "raw_mimetype": "text/restructuredtext" }, "source": [ "We illustrate the output of this compiler using a circuit that generates the GHZ state\n", "on :math:`n` qubits. Before compilation, our abstract circuit on 4 qubits is as\n", "follows:" ] }, { "cell_type": "code", "execution_count": 6, "id": "3ca0240f", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:48.556782Z", "iopub.status.busy": "2024-04-26T18:16:48.556514Z", "iopub.status.idle": "2024-04-26T18:16:48.583183Z", "shell.execute_reply": "2024-04-26T18:16:48.582760Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "
True-Q formatting will not be loaded without trusting this\n", "notebook or rerunning the affected cells. Notebooks can be marked as trusted by clicking\n", "\"File -> Trust Notebook\".
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", "
Circuit
\n", "
\n", "
\n", "
Key:
\n", "
\n", " No key present in circuit.\n", "
\n", "
\n", "
\n", "
\n", "
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " Gate.h\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.h
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.h
  • \n", "
  • Gate.f
  • \n", "
  • Gate.cliff12
  • \n", "
\n", "
\n", "\n", " \n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 127.279
  • \n", "
  • 'Z': 127.279
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0, 1):\n", " Gate.cx\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cx
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cx
  • \n", "
  • Gate.cnot
  • \n", "
\n", "
\n", "\n", " \n", "
Likeness:
\n", "
\n", "
    \n", "
  • CNOT
  • \n", "
\n", "
\n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'ZX': -90.0
  • \n", "
  • 'IX': 90.0
  • \n", "
  • 'ZI': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (1, 2):\n", " Gate.cx\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cx
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cx
  • \n", "
  • Gate.cnot
  • \n", "
\n", "
\n", "\n", " \n", "
Likeness:
\n", "
\n", "
    \n", "
  • CNOT
  • \n", "
\n", "
\n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'ZX': -90.0
  • \n", "
  • 'IX': 90.0
  • \n", "
  • 'ZI': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (2, 3):\n", " Gate.cx\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Gate.cx
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cx
  • \n", "
  • Gate.cnot
  • \n", "
\n", "
\n", "\n", " \n", "
Likeness:
\n", "
\n", "
    \n", "
  • CNOT
  • \n", "
\n", "
\n", "\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'ZX': -90.0
  • \n", "
  • 'IX': 90.0
  • \n", "
  • 'ZI': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", " 1\n", "
\n", "
Marker 1
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "Circuit(Cycle((0,): Gate.h),Cycle((0, 1): Gate.cx),Cycle((1, 2): Gate.cx),Cycle((2, 3): Gate.cx),Cycle((0,): Meas(), (1,): Meas(), (2,): Meas(), (3,): Meas(), marker=1))" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def ghz(n):\n", " circuit = tq.Circuit([{0: tq.Gate.h}])\n", " for idx in range(n - 1):\n", " circuit.append({(idx, idx + 1): tq.Gate.cnot})\n", " circuit.measure_all()\n", " return circuit\n", "\n", "\n", "ghz(4)" ] }, { "cell_type": "raw", "id": "594d09f9", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "The output bitstring distribution is as expected:" ] }, { "cell_type": "code", "execution_count": 7, "id": "a480ed3b", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:48.585172Z", "iopub.status.busy": "2024-04-26T18:16:48.584865Z", "iopub.status.idle": "2024-04-26T18:16:48.739349Z", "shell.execute_reply": "2024-04-26T18:16:48.738913Z" } }, "outputs": [ { "data": { "image/png": "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O3aUtLQ045QCJSUlkpaWJklJSdesHxYWJjt37rRZNm3aNMnJyZE33nij3ELk7e0t3t7eFTJ+AABQtbi0OImIJCcny4gRIyQqKkqio6Nl3rx5kpubK4mJiSIiMnz4cAkKCpLU1FTx8fGRtm3b2ty/Xr16IiLXLAcAAHA2lxenIUOGyJkzZ2T69OmSkZEhkZGRsmrVKmPCeHp6unh43FJTsQAAwG3K5cVJRCQpKancQ3MiIuvWrbvhfd977z3nDwgAAKAc7MoBAAAwieIEAABgEsUJAADAJIoTAACASRQnAAAAkyhOAAAAJlGcAAAATKI4AQAAmERxAgAAMIniBAAAYBLFCQAAwCSKEwAAgEkUJwAAAJMoTgAAACZRnAAAAEyiOAEAAJhEcQIAADCJ4gQAAGASxQkAAMAkihMAAIBJFCcAAACTKE4AAAAmUZwAAABMojgBAACYRHECAAAwieIEAABgkl3FKT8/X/Ly8ozbR48elXnz5snq1audNjAAAAB3Y1dxeuCBB2Tp0qUiInLx4kWJiYmR1157TR544AFZuHChUwcIAADgLuwqTlu3bpVu3bqJiMi///1vCQwMlKNHj8rSpUtl/vz5Th0gAACAu7CrOOXl5UmdOnVERGT16tUycOBA8fDwkM6dO8vRo0edOkAAAAB3YVdxCg0NlU8++USOHTsmX331lfTp00dERE6fPi1169Z16gABAADchV3Fafr06fLss89KSEiIREdHS2xsrIiU7n266667nDpAAAAAd1HNnjsNHjxYunbtKqdOnZKIiAhjee/eveXBBx902uAAAADcid3ncWrYsKHUqVNH/ve//0l+fr6IiHTq1EnCwsKcNjgAAAB3YldxOnfunPTu3VtatWol9913n5w6dUpEREaNGiXPPPOMUwcIAADgLuwqTn/605+kevXqkp6eLjVr1jSWDxkyRFatWuW0wQEAALgTu+Y4rV69Wr766itp0qSJzfKWLVtyOgIAAHDbsmuPU25urs2eJqvz58+Lt7e3w4MCAABwR3YVp27duhmXXBERsVgsUlJSInPmzJG7777baYMDAABwJ3YdqpszZ4707t1bfvzxRyksLJTnn39edu3aJefPn5dvv/3W2WMEAABwC3btcWrbtq3s379funbtKg888IDk5ubKwIED5aeffpIWLVo4e4wAAABuwe7zOPn6+soL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AAAAt2RXcUpKSpKZM2dKQUGBsaygoEBefvllSUpKctrgAAAA3InpQ3UDBw60ub1mzRpp0qSJREREiIjI9u3bpbCwUHr37u3cEQIAALgJ08XJ19fX5vagQYNsbnM6AgAAcLszXZzefffdihwHAACA23PoBJhnzpwxLup75513yh133OGUQQEAALgjuyaH5+bmyuOPPy6NGjWS7t27S/fu3aVx48YyatQoycvLc/YYAQAA3IJdxSk5OVnWr18vn376qVy8eFEuXrwo//nPf2T9+vXyzDPPOHuMAAAAbsGuQ3UfffSR/Pvf/5aePXsay+677z6pUaOGPPzww5wAEwAA3Jbs2uOUl5cngYGB1yxv0KABh+oAAMBty67iFBsbKzNmzJDLly8by/Lz8yUlJcW4dt3NWLBggYSEhIiPj4/ExMTIpk2brrvu22+/Ld26dRM/Pz/x8/OT+Pj4G64PAADgLHYVp3nz5sm3334rTZo0kd69e0vv3r0lODhYvvvuO3njjTdu6rFWrlwpycnJMmPGDNm6datERERIQkKCnD59utz1161bJ4888oh8/fXXsnHjRgkODpY+ffrIiRMn7NkUAAAA0+wqTu3atZMDBw5IamqqREZGSmRkpMyePVsOHDggbdq0uanHev3112XMmDGSmJgorVu3lkWLFknNmjVlyZIl5a7//vvvy1NPPSWRkZESFhYmixcvlpKSEklLS7NnUwAAAEy76cnhV65ckbCwMPnss89kzJgxDoUXFhbKli1bZMqUKcYyDw8PiY+Pl40bN5p6jLy8PLly5Yr4+/uX+/2CggKba+plZ2c7NGYAAFB13fQep+rVq9vMbXLE2bNnpbi4+JqJ5oGBgZKRkWHqMSZNmiSNGzeW+Pj4cr+fmpoqvr6+xheXhgEAAPay61DduHHj5JVXXpGioiJnj+emzJ49W1asWCH/7//9P/Hx8Sl3nSlTpkhWVpbxdezYsUoeJQAAuF3YdR6nzZs3S1pamqxevVratWsntWrVsvn+xx9/bOpxAgICxNPTUzIzM22WZ2ZmSsOGDW9437lz58rs2bNlzZo10r59++uu5+3tLd7e3qbGAwAAcCN2Fad69erJoEGDHA738vKSjh07SlpamgwYMEBExJjonZSUdN37zZkzR15++WX56quvJCoqyuFxAAAAmHFTxamkpEReffVV2b9/vxQW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ZK5VUVGRFhYWamJiog4ePFgvX75snCRVtfSj1LGxsfrwww/bjO12zx0yZIjN/Rx9vl2Vq1p6iN96Uk3V0utIWt/UL168aCx31iVMbpXcsj9PZf8IvdVyKxvFyU67du3SYcOGae/evXX06NG6bt063bJli7Zo0UIfeughYz3rL0RycrL+/ve/J/cWzP3jH/+on332mfE96y/9wYMHjTf1X375RceNG6dRUVEO/bVIbuXkql5brNetW6eenp42h4us66xbt049PDyc8vHwWy3X0bLmLrlW1qL2/fff2+wRKSws1DfffFNXr15dpXKvvobprZLrShQnO+zdu1d9fX116NChOnnyZI2IiNBOnTrpk08+qcuXL9fmzZvrgAEDtLCw0Pjheeyxx3To0KEOnRyQXNflRkVF6cSJE411rI996NAh7dmzp1osFq1Vq5ZxnS1y3TdXtfQQ0Ny5c22u26haelJCDw8Pm4nKqqUXDQ4PD3do7hi5rs+9mvVw0sMPP6yJiYlavXp1m8tRkeueua5GcbpJJSUlOnXqVJvd59nZ2frSSy9pdHS0Pvroo/rJJ59oq1attFWrVjpgwAB9+OGHtVatWg5NbiTXtbmzZs3SyMjIay58WVBQoEOHDlV/f3+HPtVFbuXkqpZORvb391eLxaJTpkyxmS+Um5urKSkpxrXotm7dqufOndPJkydraGio8alNcm/N3PJs2LDBOJ2FIxPuya2cXHdAcbLDyJEjr7nGUHZ2tr766qsaGxurc+bM0ezsbJ00aZKOHj1ak5KSHH6xJ9f1uXPnztWoqCidPXu2qpa++c+fP189PT2dMmmW3IrPvXTpkj7++OM6cuRIXbBggVosFn3uueds3qiLi4v1n//8pzZs2FCDgoI0LCxMGzdu7NCLPbmuzb3em3pBQYGOHTtW69Sp49BrB7mVk+suKE43wXrYYP78+dqlSxfdu3evzffPnz+vo0eP1piYGJvDRI5+4olc98kdM2aMxsXFGRNW//vf/9qcvI9c981VLZ2IumDBAuOTeytXriz3TV219JxS69ev1y+//NLhT+6R6/rc8t7UN23apG3atHH40C+5lZPrLihOdjh48KAGBATo448/brywW98M0tPT1WKx6Oeff26s76zLEpDrPrllPyLuLORWTu7VF/9dsWKFWiwWffbZZ40X/StXrjj90i3kuj7Xeuma4uJi48z0zro2GrmVk+sOKE52Wrt2rXp7e+u4ceNsGvapU6c0IiJCv/vuO3LJJddNc1VLPw1kLWoffPCB8RfziRMn9E9/+pMOHDhQL1265PTrsZHrHrkDBgyokI/Ck1s5ua5EcXLAf//7X/X29taBAwfqihUrdPfu3Tp58mRt1KiRzXWHyCWXXPfLVVWb8witWLFCq1evrnfeeadWq1atQk/KR67rc50xT49c1+a6CsXJQVu2bNEePXpo06ZNtUWLFtqqVatK+UEhl1xynaOkpMT4i7lXr17q7+9fKZd/IJdccm9NFCcnyMrK0sOHD+uOHTuccikEcsklt/JyVUsPN1ivmVWZFxoll1xybz3VBA6rW7eu1K1bl1xyyb0Fc63atGkjW7dulfbt25NLLrm3WG5lsqiqunoQAOBqqioWi4Vccsm9BXMrE8UJAADAJA9XDwAAAOBWQXECAAAwieIEAABgEsUJAADAJIoTAACASRQnAAAAkyhOAAAAJlGcAAAATKI4AQAAmERxAgAAMOn/A/8VVm2QEIKnAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tq.Simulator().sample(ghz(4), n_shots=np.inf).plot()" ] }, { "cell_type": "raw", "id": "e402d126", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Following compilation, our circuit contains only gates that were generated using the\n", "``r90`` or ``cz`` factory. The parameters the factories used to construct the gates\n", "are stored in the gate objects, along with the gates' matrix representations. Single\n", "qubit gates, under this compiler, are always decomposed into two 90 degree nutations." ] }, { "cell_type": "code", "execution_count": 8, "id": "14109280", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:48.741443Z", "iopub.status.busy": "2024-04-26T18:16:48.741061Z", "iopub.status.idle": "2024-04-26T18:16:48.770077Z", "shell.execute_reply": "2024-04-26T18:16:48.769647Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "
True-Q formatting will not be loaded without trusting this\n", "notebook or rerunning the affected cells. Notebooks can be marked as trusted by clicking\n", "\"File -> Trust Notebook\".
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", "
Circuit
\n", "
\n", "
\n", "
Key:
\n", "
\n", " No key present in circuit.\n", "
\n", "
\n", "
\n", "
\n", "
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0, 1):\n", " cz()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • cz()
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cz
  • \n", "
\n", "
\n", "\n", " \n", "
Likeness:
\n", "
\n", "
    \n", "
  • CNOT
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'ZZ': -90.0
  • \n", "
  • 'ZI': 90.0
  • \n", "
  • 'IZ': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -1.00\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 180.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (1, 2):\n", " cz()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • cz()
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cz
  • \n", "
\n", "
\n", "\n", " \n", "
Likeness:
\n", "
\n", "
    \n", "
  • CNOT
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'ZZ': -90.0
  • \n", "
  • 'ZI': 90.0
  • \n", "
  • 'IZ': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -1.00\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 180.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (2, 3):\n", " cz()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • cz()
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cz
  • \n", "
\n", "
\n", "\n", " \n", "
Likeness:
\n", "
\n", "
    \n", "
  • CNOT
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'ZZ': -90.0
  • \n", "
  • 'ZI': 90.0
  • \n", "
  • 'IZ': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 1.00\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -1.00\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 180.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 180.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sy
  • \n", "
  • Gate.cliff7
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 270.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 180.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " 1\n", "
\n", "
Marker 1
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "Circuit(Cycle((0,): r90(theta), (1,): r90(theta)),Cycle((0,): r90(theta), (1,): r90(theta)),Cycle((0, 1): cz()),Cycle((1,): r90(theta), (2,): r90(theta)),Cycle((1,): r90(theta), (2,): r90(theta)),Cycle((1, 2): cz()),Cycle((2,): r90(theta), (3,): r90(theta)),Cycle((2,): r90(theta), (3,): r90(theta)),Cycle((2, 3): cz()),Cycle((0,): r90(theta), (1,): r90(theta), (2,): r90(theta), (3,): r90(theta)),Cycle((0,): r90(theta), (1,): r90(theta), (2,): r90(theta), (3,): r90(theta)),Cycle((0,): Meas(), (1,): Meas(), (2,): Meas(), (3,): Meas(), marker=1))" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "circuit = compiler.compile(ghz(4))\n", "circuit" ] }, { "cell_type": "raw", "id": "1369f036", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Finally, our output bitstring distribution is unchanged, as expected." ] }, { "cell_type": "code", "execution_count": 9, "id": "fc0dafb8", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:48.772315Z", "iopub.status.busy": "2024-04-26T18:16:48.772012Z", "iopub.status.idle": "2024-04-26T18:16:48.918885Z", "shell.execute_reply": "2024-04-26T18:16:48.918400Z" } }, "outputs": [ { "data": { "image/png": "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O3aUtLQ045QCJSUlkpaWJklJSdesHxYWJjt37rRZNm3aNMnJyZE33nij3ELk7e0t3t7eFTJ+AABQtbi0OImIJCcny4gRIyQqKkqio6Nl3rx5kpubK4mJiSIiMnz4cAkKCpLU1FTx8fGRtm3b2ty/Xr16IiLXLAcAAHA2lxenIUOGyJkzZ2T69OmSkZEhkZGRsmrVKmPCeHp6unh43FJTsQAAwG3K5cVJRCQpKancQ3MiIuvWrbvhfd977z3nDwgAAKAc7MoBAAAwieIEAABgEsUJAADAJIoTAACASRQnAAAAkyhOAAAAJlGcAAAATKI4AQAAmERxAgAAMIniBAAAYBLFCQAAwCSKEwAAgEkUJwAAAJMoTgAAACZRnAAAAEyiOAEAAJhEcQIAADCJ4gQAAGASxQkAAMAkihMAAIBJFCcAAACTKE4AAAAmUZwAAABMojgBAACYRHECAAAwieIEAABgkl3FKT8/X/Ly8ozbR48elXnz5snq1audNjAAAAB3Y1dxeuCBB2Tp0qUiInLx4kWJiYmR1157TR544AFZuHChUwcIAADgLuwqTlu3bpVu3bqJiMi///1vCQwMlKNHj8rSpUtl/vz5Th0gAACAu7CrOOXl5UmdOnVERGT16tUycOBA8fDwkM6dO8vRo0edOkAAAAB3YVdxCg0NlU8++USOHTsmX331lfTp00dERE6fPi1169Z16gABAADchV3Fafr06fLss89KSEiIREdHS2xsrIiU7n266667nDpAAAAAd1HNnjsNHjxYunbtKqdOnZKIiAhjee/eveXBBx902uAAAADcid3ncWrYsKHUqVNH/ve//0l+fr6IiHTq1EnCwsKcNjgAAAB3YldxOnfunPTu3VtatWol9913n5w6dUpEREaNGiXPPPOMUwcIAADgLuwqTn/605+kevXqkp6eLjVr1jSWDxkyRFatWuW0wQEAALgTu+Y4rV69Wr766itp0qSJzfKWLVtyOgIAAHDbsmuPU25urs2eJqvz58+Lt7e3w4MCAABwR3YVp27duhmXXBERsVgsUlJSInPmzJG7777baYMDAABwJ3YdqpszZ4707t1bfvzxRyksLJTnn39edu3aJefPn5dvv/3W2WMEAABwC3btcWrbtq3s379funbtKg888IDk5ubKwIED5aeffpIWLVo4e4wAAABuwe7zOPn6+soL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AAAAt2RXcUpKSpKZM2dKQUGBsaygoEBefvllSUpKctrgAAAA3InpQ3UDBw60ub1mzRpp0qSJREREiIjI9u3bpbCwUHr37u3cEQIAALgJ08XJ19fX5vagQYNsbnM6AgAAcLszXZzefffdihwHAACA23PoBJhnzpwxLup75513yh133OGUQQEAALgjuyaH5+bmyuOPPy6NGjWS7t27S/fu3aVx48YyatQoycvLc/YYAQAA3IJdxSk5OVnWr18vn376qVy8eFEuXrwo//nPf2T9+vXyzDPPOHuMAAAAbsGuQ3UfffSR/Pvf/5aePXsay+677z6pUaOGPPzww5wAEwAA3Jbs2uOUl5cngYGB1yxv0KABh+oAAMBty67iFBsbKzNmzJDLly8by/Lz8yUlJcW4dt3NWLBggYSEhIiPj4/ExMTIpk2brrvu22+/Ld26dRM/Pz/x8/OT+Pj4G64PAADgLHYVp3nz5sm3334rTZo0kd69e0vv3r0lODhYvvvuO3njjTdu6rFWrlwpycnJMmPGDNm6datERERIQkKCnD59utz1161bJ4888oh8/fXXsnHjRgkODpY+ffrIiRMn7NkUAAAA0+wqTu3atZMDBw5IamqqREZGSmRkpMyePVsOHDggbdq0uanHev3112XMmDGSmJgorVu3lkWLFknNmjVlyZIl5a7//vvvy1NPPSWRkZESFhYmixcvlpKSEklLS7NnUwAAAEy76cnhV65ckbCwMPnss89kzJgxDoUXFhbKli1bZMqUKcYyDw8PiY+Pl40bN5p6jLy8PLly5Yr4+/uX+/2CggKba+plZ2c7NGYAAFB13fQep+rVq9vMbXLE2bNnpbi4+JqJ5oGBgZKRkWHqMSZNmiSNGzeW+Pj4cr+fmpoqvr6+xheXhgEAAPay61DduHHj5JVXXpGioiJnj+emzJ49W1asWCH/7//9P/Hx8Sl3nSlTpkhWVpbxdezYsUoeJQAAuF3YdR6nzZs3S1pamqxevVratWsntWrVsvn+xx9/bOpxAgICxNPTUzIzM22WZ2ZmSsOGDW9437lz58rs2bNlzZo10r59++uu5+3tLd7e3qbGAwAAcCN2Fad69erJoEGDHA738vKSjh07SlpamgwYMEBExJjonZSUdN37zZkzR15++WX56quvJCoqyuFxAAAAmHFTxamkpEReffVV2b9/vxQW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ZK5VUVGRFhYWamJiog4ePFgvX75snCRVtfSj1LGxsfrwww/bjO12zx0yZIjN/Rx9vl2Vq1p6iN96Uk3V0utIWt/UL168aCx31iVMbpXcsj9PZf8IvdVyKxvFyU67du3SYcOGae/evXX06NG6bt063bJli7Zo0UIfeughYz3rL0RycrL+/ve/J/cWzP3jH/+on332mfE96y/9wYMHjTf1X375RceNG6dRUVEO/bVIbuXkql5brNetW6eenp42h4us66xbt049PDyc8vHwWy3X0bLmLrlW1qL2/fff2+wRKSws1DfffFNXr15dpXKvvobprZLrShQnO+zdu1d9fX116NChOnnyZI2IiNBOnTrpk08+qcuXL9fmzZvrgAEDtLCw0Pjheeyxx3To0KEOnRyQXNflRkVF6cSJE411rI996NAh7dmzp1osFq1Vq5ZxnS1y3TdXtfQQ0Ny5c22u26haelJCDw8Pm4nKqqUXDQ4PD3do7hi5rs+9mvVw0sMPP6yJiYlavXp1m8tRkeueua5GcbpJJSUlOnXqVJvd59nZ2frSSy9pdHS0Pvroo/rJJ59oq1attFWrVjpgwAB9+OGHtVatWg5NbiTXtbmzZs3SyMjIay58WVBQoEOHDlV/f3+HPtVFbuXkqpZORvb391eLxaJTpkyxmS+Um5urKSkpxrXotm7dqufOndPJkydraGio8alNcm/N3PJs2LDBOJ2FIxPuya2cXHdAcbLDyJEjr7nGUHZ2tr766qsaGxurc+bM0ezsbJ00aZKOHj1ak5KSHH6xJ9f1uXPnztWoqCidPXu2qpa++c+fP189PT2dMmmW3IrPvXTpkj7++OM6cuRIXbBggVosFn3uueds3qiLi4v1n//8pzZs2FCDgoI0LCxMGzdu7NCLPbmuzb3em3pBQYGOHTtW69Sp49BrB7mVk+suKE43wXrYYP78+dqlSxfdu3evzffPnz+vo0eP1piYGJvDRI5+4olc98kdM2aMxsXFGRNW//vf/9qcvI9c981VLZ2IumDBAuOTeytXriz3TV219JxS69ev1y+//NLhT+6R6/rc8t7UN23apG3atHH40C+5lZPrLihOdjh48KAGBATo448/brywW98M0tPT1WKx6Oeff26s76zLEpDrPrllPyLuLORWTu7VF/9dsWKFWiwWffbZZ40X/StXrjj90i3kuj7Xeuma4uJi48z0zro2GrmVk+sOKE52Wrt2rXp7e+u4ceNsGvapU6c0IiJCv/vuO3LJJddNc1VLPw1kLWoffPCB8RfziRMn9E9/+pMOHDhQL1265PTrsZHrHrkDBgyokI/Ck1s5ua5EcXLAf//7X/X29taBAwfqihUrdPfu3Tp58mRt1KiRzXWHyCWXXPfLVVWb8witWLFCq1evrnfeeadWq1atQk/KR67rc50xT49c1+a6CsXJQVu2bNEePXpo06ZNtUWLFtqqVatK+UEhl1xynaOkpMT4i7lXr17q7+9fKZd/IJdccm9NFCcnyMrK0sOHD+uOHTuccikEcsklt/JyVUsPN1ivmVWZFxoll1xybz3VBA6rW7eu1K1bl1xyyb0Fc63atGkjW7dulfbt25NLLrm3WG5lsqiqunoQAOBqqioWi4Vccsm9BXMrE8UJAADAJA9XDwAAAOBWQXECAAAwieIEAABgEsUJAADAJIoTAACASRQnAAAAkyhOAAAAJlGcAAAATKI4AQAAmERxAgAAMOn/A/8VVm2QEIKnAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tq.Simulator().sample(circuit, n_shots=np.inf).plot()" ] }, { "cell_type": "raw", "id": "6497851e", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Using the Cross-Resonance Gate\n", "------------------------------\n", "The maximally entangling cross-resonance gate is equal to\n", "\n", ".. math::\n", " CR=\\begin{pmatrix}\n", " 1 & -i & 0 & 0 \\\\ -i & 1 & 0 & 0 \\\\ 0 & 0 & 1 & i \\\\ 0 & 0 & i & 1\n", " \\end{pmatrix}/\\sqrt{2}\n", " =\\frac{I\\otimes I-iZ\\otimes X}{\\sqrt{2}}.\n", "\n", "By adjusting the phase of the microwave control used to generate this gate, we can\n", "rotate action of the second qubit about the z-axis, which results in the parametric\n", "gate\n", "\n", ".. math::\n", "\n", " CR(\\phi)\n", " = \\frac{I\\otimes I-i\\cos(\\phi)Z\\otimes X+i\\sin(\\phi)Z\\otimes Y}{\\sqrt{2}}.\n", "\n", "\n", "This parametric gate is defined below as a gate factory, along with other factories\n", "necessary for this example." ] }, { "cell_type": "code", "execution_count": 10, "id": "b53bbe1d", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:48.921158Z", "iopub.status.busy": "2024-04-26T18:16:48.920773Z", "iopub.status.idle": "2024-04-26T18:16:48.943951Z", "shell.execute_reply": "2024-04-26T18:16:48.943489Z" } }, "outputs": [], "source": [ "# define parametric gate factories\n", "r90 = tq.config.GateFactory.from_hamiltonian(\n", " \"r90\", [[\"Z\", \"-theta\"], [\"X\", \"90\"], [\"Z\", \"theta\"]]\n", ")\n", "cr = tq.config.GateFactory.from_hamiltonian(\n", " \"cr\", [[\"IZ\", \"-theta\"], [\"ZX\", \"90\"], [\"IZ\", \"theta\"]]\n", ")\n", "\n", "# factory for our virtual gate\n", "z = tq.config.GateFactory.from_hamiltonian(\"z\", [[\"Z\", \"theta\"]])\n", "\n", "# factory for static gates, equal to our parametric gates at 0\n", "x90 = tq.config.GateFactory.from_matrix(\"x90\", r90(0))\n", "cr0 = tq.config.GateFactory.from_matrix(\"cr0\", cr(0))\n", "\n", "# put everything into a factory list. static gates should go first\n", "factories = [x90, z, cr0, r90, cr]" ] }, { "cell_type": "raw", "id": "bc9e6b31", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "As in the CZ section, we define a compiler that performs phase-tracking using our\n", "native gates, and test it on a circuit that generates a 4-qubit GHZ state." ] }, { "cell_type": "code", "execution_count": 11, "id": "e2abac0c", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:48.945969Z", "iopub.status.busy": "2024-04-26T18:16:48.945662Z", "iopub.status.idle": "2024-04-26T18:16:48.973588Z", "shell.execute_reply": "2024-04-26T18:16:48.973163Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "
True-Q formatting will not be loaded without trusting this\n", "notebook or rerunning the affected cells. Notebooks can be marked as trusted by clicking\n", "\"File -> Trust Notebook\".
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", "
Circuit
\n", "
\n", "
\n", "
Key:
\n", "
\n", " No key present in circuit.\n", "
\n", "
\n", "
\n", "
\n", "
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 180.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0, 1):\n", " cr(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • cr(theta)
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Likeness:
\n", "
\n", "
    \n", "
  • CNOT
  • \n", "
\n", "
\n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'ZY': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 180.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (1, 2):\n", " cr(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • cr(theta)
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Likeness:
\n", "
\n", "
    \n", "
  • CNOT
  • \n", "
\n", "
\n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'ZY': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 180.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (2, 3):\n", " cr(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • cr(theta)
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Likeness:
\n", "
\n", "
    \n", "
  • CNOT
  • \n", "
\n", "
\n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'ZY': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", " 1\n", "
\n", "
Marker 1
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "Circuit(Cycle((0,): r90(theta), (1,): r90(theta)),Cycle((0,): r90(theta), (1,): r90(theta)),Cycle((0, 1): cr(theta)),Cycle((1,): r90(theta), (2,): r90(theta)),Cycle((1,): r90(theta), (2,): r90(theta)),Cycle((1, 2): cr(theta)),Cycle((2,): r90(theta), (3,): r90(theta)),Cycle((2,): r90(theta), (3,): r90(theta)),Cycle((2, 3): cr(theta)),Cycle((3,): r90(theta)),Cycle((3,): r90(theta)),Cycle((0,): Meas(), (1,): Meas(), (2,): Meas(), (3,): Meas(), marker=1))" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compiler = tq.Compiler(\n", " [\n", " tq.compilation.Native2Q(factories),\n", " tq.compilation.Justify(),\n", " tq.compilation.Merge(),\n", " tq.compilation.RemoveId(),\n", " tq.compilation.Native1Q(factories),\n", " tq.compilation.PhaseTrack(factories),\n", " tq.compilation.Justify(),\n", " ]\n", ")\n", "\n", "circuit = compiler.compile(ghz(4))\n", "circuit" ] }, { "cell_type": "raw", "id": "1ea78764", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Finally, we verify that our bitstring output is as expected." ] }, { "cell_type": "code", "execution_count": 12, "id": "982b763b", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:48.975604Z", "iopub.status.busy": "2024-04-26T18:16:48.975341Z", "iopub.status.idle": "2024-04-26T18:16:49.121417Z", "shell.execute_reply": "2024-04-26T18:16:49.120823Z" } }, "outputs": [ { "data": { "image/png": "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t9ZLyc/PF39/fzl06JB4eHjUWK4zs8kll1xyySW3NuT+FVWVgoICadGixV+u69Ti5OPjI66urpKTk2OzPCcnR5o1a1bpfZo1a3ZF67u5uYmbm5vNsiZNmlR90Hby8PBw2g+Ls7LJJZdccskltzbkXs5f7WmycOrk8AYNGkiXLl0kLS3NusxsNktaWppERUVVep+oqCib9UVE/vOf/1xyfQAAAEdx+qG6xMREGT16tISHh0tERITMnz9fCgsLJT4+XkRERo0aJX5+fpKSkiIiIk888YT07t1bXn31VRk4cKAsX75cfvnlF3nvvfecuRkAAKAOcHpxGjZsmBw/flxmzJgh2dnZEhYWJqtXr7ZOAM/KyhIXlz93jEVHR8uyZctk+vTpMm3aNGnbtq2sWrVKbr75ZmdtgiFubm6SlJR00WHDazmbXHLJJZdccmtDriOZ1Mi5dwAAAHD+BTABAACuFhQnAAAAgyhOAAAABlGcAAAADKI4AQAAGERxgtPUtRM62V4AuPpRnGqBim8w1/obTllZmc33ZrO5RvNr+vmta9tbXHzhk9hLSkqcku/s3x9n59c0tvfaVte21wiu4+Rku3btko8++kiysrKkR48e0qNHD2nfvr2YzWabC386Wk5OjuTl5UlQUFC1ZVRmx44d8uabb8rRo0clODhYhg4dKl26dKn23MOHD0tOTk6NZJVX17Z3+/btkpycLCdOnJCmTZvKhAkTpG/fvtWeu3//fjl48KD06dNHRC682NfUh3jn5+dLUVGRNGjQQLy8vGo8v7pfKyo6efKk5OXliapK69atayzXoqysTFxdXWssr65tb25uruTk5EhRUZFERETUWK7ld6a0tFTq1XP6tbkviz1OTrR9+3aJjIyU7du3y549e2ThwoVy2223SVpamri4uFRb09+xY4dERETI888/L9u2bauWjMrs3LlTunXrJmfPnpV69epJRkaGdO/eXZYuXVqtubt27ZLw8HB55JFHZP369dWaVV5d297du3dLVFSUNGnSREJCQsTFxUViYmJk9uzZcurUqWrN7dq1q9xzzz3yxRdfiIiIyWSqkb+Ut2zZIrfffrtER0dLbGysPPjgg1JaWlrtpWnv3r2SnJwsZ8+eFRcXlxrbi7l582bp27ev3HrrrdK/f38ZMGCAZGVlVXvuzp075aGHHpKCggJxdXW9aC9udalr2/vbb79Jjx495O9//7vcdddd0qVLF1m/fr2cPXu2WnO3bdsmgwYNktOnT0u9evWktLS0WvPspnCK0tJSHTlypI4YMcK67Ndff9WxY8eqq6urfvHFF6qqWlZW5tDcI0eOaHR0tIaGhmpERISOHTtWt2zZ4tCMS3n00Uc1Li7O+n1OTo5Onz5dXV1d9e2331ZVVbPZ7NDMY8eOaZ8+fbR79+56++23a//+/fWHH35waMal1LXtfe655/S2226zWfbee++pyWTSKVOmaGFhocMzc3JydMCAAdq/f38dMWKEhoSE6L///W/r7Y5+fss7cOCA3nDDDfrUU0/pJ598oi+//LK2bdtWO3bsqHv27Km23D179uiNN96oTZs21cTEROvz6ujXiooOHTqkLVq00ClTpui6det05cqV2qVLF/3b3/6ma9as0dLS0mrJ3bt3r/r5+am7u7sOGTJE8/PzVVWrLc+irm3vsWPHtHXr1jpt2jT97bffdOPGjRoTE6PNmzfXhQsXWsfhaL///ru2atVKTSaTdunSRU+dOqWq1b+99qA4OUlJSYn27t1bp0yZYrM8NzdXH3nkEXV3d9f09HSH56alpWlsbKxu2rRJFy9erJ07d66x8jR48GAdO3bsRctfeuklNZlM+uWXX6qqY9/sNm7cqP369dP//ve/+vXXX9domahr2zthwgS96667VPXCm7jljXzJkiXq4uKi7733nqo6dnu3bdumgwYN0jVr1mhmZqaOGTOmxsrTJ598ouHh4ZqXl2ddtm/fPo2MjNTg4GDNyclRVccWmtOnT2tcXJwOHTpUn3nmGY2MjNRJkybVSHlau3athoSE6NGjR63LSktL9fbbb9fmzZtbX68cOYaCggIdMWKEDh06VOfPn6/dunXTv//97zVSJura9v7yyy8aGBioO3futFkeHx+vf/vb33TZsmUO/10qLCzUxx9/XIcMGaIrVqzQbt26aadOnWp9eaI4OdFjjz2mUVFRevLkSZvlWVlZOmTIEL3jjjtsXpQdoaioSH/88Ufr94sWLbKWp82bN1uXW35BHPmi8MILL6i/v78eOXLEJqOkpEQnTJigwcHBeuzYMYflWWzatMn67y+//NJaJr7//nvrcst2sr1Vl5qaqg0bNtTdu3er6oUXPcs2z5o1S5s0aaJ79+51WJ5F+Rf6X375RUePHq0hISG6atUq6/LqeAF+66231MfHx/q95bk8evSohoaGavfu3R2eWVZWptOmTdPly5drcXGxzpw5UyMjI/WJJ56otDw58o3uf//3f7VJkyZ67tw5VVUtLi623tavXz8NDg6ulpKakpKiS5cu1dLSUl26dGmNlYm6tr3fffed+vj46L59+1RVbfYQ33fffdq8eXPNzc1VVcf+XL333nu6bNkyVVVdv379VVGeKE5OtGLFCg0LC9NXX331ot2gixcv1hYtWmhWVpbDcyv+0Fe25yk5OVl/++03u7PKv4j//PPP2r17d01ISLjor/E1a9ZoixYt9Ndff7U7s2JuRV999ZUOGDBAY2NjrXtinnjiCf3pp58ckm2Rnp6u0dHRNbK9l1Od21v+Re3w4cM6YMAAveOOO/TAgQOqqnr+/HlVVd2+fbvedNNN+s0339idWTG3ooyMDGt5sux5evzxx/WTTz5xSLbl9+fgwYPq5+enKSkp1tss/7///e9/NTAwUJcvX+6QTNU/t/n8+fPWMZw9e1aTk5Ot5ens2bOqqtY3e0cqKChQf39/feyxx6zLLGXiyJEj2rp1a3355ZcdllfZm3NxcbEuWbLkojJRVFTksD8yLbkFBQV600031dj2lv+ZtoyhJra3fGaHDh1spheU/zkKDg7WiRMnOjSvotLSUv3hhx8uKk9nz57V33//vdoPRxtFcaoh+/fv1/fee08XLlyoq1evti5PSEjQoKAgffvtt/WPP/6wLt+2bZsGBgbqtm3bqiVX1fYX1VKexo0bp/fee6+6uLjYlW35ga+YM2fOHO3cubM+88wzevjwYevyw4cPa9u2bXX9+vVVzqyYW/GXrPwvquUw1oABAzQuLk5NJpNmZmZWOXfv3r06Z84cnTVrli5ZssS6/NVXX9WwsLBq297yuUuXLrW5rfzz7ujtPX78eKU5H330kfbo0UOHDh1q/ctV9cIhpuDgYP3888+rnHm5XFXb/19LeerYsaPGxsbavb2qf76JlJSUqKpqXl6eTpo0SXv27Gn9i9kiLy9Pg4KC9MUXX7Qrs7JcC8ub+Llz5zQ5OVm7deumkyZN0lOnTunYsWN18ODBdmdbnlOz2aylpaX6+uuva1hYmE1hKCsr03PnzmmvXr00MTHR7syKuRbli+M///lPa5k4ceKEPvzwwxobG2st6lVx9uxZ67ZYst944w3t1KlTtW5vxVwLy/93dW1veZbXys8//1wDAgL08ccft95m+TkbPny4jho1yiF5FuX/fy1jMJvN+v3331vLU05OjiYkJGiPHj2qZZ5kVVCcasDmzZu1adOm2q1bN23Tpo02btxYx4wZY/3rYezYsXrzzTfrpEmTdO/evXr8+HF99tlnNSgoSE+cOOHQ3HHjxl10zN7igw8+0Pr166unp6dde0K2b9+urVq10ueff966rPyL/owZMzQyMlLvvPNO3bRpk+7Zs0enTJmiLVu2tOvQVWW5lytPn3/+uXp5eWmTJk1sDm9dqS1btqinp6f27t1bu3btqm5ubjpgwADroc/Zs2dr165dHb69leUOHDjQZk9S+f9fR23v9u3b1d3d3Wb+Vvn/3/fff1/79OmjnTp10jVr1mh6erpOmzZNmzdvbtce1MpyL1eefvrpJ73pppvUy8vL7r2nW7du1bvvvltjYmI0NjZW161bp6oX9joNHDhQe/furYsWLbK5z4ABA3Tu3LkXjcue3O+//97mkJFl+y3lKTo6Wtu2bauNGze2a47knj17dMOGDap64XfIMv4jR47oY489pl26dNHk5GSb+8TFxenkyZNVterbWzG3Isvjnj9/XpcsWaLR0dHq4+OjjRo1smsP6pYtW7Rfv37arVs37dChgy5ZskRPnTqlp0+f1oSEBO3cuXO1bG/F3KVLl1oP7avalkVHbu+uXbuse3/Lj/306dM6d+5cDQoK0vHjx9vcZ/jw4Tp+/HibnwdH5VZkNpv1hx9+0O7du2u9evW0UaNG+vPPP1cpszpQnKpZQUGBRkVFWXdxHjt2TL/++mv19vbWfv36WQ/hJCcna8+ePa1nFjRr1syuv5AvlztgwACbuSZlZWVaWlqqjz/+uHp5eenWrVurnJuVlaVhYWHatm1bvfnmm21ebMq/4H/44Yd6++23q8lk0ptvvllbtmxp1/ZeLrey8lRWVqaTJk3S66+/3q6J8WfPntXY2Fh99NFHVfXCLvTt27drYGCgRkdHW1/clixZ4tDtvVxur169dO3atdZ1LRO1HbG9hw8f1oiICO3cubO2aNFCH3roIett5f9/165dqyNHjlQ3NzcNDg7W9u3b27W9l8ut7LBdWVmZJiYmqru7u90nPuzevVs9PDz0oYce0meeeUaHDh2qJpNJp0+froWFhbp//3699957tWPHjjpy5EhdunSpTpgwQT08PKzzvRyZm5SUpAcPHrSuZ9n+vLw87dixo3p5ednMV7xSu3bt0uuuu05NJpN+9913qmo72T8rK0ufffZZbdOmjcbExOicOXP0wQcf1MaNG+uOHTscnluR5Q33zJkz2qNHD/Xy8rLr/3jfvn3q5eWljz32mL755ps6ceJEbdKkiY4bN0737t2rJ0+e1MmTJ2vr1q0dur2V5Xp5eelDDz2kv/zyi3U9y3PgqO3dvXu3uru7q8lk0pUrV6rqhefU8rz+8ccf+vbbb+tNN92kt9xyiz7yyCM6YsQIbdiwoV3vDZfKvZSioiIdOHCgent725VbHShO1ayoqEg7d+580VyHXbt2qY+Pjw4aNMi6LCcnR7/++mtdv369Hjp0qFpz4+LibN5wNmzYoCaTSTdu3FjlTLPZrP/4xz/0jjvu0G+//VaTkpK0ffv2lyxPqhfmPW3bts2uPS9Gciu+uW7evFn9/PxsXqCqqnv37tZd+ZZd50eOHNFOnTpp9+7drRMqS0tLHbK9RnJ79+5t8zO0ZcsWu7fXbDbrBx98oIMHD9bvvvtOP/zwQ/X19bUpMRUPN+zYsUMPHTpkc4itOnIrHrLYvXu3RkdH2314TlV1+vTp2r9/f5tlb7zxhnp7e+vTTz+tJSUlevToUV24cKF27txZu3btqrfeeqtde/Uul9u0aVOdPHmyZmdnW5cXFxfrpEmTtGHDhnaVpuPHj+ugQYN04MCBev/996uXl5empaWpqm15OnnypK5Zs0b79++vffv21bvuusuuvXp/lVvR+fPndfr06eru7m738zx37lzt1auXzbKPPvpIO3bsqCNGjNCDBw9qYWGhQ7f3crmdOnXSUaNG2ZSjkpISh2zvqVOndOjQoTpkyBCdOHGiuri46IoVK1TVtjwVFxfrvn37dMyYMXrPPfdcNB5H51ZUWlqqc+bM0QYNGtTIPNArRXGqZmfOnFE/Pz+bN3HLYY3ffvtNGzVqpC+88IJTcmfNmmVzn/Lzg6rq2LFjunjxYlW9UAQtJab8Nlacq+EIRnIrvgDbO7nSbDZrUVGRhoeH64QJE6zLLeXw2LFj6u3trY888ohdOVXNTUhIsLmfIyaTHj9+XP/1r3+p6oVyvmjRIvX19bXZrV9+8rKjGMmtWI7PnDnjkOynnnrKWmDKF7QFCxZow4YNNTU11Wb9oqIiLSoqqtbcRo0a6TvvvKOqf/5cT5w40e4/BDZv3qwjRozQb7/9Vvfs2aPx8fHq5eWla9asUdULz3FlRcbe3+m/yq0s88UXX3TICSxz587VsLAwLSgosMlZuXKlBgYG6tSpUy+6jyNewy6X27ZtW33uuedsDou99NJLdm/vvn379IknntDPP/9cCwoKdMqUKeri4mL9A/tSh+HsPbPtr3Iry1y0aJFu377drtzqQnGqAa+++qredNNNNhNjLb94s2fP1sjISP3jjz8cfsaA0VzLi3J1nFp79OjRSkvMqlWrqvU008vlWp4De7fXcv9PPvlE3dzcbCaFW944lyxZogEBAXrgwAGHPb9Xknvw4EHr8+yo7S2voKDAugeofIlZunSpzeGkmszdv3//Je9XFa+//rpef/311rkn5feaJicna6NGjRy2rVeS27hx42o567b8noVdu3bpmDFj1MvLS//zn/+o6p+H9h1RDq8k1zJB3dFnDK5YsUKvu+46697J8s/zO++8ow0aNLjoUJEjfraqkusI5S/OmpeXp5MnT1YXFxf9+OOPVfXP57n8yUqO2N6/ylW9UNAqXp6nNqI4OdjRo0f1559/1tWrV1vfsPbv36/33HOP9uzZ86LTsRcsWKDBwcF2ny1Qm3JVL55QaikxSUlJOmnSJDWZTDaTIK+WXEtW+ZL7xx9/6OOPP66tW7e+6OyqTz/91O5J/rUtt6L8/Hybw2eJiYlqMpnsKhPOyq1McXGx9urVS7t162Z9Pi2l4dixY+rv76+ffvqpQzOdmVvR7t27rSXGsgfo6aef1o8++qhar8xe3bnlH+Puu+9Wf39/65zT8uUsMDBQ33jjDbvznJ17qd+lgoICa4mx7AF66qmndM6cOQ45a68qudVxVMKRKE4O9Ntvv2nLli01KChIPT09tV27dvrxxx9rSUmJbty4UQcNGqRdu3a1NuySkhJ99tlntXfv3nZdzr625LZv316XLVtm/UulfIk5evSozpgxQ00mk3p5edl1SMFZuVu2bNE+ffpY/8ov/4KwdetWfeihh7RZs2b6xhtvaFFRkZ45c0anTZumnTt3tuuvqNqYW1FBQYF+8MEHajKZ1Nvbu9qe5+rMVb2wp+PZZ5/VMWPG6Pz5862Tu9PS0jQiIkL79etn85f4yZMntX379nZfZqG25araHh60lJgbb7xRBw0apCaTya7DRs7KzcnJqfSSJVu3btXu3btrq1atbOYGFhYW6i233HLRpT6u1txLsZQYNzc3vfXWW9VkMtk1l8pZuTWF4uQgubm52r59e502bZru27dPjxw5osOGDdOgoCBNTk7Wc+fO6aZNm3TChAlar149DQ0N1W7duqmXl5ddk99qW25wcLAmJSVVeoXZBx54QD08POy6PpSzcvfv36+BgYFqMpm0bdu21he58i/ye/bs0dmzZ6ubm5sGBgZqaGio3nDDDXZNUK5tuZcrMfHx8dq4ceNqeZ6rO1f1wrXTPD09dcCAATpkyBD19PTUvn37Wg+Ffv755xoREaGtWrXSb775RteuXavTp0/XZs2a2bWXqzblxsTE6Pvvv29dp/zP2bZt29Tf31+9vb3tenNzVu727du1QYMGOnTo0Ern+23YsEH79OmjTZo00XfffVc//vhjnTJlijZt2tTmmmTXSm5FJ06c0ODgYPX29rarnDortyZRnBxk27ZtGhAQcNFfvJMnT9YOHTro3Llz1Ww265kzZzQ9PV1nzZqlCxYssPvDQGtjbseOHfXll1+2OQy4cOFCbdKkid1nOTkjt6ioSKdPn6533323pqWlaa9evbRly5aVlhjVC2eSffDBB7p8+XLrfJtrKbeyEvPpp59qy5Yt7drj46xc1QuHxUaOHGkzX2rPnj06bNgw7dq1q7777ruqeuFN4b777tMbbrhBg4KCtEOHDpqRkXFN5Xbr1k1ff/1163LLHtxJkyZp/fr17Tq7ylm52dnZGh0drX379lUfHx+95557Kn1TP3nypCYmJmpwcLC2a9dOIyMj7XrtqO25FmVlZfrkk0+qyWSy66xMZ+XWNIqTg/z666/q5+dn/UgLy0cfqF74uIeWLVtWS5uurbmtWrWyyc3Oztbff//9qs1dtmyZ9Tj8gQMHtGfPnjZv6kbm5FxLuRXzTpw4YXNl9KstV1X1tttus17ioPzHqowZM0a7d++uX331lXXdHTt26JEjR+y6zEJtzu3Zs6d+9tln1nV37dqlAwcOdMjlHZyR+/XXX+v999+vGzdu1J9//lm9vb0v+6Z++PBhPXXqlN1nGl8tuYcOHdIJEybYfeq/s3JrGsXJDpazSyx69Ohhc12O8hP9wsPDdfjw4XUy196z55yZW9kkRbPZrPv27bPuEbG8cRcVFWlmZqbdE+6vltxz585pZmamFhQUXJW5FqWlpVpSUqLx8fE6dOhQPXfunPUiqaoXTqWOiorSe++912Zs13rusGHDbO5n7/PtrFzVC4f4LRfVVL3wOZKWN/XTp09blzvqI0yultzyP0/l/wi92nJrGsWpirZt26YjRozQfv366bhx43TdunWakZGhbdq00Xvuuce6nuUXIjExUe+8805yr8Lchx9+WL/44gvrbZZf+r1791rf1H///Xd97LHHNDw83K6/FsmtmVzVi4v1unXr1NXV1eZwkWWddevWqYuLi0NOD7/acu0ta7Ul18JS1H766SebPSIlJSX69ttv67fffluncit+hunVkutMFKcq2Llzp3p6eurw4cN1ypQpGhoaql27dtVHHnlEly1bpq1bt9a4uDgtKSmx/vCMHDlShw8fbtfFAcl1Xm54eLhOmjTJuo7lsfft26d9+vRRk8mkjRo1sn7OFrm1N1f1wiGguXPn2nxuo+qFixK6uLjYTFRWvfChwcHBwXbNHSPX+bkVWQ4n3XvvvRofH6/169e3+TgqcmtnrrNRnK6Q2WzWadOm2ew+z8/P15kzZ2pERITef//9umrVKg0KCtKgoCCNi4vTe++9Vxs1amTX5EZynZs7e/ZsDQsLu+iDL4uLi3X48OHq7e1t11ld5NZMruqFycje3t5qMpl06tSpNvOFCgsLNTk52fpZdJmZmfrHH3/olClTNDAw0HrWJrlXZ25l1q9fb72chT0T7smtmdzagOJUBWPGjLnoM4by8/P1lVde0aioKH355Zc1Pz9fJ0+erOPGjdOEhAS7X+zJdX7u3LlzNTw8XOfMmaOqF97833jjDXV1dXXIpFlyqz/3zJkz+uCDD+qYMWM0NTVVTSaTPvPMMzZv1GVlZfrPf/5TmzVrpn5+ftq+fXtt0aKFXS/25Do391Jv6sXFxTphwgS9/vrr7XrtILdmcmsLitMVsBw2eOONN7R79+66c+dOm9tPnjyp48aN08jISJvDRPae8URu7ckdP368RkdHWyesfvbZZzYX7yO39uaqXpiImpqaaj1zb8WKFZW+qateuKbU999/r19//bXdZ+6R6/zcyt7UN2zYoB06dLD70C+5NZNbW1CcqmDv3r3q4+OjDz74oPWF3fJmkJWVpSaTSb/88kvr+o76WAJya09u+VPEHYXcmsmt+OG/y5cvV5PJpE8//bT1Rf/8+fMO/+gWcp2fa/nomrKyMuuV6R312Wjk1kxubUBxqqK1a9eqm5ubPvbYYzYN+9ixYxoaGqo//vgjueSSW0tzVS+cDWQpah9//LH1L+YjR47ok08+qYMHD9YzZ844/PPYyK0duXFxcdVyKjy5NZPrTBQnO3z22Wfq5uamgwcP1uXLl+v27dt1ypQp2rx5c5vPHSKXXHJrX66q2lxHaPny5Vq/fn1t166d1qtXr1ovykeu83MdMU+PXOfmOgvFyU4ZGRnau3dvbdmypbZp00aDgoJq5AeFXHLJdQyz2Wz9i7lv377q7e1dIx//QC655F6dKE4OkJeXp/v379fNmzc75KMQyCWX3JrLVb1wuMHymVk1+UGj5JJL7tWnnsBuHh4e4uHhQS655F6FuRYdOnSQzMxM6dSpE7nkknuV5dYkk6qqswcBAM6mqmIymcgll9yrMLcmUZwAAAAMcnH2AAAAAK4WFCcAAACDKE4AAAAGUZwAAAAMojgBAAAYRHECAAAwiOIEAABgEMUJAADAIIoTAACAQRQnAAAAg/4/ThBRv5Kgj94AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tq.Simulator().sample(circuit, n_shots=np.inf).plot()" ] }, { "cell_type": "raw", "id": "a7bdd7f5", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Using the Mølmer-Sørensen Gate\n", "------------------------------\n", "A maximally entangling MS gate has the form\n", "\n", ".. math::\n", "\n", " MS(90)=\\begin{pmatrix}\n", " 1 & 0 & 0 & -i \\\\ 0 & 1 & -i & 0 \\\\ 0 & -i & 1 & 0 \\\\ -i & 0 & 0 & 1\n", " \\end{pmatrix}/\\sqrt{2}\n", " =\\frac{I\\otimes I-iX\\otimes X}{/\\sqrt{2}}\n", "\n", "which, for a trapped ion, is generated by lasing on both qubits simultaneously.\n", "However, by changing the phase of the frequency sources sent to the optical modulators\n", "on each qubit, the azimuthal angle of the MS gate can be changed independently on both\n", "qubits qubits. This allows the implementation of the parametric gate\n", "\n", ".. math::\n", "\n", " MS(90, \\phi_1, \\phi_2) = \\frac{II-iR_{\\phi_1}(90)\\otimes R_{\\phi_2}(90)}{\\sqrt{2}}\n", "\n", "where :math:`R_\\phi(\\theta)` is defined above.\n", "\n", "This parametric gate is defined below as a gate factory, along with other factories\n", "necessary for this example." ] }, { "cell_type": "code", "execution_count": 13, "id": "2a54848d", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:49.124275Z", "iopub.status.busy": "2024-04-26T18:16:49.123756Z", "iopub.status.idle": "2024-04-26T18:16:49.206010Z", "shell.execute_reply": "2024-04-26T18:16:49.205555Z" } }, "outputs": [ { "data": { "text/plain": [ "{x90(): ({0: 'theta'},\n", " GateFactory(name='r90', layers=[Rotation.from_pauli('Z', 'theta', -1.0), FixedRotation.from_pauli('X', 90.0), Rotation.from_pauli('Z', 'theta', 1.0)], parameters={'theta': None})),\n", " ms0(): ({1: 'b', 0: 'a'},\n", " GateFactory(name='ms', layers=[Rotation.from_pauli('IZ', 'b', -1.0), Rotation.from_pauli('ZI', 'a', -1.0), FixedRotation.from_pauli('XX', 90.0), Rotation.from_pauli('ZI', 'a', 1.0), Rotation.from_pauli('IZ', 'b', 1.0)], parameters={'b': None, 'a': None}))}" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# factories for our parametric gates. the first is a 90 degree rotation about an axis in\n", "# the x-y plane, equivalent to z(a)*x(90)*z(-a). the second is a Mølmer-Sørensen gate\n", "# with phase rotation a on the first qubit and b on the second qubit, i.e. equivalent to\n", "# (z(a) & z(b))*xx(90)*(z(-a) & z(-b))\n", "r90 = tq.config.GateFactory.from_hamiltonian(\n", " \"r90\", [[\"Z\", \"-theta\"], [\"X\", \"90\"], [\"Z\", \"theta\"]]\n", ")\n", "ms = tq.config.GateFactory.from_hamiltonian(\n", " \"ms\", [[\"IZ\", \"-b\"], [\"ZI\", \"-a\"], [\"XX\", 90], [\"ZI\", \"a\"], [\"IZ\", \"b\"]]\n", ")\n", "\n", "# factory for our virtual gate\n", "z = tq.config.GateFactory.from_hamiltonian(\"z\", [[\"Z\", \"theta\"]])\n", "\n", "# factory for static gates, equal to our parametric gates at 0\n", "x90 = tq.config.GateFactory.from_matrix(\"x90\", r90(0))\n", "ms0 = tq.config.GateFactory.from_matrix(\"ms0\", ms(0, 0))\n", "\n", "# put everything into a factory list\n", "factories = [x90, z, ms0, r90, ms]\n", "\n", "phase_tracker = tq.compilation.PhaseTrack(factories)\n", "phase_tracker._rules" ] }, { "cell_type": "raw", "id": "f1983c92", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "As in the CZ section, we define a compiler that performs phase-tracking using our\n", "native gates, and test it on a circuit that generates a 4-qubit GHZ state." ] }, { "cell_type": "code", "execution_count": 14, "id": "e141d5ab", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:49.208236Z", "iopub.status.busy": "2024-04-26T18:16:49.207857Z", "iopub.status.idle": "2024-04-26T18:16:49.234340Z", "shell.execute_reply": "2024-04-26T18:16:49.233911Z" } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "
True-Q formatting will not be loaded without trusting this\n", "notebook or rerunning the affected cells. Notebooks can be marked as trusted by clicking\n", "\"File -> Trust Notebook\".
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", "
Circuit
\n", "
\n", "
\n", "
Key:
\n", "
\n", " No key present in circuit.\n", "
\n", "
\n", "
\n", "
\n", "
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sy
  • \n", "
  • Gate.cliff7
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = -90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0, 1):\n", " ms(b, a)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • ms(b, a)
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Likeness:
\n", "
\n", "
    \n", "
  • CNOT
  • \n", "
\n", "
\n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • b = 0.0
  • \n", "
  • a = 180.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'XX': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (1, 2):\n", " ms(b, a)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • ms(b, a)
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Likeness:
\n", "
\n", "
    \n", "
  • CNOT
  • \n", "
\n", "
\n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • b = 0.0
  • \n", "
  • a = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'XX': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (2, 3):\n", " ms(b, a)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • ms(b, a)
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Likeness:
\n", "
\n", "
    \n", "
  • CNOT
  • \n", "
\n", "
\n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • b = 0.0
  • \n", "
  • a = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'XX': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
 
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = -180.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff4
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = -180.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sy
  • \n", "
  • Gate.cliff7
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = -90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "  \n", "
\n", "
Marker 0
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.cliff6
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': -90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sy
  • \n", "
  • Gate.cliff7
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = -90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sy
  • \n", "
  • Gate.cliff7
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = -90.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'Y': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " r90(theta)\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • r90(theta)
  • \n", "
\n", "
\n", "\n", " \n", "
Aliases:
\n", "
\n", "
    \n", "
  • Gate.sx
  • \n", "
  • Gate.cliff5
  • \n", "
\n", "
\n", "\n", " \n", "\n", " \n", "
Parameters:
\n", "
\n", "
    \n", "
  • theta = 0.0
  • \n", "
\n", "
\n", "\n", " \n", "
Generators:
\n", "
\n", "
    \n", "
  • 'X': 90.0
  • \n", "
\n", "
\n", "
\n", "
\n", "
Matrix:
\n", "
\n", "
    \n", "
  • \n", " \n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " -0.71j\n", " \n", " \n", " \n", " \n", " \n", " \n", " 0.71\n", " \n", " \n", " \n", "\n", "\n", "
  • \n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " 1\n", "
\n", "
Marker 1
\n", " Compilation tools may only recompile cycles with equal markers.\n", "
\n", "
\n", "
\n", "
\n", " \n", " (0):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (1):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (2):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", " \n", " (3):\n", " Meas()\n", " \n", " \n", "\n", "\n", "
\n", "
\n", "
Name:
\n", "
\n", "
    \n", "
  • Meas()
  • \n", "
\n", "
\n", "\n", "\n", " \n", "\n", "\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "Circuit(Cycle((0,): r90(theta)),Cycle((0,): r90(theta)),Cycle((0, 1): ms(b, a)),Cycle((1,): r90(theta)),Cycle((1,): r90(theta)),Cycle((1, 2): ms(b, a)),Cycle((2,): r90(theta)),Cycle((2,): r90(theta)),Cycle((2, 3): ms(b, a)),Cycle((0,): r90(theta), (1,): r90(theta), (2,): r90(theta), (3,): r90(theta)),Cycle((0,): r90(theta), (1,): r90(theta), (2,): r90(theta), (3,): r90(theta)),Cycle((0,): Meas(), (1,): Meas(), (2,): Meas(), (3,): Meas(), marker=1))" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compiler = tq.Compiler(\n", " [\n", " tq.compilation.Native2Q(factories),\n", " tq.compilation.Justify(),\n", " tq.compilation.Merge(),\n", " tq.compilation.RemoveId(),\n", " tq.compilation.Native1Q(factories),\n", " tq.compilation.PhaseTrack(factories),\n", " tq.compilation.Justify(),\n", " ]\n", ")\n", "\n", "circuit = compiler.compile(ghz(4))\n", "circuit" ] }, { "cell_type": "raw", "id": "75467cbb", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Finally, we verify that our bitstring output is as expected." ] }, { "cell_type": "code", "execution_count": 15, "id": "4823933e", "metadata": { "execution": { "iopub.execute_input": "2024-04-26T18:16:49.236427Z", "iopub.status.busy": "2024-04-26T18:16:49.236115Z", "iopub.status.idle": "2024-04-26T18:16:49.381542Z", "shell.execute_reply": "2024-04-26T18:16:49.381082Z" } }, "outputs": [ { "data": { "image/png": "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t9ZLyc/PF39/fzl06JB4eHjUWK4zs8kll1xyySW3NuT+FVWVgoICadGixV+u69Ti5OPjI66urpKTk2OzPCcnR5o1a1bpfZo1a3ZF67u5uYmbm5vNsiZNmlR90Hby8PBw2g+Ls7LJJZdccskltzbkXs5f7WmycOrk8AYNGkiXLl0kLS3NusxsNktaWppERUVVep+oqCib9UVE/vOf/1xyfQAAAEdx+qG6xMREGT16tISHh0tERITMnz9fCgsLJT4+XkRERo0aJX5+fpKSkiIiIk888YT07t1bXn31VRk4cKAsX75cfvnlF3nvvfecuRkAAKAOcHpxGjZsmBw/flxmzJgh2dnZEhYWJqtXr7ZOAM/KyhIXlz93jEVHR8uyZctk+vTpMm3aNGnbtq2sWrVKbr75ZmdtgiFubm6SlJR00WHDazmbXHLJJZdccmtDriOZ1Mi5dwAAAHD+BTABAACuFhQnAAAAgyhOAAAABlGcAAAADKI4AQAAGERxgtPUtRM62V4AuPpRnGqBim8w1/obTllZmc33ZrO5RvNr+vmta9tbXHzhk9hLSkqcku/s3x9n59c0tvfaVte21wiu4+Rku3btko8++kiysrKkR48e0qNHD2nfvr2YzWabC386Wk5OjuTl5UlQUFC1ZVRmx44d8uabb8rRo0clODhYhg4dKl26dKn23MOHD0tOTk6NZJVX17Z3+/btkpycLCdOnJCmTZvKhAkTpG/fvtWeu3//fjl48KD06dNHRC682NfUh3jn5+dLUVGRNGjQQLy8vGo8v7pfKyo6efKk5OXliapK69atayzXoqysTFxdXWssr65tb25uruTk5EhRUZFERETUWK7ld6a0tFTq1XP6tbkviz1OTrR9+3aJjIyU7du3y549e2ThwoVy2223SVpamri4uFRb09+xY4dERETI888/L9u2bauWjMrs3LlTunXrJmfPnpV69epJRkaGdO/eXZYuXVqtubt27ZLw8HB55JFHZP369dWaVV5d297du3dLVFSUNGnSREJCQsTFxUViYmJk9uzZcurUqWrN7dq1q9xzzz3yxRdfiIiIyWSqkb+Ut2zZIrfffrtER0dLbGysPPjgg1JaWlrtpWnv3r2SnJwsZ8+eFRcXlxrbi7l582bp27ev3HrrrdK/f38ZMGCAZGVlVXvuzp075aGHHpKCggJxdXW9aC9udalr2/vbb79Jjx495O9//7vcdddd0qVLF1m/fr2cPXu2WnO3bdsmgwYNktOnT0u9evWktLS0WvPspnCK0tJSHTlypI4YMcK67Ndff9WxY8eqq6urfvHFF6qqWlZW5tDcI0eOaHR0tIaGhmpERISOHTtWt2zZ4tCMS3n00Uc1Li7O+n1OTo5Onz5dXV1d9e2331ZVVbPZ7NDMY8eOaZ8+fbR79+56++23a//+/fWHH35waMal1LXtfe655/S2226zWfbee++pyWTSKVOmaGFhocMzc3JydMCAAdq/f38dMWKEhoSE6L///W/r7Y5+fss7cOCA3nDDDfrUU0/pJ598oi+//LK2bdtWO3bsqHv27Km23D179uiNN96oTZs21cTEROvz6ujXiooOHTqkLVq00ClTpui6det05cqV2qVLF/3b3/6ma9as0dLS0mrJ3bt3r/r5+am7u7sOGTJE8/PzVVWrLc+irm3vsWPHtHXr1jpt2jT97bffdOPGjRoTE6PNmzfXhQsXWsfhaL///ru2atVKTSaTdunSRU+dOqWq1b+99qA4OUlJSYn27t1bp0yZYrM8NzdXH3nkEXV3d9f09HSH56alpWlsbKxu2rRJFy9erJ07d66x8jR48GAdO3bsRctfeuklNZlM+uWXX6qqY9/sNm7cqP369dP//ve/+vXXX9domahr2zthwgS96667VPXCm7jljXzJkiXq4uKi7733nqo6dnu3bdumgwYN0jVr1mhmZqaOGTOmxsrTJ598ouHh4ZqXl2ddtm/fPo2MjNTg4GDNyclRVccWmtOnT2tcXJwOHTpUn3nmGY2MjNRJkybVSHlau3athoSE6NGjR63LSktL9fbbb9fmzZtbX68cOYaCggIdMWKEDh06VOfPn6/dunXTv//97zVSJura9v7yyy8aGBioO3futFkeHx+vf/vb33TZsmUO/10qLCzUxx9/XIcMGaIrVqzQbt26aadOnWp9eaI4OdFjjz2mUVFRevLkSZvlWVlZOmTIEL3jjjtsXpQdoaioSH/88Ufr94sWLbKWp82bN1uXW35BHPmi8MILL6i/v78eOXLEJqOkpEQnTJigwcHBeuzYMYflWWzatMn67y+//NJaJr7//nvrcst2sr1Vl5qaqg0bNtTdu3er6oUXPcs2z5o1S5s0aaJ79+51WJ5F+Rf6X375RUePHq0hISG6atUq6/LqeAF+66231MfHx/q95bk8evSohoaGavfu3R2eWVZWptOmTdPly5drcXGxzpw5UyMjI/WJJ56otDw58o3uf//3f7VJkyZ67tw5VVUtLi623tavXz8NDg6ulpKakpKiS5cu1dLSUl26dGmNlYm6tr3fffed+vj46L59+1RVbfYQ33fffdq8eXPNzc1VVcf+XL333nu6bNkyVVVdv379VVGeKE5OtGLFCg0LC9NXX331ot2gixcv1hYtWmhWVpbDcyv+0Fe25yk5OVl/++03u7PKv4j//PPP2r17d01ISLjor/E1a9ZoixYt9Ndff7U7s2JuRV999ZUOGDBAY2NjrXtinnjiCf3pp58ckm2Rnp6u0dHRNbK9l1Od21v+Re3w4cM6YMAAveOOO/TAgQOqqnr+/HlVVd2+fbvedNNN+s0339idWTG3ooyMDGt5sux5evzxx/WTTz5xSLbl9+fgwYPq5+enKSkp1tss/7///e9/NTAwUJcvX+6QTNU/t/n8+fPWMZw9e1aTk5Ot5ens2bOqqtY3e0cqKChQf39/feyxx6zLLGXiyJEj2rp1a3355ZcdllfZm3NxcbEuWbLkojJRVFTksD8yLbkFBQV600031dj2lv+ZtoyhJra3fGaHDh1spheU/zkKDg7WiRMnOjSvotLSUv3hhx8uKk9nz57V33//vdoPRxtFcaoh+/fv1/fee08XLlyoq1evti5PSEjQoKAgffvtt/WPP/6wLt+2bZsGBgbqtm3bqiVX1fYX1VKexo0bp/fee6+6uLjYlW35ga+YM2fOHO3cubM+88wzevjwYevyw4cPa9u2bXX9+vVVzqyYW/GXrPwvquUw1oABAzQuLk5NJpNmZmZWOXfv3r06Z84cnTVrli5ZssS6/NVXX9WwsLBq297yuUuXLrW5rfzz7ujtPX78eKU5H330kfbo0UOHDh1q/ctV9cIhpuDgYP3888+rnHm5XFXb/19LeerYsaPGxsbavb2qf76JlJSUqKpqXl6eTpo0SXv27Gn9i9kiLy9Pg4KC9MUXX7Qrs7JcC8ub+Llz5zQ5OVm7deumkyZN0lOnTunYsWN18ODBdmdbnlOz2aylpaX6+uuva1hYmE1hKCsr03PnzmmvXr00MTHR7syKuRbli+M///lPa5k4ceKEPvzwwxobG2st6lVx9uxZ67ZYst944w3t1KlTtW5vxVwLy/93dW1veZbXys8//1wDAgL08ccft95m+TkbPny4jho1yiF5FuX/fy1jMJvN+v3331vLU05OjiYkJGiPHj2qZZ5kVVCcasDmzZu1adOm2q1bN23Tpo02btxYx4wZY/3rYezYsXrzzTfrpEmTdO/evXr8+HF99tlnNSgoSE+cOOHQ3HHjxl10zN7igw8+0Pr166unp6dde0K2b9+urVq10ueff966rPyL/owZMzQyMlLvvPNO3bRpk+7Zs0enTJmiLVu2tOvQVWW5lytPn3/+uXp5eWmTJk1sDm9dqS1btqinp6f27t1bu3btqm5ubjpgwADroc/Zs2dr165dHb69leUOHDjQZk9S+f9fR23v9u3b1d3d3Wb+Vvn/3/fff1/79OmjnTp10jVr1mh6erpOmzZNmzdvbtce1MpyL1eefvrpJ73pppvUy8vL7r2nW7du1bvvvltjYmI0NjZW161bp6oX9joNHDhQe/furYsWLbK5z4ABA3Tu3LkXjcue3O+//97mkJFl+y3lKTo6Wtu2bauNGze2a47knj17dMOGDap64XfIMv4jR47oY489pl26dNHk5GSb+8TFxenkyZNVterbWzG3Isvjnj9/XpcsWaLR0dHq4+OjjRo1smsP6pYtW7Rfv37arVs37dChgy5ZskRPnTqlp0+f1oSEBO3cuXO1bG/F3KVLl1oP7avalkVHbu+uXbuse3/Lj/306dM6d+5cDQoK0vHjx9vcZ/jw4Tp+/HibnwdH5VZkNpv1hx9+0O7du2u9evW0UaNG+vPPP1cpszpQnKpZQUGBRkVFWXdxHjt2TL/++mv19vbWfv36WQ/hJCcna8+ePa1nFjRr1syuv5AvlztgwACbuSZlZWVaWlqqjz/+uHp5eenWrVurnJuVlaVhYWHatm1bvfnmm21ebMq/4H/44Yd6++23q8lk0ptvvllbtmxp1/ZeLrey8lRWVqaTJk3S66+/3q6J8WfPntXY2Fh99NFHVfXCLvTt27drYGCgRkdHW1/clixZ4tDtvVxur169dO3atdZ1LRO1HbG9hw8f1oiICO3cubO2aNFCH3roIett5f9/165dqyNHjlQ3NzcNDg7W9u3b27W9l8ut7LBdWVmZJiYmqru7u90nPuzevVs9PDz0oYce0meeeUaHDh2qJpNJp0+froWFhbp//3699957tWPHjjpy5EhdunSpTpgwQT08PKzzvRyZm5SUpAcPHrSuZ9n+vLw87dixo3p5ednMV7xSu3bt0uuuu05NJpN+9913qmo72T8rK0ufffZZbdOmjcbExOicOXP0wQcf1MaNG+uOHTscnluR5Q33zJkz2qNHD/Xy8rLr/3jfvn3q5eWljz32mL755ps6ceJEbdKkiY4bN0737t2rJ0+e1MmTJ2vr1q0dur2V5Xp5eelDDz2kv/zyi3U9y3PgqO3dvXu3uru7q8lk0pUrV6rqhefU8rz+8ccf+vbbb+tNN92kt9xyiz7yyCM6YsQIbdiwoV3vDZfKvZSioiIdOHCgent725VbHShO1ayoqEg7d+580VyHXbt2qY+Pjw4aNMi6LCcnR7/++mtdv369Hjp0qFpz4+LibN5wNmzYoCaTSTdu3FjlTLPZrP/4xz/0jjvu0G+//VaTkpK0ffv2lyxPqhfmPW3bts2uPS9Gciu+uW7evFn9/PxsXqCqqnv37tZd+ZZd50eOHNFOnTpp9+7drRMqS0tLHbK9RnJ79+5t8zO0ZcsWu7fXbDbrBx98oIMHD9bvvvtOP/zwQ/X19bUpMRUPN+zYsUMPHTpkc4itOnIrHrLYvXu3RkdH2314TlV1+vTp2r9/f5tlb7zxhnp7e+vTTz+tJSUlevToUV24cKF27txZu3btqrfeeqtde/Uul9u0aVOdPHmyZmdnW5cXFxfrpEmTtGHDhnaVpuPHj+ugQYN04MCBev/996uXl5empaWpqm15OnnypK5Zs0b79++vffv21bvuusuuvXp/lVvR+fPndfr06eru7m738zx37lzt1auXzbKPPvpIO3bsqCNGjNCDBw9qYWGhQ7f3crmdOnXSUaNG2ZSjkpISh2zvqVOndOjQoTpkyBCdOHGiuri46IoVK1TVtjwVFxfrvn37dMyYMXrPPfdcNB5H51ZUWlqqc+bM0QYNGtTIPNArRXGqZmfOnFE/Pz+bN3HLYY3ffvtNGzVqpC+88IJTcmfNmmVzn/Lzg6rq2LFjunjxYlW9UAQtJab8Nlacq+EIRnIrvgDbO7nSbDZrUVGRhoeH64QJE6zLLeXw2LFj6u3trY888ohdOVXNTUhIsLmfIyaTHj9+XP/1r3+p6oVyvmjRIvX19bXZrV9+8rKjGMmtWI7PnDnjkOynnnrKWmDKF7QFCxZow4YNNTU11Wb9oqIiLSoqqtbcRo0a6TvvvKOqf/5cT5w40e4/BDZv3qwjRozQb7/9Vvfs2aPx8fHq5eWla9asUdULz3FlRcbe3+m/yq0s88UXX3TICSxz587VsLAwLSgosMlZuXKlBgYG6tSpUy+6jyNewy6X27ZtW33uuedsDou99NJLdm/vvn379IknntDPP/9cCwoKdMqUKeri4mL9A/tSh+HsPbPtr3Iry1y0aJFu377drtzqQnGqAa+++qredNNNNhNjLb94s2fP1sjISP3jjz8cfsaA0VzLi3J1nFp79OjRSkvMqlWrqvU008vlWp4De7fXcv9PPvlE3dzcbCaFW944lyxZogEBAXrgwAGHPb9Xknvw4EHr8+yo7S2voKDAugeofIlZunSpzeGkmszdv3//Je9XFa+//rpef/311rkn5feaJicna6NGjRy2rVeS27hx42o567b8noVdu3bpmDFj1MvLS//zn/+o6p+H9h1RDq8k1zJB3dFnDK5YsUKvu+46697J8s/zO++8ow0aNLjoUJEjfraqkusI5S/OmpeXp5MnT1YXFxf9+OOPVfXP57n8yUqO2N6/ylW9UNAqXp6nNqI4OdjRo0f1559/1tWrV1vfsPbv36/33HOP9uzZ86LTsRcsWKDBwcF2ny1Qm3JVL55QaikxSUlJOmnSJDWZTDaTIK+WXEtW+ZL7xx9/6OOPP66tW7e+6OyqTz/91O5J/rUtt6L8/Hybw2eJiYlqMpnsKhPOyq1McXGx9urVS7t162Z9Pi2l4dixY+rv76+ffvqpQzOdmVvR7t27rSXGsgfo6aef1o8++qhar8xe3bnlH+Puu+9Wf39/65zT8uUsMDBQ33jjDbvznJ17qd+lgoICa4mx7AF66qmndM6cOQ45a68qudVxVMKRKE4O9Ntvv2nLli01KChIPT09tV27dvrxxx9rSUmJbty4UQcNGqRdu3a1NuySkhJ99tlntXfv3nZdzr625LZv316XLVtm/UulfIk5evSozpgxQ00mk3p5edl1SMFZuVu2bNE+ffpY/8ov/4KwdetWfeihh7RZs2b6xhtvaFFRkZ45c0anTZumnTt3tuuvqNqYW1FBQYF+8MEHajKZ1Nvbu9qe5+rMVb2wp+PZZ5/VMWPG6Pz5862Tu9PS0jQiIkL79etn85f4yZMntX379nZfZqG25araHh60lJgbb7xRBw0apCaTya7DRs7KzcnJqfSSJVu3btXu3btrq1atbOYGFhYW6i233HLRpT6u1txLsZQYNzc3vfXWW9VkMtk1l8pZuTWF4uQgubm52r59e502bZru27dPjxw5osOGDdOgoCBNTk7Wc+fO6aZNm3TChAlar149DQ0N1W7duqmXl5ddk99qW25wcLAmJSVVeoXZBx54QD08POy6PpSzcvfv36+BgYFqMpm0bdu21he58i/ye/bs0dmzZ6ubm5sGBgZqaGio3nDDDXZNUK5tuZcrMfHx8dq4ceNqeZ6rO1f1wrXTPD09dcCAATpkyBD19PTUvn37Wg+Ffv755xoREaGtWrXSb775RteuXavTp0/XZs2a2bWXqzblxsTE6Pvvv29dp/zP2bZt29Tf31+9vb3tenNzVu727du1QYMGOnTo0Ern+23YsEH79OmjTZo00XfffVc//vhjnTJlijZt2tTmmmTXSm5FJ06c0ODgYPX29rarnDortyZRnBxk27ZtGhAQcNFfvJMnT9YOHTro3Llz1Ww265kzZzQ9PV1nzZqlCxYssPvDQGtjbseOHfXll1+2OQy4cOFCbdKkid1nOTkjt6ioSKdPn6533323pqWlaa9evbRly5aVlhjVC2eSffDBB7p8+XLrfJtrKbeyEvPpp59qy5Yt7drj46xc1QuHxUaOHGkzX2rPnj06bNgw7dq1q7777ruqeuFN4b777tMbbrhBg4KCtEOHDpqRkXFN5Xbr1k1ff/1163LLHtxJkyZp/fr17Tq7ylm52dnZGh0drX379lUfHx+95557Kn1TP3nypCYmJmpwcLC2a9dOIyMj7XrtqO25FmVlZfrkk0+qyWSy66xMZ+XWNIqTg/z666/q5+dn/UgLy0cfqF74uIeWLVtWS5uurbmtWrWyyc3Oztbff//9qs1dtmyZ9Tj8gQMHtGfPnjZv6kbm5FxLuRXzTpw4YXNl9KstV1X1tttus17ioPzHqowZM0a7d++uX331lXXdHTt26JEjR+y6zEJtzu3Zs6d+9tln1nV37dqlAwcOdMjlHZyR+/XXX+v999+vGzdu1J9//lm9vb0v+6Z++PBhPXXqlN1nGl8tuYcOHdIJEybYfeq/s3JrGsXJDpazSyx69Ohhc12O8hP9wsPDdfjw4XUy196z55yZW9kkRbPZrPv27bPuEbG8cRcVFWlmZqbdE+6vltxz585pZmamFhQUXJW5FqWlpVpSUqLx8fE6dOhQPXfunPUiqaoXTqWOiorSe++912Zs13rusGHDbO5n7/PtrFzVC4f4LRfVVL3wOZKWN/XTp09blzvqI0yultzyP0/l/wi92nJrGsWpirZt26YjRozQfv366bhx43TdunWakZGhbdq00Xvuuce6nuUXIjExUe+8805yr8Lchx9+WL/44gvrbZZf+r1791rf1H///Xd97LHHNDw83K6/FsmtmVzVi4v1unXr1NXV1eZwkWWddevWqYuLi0NOD7/acu0ta7Ul18JS1H766SebPSIlJSX69ttv67fffluncit+hunVkutMFKcq2Llzp3p6eurw4cN1ypQpGhoaql27dtVHHnlEly1bpq1bt9a4uDgtKSmx/vCMHDlShw8fbtfFAcl1Xm54eLhOmjTJuo7lsfft26d9+vRRk8mkjRo1sn7OFrm1N1f1wiGguXPn2nxuo+qFixK6uLjYTFRWvfChwcHBwXbNHSPX+bkVWQ4n3XvvvRofH6/169e3+TgqcmtnrrNRnK6Q2WzWadOm2ew+z8/P15kzZ2pERITef//9umrVKg0KCtKgoCCNi4vTe++9Vxs1amTX5EZynZs7e/ZsDQsLu+iDL4uLi3X48OHq7e1t11ld5NZMruqFycje3t5qMpl06tSpNvOFCgsLNTk52fpZdJmZmfrHH3/olClTNDAw0HrWJrlXZ25l1q9fb72chT0T7smtmdzagOJUBWPGjLnoM4by8/P1lVde0aioKH355Zc1Pz9fJ0+erOPGjdOEhAS7X+zJdX7u3LlzNTw8XOfMmaOqF97833jjDXV1dXXIpFlyqz/3zJkz+uCDD+qYMWM0NTVVTSaTPvPMMzZv1GVlZfrPf/5TmzVrpn5+ftq+fXtt0aKFXS/25Do391Jv6sXFxTphwgS9/vrr7XrtILdmcmsLitMVsBw2eOONN7R79+66c+dOm9tPnjyp48aN08jISJvDRPae8URu7ckdP368RkdHWyesfvbZZzYX7yO39uaqXpiImpqaaj1zb8WKFZW+qateuKbU999/r19//bXdZ+6R6/zcyt7UN2zYoB06dLD70C+5NZNbW1CcqmDv3r3q4+OjDz74oPWF3fJmkJWVpSaTSb/88kvr+o76WAJya09u+VPEHYXcmsmt+OG/y5cvV5PJpE8//bT1Rf/8+fMO/+gWcp2fa/nomrKyMuuV6R312Wjk1kxubUBxqqK1a9eqm5ubPvbYYzYN+9ixYxoaGqo//vgjueSSW0tzVS+cDWQpah9//LH1L+YjR47ok08+qYMHD9YzZ844/PPYyK0duXFxcdVyKjy5NZPrTBQnO3z22Wfq5uamgwcP1uXLl+v27dt1ypQp2rx5c5vPHSKXXHJrX66q2lxHaPny5Vq/fn1t166d1qtXr1ovykeu83MdMU+PXOfmOgvFyU4ZGRnau3dvbdmypbZp00aDgoJq5AeFXHLJdQyz2Wz9i7lv377q7e1dIx//QC655F6dKE4OkJeXp/v379fNmzc75KMQyCWX3JrLVb1wuMHymVk1+UGj5JJL7tWnnsBuHh4e4uHhQS655F6FuRYdOnSQzMxM6dSpE7nkknuV5dYkk6qqswcBAM6mqmIymcgll9yrMLcmUZwAAAAMcnH2AAAAAK4WFCcAAACDKE4AAAAGUZwAAAAMojgBAAAYRHECAAAwiOIEAABgEMUJAADAIIoTAACAQRQnAAAAg/4/ThBRv5Kgj94AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tq.Simulator().sample(circuit, n_shots=np.inf).plot()" ] } ], "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 }