q-optimize/c3

View on GitHub
examples/c3_qiskit.ipynb

Summary

Maintainability
Test Coverage
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# C3 Simulator as a backend for Qiskit Experiments"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This notebook demonstrates the use of the C3 Simulator with a high-level quantum programming framework [Qiskit](https://www.qiskit.org). You must additionally install qiskit and matplotlib to run this example."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "!pip install -q qiskit matplotlib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "from pprint import pprint\n",
    "import numpy as np\n",
    "from c3.qiskit import C3Provider\n",
    "from c3.qiskit.c3_gates import RX90pGate\n",
    "from qiskit import transpile, execute, QuantumCircuit, Aer\n",
    "from qiskit.tools.visualization import plot_histogram"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Define a basic Quantum circuit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<qiskit.circuit.instructionset.InstructionSet at 0x7f0878218b00>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc = QuantumCircuit(3)\n",
    "qc.append(RX90pGate(), [0])\n",
    "qc.append(RX90pGate(), [1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"word-wrap: normal;white-space: pre;background: #fff0;line-height: 1.1;font-family: &quot;Courier New&quot;,Courier,monospace\">     ┌────────────┐\n",
       "q_0: ┤ Rx90p(π/2) ├\n",
       "     ├────────────┤\n",
       "q_1: ┤ Rx90p(π/2) ├\n",
       "     └────────────┘\n",
       "q_2: ──────────────\n",
       "                   </pre>"
      ],
      "text/plain": [
       "     ┌────────────┐\n",
       "q_0: ┤ Rx90p(π/2) ├\n",
       "     ├────────────┤\n",
       "q_1: ┤ Rx90p(π/2) ├\n",
       "     └────────────┘\n",
       "q_2: ──────────────\n",
       "                   "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc.draw()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Get the C3 Provider and Backend"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "c3_provider = C3Provider()\n",
    "c3_backend = c3_provider.get_backend(\"c3_qasm_physics_simulator\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Name: c3_qasm_physics_simulator\n",
      "Version: 0.1\n",
      "Max Qubits: 10\n",
      "OpenPulse Support: False\n",
      "Basis Gates: ['cx', 'rx']\n"
     ]
    }
   ],
   "source": [
    "config = c3_backend.configuration()\n",
    "\n",
    "print(\"Name: {0}\".format(config.backend_name))\n",
    "print(\"Version: {0}\".format(config.backend_version))\n",
    "print(\"Max Qubits: {0}\".format(config.n_qubits))\n",
    "print(\"OpenPulse Support: {0}\".format(config.open_pulse))\n",
    "print(\"Basis Gates: {0}\".format(config.basis_gates))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Run a physical device simulation using C3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "c3_backend.set_device_config(\"qiskit.cfg\")\n",
    "c3_job = c3_backend.run(qc)\n",
    "result = c3_job.result()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'0': 0.2501927838288742,\n",
      " '1': 1.3433540939166752e-47,\n",
      " '10': 0.2749604122313709,\n",
      " '100': 0.2511657399090722,\n",
      " '101': 3.285567472819051e-34,\n",
      " '11': 8.48789239568126e-33,\n",
      " '110': 0.2236810640306745,\n",
      " '111': 4.031589164760562e-51}\n"
     ]
    }
   ],
   "source": [
    "res_counts = result.get_counts()\n",
    "pprint(res_counts)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc0AAAFTCAYAAABbKVcuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAA0eUlEQVR4nO3deXxV1bn/8c9DIhEKKINMCQoYoE2QyXCBiiAOpVCltkXFap2nW6uiV6qt1l+1zlauA1ftVXsdqOBUFVuhSisgSsGAIIMiSqAkyIwVFIOE5/fH3sRDOEn2geQM8H2/XnlxztrrrPPsfTbnOWvtvdc2d0dERERq1yDVAYiIiGQKJU0REZGIlDRFREQiUtIUERGJSElTREQkIiVNERGRiJQ0RWKY2QozO7GO25xsZufuYxvnmdnMuoopwfc+y8xeT+L7LTaz4+qh3Y5m5maWvZev/7WZPVbXcUlmUdKUjGBmPzWzYjPbamafholoYLhslJktNbN/m9k6M3vSzJrV0Jab2RdhW2VmNtbMsuordncf5u5P1lf7Mclga/i31sz+YmYn1UX77v4nd/9eXbQV8f0K3X1ast4vHjM7zsxKY8vc/XZ3vyhVMUl6UNKUtGdm1wD3AbcDbYDDgYeAH4ZV3gaOcfdDgM5ANnBrLc32dPcmwAnAT4GL6z7ypDs0XKeewBvAS2Z2XmpDEtm/KGlKWjOzQ4BbgMvd/c/u/oW7f+3ur7r7GAB3X+XuG2JeVgHkR2nf3T8E3gK6xxT3MrP3w57rs2Z2cBjLIjM7JSa2g8xsg5n1NrODzWy8mW00s8/M7F0zaxPWm2ZmF8W87mIz+8DMtpjZEjPrE5Zfb2afxJT/aG+2mbuvcff7gd8Cd5lZg7D99mb2opmtN7MSM7sypnybmbWIibF3uG4HVR0aNrNCM3vDzDaFvdpfh+UNYtZho5k9F9tmLDNrFfaGPwvbeSsmzsohcjP7rZk9H27bLWa20My6mtmvwlGFVWb2vZh2dxteD18/vpoYzo/5HJab2aVh+beAyUD7mN57+6ptmdkIC4aSPws/4+9UiePaePuRZDYlTUl3A4CDgZdqqmRmA83s38AW4CcEPdNamVkBcCzwXkzx6cD3gU5AD+C8sPwp4OyYesOBT939PeBc4BCgA9ASuAzYFuf9TiNIZucAzYARwMZw8SdhLIcANwPjzaxdlPWoxp+B1kC3MCG9CiwAcgl62KPNbKi7rwZmEWy3XX4KvODuX1eJvykwFZgCtCf4cfL3cPEVwKnA4HDZZuB/qontv4BS4DCC0YNfA9XN6XkK8DTQnOBz+hvBd1cuwQ+qP9S8Gaq1DjiZ4HM4H/hvM+vj7l8Aw4DV7t4k/Fsd+0Iz6wpMAEaH6/Aa8KqZNYypVt1+JBlMSVPSXUtgg7vvqKmSu88Mh2fzgHuAFbW0O8/MNhMkkseA/4tZ9oC7r3b3TeHyXmH5eGC4fXO89GcEX+YAX4ex5rt7hbvPdffP47zvRcDd7v6uBz5295XhOjwfvu9Od38WWAb8Ry3rUZNdX/QtgL7AYe5+i7tvd/flwKPAqLDOM8CZAGZmYfkzcdo8GVjj7ve6+1fuvsXdZ4fLLgNucPdSdy8n+HEw0uKfePM10A44Ihw5eMurnwj7LXf/W7gPPE+QpO4ME/pEoKOZHRptk3zD3f/q7p+En8N04HWCHy1RnAH81d3fCOP4PdAI+G5Mner2I8lgSpqS7jYCrar54t2Du5cR9IIm1lK1j7s3d/cj3f1Gd98Zs2xNzOMvgSZh26sJjp/+JPySHgb8Kaz3NEEPaKKZrTazu83soDjv24GgR7kHMzvHzOaHw32fEQwZt6plPWqSG/67CTiCYLjxs5j2f03QywN4ERgQ9mwHATsJhq0jxx++x0sx7X9AMFTeJk7de4CPgdfDodHra1iPtTGPtxH8iKqIeQ7hZ5QIMxtmZv8Mh4c/Ixg5iLq92wMrdz0J959VfLPNoZr9SDKbkqaku1lAOcGwX1TZwJH1Eg08STBEexowK0zShL2lm929gKC3cTLBEGxVq+LFZmZHEPT8fgG0dPdDgUWA7UOsPyIYglwavm+Jux8a89fU3YeH8W8m6GmdQTA0O7Gant8qgpOt4lkFDKvyHgfv2kaxwh7qf7l7Z4Ih6mvM7IR9WNddvgAaxzxvG6+SmeUQ/FD4PdAm3N6v8c32ru32T6sJfiTsas8IflDssa6yf1HSlLTm7v8GbgL+x8xONbPG4ckpw8zsbqi8jvDw8PERwG18c5ytrr0M9AGuIjjGSfi+Q8zsKAsuXfmcYPhxZ5zXPwZca2ZHWyA/jPlbBF/U68P2zmf3k5MiM7M2ZvYL4P8Bvwp7QXOALWZ2nZk1MrMsM+tuZn1jXvoMQaIfSfyhWYC/AO3MbLSZ5ZhZUzPrFy57BLgtXB/M7DAz+2G8Rszs5HDdDfg3QY803vZK1HxgVLiPFIXrEk9DIIdge+8ws2FA7GU1a4GWFpyIFs9zwA/M7IRwROG/CH7cvVMH6yBpTElT0p673wtcA9xI8CW3iqBH9nJYpQB4x8y+IBg+XUo9XULi7tsIeiidCE602aUt8AJBwvwAmM43xztjX/88QVJ/huCkpZeBFu6+BLiXoGe9FjgqXJdEfBZug4UEQ42nufsfw/etIOj99gJKgA0ECTw2KUwCuhAcs1xQzfpvAU4iODlnDcFx1yHh4vvDNl43sy3AP4F+8doJ32cqsDVc54fc/c0E1zee3xD05DcTnEwVN/mH63ElQfLbTNC7nhSz/EOCE32Wh8PN7au8finBiMODBNvyFOAUd99eB+sgacx0E2qRxJjZTUBXdz+71soisl/Zq+mkRA5UFlx3eCHBmbMicoDR8KxIRGZ2McHQ8GR3n5HqeEQk+TQ8KyIiEpF6miIiIhEpaYqIiER0QJ8I1KpVK+/YsWOqwxARkTQyd+7cDe5+WLxlB3TS7NixI8XFxakOQ0RE0oiZraxumYZnRUREIlLSFBERiSjpSdPMfm7BDXC/MrO5ZlbtrXjMbLCZvWPBDW23mdmHZnZtlToXW3AD283hdFdvmtnA+l8TERE50CQ1aZrZGQTzU94O9CaY3Hjyrsm249gKPEBwq6IC4FbgZjP7eUyd44BngeMJ5rlcCvzNzLrUxzqIiMiBK6mTG5jZbOB9d784pmwZwR3ifxWxjT8D5e5+ZjXLDfgUuM3dH6ypraKiIteJQCIiEsvM5rp7UbxlSetpmllD4GiCe/bFep3d73ZeUxu9w7rTa6jWEDiY4M4FIiIidSaZl5y0ArLY/S7shM9PrOmFZlYKHEYQ783u/kgN1W8lGNadFG+hmV0CXALQvn17pk2bBkDnzp1p2rQpCxYEd0Rq2bIlhYWFzJgRTDGanZ3NwIEDmTdvHp9//jkARUVFrF27llWrVgHQpUsXcnJyWLRoEQCtW7ema9euzJw5E4CcnBwGDBhAcXExW7duBaBfv36UlpZSVhbcu7Zbt25kZWWxZMkSANq2bUunTp2YNWsWAI0aNaJfv37Mnj2bbduCm9YPGDCAkpIS1qwJbhRfUFBARUUFS5cuBSA3N5e8vDxmz54NQJMmTSgqKmLWrFmUl5cDMHDgQD766CPWrVsHQPfu3SkvL2fZsmUAdOjQgTZt2lReotOsWTP69OnDzJkz2bFjBwCDBg1i8eLFbNy4EYCePXuyZcsWli9fDgSX+LRo0YJ58+YB0Lx5c3r27Mn06dNxd8yMwYMHs2DBAjZvDn7z9OnTh02bNrFixQp9Tvqc9Dnpc0rK51STpA3PhvejKwMGx052Hd5m6Sx371bDazsBTYD+wF3AVe6+x70Kzewq4HfAie4+p7aYNDwrIiJV1TQ8m8ye5gaCu7O3qVLehuBmttVy95Lw4UIzawP8lio3+DWz0QQJc1iUhCkiIpKopB3TDO9oPpfgru+xTiI4izaqBkBObIGZXUOQMH/g7jP3JU4REZHqJHsavbHA02Y2B3gbuAxoDzwCYGZPAbj7OeHzK4ASgstIILj05FrgoV0NmtkY4DbgbOAjM2sbLtrm7v+u7xUSEZEDR1KTprs/a2YtgRuBdsAiYLi775rnr+r1mlkExzA7AjuAT4DrCZNs6HLgIIJrNWM9CZxXh+GLiMgB7oC+CbVOBBIRkarS4jpNERGRTKekKSIiEpGSpoiISERKmiIiIhEpaYqIiESkpCkiIhKRkqaIiEhESpoiIiIRKWmKiIhEpKQpGWvKlCl069aN/Px87rzzzj2Wjx07loKCAnr06MEJJ5zAypXBbI1vvvkmvXr1qvw7+OCDefnllwE477zz6NSpU+Wy+fPnJ3GNRCTdaRo9TaOXkSoqKujatStvvPEGeXl59O3blwkTJlBQUFBZ580336Rfv340btyYhx9+mGnTpvHss7tPUbxp0yby8/MpLS2lcePGnHfeeZx88smMHDky2askImlC0+jJfmfOnDnk5+fTuXNnGjZsyKhRo3jllVd2qzNkyBAaN24MQP/+/SktLd2jnRdeeIFhw4ZV1hMRqYmSpmSksrIyOnToUPk8Ly+PsrKyaus//vjjDBs2bI/yiRMncuaZZ+5WdsMNN9CjRw+uvvpqysvL6y5oEcl4Spqy3xs/fjzFxcWMGTNmt/JPP/2UhQsXMnTo0MqyO+64gw8//JB3332XTZs2cddddyU7XBFJY0qakpFyc3NZtWpV5fPS0lJyc3P3qDd16lRuu+02Jk2aRE5Ozm7LnnvuOX70ox9x0EEHVZa1a9cOMyMnJ4fzzz+fOXPm1N9KiEjGUdKUjNS3b1+WLVtGSUkJ27dvZ+LEiYwYMWK3Ou+99x6XXnopkyZNonXr1nu0MWHChD2GZj/99FMA3J2XX36Z7t27199KiEjGyU51ACJ7Izs7m3HjxjF06FAqKiq44IILKCws5KabbqKoqIgRI0YwZswYtm7dymmnnQbA4YcfzqRJkwBYsWIFq1atYvDgwbu1e9ZZZ7F+/XrcnV69evHII48kfd1EJH3pkhNdciIiIjF0yYmIiEgdUNIUERGJSElTREQkIiVNERGRiJQ0RUREIlLSFBERiUhJU0REJCIlTRERkYiUNEVERCJS0hQREYlISVNERCQiJU0REZGIdJcTyWgX31d/bT86uv7anjJlCldddRUVFRVcdNFFXH/99bstHzt2LI899hjZ2dkcdthh/PGPf+SII44AICsri6OOOgrY/c4t48aN47777uOTTz5h/fr1tGrVqv5WQOQApZ7mPpoyZQrdunUjPz+fO++8c4/lY8eOpaCggB49enDCCSewcuXKymVZWVn06tWLXr167XYvyJKSEvr160d+fj5nnHEG27dvT8q6SHJUVFRw+eWXM3nyZJYsWcKECRNYsmTJbnV69+5NcXEx77//PiNHjuSXv/xl5bJGjRoxf/585s+fX5kwAY455himTp1amVxFpO4pae6D+vryu+6667j66qv5+OOPad68OY8//njS1knq35w5c8jPz6dz5840bNiQUaNG8corr+xWZ8iQITRu3BiA/v37U1paWmu7vXv3pmPHjvURsoiElDT3QX18+bk7//jHPxg5ciQA5557Li+//HK9xC+pUVZWRocOHSqf5+XlUVZWVm39xx9/nGHDhlU+/+qrrygqKqJ///7aN0SSTMc090G8L7/Zs2dXW7+6L7/s7Gyuv/56Tj31VDZu3Mihhx5KdnZ2ZZs1faHK/m38+PEUFxczffr0yrKVK1eSm5vL8uXLOf744znqqKM48sgjUxilyIFDSTNJon75HXLIISmMUpIhNzeXVatWVT4vLS0lNzd3j3pTp07ltttuY/r06eTk5Oz2eoDOnTtz3HHH8d577ylpiiSJhmf3QaJffpMmTar1y69ly5Z89tln7Nixo8Y2JXP17duXZcuWUVJSwvbt25k4ceJuJ4IBvPfee1x66aVMmjSJ1q1bV5Zv3ryZ8vJyADZs2MDbb79NQUFBUuMXOZApae6D+vjyMzOGDBnCCy+8AMCTTz7JD3/4w+StlNS77Oxsxo0bx9ChQ/nOd77D6aefTmFhITfddFPlCWFjxoxh69atnHbaabudXf3BBx9QVFREz549GTJkCNdff31l0nzggQfIy8ujtLSUHj16cNFFF6VsHUX2V+buqY4hZYqKiry4uHif2njttdcYPXo0FRUVXHDBBdxwww3cdNNNFBUVMWLECE488UQWLlxIu3btgG+uq3vnnXe49NJLadCgATt37mT06NFceOGFACxfvpxRo0axadMmevfuzfjx43froco3MvU6TRFJX2Y2192L4i5T0ty3pCmppaQpInWtpqSp4VkREZGIlDRFREQiUtIUERGJSElTREQkIiVNERGRiJQ0RUREIlLSFBERiUhJU0REJCIlTRERkYiUNEVERCLSrcFEUqQ+pwAETQMoUh+UNOuAvvxERA4MGp4VERGJSElTREQkIiVNEZEMMWXKFLp160Z+fj533nnnHsvHjh1LQUEBPXr04IQTTmDlypUAzJ8/nwEDBlBYWEiPHj149tln93jtlVdeSZMmTep9HTJd0pOmmf3czErM7Cszm2tmx9ZQ98dm9rqZrTezLWY228xG1FD/TDNzM/tL/UQvIpIaFRUVXH755UyePJklS5YwYcIElixZslud3r17U1xczPvvv8/IkSP55S9/CUDjxo156qmnWLx4MVOmTGH06NF89tlnla8rLi5m8+bNyVydjJXUpGlmZwD3A7cDvYF3gMlmdng1LxkM/AP4QVj/NeCleInWzDoD9wBv1UPoIiIpNWfOHPLz8+ncuTMNGzZk1KhRvPLKK7vVGTJkCI0bNwagf//+lJaWAtC1a1e6dOkCQPv27WndujXr168HgmQ8ZswY7r777iSuTeZKdk/zGuAJd3/U3T9w9yuAT4H/jFfZ3a9y9zvdfY67f+zuNwNzgVNj65nZQcAE4AZgeb2ugYhICpSVldGhQ4fK53l5eZSVlVVb//HHH2fYsGF7lM+ZM4ft27dz5JFHAjBu3DhGjBhBu3bt6j7o/VDSLjkxs4bA0cDvqyx6HfhuAk01BaqOI9wGrHD3J81syN5HKSKS+caPH09xcTHTp0/frfzTTz/lZz/7GU8++SQNGjRg9erVPP/880ybNi01gWagZF6n2QrIAtZWKV8LnBilATO7HMgDno4p+x5wOtArYhuXAJdAMEyxa2fp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",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot_histogram(res_counts, title='C3 Physical Device simulation')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see above, the c3 simulator correctly calculates the populations while accounting for non-optimal pulses and device limitations."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Run Simulation and verify results on Qiskit simulator"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Qiskit uses little-endian bit ordering while most Quantum Computing literature uses big-endian. This is reflected in the reversed ordering of qubit labels here.\n",
    "\n",
    "Ref: [Basis Vector Ordering in Qiskit](https://qiskit.org/documentation/tutorials/circuits/3_summary_of_quantum_operations.html#Basis-vector-ordering-in-Qiskit)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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m+eAAw5g0003BWDfffflySefXOM6n3/+eTbaaCN23nlnAA466CB++ctfds0HkKQ+ytDsAU899RTDhg1b9X7o0KE89dRT7c7/4x//mEMPPXTV+1dffZWGhgb23XdffvWrXwGw1VZb0dTUxPTp0wG47rrr+Otf/9o1H0CS+qj+PV2A1uzKK69k+vTpTJkyZVXbggULGDJkCHPnzuWd73wne+yxBzvssAPXXHMNn/3sZ2lsbOTggw+mX79+PVi5JPU+hmYPGDJkyGp7gU8++SRDhgx53Xy//e1vOe+885gyZQobb7zxassDjBgxggkTJnDfffexww478La3vY0777wTgNtuu405c+Z08SeRpL7Fw7M9YJ999uGxxx5j3rx5LF++nGuuuWa1UbAA9913H5/4xCe44YYb2HrrrVe1v/jiizQ2NgKwePFi7r77bnbffXcAnn32WQAaGxv55je/yUknndRNn0hSX9IVo/8/9rGPMWbMGEaPHs2RRx7JsmXLuuWz1Cwz++zP3nvvnT3lpptuyp122ilHjBiRX/va1zIz86yzzsrrr78+MzMPPPDA3HrrrXPMmDE5ZsyYfM973pOZmXfffXeOGjUqR48enaNGjcof/ehHq9Z5+umn56677po777xzfvvb3+72zySp92tqasoRI0bkE088kY2NjTl69OicPXv2avPccccd+fLLL2dm5sUXX5xHHXXUqmlvfOMb21zv3/72t1WvP/vZz+Y3vvGNLqi+GmB6tpMbUUzvmxoaGrJ54Iwkae2mTZvGOeecw6233grAN77xDQC+/OUvtzn/fffdxymnnMLdd98NwIABA9a4F5mZnHzyyQwfPpwvfvGLnVx9NRExIzMb2prm4VlJUmVdMfq/2fHHH88222zDI488wqmnntrptXcGQ1OS1CWaR/+fccYZq9oWLFjA9OnTufrqqznttNN44oknVk376U9/ytNPP81uu+3Gz3/+854oea0MTUlSZbWO/r/hhhvWOvq/pX79+nH00UfX7c1ZDE1JUmVdMfo/M3n88ceB4pzmDTfcwK677tp9H6oGhqZU6sgweoAlS5YwdOhQTjnllFVtEyZMYJdddlk1xL75siBpfdW/f38mTZrEIYccwm677cZRRx3FyJEjOfvss1fdC/uMM85g2bJlvP/971/t0pKHH36YhoYGxowZwwEHHMCXvvSl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",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qiskit_simulator = Aer.get_backend('qasm_simulator')\n",
    "qc.measure_all()\n",
    "qiskit_result = execute(qc, qiskit_simulator, shots=1000).result()\n",
    "counts = qiskit_result.get_counts(qc)\n",
    "plot_histogram(counts, title='Qiskit simulation')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (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"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}