QC-Project / Archive / Testing QPE.ipynb
Testing QPE.ipynb
Raw
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9a4fdff8",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "# Importing standard Qiskit libraries\n",
    "from qiskit import QuantumCircuit, transpile, Aer, IBMQ, assemble\n",
    "from qiskit.tools.jupyter import *\n",
    "from qiskit.visualization import *\n",
    "from ibm_quantum_widgets import *\n",
    "\n",
    "# Loading your IBM Quantum account(s)\n",
    "provider = IBMQ.load_account()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "28370f62",
   "metadata": {},
   "source": [
    "# Some more imports  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "bda31a83",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/conda/lib/python3.8/site-packages/qiskit/aqua/__init__.py:86: DeprecationWarning: The package qiskit.aqua is deprecated. It was moved/refactored to qiskit-terra For more information see <https://github.com/Qiskit/qiskit-aqua/blob/main/README.md#migration-guide>\n",
      "  warn_package('aqua', 'qiskit-terra')\n"
     ]
    }
   ],
   "source": [
    "from qiskit.quantum_info.operators import Operator, Pauli\n",
    "from qiskit.aqua.algorithms import QPE\n",
    "from qiskit.circuit.library import QFT\n",
    "from qiskit.quantum_info import random_statevector\n",
    "from qiskit.opflow import (StateFn, Zero, One, Plus, Minus, H,\n",
    "                           DictStateFn, VectorStateFn, CircuitStateFn, OperatorStateFn)\n",
    "from qiskit.opflow import I, X, Z, Y, CX\n",
    "from scipy import linalg \n",
    "pi = np.pi\n",
    "sin = np.sin\n",
    "cos = np.cos\n",
    "exp = np.exp"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ad28279f",
   "metadata": {
    "tags": []
   },
   "source": [
    "# Defining matrix to transpile convertor, time evolution convertor(if time evolution is not already defined in the matrix, just remove the comments of evoloperator()) and my_qpe that takes in arguments and also applies inverse QFT."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "c8fbf3eb",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Operator to (1) transpile convertor\n",
    "def qc(operator,qubit_list):\n",
    "    qc = QuantumCircuit(len(qubit_list))\n",
    "    qc.unitary(operator,qubit_list)\n",
    "    qc = transpile(qc)\n",
    "    return qc "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "56540a11",
   "metadata": {},
   "outputs": [],
   "source": [
    "# my_qpe takes in work qubits, simulation qubits, initialization condition and number of repetitions gate and applies QFT inverse\n",
    "def my_qpe(w_qubits,s_qubits, gate,n, initialize = None, repetitions=1):  \n",
    "    qpe_0 = QuantumCircuit(w_qubits+s_qubits,w_qubits)\n",
    "    if (initialize == 'x') :\n",
    "        for i in range(s_qubits):\n",
    "            qpe_0.x(i+w_qubits)\n",
    "    elif (initialize == 'r'):\n",
    "        initial_state = {}\n",
    "        for i in range(s_qubits):\n",
    "            initial_state[i] = qpe_0.initialize(random_statevector(2).data, i+w_qubits)\n",
    "    elif (initialize == 'h'):\n",
    "        for i in range(s_qubits):\n",
    "            qpe_0.h(i+w_qubits)\n",
    "    elif (initialize == 'cx'):\n",
    "        e,v = np.linalg.eig(U2_op)\n",
    "        v = np.transpose(v)\n",
    "        qpe_0.initialize(v[1], [w_qubits+0, w_qubits+1])\n",
    "    elif (initialize == 'deut'):\n",
    "        e,v = np.linalg.eig(U2_op)\n",
    "        v = np.transpose(v)\n",
    "        qpe_0.initialize(v[3], [w_qubits+0, w_qubits+1])\n",
    "    elif (initialize == 'H'):\n",
    "        e,v = np.linalg.eig(H)\n",
    "        v = np.transpose(v)\n",
    "        qpe_0.initialize(v[1], [w_qubits+0, w_qubits+1])\n",
    "    else:\n",
    "        qpe_0.initialize(initialize,list(range(w_qubits,w_qubits+s_qubits)))\n",
    "    for i in range(w_qubits):\n",
    "        qpe_0.h(i)\n",
    "    for counting_qubit in range(w_qubits):\n",
    "        for j in range(n):\n",
    "            for i in range(repetitions):\n",
    "                qubit_list = [counting_qubit]+list(range(w_qubits,w_qubits+s_qubits))\n",
    "                qpe_0.append(gate,qubit_list)\n",
    "            repetitions *= 2\n",
    "    qpe_1 = QFT(num_qubits = w_qubits,do_swaps =  True , inverse = True)\n",
    "    l = [*range(w_qubits)]\n",
    "    qpe = qpe_0.compose(qpe_1, l)\n",
    "    qpe.measure(l,l)\n",
    "    #display(qpe.draw())\n",
    "    return qpe"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "446154fa-d1d1-4582-bd65-542699a37994",
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_to_eigenval(count,w_qubits,n):\n",
    "    #lists = []\n",
    "    lists = sorted(count, key=count.get, reverse=True)[:n]\n",
    "    #for (key,value) in count.items():\n",
    "        #if (value) > 10 :\n",
    "         #   lists = lists + [key]\n",
    "    #k=Counter(count).most_common(w_qubits) # Method to pick out the most probable outcomes based on number of expected eigen values\n",
    "    for j in range(len(lists)):\n",
    "        lists[j] =  int(str(lists[j]), 2) #Convert them to decimal values\n",
    "    for j in range(len(lists)):\n",
    "        if (lists[j]>pow(2,w_qubits-1)):\n",
    "            lists[j] = (2*pi*(lists[j]-pow(2,w_qubits)))/(pow(2,w_qubits)*t)\n",
    "        else :\n",
    "            lists[j] = 2*pi*lists[j]/(pow(2,w_qubits)*t)\n",
    "    display(print(lists))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d2406980",
   "metadata": {},
   "source": [
    "## Testing our function definitions using Phase(as Matrix t and as circuit qc2) and CNOT operators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "0f5084e2-d2a1-49db-a8a3-bece8526cde8",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Operator to transpile convertor\n",
    "def qcc(operator):\n",
    "    qubit_list = list(range(int(len(operator)/2)))\n",
    "    qc = QuantumCircuit(len(qubit_list))\n",
    "    qc.unitary(operator,qubit_list)\n",
    "    qc = transpile(qc)\n",
    "    gate = qc.to_gate().control(1)\n",
    "    return gate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "a9342e2c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Eigen values for given matrix are :  [1.        +0.j         0.70710678+0.70710678j]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(0.7071067811865476+0.7071067811865475j)]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# phase operator as a matrix\n",
    "T = ([[1,0],[0,exp(complex(0,pi/4))]])\n",
    "e,v = np.linalg.eig(T)\n",
    "print(\"Eigen values for given matrix are : \",e)\n",
    "#operator to control gate, call transpile convertor qc\n",
    "T_Gate = qcc(operator = T)\n",
    "# calling qpe for T_Gate\n",
    "qpee = my_qpe(w_qubits=5,s_qubits=1,gate = T_Gate, initialize = 'x')\n",
    "#display(qpee.draw()) ; # To check if it is correct \n",
    "from qiskit import execute\n",
    "simulator = Aer.get_backend('qasm_simulator')\n",
    "result = execute(qpee, backend = simulator, shots = 4000).result()\n",
    "display(plot_histogram(result.get_counts(qpee)))\n",
    "count = result.get_counts(qpee)\n",
    "plot_to_eigenval2(count, 5)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c383e90f",
   "metadata": {},
   "source": [
    " $$ T = \\begin{bmatrix}\n",
    "1 & 0\\\\\n",
    "0 & e^{\\frac{i\\pi}{4}}\\\\\n",
    "\\end{bmatrix}\n",
    "$$ $\\implies$ eigen values = (1, $e^{\\frac{i\\pi}{4}}$) and eigen vectors = $\\begin{bmatrix}\n",
    "1 \\\\\n",
    "0 \\\\\n",
    "\\end{bmatrix}$, $\\begin{bmatrix}\n",
    " 0\\\\\n",
    "1\\\\\n",
    "\\end{bmatrix}$ \n",
    "\n",
    "$$\n",
    "\\implies  \\begin{bmatrix}\n",
    "1 & 0\\\\\n",
    "0 & e^{\\frac{i\\pi}{4}}\\\\\n",
    "\\end{bmatrix}\\begin{bmatrix}\n",
    " 0\\\\\n",
    "1\\\\\n",
    "\\end{bmatrix} = e^{\\frac{i\\pi}{4}}\\begin{bmatrix}\n",
    " 0\\\\\n",
    "1\\\\\n",
    "\\end{bmatrix} \\\\ $$\n",
    "\n",
    "\n",
    "Therefore eigen value we expect is $ e^{\\frac{i\\pi}{4}} = 0.707106781+0.707106781j $ which is also the observed."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "5054da2d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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tdeSn58PQPZPbuPAzrE9QwToOeBkJj92coV5ZfUAfzb38ssvV4obPHgw48eP55///CcAzz77LLNnzwbghRdeAHzXjMmTJ5OSkgJQft+0Y8eOTJ48mZtuuokff/yRlJQUfvvb31Z4/eeee47WrVvTt29fOnTowIsvvkhqaioAd999N0888QQJCQk88MADnHDCCQD89a9/5Z///CfOOQYNGsSTTz5ZZdIVqQudIUqjV9v+gAAXXnghLVq0oEWLFlx00UXl81NTUxk0aBCDBw+mffv2EWPz8/PZvXs3iYmJ5ObmAj6xjBo1ijPOOIMhQ4awaNEinn32WebMmUN6ejoAt9xyCz/88EOFS4WdO3cGKO++sWTJEvrkjK+Hd6thlHVTuf766zn77LMjdlN57LHHGDhwYKXLrUuWLGHixIksXryYyZMnc8UVV1BaWkpRUREPPPAAeXl5LFq0iNLS0vKDDpH6oIRYS3XZSd999910796dFi1a0L17d+655x527NjBoYceSnZ2NllZWdx888013smD3zFlZ2fTvXv3qGVnZGTQv39/3nvvPQBWr17N0UcfzYABA8jKyuJvf/tbzLc5Up1DtzkzM5OsrKxKsaWlpZxzzjns2LGDZs2a8dhjj7FkyZIKdU5NTaWwsLDSjnbhwoU8//zz5Ofns3DhQv7973+zcOHC8jp9/PHHTJgwgTPPPLPaO2mAa6+9lhNPPJGlS5eSn59PZmZmxPersbrk/sjTM9N7MHl67e6blnVT6dy5MwkJCZW6qeTn57N161Z+9atfARW7qUyaNImcnBwGDx7McccdR0JCAnPmzCkvY/v27fzwww9Mnz6d3/3udzH7btVHbOj3MjMzk0MOOSTmv0OpR2a2T05Dhw61vXn33XetX79+1qdPH7v77rsrLd+xY4edeeaZ1qdPHzv00EOtoKDAzMxKSkqsffv21qtXL+vbt6+lpaXZ4sWLzczswgsvtE6dOlm3bt3ssssuMzOzF154wc4880wzM1u8eLENGjTI0tLSbMqUKZaWlmaDBw+2RYsW2datW83MbOfOnda7d2877bTTKsV/9tln1qJFC1uyZIktXbrUWrRoYZ999ll5nf/yl79Ybm6u9erVK2LZaWlp1rdvX+vdu7e1b9/eSkpK7JtvvrG5c+eamdn69estOTnZevbsGbNtjlbn3bt3l2/zAw88YJ06dbJZs2ZViP33v/9tycnJtmPHDlu5cqW1a9fO7rzzzgp1PuaYYywlJcUWL15su3btsg4dOtju3bttwoQJ1rdv3/L3JiMjwyZMmGBmZr1797b169fb8ccfbzNnzjQzqxB711132V133VUeW7beli1bLDU11Xbv3m1mZr/8a9VTVRpb7EX37rI27dNs5cqVVlxcXP69DPXQQw9V+Ix//vOfm5nZyy+/bBdffLE9+eSTduWVV9ozzzxjV155ZXncjTfeaJ06dbLVq1eXz0tPT7f169fb5Zdfbp07d7Yvv/zSiouLrV27dnbfffeZmdn9999vBxxwgB1wwAGWkZFRXm4svlv1ERv6vfzLX/5ibdu2tcWLF8fsd2hmdsEFF1jz5s2tefPmduGFF5bPL/sdZmZmRtxvmZnddddd1q1bN2vevLl169atfL9XFpuVlRV1v1fXsuta7z59+li/fv1s8uTJlWKzsrKsuoA8i5I39tszxLqMRPLiiy+yc+dOli9fznvvvceWLVvKx30sG+Lq+++/j9hpe9KkSRxxxBH07duX0aNH07dvXw4//HDeeOMNkpOTAdi1axebNm3ilFNOqRT/8MMP07t3bzIzM+nfvz+9evXi4YcfBvwR/dtvvw1Qfo8nNPa1117ju+++Y/LkySxfvpydO3fy4osv0q1bN3JycgB46aWX6NChA0888UTMtjlanZ1z5ds8adIk2rVrh3OuQuxbb73FwQcfTFJSEmlpafTo0YP58+dXqPPatWvJzMykqKioQn/AgoKC8g7yAN27d6egoAAA5xzHH38806ZNK284EhobrR9iQUEBnTp14sILL+SQQw5h2sRfsqv4h1p/DxuTujTIAf8dueGGG3jqqae49tpr2bRpU/myl156iQMPPDBiuevWraNLly7lgyCkp6eTl5fH5s2bmTRpEgUFBRx++OF069aN5557LmbfrfqIDf1evvfeewwePJiioqKY/Q6ruupR9juM1hK4bD/XsmVLPvjgA1q2bFm+3wsdmi/afq8uZde13tGu1sR6SMH9NiHWZSSSaDtp2DPEVUlJScRO20VFRTRv3rx8WUpKComJiRQVFVFaWsqQIUPo3LkzSUlJnHjiiZXiq9rJX3fddfzv//4vGzZsKG94EBo7f/58evToUb7N/fv3L0+gZSZOnMj27dsZPnx4zLa5qjqXbfNHH33ET37yE4YPH14hdtOmTRxwwAHlse3bt2fbtm0V6rxr1y4WLVrE8OHDq/35T58+nXnz5tG7d2+eeuqp8qS4NyUlJcybN4/LL7+c+fPn07zFAeR/WPnycVPVc8DJLF++nC+//JKbb74Z8PdNy1rYljXI+eKLLyrcN+3RoweHH344mzZtYtu2bfz6179m0KBB5a+7cuVK0tPTI15ubdGiBUlJSeXrFhcXU1xczH/+8x/S0tLo1KkT33zzDWPHjmXmzJkx+27VV2yZVatW8eWXX1aKrcvvsKoD4rLfYU0PxidNmlRhaL5o+726lF3Xeo8fP75835ORkVF+ST3WQwrutwmxLiORVGcnXRsJCQksWLCAwsJCfvzxR5YuXVrt2LfeeovOnTszdOjQqOts27atwpfngAMOqDCyyrZt2/j000+58847adu2bVy3uX///syfP79SR/Dk5OQKZxo//PBDeV+/sjp/++23XH311bRt27bCjjYtLY1vvvmmfN1vvvmGtLQ0gPJ7Y7179+bwww9nzpw5FWKj9UNMSUkhJSWlPPmmZZ/BxsJ5dX4fmrq6dFMZNmwYX375JcXFxRQUFLBmzRq6dOlCr169+O9//8uPP/4I+IOYmtyv3dt3q75iwX8vv/76a26//Xbatm1baVltf4fVScS1ORgPFW2/V5ey61rvve2rY2W/TYh1sbedNPgPNNLRcI8ePdi1a1f5ssLCQkpKSio0XjjooIPo1q0br7/+eqX4aDv5GTNm8MYbb5Camso333zD9OnT+cUvflEhtn379vzww57Le5s2bapwmfZnP/sZBx10ECeddFJMt7mqxFSmV69e5U36Q2OHDBlCYWFh+Y522bJlnHzyyRXqfOyxx/LVV18BFXe0EyZM4KuvvmLp0qUsW7aMr7/+mssvv5wffviBrVu3AnDCCSfw9ttvM3DgwAqxY8aMYeLEieU76RUrVnDooYfStWtXevbsybJlywAoWvEhB3UdUOn92pdFapBz+UOJ9Du2dpdbDzvsMDp06MCAAQM48cQTOeWUU8oPOs444wxycnJYtWoV27Zt49JLL43Zd6u+Ysu+l2WxQMx+h1K/4p4QnXNXOOcKnHM7nHNznXNV9tJ1zo0O1tvhnFvpnJsQi3rUZSSSqnbSZdq0aRPxaHjMmDHMmDGD5cuXM23aNJYvX87MmTMZOXIkW7ZsAWD79u2YGV9++WWl+Gg7+bvvvpvCwkJWrVrFhAkT6Nq1K88991yF2FNOOYWlS5eW7+SLioo45JBDMDMuvvhiMjMzGTx4cMy3OVqd169fX77NJ554Yvll2dDY008/nQMPPJDjjz+evn370rx5c8aPH8+tt97K8ccfT2ZmJs8//3zEHW12djbjxo1j8ODBDBo0iPHjxzN48GB++9vfMmjQILKzs3n88cfp2LEjV111VYXYrKwszjzzzPKd9N///ncSEvwwaw8++CDnnHMOgwcPZlPRAoYc+7vafxH3IbW93Dps2DBKS0v5z3/+w8KFC5k/f355zO23387SpUv505/+RGpqKklJSTH7btVHbOhv6Zprron4e6jL77A6SbwuB+MQfb9Xl7LrWu+97atjJlprm/qYgHHALuASIBN4ENgG9IqyfhrwQ7BeZhC3C/jZ3sraWyvTXbt2WVpa7VrULVq0yFJTUy0jI8N69epl7dq1s5KSErv11ltt0qRJVlBQYJmZmXbGGWdYnz59bNiwYfbll1+Wv+6dd95pXbt2tebNm1vXrl3tzjvvtPz8fOvSpYv17t3bsrKy7JZbbokaf+6555a31jrvvPPMzMrLNjN77733rGvXrpVid+3aZe3atbOePXuWtxRdtGiRffLJJwbYoEGDrEePHtahQwd7++23Y7rNkep86aWXWlpamg0aNMgyMzNtwIABUd+v9PR069evn73zzjtmZhXqnJ2dbdnZ2fb2229X+ZnXh8bWUrS+Y/cWX1tvv/229e3b19LT0+3OO+80s4rf6e3bt9fLdyvWseeff37593LQoEF24IEHWrdu3WL2O1ywYIG1aNHCPv/88/LWrfn5+eV1KigosK5du0bdbw0aNMhSU1Nt6tSplpqaWmG/V1BQYFlZWVH3e3Upu671Hjx4cHlL87S0NCspKakQG6tWps4vjw/n3GzgMzO7JGTeCuAVM7spwvp/AsaaWd+Qef8EssxsRFVl5ebmWl5eXpX1eeedd7juuuvKRyK5+eabK4xEsmPHDs4991zmz59fPhJJ2VHtH//4R/71r3+RmJjI/fffX35546yzzmLKlCls2LCBLl26cPvtt3PxxRdX+z2qb/vjNu/NJfdXvfzx6xRb3fj6jN2X1OV3eN5555UPUHDWWWfx9NNPc9tttzFlyhRWrFjB+vXrad68OW3atCE1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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(-0.7071067811865475+0.7071067811865476j), (-0.555570233019602+0.8314696123025455j), (-0.1950903220161282+0.9807852804032304j), (-0.3826834323650897+0.9238795325112867j), (-0.8314696123025453+0.5555702330196022j)]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Phase as a circuit\n",
    "def qc2(p):\n",
    "    qc2 = QuantumCircuit(1)\n",
    "    qc2.p(2*pi/3,0)\n",
    "    return qc2\n",
    "p_gate = qc2(1).to_gate().control(1)\n",
    "\n",
    "qppe = my_qpe(w_qubits = 5, s_qubits=1, gate = p_gate, initialize = 'x')\n",
    "# we dont need to call simulator and import again\n",
    "result = execute(qppe, backend = simulator, shots = 1000).result()\n",
    "count = result.get_counts(qppe)\n",
    "display(plot_histogram(result.get_counts(qppe)))\n",
    "plot_to_eigenval2(count, 5)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6609f472-3b0f-4410-84fe-50e250add847",
   "metadata": {},
   "source": [
    "Similarly, for $\\theta = \\frac{2\\pi}{3}$, eigen values are (1, -0.5+0.866025403j), and one of observed eigen value is $e^{i2\\pi\\frac{11}{2^5}}$ = {-0.555570233+0.831469612j}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "77baa3ab-7c63-4545-b2a2-4445905c63b6",
   "metadata": {},
   "source": [
    "## Q) Why do we see single peaks for $\\frac{\\pi}{4}$ and not for $\\frac{\\pi}{12}$? \n",
    "## Ans) The reason being that, for $\\frac{\\pi}{4}$ case we can easily break 1/8 (the $\\theta$) as a decimal/$2^n$, but not for 1/24. Infact we can do this for any $\\theta$ that can be divided into a single valued decimal/$2^n$. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ec96b8be",
   "metadata": {},
   "source": [
    "## Testing with 2 qubit CNOT gate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "6cc78ec6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Eigen values for given matrix are :  [0.92387953+0.38268343j 0.92387953-0.38268343j 0.92387953+0.38268343j\n",
      " 0.92387953+0.38268343j]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(0.9238795325112867-0.3826834323650898j)]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#exp(i(CNOT)t) where t = pi/8 using obtained using wolfram alpha\n",
    "import scipy\n",
    "op2 = ([[complex(0,pi/8),0,0,0],[0,complex(0,pi/8),0,0],[0,0,0,complex(0,pi/8)],[0,0,complex(0,pi/8),0]])\n",
    "U2_op = scipy.linalg.expm(op2) # just to check that same matrix is produced by scipy exponentiation\n",
    "#display(U2_op)\n",
    "e,v = np.linalg.eig(U2_op)\n",
    "print(\"Eigen values for given matrix are : \",e)\n",
    "U = qc(U2_op,[0,1]).to_gate().control(1)\n",
    "\n",
    "qpp = my_qpe(w_qubits = 5, s_qubits=2, gate = U, initialize = 'cx') #cx initializes to 3rd eigen vector\n",
    "# we dont need to call simulator and import again\n",
    "result = execute(qpp, backend = simulator, shots = 1000).result()\n",
    "display(plot_histogram(result.get_counts(qpp)))\n",
    "count = result.get_counts(qpp)\n",
    "plot_to_eigenval2(count, 5)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "70fe6f9e",
   "metadata": {},
   "source": [
    "$$e^{it(CNOT)} = \\begin{bmatrix}\n",
    "e^{\\frac{i\\pi}{8}} & 0 & 0 & 0\\\\\n",
    "0 & e^{\\frac{i\\pi}{8}} & 0 & 0\\\\\n",
    "0 & 0 & cos(\\frac{\\pi}{8}) & i.sin(\\frac{\\pi}{8})\\\\\n",
    "0 & 0 & i.sin(\\frac{\\pi}{8}) & cos(\\frac{\\pi}{8})\\\\\n",
    "\\end{bmatrix}$$  for t = $\\frac{\\pi}{8}$\n",
    "has eigen values = {(0.92387953+0.38268343j)*3, (0.92387953-0.38268343j)}  and eigen vectors = $\\begin{bmatrix}\n",
    "0 \\\\0\\\\1\\\\0\\end{bmatrix}\n",
    "$, $\\begin{bmatrix}\n",
    "0 \\\\0\\\\0\\\\1\\end{bmatrix}\n",
    "$, $\\begin{bmatrix}\n",
    "1/\\sqrt(2) \\\\-1/\\sqrt(2)\\\\0\\\\0\\end{bmatrix}\n",
    "$, $\\begin{bmatrix}\n",
    "1/\\sqrt(2)\\\\1/\\sqrt(2)\\\\0\\\\0\\end{bmatrix}\n",
    "$  \n",
    "\n",
    "$$\\implies \\begin{bmatrix}\n",
    "e^{\\frac{i\\pi}{8}} & 0 & 0 & 0\\\\\n",
    "0 & e^{\\frac{i\\pi}{8}} & 0 & 0\\\\\n",
    "0 & 0 & cos(\\frac{\\pi}{8}) & i.sin(\\frac{\\pi}{8})\\\\\n",
    "0 & 0 & i.sin(\\frac{\\pi}{8}) & cos(\\frac{\\pi}{8})\\\\\n",
    "\\end{bmatrix}\\begin{bmatrix}\n",
    "1/\\sqrt(2) \\\\-1/\\sqrt(2)\\\\0\\\\0\\end{bmatrix} = e^{\\frac{i\\pi}{8}}\\begin{bmatrix}\n",
    "1/\\sqrt(2) \\\\-1/\\sqrt(2)\\\\0\\\\0\\end{bmatrix}\n",
    "$$\n",
    "Therefore the expected eigen value is $ e^{\\frac{i\\pi}{8}} = (0.9238795325112867+0.3826834323650898j) $"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6709334f",
   "metadata": {},
   "source": [
    "## Testing of Pairing part of pairing Hamiltonian for 2 qubits and for different values of t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "405d88e9",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Eigen value by algebra : [0.98078528+0.19509032j 0.98078528-0.19509032j 1.        +0.j\n",
      " 1.        +0.j        ]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(0.9807852804032304-0.19509032201612825j)]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i in range(1,2):\n",
    "    H = ([[1,0,0,0],[0,cos(t[i]),complex(0,sin(t[i])),0],[0,complex(0,sin(t[i])), cos(t[i]), 0],[0, 0, 0, 1]])\n",
    "    e,v = np.linalg.eig(H)\n",
    "    display(print(\"Eigen value by algebra :\",e))\n",
    "    #display(qch().draw())#just to see \n",
    "    Ut = qc(H,[0,1]).to_gate().control(1)\n",
    "    qpevw = my_qpe(5,2,Ut,'H')\n",
    "    result = execute(qpevw, backend = simulator, shots = 1000).result()\n",
    "    count = result.get_counts(qpevw)\n",
    "    plot_to_eigenval(count,5)\n",
    "    display(plot_histogram(result.get_counts(qpevw)))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4a893717",
   "metadata": {},
   "source": [
    "## Eigen value via linear algebra and its comparision by above result\n",
    "Put d = 0 and g = 1\n",
    "\n",
    "H = $\\frac{-1}{2}$($X_1X_0 + Y_1Y_0$ ) \n",
    "= $\\begin{bmatrix} \n",
    "0 & 0 & 0 & 0 \\\\ \n",
    "0 & 0 & -1 & 0 \\\\ \n",
    "0 & -1 & 0 & 0 \\\\ \n",
    "0 & 0 & 0 & 0 \\\\ \n",
    "\\end{bmatrix}$\n",
    "$\\implies$ Evolution matrix is given by : U = $\\begin{bmatrix} \n",
    "1 & 0 & 0 & 0 \\\\ \n",
    "0 & cos(t) & i.sin(t) & 0 \\\\ \n",
    "0 & i.sin(t) & cos(t) & 0 \\\\ \n",
    "0 & 0 & 0 & 1 \\\\ \n",
    "\\end{bmatrix}$  \n",
    "$\\implies$ The eigen values are {$e^{it}$,$e^{-it}$,1,1} and eigen vectors are $\\begin{bmatrix}\n",
    "0 \\\\1/\\sqrt(2)\\\\1/\\sqrt(2)\\\\0\\end{bmatrix}\n",
    "$, $\\begin{bmatrix}\n",
    "0 \\\\-1/\\sqrt(2)\\\\1/\\sqrt(2)\\\\0\\end{bmatrix}\n",
    "$, $\\begin{bmatrix}\n",
    "1 \\\\0\\\\0\\\\0\\end{bmatrix}\n",
    "$, $\\begin{bmatrix}\n",
    "0\\\\0\\\\0\\\\1\\end{bmatrix}$, We chose the 2nd eigen vector.\n",
    "\n",
    "$\\implies$  $\\begin{bmatrix} \n",
    "1 & 0 & 0 & 0 \\\\ \n",
    "0 & cos(t) & i.sin(t) & 0 \\\\ \n",
    "0 & i.sin(t) & cos(t) & 0 \\\\ \n",
    "0 & 0 & 0 & 1 \\\\ \n",
    "\\end{bmatrix}$$\\begin{bmatrix}\n",
    "0\\\\-1/\\sqrt(2)\\\\1/\\sqrt(2)\\\\0\\end{bmatrix}$ =  $e^{-it}$$\\begin{bmatrix}\n",
    "0\\\\-1/\\sqrt(2)\\\\1/\\sqrt(2)\\\\0\\end{bmatrix}$. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62513115",
   "metadata": {},
   "source": [
    "## Applying QPE to Pairing Hamiltonian for d=0 and g=1, number of particle "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "9bfff3dd-e79b-4ded-ac14-a4f36fd69dbc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4EAAAB7CAYAAADKS4UuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAneUlEQVR4nO3deVxU9f7H8dfMAKLihpi4pSDqTcU9yy0sLcWbZbZclbpZpl6yxfZ7o7r+cmux1cz2266l5VZamgllVooLLmUkriiS5ooLwgy/P44iEzvMcGZ5Px8PHso5Z8585suXD+dzzvd8jyUvLy8PERERERER8QtWswMQERERERGRqqMiUERERERExI+oCBQREREREfEjKgJFRERERET8iIpAERERERERP6IiUERERERExI+oCBQREREREfEjKgJFRERERET8iIpAERERERERP6IiUERERERExI+oCBQREREREfEjKgJFRERERET8iIpAERERERERP6IiUERERERExI+oCBQREREREfEjKgJFRERERET8iIpAERERERERP6IiUERERERExI+oCBQREREREfEjKgJFRERERET8iIpAERERERERP6IiUERERERExI+oCBQREREREfEjKgJFRERERET8iIpAERERERERP6IiUERERERExI8EmB2AL/rtWzj+h9lRuEatC6DNFWZHUTy1dcWY2W7+8jldrSrb7fNk2Hu4at7rr5rUg6HdzHlv8W3e2q/NymOVyTn+8jdG/Is3/i6WREWgGxz/A46kmx2Ff1BbV4y/tJu/fE5X23sY0nykeBY5x1v7tTfmMW+MWaQ0vtavNRxURERERETEj6gIFBERERER8SMqAkVERERERPyIikARERERERE/oolhRKRID8zsy6+7fsRmC8RqtRFeL4IR/RKI6Xij2aGJiEgB3pivvTFmkdJ4U79WESgixYrr/zhx/R/Dbs9lwapXmPrxCKKadKZJWJTZoYmISAHemK+9MWaR0nhLv9ZwUBEplc0WQOwlo7E7cknbt8HscEREpBjemK+9MWaR0nh6v1YRKCKlysk9wxerZgLQNKy1ydGIiEhxvDFfe2PMIqXx9H6t4aBeYHBCCE+PXkbbFj3MDsXnqa2dfbx8MnOSpnEq+zg2WyD33/gWkY07ALBk9dt8s/aD/G0zDm0nOqIP/xnxkVnhup36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\n",
      "text/plain": [
       "<Figure size 1170.05x144.48 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "t = 1\n",
    "unit1 = ([[np.exp(-5.906709j*t), 0],[0, np.exp(-5.906709j*t)]])\n",
    "unit2 = ([[np.exp(-0.218291j*t), 0],[0, np.exp(-0.218291j*t)]])\n",
    "unit3 = ([[np.exp(6.125j*t), 0],[0, np.exp(6.125j*t)]])\n",
    "cir = QuantumCircuit(2)\n",
    "cir.unitary(unit1,0)\n",
    "cir.unitary(unit1,0)\n",
    "cir.rz(0.218291*2*t,0)\n",
    "cir.unitary(unit2*t,1)\n",
    "cir.unitary(unit3*t,0)\n",
    "cir.rz(-6.125*t*2,1)\n",
    "#implementing exp(cXX)\n",
    "cir.h(0)\n",
    "cir.h(1)\n",
    "cir.cx(0,1)\n",
    "cir.rz(-2.143304*t*2,1)\n",
    "cir.cx(0,1)\n",
    "cir.h(0)\n",
    "cir.h(1)\n",
    "#implementing exp(dYY)\n",
    "cir.rx(np.pi/2,0)\n",
    "cir.rx(np.pi/2,0)\n",
    "cir.cx(0,1)\n",
    "cir.rz(-2.143304*t*2,1)\n",
    "cir.cx(0,1)\n",
    "cir.rx(-np.pi/2,0)\n",
    "cir.rx(-np.pi/2,1)\n",
    "display(cir.draw())\n",
    "ga = cir.to_gate().control(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "f638ef41-6cf4-4ca8-8ce0-82830a23c972",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Traceback \u001b[1;36m(most recent call last)\u001b[0m:\n",
      "\u001b[1;36m  File \u001b[1;32m\"/tmp/ipykernel_1284/946093521.py\"\u001b[1;36m, line \u001b[1;32m3\u001b[1;36m, in \u001b[1;35m<module>\u001b[1;36m\u001b[0m\n",
      "\u001b[1;33m    qpe_12_par = my_qpe(7,2,gate = ga,initialize = 'h')\u001b[0m\n",
      "\u001b[1;31mNameError\u001b[0m\u001b[1;31m:\u001b[0m name 'ga' is not defined\n",
      "\n",
      "Use %tb to get the full traceback.\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       ".button {\n",
       "  border: none;\n",
       "  color: white;\n",
       "  padding: 4px 8px;\n",
       "  text-align: center;\n",
       "  text-decoration: none;\n",
       "  display: inline-block;\n",
       "  font-size: 12px;\n",
       "  margin: 4px 2px;\n",
       "  transition-duration: 0.2s;\n",
       "  cursor: pointer;\n",
       "}\n",
       ".iqx-button {\n",
       "  background-color: #0f62fe; \n",
       "  color: white; \n",
       "}\n",
       ".iqx-button:hover {\n",
       "  background-color: #0043ce;\n",
       "  color: white;\n",
       "}\n",
       "</style>\n",
       "<a href=\"https://stackoverflow.com/search?q=NameError: name 'ga' is not defined\" target='_blank'><button class='button iqx-button'>Search for solution online</button></a>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from qiskit import execute\n",
    "#ga = qcc(evol)\n",
    "qpe_12_par = my_qpe(7,2,gate = ga,initialize = 'h')\n",
    "\n",
    "simulator = Aer.get_backend('qasm_simulator')\n",
    "result = execute(qpe_12_par, backend = simulator, shots = 1000).result()\n",
    "count = result.get_counts(qpe_12_par)\n",
    "#plot_to_eigenval(count,7)\n",
    "display(plot_histogram(result.get_counts(qpe_12_par)))\n",
    "display(print(count))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "id": "b74add10-d154-4096-8292-8cdbb1c09f48",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-1.6198837120072371, 0.4908738521234052, 0.44178646691106466]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_to_eigenval(count,7,3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ff547643-3a19-487f-8dca-4c8da7135c0d",
   "metadata": {},
   "source": [
    "3 qubit case"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "f3c1a409-9d3c-4ab4-8f00-dc70c64280af",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 869.197x204.68 with 1 Axes>"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "unit4 = Operator([[np.exp(-9.625j*t),0],[0,np.exp(-9.625j*t)]])\n",
    "qci = QuantumCircuit(3)\n",
    "qci.compose(cir,[0,1])\n",
    "qci.unitary(unit4,0)\n",
    "qci.unitary(unit4,1)\n",
    "qci.unitary(unit4,2)\n",
    "qci.rz(-9.625/2*t,2)\n",
    "#implementing exp(cXX)\n",
    "qci.h(1)\n",
    "qci.h(2)\n",
    "qci.cx(1,2)\n",
    "qci.rz(-3.913119*t*2,2)\n",
    "qci.cx(1,2)\n",
    "qci.h(1)\n",
    "qci.h(2)\n",
    "#implementing exp(dYY)\n",
    "qci.rx(np.pi/2,1)\n",
    "qci.rx(np.pi/2,2)\n",
    "qci.cx(1,2)\n",
    "qci.rz(-3.913119*t*2,2)\n",
    "qci.cx(1,2)\n",
    "qci.rx(-np.pi/2,1)\n",
    "qci.rx(-np.pi/2,2)\n",
    "qci.draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "836f615e-f72e-4186-81fa-9db3af38c2ef",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Zs1i7ty5PPvss3z44YdJ05/OvUtkkD/44INq965Dhw4yykI0M5qtQUynhrdgwQKef/55TjnllKqPekFBAVu3bq2q2c2ePRuAU089FUjeB5eIc845h5EjR/Kb3/yGhlrAuUVePnfccQfHHnssgwcPZsKECRQXF3PVVVfx9NNPA3Duueeydu1a+vfvz80331xleH72s59RUVHBX//6V0aPHs3q1at5+OGHAbjssssYMmQIV199NZdeeikDBw6sVhiYNGkSp556Kq+99hrHHXccn3zyCZdccgnvvfceY8aMYY899iA/P5+DDz6Yk046KaFB++1vf8sJJ5zA1q1bufXWW6vuXVFREcOGDWPkyJEMGDAg6b1LZJAHDRpU7d7tsccefOc730l47TJtjJctW8YRRxzBkCFDKC4u5rbbbkv7/u6uNOdrn27eCwoKaNWqFQUFBdx444275P2mm25q0GuX6Xu3ZcsWRo8ezYgRIyguLubXv/51Ha5mEsxst9wOOOAAS8Wbb75pxxxzTNXv66+/3q6//vpqYY455hh78803zcxs27Zt1rlzZ9uxY4ddf/31dtppp9m5555bFe5Xv/qVXXzxxVXaF1980dq2bWvLli2r2tevXz9bs2ZN1e/77ruvmsbMbPny5WZmtmHDBjv66KPtsNMfsPNusaRbKlLpatKm4vHHH6/Ku5nZgw8+uEs+iouLE+b94osvtgceeMD69etnixcvtrPOOsv69OljTz/9tA0YMMA+++wz27RpkxUVFVlxcbGZmT366KM2YcIEMzObP3++7bvvvnbUUUfZkiVLrF+/fnbdddfZ9ddfb3369Km6vqnu3fXXX28vvPCCDRw40Nq2bWsXXnhhtbS/+OKL9rWvfc0mTJhg++67r40ePdrKysrMzKyiosI6depkvXv3tgEDBljfvn1t/vz5ZmZ2zjnnWJcuXaxHjx72/e9/P2Hahw8fbk8//bT17dvX8vPz7be//a2tXLnSZs+ebWZ+3/fdd1877rjjdonbzJ/THj16WMuWLa1Hjx52ww03VIu7uLjYtmzZkjDtTUF/9tlnW8uWLa1ly5Z2zjnnVO2v1A8ePDip9rrrrrP8/HwrKiqyZ555xoYPH27z58+vFvedd965W177dJ+7YcOGWd++fW3KlCnWt29fGz58uE2ZMqVa3rt06VKlyfS1y8S927JlS9U7X1FRYTt27LAvv/zSzMy2bt1qo0ePthkzZlhNAKWWxG402xpi7AhKqNsoyxUrVjBgwICq/rWePXuyePHian1wEydOpE+fPkn74JJReY727dtz+umns+bjWelntomxePHiKpePvLw8Dj74YObNm8eVV17JMcccw3HHHUdFRQXFxcUAu9QwR48eTZ8+fejbty/9+/envLy8TveusLCwqnVgwoQJVa0ElUycOJFevXolrGE+9thjbN26lYULF/Liiy/y+eef849//AOAs88+m8mTJ7Nhw4aE7iqTJk1iwoQJXH755fzzn//k8MMP57777mP9+vWMGjUK8Pu+xx57kJeXl7B2++ijj9KmTRtefvll2rRpU1U7rowbUrdsZFP/7rvv8sgjjzB37lzeffddHn74Yd59991q1+7zzz9PGvd9993H4Ycfzquvvspll13GhAkTmDRpUrW4k7kK5fq1T/e5O/jggxkwYACHHXYYAwYM4KCDDuLNN9+slneAgw46qEGuXbr37tRTT6V169ZV7/ysWbMIIdCuXTsAtm3bxrZt2wghkA7N1iCmS79+/ar64LZv384bb7xR1Qe3detWnn76ac4888yEfXDJqKio4LPPPgP8Bj/77LN07D604TOThPNvTbw9OL2QydPrNyCnsLCQRYsWVRmr5cuXs++++7JixQrOPfdcZs+ezbRp09iyZQvDhw8HdjVo++yzT1U8PXv2ZP369QCEEDjmmGM44IADqvYlIpFBrvTBrLx3a9asSfhyPvvss+y3335VL2dhYSFvv/02AIceeiidOnWioqIiqTHeunVrVdy9e/dm9OjR1fw/ly5dyqJFi7j88st3iTvZh23SpElVcUPqD0s29XfddRd9+vRh8ODBDBo0iN69e3PXXXdVu3apPurJCkKxcacqCOXytU/3uWvZsmXVsZ49e5Kfn1+tELl06VLWr1/PMccc0yDXLt17l6zysn37dkaOHEnXrl05+uijGTNmDOnQbA1i7Acb6v5RX7lyZVUf3N///neOPfbYqj64a665hlGjRvGjH/0oYR8cQFFREVdccQX3338/PXv2ZMGCBZSXl3PssccyfPhwRo4cSWFhIYPGnt84F6QOdOl1IBvW1G9Azvjx43njjTfYvn07ZWVlLFq0iH333RfYOSDn448/ZsOGDXz7299OGH/Hjh2r3bt169ZRWFjI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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'1100101': 1, '1111011': 2, '0000111': 7, '0000000': 7, '0000011': 819, '0000100': 29, '1010000': 1, '0000110': 5, '1111111': 3, '0001000': 1, '1111100': 2, '1111010': 1, '0000001': 15, '0000010': 88, '1110011': 1, '1110101': 1, '1101111': 2, '0001010': 1, '1101110': 1, '0000101': 9, '0001001': 2, '0001110': 1, '1111101': 1}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "gte = qci.to_gate().control(1)\n",
    "qpe_12_par = my_qpe(7,3,gate = gte, initialize = 'x')\n",
    "\n",
    "simulator = Aer.get_backend('qasm_simulator')\n",
    "result = execute(qpe_12_par, backend = simulator, shots = 1000).result()\n",
    "count = result.get_counts(qpe_12_par)\n",
    "#plot_to_eigenval(count,7)\n",
    "display(plot_histogram(result.get_counts(qpe_12_par)))\n",
    "display(print(count))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "55a590ca-0271-408b-815f-ddd149dec907",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.14726215563702155]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_to_eigenval(count,7,1)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9ea4d883-f771-457a-8207-55ee5e60082e",
   "metadata": {},
   "outputs": [],
   "source": [
    "t = 1/50\n",
    "w = 3.8\n",
    "qc = QuantumCircuit(1)\n",
    "qc.rz(2*w*t,0)\n",
    "gate = qc.to_gate().control(1)\n",
    "initial_state = [1,0]\n",
    "qpe_12_par = my_qpe(5,1,gate = gate,n=5, initialize = initial_state)\n",
    "\n",
    "simulator = Aer.get_backend('qasm_simulator')\n",
    "result = execute(qpe_12_par, backend = simulator, shots = 3000).result()\n",
    "count = result.get_counts(qpe_12_par)\n",
    "#plot_to_eigenval(count,7)\n",
    "display(plot_histogram(result.get_counts(qpe_12_par)))\n",
    "display(print(count))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "c970f354-644e-45e8-bd9f-373efff482b0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[26.50718801466388]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_to_eigenval(count,7,1)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "a42eb15a-e460-403c-bb81-10c8bf29545e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc0AAAFkCAYAAABCVmA7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABhPUlEQVR4nO2deXhV1dWH300CYZYZZBLCKFMQAxRExHlqnUBFra11KmqrVvvV2qp1Hqq1asWh1taqdZ5wFqsCohQMKAooooACCsikoBAZ1vfH2jc5ublJ9oF7cxNZ7/OcJ7nn/M7ae59hrz0fJyIYhmEYhlE1dbIdAcMwDMOoLZjTNAzDMIxAzGkahmEYRiDmNA3DMAwjEHOahmEYhhGIOU3DMAzDCCQ32xHIJq1atZIuXbpkOxqGYRhGDWLmzJmrRKR1qmM7tdPs0qULRUVF2Y6GYRiGUYNwzn1W0TFrnjUMwzCMQMxpGoZhGEYg5jQNwzAMIxBzmoZhGIYRiDlNwzAMwwjEnKZhGIZhBGJO0zAMwzACMadpGIZhGIGY0zQMwzCMQMxpGoZhGEYg5jQNwzAMIxBzmoZhGIYRiDlNwzAMwwjEnKZhGIZhBGJO0zAMwzACMadpGIZhGIGY0zQMwzCMQMxpGoZhGEYg1eo0nXMjnXPPOueWOefEOXdKwDn9nXOTnXMb/XmXOedckma0c26ec67Y/z06Y4kwDMMwdlqqu6bZGJgDnAdsrErsnGsKvAqsAAb78/4PuCCiGQY8CvwHGOj/Pu6cG5rmuBuGYRg7ObnVGZiIvAi8COCcuy/glJOAhsDPRWQjMMc51xu4wDl3s4gIcD7whohc48+5xjm3r99/QnpTYBiGYezM1PQ+zWHAm95hJngFaA90iWgmJp33CjA847EzDMMwdipqutNshzbNRlkROVaZph07CS+//DK9evWie/fuXH/99eWOf/bZZ+y///4MGDCAUaNGsXTp0pJjhxxyCM2aNePHP/5xmXP23ntvBg4cyMCBA2nfvj1HHXVUppNhGIZR46nW5tmagHPuTOBMgPbt2zNp0iQA8vPzadKkCbNnzwagZcuW9O3blylTpgCQm5vLiBEjmDVrFt988w0AhYWFrFixgiVLlgDQo0cP8vLymDNnDgBt2rShZ8+eTJ06FYC8vDyGDRtGUVERGzZsAGDo0KEsXbqUZcuWAdCrVy9ycnKYN28eAO3ataNr165MmzYNgAYNGjB06FCmT5/Oxo0b2bp1K2effTZ33303AOPGjWOvvfaie/fuzJ8/H4AbbriBsWPH0qNHD2bNmsWZZ57Jiy++yLRp0zjwwAMZOXIkb731FvPmzWPlypUAPP300xQXF7NgwQIuu+wyRowYwYYNGygqKgKgadOmDBo0iKlTp7JlyxYARo4cydy5c1m9ejUABQUFrF+/noULFwLQpUsXWrRowaxZswBo3rw5BQUFTJ48GRHBOcc+++zD7NmzWbt2LQCDBg1izZo1LF68uFbfJ4Bhw4axaNEili9fDkCfPn3YunVryX3q0KEDHTt2ZPr06QA0btyYwsJCpk2bRnFxMQAjRozg448/LrlP/fr1K7lPAJ06daJt27Z2n+w+2X3agftUKSKSlQ3YAJxSheZ+4IWkfYMBAbr6358D/5ek+T/gs6risOeee0pt5+2335aDDjqo5Pe1114r1157bRlNnz595PPPPxcRkW3btkmTJk3KHH/jjTfk8MMPT2n/66+/lmbNmsnXX3+d5pgbhmHUTIAiqcBv1PTm2WnA3s65+pF9BwJfAIsjmgOTzjsQeDvjsasBLFu2jE6dOpX87tixY0npLUFBQQFPPfUUoDXI9evXl5Req+KZZ55h//33p2nTpumLtGEYRi2luudpNnbODXTODfRhd/a/O/vj1znnXouc8hDwHXCfc66fc+4Y4PdAYuQswK3Afs653zvnejvnLgb2BW6ppmTVeG666SYmT57MHnvsweTJk+nQoQM5OTlB5z788MOccIINQjYMw4Dq79MsBN6I/L7Cb/8GTgF2BbolDorI1865A4HxQBGwFvgLcHNE87ZzbixwNXAl8ClwvIhMz2hKaggdOnQo6VsAWLp0KR06dCijad++fUlNc8OGDTz55JM0a9asSturVq1ixowZPP3002mNs2EYRm2luudpTgJcJcdPSbHvA2BkFXafAJ7YwejVSgYPHsyCBQtYtGgRHTp04JFHHuGhhx4qo1m1ahUtWrSgTp06XHfddZx66qlBtp944gl+/OMfU79+/arFhmEYOwE1vU/TqILc3Fxuv/12Dj74YHbffXeOO+44+vbty2WXXcazzz4LwKRJk+jVqxc9e/ZkxYoV/PGPfyw5f++99+bYY4/ltddeo2PHjrzyyislxx555BFrmjUM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6EC7du1YsGABy5Yt44svvuCAAw6gQYMGAJx33nkccsghvPvuu0yePJmGDRsCMHfuXC666CImTpxYEo/6jVpx2Nn/BWD5p28y+/UbuPLKK0uP16/P448/XpKmQw89tCRNc+fOLZemiy++mK+++oq1a9fStm1bcnJyALjuuutK0nTTTTfx4IMPMnPmTJYsWUKXLl1o0KABubm5jB49ukR32223cfDBB7Np0yZGjhxJcXExW7ZsYcyYMVxxxRVpvmOGYRjbgYjstNuee+4plfHSSy9Jz549pVu3bnLdddeVO75p0yY57rjjJD8/X/Ly8mTy5MlSXFwsAwYMkPPOO0+6desmPXv2lJdfflnGjx8vBx10kDRv3lzat28vTZs2lcMPP1zOP/98GTBggGzatEkWLlwoDRo0kDfffFPeeust2W+//aRly5ZSXFwsTZs2lSFDhpSEfdBBB8mQIUNk4sSJ0qVLF/n++++lZcuWsm3bNhERWbJkifTo0UOmTp1acs6Jl38hu7TpJaf/VeT0v4rse/JD0nvYmSnTvmXLFsnPz5dPP/20JE1z584toxk/frycccYZkp+fL7fccouMHj1aBgwYIBMmTCiTppYtW8qZZ2o4rVq1kiOPPFJERObOnVtGl5+fL1u2bJFt27bJ+vXr5aWXXpIePXpIXl6enHXWWZXepw4dOkjdunWlRYsW5e5V4j5169ZNhgwZIosWLSo5du2115a5Twl+8YtfyC677CL16tWr8P4nuOqqq6Ru3bqSm5srBx98cLnjmQ6/qud0e7SZsJnt8C1NtSP8TKUpDkCRVOA3su64srlV5jRDncYvf/lLefvtt2XAgAFy3HHHiYjI+eefL+3atSvjDA488EC56KKL5Mgjj5TNmzdLixYtpE2bNlJQUCDXXnttic1GjRrJM888I5s3b5auXbtKp06dZMGCBZKTk1PGcZx66qly2mmnyejRo2Xw4MEycuRIadasmZx22mmydOlSGTBggDz55JNl4nv6X0Vadx4sR5w3TU67eZt07H2IHHzGCynT/5Pz3pYOvQ4qcbCFh19bJp4i6rjvvvtuOeigg2Tz5s3SsmVLueaaa+Sggw4qo23ZsqXcfffdIiLSuXNnadGihWzbtk2uvbaszYMOOkjefvvtMtd/zpw5UlBQIN27dy93/aO6Tp06yYcffij9+/eXnj17ltEm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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'1011000': 1, '1111101': 1, '0001100': 1, '0010010': 1, '0111101': 1, '0100000': 1, '1110111': 1, '0011100': 1, '1111111': 3, '1111011': 3, '0001111': 1, '1110110': 1, '0110101': 1, '0000110': 20, '1010110': 1, '1111000': 2, '0001000': 3, '1111100': 2, '0001001': 2, '0000101': 138, '1100000': 1, '0000100': 3668, '0000011': 79, '1111110': 1, '0000111': 11, '0000010': 24, '0001010': 4, '0010001': 1, '0000001': 10, '0001101': 4, '0000000': 7, '0001011': 3, '0010011': 1, '1111001': 1}\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "w_1 = 0.33\n",
    "w_2 = 3.24\n",
    "w_3 = 1.17\n",
    "qc = QuantumCircuit(2)\n",
    "qc.rz(2*w_1*t,0)\n",
    "qc.rz(2*w_2*t,1)\n",
    "qc.cx(0,1)\n",
    "qc.rz(2*w_3*t,1)\n",
    "qc.cx(0,1) \n",
    "gate = qc.to_gate().control(1)\n",
    "initial_state = [0,0,1,0]\n",
    "qpe_12_par = my_qpe(7,2,gate = gate, initialize = initial_state)\n",
    "result = execute(qpe_12_par, backend = simulator, shots = 4000).result()\n",
    "count = result.get_counts(qpe_12_par)\n",
    "#plot_to_eigenval(count,7)\n",
    "display(plot_histogram(result.get_counts(qpe_12_par)))\n",
    "display(print(count))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "2877e71e-ca53-4de8-a020-022347a63083",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[19.634954084936208]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_to_eigenval(count,7,1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ecb4a322",
   "metadata": {},
   "source": [
    "#### As expected we are  able to sample some of the eigen values for different values of t. Although we ran only 1 instance of t since it takes very long time to sample 4-5 time intervals at once. \n",
    "\n",
    "## Difference in our results vs the paper :\n",
    "- The initial state of their results was a random state and so do ours so, they may not match.\n",
    "- The best we can expected is to match some of the eigen values by sampling many time intervals and different random initial state.\n",
    "\n",
    "## Bug in the definition of plot_to_eigenval:\n",
    "The code samples all data points that have 10+ occurance in a simulation, which is mostly greater than the actual eigen value that the qpe projects, therefore we sample some extra unrequired eigen values. Need to fix that.\n",
    "\n",
    "## Else can be verified correctly"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "950946fb",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "# Conclusions:\n",
    "\n",
    "#### The codes defined for each operation works as expected. \n",
    "#### An arbitary initial state is also able to produce expected phase.\n",
    "#### But along with expected result some different small peaks are also observed.\n",
    "#### The number of significant high peaks correspond to number of eigen values of the evolution operator.\n",
    "#### Different values t can be set to produce different parts of the eigen value spectrum.\n",
    "#### There is a maximum limit to t upto which QPE can produce approximately correct results.\n",
    "#### Best results are obtained if the intial state is set to eigen state of evolution operator.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "464f6ef8-84fd-49e4-8ffa-49c7d7806068",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Qiskit v0.30.1 (ipykernel)",
   "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.8.10"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {},
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}