{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Phase Shift\n", "Create a circuit that creates an equal superposition of two qubits, where the phase negative (shifted by $\\pi$) when the two qubits are equal." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit\n", "from qiskit import BasicAer, execute\n", "from qiskit.tools.visualization import plot_histogram" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "# Create quantum/classical registers and a quantum circuit\n", "qin = QuantumRegister(2) # input\n", "qout = QuantumRegister(1) # output\n", "c = ClassicalRegister(2)\n", "qc = QuantumCircuit(qin,qout,c)\n", "\n" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "# Copy the equal2 function from Example 3\n", "\n", "def equal2(circ, input, output) :\n", " circ.cx(input[0],output)\n", " circ.cx(input[1],output)\n", " circ.x(output)\n", "\n" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Build the phase shift circuit\n", "qc.x(qout[0])\n", "qc.h(qout[0])\n", "qc.h(qin[0])\n", "qc.h(qin[1])\n", "equal2(qc,qin,qout)\n", "qc.h(qout[0])\n", "#comment out measure and re-run if you use state vector simulation (and skip the qasm box)\n", "qc.measure(qin,c)\n" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qc.draw(output='mpl')" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'01': 133, '00': 131, '11': 127, '10': 121}\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc0AAAE6CAYAAAB00gm8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3de5hWZb3/8fdX8MSF/kRUdABFJEgOcmi8PGwCybSkIjMPtdtZWZpllnn2V5m6s3Rnbi032jbLU6mVHaidZqZyMJIGDFMQNA6JB1DEn4cUBL+/P9Yz7GEccA3M4ZmZ9+u65uJ57rWexXdxM/OZdbjvFZmJJEl6a1u1dwGSJHUUhqYkSSUZmpIklWRoSpJUkqEpSVJJhqYkSSV1b+8C2tMuu+ySAwYMaO8yJElVZPbs2c9l5q5NLevSoTlgwADq6urauwxJUhWJiKUbW+bpWUmSSjI0JUkqydCUJKkkQ1OSpJIMTUmSSjI0JUkqydCUJKkkQ1OSpJIMTUmSSjI0JUkqydCUJKkkQ1OSpJIMTUmSSjI0JUkqydCUJKkkQ1OSpJIMTUmSSjI0JUkqydCUJKkkQ1OSpJIMTUmSSjI0JUkqydCUKu68806GDBnCoEGDuOSSS960/PLLL2fo0KHst99+HHrooSxdunT9sn/84x8cfvjh7LvvvgwdOpQlS5YAsHjxYg444AAGDRrEcccdx5o1a9pqdyS1AkNTAtatW8cpp5zCHXfcwbx587jllluYN2/eBuuMHj2auro6HnroIY4++mjOPvvs9cuOP/54zjrrLObPn8+sWbPYbbfdADjnnHP48pe/zOOPP06vXr247rrr2nS/JLUsQ1MCZs2axaBBgxg4cCDbbLMNH/nIR/j1r3+9wToTJkygR48eABx44IEsW7YMgHnz5rF27VoOO+wwAHr27EmPHj3ITO655x6OPvpoAD7xiU/wq1/9qg33SlJLMzQl4Mknn6R///7r3/fr148nn3xyo+tfd911HHHEEQAsXLiQnXbaiaOOOorRo0dz1llnsW7dOlauXMlOO+1E9+7dS21TUvUzNNvJllw/69atG6NGjWLUqFFMmjRpfXtm8pWvfIXBgwez77778t3vfrdN9qWrufnmm6mrq+Oss84CYO3atUyfPp3LLruMv/zlLyxatIjrr7++fYuU1Cq6t3cBXVH99bM//OEP9OvXj/33359JkyYxdOjQ9evUXz/r0aMHV199NWeffTa33XYbANtvvz1//etf37Td66+/nieeeIJHH32UrbbaihUrVrTZPnV0ffv25Yknnlj/ftmyZfTt2/dN6919991cfPHFTJ06lW233RYojiBHjRrFwIEDATjyyCP585//zAknnMALL7zA2rVr6d69+0a3Kanj8EizHWzJ9bNNufrqqzn//PPZaquiW+tvRtFb23///XnsscdYvHgxa9as4dZbb93gKB7gwQcf5LOf/SxTpkzZ4N92//3354UXXuDZZ58F4J577mHo0KFEBBMmTODnP/85ADfccAMf/OAH226nJLU4Q7MdbMn1M4DXXnuN2tpaDjzwwA1uLPn73//ObbfdRm1tLUcccQSPPfZY6+xAJ9S9e3euuuoq3vOe97Dvvvty7LHHMmzYMM4//3ymTJkCwFlnncXLL7/MMcccs8Gp8W7dunHZZZdx6KGHMmLECDKTE088EYBLL72Uyy+/nEGDBrFy5Uo+/elPt9s+Stpynp6tcvXXz6ZOnbq+benSpfTt25dFixbxrne9ixEjRrDPPvuwevVqtttuO+rq6vjFL37BCSecwPTp09ux+o5l4sSJTJw4cYO2iy66aP3ru+++e6OfPeyww3jooYfe1D5w4EBmzZrVckVKalceabaD5l4/mzJlyvrrZ/Wfh+IH8iGHHMKDDz4IFEesRx11FAAf+tCHmvwhLknafIZmO9iS62erVq1i9erVADz33HPcf//9628gOvLII7n33nsBmDp1KoMHD26jPZKkrsHQbAdbcv1s/vz51NbWMnLkSCZMmMC55567PjTPPfdcbr/9dkaMGMF5553HD37wg3bbR0md15YMmQN48cUX6devH1/4whfWt91yyy2MGDGC/fbbj/e+970899xzrb4fmyMys71raDe1tbVZV1fX3mVIUoexbt06Bg8evMGQuVtuuWWDIXP33nsvBxxwwPohc/fdd9/6IXMAX/rSl3j22WfZeeedueqqq1i7di01NTXMmzePXXbZhbPPPpsePXpwwQUXtMMeQkTMzszappZ5pClJKm1Lh8zNnj2b5cuXc/jhh69vy0wyk1deeYXM5MUXX6SmpqZtdqiZDE1JUmlbMmTujTfe4IwzzuCyyy7bYJ2tt96aq6++mhEjRqw/4qzW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\n", "text/plain": [ "
" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Simulate and show results\n", "backend = BasicAer.get_backend('qasm_simulator')\n", "job = execute(qc, backend, shots=512) # shots default = 1024\n", "result = job.result()\n", "print(result.get_counts())\n", "plot_histogram(result.get_counts())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But where's the phase shift? It's not noticeable in the measurements, because squaring a negative number is the same as squaring its absolute value. So we have to use the **statevector_simulator** instead. There are no measurements allowed, so go back and comment out the measurement -- then skip the box above and run the box below." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0. +0.0000000e+00j 0. +0.0000000e+00j 0. +0.0000000e+00j\n", " 0. +0.0000000e+00j -0.5+1.2246468e-16j 0.5-1.2246468e-16j\n", " 0.5-1.2246468e-16j -0.5+1.2246468e-16j]\n" ] } ], "source": [ "# Simulate and show results\n", "backend = BasicAer.get_backend('statevector_simulator')\n", "job = execute(qc, backend) \n", "result = job.result()\n", "print(result.get_statevector())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is the state of all three qubits. The output bit shows up as the most significant bit in the state. Since it is always 1 at the end of the circuit, the first four states |0xx> all have amplitude zero. The remaining four states are equally likely, and you can see the negative magnitude for the cases where the input bits are equal: |100> and |111>." ] } ], "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.7.9" } }, "nbformat": 4, "nbformat_minor": 2 }