From f016480cc9fe9726220c7157831b8ab88960b111 Mon Sep 17 00:00:00 2001 From: Luciano Bello Date: Wed, 21 Jun 2023 12:43:30 +0200 Subject: [PATCH] Remove the "Sample algorithms in Qiskit" section, as it is duplicated --- index.rst | 1 - tutorials/textbook/01_IQPE.ipynb | 1043 -------------------------- tutorials/textbook/images/binary.png | Bin 5271 -> 0 bytes tutorials/textbook/index.rst | 15 - 4 files changed, 1059 deletions(-) delete mode 100644 tutorials/textbook/01_IQPE.ipynb delete mode 100644 tutorials/textbook/images/binary.png delete mode 100644 tutorials/textbook/index.rst diff --git a/index.rst b/index.rst index 1e1e7086a..5ff22fba6 100644 --- a/index.rst +++ b/index.rst @@ -11,7 +11,6 @@ Qiskit Tutorials High-Performance Simulators Algorithms Operators - Textbook algorithms .. Hiding - Indices and tables :ref:`genindex` diff --git a/tutorials/textbook/01_IQPE.ipynb b/tutorials/textbook/01_IQPE.ipynb deleted file mode 100644 index 5ee03da31..000000000 --- a/tutorials/textbook/01_IQPE.ipynb +++ /dev/null @@ -1,1043 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "approximate-charger", - "metadata": {}, - "source": [ - "# Iterative Quantum Phase Estimation Algorithm\n", - "\n", - "The goal of this tutorial is to understand how the Iterative Phase Estimation (IPE) algorithm works, why would we use the IPE algorithm instead of the QPE (Quantum Phase Estimation) algorithm and how to build it with Qiskit using the same circuit exploiting reset gate and the `c_if` method that allows to apply gates conditioned by the values stored in a classical register, resulting from previous measurements.\n", - "\n", - "**References**\n", - "\n", - "- [Section 2 of Lab 4: Iterative Phase Estimation (IPE) Algorithm](https://qiskit.org/textbook/ch-labs/Lab04_IterativePhaseEstimation.html#2-iterative-phase-estimation-ipe-algorithm) \n", - "\n", - "- [Ch.3.6 Quantum Phase Estimation](https://qiskit.org/textbook/ch-algorithms/quantum-phase-estimation.html)" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "nasty-binding", - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister, execute, assemble, Aer\n", - "from qiskit.tools.visualization import plot_histogram\n", - "from math import pi\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "markdown", - "id": "prescribed-skill", - "metadata": {}, - "source": [ - "## Conditioned gates: the c_if method" - ] - }, - { - "cell_type": "markdown", - "id": "protective-tender", - "metadata": {}, - "source": [ - "Before starting the IPE algorithm, we will give a brief tutorial about the Qiskit conditional method, c_if, as it goes into building the IPE circuit.\n", - "\n", - "`c_if` is a function (actually a method of the gate class) to perform conditioned operations based on the value stored previously in a classical register. With this feature you can apply gates after a measurement in the same circuit conditioned by the measurement outcome.\n", - "\n", - "For example, the following code will execute the $X$ gate if the value of the classical register is $0$." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "spoken-willow", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "q = QuantumRegister(1,'q')\n", - "c = ClassicalRegister(1,'c')\n", - "qc = QuantumCircuit(q, c)\n", - "qc.h(0)\n", - "qc.measure(0,0)\n", - "qc.x(0).c_if(c, 0)\n", - "qc.draw(output='mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "worth-speech", - "metadata": {}, - "source": [ - "We highlight that the method c_if expects as the first argument a whole classical register, not a single classical bit (or a list of classical bits), and as the second argument a value in decimal representation (a non-negative integer), not the value of a single bit, 0, or 1 (or a list/string of binary digits).\n", - "\n", - "Let's make another example. Consider that we want to perform a bit flip on the third qubit after the measurements in the following circuit, when the results of the measurement of $q_0$ and $q_1$ are both $1$." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "excellent-count", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "q = QuantumRegister(3,'q')\n", - "c = ClassicalRegister(3,'c')\n", - "qc = QuantumCircuit(q, c)\n", - "qc.h(q[0])\n", - "qc.h(q[1])\n", - "qc.h(q[2])\n", - "qc.barrier()\n", - "qc.measure(q,c)\n", - "qc.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "entertaining-adams", - "metadata": {}, - "source": [ - "We want to apply the $X$ gate, only if both the results of the measurement of $q_0$ and $q_1$ are $1$. We can do this using the c_if method, conditioning the application of $X$ depending on the value passed as argument to c_if.\n", - "\n", - "We will have to encode the value to pass to the c_if method such that it will check the values 011 and 111 (in binary representation), since it does not matter what $q_2$ is measured as.\n", - "\n", - "The 2 integer values in decimal representation:" - ] - }, - { - "cell_type": "markdown", - "id": "finished-failure", - "metadata": {}, - "source": [ - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "id": "brutal-slope", - "metadata": {}, - "source": [ - "We can check the solutions using the bin() method in python (the prefix `0b` indicates the binary format)." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "boxed-electronics", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0b11\n", - "0b111\n" - ] - } - ], - "source": [ - "print(bin(3))\n", - "print(bin(7))" - ] - }, - { - "cell_type": "markdown", - "id": "d47e359e-ad29-4fb7-a428-cfcb69904257", - "metadata": {}, - "source": [ - "So we have to apply $X$ to $q_2$ using c_if two times, one for each value corresponding to 011 and 111." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "following-surfing", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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xay2zOzYsQN6vR7x8fFQq9UNLlM7IfDeMpORkYGdO3fCzc0NAwYMsEhWS6ipKkN58a0G/7MlOp0OJSUl0Ol0YkchAYwePRrTp08HcLfIjBs3DuvWrYNerzdre15eXlixYgXs7P53BN7BwQEzZ84UJC8RtQyrnTPz9ddfAwCio6MbXSYnJwdA3TLTv39/5OfnAwC2bt2KlJSUFkxpOac/W4HTn9UfobI1ly9fxtixY5GUlITw8HCx41AztG3bFv/+97+Nj1966SV89tlnZm/v92ct5eTkwN3dHRqNBi+99BKSkpJw8ODB5sYmohZgtWWmdki4scMJlZWVOHXqFIC6ZUYut87BqvABUxDcO67B15LfHGHhNETNl5CQAE9PTwDA3r17sWXLFrO39fsiUztHZvjw4cbCtGnTJgQFBZk96kNELcdqy0xpaSkAoKKiosHXt2/fjsLCQrRt27bF79PTo0cP5OXlmbSOQumI0QnpgmVw9ewE/86DG3xNLlc0e/vBQUHQVZc3ezumqp0r0VS5ubkAgP379+PcuXNNWmfr1q0mpmp9Rj//CjROLsjNy4Wvr2+9x63R/UqDq6srnnvuOQBAUVERpk2bZvb7NFZksrKysGnTJsTFxWHAgAF4+OGHERMTgy+++KLRbQUFBVntByKilubl5YXU1FSz1rXaMuPl5YXi4mKkpqaiR48edV7Lzs7GokWLAAAREREtniUvLw9ardakdewcGp7n01rdyL2Bmsoyi79vWZlp71lbbisqKpq8rqn/dq2R/rc5QnqdDlqttt5jqZk4caJxLty2bdtM/rBQ635FBgAMBgNWrVplnD/38ssv37fM1JZlIrIsqy0zgwcPRnp6OlauXIlBgwYZT7E8efIkJkyYYLzolSUulufl5WXyOgqltE4V7+DdQZSRmcYmdzem9gJpKpWqyetawx225QqF8U8fH596j1sjvV7faDl45plnjH+/d96MKR5UZGqlpKQgMzMTDz30EIYPH442bdo0em8vb29vjswQmcmc35W1rLbMLFy4EB9//DGys7MRHh6OkJAQlJeX46effsKIESPg5+eHw4cPW6TMmDNsVlkDLNjZAmFayNX0dDiI8N10+fJlk5avrq7GlClT4OzsDKVS2aR1EhISzInWqqzcsANFJaXw9vJGTk5OvcetUWlpaYM3g7Szs0NkZCSAu/dW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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "q = QuantumRegister(3,'q')\n", - "c = ClassicalRegister(3,'c')\n", - "qc = QuantumCircuit(q, c)\n", - "qc.h(0)\n", - "qc.h(1)\n", - "qc.h(2)\n", - "qc.barrier()\n", - "qc.measure(q,c)\n", - "\n", - "qc.x(2).c_if(c, 3) # for the 011 case\n", - "qc.x(2).c_if(c, 7) # for the 111 case\n", - "\n", - "qc.draw(output='mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "african-adams", - "metadata": {}, - "source": [ - "## IPE\n", - "\n", - "The motivation for using the IPE algorithm is that QPE algorithm works fine for short depth circuits but when the circuit starts to grow, it doesn't work properly due to gate noise and decoherence times.\n", - "\n", - "The detailed explanation of how the algorithm works can be found in [Iterative Phase Estimation (IPE) Algorithm](https://qiskit.org/textbook/ch-labs/Lab04_IterativePhaseEstimation.html#2-iterative-phase-estimation-ipe-algorithm). To understand QPE in depth, you can see also [Ch.3.6 Quantum Phase Estimation](https://qiskit.org/textbook/ch-algorithms/quantum-phase-estimation.html).\n", - "\n", - "### IPE example with a 1-qubit gate for $U$\n", - "\n", - "We want to apply the IPE algorithm to estimate the phase for a 1-qubit operator $U$. For example, here we use the $S$-gate.\n", - "\n", - "Let's apply the IPE algorithm to estimate the phase for $S$-gate.\n", - "Its matrix is \n", - "$$ S = \n", - "\\begin{bmatrix}\n", - "1 & 0\\\\\n", - "0 & e^\\frac{i\\pi}{2}\\\\ \n", - "\\end{bmatrix}$$\n", - "\n", - "That is, the $S$-gate adds a phase $\\pi/2$ to the state $|1\\rangle$, leaving unchanged the phase of the state $|0\\rangle$\n", - "\n", - "$$ S|1\\rangle = e^\\frac{i\\pi}{2}|1\\rangle $$\n", - "\n", - "In the following, we will use the notation and terms used in [Section 2 of lab 4](https://qiskit.org/textbook/ch-labs/Lab04_IterativePhaseEstimation.html#2-iterative-phase-estimation-ipe-algorithm).\n", - "\n", - "Let's consider to estimate the phase $\\phi=\\frac{\\pi}{2}$ for the eigenstate $|1\\rangle$, we should find $\\varphi=\\frac{1}{4}$ (where $\\phi = 2 \\pi \\varphi$). Therefore to estimate the phase we need exactly 2 phase bits, i.e. $m=2$, since $1/2^2=1/4$. So $\\varphi=0.\\varphi_1\\varphi_2$.\n", - "\n", - "Remember from the theory that for the IPE algorithm, $m$ is also the number of iterations, so we need only $2$ iterations or steps.\n", - "\n", - "First, we initialize the circuit. IPE works with only 1 auxiliary qubit, instead of $m$ counting qubits of the QPE algorithm. Therefore, we need 2 qubits, 1 auxiliary qubit and 1 for the eigenstate of $U$-gate, and a classical register of 2 bits, for the phase bits $\\varphi_1$, $\\varphi_2$." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "competent-japanese", - "metadata": {}, - "outputs": [], - "source": [ - "nq = 2\n", - "m = 2\n", - "q = QuantumRegister(nq,'q')\n", - "c = ClassicalRegister(m,'c')\n", - "\n", - "qc_S = QuantumCircuit(q,c)" - ] - }, - { - "cell_type": "markdown", - "id": "dominican-camcorder", - "metadata": {}, - "source": [ - "#### First step\n", - "\n", - "Now we build the quantum circuit for the first step, that is, the first iteration of the algorithm, to estimate the least significant phase bit $\\varphi_m$, in this case $\\varphi_2$. For the first step we have 3 sub-steps:\n", - "- initialization\n", - "- application of the Controlled-$U$ gates\n", - "- measure of the auxiliary qubit in x-basis\n", - "\n", - "##### Initialization\n", - "\n", - "The initialization consists of application the Hadamard gate to the auxiliary qubit and the preparation of the eigenstate $|1\\rangle$." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "classified-pipeline", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "qc_S.h(0)\n", - "qc_S.x(1)\n", - "qc_S.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "pacific-momentum", - "metadata": {}, - "source": [ - "#### Application of the Controlled-$U$ gates\n", - "\n", - "Then we have to apply $2^t$ times the Controlled-$U$ operators (see also in the docs [Two qubit gates](https://qiskit.org/documentation/tutorials/circuits/3_summary_of_quantum_operations.html#Two-qubit-gates)), that, in this example, is the Controlled-$S$ gate ($CS$ for short).\n", - "\n", - "To implement $CS$ in the circuit, since $S$ is a phase gate, we can use the controlled phase gate $\\text{CP}(\\theta)$, with $\\theta=\\pi/2$." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "410d3936-190e-4950-80bc-8902ea7f6bac", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cu_circ = QuantumCircuit(2)\n", - "cu_circ.cp(pi/2,0,1)\n", - "cu_circ.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "e9e49bfb-b699-4219-8133-08190551daeb", - "metadata": {}, - "source": [ - "Let's apply $2^t$ times $\\text{CP}(\\pi/2)$. Since for the first step $t=m-1$, and $m=2$, we have $2^t=2$." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "tender-variation", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "for _ in range(2**(m-1)):\n", - " qc_S.cp(pi/2,0,1)\n", - "qc_S.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "continued-worst", - "metadata": {}, - "source": [ - "#### Measure in x-basis\n", - "\n", - "Finally, we perform the measurement of the auxiliary qubit in x-basis. So we will define a function to perform the x_measure and then apply it." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "considerable-sense", - "metadata": {}, - "outputs": [], - "source": [ - "def x_measurement(qc, qubit, cbit):\n", - " \"\"\"Measure 'qubit' in the X-basis, and store the result in 'cbit'\"\"\"\n", - " qc.h(qubit)\n", - " qc.measure(qubit, cbit)" - ] - }, - { - "cell_type": "markdown", - "id": "0082b76c-1b15-472d-bd78-eeaf4acd4956", - "metadata": {}, - "source": [ - "In this way we obtain the phase bit $\\varphi_2$ and store it in the classical bit $c_0$." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "subtle-background", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x_measurement(qc_S, q[0], c[0])\n", - "qc_S.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "lasting-difference", - "metadata": {}, - "source": [ - "### Subsequent steps (2nd step)\n", - "\n", - "Now we build the quantum circuit for the other remaining steps, in this example, only the second one.\n", - "In these steps we have 4 sub-steps: the 3 sub-steps as in the first step and, in the middle, the additional step of the phase correction\n", - "- initialization with reset\n", - "- phase correction\n", - "- application of the Controlled-$U$ gates\n", - "- measure of the auxiliary qubit in x-basis\n", - "\n", - "#### Initialization with reset\n", - "\n", - "As we want to perform an iterative algorithm in the same circuit, we need to reset the auxiliary qubit $q0$ after the measument gate and initialize it again as before to recycle the qubit. " - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "123e4313-366a-4ea4-b672-7b30cbdccc15", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "qc_S.reset(0)\n", - "qc_S.h(0)\n", - "qc_S.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "fcd145b2-870e-42a9-9178-df21a77b2354", - "metadata": {}, - "source": [ - "#### Phase correction (for step 2)\n", - "As seen in the theory, in order to extract the phase bit $\\varphi_{1}$, we perform a phase correction of $-\\pi\\varphi_2/2$.\n", - "Of course, we need to apply the phase correction in the circuit only if the phase bit $\\varphi_2=1$, i.e. we have to apply the phase correction of $-\\pi/2$ only if the classical bit $c_0$ is 1.\n", - "\n", - "So, after the reset we apply the phase gate $P(\\theta)$ with phase $\\theta=-\\pi/2$ conditioned by the classical bit $c_0$ ($=\\varphi_2$) using the `c_if` method.\n", - "So as we saw in the first part of this tutorial, we have to use the `c_if` method with a value of 1, as $1_{10} = 001_{2}$ (the subscripts $_{10}$ and $_2$ indicate the decimal and binary representations)." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "shaped-fluid", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "qc_S.p(-pi/2,0).c_if(c,1)\n", - "qc_S.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "moving-vertical", - "metadata": {}, - "source": [ - "#### Application of the Controlled-$U$ gates and x-measurement (for step 2)\n", - "\n", - "We apply the $CU$ operations as we did in the first step. For the second step we have $t=m-2$, hence $2^t=1$. So we apply $\\text{CP}(\\pi/2)$ once. And then we perform the x-measurement of the qubit $q_0$, storing the result, the phase bit $\\varphi_1$, in the bit $c_1$ of classical register." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "thrown-galaxy", - "metadata": {}, - "outputs": [], - "source": [ - "## 2^t c-U operations (with t=m-2)\n", - "for _ in range(2**(m-2)):\n", - " qc_S.cp(pi/2,0,1)\n", - "\n", - "x_measurement(qc_S, q[0], c[1]) " - ] - }, - { - "cell_type": "markdown", - "id": "supported-speaking", - "metadata": {}, - "source": [ - "Et voilà, we have our final circuit" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "former-plain", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/UAAADuCAYAAAB4Qic8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAysUlEQVR4nO3deXhU5d3G8XsmKwnEBBJISAhBIJCwBcGFsCug7IgIqKhQKfqKpeKCW+3lVluEUqQWQbRV0VoFRRREiwqCbMoSoCIQlCUJSdghIXtm3j+GRGICZIZZcma+n+vigpmz5Ddk5jznnvM8zzFZrVarAAAAAACA4Zg9XQAAAAAAAHAMoR4AAAAAAIMi1AMAAAAAYFCEegAAAAAADIpQDwAAAACAQRHqAQAAAAAwKEI9AAAAAAAGRagHAAAAAMCgCPUAAAAAABgUoR4AAAAAAIMi1AMAAAAAYFCEegAAAAAADIpQDwAAAACAQRHqAQAAAAAwKEI9AAAAAAAGRagHAAAAAMCgCPUAAAAAABgUoR4AAAAAAIMi1AMAAAAAYFCEegAAAAAADIpQDwAAAACAQRHqAQAAAAAwKEI9AAAAAAAGRagHAAAAAMCgCPUAAAAAABgUoR4AAAAAAIMi1AMAAAAAYFCEegAAAAAADIpQDwAAAACAQRHqAQAAAAAwKEI9AAAAAAAGRagHAAAAAMCgCPUAAAAAABgUoR4AAAAAAIMi1AMAAAAAYFCEegAAAAAADIpQDwAAAACAQfl7ugBUZ7VKJeWersI+gX6SyeTpKgB4C46DktVqVUFBgfN26AYhISEyOek/gdfPZ8BqlSylztufO5gDOB+C8/j6ccDX2wF7EOrroJJy6bH3PV2FfaaPkYJ4NwFwEo6DUkFBgerXr++8HbpBfn6+QkNDnbIvX3/9fAZsgX7VHOftzx36TpH8Aj1dBbyFrx8HfL0dsAfd7wEAAAAAMChCPQAAAAAABkWoBwAAAADAoAj1AAAAAAAYFKEeAAAAAACDItQDAAAAAGBQhHoAAAAAAAyKO4sDAADAq23/abUemde3ynPBgaFqFtVG/brcpeHdH5Cf2c9D1QHA5SHUAwAAwCf06TRG1yYNkVVWHT9zWP/d/KZe/eRBHcz9QVNHvebp8gDAIYR6AAAA+ISWTVPUr8u4ysdDu/2f7pmRpBXfva7xNz6viAZNPFgdADiGMfUAAPiAgIAAxcXFqWXLloqPj1doaKhd28fExGjy5Mkuqg7wjNDgMCU37yar1ars4z97uhwALtagQQM1b95cLVu2VGxsrPz87Bt2M3ToUF177bUuqs5xXKkHAMALmc1mDRw4UEOHDlWXLl3UoUMHBQUFVS63WCxKT0/Xli1btGrVKr333ns6e/ZsjfuKiYnR6tWrlZiYqMjISD377LPuehmAS1mtVmUd2ydJCguN9HA1AJwtPDxcd9xxh3r16qUuXbqoZcuWVZYXFBRo+/bt2rp1q5YsWaKvvvrqgvsaNmyYFi9erMLCQg0YMECbNm1ydfm1xpV6AAC8SGhoqB577DH99NNPWrZsme6991517dq1SqCXbKG/TZs2uv3227VgwQIdPnxYc+bMUfPmzausd36gl6S77rpLYWFhbns9gDMVlRbo9NljOpV/VD8f3qG/LZ6kn7O3q02zqxUX1drT5QFwkjZt2mjBggXKysrSK6+8otGjR1cL9JIUEhKibt26afLkyfryyy/1448/asqUKQoMDKyyXkWgDwgIUFhYmO666y53vZRa8Ykr9ceOHdNf/vIXLVmyRFlZWYqKitLo0aP1wgsv6Le//a3effddLViwQBMnTvR0qfBCVqt0+rCUvUsqOSvJJNW7QortIIU28nR1cAdLuXR0n3TsJ6m0WPLzlxo0lpq2lwLt6wENXFSfPn30xhtv6Morr6zyvMVi0Z49e7Rr1y4VFhYqICBALVq0UKdOnSrDflhYmH73u99pwoQJmjZtmubNm6fo6Ogqgf7nn39Wnz59dObMGbe/ttpatWqVJKlv376XWLNmEydO1IIFCxQXF6esrCxnloY64N0vn9e7Xz5f+dhkMunqtgP10KjXPViVbygpkA7vlPKOSOVlkn+QFNVSimolceMBOIufn58effRRPfPMM9W+zC4oKFBaWpoOHTqksrIyhYaGqn379mrd+pcv9Nq2bauXX35ZkyZN0vjx47V58+YqgV6SFi5cqN/97ndufV2X4vWhfseOHRowYIByc3MVGhqq5ORkZWVladasWTpw4IAOHTokSerUqZOHK3W+zF2r9eGLfZU6+s+6etjjNa4z9576atyiq0b9YbV7i/MRJw5Je1dJ+UerLzu0WYpoJrXtR7j3VlarlLVd2r9RKs6vuix3j/TTOim6rdTmBtvJDZzPV46D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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "qc_S.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "falling-ballot", - "metadata": {}, - "source": [ - "Let's execute the circuit with the `qasm_simulator`, the simulator without noise that run locally." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "included-jesus", - "metadata": {}, - "outputs": [], - "source": [ - "sim = Aer.get_backend('qasm_simulator')\n", - "count0 = execute(qc_S, sim).result().get_counts()\n", - "\n", - "key_new = [str(int(key,2)/2**m) for key in list(count0.keys())]\n", - "count1 = dict(zip(key_new, count0.values()))\n", - "\n", - "fig, ax = plt.subplots(1,2)\n", - "plot_histogram(count0, ax=ax[0])\n", - "plot_histogram(count1, ax=ax[1])\n", - "plt.tight_layout()" - ] - }, - { - "cell_type": "markdown", - "id": "dried-tribute", - "metadata": {}, - "source": [ - "In the picture we have the same histograms but on the left we have on the x-axis the string with phase bits $\\varphi_1$, $\\varphi_2$ and on the right the actual phase $\\varphi$ in decimal representation.\n", - "\n", - "As we expected we have found $\\varphi=\\frac{1}{4}=0.25$ with a $100\\%$ probability." - ] - }, - { - "cell_type": "markdown", - "id": "5e04c3fc-7cb8-413a-8781-a8aa5a47bde6", - "metadata": {}, - "source": [ - "## IPE example with a 2-qubit gate\n", - "\n", - "Now, we want to apply the IPE algorithm to estimate the phase for a 2-qubit gate $U$. For this example, let's consider the controlled version of the $T$ gate, i.e. the gate $U=\\textrm{Controlled-}T$ (that from now we will express more compactly with $CT$). Its matrix is\n", - "$$ CT = \n", - "\\begin{bmatrix}\n", - "1 & 0 & 0 & 0\\\\\n", - "0 & 1 & 0 & 0\\\\\n", - "0 & 0 & 1 & 0\\\\\n", - "0 & 0 & 0 & e^\\frac{i\\pi}{4}\\\\ \n", - "\\end{bmatrix} $$\n", - "That is, the $CT$ gate adds a phase $\\pi/4$ to the state $|11\\rangle$, leaving unchanged the phase of the other computational basis states $|00\\rangle$, $|01\\rangle$, $|10\\rangle$.\n", - "\n", - "Let's consider to estimate the phase $\\phi=\\pi/4$ for the eigenstate $|11\\rangle$, we should find $\\varphi=1/8$, since $\\phi = 2 \\pi \\varphi$. Therefore to estimate the phase we need exactly 3 classical bits, i.e. $m=3$, since $1/2^3=1/8$. So $\\varphi=0.\\varphi_1\\varphi_2\\varphi_3$.\n", - "\n", - "As done with the example for the 1-qubit $U$ operator we will go through the same steps but this time we will have $3$ steps since $m=3$, and we will not repeat all the explanations. So for details see the above example for 1-qubit $U$ gate.\n", - "\n", - "First, we initialize the circuit with 3 qubits, 1 for the auxiliary qubit and 2 for the 2-qubit gate, and 3 classical bits to store the phase bits $\\varphi_1$, $\\varphi_2$, $\\varphi_3$." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "409c28f5-54c4-49fd-a487-9b801e8fc78f", - "metadata": {}, - "outputs": [], - "source": [ - "nq = 3 # number of qubits\n", - "m = 3 # number of classical bits\n", - "q = QuantumRegister(nq,'q')\n", - "c = ClassicalRegister(m,'c')\n", - "\n", - "qc = QuantumCircuit(q,c)" - ] - }, - { - "cell_type": "markdown", - "id": "0ff38765-de06-4432-9296-732994631a3e", - "metadata": {}, - "source": [ - "### First step\n", - "\n", - "Now we build the quantum circuit for the first step, to estimate the least significant phase bit $\\varphi_m=\\varphi_3$.\n", - "\n", - "#### Initialization\n", - "\n", - "We initialize the auxiliary qubit and the other qubits with the eigenstate $|11\\rangle$." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "c5bf93b8-9c96-4a1a-83fa-5cb9234cca4a", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "qc.h(0)\n", - "qc.x([1,2])\n", - "qc.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "47e2a81b-6433-49e9-9d20-1de52d8cdd30", - "metadata": { - "tags": [] - }, - "source": [ - "#### Application of the Controlled-$U$ gates\n", - "\n", - "Then we have to apply multiple times the $CU$ operator, that, in this example, is the Controlled-$CT$ gate ($CCT$ for short).\n", - "\n", - "To implement $CCT$ in the circuit, since $T$ is a phase gate, we can use the multi-controlled phase gate $\\text{MCP}(\\theta)$, with $\\theta=\\pi/4$." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "f64270a5-cc37-45cf-9163-8b9cd82bf0d6", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPEAAADuCAYAAADoS+FHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAA9hAAAPYQGoP6dpAAASjElEQVR4nO3df0zV973H8efBo8BBnRRxKD+KQy0chFoluQWtFq+xmXet2tq1sdjd/UjWdYtJ1RidoYvRmDWxpjdLzezItj/0GlJTdTqNu7HWUhVatiKsyNQW8JxTYaWI5VBA9Jz7B5H1DFA4cjh+vuf1SPoH5/v9Ht9Qnn5/nOP52vx+vx8RMVZUuAcQkXujiEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQyniEUMp4hFDKeIRQwXERG3tLSwYcMGMjIyiImJITU1lfXr19PZ2UlRURE2m42SkpJwj2lZPh/88yJ8cgyqDkLNEaivgO6OcE9mDfZwDxBq1dXVLF26lObmZuLi4nA6nXg8Hnbt2kVDQwNXrlwB4OGHHw7zpNbkPg/156DbG/h48z/gszPw7Ux4aDGMjQnPfFZg8/v9/nAPESotLS3MnTsXl8vFxo0bKS4uZvz48QBs376d4uJi7HY7Pp8Pr9dLbGxsmCe2lstl0FBx9/XiEmDeczDOEfqZrMjSEa9evZr9+/ezbt06Xn/99YBlfr8fp9NJXV0dmZmZXLhwIUxTWtPnNVB7YujrT0rpDdlmC91MVmXZc+La2lpKS0uZMmUK27Zt67fcZrMxb948oP+hdH19PU899RQTJkwgPj6eF198kS+//HJU5rYCv7/3nHc42tzQ5gnNPFZn2Yj37duHz+ejqKgIh2Pg47To6GggMOL29nYKCwtxu93s37+ft956i7KyMr73ve/h8/lGZXbTtTZCZ9vwt3NXjfQkkcGyF7ZOnjwJQGFh4aDruN1uIDDit956C4/Hw/vvv09aWhoAycnJzJ8/nz/96U+sWLEidENbxJf1o7tdpLNsxI2NjQCkp6cPuLy7u5uKit5jvm9GfPToURYsWNAXMEBBQQHp6ekcOXIkqIjz8vJoamoa9nam+tGSnSyc/fywt7vR5SMlJe3uK1pQUlISlZWVQW1r2Yg7OnpfhOzq6hpw+d69e7l+/ToJCQkkJyf3PV5bW8uzzz7bb32n00ltbW1QszQ1NeHxRM4JX2vbF0Ft133j64j6OY0Uy0aclJREe3s7lZWV5OXlBSxzuVxs3rwZgNzc3IBl165dY9KkSf2eLz4+nsuXLwc9SyT5pze4n1P9P88H/IUaSe7ld8SyES9ZsoRLly6xY8cOFi9ezKxZswAoLy9nzZo1tLW1AQO/ycM2wOsc9/JKXLCHSaa6dRM+2AM9ncPb7rmX57P2f9yhGcrCLHt1etOmTcTHx+NyucjOziYnJ4cZM2aQn59PVlYWCxYsAPpHHB8fz7Vr1/o9X1tbGw888MCozG66MXZIHuYb4GImQuKM0MxjdZaNOC0tjbKyMpYtW0ZMTAyNjY0kJiZSUlLC4cOHqaurA/pHnJWVNeC5b21tLVlZWaMyuxV8Jx8S0oe2rj0a5qyEqDEhHcmyLP2OrcG0traSkJCA3W7H6/X2vV4MsHPnTn75y1/y6aefkpqaCvQegufn5/POO++wcuXKcI1tHN9NuPB/cPWTwddxxEPuUzA+cfTmspqIjPj06dM8/vjjzJ49m5qamoBlX331FTk5OUyePJmtW7fS1dXFxo0bSUxM5Ny5c0RFWfbgJWS+bgPPefjiU/j6GuDv3evmrujdW+utlvcmIn8jb4c70EWtiRMn8u677zJ16lSef/55fvKTn1BQUMDRo0cVcJAck2DmIij4EUTH9T42NhYmT1fAI8GyV6fv5E4RA2RkZHD06NHRHEkkaBG5a7kd8b+/RixioojcE589ezbcI4iMmIjcE4tYiSIWMZwiFjGcIhYxnCIWMZwiFjGcIhYxnCIWMZwiFjGcIhYxnCIWMZwiFjGcIhYxnCIWMZwiFjGcIhYxnCIWMZwiFjGcIhYxnCIWMZwiFjGcIhYxnCIWMZwiFjGcIhYxnCIWMZwiFjGcIhYxnCIWMZwiFjGcIhYxnCIWMZwiFjGcIhYxnCIWMZwiFjGcIhYxnCIWMZwiFjGcIhYxnCIWMZwiFjGcIhYxnCIWMZwiFjFcRETc0tLChg0byMjIICYmhtTUVNavX09nZydFRUXYbDZKSkrCPaal+W7CNRfcutn7td8X3nmsxB7uAUKturqapUuX0tzcTFxcHE6nE4/Hw65du2hoaODKlSsAPPzww2Ge1Jq62sH9MXhqoKfzX4/f+BrOH4LUufBAWtjGswSb3+/3h3uIUGlpaWHu3Lm4XC42btxIcXEx48ePB2D79u0UFxdjt9vx+Xx4vV5iY2PDPLG1XL8KVe8ExjuQ6Y/Cd+aDzTY6c1mNpSNevXo1+/fvZ926dbz++usBy/x+P06nk7q6OjIzM7lw4UKYprSmji/ho/+Fm91DW3/GY5D+H6Gdyaose05cW1tLaWkpU6ZMYdu2bf2W22w25s2bBwQeSrvdbtauXUtBQQEOhwObzUZDQ8NojW0Zl04PPWCAT89Atzd081iZZSPet28fPp+PoqIiHA7HgOtER0cDgRFfvnyZ0tJSJk2axKJFi0ZlVqvpbIOWz4a3jd8HnuqQjGN5lo345MmTABQWFg66jtvtBgIjXrhwIc3NzRw7doznnnsutENa1NUgz0yufjKyc0QKy16dbmxsBCA9PX3A5d3d3VRUVACBEUdFjfzfa3l5eTQ1NY34896v/vs/X+PxnBeGvV17aw8pKdNDMNH9LykpicrKyqC2tWzEHR0dAHR1dQ24fO/evVy/fp2EhASSk5NDOktTUxMejyekf8b9xNsR3Mmt3++PqJ/TSLFsxElJSbS3t1NZWUleXl7AMpfLxebNmwHIzc0dlVkiSbfvelDbXfN+HvK/UO9X9/I7YtmIlyxZwqVLl9ixYweLFy9m1qxZAJSXl7NmzRra2tqA0XmTR7CHSabqvA5nfjf87R79r3Tc290jP5DFWfbC1qZNm4iPj8flcpGdnU1OTg4zZswgPz+frKwsFixYAOidWqEQ+y2YnDG8bWxRkBz6gyJLsmzEaWlplJWVsWzZMmJiYmhsbCQxMZGSkhIOHz5MXV0doIhDZeYisMcMff0Zj0F0XOjmsTLLHk4DZGdn8+c//7nf462trVy9ehW73Y7T6QzDZNYX9wDMXQUfvwM9X9953e/Mh7S8O68jg7N0xIOpqakBIDMzs+8NH9904MAB4F/nssePHycxMZH09PR+F8lkcBOT4NEXwX2+940cNzoCl3/7IUh5BOJTwjOfVUR0xIMdSj/77LMBX7/88ssA/OAHP+CPf/xjSGezmujxkDG/9x85fNUEVQfhZheMc0DOk+GezhoU8QAs/G9CwiZqDExKhjF2uEnvhSwZGRH5o7wd8Wi8RiwSahG5Jz579my4RxAZMRG5JxaxEkUsYjhFLGI4RSxiOEUsYjhFLGI4RSxiOEUsYjhFLGI4RSxiOEUsYjhFLGI4RSxiOEUsYjhFLPel9PR0MjMzmTNnDk6nkzfffHPQdZ9++mnOnTs3pOd9++23+dnPfhbw2NatW7HZbPz9738Hej8U4rHHHqO+vj74b2AUKWK5bx04cICqqipOnDjBli1bqK7uf8e1Dz/8kLa2NvLz84f0nIcOHWLFihV9X//tb3+jvLyctLR/3encZrPxyiuvsHXr1nv+HkaDIpb7XmpqKrNmzeLixYv9lu3Zs4cXXui979O1a9dISUlh8uTJzJkzh6ysLKKjo/npT38KQE9PD2fOnOm7yV53dzc///nP2b17N7Z/u8P5k08+ybFjx2hvbw/xd3fvFLHc92pqaqirqxvwM9Hee+89CgoKAIiPj2f16tWsW7eOqqoq3njjDebPn8+ePXsAOHXqFAUFBYwbNw6AV199laKiIqZP738Tt7FjxzJ79mzOnDkTwu9sZETkx/OIGVatWkVMTAwOh4Pf//73zJw5s986brc74D5GVVVVvPLKKwD89a9/Zc6cOX3LDh06xMqVKwE4d+4cH330Eb/+9a8H/fOTkpL6bn97P9OeWO5bt8+Jz549y6pVqwZcx+Fw0NnZ2fd1VVVVX7jfjNjv93PixAm++93vAnD69Gnq6uqYPn066enpuN1unnjiCY4fP973XF1dXcTGxobmmxtBiliMlpub23dLHo/HQ1RUFFOnTgWgurqanJwcoPcCWFZWFuPHjwd679X1+eef09DQQENDAykpKQGRA1y4cMGI2/woYjHaqlWr+vaeH3/8ccDh88SJE9m9ezcABw8eDLgqfTcNDQ0AzJ49e6RGDRmbX5+ULqOo7LfQ7e29M8RjL93787W3t5Ofn09FRQVxcYPfkS07O5tTp04xZcqUIT3vpk2bmDlzJj/+8Y/vfcgQ055YjDZhwgTeeOONu74x45NPPhlywADTpk3jhz/84b2ONyq0J5ZRNdJ7YtGeWMR4iljEcIpYxHCKWMRwiljEcIpYxHCKWMRwiljEcIpYxHCKWMRwiljEcIpYxHCKWMRwiljEcIpYxHCKWMRwiljEcIpYxHCKWMRwiljEcIpYxHAREXFLSwsbNmwgIyODmJgYUlNTWb9+PZ2dnRQVFWGz2SgpKQn3mJbV0Qr/OAVnftf7SZcAPZ3wxafg94V3Niuw/A3VqqurWbp0Kc3NzcTFxeF0OvF4POzatYuGhgauXLkCYMTtOkxz6yZcOAFNF/ov892C8wch9luQuxwmDP0joeXfWPpzp1taWpg7dy4ul4uNGzdSXFzcdy+e7du3U1xcjN1ux+fz4fV6jbh5lil8t6DqHWhtvPu6Y8ZB3vMKOViWPpxeu3YtLpeLdevW8dprr/UFDLBlyxYyMzO5efMms2bNUsAj7LOzQwsY4NYNqDrYG74Mn2Ujrq2tpbS0lClTprBt27Z+y202G/PmzQMCD6UPHDjAM888w4MPPojD4SAzM5MtW7bg9XpHbXbT3eoBz/nhbdPdDl9cCs08VmfZiPft24fP56OoqAiHwzHgOtHR0UBgxDt37mTMmDHs2LGD48eP89JLL7F7926eeOIJfD5dhRmK5n9AT9fwt3NVjfgoEcGyF7ZOnjwJQGFh4aDr3L4L/DcjPnLkCImJiX1fL1q0iMmTJ7NmzRo++OADFi5cOOxZ8vLyaGpqGvZ2pip6fBtL5gz/ZmRNn3WQkvJQCCa6/yUlJVFZWRnUtpaNuLGx94QsPT19wOXd3d1UVFQAgRF/M+Dbbh92ezyeoGZpamoKelsT9dwI7ohlnD02on5OI8WyEXd0dADQ1TXwcd3evXu5fv06CQkJJCcn3/G53n//fQAyMzODmiUpKSmo7Uxlswd3harzxld3/X9hVffyO2LZiJOSkmhvb6eyspK8vLyAZS6Xi82bNwOQm5t7x+fxeDy8+uqrLF26lEceeSSoWYI9TDLVl43w8dvD3y7jkUl9pzgydJa9sLVkyRIAduzYwcWLF/seLy8vZ/HixbS1tQF3fpOH1+tl+fLljB07lj/84Q8hnddKHkgDR/zwt0uZM+KjRATLRrxp0ybi4+NxuVxkZ2eTk5PDjBkzyM/PJysriwULFgCDR9zV1cXy5cupr6/nL3/5C9OmTRvN8Y1ms8H0R4e3TXwqfEs/4qBYNuK0tDTKyspYtmwZMTExNDY2kpiYSElJCYcPH6aurg4YOOKenh6+//3v8+GHH3L8+HGcTudoj2+8qdkwPX9o645PhNyneuOX4bP02y4H09raSkJCAna7Ha/X2/d6MYDP52P16tUcPnyYY8eO3fElKrk7Tw3Un4Wu9v7LosbAt7PgoUKwR/dfLkNj2Qtbd1JTUwP0Xm3+ZsAAv/jFLygtLWXLli3ExsZSXl7etywlJYWUlJRRndV0yTkwLRta6uGLy3CzC6LGwoTE3r31uIHfhyPD4Y9Av/nNb/yA/4UXXui37MEHH/QDA/73q1/9avSHFbmLiN4TD3Q+3NDQMMrTiNwby17YupPbEd/tNWIRE0TkhS0RK4nIPbGIlShiEcMpYhHDKWIRwyliEcMpYhHDKWIRwyliEcMpYhHDKWIRwyliEcMpYhHDKWIRwyliEcMpYhHDKWIRwyliEcMpYhHDKWIRwyliEcMpYhHDKWIRwyliEcMpYhHDKWIRwyliEcMpYhHDKWIRwyliEcMpYhHDKWIRwyliEcMpYhHDKWIRwyliEcMpYhHDKWIRw/0/29rRXOXywqMAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cu_circ = QuantumCircuit(nq)\n", - "cu_circ.mcp(pi/4,[0,1],2)\n", - "cu_circ.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "b7f548b5-7964-49d8-960e-c839a4d23ec6", - "metadata": {}, - "source": [ - "Let's apply $2^t$ times $\\text{MCP}(\\pi/4)$. Since for the first step $t=m-1$ and $m=3$, we have $2^t=4$." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "13cbdd8a-0213-4204-9532-585872833656", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "for _ in range(2**(m-1)):\n", - " qc.mcp(pi/4,[0,1],2)\n", - "qc.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "72958d41-0107-48a6-a331-b9983bb599fb", - "metadata": {}, - "source": [ - "#### Measure in x-basis\n", - "\n", - "Finally, we perform the measurement of the auxiliary qubit in x-basis.\n", - "We can use the `x_measurement` function defined above in the example for 1-qubit gate. In this way we have obtained the phase bit $\\varphi_3$ and stored it in the classical bit $c_0$." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "78e39186-7cbc-4e44-9a5f-88c2a3fb7893", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x_measurement(qc, q[0], c[0])\n", - "qc.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "d74a9c71-c2e7-47a2-9ed2-571de5ed673c", - "metadata": {}, - "source": [ - "### Subsequent steps (2nd, 3rd)\n", - "\n", - "Now we build the quantum circuit for the other remaining steps, the second and the third ones.\n", - "As said in the first example, in these steps we have the additional sub-step of the phase correction.\n", - "\n", - "#### Initialization with reset\n" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "3a45528b-d0c6-4332-b367-276443bf046c", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "qc.reset(0)\n", - "qc.h(0)\n", - "qc.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "f25c47cf-de23-4ef4-84e8-dd2b95df7375", - "metadata": {}, - "source": [ - "#### Phase correction (for step 2)\n", - "In order to extract the phase bit $\\varphi_{2}$, we perform a phase correction of $-\\pi\\varphi_3/2$.\n", - "\n", - "So, after the reset we apply the phase gate $P(\\theta)$ with phase $\\theta=-\\pi/2$ conditioned by the classical bit $c_0$ ($=\\varphi_3$)." - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "df38fd1b-a177-4c8e-82a4-0a76a79931f4", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "qc.p(-pi/2,0).c_if(c,1)\n", - "qc.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "fdc695d1-c521-4d06-a8c9-19d58d30b8c1", - "metadata": {}, - "source": [ - "#### Application of the Controlled-$U$ gates and x-measurement (for step 2)\n", - "We apply the $CU$ operations as we did in the first step. For the second step we have $t=m-2$, hence $2^t=2$. So we apply $\\text{MCP}(\\pi/4)$ $2$ times. And then we perform the x-measurement of the qubit $q_0$, storing the phase bit $\\varphi_2$ in the bit $c_1$." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "b27201e4-e358-4e96-96b7-e8eb8244000d", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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wgAAfnH50IFq1aJZzePxoy5SXEyUHyvyHALek9x6661avny5kpKS9O233yojI0PfffedsrOzlZGRoYcffthvtVWP3o2NidLA3il+qwMAAADmlNIxSQN7p8hisWji6BEKCwv1d0mAV91www3KzMxs0Lo7duzQtGnTvFwRAMCfQkNDNPGqEbJaLerbo7N6nneuv0vyGIuzsdzuzc82bdqkfv36KTQ0VGlpaerWrZvHtv23195TYVGp2+2dTqeKSkrldDoVHhamcDrjAAAAcItTFZVVCgulP4nAlnngR7387EMutbFYLLr30RfUpBnT4QFAIKusrFRIaIgsalxTM8TGROp3N1/jVluu8//J+++/L0kaPXq0R8NdSSosKlVBUbFHtlVeUaHyigqPbAsAAADBqayc/iQC28rln7rcxul0auXyz3TRZWO9UBEAoFEJsL4QAe9Pdu7cKUk6/3zPz0UWGxN55pVOgdG7AAAAAOCawzkZbrU7kpupuJhoD1cDAMCZnU1+SMD7k4KCAklS06ZNPb5td4dXS9K6tO/1/qcrFBsTpftuu4GbqwEAAADAGfzzeffun5IQ30R/uPMmD1cDAIB3kRb+JC4uTpK8cudUd+fgrR69K0kVFVV6dv5iT5cGAAAAAAGntMLhVrtD+UV68sVFHq4GAIAzYw5eD+jevbvee+89rV271uPb9sQcvMy9CwAAAAANk9y5m7Iz9rvcrn2nrh67fwoAAL5CwPuTa665Ro899pg+/vhj7dq1SykpKR7btjtzaDD3LgAAAAC458IRl2nN18vkdDR8JG94RIQGXThC4eERXqwMAID6nc0cvBan0+n0YC2mNnHiRL311ltKTk7Wm2++qSFDhtQsy87O1oIFC/Tww+7N5eQq5t4FAAAAAPfdeuut+sc//tHg9R9++GE98sgj3isIAAAvIeA9SUFBgcaOHatvvvlGktSuXTslJCQoKytLOTk5cjqd8sWvq8pu13PzF+t4QZGuumSwhvTv4fWfCQAAAACBpLy8XGPHjtVnn312xnWnTJmiV199VVar1QeVAQDgWXx7nSQuLk5ffPGFFixYoKFDh6qwsFBbt25VaGiorrzySr3++us+qWPjtj06XlCk2JgoDeztuakiAAAAACBYhIeH68MPP9SsWbMUGxtb7zrx8fF68sknCXcBAKbGCN5GaPOOvVr29XoNG9Sb0bsAAAAAcJaKioq0aNEirV69WkVFRYqLi9PIkSM1YcIEhYeH+7s8AADOCgFvI1VZVSWLLAoJsfm7FAAAAAAAAACNFAEvAAAAAAAAAJgUkwwBAAAAAAAAgEkR8AIAAAAAAACASRHwAgAAAAAAAIBJEfACAAAAAALG3r17NXjwYHXp0kUDBw7Uzp07T7t+UVGRRo0apfj4eMXHx/uoSgAAPIeAFwAAAAAQMKZNm6bbbrtNe/bs0X333aepU6eedv3Q0FDdd999+uKLL3xUIQAAnkXACwAAAAAICIcOHdKmTZs0efJkSdK1116r/fv3a/369UpOTtbatWslSe+8845SU1NVVlam8PBwXXLJJWratKkfKwcAwH0EvAAAAACAgJCRkaE2bdooJCREkmSxWJSUlKSysjK98cYbuummm/Tdd99pxowZeuuttxQREeHnigEAOHsh/i4AAAAAAABPsVgstR47nU5J0kUXXaSpU6fqggsu0BtvvKHOnTv7ozwAADyOEbwAAAAAgIDQrl07ZWZmqqqqSpIR7mZkZCgpKUmStHnzZrVs2VIHDx70Z5kAAHgUAS8AAAAAICC0atVKqampevPNNyVJ7777rpKTk5WcnKy///3vys/P15YtW/TKK69o1apVfq4WAADPsDirr1cBAAAAAMDkdu/erVtuuUVHjx5VXFycXnvtNZWXl+uaa67RunXrdM4552jlypWaMmWKvvvuO8XHx6tv377KycnRoUOH1Lp1a40YMUJvvPGGv/8rAAA0CAEvAAAAAAAAAJgUUzQAAAAAAAAAgEkR8AIAAAAAAACASRHwAgAAAAAAAIBJEfACAAAAAAAAgEkR8AIAAAAAAACASRHwAgAAAAAAAIBJEfACAAAAAAAAgEkR8AIAAAAAAACASRHwAgAAAAAAAIBJEfACAAAAAAAAgEkR8AIAAAAAAACASRHwAgAAAAAAAIBJEfACAAAAAAAAgEkR8AIAAAAAAACASRHwAgAAAAAAAIBJEfACAAAAAAAAgEkR8AIAAAAAAACASRHwAgAAAAAAAIBJEfACAAAAAAAAgEkR8AIAAAAAAACASRHwAgAAAAAAAIBJEfACAAAAAAAAgEkR8AIAAAAAAACASRHwAgAAAAAAAIBJEfACAAAAAAAAgEkR8AIAAAAAAACASRHwAgAAAAAAAIBJ/X8019uDhPwpYAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "for _ in range(2**(m-2)):\n", - " qc.mcp(pi/4,[0,1],2)\n", - "x_measurement(qc, q[0], c[1])\n", - "qc.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "d503acb9-a692-44cf-897c-8a128cfce713", - "metadata": {}, - "source": [ - "#### All substeps of the 3rd step\n", - "For the 3rd and last step, we perform the reset and initialization of the auxiliary qubit as done in the second step.\n", - "\n", - "Then at the 3rd step we have to perform the phase correction of $-2\\pi 0.0\\varphi_{2}\\varphi_{3}= -2\\pi \\left(\\frac{\\varphi_2}{4}+\\frac{\\varphi_3}{8}\\right)=-\\frac{\\varphi_2\\pi}{2}-\\frac{ \\varphi_3\\pi}{4}$, thus we have to apply 2 conditioned phase corrections, one conditioned by $\\varphi_3$ ($=c_0$) and the other by $\\varphi_2$($=c_1$). To do this we have to apply the following:\n", - "- gate $P(-\\pi/4)$ conditioned by $c_0=1$, that is, by $c=001$ (c_if with value $1$)\n", - "- gate $P(-\\pi/2)$ conditioned by $c_1=1$, that is, the gate is applied when $c=010$ (c_if with values $2$)\n", - "- gate $P(-3\\pi/4)$ conditioned by $c_1=1$ and $c_0=1$ that is, the gate is applied when $c=011$ (c_if with values $3$)\n", - "\n", - "Next, the $CU$ operations: we apply $2^t$ times the $\\text{MCP}(\\pi/4)$ gate and since at the 3rd step $t=m-3=0$, we apply the gate only once." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "59cac307-8260-4d50-b2c5-c733d623db54", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABroAAAJxCAYAAAAdC2LsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAA9hAAAPYQGoP6dpAACC7UlEQVR4nOzdeZwcZZ0/8E/PTDKTyQEhBBJyEK4QkhACAeQSCLKiGAQRkMWgsiqei3KIKD88FmQXBXRXRS51VVBRVkAuUeQQwhkgEAjhDuSGhNx3Zub3R5NISAIzwxzpnvf79epX0l31VH+runr66f5UPVVoaGhoCAAAAAAAAJSYivYuAAAAAAAAAJpD0AUAAAAAAEBJEnQBAAAAAABQkgRdAAAAAAAAlCRBFwAAAAAAACVJ0AUAAAAAAEBJEnQBAAAAAABQkgRdAAAAAAAAlCRBFwAAAAAAACVJ0AUAAAAAAEBJEnQBAAAAAABQkgRdAAAAAAAAlCRBFwAAAAAAACVJ0AUAAAAAAEBJEnQBAAAAAABQkgRdAAAAAAAAlCRBFwAAAAAAACVJ0AUAAAAAAEBJEnQBAAAAAABQkgRdAAAAAAAAlCRBFwAAAAAAACVJ0AUAAAAAAEBJEnQBAAAAAABQkgRdAAAAAAAAlCRBFwAAAAAAACVJ0AUAAAAAAEBJEnQBAAAAAABQkgRdAAAAAAAAlCRBFwAAAAAAACVJ0AUAAAAAAEBJEnQBAAAAAABQkgRdAAAAAAAAlCRBFwAAAAAAACVJ0AUAAAAAAEBJEnQBAAAAAABQkgRdAAAAAAAAlCRBFwAAAAAAACWpqr0LYMMaGpKVde1dReN1rkwKhfauAgAoF6XWF0patj/U0NCQpUuXtszC2khtbW0KLdgh7OjboKO/B5LiNqhf1XLLa20VnXwnAlqOzwF9gY6+/knpvQ86el8oadn+UEdf/8Q2aApB1yZqZV3y9Wvau4rGu+BjSbW9CQBoIaXWF0patj+0dOnSdOvWrWUW1kYWL16crl27ttjyOvo26OjvgaT4pf7O/2m55bW20acklZ3buwqgXPgc0Bfo6OuflN77oKP3hZKW7Q919PVPbIOmMHQhAAAAAAAAJUnQBQAAAAAAQEkSdAEAAAAAAFCSBF0AAAAAAACUJEEXAAAAAAAAJUnQBQAAAAAAQEkSdAEAAAAAAFCSqtq7AAAAAGhNj79wV864dPQ6j9V07poBvXfOoaM+kSP3/3IqKyrbqToAgNalL2QblPv6C7oAAADoEA7e7WN5zy5j0pCGzF04I38d/7/52Z+/mpdnP5VTj7m8vcsDAGhV+kK2Qbmuv6ALAACADmGHbUbm0FFj194/Yt8v5NM/2CW3PnRlPnXYuenZfet2rA4AoHXpC9kG5br+rtEFAABAh9S1pkeGbrtvGhoaMnPui+1dDgBAm9IXsg3KZf2d0QUAAGWsUChkhx12yO67755evXqlqqoqy5cvz0svvZRHHnkk8+fPb9RyLrroosyePTvf//73W7dgaEMNDQ2ZPuf5JEmPrlu2czUAtJbNNtsse+yxR3bYYYfU1NRk9erVef311/PYY4/l+eefT0NDwzsuY4899siFF16YY489NnPnzm2DqqH16QvZBuWy/oIuAAAoMxUVFfngBz+Yz33uc3nve9+bzTfffKPzvvDCC7n++utz6aWX5vnnn9/gPBdddFFOO+20JMUvQj/4wQ9ao2xodctXLc2CJXPS0NCQ1xfOzPXjfpwXZz6enQfslf69d2rv8gBoQdttt10+97nP5eijj85OO238b/yCBQsybty4XH755bnppptSV1e33jx77LFHbr/99vTs2TO333573ve+9+X1119vzfKhVegL2Qbluv4dIuiaM2dO/uu//ivXXXddpk+fnt69e+e4447Leeedl89+9rO5+uqrc8UVV+Qzn/lMe5cKAADNVigU8pnPfCbf/OY3M2jQoEa12WGHHXL66afn9NNPz2233ZYzzjgjTz755Nrpbw656uvrM2fOnNYovUXceeedSZLRo0c3q/1nPvOZXHHFFenfv3+mT5/ekqWxibj69nNz9e3nrr1fKBSy15AP5rRjrmzHqgBoSTvvvHMuvPDCHH744amoeOertmy22WY5/PDDc/jhh2fq1Km54IILcskll6w9y+vNIVeSLFy4MCtWrGjVdXg39Id4O/pCtkG5rn/ZB11PPPFE3v/+92f27Nnp2rVrhg4dmunTp+fiiy/OlClT8sorryRJdtttt3autHVMm3RX/u/80dnvuP/MXh8+a4PzXPLpbtlquz1zzP+7q22L6yBWLUtmPJXMmJgsW1B8rLpr0mdo0m9EUtO9feuj9S2dn0yfkMx6Jlm5NKmoSGp7Fl//PkOTqs7tXSGtqaEhWTAj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nqU+evTo3Hvvvc1e3h577JEbb7wxnTv/82LaFRUV+dnPfrbOdb9Kjf5Q+b4HgKKyvUbXmqNYR48evdF5pk0rjif15qDr8ssvz/Tp0/OPf/wjAwcOTJL069cv+++/f/785z/nqKOOar2iW9FD15+bh65f/8w2Wt7qFcnMSU1v9/orxaHLum7R8jXRtuZPa94wdNOfKF6zraJsD0HoOKZPLH65b6ppjyVbDGz5emh70x5vepv61cWwa+Colq+H8uwLnXPOOdl1112TJBMmTMjHP/7xdY7QbaqLLroop512WpLikcsXXHBBvv71r6eioiLnnXdebrrppjzzTBNT/E1Av379kvyz7/9max7r379/Jk6cuPbxG264IZ/73OdSVVWV1atXt02hrawc3wNsulYuSV5txtDcr71QHPK3xkhZJW/OS+88fPOGTJtQ7Au5XlvLK8fPge222y7f//73194/9thj1/k8b6o99tgjt99+e3r27Jkkueeee1JdXZ299947Q4YMyX/8x3/kzDPPfNd1twf9ofJ8D0A5aGhoyNKlS5MktbW1KTSzE1C2QdfLL7+cJBk0aNAGp69YsSIPPvhgknWDrptuuikHHHDA2pArSfbbb78MGjQoN954Y7OCrj333DOzZs1qUpvKTl3ykfOea/Jzbcywgz6dwfsev8Fpf77oiHe9/ME77ZQ6YwwkSbbdatd894Rbm9V27Ec/n4efu6mFK6KtvX/3T+eEg77b5HYrFie7DtkjC5a+2gpV0Za+/KHLs+dOhze53cSHp+TwLx3QChXR1v7n5AnpUbtlk9v9/CfX5Od/O70VKio9pdYXSlq2P/ROIwn07t07X//615Mkq1atyqc+9al1hthpqreGXGuuyVVdXZ3TTjstNTU1Oe+883LsscdudBk77bRTKlrwaI2WGk1hzRlvK1asWG/amiGN3joCxA033JCvf/3rOeigg5o0DGRLboOO/h5Iks5VXXL5l1tmG+y2w8H52w9ad4zgnQbvlJWrfSdKkiH9981Zx/yx6Q0bko988MRMnHJnyxdFm/rw3l/J0ft9rcntls1Pdtx+cFasWtryRZUYnwPv3Bf4zne+k65duyZJLrnkktxxRxOuIfEWbw251lyTa8CAAXnsscdSU1OTU089Nf/93/+d6dOnb3Q5LdkXaMmRpdqqP9TS/cGWfB+U4nug1PpC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1NZUZ989hrXJcwIAAJST7t27584778zYsWNTWVm5wXmqq6vz7//+70IuAKAsffnLX85vf/vb9OvXb6Pz7LHHHrnnnnvKLuRKkh122CH3339/Ro8evdF5tthii/zoRz/KBRdc0IaVtY2Kior85je/ydlnn52uXTd8pl6hUMhHPvKRjBs3rmRDrsQZXZuk+x99Kn+5+6EcvM9IZ3MBAAC8SzNmzMjll1+e++67L4sXL06PHj1y6KGH5qSTTkqvXr3auzwAgFa1atWq3Hjjjfntb3+bWbNmpVOnTtlhhx3y2c9+NnvvvXeHuGzOU089lcsuuyxPPfVUli9fnl69euWjH/1ojjvuuHTp0vwh80rFwoUL85vf/CY333xz5s+fn65du2bPPffM5z73uQwaNKi9y3vXBF2bqCXLlqeqsjLVnTu1dykAAAAAAACbJEEXAAAAAAAAJck1ugAAAAAAAChJgi4AAAAAAABKkqALAAAAAACAkiToAgAAoGw899xz2W+//TJ48ODsvffemTRp0tvOv3jx4hx22GHZcssts+WWW7ZRlQAArUNfqOnbYOLEiTnwwAMzZMiQ7Lrrrjn55JOzYsWKNqq25TV1/V966aWMGjUqI0eOzK677ppjjz028+bNa6NqW4agCwAAgLLxuc99LieffHKeffbZnHnmmfn0pz/9tvN36tQpZ555Zm6//fY2qhAAoPXoCzV9G9TU1OQnP/lJJk+enAkTJmTBggW56KKL2qjaltfU9d9mm21y7733ZsKECZk4cWL69euXc889t42qbRmCLgAAAMrCq6++mkcffTRjx45Nknz0ox/NSy+9lIceeiiDBg3KAw88kCS59tprs/vuu2f58uWprq7O+973vmy++ebtWDkAwLunL9S8bbDTTjtlxIgRSZLKysrstddeefHFF9ttHd6N5u4DXbp0SZLU1dVl8eLFqagoreiotKoFAACAjZg6dWq22WabVFVVJUkKhUIGDhyY5cuX5ze/+U0+/vGP5+GHH86pp56aP/zhD6mpqWnnigEAWo6+0LvfBkuWLMmVV16ZI444oj3Kf9eau/4rV67MyJEjs+WWW+b555/Pt771rfZcjSYTdAEAAFA2CoXCOvcbGhqSJO9973vz6U9/Ovvuu2++//3vZ6eddmqP8gAAWpW+UPO3wapVq/Kxj30s73//+3PkkUe2Wb0trTnr37lz50yYMCGzZ8/OzjvvnEsvvbRNa363BF0AAACUhQEDBmTatGlZvXp1kuKX+qlTp2bgwIFJksceeyy9e/fOK6+80p5lAgC0Cn2h5m+DVatW5bjjjkvfvn3z3//9321ed0t5t/tA586dc9JJJ+U3v/lNm9XcEgRdAAAAlIWtttoqu+++e6666qokyf/93/9l0KBBGTRoUH7yk59k3rx5efzxx3PppZdm3Lhx7VwtAEDL0hdq3jZYvXp1jj/++GyxxRa5/PLL1zsjqpQ0Z/1feeWVLFmyJElSX1+fP/zhD2uvWVYqCg1rzlsDAACAEvfMM8/kU5/6VObOnZsePXrkV7/6VVasWJGjjz46Dz74YLbeeuvce++9OfHEE/Pwww9nyy23zB577JGZM2fm1VdfTd++fTN69OiSO4oVACDRF0qavg1uu+22jB07NiNGjFgbcu2///756U9/2s5r0jxNXf+HHnooZ511VpJi0LXHHnvkhz/8YXr16tXOa9J4gi4AAAAAAABKkqELAQAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJFW1dwHA+hoakpV17V1F03SuTAqFllteQ0NDli5d2nILbAO1tbUptORGAAAAAADgbQm6YBO0si75+jXtXUXTXPCxpLoF/6IsXbo03bp1a7kFtoHFixena9eu7V0GAAAAAECHYehCAAAAAAAASpKgCwAAAAAAgJIk6AIAAAAAAKAkCboAAAAAAAAoSYIuAAAAAAAASpKgCwAAAAAAgJIk6AIAAAAAAKAkCboAAAAAAAAoSYIuAAAAAAAASpKgCwAAAAAAgJIk6AJopIoKfzIBAAAAADYlVe1dAEBrqqyszJAhQ7Lnnntm4MCBqampyapVqzJnzpw8+uijmTBhQpYuXfqOyzn22GPz9a9/PYcddljmzp3bBpUDAAAAAPBOBF1AWRo9enS++MUv5vDDD09tbe1G56urq8vDDz+cSy+9NNdcc02WL1++3jzHHntsfvvb36aqqip33HFH3vve92bhwoWtWT4AAAAAAI3QIcbhmjNnTs4444zssMMOqampyYABA3L66adn2bJlGTt2bAqFQq688sr2LrPs1dclK5cldauShob2rqZjmDbprvz32EIe/vN/bXSeSz7dLdeed3DbFdXKPvCBD2TSpEm54447cswxx7xtyJUUz/jaZ5998r//+7+ZNm1azjzzzFRWVq6d/uaQK0keeuihLFq0qFXXAQAAAACAxin7M7qeeOKJvP/978/s2bPTtWvXDB06NNOnT8/FF1+cKVOm5JVXXkmS7Lbbbu1caXlqaEjmvpRMm5DMefGfj9f2TPrtlmwzPOlU027lUUY222yzXHzxxfm3f/u3dR6fPXt27r777jzyyCOZNGlSli5dmk6dOmXQoEEZNWpU9t9//wwdOjRJ0qtXr1xwwQX56Ec/mpNOOinDhg1bJ+S68sorc/LJJ6dBUgsAAAAAsEko66Brzpw5GTNmTGbPnp0zzzwz55xzTrp165YkOe+883LOOeekqqoqFRUVGT58eDtXW35WLk0evz5ZMGP9aUvnJc/dlbw4Ltn1iGTL7du6OsrJoEGD8re//S077rjj2sfGjRuX//7v/87111+fVatWvW3797znPfnSl76UE044IZWVldl7773z2GOPpbKycu3ZXUIuAAAAAIBNT1kPXXjKKadk6tSpOe2003LBBResDbmS5Oyzz86QIUOyevXqDB48OF26dGnHSsvP6hXJo3/YcMj1ZnWrkgnXFc/6gubYdttt849//GNtyLVw4cJ85jOfyQEHHJA//vGP7xhyJcmDDz6YT3ziE9l///3z9NNPJ0k6d+4s5AIAAAAA2MSVbdA1adKkXHPNNdlqq61y7rnnrje9UChk1KhRSdYftvCll17Khz/84XTv3j09e/bMJz7xicydO7dN6i4Xz92dLJ7TyJkbkok3JXUrW7WkDm31yqVZtmjOBm+lrLa2NrfddlsGDBiQJHn66aez66675uc//3mzlvfggw/mvPPOS319/drH6urqctlllwm5AAAAAAA2QWU7dOHVV1+d+vr6jB07NrW1tRucp7q6Osm6QdeiRYsyevTobLHFFvnd736XZcuW5cwzz8yYMWMybty4VFSUbTbYYlYtT2ZOalqb1SuSWZOTfiNap6aO7qHrz81D168f+Ja6//qv/8rOO++cJJk8eXIOOuigvPbaa81e3rHHHptf/epX67zPKysr88tf/jKjRo3KypXSWAAAAACATUnZBl1///vfkySjR4/e6DzTpk1Lsm7Qdfnll2f69On5xz/+kYEDByZJ+vXrl/333z9//vOfc9RRRzW6hoaGhixdujRJ8cyTQqHQ1NUoSbOeTupXN73dtMcFXa1l2EGfzuB9j9/gtD9fdEQbV9MyDjzwwPz7v/97kmTp0qU54ogj3nXI9dvf/jZVVcU/i7/4xS8ycuTI7LHHHhk+fHi+/e1v5+yzz26R2gEAAAAAaBllG3S9/PLLSZJBgwZtcPqKFSvy4IMPJlk36LrppptywAEHrA25kmS//fbLoEGDcuONNzYp6Fq6dOna64L17du3w5wNduLo7+V9u32yye3mTl+e/v13bIWKSk9lpy75yHnPtdjyNtt6xwwcfugGp1VUVLbIcwzeaafUrVrWIstKss7wgRvyve99b+3/v/nNb+b5559v9nO9NeRac02u4cOHZ/z48encuXNOP/30XHzxxW87jOlOO+3UYd7nAAAAAAAtpU+fPhk/fnyz2pZt0LVkyZIkyfLlyzc4/aqrrsqCBQvSq1ev9OvXb+3jkyZNyrHHHrve/EOHDs2kSU0cj+9NZs6c2ey2pWblimaczpWkqqJzpk+f3sLVlKaq6g0Pt7kpmzFzRlavWNomz7XrrrvmgAMOSFJ8z/74xz9u9rI2FnI1NDRk4sSJ+elPf5pTTz011dXVOemkk3LhhRdudFkd6X0OAAAAALApKNugq0+fPlm0aFHGjx+fPffcc51pU6dOzTe+8Y0kyYgR646VN2/evGy++ebrLa9nz57v6oyRjnRGV33Fima1W7z89XVCx46sslOX9i6hybbpu02Ln9G1seDo85///Nr///SnP33Hs7825u1CrjUuueSSnHrqqUmSL3zhC7nooovWmf5mHel9DgAAAADQUvr06dPstmUbdB166KF57rnncv755+eQQw7J4MGDkyQPPPBATjzxxMyfPz/JusMWrrGha2lt7IftxnruuefStWvXd7WMUrFgZvLw1U1vN3TfLTPtW9NavqAStGJ18vVr2ruKpnn2uedS3YJ/UZYsWbJ26M+3Ouyww5Iky5Yty29+85tmLb8xIVeSPP/887n99ttz6KGHZvvtt88OO+yw0dC7I73PAQAAAAA2BWV76sFZZ52Vnj17ZurUqRk2bFh23XXX7Ljjjtl3332zyy67rB327K1BV8+ePTNv3rz1ljd//vxsscUWbVJ7qdusb9Jj66a36z+yxUuhDG2++ebZYYcdkiSPPvpoFi1a1ORlNDbkWuPuu+9e+/9Ro0Y1o2oAAAAAAFpD2QZdAwcOzD333JPDDz88NTU1efnll9O7d+9ceeWVueGGGzJ58uQk6wddu+yyywavxTVp0qTssssubVJ7OdjhgCTrnxi3UX12Sbr1brVyKCN77LHH2v8/8sgjTW7f1JDrrc/z1qFQAQAAAABoP2U7dGGSDBs2LDfffPN6j7/++uuZOXNmqqqqMnTo0HWmjRkzJt/85jczderUDBgwIElxuMMpU6bkiCOOaJO6y0Gv7ZKhhyWTbkvyDqM+rpmXltd/6MH5ylVv/wJ88eeL26ialrHNNtus/f+zzz7bpLbNCbne+jx9+/Zt0nMCAAAAANB6yjro2piJEycmSYYMGZLq6up1pp188sn58Y9/nKOOOirf/e53s3z58px55pnZe++9c+SRR7ZHuSVrm+FJTY/kpfuTeVPXn17dvThc4bZ7JRVle24hLe3xxx/Pt771rdTU1OThhx9udLttttkmv/71r5scciXJnDlzcsEFF2TZsmV5/PHHm107AAAAAAAtq0MHXW8dtjBJevTokTvuuCNf+cpXcvzxx6eqqipjxozJD3/4w1RIY5psi4HF2+I5yZwXkpceSOpWJVU1yf6fFXDRdBMnTlz7Hm6KGTNm5KSTTspVV12VX/7yl40OuZJkwYIFOeuss5r8nAAAAAAAtC5B1wbssMMOuemmm9qypLLXbcvibepjxaCrskrIRdv7/e9/n5deeikPPfRQo0MuAAAAAAA2XR066BoxYkQ7VwK0tQcffLC9SwAAAAAAoIV0yKDrvvvua+8SAAAAAAAAeJcMHgcAAAAAAEBJEnQBAAAAAABQkgRdAAAAAAAAlCRBFwAAAAAAACVJ0AUAAAAAAEBJEnQBAAAAAABQkgRdAAAAAAAAlCRBFwAAAAAAACVJ0AUAAAAAAEBJEnQBAAAAAABQkgRdAAAAAAAAlKSq9i4AWF/nyuSCj7V3FU3TubJll1dbW5vFixe32PJ+cNnvs3DJ0vToWpuvfe749e63hNra2hZZDgAAAAAAjSPogk1QoZBUd/B3Z6FQSNeuXVtseZ2ra9J5VV06V9eka9eu690HAAAAAKD0GLoQAAAAAACAkiToAgAAAAAAoCQJugAAAAAAAChJgi4AAAAAAABKkqALAAAAAACAkiToAgAAAAAAoCQJugAAAAAAAChJgi4AAAAAAABKkqALAAAAAACAkiToAgAAAAAAoCQJugAAAAAAAChJgi4AAAAAAABKkqALAAAAAACAkiToAgAAAAAAoCQJugAAAAAAAChJgi4AAAAAAABKkqALAAAAAACAkiToAgAAAAAAoCQJugAAAAAAAChJgi4AAAAAAABKkqALAAAAAACAkiToAgAAAAAAoCQJugAAAAAAAChJgi4AAAAAAABKkqALAAAAAACAkiToAgAAAAAAoCQJugAAAAAAAChJgi4AAAAAAABKkqALAAAAAACAkiToAgAAAAAAoCQJugAAAAAAAChJgi4AAAAAAABKUocIuubMmZMzzjgjO+ywQ2pqajJgwICcfvrpWbZsWcaOHZtCoZArr7yyvcsEAAAAAACgCarau4DW9sQTT+T9739/Zs+ena5du2bo0KGZPn16Lr744kyZMiWvvPJKkmS33XZr50rLV319Muf55LXnk1XLio+tXpmsWJJUd23f2gAAAAAAgNJV1kHXnDlzMmbMmMyePTtnnnlmzjnnnHTr1i1Jct555+Wcc85JVVVVKioqMnz48HautjxNezx56f5kxeJ1H69bmdx7WbL1kGTnQ5JONe1THwAAAAAAULrKeujCU045JVOnTs1pp52WCy64YG3IlSRnn312hgwZktWrV2fw4MHp0qVLO1Zanp6/J5n8t/VDrjUa6pNZk5Lxv0tWLm3b2gAAAAAAgNJXtkHXpEmTcs0112SrrbbKueeeu970QqGQUaNGJVl32MJp06bllFNOyX777Zfa2toUCoVMmTKlrcouGzMmJlMebNy8S+YmT/w5aWho3ZoAAAAAAIDyUrZB19VXX536+vqMHTs2tbW1G5ynuro6ybpB1/PPP59rrrkmm2++eQ466KA2qbXcNDQkLzUy5Fpj/rRk/vTWqQcAAAAAAChPZRt0/f3vf0+SjB49eqPzTJs2Lcm6QdeBBx6Y2bNn55ZbbsnHPvax1i2yTL3+crJsftPbTZvQ0pUAAAAAAADlrGyDrpdffjlJMmjQoA1OX7FiRR58sHja0ZuDroqKst0kbWbuS23bDgAAAAAA6Jiq2ruA1rJkyZIkyfLlyzc4/aqrrsqCBQvSq1ev9OvXr9Xr2WmnnTpMiPZvh16YA4cf3+R2K5fXp3//ga1QESQfOemr6dqtR2bOmpn+/fuvdx8AAAAAgPbRp0+fjB8/vlltyzbo6tOnTxYtWpTx48dnzz33XGfa1KlT841vfCNJMmLEiDapZ+bMmW3yPJuC1+e/1qx2K1YuzfTpLtRF66ivq1v77/Tp09e7DwAAAABA6SnboOvQQw/Nc889l/PPPz+HHHJIBg8enCR54IEHcuKJJ2b+/PlJ1h22sDX17du3w5zR9eri55vV7qVXH2+Ts+vomCoqK9f+269fv/XuAwAAAADQPvr06dPstmUbdJ111ln5/e9/n6lTp2bYsGEZMmRIli1blhdeeCFHHHFEBgwYkDvvvLPNgq7nnnsuXbt2bZPnam91q5N7L0tWLWtau499cf+c8t/TWqcoOrzzf3p1Fi5ekr59+mbatGnr3QcAAAAAoPSU7SlGAwcOzD333JPDDz88NTU1efnll9O7d+9ceeWVueGGGzJ58uQkbXdGV0dSWZX0a+JmremR9N6xdeoBAAAAAADKU9me0ZUkw4YNy80337ze46+//npmzpyZqqqqDB06tB0qK3/b75ssmpXMnfLO81ZVJyM/klRUtnpZAAAAAABAGSnroGtjJk6cmCQZMmRIqqur15t+7bXXJknGjx+fJLn11lvTu3fvDBo0KHvuuWfbFVrCKiqT3Y5Knv5bMvOpjc9X2zMZ8eGkW+82Kw0AAAAAACgTHTro2tiwhccee+w697/4xS8mST75yU/mf//3f1u1tnJSUZUM+2Cy3b7J9MeT115Ils5L0lAMwkYclfQalBQK7VwoAAAAAABQkgRdG9DQ0NCW5ZS92s2TnQ4q3u65NFmxOOnUJdlyu/auDAAAAAAAKGUV7V1Ae1gTdI0YMaKdKwEAAAAAAKC5OuQZXffdd197lwAAAAAAAMC71CHP6AIAAAAAAKD0CboAAAAAAAAoSYIuAAAAAAAASpKgCwAAAAAAgJIk6AIAAAAAAKAkCboAAAAAAAAoSYIuAAAAAAAASpKgCwAAAAAAgJIk6AIAAAAAAKAkCboAAAAAAAAoSYIuAAAAAAAASpKgCwAAAAAAgJIk6AIAAAAAAKAkCboAAAAAAAAoSYIuNkmDBg3KkCFDMnLkyAwdOjQ//elPNzrv0Ucfnfvvv79Ry/3jH/+YL3zhC+s89t3vfjeFQiFPPvlkkqShoSHvfe9789JLLzV/BQAAAAAAgFYn6GKTde2112bChAm57bbbcvbZZ+eJJ55Yb56HHnoo8+fPz7777tuoZV5//fU56qij1t5/9NFH88ADD2TgwIFrHysUCjn11FPz3e9+912vAwAAAAAA0HoEXWzyBgwYkMGDB+fZZ59db9pll12Wj3/840mSefPmpX///tlyyy0zcuTI7LLLLqmurs7nPve5JMmqVasybty4jB49OkmyYsWKfOlLX8oll1ySQqGwznKPOOKI3HLLLVm0aFErrx0AAAAAANBcgi42eRMnTszkyZOz2267rTftrrvuyn777Zck6dmzZ0444YScdtppmTBhQn70ox9l//33z2WXXZYkufPOO7Pffvulc+fOSZJvfetbGTt2bLbbbrv1ltupU6cMHz4848aNa8U1AwAAAAAA3o2q9i4ANuaYY45JTU1Namtr84tf/CI77bTTevNMmzYtffr0WXt/woQJOfXUU5MkjzzySEaOHLl22vXXX5+PfOQjSZL7778/Dz/8cP7rv/5ro8/fp0+fTJs2rYXWBgAAAAAAaGnO6GKTteYaXffdd1+OOeaYDc5TW1ubZcuWrb0/YcKEteHWm4OuhoaG3HbbbfngBz+YJLn77rszefLkbLfddhk0aFCmTZuWww47LLfeeuvaZS1fvjxdunRpnZUDAAAAAADeNUEXJW3EiBGZPHlykmT69OmpqKhI3759kyRPPPFEdt111yTJQw89lF122SXdunVLkpx11lmZMWNGpkyZkilTpqR///7rBGFJ8vTTT29wuEQAAAAAAGDTIOiipB1zzDFrz8J67LHH1hmqsEePHrnkkkuSJNddd12OOuqoRi93ypQpSZLhw4e3VKkAAAAAAEALc40uNklrgqZ38qlPfSr77rtvvvOd72TMmDEZM2bM2mmPPPLI2v/feOONufPOOxv9fJdeemnOOOOMJtUMAAAAAAC0LWd0UdK6d++eH/3oR3nppZfedr6nnnoqW221VaOXu8022+Skk056t+UBAAAAAACtyBldlLxDDz20xZd5yimntPgyAQAAAACAluWMLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAICSJOgCAAAAAACgJAm6AAAAAAAAKEmCLgAAAAAAAEqSoAsAAAAAAID/3969BmlZHXYA/+/Csiy7IASl4HIxoGQBhRrUiIoGo9ARExtNNdOK10xjZtKM0dSJwwQyQc0waqbpTM1EnXqJNoO1KHV0p96iqAwSgwQbY0NT0WUFGmu47HLby9sPUSICBpbLy7P8fl92nvc857z/2R2+8J9zTiEpugAAAAAAACgkRRcAAAAAAACFpOgCAAAAAACgkA6Louvdd9/Nt771rYwaNSq9e/fOsGHDcv3112fz5s259NJLU1FRkbvvvrvcMbu1zvbk901JR/sfnkud5c0DAAAAAAAUX89yBzjQli9fnqlTp2bt2rWpra3N2LFj09zcnB/84AdZuXJl3n777STJhAkTypy0e9qyMVn1atL8WtK2+Y+fb9uU/PLRZNink08ML1s8AAAAAACgwLr1jq533303559/ftauXZsbbrgha9asydKlS7N27drMmTMn8+fPz7Jly1JZWZnjjz++3HG7nfWrk5fvT1Yu2bHk+sDv/jtZ+lDy2xeTUung5wMAAAAAAIqtWxdd3/jGN9LU1JTrrrsuc+fOTV1d3faxmTNnpqGhIe3t7Rk9enRqamrKmLT7af2/5NWHd11wfdSbi5O3lhz4TAAAAAAAQPfSbYuu119/PfPmzcugQYMyZ86cncYrKioyceLEJDseW/jwww/noosuyogRI9KnT580NDRk5syZaWlpOWjZu4MVzyftW/f8/d++lGz1KwYAAAAAAPZCty26HnzwwXR2dubSSy9Nnz59dvlOdXV1kh2Lrttuuy09evTILbfcksbGxlxzzTW54447Mm3atHR2dh6U7EW3eV3y7v/s3ZxSZ9K8/IDEAQAAAAAAuqme5Q5woDzzzDNJkilTpuz2nVWrViXZseh67LHHctRRR21/Puuss3LkkUdmxowZefHFF3PmmWceoMTdx+pfd3Her5KRp+3fLAAAAAAAQPfVbYuut956K0lyzDHH7HJ869atefnll5PsWHR9uOT6wAdHHDY3N3c5z3HHHZfKym67gW4HV3xubj57wt/s9byN77Vl6NBPHoBEkHzxymtTW9cvq9esztChQ3d6BgAAAACgPAYPHpxXXnmlS3O7bdHV2tqaJNmyZcsuxx944IGsX78+AwcOTH19/ceutXDhwiRJQ0NDl/OsXr26y3OLpqW1a5dtlUqlfSoT4eN0dnRs/9nc3LzTMwAAAAAAxdNti67Bgwdn48aNeeWVV3LSSSftMNbU1JQbb7wxSTJ+/PiPXae5uTmzZs3K1KlTc+KJJ3Y5z5AhQw6bHV1bO9d3ad7vW975k6UjdFVljx7bf9bX1+/0DAAAAABAeQwePLjLc7tt0XXOOedkxYoVueWWW3L22Wdn9OjRSZLFixdnxowZWbduXZId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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# initialization of qubit q0\n", - "qc.reset(0)\n", - "qc.h(0)\n", - "\n", - "# phase correction\n", - "qc.p(-pi/4,0).c_if(c,1)\n", - "\n", - "qc.p(-pi/2,0).c_if(c,2)\n", - "qc.p(-3*pi/4,0).c_if(c,3)\n", - "\n", - "# c-U operations\n", - "for _ in range(2**(m-3)):\n", - " qc.mcp(pi/4,[0,1],2)\n", - "\n", - "# X measurement \n", - "qc.h(0)\n", - "qc.measure(0,2)\n", - "\n", - "qc.draw('mpl')" - ] - }, - { - "cell_type": "markdown", - "id": "d8b00f08-5eed-49a2-8cd8-71ede0588c53", - "metadata": {}, - "source": [ - "Now, we execute the circuit with the simulator without noise." - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "a2606cc0-4153-42f0-8eb8-217cc99ea609", - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "count0 = execute(qc, sim).result().get_counts()\n", - "\n", - "key_new = [str(int(key,2)/2**m) for key in list(count0.keys())]\n", - "count1 = dict(zip(key_new, count0.values()))\n", - "\n", - "fig, ax = plt.subplots(1,2)\n", - "plot_histogram(count0, ax=ax[0])\n", - "plot_histogram(count1, ax=ax[1])\n", - "fig.tight_layout()\n" - ] - }, - { - "cell_type": "markdown", - "id": "c176128a-c0eb-4e44-83be-8afbbe428145", - "metadata": {}, - "source": [ - "We have obtained $100\\%$ probability to find $\\varphi=0.125$, that is, $1/8$, as expected." - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "together-projector", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/opt/miniconda3/envs/qiskit/lib/python3.9/site-packages/qiskit/aqua/operators/operator_globals.py:48: DeprecationWarning: `from_label` is deprecated and will be removed no earlier than 3 months after the release date. Use Pauli(label) instead.\n", - " X = make_immutable(PrimitiveOp(Pauli.from_label('X')))\n" - ] - }, - { - "data": { - "text/html": [ - "

Version Information

Qiskit SoftwareVersion
Qiskit0.24.1
Terra0.17.3
Aer0.7.6
Ignis0.5.2
Aqua0.8.2
IBM Q Provider0.13.1
System information
Python3.9.5 (default, May 18 2021, 12:31:01) \n", - "[Clang 10.0.0 ]
OSDarwin
CPUs4
Memory (Gb)16.0
Fri Jul 02 06:38:27 2021 EDT
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "

This code is a part of Qiskit

© Copyright IBM 2017, 2021.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.

" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import qiskit.tools.jupyter\n", - "%qiskit_version_table\n", - "%qiskit_copyright" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "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.9.5" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/tutorials/textbook/images/binary.png b/tutorials/textbook/images/binary.png deleted file mode 100644 index cc3a7dff5ee083ec01a192031245e1ca4ffd129b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5271 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 diff --git a/tutorials/textbook/index.rst b/tutorials/textbook/index.rst deleted file mode 100644 index 3979c2a4c..000000000 --- a/tutorials/textbook/index.rst +++ /dev/null @@ -1,15 +0,0 @@ -.. _tutorials-textbook: - -############################# -Textbook algorithms in Qiskit -############################# - -.. nbgallery:: - :glob: - - * - -.. Hiding - Indices and tables - :ref:`genindex` - :ref:`modindex` - :ref:`search`