Skip to content

Instantly share code, notes, and snippets.

@pandaman64
Created July 2, 2018 16:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pandaman64/3a67cf1d2f0323dd698ad28f63d5b077 to your computer and use it in GitHub Desktop.
Save pandaman64/3a67cf1d2f0323dd698ad28f63d5b077 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['local_qasm_simulator', 'local_statevector_simulator', 'ibmq_qasm_simulator', 'ibmq_20_tokyo', 'QS1_1', 'ibmqx_hpc_qasm_simulator', 'local_unitary_simulator', 'ibmqx_qasm_simulator']\n"
]
}
],
"source": [
"import math, sys\n",
"from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, QuantumProgram\n",
"\n",
"# Import basic plotting tools\n",
"from qiskit.tools.visualization import plot_histogram\n",
"\n",
"# Import methods to connect with remote backends\n",
"from qiskit import available_backends, execute, register, get_backend, compile\n",
"\n",
"import time\n",
"\n",
"try:\n",
" import Qconfig\n",
" qx_config = {\n",
" \"APItoken\": Qconfig.APItoken,\n",
" 'url': Qconfig.config['url'],\n",
" 'hub': Qconfig.config['hub'],\n",
" 'group': Qconfig.config['group'],\n",
" 'project': Qconfig.config['project']\n",
" }\n",
"\n",
"except:\n",
" print(\"failure!!!\")\n",
" qx_config = {\n",
" \"APItoken\":\"You really shouldn't insert your token here but you could\",\n",
" 'url': 'https://q-console-api.mybluemix.net/api',\n",
" 'hub': 'ibm-q-keio',\n",
" 'group': 'keio-internal',\n",
" 'project': 'keio-beta-test'\n",
"}\n",
" \n",
"register(qx_config['APItoken'], url=qx_config['url'],\n",
" hub=qx_config['hub'], group=qx_config['group'],\n",
" project=qx_config['project'])\n",
"\n",
"print(available_backends())\n",
"\n",
"def input_state (circ, q, n):\n",
" \"\"\"n-qubit input state for QFT that produces output 1.\"\"\"\n",
" for j in range(n):\n",
" circ.h(q[j])\n",
" circ.u1(math.pi/float(2**(j)), q[j]).inverse()\n",
"\n",
"def qft(circ, q, n):\n",
" \"\"\"n-qubit QFT on q in circ.\"\"\"\n",
" for j in range(n):\n",
" for k in range(j):\n",
" circ.cu1(math.pi/float(2**(j-k)), q[j], q[k])\n",
" circ.h(q[j])"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q0[3];\n",
"creg c0[3];\n",
"h q0[0];\n",
"h q0[0];\n",
"cu1(1.57079632679490) q0[1],q0[0];\n",
"h q0[1];\n",
"cu1(0.785398163397448) q0[2],q0[0];\n",
"cu1(1.57079632679490) q0[2],q0[1];\n",
"h q0[2];\n",
"measure q0[0] -> c0[0];\n",
"measure q0[1] -> c0[1];\n",
"measure q0[2] -> c0[2];\n",
"\n",
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q[10];\n",
"creg c0[3];\n",
"u1(0.392699081698724) q[9];\n",
"u1(0.785398163397448) q[8];\n",
"cx q[8],q[4];\n",
"u1(-0.785398163397448) q[4];\n",
"cx q[8],q[4];\n",
"u2(0,3.14159265358979) q[8];\n",
"u1(0.785398163397448) q[4];\n",
"cx q[9],q[4];\n",
"u1(-0.392699081698724) q[4];\n",
"cx q[9],q[4];\n",
"u1(0.785398163397448) q[9];\n",
"u1(0.392699081698724) q[4];\n",
"cx q[9],q[8];\n",
"measure q[4] -> c0[0];\n",
"u1(-0.785398163397448) q[8];\n",
"cx q[9],q[8];\n",
"u2(0,3.14159265358979) q[9];\n",
"u1(0.785398163397448) q[8];\n",
"measure q[9] -> c0[2];\n",
"measure q[8] -> c0[1];\n",
"\n",
"[[('q0', 0), ('q', 4)], [('q0', 1), ('q', 8)], [('q0', 2), ('q', 9)]]\n",
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q[10];\n",
"creg c0[3];\n",
"u1(0.392699081698724) q[9];\n",
"u1(0.785398163397448) q[8];\n",
"cx q[8],q[4];\n",
"u1(-0.785398163397448) q[4];\n",
"cx q[8],q[4];\n",
"u2(0,3.14159265358979) q[8];\n",
"u1(0.785398163397448) q[4];\n",
"cx q[9],q[4];\n",
"u1(-0.392699081698724) q[4];\n",
"cx q[9],q[4];\n",
"u1(0.785398163397448) q[9];\n",
"u1(0.392699081698724) q[4];\n",
"cx q[9],q[8];\n",
"measure q[4] -> c0[0];\n",
"u1(-0.785398163397448) q[8];\n",
"cx q[9],q[8];\n",
"u2(0,3.14159265358979) q[9];\n",
"u1(0.785398163397448) q[8];\n",
"measure q[9] -> c0[2];\n",
"measure q[8] -> c0[1];\n",
"\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEMCAYAAADeYiHoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8VPXZ9/HPRcJSxAVFrBAxQGQLRCBB4XHDCuKailhAVBRBb3mgt8UqeleLVrSIUGp9QqW2IkiVYKEFXEAUSsW2CiiLJCpB5IYgCiKIWsnG9fxxJuMkTEgCSSaB7/v14sXMmd85c81JMtf5rcfcHRERkdLqxToAERGpnZQgREQkKiUIERGJSglCRESiUoIQEZGolCBERCQqJQgREYlKCUJERKJSghARkajiYx3AkWjWrJknJibGOgwRkTrl3Xff/cLdTy2vXJ1OEImJiaxevTrWYYiI1Clm9r8VKacmJhERiUoJQkREolKCEBGRqJQgREQkKiUIERGJSglCRESiUoIQEZGolCBERCQqJQgREYlKCUJERKJSghARkaiUIEREJColCBERiUoJQkREolKCEBGRqJQgREQkKiUIAWDx4sW0b9+epKQkHnvssTLLzZ07FzMrcaOmCRMmkJSURPv27XnttdcA+Oijj+jatWv43wknnMATTzwBwD333EOHDh1ISUmhf//+7N27F4DXX3+d1NRUunTpQmpqKsuWLQPg66+/LnGsZs2a8bOf/ay6ToWIFHP3OvsvNTXV5cgVFhZ6mzZt/OOPP/a8vDxPSUnxrKysg8rt27fPL7jgAj/33HN91apV7u6elZXlKSkpvn//ft+8ebO3adPGCwsLDzr+aaed5lu2bHF399dee80LCgrc3X3s2LE+duxYd3d/7733fPv27e7u/v7773uLFi2ixtu9e3f/xz/+UTUfXuQYBKz2CnzHqgYhrFy5kqSkJNq0aUODBg0YPHgwCxYsOKjcL3/5S8aOHUujRo3C2xYsWMDgwYNp2LAhrVu3JikpiZUrV5bYb+nSpbRt25YzzzwTgEsvvZT4+OButz179iQ3NxeAbt260aJFCwCSk5PZv38/eXl5JY6Vk5PDzp07ueCCC6ruBIhIVEoQwvbt2znjjDPCzxMSEti+fXuJMmvWrGHbtm1cddVVld43MzOT66+/Pup7T58+ncsvv/yg7fPmzaNbt240bNiwxPbZs2czaNAgzKxiH05EDlt8rAOQ2AtqnCVFfgEfOHCAMWPGMGPGjErvm5+fz8KFC5kwYcJB5R599FHi4+O54YYbSmzPysri3nvvZcmSJQftk5mZyaxZsw75eUSkaihBCAkJCWzbti38PDc3N9zUA0En8YYNG+jduzcAn332Genp6SxcuLDcfRctWkT37t057bTTSrznzJkzefnll1m6dGmJhJKbm0v//v157rnnaNu2bYl91q1bR2FhIampqVXyuUWkHBXpqKit/9RJXTUKCgq8devWvnnz5nAn9YYNG8osf9FFF4U7qTds2FCik7p169YlOqkHDRrk06dPL7H/okWLvGPHjr5z584S2/fs2eMpKSk+d+7cqO977733+rhx4w73Y4pICOqkloqKj48nIyODfv360bFjRwYOHEhycjLjxo1j4cKFh9w3OTmZgQMH0qlTJy677DKmTp1KXFwcAP/5z394/fXXufbaa0vsM3r0aL7++mv69u1L165dueOOOwDIyMhg06ZNjB8/PjykdefOneH9XnzxxTL7MkSk6plHaUOuK9LS0jxyPL6IiJTPzN5197TyyqkGISIiUSlBiIhIVEoQIiISlRKEiIhEpQQhIiJRKUGIiEhUShAiIhKVEoSIiESlBCEiIlHVWIIws8vM7CMz22Rm9x2i3HVm5mZW7iw/ERGpPjWymquZxQFTgb5ALrDKzBa6e3apcscD/w28UxNxSdU4e/Lgw9533d2ZVRiJiFSlmqpBnANscvfN7p4PZAI/jlJuPPA4sL+G4hIRkTLUVIJoCWyLeJ4b2hZmZt2AM9z95RqKSUREDqGmEkS0+0OGl5E1s3rAb4Gfl3sgs9vNbLWZrd61a1cVhigiIpFqKkHkAmdEPE8APo14fjzQGVhuZluAnsDCaB3V7v60u6e5e9qpp55ajSGLiBzbaipBrALOMrPWZtYAGAyE70Tj7l+5ezN3T3T3ROBtIN3ddbMHEZEYqZEE4e6FwGjgNeAD4EV3zzKzh80svSZiEBGRyqmRYa4A7v4q8GqpbePKKNu7JmISEZGyaSa1iIhEpQQhIiJRKUGIiEhUShAiIhKVEoSIiESlBCEiIlEpQYiISFRKECIiEpUShIiIRKUEISIiUSlBiIhIVEoQIiISVZ1OEF999RXt27cnKSmJxx577KDXp02bRpcuXejatSvnn38+2dnBLbBff/11UlNT6dKlC6mpqSxbtuygfdPT0+ncuXP4+T333EOHDh1ISUmhf//+7N27F4Ddu3dz8cUX06RJE0aPHl3iGHPmzCElJYXk5GTGjh1blR9dRKTa1dkEYWZxW7duZdGiRWRnZzN79uxwAig2ZMgQ3n//fdauXcvYsWO56667AGjWrBkvvfQS77//PjNnzuSmm24qsd9f//pXmjRpUmJb37592bBhA+vXr6ddu3ZMmDABgEaNGjF+/HgmT55covzu3bu55557WLp0KVlZWXz++ecsXbq0qk+DiEi1qbMJAjinUaNGtGnThgYNGjB48GAWLFhQosAJJ5wQfvztt99iFtz5tFu3brRo0QKA5ORk9u/fT15eHgDffPMNU6ZM4YEHHihxrEsvvZT4+GB19J49e5KbmwvAcccdx/nnn0+jRo1KlN+8eTPt2rWj+K53ffr0Yd68eVX12UVEql2N3Q+iGrSsX79++ElCQgLvvPPOQYWmTp3KlClTyM/Pj9qUNG/ePLp160bDhg0B+OUvf8nPf/5zGjduXOYbT58+nUGDBh0yuKSkJD788EO2bNlCQkIC8+fPJz8/v6KfTUQk5upyDcIO2mAHbWLUqFF8/PHHTJw4kUceeaTEa1lZWdx777384Q9/AGDt2rVs2rSJ/v37l/mmjz76KPHx8dxwww2HDK5p06Y89dRTDBo0iAsuuIDExMRwDUREpC6oy99YuQUFBd8/yc0NNxtFM3jwYEaOHFmifP/+/Xnuuedo27YtAP/+97959913SUxMpLCwkJ07d9K7d2+WL18OwMyZM3n55ZdZunRp1GRU2tVXX83VV18NwNNPP01cXNzhfE4RkZioyzWIVfv37+eTTz4hPz+fzMxM0tNL3t46Jycn/PiVV17hrLPOAmDv3r1ceeWVTJgwgfPOOy9cZuTIkXz66ads2bKFt956i3bt2oWTw+LFi5k4cSILFy48ZPNTpJ07dwKwZ88efv/73zNixIgj+bwiIjWqztYg3L3wrLPOol+/fhQVFXHrrbeSnJzMuHHjSEtLIz09nYyMDN544w3q169P06ZNmTlzJgAZGRls2rSJ8ePHM378eACWLFlC8+bNy3y/0aNHk5eXR9++fYGgo3ratGkAJCYmsm/fPvLz85k/fz5LliyhU6dO3Hnnnaxbtw6AcePG0a5du+o8JSIiVcrcPdYxHLa0tDRfvXp1rMM45p09efBh77vu7swqjEREKsLM3nX3tPLK1eUmJhERqUZKECIiEpUShIiIRKUEISIiUSlBiIhIVEoQIiISlRKEiIhEpQQhIiJR1dmZ1EdKk7tERA6twjUIMzvVzJqEHseZ2TAzG2pmqoWIiByFKvPl/jJwVujxo8DdwF3Ab6o6KBERib3KNDG1A9aGHt8I/B/gGyALGFPFcYmISIxVJkEUAQ3MrB3wlbtvDTUvNSlnPxERqYMqkyAWAS8CpwDFvbSdgO1VHZSIiMReZRLECOBmoACYFdrWDHioimMSEZFaoMKd1O6e5+5PAzOBU0Pblrt7hcZ8mtllZvaRmW0ys/uivH6Hmb1vZmvN7C0z61TR2EREpOpVZpjrSWb2ArAf2BTalm5mj1Rg3zhgKnA5QbPU9VESwAvu3sXduwKPA1MqGpuIiFS9ygxznQZ8BZwJ5Ie2/RsYVIF9zwE2uftmd88n6MP4cWQBd98X8fQ4oO7e6k5E5ChQmT6IS4AW7l5gZg7g7rvMrOwbOX+vJbAt4nkucG7pQmY2imBuRQPgR9EOZGa3A7cDtGrVqhLhi4hIZVSmBvEVQad0mJm1AnZUYF+Lsu2gGoK7T3X3tsC9wAPRDuTuT7t7mrunnXrqqRV4axERORyVSRB/AuaZ2cVAPTPrRdBhPa0C++YCZ0Q8TwA+PUT5TOCaSsQmIiJVrDIJYiLBPIipQH1gOrAA+F0F9l0FnGVmrc2sATAYWBhZwMzOinh6JZBTidhERKSKVbgPwt0deCL0r1LcvdDMRgOvAXHAdHfPMrOHgdXuvhAYbWZ9COZZ7CGYcyEiIjFyyARhZhe6+5uhx1E7jQHcfVl5b+TurwKvlto2LuLxneVGKyIiNaa8GsTvgc6hx8+UUcaBNlUWkYiI1AqHTBDu3jnicevqD0dERGqLysykXlDG9r9WXTgiIlJbVGYU08VlbO9dBXGIiEgtU+4optBIIwjuBfFwqZfbAP9b5VGJiEjMVWSYa/EEt3qUnOzmBMtnPFTFMYmISC1QboJw92EAZvYvd/9j9YckIiK1QXnzIBLdfUvo6VIzizqc1d03V3VgIiISW+XVIN4Hjg893kTQrFR64T0nmB0tIiJHkfLmQRwf8bgyI55ERKSO05e+iIhEVV4fxAoqcGc3d7+wyiISEZFaobw+iD/VSBQiIlLrlNcHMbOmAhERkdqlvCamm9x9VujxrWWVc/fpVR2YiIjEVnlNTNcDs0KPbyqjjBPcXU5ERI4i5TUxXRHxuKzF+kRE5ChU4VuOApjZSQT3i24BfAq84u57qyMwERGJrcrcD+JHwBbgv4EewE+BLWZ2SfWEJiIisVSZGkQGcLu7v1i8wcx+AkwFOlR1YCIiEluVmUndAphXatvfgB9WXTgiIlJbVCZBPAeMKrVtZGi7iIgcZSqz1EY9YKSZjQW2Ay2B04C3qzVCERGJicoutaEbBomIHCO01IaIiERV2XkQpwHnAM2IuHGQltoQETn6VDhBmNk1wJ+BHCAZyAI6A2+hpTZERI46lRnF9AgwzN27Ad+G/r8deLdaIhMRkZiqTIJo5e5/KbVtJjC0CuMREZFaojIJYmeoDwKCJTZ6AW2BuKoPS0REYq0yCeKPwPmhx78F/g6sA35f1UGJiEjsVbiT2t0nRjx+zsyWA8e5+wfVEZiIiMRWZYe5xgE9+X65b82iFhE5SlVmmGsKMB9oBOQCCcB+M+vv7uuqKT4REYmRyvRBTCdY2rulu59DsBZTBpoDISJyVKpMgmgHPOHuDhD6/3fAWRXZ2cwuM7OPzGyTmd0X5fW7zCzbzNab2VIzO7MSsYmISBWrTIJ4FUgvte1q4JXydgz1XUwFLgc6AdebWadSxdYAae6eAswFHq9EbCIiUsXKW+57Ft8v9x0HZJrZu8A24AwgFVhQgfc5B9jk7ptDx80EfgxkFxdw979HlH8buLGCn0FERKpBeZ3Um0o93xDxOBt4rYLv05IgqRTLBc49RPnhwKIKHltERKpBect9/6qK3seibPMo2zCzG4E04KIyXr+dYA0oWrVqVUXhiYhIaZXpg8DMLjaz6Wb2Wuj/H1Vw11yCJqliCQTzKEofvw9wP5Du7nnRDuTuT7t7mrunnXrqqZUJX0REKqHCCcLMRgBzgM+AvwI7gBfM7LYK7L4KOMvMWptZA2AwsLDU8bsBfyBIDjsrGpeIiFSPysykHgv0jZwUZ2ZzgHmUcytSdy80s9EEfRZxwHR3zzKzh4HV7r4QmAQ0Af5iZgBb3b30qCkREakhlWliOoWIUUchHwEnV2Rnd3/V3du5e1t3fzS0bVwoOeDufdz9NHfvGvqn5CB10uLFi2nfvj1JSUk89thjB73+5ptv0r17d+Lj45k7d26J17Zu3cqll15Kx44d6dSpE1u2bAEgIyODpKQkzIwvvvgiXP7DDz+kV69eNGzYkMmTJ4e379+/n3POOYezzz6b5ORkHnzwwfBrw4cP5+yzzyYlJYXrrruOb775porPgBwtKpMg3gKmmFljADM7juCq/1/VEZhIXVRUVMSoUaNYtGgR2dnZzJ49m+zsktdVrVq1YsaMGQwZMuSg/YcOHco999zDBx98wMqVK2nevDkA5513Hm+88QZnnlly/ujJJ5/Mk08+yd13311ie8OGDVm2bBnr1q1j7dq1LF68mLffDpZO++1vf8u6detYv349rVq1IiMjoypPgRxFKtPEdAcwG/jKzL4kqDn8C7i+OgITqYtWrlxJUlISbdq0AWDw4MEsWLCATp2+nxeamJgIQL16Ja/PsrOzKSwspG/fvgA0adIk/Fq3bt2ivl/z5s1p3rw5r7xScr6qmYX3LygooKCggFDTLSeccAIA7s53330X3i5SWoVqEBb8Bv0A6AO0JphB3drdL3L3g0YjiRyrtm/fzhlnfD9gLyEhge3bt1do340bN3LSSSdx7bXX0q1bN+655x6KiooOO5aioiK6du1K8+bN6du3L+ee+/3Uo2HDhvHDH/6QDz/8kJ/+9KeH/R5ydKtQggitu/Q+cMDdc919pbvnVm9oInVPaKmyEip6hV5YWMiKFSuYPHkyq1atYvPmzcyYMeOwY4mLi2Pt2rXk5uaycuVKNmz4fp7rs88+y6effkrHjh2ZM2fOYb+HHN0q0wexhmDBPhEpQ0JCAtu2fb9oQG5uLi1atKjwvt26daNNmzbEx8dzzTXX8N577x1xTCeddBK9e/dm8eLFJbbHxcUxaNAg5s2bd8TvIUenyiSI5cBiM3vIzIab2a3F/6opNpE6p0ePHuTk5PDJJ5+Qn59PZmYm6ekVG5DXo0cP9uzZw65duwBYtmxZib6Lyti1axd79+4F4LvvvuONN96gQ4cOuDubNgUr6Lg7L730Eh06dDis95CjX2U6qc8DPuHgJTAc3RNCBID4+HgyMjLo168fRUVF3HrrrSQnJzNu3DjS0tJIT09n1apV9O/fnz179vDSSy/x4IMPkpWVRVxcHJMnT+aSSy7B3UlNTeW224J5qE8++SSPP/44n332GSkpKVxxxRX86U9/4rPPPiMtLY19+/ZRr149nnjiCbKzs9mxYwc333wzRUVFHDhwgIEDB3LVVVdx4MABbr75Zvbt24e7c/bZZ/PUU0/F+KxJbWXR2kxLFAiGtT4AdAHeA35d1jIYNS0tLc1Xr159WPuePXnwYb/vurszD3vfo5HOpUjdYmbvuntaeeUq0sSUQTBq6QNgADD50MVFRORoUJEEcTlwqbuPDT2+qnpDEhGR2qAiCeI4d98B4O7bgBOrNyQREakNKtJJHW9mF/P9PR1KP8fdl1VHcCIiEjsVSRA7KTlKaXep5w60qcqgRI5Vh9vhr85+qQ7lJgh3T6yBOEREpJap1B3lRETk2KEEISIiUSlBiIhIVEoQIiISlRKEiIhEpQQhIiJRKUGIiEhUShAiIhKVEoSIiESlBCEiIlEpQYiISFRKECIiEpUShIiIRKUEISIiUSlBiIhIVEoQIiISlRKEiIhEpQQhIiJRKUGIiEhUShAiIhKVEoSIiESlBCEiIlHVWIIws8vM7CMz22Rm90V5/UIze8/MCs3supqKS0REoquRBGFmccBU4HKgE3C9mXUqVWwrcAvwQk3EJCIihxZfQ+9zDrDJ3TcDmFkm8GMgu7iAu28JvXaghmISEZFDqKkmppbAtojnuaFtlWZmt5vZajNbvWvXrioJTkREDlZTCcKibPPDOZC7P+3uae6eduqppx5hWCIiUpaaShC5wBkRzxOAT2vovUVE5DDUVIJYBZxlZq3NrAEwGFhYQ+8tIiKHoUYShLsXAqOB14APgBfdPcvMHjazdAAz62FmucBPgD+YWVZNxCYiItHV1Cgm3P1V4NVS28ZFPF5F0PQkIiK1gGZSi4hIVEoQIiISlRKEiIhEpQQhIiJRKUGIiEhUShAiIhKVEoSIiESlBCEiIlEpQYiISFRKECJSay1evJj27duTlJTEY489dtDreXl5DBo0iKSkJM4991y2bNlS4vWtW7fSpEkTJk+eDMC2bdu4+OKL6dixI8nJyfzud78Ll123bh29evWiS5cuXH311ezbty/82vr16+nVqxfJycl06dKF/fv3AzBnzhxSUlJITk5m7Nix1XAGYksJQkRqpaKiIkaNGsWiRYvIzs5m9uzZZGdnlyjzzDPP0LRpUzZt2sSYMWO49957S7w+ZswYLr/88vDz+Ph4fvOb3/DBBx/w9ttvM3Xq1PAxR4wYwWOPPcb7779P//79mTRpEgCFhYXceOONTJs2jaysLJYvX079+vXZvXs399xzD0uXLiUrK4vPP/+cpUuXVvNZqVlKECJSK61cuZKkpCTatGlDgwYNGDx4MAsWLChRZsGCBdx8880AXHfddSxduhT34FYz8+fPp02bNiQnJ4fLn3766XTv3h2A448/no4dO7J9+3YAPvroIy688EIA+vbty7x58wBYsmQJKSkpnH322QCccsopxMXFsXnzZtq1a0fxfWn69OkT3udooQQhIrXS9u3bOeOM728jk5CQEP4yj1YmPj6eE088kd27d/Ptt98yceJEHnzwwTKPv2XLFtasWcO5554LQOfOnVm4MLgLwV/+8he2bQtugrlx40bMjH79+tG9e3cef/xxAJKSkvjwww/ZsmULhYWFzJ8/P7zP0UIJQkRqpeKaQCQzq1CZBx98kDFjxtCkSZOox/7mm28YMGAATzzxBCeccAIA06dPZ+rUqaSmpvL111/ToEEDIGhieuutt3j++ed56623+Nvf/sbSpUtp2rQpTz31FIMGDeKCCy4gMTGR+PgaWyC7Rhxdn0ZEjhoJCQklrshzc3Np0aJF1DIJCQkUFhby1VdfcfLJJ/POO+8wd+5cxo4dy969e6lXrx6NGjVi9OjRFBQUMGDAAG644Qauvfba8LE6dOjAkiVLgKDW8Morr4Tf46KLLqJZs2YAXHHFFbz33ntccsklXH311Vx99dUAPP3008TFxVXrOalpqkGISK3Uo0cPcnJy+OSTT8jPzyczM5P09PQSZdLT05k5cyYAc+fO5Uc/+hFmxooVK9iyZQtbtmzhZz/7Gb/4xS8YPXo07s7w4cPp2LEjd911V4lj7dy5E4ADBw7wyCOPcMcddwDQr18/1q9fz3/+8x8KCwv5xz/+QadOnUrss2fPHn7/+98zYsSIaj0nNU0JQkRqpfj4eDIyMujXrx8dO3Zk4MCBJCcnM27cuHBfwfDhw9m9ezdJSUlMmTIl6lDYSP/85z+ZNWsWy5Yto2vXrnTt2pVXXw3uYzZ79mzatWtHhw4daNGiBcOGDQOgadOm3HXXXfTo0YOuXbvSvXt3rrzySgDuvPNOOnXqxHnnncd9991Hu3btqvGM1DyL1oZXV6Slpfnq1asPa9+zJw8+7Pddd3fmYe97NNK5rDqHey4rex4XL17MnXfeSVFRESNGjOC+++4r8XpeXh5Dhw7l3Xff5ZRTTmHOnDkkJiby+uuvc99995Gfn0+DBg2YNGkSP/rRjwDIz89n9OjRLF++nHr16vHoo48yYMAApk2bxtSpU4mLi6NJkyY8/fTT4Svw9evX81//9V/s27ePevXqsWrVKgoKCrjgggvCseTm5nLjjTfyxBNPHNa5kYOZ2bvunlZeOfVBiBxjiucXvP766yQkJNCjRw/S09PDX9pQcn5BZmYm9957L3PmzKFZs2a89NJLtGjRgg0bNtCvX7/wyKJHH32U5s2bs3HjRg4cOMCXX34JwJAhQ8LNNQsXLuSuu+5i8eLF4fkFs2bN4uyzz2b37t3Ur1+fRo0asXbt2nAsqampJfoKpOaoiUnkGHMk8wu6desW7ihOTk5m//795OXlAcEooP/5n/8BoF69euFO3eJRQgDffvtteCRSWfMLIuXk5LBz584SNQqpOapB1IDDrc7v3r2b6667jlWrVnHLLbeQkZER3mf27Nn8+te/xsxo0aIFf/7zn2nWrBkPPfQQf/zjH8OTd379619zxRVXsGXLFjp27Ej79u0B6NmzJ9OmTQOgd+/e7Nixgx/84AdA8IfbvHnzmjg1EgPR5he88847ZZaJnF9Q/KUPMG/ePLp160bDhg3Zu3cvAL/85S9Zvnw5bdu2JSMjg9NOOw2AqVOnMmXKFPLz81m2bBlQcn7Brl27GDx48EHLVcyePZtBgwYdNLy1Imqque5ophpENTuS5QIaNWrE+PHjw+vIFCssLOTOO+/k73//O+vXryclJaVE8hgzZgxr165l7dq1XHHFFeHtbdu2DW8vTg7Fnn/++fBrSg5HtyOZX1AsKyuLe++9lz/84Q9A8DuZm5vLeeedx3vvvUevXr24++67w+VHjRrFxx9/zMSJE3nkkUfC+0SbXxApMzOT66+//vA/rBwRJYhqdiTV+eOOO47zzz+fRo0alSjv7rg73377Le7Ovn37DhoffrQ63MXbdu/ezcUXX0yTJk0YPXp0iX169+5N+/btw6NaiocuArz44ot06tSJ5ORkhgwZAsDatWvDC7elpKQwZ86ccPlbbrmF1q1bh48V2ZZeW1RmfgFQYn5Bcfn+/fvz3HPP0bZtWyBoHmrcuDH9+/cH4Cc/+QnvvffeQe89ePBg5s+fH36P4vkFjRs3Ds8vKLZu3ToKCwtJTU2twk8vlaEEUc2OZLmAstSvX5+nnnqKLl260KJFC7Kzsxk+fHj49YyMDFJSUrj11lvZs2dPePsnn3xCt27duOiii1ixYkWJYw4bNoyuXbsyfvz4qFePtUF11MaKRatB5eTkMGHCBP75z3+SlZUVHkXTuHFjnnvuObKysli8eDE/+9nPwk0sAJMmTQofq2vXrtVxKo7Ikcwv2Lt3L1deeSUTJkzgvPPOC5c3M66++mqWL18OwNKlS8Od3jk5OeFyr7zyCmeddRZw6PkFEDQvqfYQW0oQ1awqqvOlFRQU8NRTT7FmzRo+/fRTUlJSmDDNRyEoAAATMElEQVRhAgAjR47k448/Zu3atZx++un8/Oc/B4JFyrZu3cqaNWuYMmUKQ4YMCS9n/Pzzz/P++++zYsUKVqxYwaxZsw7781an6qiNHcof//hHRo0aRdOmTQHCiaNdu3bhL7kWLVrQvHlzdu3aVRUfsUYcyfyCjIwMNm3axPjx4w+qcU2cOJGHHnqIlJQUZs2axW9+85vwPsnJyXTt2pUpU6aEE8+h5hdAUHtTgogtdVJXsyNZLqAsxc0WxdX7gQMHhv+AizsFAW677TauuuoqABo2bEjDhg2BYNhg27Zt2bhxI2lpabRs2RIIVrccMmQIK1euZOjQoUf60atcVXWuRjNs2DDi4uIYMGAADzzwAGbGxo0bATjvvPMoKirioYce4rLLLiux38qVK8nPzw//LADuv/9+Hn74YS655BIee+yx8HmvTa644ooS/VMADz/8cPhxo0aN+Mtf/nLQfg888AAPPPBA1GOeeeaZvPnmmwdtj7znQmk33ngjN954Y9TXNm/eXOZ+UjNUg6hmR1KdL0vLli3Jzs4OX7W+/vrrdOzYEYAdO3aEy/3tb3+jc+fOAOzatYuioiIg+MPLycmhTZs2FBYW8sUXXwBBzeTll18O71PbVEdtDMquQRUWFpKTk8Py5cuZPXs2I0aMKNGUtGPHDm666SaeffZZ6tUL/pQmTJjAhx9+yKpVq/jyyy+ZOHFipT+nSG2hGkQ1i6zOFxUVceutt4ar82lpaaSnpzN8+HBuuukmkpKSOPnkk8nM/H6YXWJiIvv27SM/P5/58+ezZMkSOnXqxIMPPsiFF15I/fr1OfPMM5kxYwYAY8eOZe3atZgZiYmJ4VEmb775JuPGjSM+Pp64uDimTZvGySefzLfffku/fv0oKCigqKiIPn36cNttt8XiVJWrOmpjQJk1qISEBHr27En9+vVp3bo17du3Jycnhx49erBv3z6uvPJKHnnkEXr27Bk+1umnnw4ENbZhw4aV2edRl2nmfEmHO4wdgguKZ555hri4OJ588kn69evH/v37ufDCC8nLy6OwsJDrrruOX/3qVwAsW7aMu+++m/z8fFJTU3nmmWeIj4/H3bnzzjt59dVXady4MTNmzAjf92Lr1q2MGDGCbdu2YWbhpUUqQgmiBhxudR446BaKxe64447w7NRIZfUfDBgwgAEDBhy0/bjjjuPdd98tK/RaJbI21rJlSzIzM3nhhRdKlCmujfXq1atCtbHCwkL27t1Ls2bNwjWoPn36AHDNNdcwe/ZsbrnlFr744gs2btxImzZtyM/Pp3///gwdOpSf/OQnJY63Y8cOTj/9dNyd+fPn19ramFSNI5mVnp2dTWZmJllZWXz66af06dOHjRs30rBhQ5YtW0aTJk0oKCjg/PPP5/LLL+ecc87h5ptvZunSpbRr145x48Yxc+ZMhg8fzqJFi8jJySEnJ4d33nmHkSNHhptfhw4dyv3330/fvn355ptvwrXdilATk9QZR7p4W2JiInfddRczZswgISGB7Oxs8vLy6NevHykpKXTt2pWWLVuGa1D9+vXjlFNOoVOnTlx88cVMmjSJU045hRdffJE333yTGTNmHDSc9YYbbqBLly506dKFL774osz2ejk6HMnAiQULFjB48GAaNmxI69atSUpKYuXKlZhZ+D4WBQUFFBQUYGbs3r2bhg0bhhcEjLzr3YIFCxg6dChmRs+ePdm7dy87duwgOzubwsJC+vbtC0CTJk1o3LhxhT+fahBSp1RHbaysGpSZMWXKFKZMmVJi+6E6VotnCcux4UgGTmzfvr1E82TkEPiioiJSU1PZtGkTo0aN4txzz8XdKSgoYPXq1aSlpTF37txwk2tZw+lzc3M56aSTuPbaa/nkk0/o06dPuSveRlKCqOW0XIBI7XUkAycOtW9cXBxr165l79699O/fnw0bNtC5c2cyMzMZM2YMeXl5XHrppeE72JV1rMLCQlasWMGaNWto1aoVgwYNCvdXVoQShBwzlGylqh3JwImK7HvSSSfRu3dvFi9eTOfOnenVq1d4kuuSJUvCQ7HLOlZBQQHdunWjTZs2QNCv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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"q = QuantumRegister(3)\n",
"c = ClassicalRegister(3)\n",
"qft3 = QuantumCircuit(q, c)\n",
"\n",
"# prepare |000> + |100>\n",
"qft3.h(q[0])\n",
"\n",
"qft(qft3, q, 3)\n",
"for i in range(3):\n",
" qft3.measure(q[i], c[i])\n",
"\n",
"backend = 'ibmq_20_tokyo'\n",
"compiled = compile(qft3, backend)\n",
"job_exp = execute(qft3, backend)\n",
"\n",
"print(qft3.qasm())\n",
"print(compiled['circuits'][0]['compiled_circuit_qasm'])\n",
"print(compiled['circuits'][0]['config']['layout'])\n",
"\n",
"while not job_exp.done:\n",
" time.sleep(1)\n",
" \n",
"result = job_exp.result()\n",
"print(result.get_ran_qasm(qft3.name))\n",
"plot_histogram(result.get_counts())"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q1[3];\n",
"creg c1[3];\n",
"h q1[0];\n",
"x q1[2];\n",
"h q1[0];\n",
"cu1(1.57079632679490) q1[1],q1[0];\n",
"h q1[1];\n",
"cu1(0.785398163397448) q1[2],q1[0];\n",
"cu1(1.57079632679490) q1[2],q1[1];\n",
"h q1[2];\n",
"measure q1[0] -> c1[0];\n",
"measure q1[1] -> c1[1];\n",
"measure q1[2] -> c1[2];\n",
"\n",
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q[10];\n",
"creg c1[3];\n",
"u3(3.14159265358979,0.392699081698724,3.14159265358979) q[9];\n",
"u1(0.785398163397448) q[8];\n",
"cx q[8],q[4];\n",
"u1(-0.785398163397448) q[4];\n",
"cx q[8],q[4];\n",
"u2(0,3.14159265358979) q[8];\n",
"u1(0.785398163397448) q[4];\n",
"cx q[9],q[4];\n",
"u1(-0.392699081698724) q[4];\n",
"cx q[9],q[4];\n",
"u1(0.785398163397448) q[9];\n",
"u1(0.392699081698724) q[4];\n",
"cx q[9],q[8];\n",
"measure q[4] -> c1[0];\n",
"u1(-0.785398163397448) q[8];\n",
"cx q[9],q[8];\n",
"u2(0,3.14159265358979) q[9];\n",
"u1(0.785398163397448) q[8];\n",
"measure q[9] -> c1[2];\n",
"measure q[8] -> c1[1];\n",
"\n",
"[[('q1', 0), ('q', 4)], [('q1', 1), ('q', 8)], [('q1', 2), ('q', 9)]]\n",
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q[10];\n",
"creg c1[3];\n",
"u3(3.14159265358979,0.392699081698724,3.14159265358979) q[9];\n",
"u1(0.785398163397448) q[8];\n",
"cx q[8],q[4];\n",
"u1(-0.785398163397448) q[4];\n",
"cx q[8],q[4];\n",
"u2(0,3.14159265358979) q[8];\n",
"u1(0.785398163397448) q[4];\n",
"cx q[9],q[4];\n",
"u1(-0.392699081698724) q[4];\n",
"cx q[9],q[4];\n",
"u1(0.785398163397448) q[9];\n",
"u1(0.392699081698724) q[4];\n",
"cx q[9],q[8];\n",
"measure q[4] -> c1[0];\n",
"u1(-0.785398163397448) q[8];\n",
"cx q[9],q[8];\n",
"u2(0,3.14159265358979) q[9];\n",
"u1(0.785398163397448) q[8];\n",
"measure q[9] -> c1[2];\n",
"measure q[8] -> c1[1];\n",
"\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEMCAYAAADTfFGvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8FGW28PHfITEwgAsBdIQEY0hADEuA4PKKIiqEZQxG8YK7IjL6whXhFeS6wLgNbiNcB5RBR0FGDYgCQQFRUBBHlgBhVQxCNEFGUFZBCInn/aMqTXfSWRqS7jSe7+eTT6qfeqr6pJL0qapnKVFVjDHGmMqqFeoAjDHGhBdLHMYYYwJiicMYY0xALHEYY4wJiCUOY4wxAbHEYYwxJiCWOIwxxgTEEocxxpiAWOIwxhgTkMhQB1AdGjVqpHFxcaEOwxhjwsrq1at/UtXGFdU7JRNHXFwcWVlZoQ7DGGPCioh8V5l6dqvKGGNMQCxxGGOMCYglDmOMMQGxxGGMMSYgljiMMcYExBKHMcaYgFjiMMYYExBLHMYYYwIStMQhIj1EZIuIbBWRUeXU6ysiKiIpXmX/4263RURSgxOxMcYYf4IyclxEIoCJQDcgH1glIpmqurlEvdOB+4EVXmUXAv2BJKAJ8ImItFDVomDEbowxxlewrjguAraq6jZVLQAygD5+6j0JPAcc8SrrA2So6lFV3Q5sdfdnjDEmBIKVOJoCeV6v890yDxFpD8Sq6geBbmuMMSZ4gpU4xE+ZelaK1ALGAf8v0G299jFIRLJEJGv37t0nHKgxxpjyBStx5AOxXq9jgB+8Xp8OtAY+E5Fc4BIg020gr2hbAFR1sqqmqGpK48YVzgpsjDHmBAUrcawCEkXkfBGJwmnszixeqar7VbWRqsapahywHEhT1Sy3Xn8RqS0i5wOJwMogxW2MMaaEoPSqUtVCERkCfAREAK+r6iYReQLIUtXMcrbdJCIzgM1AITDYelQZY0zoBG0ch6rOU9UWqtpcVZ92y0b7SxqqeqV7tVH8+ml3u5aqOj9YMRtjaqYFCxbQsmVLEhISeOaZZ0qtnzRpEm3atCE5OZnOnTuzebPT8z83N5c//OEPJCcnk5yczL333uvZ5sorr6Rly5aedbt27fLZ58yZMxERn4fErV+/nksvvZSkpCTatGnDkSNOh9Dp06fTtm1bkpKSGDlyZHUcgtBS1VPuq2PHjmqMOTUVFhZqfHy8fvvtt3r06FFt27atbtq0yafO/v37Pctz5szR1NRUVVXdvn27JiUl+d1vly5ddNWqVX7XHThwQC+//HK9+OKLPXWOHTumbdq00ezsbFVV/emnn7SwsFB/+uknjY2N1V27dqmq6u23366ffPLJyf3QQYJzB6jCz1ibcsQYE1ZWrlxJQkIC8fHxREVF0b9/f+bMmeNT54wzzvAsHzp0CBF/nTMr77HHHmPkyJHUqVPHU7Zw4ULatm1Lu3btAGjYsCERERFs27aNFi1aUNxJ55prruG99947qfevaSxxGGPCyo4dO4iNPd7RMiYmhh07dpSqN3HiRJo3b87IkSN56aWXPOXbt2+nffv2dOnShc8//9xnm7vuuovk5GSefPJJnBNwWLt2LXl5efzpT3/yqfvNN98gIqSmptKhQweee+45ABISEvj666/Jzc2lsLCQ2bNnk5eXx6nEEocxJqwUf6B783dFMXjwYL799lueffZZnnrqKQDOPfdcvv/+e9auXcuLL77IzTffzIEDBwB466232LBhA59//jmff/4506ZN47fffmPYsGH87W9/K7X/wsJCli1bxltvvcWyZcuYNWsWixYtokGDBrzyyiv069ePyy+/nLi4OCIjg9IPKWgscRhjwkpMTIzPGXx+fj5NmjQps37//v2ZPXs2ALVr16Zhw4YAdOzYkebNm/PNN98A0LSpMyHF6aefzs0338zKlSs5ePAgGzdu5MorryQuLo7ly5eTlpZGVlYWMTExdOnShUaNGlG3bl169erFmjVrALj22mtZsWIFX375JS1btiQxMbFajkWoWOIwxoSVTp06kZOTw/bt2ykoKCAjI4O0tDSfOjk5OZ7lDz/80PPBvXv3boqKnN7827ZtIycnh/j4eAoLC/npp58AOHbsGB988AGtW7fmzDPP5KeffiI3N5fc3FwuueQSMjMzSUlJITU1lfXr13P48GEKCwtZsmQJF154IYCnR9bevXt5+eWXGThwYLUfl2A6ta6fjDGnvMjISCZMmEBqaipFRUUMGDCApKQkRo8eTUpKCmlpaUyYMIFPPvmE0047jQYNGjB16lQAli5dyujRo4mMjCQiIoJJkyYRHR3NoUOHSE1N5dixYxQVFXHNNddwzz33lBtH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2b9/P9HR0axYsYKRI0cSFxfH+PHj+etf/8qECROIiYkhJiaGiy++GHBub61ZswaAqVOncv311wNw4403ehrHi2VkZJS6TVUcz9lnn016enqpbYwxVStoiUNEeojIFhHZKiKj/KyvLSLT3fUrRCTOLY8TkV9FJNv9mhSsmA106tSJnJwctm/fTkFBARkZGaSlpfnUSUtLY+rUqQDMnDmTq666ChHh888/Jzc3l9zcXB544AEefvhhhgwZwh//+EdiY2PZsmULAIsWLeLCCy8EnCSwZMkSABYvXkxiYqLnffbv38+SJUvo06ePp+zQoUNu/HvmAAAYnklEQVQcPHjQs7xw4UJat25dfQfEmACcaI/ElStXenoRtmvXjlmzZnm2KatH4rvvvktSUhK1atXy6SRS1r6OHDnCRRddRLt27UhKSip1S7k8QXl0rIhEABOBbkA+sEpEMlXVu3vO3cBeVU0Qkf7As0A/d923qpocjFiNr8jISCZMmEBqaipFRUUMGDCApKQkRo8eTUpKCmlpadx9993cdtttJCQkEB0dTUZGRoX7/fvf/84tt9xCQUEB8fHxvPHGGwC8+uqrDB06lMLCQurUqePTZjFr1iy6d+9OvXr1PGU//vgj6enpgHO1c/PNN9OjR48qPgrGBK64R+LHH39MTEwMnTp1Ii0tzXOSBL49EjMyMnjooYeYPn06rVu3Jisri8jISHbu3Em7du249tpriYyM9PRInDlzJgUFBRw+fBiA1q1b8/777/PnP//ZJ46y9lW7dm0WL15M/fr1OXbsGJ07dwaoRyUE65njFwFbVXUbgIhkAH0A78TRB/iLuzwTmCAlb6abkOjVqxe9evXyKXviiSc8y3Xq1OHdd98tdx9/+ctffF4nJyf77TrbuXNnVq9e7Xcfd955J3feeadPWXx8POvWrSv3vU1gFixYwNChQykqKmLgwIGMGuV7g+Do0aPcfvvtrF69moYNGzJ9+nTi4uJYuXIlgwYNApx2r7/85S+kp6eTl5fH7bffzn/+8x9q1arFoEGDGDp0KOB0s547dy5RUVE0b96cN954g7POOouPP/6YUaNGUVBQQFRUFM8//zxXXXUVBw8e5PLLL/fEkp+fz6233sr48eODd4AqybtHIuDpkeidOObMmeP53+jbty9DhgxBValbt66nzpEjRzztisU9EqdMmQI4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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"q = QuantumRegister(3)\n",
"c = ClassicalRegister(3)\n",
"qft3 = QuantumCircuit(q, c)\n",
"\n",
"# prepare |001> + |101>\n",
"qft3.h(q[0])\n",
"qft3.x(q[2])\n",
"\n",
"qft(qft3, q, 3)\n",
"for i in range(3):\n",
" qft3.measure(q[i], c[i])\n",
"\n",
"backend = 'ibmq_20_tokyo'\n",
"compiled = compile(qft3, backend)\n",
"job_exp = execute(qft3, backend)\n",
"\n",
"print(qft3.qasm())\n",
"print(compiled['circuits'][0]['compiled_circuit_qasm'])\n",
"print(compiled['circuits'][0]['config']['layout'])\n",
"\n",
"while not job_exp.done:\n",
" time.sleep(1)\n",
" \n",
"result = job_exp.result()\n",
"print(result.get_ran_qasm(qft3.name))\n",
"plot_histogram(result.get_counts())"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q2[3];\n",
"creg c2[3];\n",
"h q2[0];\n",
"x q2[1];\n",
"h q2[0];\n",
"cu1(1.57079632679490) q2[1],q2[0];\n",
"h q2[1];\n",
"cu1(0.785398163397448) q2[2],q2[0];\n",
"cu1(1.57079632679490) q2[2],q2[1];\n",
"h q2[2];\n",
"measure q2[0] -> c2[0];\n",
"measure q2[1] -> c2[1];\n",
"measure q2[2] -> c2[2];\n",
"\n",
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q[10];\n",
"creg c2[3];\n",
"u1(0.392699081698724) q[9];\n",
"u3(3.14159265358979,0.785398163397448,3.14159265358979) q[8];\n",
"cx q[8],q[4];\n",
"u1(-0.785398163397448) q[4];\n",
"cx q[8],q[4];\n",
"u2(0,3.14159265358979) q[8];\n",
"u1(0.785398163397448) q[4];\n",
"cx q[9],q[4];\n",
"u1(-0.392699081698724) q[4];\n",
"cx q[9],q[4];\n",
"u1(0.785398163397448) q[9];\n",
"u1(0.392699081698724) q[4];\n",
"cx q[9],q[8];\n",
"measure q[4] -> c2[0];\n",
"u1(-0.785398163397448) q[8];\n",
"cx q[9],q[8];\n",
"u2(0,3.14159265358979) q[9];\n",
"u1(0.785398163397448) q[8];\n",
"measure q[9] -> c2[2];\n",
"measure q[8] -> c2[1];\n",
"\n",
"[[('q2', 0), ('q', 4)], [('q2', 1), ('q', 8)], [('q2', 2), ('q', 9)]]\n",
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q[10];\n",
"creg c2[3];\n",
"u1(0.392699081698724) q[9];\n",
"u3(3.14159265358979,0.785398163397448,3.14159265358979) q[8];\n",
"cx q[8],q[4];\n",
"u1(-0.785398163397448) q[4];\n",
"cx q[8],q[4];\n",
"u2(0,3.14159265358979) q[8];\n",
"u1(0.785398163397448) q[4];\n",
"cx q[9],q[4];\n",
"u1(-0.392699081698724) q[4];\n",
"cx q[9],q[4];\n",
"u1(0.785398163397448) q[9];\n",
"u1(0.392699081698724) q[4];\n",
"cx q[9],q[8];\n",
"measure q[4] -> c2[0];\n",
"u1(-0.785398163397448) q[8];\n",
"cx q[9],q[8];\n",
"u2(0,3.14159265358979) q[9];\n",
"u1(0.785398163397448) q[8];\n",
"measure q[9] -> c2[2];\n",
"measure q[8] -> c2[1];\n",
"\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEMCAYAAADTfFGvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl4FFX28PHvIWEREGXTARKEEIQkEBIJ24yCiBjEMYogsowLiwjCjMsr4G90ANEZdUZRR1BEQRGVoKKCGEAFFVzYJGEXEgEh4Cg7AwyQhPP+UZW2s5E0JN1pOJ/n6Sfdt251n64kfbpu3TolqooxxhhTUhUCHYAxxpjgYonDGGOMTyxxGGOM8YklDmOMMT6xxGGMMcYnljiMMcb4xBKHMcYYn/gtcYhINxHZLCIZIvJwIcuHisg6EUkTka9FJNptbyQi/3Pb00Rksr9iNsYYU5D44wRAEQkBtgBdgUxgJdBXVTd69amhqofd+0nAvaraTUQaAfNUtUWZB2qMMaZYoX56nbZAhqpuBRCRZOAmwJM4cpOGqxpwxhmtTp062qhRozNd3Rhjzkvff//9XlWtW1w/fyWOBsBOr8eZQLv8nURkOPAgUAm4xmtRYxFJBQ4Dj6rq0kLWHQIMAWjYsCGrVq0qveiNMeY8ICI/laSfv45xSCFtBfYoVHWSqjYBRgOPus0/Aw1VNR4nqbwjIjUKWXeKqiaoakLdusUmTGOMMWfIX4kjEwj3ehwG7D5N/2TgZgBVPaGq+9z73wM/ApeXUZzGGGOK4a/EsRJoKiKNRaQS0AeY691BRJp6PbwBSHfb67oH1xGRCKApsNUvURtjjCnAL8c4VDVbREYAC4EQYJqqbhCR8cAqVZ0LjBCRa4Es4ABwp7t6R2C8iGQDOcBQVd3vj7iNMcYU5JfpuP6WkJCgdnDcGGN8IyLfq2pCcf3szHFjjDE+scRhjDHGJ5Y4jDHG+MQShzHGGJ9Y4jDGGOMTSxzGGGN8YonDGGOMTyxxGGOM8YklDmOMMT6xxGGMMcYnljiMMcb4xBKHMX6yYMECmjVrRmRkJE899VSB5RMmTCA6OprY2Fi6dOnCTz/9dk2d0aNH06JFC1q0aMGsWbM87f3796dZs2a0aNGCgQMHkpWVBcCBAwfo0aMHsbGxtG3blvXr13vWOXjwIL169aJ58+ZERUXx3XffAbBmzRo6dOhAy5YtufHGGzl82PuinMZ4UdVz7ta6dWs1pjzJzs7WiIgI/fHHH/XEiRMaGxurGzZsyNNn8eLFevToUVVVfemll7R3796qqjpv3jy99tprNSsrS48cOaKtW7fWQ4cOqarqJ598oqdOndJTp05pnz599KWXXlJV1YceekjHjRunqqqbNm3Sa665xvM6d9xxh7766quqqnrixAk9cOCAqqomJCTol19+qaqqU6dO1UcffbSsNocpp3CqlRf7GWt7HMb4wYoVK4iMjCQiIoJKlSrRp08f5syZk6dP586dqVq1KgDt27cnMzMTgI0bN9KpUydCQ0OpVq0arVq1YsGCBQB0794dEUFEaNu2bZ51unTpAkDz5s3Zvn07v/zyC4cPH2bJkiUMGjQIgEqVKnHxxRcDsHnzZjp27AhA165dmT17dhlvFROsLHEY4we7du0iPPy3i2CGhYWxa9euIvtPnTqV66+/HoBWrVoxf/58jh07xt69e/niiy/YuXNnnv5ZWVnMmDGDbt26edb54IMPACdp/fTTT2RmZrJ161bq1q3LgAEDiI+PZ/DgwRw9ehSAFi1aMHeuc3219957r8BrGJPLEocxfqCFXPdGRArt+9Zbb7Fq1SpGjhwJwHXXXUf37t35/e9/T9++fenQoQOhoXmvwXbvvffSsWNHrrrqKgAefvhhDhw4QFxcHC+++CLx8fGEhoaSnZ3N6tWrGTZsGKmpqVSrVs1zvGXatGlMmjSJ1q1b89///pdKlSqV5iYw5xC/XAHQmPNdWFhYnm/wmZmZ1K9fv0C/zz//nL///e989dVXVK5c2dP+yCOP8MgjjwDQr18/mjb97UrLjz32GHv27OGVV17xtNWoUYPXX38dcJJW48aNady4MceOHSMsLIx27doB0KtXL0/iaN68OZ9++ikAW7Zs4ZNPPimtt2/OMbbHYYwftGnThvT0dLZt28bJkydJTk4mKSkpT5/U1FTuuece5s6dyyWXXOJpz8nJYd++fQCsXbuWtWvXct111wHw2muvsXDhQmbOnEmFCr/9Ox88eJCTJ096+nTs2JEaNWrwu9/9jvDwcDZv3gzAokWLiI6OBuDXX38F4NSpUzzxxBMMHTq0jLaGCXa2x2GMH4SGhjJx4kQSExPJyclh4MCBxMTEMGbMGBISEkhKSmLkyJEcOXKEW2+9FYCGDRsyd+5csrKyPENQNWrU4K233vIMVQ0dOpTLLruMDh06AHDLLbcwZswYNm3axB133EFISAjR0dFMnTrVE8uLL75I//79OXnyJBEREZ49k5kzZzJp0iTP8wwYMMBv28cEF7vmuDHGGMCuOW6MMaaMWOIwxhjjE78lDhHpJiKbRSRDRB4uZPlQEVknImki8rWIRHst+z93vc0ikuivmI0xxhTkl8QhIiHAJOB6IBro650YXO+oaktVjQP+CUxw140G+gAxQDfgJff5jDHGBIC/9jjaAhmqulVVTwLJwE3eHVTVu6JaNSD3qP1NQLKqnlDVbUCG+3zGGGMCwF/TcRsA3vULMoF2+TuJyHDgQaAScI3XusvyrdugkHWHAEPAmcZojDGmbPhrj6Ow2goF5gGr6iRVbQKMBh71cd0pqpqgqgl169Y9q2CNMcYUzV+JIxMI93ocBuw+Tf9k4OYzXNcYY0wZ8lfiWAk0FZHGIlIJ52D3XO8OItLU6+ENQLp7fy7QR0Qqi0hjoCmwwg8xG2OMKYRfjnGoaraIjAAWAiHANFXdICLjcS4cMhcYISLXAlnAAeBOd90NIvIusBHIBoarao4/4jbGGFOQlRwxJgi0eqbPGa+75qHkUozEnMus5IgxxpgyYYnDGGOMTyxxGGOM8YklDmOMMT6xxGGMMcYnljiMMcb4xBKHMcYYn1jiMMYY4xNLHMYYY3xiicMYY4xPLHEYY4zxiSUOY4wxPrHEYYwxxieWOIwxxvjEEocxxhifWOIwxhjjE0scxhhjfGKJwxhjjE8scRhjjPGJJQ5jjDE+scRhjDHGJ5Y4jDHG+MRviUNEuonIZhHJEJGHC1n+oIhsFJG1IrJIRC7zWpYjImnuba6/YjbGGFNQqD9eRERCgElAVyATWCkic1V1o1e3VCBBVY+JyDDgn8Bt7rL/qWqcP2I1xhhzev7a42gLZKjqVlU9CSQDN3l3UNUvVPWY+3AZEOan2IwxxvjAX4mjAbDT63Gm21aUQcB8r8dVRGSViCwTkZsLW0FEhrh9Vu3Zs+fsIzbGGFMovwxVAVJImxbaUeRPQALQyau5oaruFpEIYLGIrFPVH/M8meoUYApAQkJCoc9tjDHm7PlrjyMTCPd6HAbszt9JRK4FHgGSVPVEbruq7nZ/bgW+BOLLMlhjjDFF81fiWAk0FZHGIlIJ6APkmR0lIvHAKzhJ41ev9poiUtm9Xwf4A+B9UN0YY4wf+WWoSlWzRWQEsBAIAaap6gYRGQ+sUtW5wL+A6sB7IgKwQ1WTgCjgFRE5hZPonso3G8sYY4wf+esYB6qaAqTkaxvjdf/aItb7FmhZttEZY4wpKTtz3BhjjE8scRhjjPGJJQ5jjDE+scRhjDHGJ5Y4jDHG+MQShzHGGJ+UOHGISF0Rqe7eDxGRASJyh4hY8jHGmPOILx/684Cm7v2/Aw8BDwLPlnZQxhhjyi9fTgC8HEhz7/8J+D1wBNgAPFDKcRljjCmnfEkcOUAlEbkcOKSqO9xhquplE5oxxpjyyJfEMR94F6iNcyEmgGhgV2kHZYwxpvzyJXEMBu4EsoAZblsdYFwpx2SMMaYcK3HicK+PMcUdnroU+FlVvyyrwIwxxpRPvkzHvVhE3gGOAxluW5KIPFFWwRljjCl/fJmOOxk4BFwGnHTbvgNuK+2gjDHGlF++HOPoAtRX1SwRUQBV3SMil5RNaMYYY8ojX/Y4DuEcDPcQkYbAz6UakTHGmHLNl8TxGjBbRDoDFUSkAzAdZwjLGGPMecKXoaqncQ6MTwIqAtOAV4AXyiAuY4wx5ZQv03EVeN69GWOMOU+dNnGISEdVXeLev6aofqq6uLQDM8YYUz4Vt8fxEtDCvT+1iD4KRBT3QiLSDWdYKwR4TVWfyrf8QZyz07OBPcBAVf3JXXYn8Kjb9QlVnV7c6xljjCkbp00cqtrC637jM30REQnBOTbSFcgEVorIXFXd6NUtFUhQ1WMiMgz4J3CbiNQCxgIJOEnqe3fdA2cajzHGmDPny5njc4po/6AEq7cFMlR1q6qexCmSeJN3B1X9QlWPuQ+XAWHu/UTgM1Xd7yaLz4BuJY3bGGNM6fJlOm7nItqvLsG6DYCdXo8z3baiDMKpxnsm6xpjjClDxc6qEpHx7t1KXvdzRQA/leB1pJA2LeL1/oQzLNXJl3VFZAgwBKBhw4YlCMkYY8yZKMkeR7h7q+B1PxxnKGkncGsJniPTXSdXGLA7fycRuRZ4BEhyq/GWeF1VnaKqCaqaULdu3RKEZEpqwYIFNGvWjMjISJ566qkCy5csWcIVV1xBaGgo77//vqf9iy++IC4uznOrUqUKH330EQCDBg2iVatWxMbG0qtXL44cOQLAjh076Ny5M/Hx8cTGxpKSkgLAZ599RuvWrWnZsiWtW7dm8eLfJvLNnDmTli1bEhsbS7du3di7d29Zbg5jznvinJ5Rgo4id6vqq2f0IiKhwBacele7gJVAP1Xd4NUnHngf6Kaq6V7ttYDvgSvcptVAa1XdX9TrJSQk6KpVq84kVJNPTk4Ol19+OZ999hlhYWG0adOGmTNnEh0d7emzfft2Dh8+zDPPPENSUhK9evUq8Dz79+8nMjKSzMxMqlatyuHDh6lRowYADz74IJdccgkPP/wwQ4YMIT4+nmHDhrFx40a6d+/O9u3bSU1N5dJLL6V+/fqsX7+exMREdu3aRXZ2NvXr12fjxo3UqVOHUaNGUbVqVcaNG+evTeQXrZ7pc8brrnkoufhOxgAi8r2qJhTXr7jzOBqp6nb34SIRKXTarapuPd3zqGq2iIwAFuJMx52mqhvcoa9VqjoX+BfOZWjfExGAHaqapKr7ReRxnGQDMP50ScOUrhUrVhAZGUlEhPOr79OnD3PmzMmTOBo1agRAhQpF78C+//77XH/99VStWhXAkzRUlf/973+4v3NEhMOHDwNw6NAh6tevD0B8fLznuWJiYjh+/DgnTpygQoUKqCpHjx6ldu3aHD58mMjIyFJ698aYwhR3jGMdcKF7PwPn2EL+Yw6KkwxOS1VTgJR8bWO87l97mnWn4ZQ4MX62a9cuwsN/GykMCwtj+fLlPj9PcnIyDz74YJ62AQMGkJKSQnR0NM8++ywA48aN47rrruPFF1/k6NGjfP755wWea/bs2cTHx1O5cmUAXn75ZVq2bEm1atVo2rQpkyZN8jk+Y0zJnfYYh6pe6HW/gqqGuD+9b8UmDRO8ChvKzN07KKmff/6ZdevWkZiYmKf99ddfZ/fu3URFRTFr1izAOV5x1113kZmZSUpKCrfffjunTp3yrLNhwwZGjx7NK6+8AkBWVhYvv/wyqamp7N69m9jYWJ588klf36Yxxge+TMc156GwsDB27vxtNnRmZqZn+Kik3n33XXr06EHFihULLAsJCeG2225j9uzZAEydOpXevXsD0KFDB44fP+452J2ZmUmPHj148803adKkCQBpaWkANGnSBBGhd+/efPvtt76/UWNMiZ02cYjIUhFZUtzNX8Ea/2vTpg3p6els27aNkydPkpycTFJSkk/PMXPmTPr27et5rKpkZGR47n/88cc0b94ccKZSL1q0CIBNmzZx/Phx6taty8GDB7nhhht48skn+cMf/uB5rgYNGrBx40b27NkDOLOvoqKizuo9G2NOr7hjHK/5JQpTboWGhjJx4kQSExPJyclh4MCBxMTEMGbMGBISEkhKSmLlypX06NGDAwcO8PHHHzN27Fg2bHAmzG3fvp2dO3fSqVMnz3OqKnfeeSeHDx9GVWnVqhUvv/wyAM8++yx33303zz33HCLCG2+8gYgwceJEMjIyePzxx3n88ccB+PTTT6lfvz5jx46lY8eOVKxYkcsuu4w33njD79vJmPNJiafjBhObjmvONTYd1/hDaU3HvV1VZ7j3BxbVz531ZIwx5jxQ3FBVX2CGe//2IvooNlXWGGPOG8WVVe/udb+oIofGGGPOI75ccxwRuRi4AaiPUy/qE1U9WBaBGWOMKZ98uR7HNcB24C9AG+DPwHYR6VI2oRljjCmPfNnjmAgMUdV3cxtE5FacK/s1L+3AjDHGlE++JI76wOx8bR8CZ1Qx15z7bAqpMecmX0qOvAkMz9c2zG03xhhznijuPI6l/Ha1vQrAMBEZhXNNjQbApTjXBzfGGHOe8LXkiA1LGWPMea648zim+ysQY4wxwcHX8zguBdoCdfC6oJOVHDHGmPNHiROHiNwMvAWkAzHABqAF8DVWcsQYY84bvsyqegIYoKrxwFH35xDg+zKJzBhjTLnkS+JoqKrv5WubDtxRivEYY4wp53xJHL+6xzjAKTXSAWgC2DXHjTHmPOJL4ngVuNK9/xzwBbAGeKm0gzLGGFN+lThxqOrTqjrbvf8mcDnQWlX/VpL1RaSbiGwWkQwRebiQ5R1FZLWIZItIr3zLckQkzb3NLWnMxhhjSp+v03FDgPb8Vla9RGeNu+tNAroCmcBKEZmrqhu9uu0A7gIeKuQp/qeqcb7Eaowxpmz4UlY9Fmcq7nvASPdnuoi0KsHqbYEMVd2qqieBZOAm7w6qul1V1wKnShqTMab0LViwgGbNmhEZGclTTz1VYPmSJUu44oorCA0N5f333/e0//TTT7Ru3Zq4uDhiYmKYPHmyZ9kjjzxCeHg41atXz/NcO3bsoHPnzsTHxxMbG0tKSgoAK1asIC4ujri4OFq1asWHH37oWefgwYP06tWL5s2bExUVxXfffVfam8AUw5djHNNw9hoaqGpbnFpVEynZORwNgJ1ejzPdtpKqIiKrRGSZez6JMaYM5OTkMHz4cObPn8/GjRuZOXMmGzduzNOnYcOGvPHGG/Tr1y9Pe7169fj2229JS0tj+fLlPPXUU+zevRuAG2+8kRUrVhR4vSeeeILevXuTmppKcnIy9957LwAtWrRg1apVpKWlsWDBAu655x6ys7MBuO++++jWrRs//PADa9asISoqqiw2hTkNX4aqLgeeV1UFUFUVkReAcSVYVwpp00LaitJQVXeLSASwWETWqeqPeV5AZAjOeSU0bNjQh6c2xuRasWIFkZGRREREANCnTx/mzJlDdHS0p0+jRo0AqFAh7/fOSpUqee6fOHGCU6d+Gzxo3759oa8nIhw+fBiAQ4cOUb9+fQCqVq3q6XP8+HFEnI+Qw4cPs2TJEt544w3Pa3q/rvEPX/Y4UoCkfG03Ap+UYN1MINzrcRjOMZISUdXd7s+twJdAfCF9pqhqgqom1K1bt6RPbYzxsmvXLsLDf/tXDQsLY9euXSVef+fOncTGxhIeHs7o0aM9iaAo48aN46233iIsLIzu3bvz4osvepYtX76cmJgYWrZsyeTJkwkNDWXr1q3UrVuXAQMGEB8fz+DBgzl69Kjvb9ScldMmDhGZISJvisibOOdrJIvItyIyS0S+BWZRsvM4VgJNRaSxiFQC+gAlmh0lIjVFpLJ7vw7wB2Dj6dcyxpwJd0Ahj9xv+yURHh7O2rVrycjIYPr06fzyyy+n7T9z5kzuuusuMjMzSUlJ4fbbb/fsqbRr144NGzawcuVKnnzySY4fP052djarV69m2LBhpKamUq1atUKPw5iyVdweRwbwo3tbD/wDWIjzwb3QfbyhuBdR1WxghLvOJuBdVd0gIuNFJAlARNqISCZwK/CKiOQ+bxSwSkTW4Jw78lS+2VjGmFISFhbGzp2/HY7MzMwsdq+hMPXr1ycmJoalS5eett/UqVPp3bs3AB06dOD48ePs3bs3T5+oqCiqVavG+vXrCQsLIywsjHbt2gHQq1cvVq9e7XN85uwUV1b9sdJ6IVVNwRnu8m4b43V/Jc4QVv71vgVallYcxpiitWnThvT0dLZt20aDBg1ITk7mnXfeKdG6mZmZ1K5dmwsuuIADBw7wzTff8OCDD552nYYNG7Jo0SLuuusuNm3axPHjx6lbty7btm0jPDyc0NBQfvrpJzZv3kyjRo2oU6cO4eHhbN68mWbNmrFo0aI8x1+Mf/hyjAMR6Swi00RkofvzmrIKzBjjf6GhoUycOJHExESioqLo3bs3MTExjBkzhrlzndHllStXEhYWxnvvvcc999xDTEwMAJs2baJdu3a0atWKTp068dBDD9GypfOdb9SoUYSFhXHs2DHCwsIYN24cAM8++yyvvvoqrVq1om/fvrzxxhuICF9//TWtWrUiLi6OHj168NJLL1GnTh0AXnzxRfr3709sbCxpaWn89a9/9f+GOs9JYWOahXYUGYwzNPUa8BPQEBgE/E1Vy9WVARMSEnTVqlWBDuO81+qZPme87pqHkksxkuBn29L4g4h8r6oJxfXzZTruKKCrqq7xepFZwGzskrLGGHPe8GWoqjYFZzNtBmqVXjjGGGPKO18Sx9fABBGpCiAi1YB/Ad+WRWDGGGPKJ18Sx1Cc2U2HROQX4CDQCrinLAIzxhdnWl8JoFu3blx88cX88Y9/zNPev39/mjVrRosWLRg4cCBZWVkAzJkzh9jYWOLi4khISODrr7/2rDN9+nSaNm1K06ZNmT59uqf96quvplmzZp76S7/++mtpvn1j/KpExzjEOQPoAuBa4He41XFVNbMMYzvnLViwgPvuu4+cnBwGDx7Mww/nrTa/ZMkS7r//ftauXUtycjK9ev1Wbb5bt24sW7aMK6+8knnz5nnat23bRp8+fdi/fz9XXHEFM2bMoFKlSkyePJlJkyYREhJC9erVmTJlCtHR0Wzfvp2oqCiaNWsGOKUhJk+ezLFjx7j11lv58ccfCQkJ4cYbbyy3J1rl1lf67LPPCAsLo02bNiQlJeWZpplbX+mZZ54psP7IkSM5duwYr7zySp72/v3789ZbbwHQr18/XnvtNYYNG0aXLl1ISkpCRFi7di29e/fmhx9+YP/+/Tz22GOsWrUKEaF169YkJSVRs2ZNAN5++20SEoo97hjUzvQgvh3ADy4l2uNw61OtA06paqaqrrCkcXbOppgcOB92M2bMKNA+evRoHnjgAdLT06lZsyZTp04FnA++devWkZaWxqhRo/LMr2/SpAlpaWmkpaXlqWj60EMP8cMPP5Camso333zD/PnzS+vtlyrv+kqVKlXy1Ffy1qhRI2JjYwvUVwLo0qULF154YYH27t27IyKICG3btiUz0/mTr169uuds6qNHj3ruL1y4kK5du1KrVi1q1qxJ165dWbBgQWm/XWMCzpehqlScQoemFJTFh52qsnjxYs+eyZ133slHH30EQI0aNTz9vD/silK1alU6d+4MOIXkrrjiCs8HZ3lztvWVipOVlcWMGTPo1q2bp+3DDz+kefPm3HDDDUybNq1EcQwYMIC4uDgef/zxQkt7GBMsfEkcXwILRGSciAwSkYG5tzKK7ZxWFh92+/bt4+KLLyY0NLTQ55w0aRJNmjRh1KhR/Pvf//a0b9u2jfj4eDp16lRoiYiDBw/y8ccf06VLl7OKr6ycbX2l4tx777107NiRq666ytPWo0cPfvjhBz766CP+9re/FRvH22+/zbp161i6dClLly4tdG/RmGDhS+L4A7AN6AT8Cbjdvf2pDOI655XFh11xzzl8+HB+/PFHnn76aZ544gnAuYbCjh07SE1NZcKECfTr189T5hogOzubvn378pe//MVTaru8Ka36SoV57LHH2LNnDxMmTCh0eceOHfnxxx/Zu3fvaeNo0MC5/MyFF15Iv379Cr02hTHBotjEISJVReQfwBFgCdBNVTt73azsyBkoiw+7OnXqcPDgQc8Fb4p6zj59+niGsCpXrkzt2rUBaN26NU2aNGHLli2evkOGDKFp06bcf//9ZxVbWfKur3Ty5EmSk5NJSsp/BQDfvfbaayxcuJCZM2fmGS7MyMjwJOnVq1dz8uRJateuTWJiIp9++ikHDhzgwIEDfPrppyQmJpKdne0p3JeVlcW8efNo0aLFWcdnTKCUZI9jIs51NzYBPYGC01KMz8riw05E6Ny5s2e66fTp07npJucKvenp6Z5+n3zyCU2bNgVgz5495OTkALB161bS09M9exaPPvoohw4d4vnnnz+ruMra2dRXArjqqqu49dZbWbRoEWFhYSxcuBCAoUOH8ssvv9ChQwfi4uIYP348ALNnz6ZFixbExcUxfPhwZs2ahYhQq1Yt/va3v9GmTRvatGnDmDFjqFWrFidOnCAxMdEzhbdBgwbcfffd/t9QxpSSYmtVicjPwBWq+rOIhANLVLWxX6I7Q8FSqyolJYX777+fnJwcBg4cyCOPPMKYMWNISEggKSmJlStX0qNHDw4cOECVKlX43e9+x4YNTrX5q666ih9++IEjR45Qu3Ztpk6dSmJiIlu3bvVMx42Pj+ett96icuXK3HfffXz++edUrFiRmjVrMnHiRGJiYpg9ezZjxowhNDSUkJAQHnvsMW688UYyMzMJDw+nefPmVK5cGYARI0YwePDgEr8/q69UeoJlW9p03OBW0lpVJUkch1W1htfj/aparsuMBEviONcFy4ddMAiWbWmJI7iVZpHDUBHpzG/XDc//GFVdfGZhGmOMCTYlSRy/AtO8Hu/L91iB8jndxhhjTKkrNnGoaiM/xGGMMSZI+HI9DmPOSTYub4xvfLp0rDHGGGN7HEEqWGbZGGPOPbbHYYwxxid+Sxwi0k1ENotIhog8XMjyjiKyWkSyRaRXvmV3iki6e7vTXzEbY4wpyC+JQ0RCgEnA9UA00FdEovN12wEaptqWAAAZpklEQVTcBbyTb91awFigHdAWGCsiNcs6ZmOMMYXz1x5HWyBDVbeq6kkgGbjJu4OqblfVtcCpfOsmAp+p6n5VPQB8BnTDGGNMQPgrcTQAdno9znTbynpdY4wxpcxfiaOwC02U9BJoJVpXRIaIyCoRWbVnzx6fgjPGGFNy/kocmUC41+MwYHdprquqU1Q1QVUT6tate8aBGmOMOT1/JY6VQFMRaSwilYA+wNwSrrsQuE5EaroHxa9z24wxxgSAXxKHqmYDI3A+8DcB76rqBhEZLyJJACLSRkQygVuBV0Rkg7vufuBxnOSzEhjvthljjAkAv505rqopQEq+tjFe91fiDEMVtu408lbkNcYYEyB25rgxJugsWLCAZs2aERkZyVNPPVVg+YkTJ7jtttuIjIykXbt2bN++HYC3336buLg4z61ChQqkpaUB0K1bN1q1akVMTAxDhw71XFJ55MiRNG/enNjYWHr06MHBgwfzvNaOHTuoXr06zzzjXFV7586ddO7cmaioKGJiYnjhhRfKcEsEhiUOY0xQycnJYfjw4cyfP5+NGzcyc+ZMNm7cmKfP1KlTqVmzJhkZGTzwwAOMHj0agP79+5OWlkZaWhozZsygUaNGxMXFAfDuu++yZs0a1q9fz549e3jvvfcA6Nq1K+vXr2ft2rVcfvnlPPnkk3le64EHHuD666/3PA4NDeXZZ59l06ZNLFu2jEmTJhWIL9hZ4jDGBJUVK1YQGRlJREQElSpVok+fPsyZMydPnzlz5nDnnU51ol69erFo0SLyXyZ75syZ9O3b1/O4Rg3nCtnZ2dmcPHkSEedMgOuuu47QUGdUv3379mRmZnrW+eijj4iIiCAmJsbTVq9ePa644goALrzwQqKioti1a1dpvf1ywRKHMSao7Nq1i/Dw32boh4WFFfhg9u4TGhrKRRddxL59+/L0mTVrVp7EAZCYmMgll1zChRdeSK9eeUrmATBt2jTP3sXRo0d5+umnGTt2bJGxbt++ndTUVNq1a+fbmyznLHEYY4JK/j0HwLN3UNI+y5cvp2rVqrRo0SJPn4ULF/Lzzz9z4sQJFi9enGfZ3//+d0JDQ+nfvz8AY8eO5YEHHqB69eqFxnnkyBF69uzJ888/79mbOVfY9TiMMUElLCyMnTt/q0KUmZlJ/fr1C+0TFhZGdnY2hw4dolatWp7lycnJBfY2clWpUoWkpCTmzJlD165dAZg+fTrz5s1j0aJFngS0fPly3n//fUaNGsXBgwepUKECVapUYcSIEWRlZdGzZ0/69+/PLbfcUtqbIOAscRhjgkqbNm1IT09n27ZtNGjQgOTkZN55J09RbZKSkpg+fTodOnTg/fff55prrvF84J86dYr33nuPJUuWePofOXKE//73v9SrV4/s7GxSUlK46qqrAGcG19NPP81XX31F1apVPessXbrUc3/cuHFUr16dESNGoKoMGjSIqKgoHnzwwbLcFAFjicMYE1RCQ0OZOHEiiYmJ5OTkMHDgQGJiYhgzZgwJCQkkJSUxaNAgbr/9diIjI6lVqxbJyb9d9XLJkiWEhYURERHhaTt69ChJSUmcOHGCnJwcrrnmGoYOHQrAiBEjOHHihGfvo3379kyePLnI+L755htmzJhBy5YtPTO2/vGPf9C9e/ey2BwBYYnDGBN0unfvXuCDePz48Z77VapU8Uynze/qq69m2bJledouvfRSVq5cWWj/jIyMYuMZN26c5/6VV15Z6DGWc4kdHDfGGOMTSxzGGGN8YonDGGPKyJmWRtm+fTsXXHCBpzRK7vEWcIbamjVr5ln266+/epa9++67REdHExMTQ79+/TztO3bs4LrrriMqKoro6GjP6+T685//XOS04sLYMQ5jzHml1TN9znjdNQ8lF9/JlVsa5bPPPiMsLIw2bdqQlJREdHS0p493aZTk5GRGjx7NrFmzAGjSpImnjlZ+b7/9NgkJCXna0tPTefLJJ/nmm2+oWbNmnoRyxx138Mgjj9C1a1eOHDlChQq/7TOsWrWqQP2t4tgehzHGlIHSKo1SUq+++irDhw+nZs2aAFxyySUAbNy4kezsbM+ssOrVq3umFefk5DBy5Ej++c9/+vRaljiMMaYMnG1plG3bthEfH0+nTp3ynDMCMGDAAOLi4nj88cc9iWbLli1s2bKFP/zhD7Rv354FCxZ42i+++GJuueUW4uPjGTlypKfy78SJE0lKSqJevXo+vbdzNnGc6dhirvylkgFeeOEFWrRoQUxMDM8//7ynPS0tjfbt2xMXF0dCQgIrVqwAnLIHf/nLX4iMjCQ2NpbVq1d71gkJCfGMUSYlJZXyuzfGBNrZlEapV68eO3bsIDU1lQkTJtCvXz8OHz4MOMNU69atY+nSpSxdupQZM2YATnHG9PR0vvzyS2bOnMngwYM5ePAg2dnZLF26lGeeeYaVK1eydetW3njjDXbv3s17773Hn//8Z5/f2zmZOFT1jMsu58pfKnn9+vW8+uqrrFixgjVr1jBv3jzS09MBGDVqFGPHjiUtLY3x48czatQoAObPn096ejrp6elMmTKFYcOGeZ7vggsu8JR3nju3pFfRNcYEC19KowB5SqNUrlyZ2rVrA9C6dWuaNGnCli1bAGjQoAHgVN7t16+f54tqWFgYN910ExUrVqRx48Y0a9aM9PR0wsLCiI+PJyIigtDQUG6++WZWr15NamoqGRkZREZG0qhRI44dOwaQt3hXEc7JxHH06NGzGlssrFTypk2baN++PVWrViU0NJROnTrx4YcfAs43hNxvA4cOHfL8ccyZM4c77rgDEaF9+/YcPHiQn3/+uczfvzEm8LxLo5w8eZLk5OQCowu5pVGAPKVR9uzZ4xlO2rp1K+np6URERJCdnc3evXsByMrKYt68eZ5CjTfffDNffPEFAHv37mXLli1ERETQpk0bDhw4wJ49ewBYvHgx0dHR3HDDDfznP/9h+/btbN++Pfe4x/qSvLdzMnFkZWWd8dhiUaWSW7RowZIlS9i3bx/Hjh0jJSXF803h+eefZ+TIkYSHh/PQQw95LvRyujHO48ePk5CQQPv27fnoo49KfyMYYwLKuzRKVFQUvXv39pRGyR1lGDRoEPv27SMyMpIJEyZ4htWXLFlCbGwsrVq1olevXkyePJlatWpx4sQJEhMTiY2NJS4ujgYNGnD33XcDTkn42rVrEx0dTefOnfnXv/5F7dq1CQkJ4ZlnnqFLly60bNkSVfWsc8bv7ew2TfAo6dhiUaWSo6KiGD16NF27dqV69eq0atXKc3GXl19+meeee46ePXvy7rvvMmjQID7//PPTjnHu2LGD+vXrs3XrVq655hpatmxJkyZNSuvtGmPKgTMtjdKzZ0969uxZoL1atWp8//33hb6WiDBhwgQmTJhQYFnXrl1Zu3btaWM9cuRIgc/JopyTexwVK1Y847HF5cuXM2rUKBo1asTzzz/PP/7xDyZOnAg43w5Wr17NkiVLqFWrFk2bNgWcksu5pZNvvfXWPGOORcWR+zMiIoKrr76a1NTUstgUxhhT6s7JxFGtWrUzHltcunSpZ8zv/vvv569//SsjRowA8JxQs2PHDj744ANPPf/69evz1VdfAc74YW5CSUpK4s0330RVWbZsGRdddBH16tXjwIEDnDhxAnDGIr/55ps8JwUZY0x55rehKhHpBrwAhACvqepT+ZZXBt4EWgP7gNtUdbuINAI2AZvdrstUdSinISJnVXa5KD179mTfvn1UrFiRSZMmeU60efXVV7nvvvvIzs6mSpUqTJkyBXB2U1NSUoiMjKRq1aq8/vrrgHOg/Z577qFChQqcOnWKhx9+2BKHMSaPMz3D3Zez28+UXxKHiIQAk4CuQCawUkTmqqr3HNlBwAFVjRSRPsDTwG3ush9VNc6X1zybssu5vEslAwVOwsl15ZVXFjruKCJMmjSpQPvvf/971q1bd9rXNsaY8spfQ1VtgQxV3aqqJ4Fk4KZ8fW4Cprv33we6SEmP1BhjjPEbfyWOBsBOr8eZbluhfVQ1GzgE1HaXNRaRVBH5SkSuKutgjTHGFM1fxzgK23PIP1e1qD4/Aw1VdZ+ItAY+EpEYVT2cZ2WRIcAQgIYNG55VsOV5bNEYYwLNX3scmUC41+MwYHdRfUQkFLgI2K+qJ1R1H4Cqfg/8CFye/wVUdYqqJqhqQt26dcvgLRhjjAH/JY6VQFMRaSwilYA+QP4CTXOBO937vYDFqqoiUtc9uI6IRABNga1+itsYY0w+fhmqUtVsERkBLMSZjjtNVTeIyHhglarOBaYCM0QkA9iPk1wAOgLjRSQbyAGGqup+f8RtjDGmIL+dx6GqKUBKvrYxXvePA7cWst5sYHaZB2iMMaZEzskzx40xxpQdSxzGGGN8YonDGGOMTyxxGGOM8YklDmOMMT6xxGGMMcYnljiMMcb4xBKHMcYYn1jiMMYY4xNLHMYYY3xiicMYY4xPLHEYY4zxiSUOY4wxPrHEYYwxxieWOIwxxvjEEocxxhifWOIwxhjjE0scxhhjfGKJwxhjjE8scRhjjPGJJQ5jjDE+scRhjDHGJ35LHCLSTUQ2i0iGiDxcyPLKIjLLXb5cRBp5Lfs/t32ziCT6K2ZjjDEF+SVxiEgIMAm4HogG+opIdL5ug4ADqhoJPAc87a4bDfQBYoBuwEvu8xljjAkAf+1xtAUyVHWrqp4EkoGb8vW5CZju3n8f6CIi4rYnq+oJVd0GZLjPZ4wxJgD8lTgaADu9Hme6bYX2UdVs4BBQu4TrGmOM8RNR1bJ/EZFbgURVHew+vh1oq6p/9uqzwe2T6T7+EWfPYjzwnaq+5bZPBVJUdXa+1xgCDHEfNgM2l9HbqQPsLaPnLi3BECMER5zBECMER5wWY+kpqzgvU9W6xXUKLYMXLkwmEO71OAzYXUSfTBEJBS4C9pdwXVR1CjClFGMulIisUtWEsn6dsxEMMUJwxBkMMUJwxGkxlp5Ax+mvoaqVQFMRaSwilXAOds/N12cucKd7vxewWJ3doblAH3fWVWOgKbDCT3EbY4zJxy97HKqaLSIjgIVACDBNVTeIyHhglarOBaYCM0QkA2dPo4+77gYReRfYCGQDw1U1xx9xG2OMKchfQ1WoagqQkq9tjNf948CtRaz7d+DvZRpgyZX5cFgpCIYYITjiDIYYITjitBhLT0Dj9MvBcWOMMecOKzlijDHGJ5Y4jDHG+MQShzHGGJ9Y4jhDbjkUc5bEYX+Hplyw/+uSsX9YH4hITRGpA+CeY1Ku/tCC5UNYRCqJSHMRCVPHKbfdtuVZEJEKwRZzeeD9d+f1f23b8jRsVlUJiMhNwEM455fg/kzBKX1yNGCBeRGRat6x5P4zaDn7BbulYe4G9uHUIjsCzALeUdXDgYwtl4hcpKqHvB5XAMhNcOWJiFwCNAG2qOo+r3YpT7/78rwNwRNfDBABLFPVX7yXlZe43Tgl0OeyWeIohoi0Bj4CngT+B1TFOXu9GbADeExVC5RA8ScRiQReBJYCS4AVbhVi7z71VPXnQMTnFUMCTiWAvwD/xTkZtA3QBTgGjFXV5YGLEESkOc7v+yucLwcL3XOMvPtEqmpGIOLziqEB8H84lxrYDDTE+Xt8Hfgw0B8suUSkGs73l2NebeUqibjX/nkaJ3H8AiTgbMt/A6+7RVcDSkQuBFDV/3q1hThN/t+OljiKISLPARep6kCvtktw/riGANWAnoH8tiwiLwI3AwuAusABYDXwlaqudfc+3gf6qGpWAON8Evidqg7waquMk4iHAFcAPVR1T4BCRESeB7ribMs4nOHclcBcVf3a7bMM6Jg/Ofs5zhmA4FRc+B/O3ltn4PfAeuCvqhrwYn0i8gTQA2d7zlPVL/Itr4rzN7E1EPG5MbwFZAHPAgdx6uT1wjkh+T/AA6q6LlDxAYjIC8A9wMfA26r6Ub7lFwKN/BWnJY5iuKVSrgf6eQ9fuMsuBd4G/qmqnwYiPjeOd4BlwCKcD7tWwGVAZeAHIB6oqaoBvY6JiPQD7gMGqer6fMsuAGYDM1R1ZiDic+OYgrPN3gUa4WzPNjhDGP/BKekvqtohUDECiMhG4A5VXeXVVh3nd/0PYKWqPhio+HKJyA6cUkOngObAcZw943mqmiYig4HWqjosgDGuBB5U1aX52hsC/8K5xMMw4FSghv9EZAvO/0cVnD30Kjj/72+p6jciMgzoqqq3+CUgVbXbaW445Yu/AebjlILPvzwd51tyoOKrjPPtqItX2wU4H3b34uyCnwL+WA62ZWWci3h9Dtzo1V7B/bkZ6BXA+CoCnYAO+doaAd2BP7vb8oYAb8dKOFfUfAeoXsjyGOBbnBLZgYyzCfAB0BEn4V4LjMI5pvU1zpeubJw94UDFGIJTzmgp0LSQ5fWAVCAqgDE2dH/XXdz/oUign7v90nG+NJ4CbvNXTLbHcRoiEqpOgcbGOMc4rsapgZ8CpOH8Iq9S1csDF6VDRCqr6on8B0VFpCPwpaoGdIZI7gFGEakLPAoMAE7iHPPYDFwFNFDV+ACGCThjx6qaU8i2bIdzbZiAz7YRkXjgVWAr8IyqrvBadhnwg6peEKj43Dhq4XyB2aiqO922KjiJuCHOUFAPVa0TsCCdmMJwjmeA82H8GXAC58O4IbA+kNvSHc6LAnare5zSHX6+COeL7WBgsD+3oyWOYohIDXWPX4hIC5xvpD1xfmHvAgvUa7ggEETkQvU6aOa25Sa9gThDAcMDFF6h3H+G64HeOLvd83ES3A8BjKnQmUi57SLSE2inqqMCEF5h8cTgJOEeOLPUPsD5RhoHLFHVhwIYpkdRs5JEZBZQWVVvDkBYuTHkfqGJAP4fcDvOTL/5wO+AS4FPVHVsoGIsjjtUfZGq3uC317TEUTgRiQL+iFPe/WKcg1KfAEs13yybQMkXYw2cP/Z5wDfqTs11v00dUdWDAQvUS3mbUeMLd2/pmAZ4Crb7TR5V3e8+vgRnGOhmnOMwH+JcruC/RT6JH4hIbZxv7VlARVU94LbnJr7ngTdVdXUg48xPRG7AGU3YgTOktkFV/xfYqIomIg8D81V1jd9e0xJH4UTkS5ypebOAC3G+Gce7beNV9cPcIY1yFGMvoDXOh8cYVZ0XqNi8uR8Qe3EO5G33aq+oAZzl5e00MZabOfwAIjIISMJJFFtxpl9/DbyvqlnlJd58cabjHEP4Dlik7jkSIlJbvc49CUCMtYD/5v4Nlpdt5y1/jEX0qayqJ/wYlh0cL+wGXILzLT1/ew2ca6BvAa60GEsU56U43zozgBycD49BOLO8cvu8Q2AnGJQ0xlsCvC3r45x82h/noG1fnPM2VuNM4LjG7RdSDuOcBnyPc35Mx0DG58ZYF1gOPAK0xRlVyJ2kkfuzWnmN0atPQGIM6C+vvN5wDoh9QREzkXCmO76Bs/ttMZ4+zr440zEr4Fwv/kmca8b/D2dIJcn90C4wo8ViLBDnA8BnhbRfCrwAbMA5JyJgMQZLnMBInONCXwI7cYZ5h+HMSLsAZzbdNqBWEMRY29+xBXx2SDm1E+cb3FgRuVdEYtzzDHJtAKI1sMMswRAjOCfPvQnUUdVMVf0/Va2Pc7LaLzhnaX+jqukWY7GWA9VFJM67UVV/UdX7cH7ntwcksryCIc4WwPOqejXOhJfvcaavf4wzw+plnG/3+4t8hrJX0hj9PtxnxziK4J7OPxa4HPgV+BnnG+hFOHP631bVfxf9DGUvGGIEzwHxSlrIpAIRWYVT1mGS/yPLE0cwxFgVeA3nZMQPcM6H2Zgbs4h8i1Pza2LgogyOOEWkCc6Z1ovytXfEmaWWe6Lq64GIz42l3MZoiSMfEbkcp/zFRThDF01wpjhm4hw8jQFeAt7TAB0YD4YY3Tib4cwxr+vGuQen9MTnqqrurJs9QA1VPWIxFs/dqxwOtMc5ee4ITtyhOOdMtFavulCBEixxQuGFA0UkB7jQYiwiHksceYnIJpwZIIdxaj7VBMJxTgiaom69okAKhhghT5wHcco2NML5FrodmKCqG0SkSmHf8i3G0xORNkAHnEkSF+N8ME9Wrxlh5UEwxOl+KKu6H4YicgvON3m/nRdRnPIWoyUOLyKSCExS1Uj3cShOqYTWwA04H853aQCr4QZDjG5c+eMMwZlhcwVwC07MA1Q102I8PffD935gMfC1qm72WpZbMcD/UzLzCYY488X4lXpVOfY+ATSQU+2DIUY7OJ5XNeAXEQkHUNVsVf1JVT8A/gYokBjIAAmOGKFgnDnugee5wF9xZil1DWSABEeM4JRPT8A5WP+kiDwnIreJSAP3w/h3wHOBDREIjji9Y/yniEwQkV7iXHZAReQSEXklkEO8wRCj7XF4EfGUHw/BqZa5Nd/yl3DmyN8TiPjcGMp9jG4c5T7OIIkxBGca5iycml6tceoWXYJz7GAZzhnje9VflVGDNM4SxPgdzkFni7EYoYF64fLIzeZ/xanLnyYia3A+WBbjTIdLwjk7O2CCIUYIjjiDIUacSrjTga2q+h3wtfvNPR5nSK05cCXOAedACoY4i4sxCouxRGyPowgicgVwE85Ydz2cD5MFqjotoIF5CYYYITjiLO8xym/F+PJX7B0CPKmqtQMYnkcwxGkxnj1LHCXgTi2spPku5FSeBEOMEBxxBkmMuYUCH8c5CeyRQMdUmGCI02I8g3gscRgTvESkDnBUy3H1VgiOOC1GH+KwxGGMMcYXNh3XGGOMTyxxGGOM8YklDmOMMT6xxGGMMcYnljiMMcb4xBKHMcYYn/x/OaRcaqkTNLUAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"q = QuantumRegister(3)\n",
"c = ClassicalRegister(3)\n",
"qft3 = QuantumCircuit(q, c)\n",
"\n",
"# prepare |010> + |110>\n",
"qft3.h(q[0])\n",
"qft3.x(q[1])\n",
"\n",
"qft(qft3, q, 3)\n",
"for i in range(3):\n",
" qft3.measure(q[i], c[i])\n",
"\n",
"backend = 'ibmq_20_tokyo'\n",
"compiled = compile(qft3, backend)\n",
"job_exp = execute(qft3, backend)\n",
"\n",
"print(qft3.qasm())\n",
"print(compiled['circuits'][0]['compiled_circuit_qasm'])\n",
"print(compiled['circuits'][0]['config']['layout'])\n",
"\n",
"while not job_exp.done:\n",
" time.sleep(1)\n",
" \n",
"result = job_exp.result()\n",
"print(result.get_ran_qasm(qft3.name))\n",
"plot_histogram(result.get_counts())"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q3[3];\n",
"creg c3[3];\n",
"h q3[0];\n",
"x q3[1];\n",
"x q3[2];\n",
"h q3[0];\n",
"cu1(1.57079632679490) q3[1],q3[0];\n",
"h q3[1];\n",
"cu1(0.785398163397448) q3[2],q3[0];\n",
"cu1(1.57079632679490) q3[2],q3[1];\n",
"h q3[2];\n",
"measure q3[0] -> c3[0];\n",
"measure q3[1] -> c3[1];\n",
"measure q3[2] -> c3[2];\n",
"\n",
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q[10];\n",
"creg c3[3];\n",
"u3(3.14159265358979,0.392699081698724,3.14159265358979) q[9];\n",
"u3(3.14159265358979,0.785398163397448,3.14159265358979) q[8];\n",
"cx q[8],q[4];\n",
"u1(-0.785398163397448) q[4];\n",
"cx q[8],q[4];\n",
"u2(0,3.14159265358979) q[8];\n",
"u1(0.785398163397448) q[4];\n",
"cx q[9],q[4];\n",
"u1(-0.392699081698724) q[4];\n",
"cx q[9],q[4];\n",
"u1(0.785398163397448) q[9];\n",
"u1(0.392699081698724) q[4];\n",
"cx q[9],q[8];\n",
"measure q[4] -> c3[0];\n",
"u1(-0.785398163397448) q[8];\n",
"cx q[9],q[8];\n",
"u2(0,3.14159265358979) q[9];\n",
"u1(0.785398163397448) q[8];\n",
"measure q[9] -> c3[2];\n",
"measure q[8] -> c3[1];\n",
"\n",
"[[('q3', 0), ('q', 4)], [('q3', 1), ('q', 8)], [('q3', 2), ('q', 9)]]\n",
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q[10];\n",
"creg c3[3];\n",
"u3(3.14159265358979,0.392699081698724,3.14159265358979) q[9];\n",
"u3(3.14159265358979,0.785398163397448,3.14159265358979) q[8];\n",
"cx q[8],q[4];\n",
"u1(-0.785398163397448) q[4];\n",
"cx q[8],q[4];\n",
"u2(0,3.14159265358979) q[8];\n",
"u1(0.785398163397448) q[4];\n",
"cx q[9],q[4];\n",
"u1(-0.392699081698724) q[4];\n",
"cx q[9],q[4];\n",
"u1(0.785398163397448) q[9];\n",
"u1(0.392699081698724) q[4];\n",
"cx q[9],q[8];\n",
"measure q[4] -> c3[0];\n",
"u1(-0.785398163397448) q[8];\n",
"cx q[9],q[8];\n",
"u2(0,3.14159265358979) q[9];\n",
"u1(0.785398163397448) q[8];\n",
"measure q[9] -> c3[2];\n",
"measure q[8] -> c3[1];\n",
"\n"
]
},
{
"data": {
"image/png": "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+LqNzhhjTE3ZnePGGGMCYonDGGNMQCxxGGOMCYglDmOMMQGxxGGMMSYgljiMMcYExBKHMcaYgFjiMMYYExBLHMYYYwJiicMYY0xALHEYY4wJiCUOY4wxAbHEYYwxJiCWOIwxxgTEEocxxpiAWOIwxhgTEEscxhhjAmKJwxhjTEAscRhjjAmIJQ5jjDEBscRhjDEmIJY4jDHGBMQShzHGmIBY4jDGGBMQSxzGmHIWLlxIly5dcLvdPPDAA8csX758Ob169SIsLIx58+aVWzZlyhTi4uLo1q0bN910E6rK999/T1JSku8VExPDpEmTAJg1axYtW7b0LfvXv/7l+67Zs2fTuXNnOnfuzOzZs33la9euJT4+Hrfb7duGCS5LHMYESW0fkAFKS0uZMGECZ599Nl27duWNN94Aqj4g5+bm0q9fP+Li4khISGDOnDm+bYwfP56EhAQGDx7MWWedxZo1a8jIyKCgoKBcLLGxscyaNYurr766XPmqVav473//S15eHp999hnZ2dksW7aM0047jdzcXN+rffv2DB061LfeyJEjfcuuu+46AL777jvuuecePv74Y9asWcM999zDrl27ALjhhht47rnnKCwspLCwkIULF57Q78OcuLBQB2DMz0FZWRkTJ05k0aJFuFwuUlJSSEtLo3v37r46Rw/IjzzySLl1/Q/IAOeddx7Lli3jwgsv5P7776dVq1Zs3LiRI0eO8N133/nWGzlyJDNmzCj3XVFRUbz00kt07tyZbdu20bt3b1JTUznjjDN47LHHyM/P5+6776Z79+4899xzjBo1iqysrHJxdujQAYBGjcqfd4oIBw8epLS0FFXl8OHDnHnmmeXqFBYWsmPHDs4///zj7q/33nuPyy67jOjoaAAuu+wyFi5cyIUXXsjevXvp168fANdccw1vv/02AwcOPO73mdoVtCsOERkgIhtEpEhEbq9k+S0iUiAieSKyWETa+y0bJyKF3te4YMVsTG1Zs2YNbrebjh07EhER4Tsg++vQoQMJCQnHPSAfOnSo3AH5hRde4I477gCcA3lMTMxx4zj77LPp3LkzAG3atKFVq1Z88803AJx++umUlJTgcrk4cOAAIoLL5aKkpKRGP2O/fv246KKLaN26Na1btyY1NZVu3bqVq5ORkcHIkSMREV/ZG2+8QUJCAsOGDWPr1q0AlJSU0K5dO1+d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yJG43W769u3Lli1bfMvy8vLo168fcXFxxMfHc/DgQQDWrl1LfHw8brebm266CVXnMS933303bdu2JSkpiaSkJBYsKDd3J1999RVNmzblkUceAWDDhg2+uklJSZx++uk8/vjjdbQnjKl7ljhMg1dWVsbEiRN59913KSgoICMjg4KCgnJ1nn/+eZo3b05RURE333wzt912GwAej4cxY8bwzDPPkJ+fz9KlSwkPDwfghhtu4LnnnqOwsJDCwkIWLlzo+76bb76Z3NxccnNzGTRoULlt3XzzzQwcOND3uUuXLr66a9euJSoqiiFDhtTV7jCVXTB7AAAZNUlEQVSmzlniMA3emjVrcLvddOzYkYiICEaNGkVWVla5OllZWYwbNw6AYcOGsXjxYlSV999/n4SEBBITEwFo0aIFjRs3Zvv27ezdu5d+/fohIlxzzTW8/fbb1cby9ttv07FjR+Li4ipdvnjxYjp16kT79u1/4k9tTOhY4jANXklJCe3a/fhkYpfLRUlJSZV1wsLCaNasGTt37mTjxo2ICKmpqfTq1YuHHnrIV9/lclX5nTNmzCAhIYH09HR27doFwL59+3jwwQeZNm1albFmZmYyevTon/5DGxNCJ23iONE27y1btnDKKaf42qN///vfH7NuWloaPXr0KFf25JNP0qVLF+Li4pgyZQoAhw8fZty4ccTHx9OtWzemT5/uq//YY48RFxdHjx49GD16tK9d3QTuaN+DPxGpUR2Px8PKlSt59dVXWblyJW+99ZbvaqSq77zhhhv44osvyM3NpXXr1tx6660ATJs2jZtvvpmmTZtWGmdpaSnz589n+PDhAf+MxtQnQXsCYDCpKhMnTmTRokW4XC5SUlJIS0uje/fuvjr+bd6ZmZncdtttzJkzB4BOnTqRm5tb6Xe/+eabxxwYPvzwQ7KyssjLyyMyMpIdO3YAMHfuXA4dOsSnn37K/v376d69O6NHjyY8PJwnnniCgoICTjnlFEaMGEFmZia//e1v62aHnORcLhdbt271fS4uLqZNmzaV1nG5XHg8Hvbs2UN0dDQul4v+/fsTExMDwKBBg1i3bh1jxoyhuLi40u8888wzfeW/+93v+PWvfw3Axx9/zLx585gyZQq7d++mUaNGNGnShBtvvBGAd999l169epVb35iG6KS84ti3b98Jt3kfzw8//MCjjz7KnXfeWa585syZ3H777URGRgLQqlUrwDlD3bdvHx6PhwMHDhAREcHpp58O4CvzeDzs37//mAOdqbmUlBQKCwvZvHkzpaWlZGZmkpaWVq5OWloas2fPBmDevHlcfPHFviaqvLw89u/fj8fjYdmyZXTv3p3WrVtz2mmnsXr1alSVl156icGDBwOwfft23/e+9dZbvqvPFStWsGXLFrZs2cKkSZP4y1/+4ksaABkZGdZMZU4KJ2XiOHz48Am3eQNs3ryZnj170r9/f1asWOFb56677uLWW28lKiqq3Hdt3LiRFStW0LdvX/r37092djbgJKRTTz2V1q1bExsby+TJk4mOjqZt27ZMnjyZ2NhYWrduTbNmzfjVr35VJ/vi5yAsLIwZM2aQmppKt27dGDFiBHFxcUydOpX58+cDMH78eHbu3Inb7ebRRx/1NV82b96cW265hZSUFJKSkujVqxeXX3454JwQXHfddbjdbjp16uQbKTVlyhTi4+NJSEjgww8/5LHHHqs2xv3797No0SKGDh1aR3vBmOA5KZuqKlPTNu/WrVvz1Vdf0aJFC9auXcuVV15Jfn4+mzZtoqioiMcee6zcPQDgXD3s2rWL1atXk52dzYgRI9i0aRNr1qyhcePGbNu2jV27dnH++edz6aWX0rx5c7Kysti8eTNnnHEGw4cP55VXXmHMmDF1uQtOaoMGDTpmWOy9997re9+kSRPmzp1b6bpjxoypdN8nJyfz2WefHVP+8ssvVxvP3XffXe5zVFSU78TEmIbupLziCA8Pr3GbN1CuzTsyMpIWLVoA0Lt3bzp16sTGjRv56KOPWLt2LR06dOC8885j48aNXHjhhb7vGjp0KCJCnz59aNSoEd9++y2vvfYaAwYMIDw8nFatWnHuueeSk5PDBx98wFlnnUXLli0JDw9n6NChrFq1Kjg7xxhjfqKTMnGceuqpJ9zm/c0331BWVgbApk2bKCwspGPHjtxwww1s27aNLVu2sHLlSs4++2yWLl0KwJVXXsmSJUsAp9mqtLSUmJgYYmNjWbJkCarKvn37WL16NV27diU2NpbVq1ezf/9+VJXFixfTrVu34O0gY4z5CU7KpioR8bV5l5WVkZ6e7mvzTk5OJi0tjfHjxzN27FjcbjfR0dFkZmYCsHz5cqZOnUpYWBiNGzfmmWeeITo6+rjbS09PJz09nR49ehAREcHs2bMRESZOnMi1115Ljx49UFWuvfZaEhISAKf/o1evXoSFhdGzZ08mTJhQ5/vFVC7xkVEntN76yZm1HIkxDcNJmTjgxNu8r7rqKq666qrjfneHDh3KtX1HRETwyiuvHFOvadOmVbar33PPPdxzzz3H3Y4xxtRHJ2VTlTHGmLpjicMYY0xAgpY4RGSAiGwQkSIRub2S5ZEiMse7/GMR6eAt7yAiB0Qk1/t6JlgxG2OMOVZQ+jhEpDHwFHAZUAxki8h8VfWf+3o8sEtV3SIyCngQGOld9oWqJgUjVrDOUmOMOZ5gXXH0AYpUdZOqlgKZwOAKdQYDs73v5wGXSMW79owxxoRcsBJHW2Cr3+dib1mldVTVA+wBWniXnSUin4jIMhE5v66DNcYYU7VgDcet7Mqh4pwfVdXZDsSq6k4R6Q28LSJxqrq33MoiE4AJALGxsbUQsjHGmMoE64qjGGjn99kFbKuqjoiEAc2A71T1kKruBFDVtcAXwNkVN6Cqz6lqsqomt2zZsg5+BGOMMRC8xJENdBaRs0QkAhgFzK9QZz4wzvt+GLBEVVVEWno71xGRjkBnYFOQ4jbGGFNBUJqqVNUjIjcC7wGNgRdUNV9E7gVyVHU+8DzwsogUAd/hJBeAC4B7RcQDlAG/V9XvghG3McaYYwVtyhFVXQAsqFA21e/9QeCYZ2qq6hvAG3UeoDHGmBqxO8eNMcYExBKHMcaYgFjiMNVauHAhXbp0we12+x656u/QoUOMHDkSt9tN3759fU9IXLRoEb179yY+Pp7evXv7nlkCUFpayoQJEzj77LPp2rUrb7zhtEY+88wzxMfHk5SUxHnnnUdBwY+TC+Tl5dGvXz/i4uKIj4/n4MGDfP/99yQlJfleMTExTJo0qW53iDE/cyfttOqmdpSVlTFx4kQWLVqEy+UiJSWFtLQ0unfv7qvz/PPP07x5c4qKisjMzOS2225jzpw5xMTE8M4779CmTRs+++wzUlNTfc9+v//++2nVqhUbN27kyJEjfPedM97h6quv5ve//z0A8+fP55ZbbmHhwoV4PB7GjBnDyy+/TGJiIjt37iQ8PJwmTZqQm5vri6V37972XG9j6phdcZjjWrNmDW63m44dOxIREcGoUaPIysoqVycrK4tx45yR1MOGDWPx4sWoKj179vQ9sjcuLo6DBw9y6NAhAF544QXuuOMOABo1akRMTAwAp59+uu979+3b53tW/Pvvv09CQgKJiYkAtGjRgsaNG5eLo7CwkB07dnD++Ta5gDF1yRKHOa6SkhLatfvx3k2Xy+W7aqisTlhYGM2aNWPnzp3l6rzxxhv07NmTyMhIdu/eDcBdd91Fr169GD58OF9//bWv7lNPPUWnTp2YMmUKTzzxBOA8kldESE1NpVevXjz00EPHxJqRkcHIkSOxKc6MqVuWOMxxqVacGYZjDszV1cnPz+e2227j2WefBcDj8VBcXMy5557LunXr6NevH5MnT/bVnzhxIl988QUPPvggf/vb33zrrFy5kldffZWVK1fy1ltvsXjx4nLbzMzMZPTo0Sf+wxpjasQShzkul8vF1q0/zk9ZXFzsa36qrI7H42HPnj2+57QXFxczZMgQXnrpJTp16gQ4zUxRUVEMGTIEgOHDh7Nu3bpjtj1q1Cjefvtt3zb69+9PTEwMUVFRDBo0qNw669evx+Px0Lt371r86Y0xlbHEYY4rJSWFwsJCNm/eTGlpKZmZmaSlpZWrk5aWxuzZzoz48+bN4+KLL0ZE2L17N5dffjnTp0/n3HPP9dUXEa644gqWLl0KwOLFi32d7YWFhb56//nPf+jcuTMAqamp5OXlsX//fjweD8uWLSvXQZ+RkWFXG8YEiY2qMscVFhbGjBkzSE1NpaysjPT0dOLi4pg6dSrJycmkpaUxfvx4xo4di9vtJjo6msxM54FWM2bMoKioiPvuu4/77rsPcDq5W7VqxYMPPsjYsWOZNGkSLVu25MUXX/St88EHHxAeHk7z5s19Cal58+bccsstpKSkICIMGjSIyy+/3Bfn66+/zoIFCzDG1D1LHKZagwYNYtCgQeXK7r33Xt/7Jk2aMHfu3GPWu/POO7nzzjsr/c727duzfPnyY8r/8Y9/VBnHmDFjGDNmTKXLNm2yeS+NCRZrqjLGGBMQSxzGGGMCYk1Vps4kPjKq+kpVWD85sxYjMcbUJrviMMYYExBLHMYYYwJiicMYY0xALHEYY4wJiCUOY4wxAbHEYYwxJiCWOIwxxgTEEocxxpiAWOIwxhgTEEscxhhjAmKJwxhjTEAscRhjjAmIJQ5jjDEBscRhjDEmIEFLHCIyQEQ2iEiRiNxeyfJIEZnjXf6xiHTwW3aHt3yDiKQGK2ZjjDHHCkriEJHGwFPAQKA7MFpEuleoNh7Ypapu4DHgQe+63YFRQBwwAHja+33GGGNCIFhXHH2AIlXdpKqlQCYwuEKdwcBs7/t5wCUiIt7yTFU9pKqbgSLv9xljjAmBYCWOtsBWv8/F3rJK66iqB9gDtKjhusYYY4JEVLXuNyIyHEhV1eu8n8cCfVT1j3518r11ir2fv8C5srgX+EhVX/GWPw8sUNU3KmxjAjDB+7ELsKGOfpwY4Ns6+u7a0hBihIYRZ0OIERpGnBZj7amrONurasvqKgXrmePFQDu/zy5gWxV1ikUkDGgGfFfDdVHV54DnajHmSolIjqom1/V2foqGECM0jDgbQozQMOK0GGtPqOMMVlNVNtBZRM4SkQiczu75FerMB8Z53w8DlqhzOTQfGOUddXUW0BlYE6S4jTHGVBCUKw5V9YjIjcB7QGPgBVXNF5F7gRxVnQ88D7wsIkU4VxqjvOvmi8jrQAHgASaqalkw4jbGGHOsYDVVoaoLgAUVyqb6vT8IDK9i3fuB++s0wJqr8+awWtAQYoSGEWdDiBEaRpwWY+0JaZxB6Rw3xhhz8rApR4wxxgTEEocxxpiAWOIwxhgTEEscJ8g7HYr5icRhf4emXrD/1zVj/2EDICLNRSQGwHuPSb36Q2soB2ERiRCRriLiUscRb7nty59ARBo1tJjrA/+/O7//17Yvj8NGVdWAiAwGJuPcX4L33wU4U5/sC1lgfkTkVP9Yjv5n0Hr2C/ZODfM7YCfOXGQ/AHOA11R1byhjO0pEmqnqHr/PjQCOJrj6RERaAZ2Ajaq6069c6tPvvj7vQ/DFFwd0BFar6tf+y+pL3N44JdT3slniqIaI9AbeBqYDB4AonLvXuwBfAfeo6jFToASTiLiBJ4EVwHJgjXcWYv86rVV1eyji84shGWcmgJuA73FuBk0BLgH2A9NU9ePQRQgi0hXn970M5+TgPe89Rv513KpaFIr4/GJoC9yB86iBDUAszt/ji8BboT6wHCUip+Kcv+z3K6tXScT77J8HcRLH10Ayzr58AnjRO+lqSInIaQCq+r1fWWOnKPj70RJHNUTkMaCZqqb7lbXC+eOaAJwKXBXKs2UReRK4ElgItAR2AeuAZaqa5736mAeMUtXDIYxzOvALVb3WrywSJxFPAHoBQ1T1mxCFiIg8DlyGsy+TcJpzs4H5qrrSW2c1cEHF5BzkOF8GBGfGhQM4V28XAb8EPgP+oqohn6xPRP4GDMHZn/9W1Q8rLI/C+ZvYFIr4vDG8AhwG/h+wG2eevGE4NyT/H3Czqn4aqvgAROQfwPXAO8Crqvp2heWnAR2CFacljmp4p0oZCFzt33zhXXYm8CrwkKq+H4r4vHG8BqwGFuMc7BKB9kAk8D+gJ9BcVUP6HBMRuRr4EzBeVT+rsOwU4A3gZVXNCEV83jiew9lnrwMdcPZnCk4Txv/hTOkvqtovVDECiEgBcI2q5viVNcX5Xf8dyFbVW0IV31Ei8hXOVENHgK7AQZwr43+raq6IXAf0VtUbQhhjNnCLqq6oUB4LPIzziIcbgCOhav4TkY04/z+a4FyhN8H5//6Kqv5XRG4ALlPVoUEJSFXtdZwXzvTF/wXexZkKvuLyQpyz5FDFF4lzdnSJX9kpOAe7P+Bcgh8Bfl0P9mUkzkO8PgCu8Ctv5P13AzAshPGFA/2BfhXKOgCDgD969+XlId6PEThP1HwNaFrJ8jhgFc4U2aGMsxPwJnABTsK9FJiC06e1Eueky4NzJRyqGBvjTGe0AuhcyfLWwCdAtxDGGOv9XV/i/T/kBq727r9CnJPGI8DIYMVkVxzHISJh6kzQeBZOH8eFOHPgLwBycX6R56vq2aGL0iEikap6qGKnqIhcACxV1ZCOEDnawSgiLYE7gWuBUpw+jw3A+UBbVe0ZwjABp+1YVcsq2Zd9cZ4NE/LRNiLSE/gnsAl4RFXX+C1rD/xPVU8JVXzeOKJxTmAKVHWrt6wJTiKOxWkKGqKqMSEL0onJhdOfAc7BeBFwCOdgHAt8Fsp96W3O6wZsU28/pbf5uRnOie11wHXB3I+WOKohIqert/9CRHrgnJFehfMLex1YqH7NBaEgIqepX6eZt+xo0kvHaQqYGKLwKuX9zzAQGIFz2f0uToL7XwhjqnQk0tFyEbkK6KuqU0IQXmXxxOEk4SE4o9TexDkjTQKWq+rkEIbpU9WoJBGZA0Sq6pUhCOtoDEdPaDoCtwJjcUb6vQv8AjgT+I+qTgtVjNXxNlU3U9XLg7ZNSxyVE5FuwK9xpnc/A6dT6j/ACq0wyiZUKsR4Os4f+7+B/6p3aK73bOoHVd0dskD91LcRNYHwXi3t1xAPwfaeyaOq33k/t8JpBroSpx/mLZzHFXxf5ZcEgYi0wDlrPwyEq+oub/nRxPc48JKqrgtlnBWJyOU4rQlf4TSp5avqgdBGVTURuR14V1XXB22bljgqJyJLcYbmzQFOwzkz7uktu1dV3zrapFGPYhwG9MY5eExV1X+HKjZ/3gPEtzgdeVv8ysM1hKO8/B0nxnozhh9ARMYDaTiJYhPO8OuVwDxVPVxf4q0QZyFOH8JHwGL13iMhIi3U796TEMQYDXx/9G+wvuw7fxVjrKJOpKoeCmJY1jle2QtohXOWXrH8dJxnoG8EzrMYaxTnmThnnUVAGc7BYzzOKK+jdV4jtAMMahrj0BDvyzY4N5/+BqfTdjTOfRvrcAZwXOyt17gexvkCsBbn/pgLQhmfN8aWwMfAX4E+OK0KRwdpHP331Poao1+dkMQY0l9efX3hdIh9SBUjkXCGO87Cufy2GI8f52ic4ZiNcJ4XPx3nmfEHcJpU0rwH7WNGtFiMx8R5M7CokvIzgX8A+Tj3RIQsxoYSJ/BnnH6hpcBWnGbeG3BGpJ2CM5puMxDdAGJsEezYQj46pJ7ainMGN01E/iAicd77DI7KB7praJtZGkKM4Nw89xIQo6rFqnqHqrbBuVnta5y7tP+rqoUWY7U+BpqKSJJ/oap+rap/wvmdjw1JZOU1hDh7AI+r6oU4A17W4gxffwdnhNVMnLP776r8hrpX0xiD3txnfRxV8N7OPw04G9gBbMc5A22GM6b/VVV9oupvqHsNIUbwdYhHaCWDCkQkB2dah6eCH1m5OBpCjFHAv3BuRnwT536YgqMxi8gqnDm/ZoQuyoYRp4h0wrnTenGF8gtwRqkdvVH1xVDE542l3sZoiaMCETkbZ/qLZjhNF51whjgW43SexgFPA3M1RB3jDSFGb5xdcMaYt/TG+Q3O1BMfqKp6R918A5yuqj9YjNXzXlVOBM7BuXnuB5y4w3DumeitfvNChUpDiRMqnzhQRMqA0yzGKuKxxFGeiHyOMwJkL86cT82Bdjg3BD2n3vmKQqkhxAjl4tyNM21DB5yz0C3Ao6qaLyJNKjvLtxiPT0RSgH44gyTOwDkwP6N+I8Lqg4YQp/egrOo9GIrIUJwz+aDdF1Gd+hajJQ4/IpIKPKWqbu/nMJypEnoDl+McnH+rIZwNtyHE6I2rYpyNcUbY9AKG4sR8raoWW4zH5z34TgKWACtVdYPfsqMzBgR/SGYFDSHOCjEuU79Zjv1vAA3lUPuGEKN1jpd3KvC1iLQDUFWPqn6pqm8CdwEKpIYyQBpGjHBsnGXejuf5wF9wRildFsoAaRgxgjN9ejJOZ/10EXlMREaKSFvvwfgXwGOhDRFoGHH6x/iQiDwqIsPEeeyAikgrEXk2lE28DSFGu+LwI+KbfrwxzmyZmyosfxpnjPz1oYjPG0O9j9EbR72Ps4HE2BhnGOYcnDm9euPMW9QKp+9gNc4d499qsGZGbaBx1iDGj3A6nS3GaoSFasP1kTeb/wVnXv5cEVmPc2BZgjMcLg3n7uyQaQgxQsOIsyHEiDMT7mxgk6p+BKz0nrn3xGlS6wqch9PhHEoNIc7qYuyGxVgjdsVRBRHpBQzGaetujXMwWaiqL4Q0MD8NIUZoGHHW9xjlx8n4Ks7YOwGYrqotQhieT0OI02L86Sxx1IB3aGGEVniQU33SEGKEhhFnA4nx6ESB9+HcBPbXUMdUmYYQp8V4AvFY4jCm4RKRGGCf1uPZW6FhxGkxBhCHJQ5jjDGBsOG4xhhjAmKJwxhjTEAscRhjjAmIJQ5jjDEBscRhjDEmIJY4jDHGBOT/A9A1lRhhLJSdAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"q = QuantumRegister(3)\n",
"c = ClassicalRegister(3)\n",
"qft3 = QuantumCircuit(q, c)\n",
"\n",
"# prepare |011> + |111>\n",
"qft3.h(q[0])\n",
"qft3.x(q[1])\n",
"qft3.x(q[2])\n",
"\n",
"qft(qft3, q, 3)\n",
"for i in range(3):\n",
" qft3.measure(q[i], c[i])\n",
"\n",
"backend = 'ibmq_20_tokyo'\n",
"compiled = compile(qft3, backend)\n",
"job_exp = execute(qft3, backend)\n",
"\n",
"print(qft3.qasm())\n",
"print(compiled['circuits'][0]['compiled_circuit_qasm'])\n",
"print(compiled['circuits'][0]['config']['layout'])\n",
"\n",
"while not job_exp.done:\n",
" time.sleep(1)\n",
" \n",
"result = job_exp.result()\n",
"print(result.get_ran_qasm(qft3.name))\n",
"plot_histogram(result.get_counts())"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q4[3];\n",
"creg c4[3];\n",
"h q4[0];\n",
"h q4[0];\n",
"cu1(1.57079632679490) q4[1],q4[0];\n",
"h q4[1];\n",
"cu1(0.785398163397448) q4[2],q4[0];\n",
"cu1(1.57079632679490) q4[2],q4[1];\n",
"h q4[2];\n",
"measure q4[0] -> c4[0];\n",
"measure q4[1] -> c4[1];\n",
"measure q4[2] -> c4[2];\n",
"\n",
"OPENQASM 2.0;\n",
"include \"qelib1.inc\";\n",
"qreg q[10];\n",
"creg c4[3];\n",
"u1(0.392699081698724) q[9];\n",
"u1(0.785398163397448) q[8];\n",
"cx q[8],q[4];\n",
"u1(-0.785398163397448) q[4];\n",
"cx q[8],q[4];\n",
"u2(0,3.14159265358979) q[8];\n",
"u1(0.785398163397448) q[4];\n",
"cx q[9],q[4];\n",
"u1(-0.392699081698724) q[4];\n",
"cx q[9],q[4];\n",
"u1(0.785398163397448) q[9];\n",
"u1(0.392699081698724) q[4];\n",
"cx q[9],q[8];\n",
"measure q[4] -> c4[0];\n",
"u1(-0.785398163397448) q[8];\n",
"cx q[9],q[8];\n",
"u2(0,3.14159265358979) q[9];\n",
"u1(0.785398163397448) q[8];\n",
"measure q[9] -> c4[2];\n",
"measure q[8] -> c4[1];\n",
"\n",
"[[('q4', 0), ('q', 4)], [('q4', 1), ('q', 8)], [('q4', 2), ('q', 9)]]\n"
]
}
],
"source": [
"q = QuantumRegister(3)\n",
"c = ClassicalRegister(3)\n",
"qft3 = QuantumCircuit(q, c)\n",
"qft3.h(q[0])\n",
"qft(qft3, q, 3)\n",
"for i in range(3):\n",
" qft3.measure(q[i], c[i])\n",
"print(qft3.qasm())\n",
" \n",
"backend = 'ibmq_20_tokyo'\n",
"qobj = compile(qft3, backend)\n",
"\n",
"print(qobj['circuits'][0]['compiled_circuit_qasm'])\n",
"print(qobj['circuits'][0]['config']['layout'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment