Created
September 13, 2020 11:57
-
-
Save csferrie/c29b738cf4c7f25baf2dc51168663af5 to your computer and use it in GitHub Desktop.
Superdense coding and teleportation in projectQ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "Superdense coding and teleportation in projectQ", | |
"provenance": [], | |
"collapsed_sections": [ | |
"zp0yynx1I9Jl" | |
], | |
"authorship_tag": "ABX9TyM51kPxQCMg3T3VhFkY2NTE", | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/csferrie/c29b738cf4c7f25baf2dc51168663af5/superdense-coding-and-teleportation-in-projectq.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "xV7VUIMwH2IT", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"# Superdense coding and teleportation in ProjectQ\n", | |
"\n", | |
"This exercise is part of [Lab 6](https://medium.com/@csferrie/superdense-coding-and-quantum-teleportation-in-three-quantum-programming-languages-3fe7032d1dbc) of [Introduction to Quantum Computing](https://medium.com/@csferrie/introduction-to-quantum-computing-df9e1182a831).\n", | |
"\n", | |
"This notebook provides implementation of superdense coding and teleportation in the [ProjectQ](https://projectq.readthedocs.io/en/latest/index.html.) quantum programming language." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "zp0yynx1I9Jl", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"# Qiskit installation\n", | |
"\n", | |
"The first step is to install qiskit. Installation instructions are available in the documentation for Qiskit here: https://projectq.readthedocs.io/en/latest/index.html." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "MFG2OUCoyJY1", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 102 | |
}, | |
"outputId": "ab2bae92-0954-4738-f460-38d01b87c1e6" | |
}, | |
"source": [ | |
"# install ProjectQ\n", | |
"!pip install projectq --quiet" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"\u001b[K |████████████████████████████████| 235kB 3.0MB/s \n", | |
"\u001b[K |████████████████████████████████| 296kB 8.6MB/s \n", | |
"\u001b[?25h Building wheel for projectq (setup.py) ... \u001b[?25lerror\n", | |
"\u001b[31m ERROR: Failed building wheel for projectq\u001b[0m\n", | |
"\u001b[?25h Running setup.py install for projectq ... \u001b[?25l\u001b[?25hdone\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "M7uLB5v1JtHm", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Obviously we need to import qiskit. But we will also need numpy later." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "zRiG_m_fTIRG", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"import projectq\n", | |
"import numpy as np" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "r1NMu4QBTTV2", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"# Superdense coding\n", | |
"\n", | |
"[Superdense coding](https://en.wikipedia.org/wiki/Superdense_coding) is a protocol that allows the tranmission of two classical bits of information using 1 qubit of information. \n", | |
"\n", | |
"This, the simplest implementation in Qiskit, accompanies the [lecture](https://medium.com/@csferrie/my-first-quantum-protocol-de336d290322) on the same topic.\n", | |
"\n", | |
"Let's get started. The first thing Alice and Bob need to do is create entanglement.\n", | |
"\n", | |
"" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "lCK97MrEWMjn", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 194 | |
}, | |
"outputId": "2ee043d8-6525-49cb-fd9e-d2db9b915933" | |
}, | |
"source": [ | |
"# create cirquit (and drawing engine)\n", | |
"circuit_backend = projectq.backends.CircuitDrawerMatplotlib()\n", | |
"superdense = projectq.MainEngine(circuit_backend) \n", | |
"\n", | |
"# create two qubits\n", | |
"alice = superdense.allocate_qubit()\n", | |
"bob = superdense.allocate_qubit()\n", | |
"\n", | |
"projectq.ops.H | alice\n", | |
"projectq.ops.CNOT | (alice,bob)\n", | |
"\n", | |
"superdense.flush()\n", | |
"circuit_backend.draw();" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 217.788x216 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "CFm4NQNbVMAa", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Now Alice needs to encode her message. There are four possibilities. \n", | |
"\n", | |
"If Alice wants to send\n", | |
"* 00, she does nothing;\n", | |
"* 01, she performs an $X$ gate;\n", | |
"* 10, she performs a $Z$ gate;\n", | |
"* 11, she performs $XZ$.\n", | |
"\n", | |
"Let's say Alice choses 11. \n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "sCAKLdh3V26d", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 194 | |
}, | |
"outputId": "6b01551a-ba8c-458b-fdcd-30bf13f0cf68" | |
}, | |
"source": [ | |
"projectq.ops.X | alice\n", | |
"projectq.ops.Z | alice\n", | |
"\n", | |
"superdense.flush()\n", | |
"circuit_backend.draw();" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 326.701x216 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "tsEySC0hWVN0", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Now Alice sends her qubit to Bob. Bob unentangles them." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "4fg_HryHWdJN", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 194 | |
}, | |
"outputId": "034477d2-1983-4afb-c695-fa2b65a4ad30" | |
}, | |
"source": [ | |
"projectq.ops.CNOT | (alice,bob)\n", | |
"projectq.ops.H | alice\n", | |
"\n", | |
"superdense.flush()\n", | |
"circuit_backend.draw();" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAVcAAACxCAYAAABwW/4zAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAQg0lEQVR4nO3deWxUVf/H8c/8KKUUEFnL3ioFFBUJlaVVkS3FijAsEgKyCRhZhAIJCYEY2iCRP0hMNFBWaQBjWZQWAYVGdjBsUiKUxURatrZSEAUhDNDz+8PnaRjaAtOZM7cPfb+S+8ece++c75zD/fTOnTuDyxhjBAAIqP9zugAAeBoRrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgAeEKABYQrgBgQaUP16ioKLlcLkeXqKgop4eh0nF63p+WOXd6HCvyWLqMMcbpIpzkcrnk9BBUhBoqG6fH3On+A6UivI6KUENpKv2ZKwDYQLgCgAWEKwBYQLgCgAWEKwBYQLgCgAWEKwBYQLiiQqmI9ysC5UG4wlHGGO3cuVODBw9WvXr1FBISotDQUL322mtatmyZ/vnnH6dLBMqFcIVjfv31V73yyiuaPHmyunfvruzsbN25c0d3797VvHnztGXLFrVo0UIpKSlOlwr4zvho586dJjIy0qd9Vq5caU6ePOlrV0FRjiF4KmsItkOHDpkGDRqY1atXm6KiIq91D47HmTNnTJs2bUxycnJA+3d6zJ3uP1AqwuuoCDWUJiBnrosWLdJzzz2nsLAwxcTEaO/evV7rjxw5okWLFgWiqwph9OjRevfdd0u0HzlyRC6XSzk5OcEv6hFycnL0yy+/6Pr1606XIkkqKCiQ2+3WihUrNHz4cLlcrjK3bd26tfbs2aNVq1YpLS0tiFV627Vr1yN/PKR79+6O1fawO3fuKCsrS9nZ2SoqKnK6HC//a8eOP/wO17Vr1yoxMVGzZs3SsWPHFBcXp4SEBJ0/f754G7fbrYyMDH+7go+OHTum9u3bq23bturevbsaN26skSNHOn4dc8mSJerXr5/69u37RNs3bNhQy5Yt09y5cx37wCsuLk55eXklliVLlsjlcmnixImO1PUgY4zmzZunBg0aqGvXrurUqZOaN2+uDRs2OF1a5eTrqe7DlwU6depkxo0b57VNdHS0mTlzZvFjj8djateubY4cOVLeM2xryjEEZtSoUaZPnz4l2g8fPmwkmXPnzlmv4XFOnz5tatasaSR5LdWqVTNdunQp8VY8WDwej2natKk5fvx4mduUNh5FRUXmxRdfNLt27QpIHYEY8+zsbFOrVi0ze/ZsR/p/2IwZM0x4eHiJOa9evbrZsGFDwPszxvfXEehjpzw1BItfZ64ej0dHjx5VfHy8V3t8fLwOHDhQ/Lhq1apKSEhQenq6P93BB0lJSbp161aJ9jt37ujEiRPasWOHA1X9+/a6WbNmateunU/7uVwuffjhh1q1apWlynxz/fp1ud1udevWTXPnznW6HF29elVffPFFqXN++/ZtTZ06ldvcgsyvcC0sLNT9+/cVERHh1R4REaH8/HyvNrfb/VSF648//qiaNWt6LV27dnW6rGLff/99mdfbbt68qXXr1gW5on9dunRJbdq0Kde+bdq00eXLlwNcke+Kioo0bNgwhYSE6Ouvv37kNeNg2b59u0JDQ8tcf+3aNf32229BrKhsFf3YCZSQYHWUkJCgYcOG6fz582rRooX1/pKSkpScnGzt+bt27aqlS5d6tZ04cUIDBgwo1/MF+wBdunRpifqD6XFnoI8aD6fDbNasWfr555916NAh1apVq9zPE8zXcevWrXL/UQu0QB87kv9jOWfOHCUlJfn1HA/z68y1fv36qlKligoKCrzaCwoK1KhRI6+23NxchYeHq2HDhv50+cSSkpJkjHnsUl7h4eGKjo72Wpo1a1bu53uSWn1ZevXqVWZftWrV0rp16wLe55MsmzZtUo8ePR47J6W1L126VMOGDQtIHeWVlpamBQsWKC0tTa1atSr385T1Gsu75ObmKiwsrMy+6tSpo7t37wZ8Pssj0MeO5P9YBjpYJT/DNTQ0VDExMcrMzPRqz8zMVFxcnFdbRkaGevfu/ch/AAicuXPnqnr16iXaQ0JCVK9ePfXv39+BqqSePXsqKyurXLfcpKamavDgwYEv6gll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\n", | |
"text/plain": [ | |
"<Figure size 436.489x216 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "R2CSMU5gXQGk", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Finally Bob measures both qubits." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "72XXxbakXTW6", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 194 | |
}, | |
"outputId": "3f1f394d-a855-4a99-ae01-e02154c6859e" | |
}, | |
"source": [ | |
"projectq.ops.Measure | alice\n", | |
"projectq.ops.Measure | bob\n", | |
"\n", | |
"superdense.flush()\n", | |
"circuit_backend.draw();" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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FXFxcR6oyvedOHECGzduxJYtW9oNd7PZjHnz5uG9995DUFAQQkJC8M033+CNN95AQ0ODFyt2jcvvZE1LS0NOTg7Wrl2L48ePIzU1FWfPnrX6K5efnw+j0ehqd2RHcnIyvvrqK/z9998Onbdp0ybExcUhIiLCM4WRR3Tr1g0vvvgisrOzHTpPRJCVlYW5c+d6qDLftnr1aiQnJyM4OLjD43r06IGnn366tW3w4MFISEjAxo0bPV2m+zi6pmPvjU7h4eHi5+cnw4cPt1qT/+OPP0Sv18v58+edXkuijj399NN21wltTXVDQ4NER0fLtm3bPF0aeUBNTY0EBwfLqVOnbO63NecFBQVy6623WrzjVWVXj8Hly5clLCxMTp8+3e45586dk969e8vRo0et9n333Xdy1113SUtLi91+fIlXPqogKytLxowZ42hX5KDq6mqJiIiQ7Oxsq31tfwEbGxtlwoQJkpycbPXLSteONWvWyK233irl5eVW+9rO+b59+6R3796yf/9+b5WnuavHoLCwsFPv+ZgzZ47Mnz/f5j6z2Sw33XSTlJWV2e3Hl3jlw8by8/MxZcoUb3TVpfXt2xdFRUVYvnw5Zs+ejWPHjlkd09zcjK+//hr33XcfDAYDPv74Y5svRNG1Yc6cOZg/fz7i4+ORnZ1tc324uroamZmZmDp1Kj777DOr18e6itraWoSHh7d7zIEDB7B161ZkZmba3H/ddddh4MCB184L1I7+RXDmGTx5V11dnaSnp0u/fv1k9OjRsmjRIgEgL730kgwYMEDi4+Nlw4YNfOaukL1798q0adMkODhYZs2aJW+//bYAkGnTpkmvXr3kxRdflBMnTmhdptddHXF//vlnhx96+Ndff8m+ffvaPebgwYNWn/3jRJR6hcPf6FReXo68vDwsWLDAE39vyI2ampqwdetWnDx5Etu3b4fRaERCQgKGDRumdWnkIX/++Sfy8/NRV1eH3bt345lnnsG0adMQFBSkdWma6Orf6MSv7CMiZXX1gOcXfhARKYoBT0SkKJc+qoCIyJcFBwd75Sqxjt44pRWuwRMRKYpLNEREimLAExEpigFPRKQoBjwRkaIY8EREimLAExEpigFPRKQoBjwRkaIY8EREimLAExEpigFPRKQoBjwRkaIY8EREimLAExEpigFPRKQoBjwRkaIY8EREimLAExEpigFPRKQoBjwRkaIY8EREimLAExEpigFPRKQoBjwRkaIY8EREimLAExEpigFPRKQoBjwRkaIY8EREimLAExEpigFPRKQoBjwRkaIY8EREimLAExEpigFPRKQoBjwRkaIY8EREimLAExEpigFPRKQoBjwRkaIY8EREimLAExEpigFPRKQoBjwRkaIY8EREimLAExEpigFPRKQoBjwRkaL+B/3HHUOOw5GwAAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<Figure size 479.689x216 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "otFJsni1YnMW", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"We need to recreate the circuit in projectq since the above code only was for drawing. Now we simulate the state. We'll just copy and paste all the code from above and print Bob's measurement." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "QiBXRNvKYCFg", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 34 | |
}, | |
"outputId": "38ace522-d24e-4623-db4d-74c61b668151" | |
}, | |
"source": [ | |
"superdense = projectq.MainEngine() \n", | |
"\n", | |
"# make qubits\n", | |
"alice = superdense.allocate_qubit()\n", | |
"bob = superdense.allocate_qubit()\n", | |
"\n", | |
"# entangle\n", | |
"projectq.ops.H | alice\n", | |
"projectq.ops.CNOT | (alice,bob)\n", | |
"\n", | |
"# message: 11\n", | |
"projectq.ops.X | alice\n", | |
"projectq.ops.Z | alice\n", | |
"\n", | |
"# disentangle\n", | |
"projectq.ops.CNOT | (alice,bob)\n", | |
"projectq.ops.H | alice\n", | |
"\n", | |
"# measure\n", | |
"projectq.ops.Measure | alice\n", | |
"projectq.ops.Measure | bob\n", | |
"\n", | |
"# print\n", | |
"superdense.flush()\n", | |
"print(int(alice),int(bob))" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"1 1\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "mh1pVY2OImtK", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Huzzah! Now, write a function that doesn't necessitate hard-coding Alice's message." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "7ypMuhKrY8jI", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"# Teleportation\n", | |
"\n", | |
"[Quantum teleportation](https://en.wikipedia.org/wiki/Quantum_teleportation) is a protocol that allows the tranmission of 1 qubit of information using two classical bits of information.\n", | |
"\n", | |
"This, the simplest implementation in Qiskit, accompanies the [lecture](https://medium.com/@csferrie/my-first-quantum-protocol-de336d290322) on the same topic.\n", | |
"\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "8w3TUx5IYZTq", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"# create cirquit (and drawing engine)\n", | |
"circuit_backend = projectq.backends.CircuitDrawerMatplotlib()\n", | |
"teleport = projectq.MainEngine(circuit_backend) " | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "zNyyhOKzbemY", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"We need three qubits for this protocol." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "OPPFg2XZbarl", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"alice_psi = teleport.allocate_qubit()\n", | |
"alice = teleport.allocate_qubit()\n", | |
"bob = teleport.allocate_qubit()" | |
], | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "u1J2E5S6AIOT", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Now we create a \"random\" state to teleport. For example, a rotation about the Y-axis of $\\pi/4$. \n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "vnyDDH69ek8I", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 248 | |
}, | |
"outputId": "a0e606d4-8403-46fc-aec2-5ab4198dcd63" | |
}, | |
"source": [ | |
"projectq.ops.Ry(np.pi/4) | alice_psi\n", | |
"\n", | |
"teleport.flush()\n", | |
"circuit_backend.draw();" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 210.45x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "N898apnLiG9c", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Alice and Bob need to entangle their qubits. This is done with the $H$ and $CNOT$ gates." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "HpdwhUQBb_82", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 248 | |
}, | |
"outputId": "76205bcb-8f92-435c-d4d6-01e33638261d" | |
}, | |
"source": [ | |
"projectq.ops.H | alice\n", | |
"projectq.ops.CNOT | (alice,bob)\n", | |
"\n", | |
"teleport.flush()\n", | |
"circuit_backend.draw();" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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SOHh4UpJSdGhQ4c8+ktKSpSfn29jKnRROTk5mjRpUrv2kpISORwOnT17NvBF3UVdXZ2OHz/e6eqSut5a1tbWqrS0VBcuXAh2KX7lc5hu2bJF8+fP1+uvv64TJ04oNTVVGRkZqqysdI/JzMyUy+XydSrA765fv64XX3xR/fr105gxYzR06FA9/vjjOnHiRLBL63IuX76szMxMDRgwQM8884ySkpI0atQonTlzJtil+YXPYfqb3/xGOTk5mjVrlh599FG988476tevn37729+6x4wePVoNDQ0qLS31dTrAb9ra2jR27Fht3bpVTU1Nqq+v182bN1VWVqa0tDR99NFHwS6xy2hqatLIkSO1e/du91o2NTWpuLhYw4cPV01NTbBLtM6nMG1ublZpaanS09M92tPT01VcXOy+7XQ6lZGRoZ07d/oyHeBX+/bt06lTp3Tr1q12fTdu3NDSpUuDUFXXtHnzZlVXV+v27dse7W1tbWpsbNSKFSuCVJn/+BSmtbW1am1tVVxcnEd7XFycqqurPdoyMzMJ0y+5wsJCRUdHe2xpaWnBLstt69atamxs7LCvra1N77//foArurPOvpbr16/X9evXO+y7deuWNm3aFOCK/C80UBNlZGRoypQpqqys1MCBAwM1rc/y8vI4IrEkLS1Nq1at8mg7deqUvvvd7973fTocDl/LumfXr18P6Hx309XX8tNPPw3aWi5ZskR5eXnW79enMI2JiVFISEi78x81NTWKj4/3aKuoqFBkZKRiY2N9mTLg8vLy/LLwXd39/CFERkZqyJAhHm11dXU+1WHz2+G3bduml156SQ0NDR32jxs3Tnv37rU23+e641q+/fbb+vnPf64bN2606wsNDdX06dPbPRl0dT69zA8LC1NKSoqKioo82ouKipSamurR5nK5NH78eIWHh/syJeA3WVlZeuihhxQSEtKuLzIyUm+88UYQquqaZsyYofDw8A6fKHr27Kmf/OQnQajKv3y+mr9gwQIVFBRozZo1On36tObPn68LFy5o9uzZHuNcLpcyMzN9nQ7wG6fTqcOHD2vYsGGKjIxUr169JEkPPvigNm7cqCeffDLIFXYdffr00d///nclJSW5z+lKUnx8vAoLC9sdVXcHPp8zff7553XlyhUtW7ZMFy9e1GOPPaYPPvhACQkJ7jHnzp1TWVlZh280BjqThx9+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\n", | |
"text/plain": [ | |
"<Figure size 430.026x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "roS4qY3sAsh_", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Alice needs to perform an \"entangled\" measurement. She can do this by running the standard $H + CNOT$ circuit in reverse." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "Hw8Rcz8kcOjz", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 248 | |
}, | |
"outputId": "a6283205-a597-4c7d-84dc-b076d02d1338" | |
}, | |
"source": [ | |
"projectq.ops.CNOT | (alice_psi,alice)\n", | |
"projectq.ops.H | alice_psi\n", | |
"\n", | |
"teleport.flush()\n", | |
"circuit_backend.draw();" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 539.814x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "c_JZhWI1A-5I", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Alice measures her two qubits and stores the results in two classical variables that get sent to Bob. (In Qiskit, the measurement results are explicitly stored in their own register.)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "_mstAC3BcjV3", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 248 | |
}, | |
"outputId": "c8209686-0cf6-4263-8dba-c025d481f164" | |
}, | |
"source": [ | |
"projectq.ops.Measure | alice_psi\n", | |
"projectq.ops.Measure | alice\n", | |
"\n", | |
"msg_to_bob = [int(alice_psi), int(alice)]\n", | |
"\n", | |
"teleport.flush()\n", | |
"circuit_backend.draw();" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAcYAAADnCAYAAACE5fYOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAexUlEQVR4nO3dfVhUZd4H8O8Ig7z5AiKgqYNimW5mwUZKxZIpxEoMthqb5oYUZljieunq6lWQae1eZeYblBqLL5lWvkxpoZhhGuYKvmys7nqVIoKCoiKIIs7M/fzxPM5zj7zIMMzMGfx+rmv+mPvcZ+7f3MzMl3PmnDMqIYQAERERAQA6OLoAIiIiJWEwEhERSRiMREREEgYjERGRhMFIREQkYTASERFJGIxEREQSBiMREZGEwUhERCRhMBIREUkYjERERBIGIxERkYTBSEREJGEwEhERSRiMREREEgYjERGRhMFIREQkYTASERFJGIxEREQSBiMREZGEwUhERCRhMBIREUkYjERERBIGIxERkYTBSEREJGEwEhERSRiMREREEgYjERGRhMFIREQkYTASERFJGIxEREQSBiMREZGEwUhERCRhMBIREUkYjERERBIGIxERkYTBSEREJGEwEhERSRiMREREEgYjERGRhMFIREQkYTASERFJ7vpgDAoKgkql4u22W1BQkKP/NETtlhI+d/geb5pKCCEcXYQjqVQq3OVT0CjOC5HtKOH9pYQalOqu32IkIiKSMRiJiIgkDEYiIiIJg5GIiEjCYCQiIjO+vr52OTLW19fX0U+1UTwqlUdmNYrzQmQ7Snh/NVeDvepTwjw0hluMREREEgYjERHZ3M6dO2EwGBxdRoswGImIyKby8vKQnJyMuro6R5fSIgxGIiKymZs3b+K1117DBx98AC8vL0eX0yIWB2NeXp7F19jLzs7GsWPHLB2q3XjyySexZs0aR5cBAAgLC8OmTZscXQYR3SWWLVuGnj174tlnn3V0KS3WJluMGRkZ6Nu3L9zd3REaGoq9e/eaLS8oKEBGRkZbDGVXiYmJpsOKXV1d0adPH7z66qu4fPlyix9j+/btOHPmDMaPH29qu3HjBl5//XX4+fnBy8sLcXFxKC0tbfZxmrro8KhRo0x9ampqMG3aNGg0Gnh4eCA8PBwHDx40e5w33ngDs2fPhtFobPFzIGrvDAYDtm/fjmnTpmHmzJn46aefFHW0ZGJiImJjYxu0FxQUQKVSobi42P5FtcC5c+ewYMECLF26FCqVytHltJjVwbhx40akpqZizpw5OHz4MMLDwxETE4OSkhJTH61WC51OZ+1QDjFixAicO3cOxcXFWLVqFb7++mukpKS0eP3FixcjMTERLi4uprZp06Zh06ZN+Oyzz7B3715UV1cjNja22S+mDx48iHPnzpluhw4dgkqlwnPPPWfq8/LLL2PHjh1YvXo1fv75Z0RFRWHEiBEoKysz9fn973+PmpoafPvttxbOBFH7VFFRgUGDBuGPf/wjFi9ejIULF2LEiBGIjo52mu/EHO3GjRuor69v0D5z5kwkJydjwIABDqjKCsJC33//vdBoNKb7YWFh4uWXXzbr079/fzF79mzT/fr6etGlSxdRUFBg6XA219wUvPjii2LUqFFmbdOnTxe+vr5i9erVwtfXV9TV1ZktHzdunHjmmWeEEEKcP39eqFQqceTIEdPyqqoqoVarxbp160xtJSUlQqVSiZycnBbXPX/+fNGlSxdx7do1IYQQ165dEy4uLmLr1q1m/UJCQsTcuXPN2iZOnCjGjx/f7OO34qVB5JTCwsKEq6urAGB28/DwEJMnT7bJmJa+vxr7LBJCiIMHDwoA4tSpU21aw53qMxqNYteuXUKr1QpPT0+hVquFq6ur6Ny5s5gwYYL45z//Kfbs2SN69+4trl692upxHMWqLcb6+noUFhYiKirKrD0qKgr5+fmm+2q1GjExMdi6das1wzncyZMnkZOTA7VajbFjx8JoNJptCV+5cgVbtmzBSy+9BADYt28fOnbsiAceeMDUp7CwEDdv3jSbs969e2PgwIFmc9YcIQQ++eQTvPDCC/Dw8AAA6PV6GAwGuLu7m/X18PDAvn37zNrCwsKwZ88ey548UTv0888/o6ioCHq9vsGy69evY/Xq1bh69aoDKlOubdu24YEHHkBqaipiYmJQVlZm2mI8ceIEBg8ejLFjx+Lpp5/GK6+84jQH3MisCsbKykoYDAYEBASYtQcEBKC8vNysTavVOmUw5uTkwNvbGx4eHggODsaxY8cwa9YseHh4YPz48cjKyjL1Xb9+PTp37mz63u/06dPw9/c3241aXl4OFxcX+Pn5mY3T2Jw1JTc3F6dOnUJycrKprVOnThg2bBjmz5+PsrIyGAwGrFu3Dvv378e5c+fM1u/ZsyfKysoa/TAgupscOXIEHTo0/TGoVqvxyy+/2LGipt36LJJvERERdq1hxYoVmDRpEhYtWoSff/4Zr7zyCrp27Wo65iEgIAAzZ85Eamoq+vXrhw8//BDbtm2za41twdVeA8XExGDcuHEoKSlBnz597DWs1SIiIrBixQpcv34dK1euxK+//oqpU6cCAJKTkxESEoLS0lL06tULWVlZePHFF+Hq+r/Tev369QZbcG1h5cqVeOSRRzBkyBCz9rVr1yIpKQm9evWCi4sLQkJC8Pzzz6OwsNCsn4eHB4QQqKurg7e3d5PjONOX5US2UF1djYcfftjRZQD4/88iWVFREUaPHt3qx7TkPb5582bMmzcPe/fuRXBwcJP9ysvL8c477+CHH34wHT/x9ddfY+jQoVbX0Ji0tDSkp6db9Ri3syoY/fz84OLigoqKCrP2iooKBAYGmrWdPn0anp6e8Pf3t2ZIu/P09ET//v0BAEuWLMGTTz6Jt99+G+np6RgyZAhCQkKQnZ2N+Ph4FBQUYN26daZ1/fz8GhzBGhgYCIPBgMrKSnTv3t3UXlFRgSeeeOKO9Zw/fx46nQ7Lly9vsCw4OBh79uxBbW0tqqur0aNHDyQkJKBfv35m/S5dugR3d/dmQxGAoo7KI7KFuro6+Pv7o6amptHlDz74II4ePdrm47YmDOTPoluqqqqsqqOp9/jt9V2+fBnJycnYuXNns6EIALNmzcLEiRMxcOBAAMAnn3yChIQE/Prrr6aNhpbU4EhW7Up1c3NDaGgocnNzzdpzc3MRHh5u1qbT6RAdHW2TLSh7SktLw9///necPXsWwP9uNWZnZ2PVqlV47LHHzI6+evjhh3HhwgVUVlaa2kJDQ6FWq83mrLS0FMePH28wZ43Jzs5Gx44d8fzzzzfZx8vLCz169MDly5exY8cOaLVas+VFRUUICQlp8XMmaq/c3d2RmZlp+q7+FpVKBS8vL6xcudJBlSnLmjVrEB0djdDQ0Gb77du3D9999x3eeOMNU1tcXBx69OjhXEfCW3q0zu1HpW7YsEGo1WqxcuVKcezYMTF16lTh5eUliouLzdYLDQ0Vq1evtuZAIZtobgqaOhIsJCREvPrqq0IIIaqrq4WXl5dwc3MTWVlZZv30er3w9/cXW7ZsMWufPHmyuOeee0Rubq44dOiQiIyMFEOGDBF6vd7UZ8CAAWLp0qVm6xmNRnHvvfc2OAr4lpycHPHNN9+IkydPip07d4ohQ4aIRx99VNTX15v1+93vfifmzZvX5PMWQrlHixHZwq5du8TQoUNFhw4dBADxzDPPiH/96182G8/S95cjj0o1Go1i4MCBIi8vr9nHu3nzpnjwwQfFhg0bGizLyspqtH6lfs5YHYxCCLF8+XKh0WiEm5ubCAkJEXv27DFbfubMGeHq6iouXrxoVbG20Jpg/PTTT4Wbm5sp/CdOnCg6derU6GHJs2fPFmPGjDFrq6urE6+99prw9fUVHh4eIjY2VpSUlDSoKy0tzaxt9+7dAoA4cOBAo/Vu3LhR9OvXT7i5uYnAwEAxZcoUUVVVZdantLRUqNVqcebMmSaf963xie42RqPRLq99ZwrGAwcOiAEDBgij0djs4y1ZskQMHz680X61tbXCx8dHnDt3rsU1OFKbBOOdLF++XERGRlo6lF20xR/m6aefbnIrrqKiQnTr1k2cPHnS6nHawowZM0RycvId+yn1BUtka0oMRnvXIC9bv369SEhIaPaxysvLhZ+fn/j3v//dZJ9HHnlE/PTTTy2uwZHsclSqTqdDfHy8PYayq8uXL2Pv3r3YuXNnk1/Q+/v7IysrCyUlJejbt6+dK2y8nhkzZji6DCJyEv3797/jka9nz57FX//6VwwaNKjJPhMnTkS3bt3aujybUAlh2SFBeXl5SExMVOy1+SxlzS9IBwUF4dKlS5g7dy5mzZrVxpU5llJ/WZvI1uzx2lfC+6u5GuxVnxLmoTEWbzEGBQVh2rRptqjF6bSXfw6IiOj/WbzF2N4o9T8WR+O80N2KW4zcYuQPFRMREUnsdkk4IiJyDj4+Pna5JKSPj4/Nx2gN7kpV6Ka8o3Fe6G7FXanEXalEREQSBiMREZGEwUhERCRhMBIREUkYjERERJK7/nQNjUbDX6pvhEajcXQJRO2WEj53+B5v2l1/ugYRkYynMRB3pRIREUkYjERERBIGIxERkYTBSEREJGEwEhERSRiMREREEgYjERGRhMFIREQkYTASERFJGIxEREQSBiMREZGEwUhERCRhMBIREUkYjERERBIGIxERkYTBSEREJGEwUqsEBQVBpVI59BYUFOToaWgTnEsiZVEJ/lQ1tYISfuVcCTW0BSU8DyXUoBScC+IWIxERkYTBSEREJGEwEhERSRiMREREEgYjERGRhMFIRERmfH197XKakK+vr6OfaqN4uga1ihIOaVdCDW1BCc9DCTUoBefCfnOg1LnmFiMR0f9R4od0e1FfX+/oElqMwUhEd7Xjx49j6tSp6NmzJ9zc3AAAwcHBeOutt3D27FkHV9c+lJeX4/7770dNTY2jS2kRBiMR3ZUuXbqE2NhYDB8+HF26dMEPP/yA2tpaAMCXX36J8vJy/OY3v0FKSopTbe0o0axZszBmzBh06tTJ0aW0iMXfMebl5SExMRHFxcUtXic7OxthYWEYNGiQpfWRQinhuwEl1NAWlPA8lFCDPVVWViIiIgIxMTF49913TVuKgPlcXLlyBRMmTIBer4dOp4NarXZUyXbVlq+HH3/8EQkJCTh+/HiDYFTq665NthgzMjLQt29fuLu7IzQ0FHv37jVbXlBQgIyMjLYYipxUYmIiYmNjG7QXFBRApVJZ9I+WPVRVVeHQoUOKqwtwvrmsrKxEYWGhYnZLCiHw7LPPIi4uDgsXLjQLxdt16dIFmzdvhqurK/785z/bscr2Qa/XY8qUKVi4cKHTbC0CbRCMGzduRGpqKubMmYPDhw8jPDwcMTExKCkpMfXRarXQ6XTWDkVkc7W1tfjTn/6EHj164Mknn8SgQYPw0EMP4fDhw44uzelcuHABWq0WvXv3xvDhwxEcHIwnnngCJ0+edGhdeXl5uHjxIt55550W9Xd1dcWaNWvw6aefory83MbVtS+ZmZno1q0bnnvuOUeXYhGrg/GDDz5AYmIikpOTMXDgQCxduhQ9evRAZmamqU9kZCRqampQWFho7XBENmM0GjFixAh8/vnnqKurQ3V1Na5fv46jR48iIiIC//3vfx1dotOoq6vDsGHD8O2335rmsq6uDvn5+QgLC0NFRYXDasvIyEBKSgo6dGj5x1/Xrl3x3HPPYdWqVTaszLno9Xp8+eWXeOWVVzB27FgkJCRgypQp2LlzJ4QQqKiowLx587B06VKoVCpHl2sRq4Kxvr4ehYWFiIqKMmuPiopCfn6+6b5arUZMTAy2bt1qzXBENrV7924UFRXhxo0bDZZdu3YNb731lgOqck4bNmxAeXk5bt68adZuNBpx9epVLFmyxCF11dTUICcnBxMmTLB43UmTJmHNmjU2qMq5XL58Ge+88w769u2LxYsXY/DgwRg7dixGjx6Nfv36YebMmRg4cCC0Wi3GjRvnlMeWuFqzcmVlJQwGAwICAszaAwICsGvXLrM2rVaLBQsW4O2337ZmSHJiOTk58Pb2NmszGo0Oqqahzz//HFevXm10mdFoxFdffWXnipqm9Llcu3at6QjP2924cQOfffYZFixYYOeqgPPnz6N79+7o3LmzxesOGDAAZWVlNqjKefz66694+umnMWzYMHz99dd46KGHGvSZPn06MjMzMX36dOj1ely4cAHdu3d3QLWtZ1UwWiImJgbjxo1DSUkJ+vTpY69hrZaens4thTYSERGBFStWmLUVFRVh9OjRrX5Me+6iqa2tVcwuIWefy1OnTjl0Lu80dnPLlfIasLfS0lJERkZi7ty5mDx5cpP9jEYjVq1ahU8++QRFRUV46qmnsG/fvib/GbF2PtPS0pCenm7VY9zOqmD08/ODi4tLg+8LKioqEBgYaNZ2+vRpeHp6wt/f35oh7S49Pb3NJ709aM2L2dPTE/379zdrq6qqsqqOtjzU+4svvsBLL73U5EnII0eOxM6dO9tsvFva41wuXLgQb775Jq5du9ZgmaurKyZOnNgg2O3h8uXL0Gg0uHDhAjp27Nhon6ZOIfjPf/6DkSNH4syZM7Yu0+Fuf00aDAbExcXh9ddfbzYUAeDjjz9G586dMW7cOAD/O+eJiYnYvHlzo/3b3ekabm5uCA0NRW5urll7bm4uwsPDzdp0Oh2io6Ph7u5uzZBENhMfH49u3brBxcWlwTJPT0/MmzfPAVU5p6SkJLi7uzca+h07dsRf/vIXB1QF+Pj4ICwsDJs2bbJ43ezsbKc7urKt7NixAx06dMDMmTOb7XfhwgWkpaVh2bJlpguFL1myBPn5+Th+/LidqrWe1UelTp8+HdnZ2Vi1ahWOHz+O1NRUnD17tsF/FTqdDlqt1trhiGxGrVZj3759GDJkCDw9PU3nXXXt2hXr16/H0KFDHVyh8/Dx8cGPP/6I4OBgeHt7m74PDQwMRE5OToOtXXtKSUmx+Lzquro6ZGVl3XFrqb36+OOPMXny5Dvu3Zg9ezYmTJiABx54wNTm5uaGpKQkh+whaDVhoe+//15oNBqztuXLlwuNRiPc3NxESEiI2LNnj9nyM2fOCFdXV3Hx4kVLhyOFsvSl8+KLL4pRo0Y1aD948KAAIE6dOmXzGixx5MgRsW7dOgFA1NfX22wcIdr3XBqNRrF//37TXBoMBpuMY4mbN2+K++67T6xYsaLR5bfPhdFoFK+99pqIj4+3R3mKIM9BaWmp8PHxETU1Nc2us3//ftGzZ09x5cqVBstOnjwpunXrJq5du9bkOErSJsF4J8uXLxeRkZGWDkUKpoQXtD1qaC9jKKEGJTzPW06cOCECAwMbDUe5ToPBIKZPny4GDx4sqqqq7FmiQ8lz8OWXX4q4uLhm++v1ehESEiLWrl3bZJ/BgweLQ4cONTmOktjlIuI6nQ7x8fH2GIqI6I7uvfde/PDDD3j//fcRHh6OTz/91Oz81aqqKixevBiDBg3CoUOHkJeXhy5dujiwYsfR6/XQaDTN9tm9eze8vLwwfvz4JvsEBwejrq6urcuzCbtcRJzaHyVc/NceNbSXMZRQgxKe5+30ej22bduGzMxM5Ofno3v37jh16hS8vb3xzDPP4NVXX8Xjjz9+152i0Zq/VV1dncUHVyrxNQG0IhiLi4uxdetWTJs2zVY1kRNQwgu6vXyYcy6V4cqVK6isrMTSpUuxYMECeHl5Obokh7HX30qprwmLg5EIUMYLur18mHMuSWnu9mDkDxUTERFJ7HZJOCIicg4+Pj52+V7Vx8fH5mO0BnelUqsoYRdIe9n9x7kkUhbuSiUiIpIwGImIiCQMRiIiIgmDkYiISMJgJCIikvB0DWoVjUbj8Mtk3en6jc6Cc0mkLDxdg6gZPMWg7XAuyVlwVyoREZGEwUhERCRhMBIREUkYjERERBIGIxERkYTBSEREJGEwEhERSRiMREREEgYjERGRhMFIREQkYTASERFJGIxEREQSBiMREZGEwUhERCRhMBIREUkYjERERBIGIxERkYTBSEREJGEwEhERSRiMREREEgYjERGRhMFIREQkYTASERFJGIxEREQSBiMREZGEwUhERCRxdXQBREpiMBiwfft2fPfdd6iqqgIALF68GBMmTICvr6+Dq3MuN27cwKZNm5Cfn4+amhoAwIoVKzBu3Dh4e3s7uDqipnGLkQhAfX09/va3v6Ffv35499130bt3b0RGRgIACgsLERwcjIkTJ+LkyZOOLdQJXL16FXPnzkWfPn3wj3/8A/379zfN5Y4dO6DRaPD666+joqLCsYUSNUElhBCWrJCXl4fExEQUFxe3eJ3s7GyEhYVh0KBBltZHZHNXr17F6NGj4erqigULFiAkJMS0TKVSQQiByspKZGRkIDMzEzqdDmFhYQ6sWLnOnz+PmJgY3H///XjzzTcxYMAA07Jbc1laWoqFCxdCp9MhJycH9913nwMrJmqoTbYYMzIy0LdvX7i7uyM0NBR79+41W15QUICMjIy2GIqoTen1eiQkJOCee+7Btm3bzEJR5ufnhzfffBMff/wx4uLicOLECTtXqny1tbUYNWoUoqOjsW7dOrNQlPXq1QuLFi3C7NmzER0dzS1HUhyrg3Hjxo1ITU3FnDlzcPjwYYSHhyMmJgYlJSWmPlqtFjqdztqhiNrcpk2bcPHiRaxcuRIuLi537B8XF4cZM2Zg5syZdqjOuXz00Ue45557sGDBAqhUqjv2nzRpErRaLebNm2eH6ogsICz0/fffC41GY7ofFhYmXn75ZbM+/fv3F7Nnzzbdr6+vF126dBEFBQWWDkdkUxEREeKLL75ocnljb5Gamhrh4+MjTp8+bcvSnIrBYBDBwcFi//79TfZpbC7PnDkjfHx8RHV1tS3LI7KIVVuM9fX1KCwsRFRUlFl7VFQU8vPzTffVajViYmKwdetWa4YjalPHjh3DL7/8Aq1Wa9F63t7eeOGFF7By5UobVeZ8du3ahc6dO+PRRx+1aL1evXohMjIS69evt1FlRJazKhgrKythMBgQEBBg1h4QEIDy8nKzNq1Wy2AkRTly5AieeOIJqNVqi9d96qmncPToURtU5ZyOHDmC4cOHt2gX6u04l6Q4lm5iyrtSy8rKBACxZ88esz5vvfWWuO+++8zaqqqqhEqlcrrdT2lpaQIAb7zxxhtvCrylpaW1+ee+VSf4+/n5wcXFpcFRZRUVFQgMDDRrO336NDw9PeHv72/NkHaXnp6O9PR0R5dBNrBhwwZs2rQJX3zxRZN9bp1icLvNmzdjzZo13Avyf95//32UlZVh0aJFTfZpai6XLFmCEydOYNmyZbYskajFrNqV6ubmhtDQUOTm5pq15+bmIjw83KxNp9MhOjoa7u7u1gxJ1GaGDh2KvLw8XL9+3eJ1t23bhmHDhtmgKucUHh6O7du3w2g0Wrwu55KUxurTNaZPn47s7GysWrUKx48fR2pqKs6ePYvJkyeb9dPpdBYf5EBkS0FBQXj00UexceNGi9a7dOkStmzZgqSkJBtV5nyGDRsGT09P7N6926L1Tpw4gaNHj2LMmDE2qozIclYHY0JCAj788EPMnz8fDz30EPbt24dvvvkGGo3G1Ke0tBRHjx5FbGystcMRtamUlBS89957qK2tbfE67733HmJjY9G9e3cbVuZcVCoVUlJSMH/+fOj1+hatI4TA22+/jaSkJHTs2NHGFRK1XJtc+SYlJQXFxcW4ceMGCgsLERERYbb8q6++wuOPP86LMJPixMTEYOjQoRgzZgyuXbt2x/6ZmZnYsGED3nvvPTtU51ySkpLg6emJl156CTdv3my2rxACb7zxBoqKijBnzhw7VUjUMna5iLhOp0N8fLw9hiKyiEqlwkcffQR/f3889thj2LJlS6NbPEVFRUhKSsLChQuRm5vb4OAyAlxdXfH555/j/PnzGDlyJHJzcxt85yiEwIEDB/CHP/wBOTk5+Pbbb9GpUycHVUzUOLv87NSOHTvsMQxRq6jVamRnZ+Ozzz7D+++/j6lTpyI+Ph7dunUDAEREROCXX37BpEmTcODAAVM7NeTt7Y2vvvoKWVlZmDFjBq5fv45Ro0aha9euAIDf/va3qKqqwuTJk7F27Vp4eXk5uGKihiz+dY3i4mJs3boV06ZNs1VNRA515MgR7N69G1VVVcjPz8eUKVMQGxvbqgsB3M2EEMjPz8f+/ftRXV2N/fv3Y8aMGRg5ciQ6dOAv3pFyWRyMRERE7Rn/bSMiIpIwGImIiCQMRiIiIgmDkYiISMJgJCIikjAYiYiIJAxGIiIiCYORiIhIwmAkIiKSMBiJiIgkDEYiIiIJg5GIiEjCYCQiIpIwGImIiCQMRiIiIgmDkYiISMJgJCIikjAYiYiIJAxGIiIiCYORiIhIwmAkIiKSMBiJiIgkDEYiIiIJg5GIiEjCYCQiIpIwGImIiCQMRiIiIgmDkYiISMJgJCIikjAYiYiIJAxGIiIiCYORiIhIwmAkIiKSMBiJiIgkDEYiIiIJg5GIiEjCYCQiIpIwGImIiCQMRiIiIgmDkYiISMJgJCIikjAYiYiIJAxGIiIiCYORiIhIwmAkIiKSMBiJiIgkDEYiIiIJg5GIiEjCYCQiIpIwGImIiCQMRiIiIgmDkYiISPI/yepxZCt6ab8AAAAASUVORK5CYII=\n", | |
"text/plain": [ | |
"<Figure size 583.014x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "jaE40zTMBRdm", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Assuming Bob now has received the two bits from Alice's measurement, he performs the conditional operations $X$ and $Z$." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "BB-RquG6c2co", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 248 | |
}, | |
"outputId": "78a97df8-845a-4869-eb5d-e9971d2ee193" | |
}, | |
"source": [ | |
"with projectq.meta.Control(teleport, alice):\n", | |
" projectq.ops.X | bob\n", | |
"with projectq.meta.Control(teleport, alice_psi):\n", | |
" projectq.ops.Z | bob\n", | |
"\n", | |
"teleport.flush()\n", | |
"circuit_backend.draw();" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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qiaqByzhgLCWD0WOpWW4desWioqKsGLFCixevBjOzs7mLslslPpdMWD8rr7UaSiDAwYRYBkHhLV8KHIsydIwYCirvtRpKEXuwSAiIqKGRbGvCiciovrB1dVVkftOXF1dTd4HmQ8vkVCdWMIpPWs5rc+xJDKN+rLP1Zc6DcVLJERERCQdAwYRERFJx4BBRERE0jFgEBERkXQMGERERCQdp6lSnXh7e5v965Mf9v8R6guOJRFZI05TJaqFtU4fMweOJSmtvuxz9aVOQ/ESCREREUnHgEFERETSMWAQERGRdAwYREREJB0DBhEREUnHgEFERETSMWAQERGRdAwYREREJB0DBhEREUnHgEFERETSMWAQERGRdAwYREREJB0DBhEREUnHgEFERETSMWAQERGRdAwYREREJB0DBhEREUnHgEFERETSMWAQERGRdAwYREREJB0DBhEREUnHgEFERETSMWAQERGRdAwYREREJB0DBhEREUnHgEFERETS2Zq7ACJLotFokJSUhP3796O4uBgAsGzZMowfPx4tWrQwc3X1y71797Br1y5kZmaitLQUALBmzRqEhYXBxcXFzNWRtSopKcGWLVvw448/AgCmT5+OXr16YcSIEbC3tzdzdQ0Lz2AQAaioqMDf//53dOjQAe+//z7atm2LPn36AACysrLg6+uLiRMn4ty5c+YttB4oKyvD3Llz0a5dO3z22Wfw8/PTjWVKSgq8vb0xffp0FBYWmrdQsir5+fmYOnUqfHx8sH//fjz11FMAAF9fX6xduxbe3t6YN28ebt++beZKGxBhoIMHDwpvb2+DHvPZZ5+J//znP4Z2RaSI0tJS8corr4iBAweKrKwsvXV/HCLXrl0TCxYsEJ6enuLYsWPmKLNeKCwsFP7+/iIsLEz897//1Vv3x1jm5uaKqKgo0b59e/Hzzz+bo0yyMjk5OcLb21u8/fbb4vLly7r2+z/izpw5I8aMGSOee+45ce3aNXOUWaM6fBTXC1ICxsqVK4WPj49o3Lix8Pf3F4cOHdJbHxkZKSIjI40qlMgUKisrxZ/+9CcxYcIEoVarq6x/8MBPTEwUHh4e/GCsRllZmXjuuefEO++8I7RabZX1D47l6tWrhY+PjygoKFCqRLJCeXl5ol27dmL9+vVV1j24z2m1WjF79mzRvXt3cefOHaVKfChrDRhGXyLZvn07Zs6ciXfffRc//PADgoKCEBISgkuXLum2CQ0NRWJiorFdEUm3a9cuXL9+HWvXroWNjc1Dtx86dChmz56N6OhoBaqrXz799FM89thjWLx4MVQq1UO3nzx5MkJDQ7Fw4UIFqiNrFRsbizFjxmDSpEkP3ValUuGDDz6Am5sb1qxZo0B11RNCIDExEcHBwfDy8gLw+2epVqs1W00mYWgiefAMRmBgoHj99df1tvHz8xMxMTG6nysqKkSzZs3EiRMn6pyEiEwhODhYfPHFFzWur+4QKS0tFa6uruLixYumLK1e0Wg0wtfXVxw9erTGbaoby9zcXOHq6ipKSkpMWR5ZqeLiYtG8eXORn59f7fqaPuIyMjJEx44dqz3TZmparVZMnjxZODs7CwC6xdnZWYwePVpoNBrFazIVo85gVFRUICsrC/3799dr79+/PzIzM3U/29nZISQkBHv27DGmOyKpzpw5g99++w2hoaEGPc7FxQXjxo3D2rVrTVRZ/bNv3z40bdoU3bt3N+hxXl5e6NOnD7Zs2WKiysiabdy4EQMGDICnp6dBj+vduzdsbW2Rnp5umsJqcfDgQWzevLnKzaa3b99GUlKSVZ3tNypgFBUVQaPRwMPDQ6/dw8MDBQUFem2hoaEMGGRRTp06hd69e8POzs7gx7788ss4ffq0Caqqn06dOoW+ffs+0qWRB3Esqa7+2O8MpVKpzLbfrVixosaZLLdv38bHH3+scEUmZOgpj/svkVy5ckUAEBkZGXrbLFiwQDzxxBN6bcXFxUKlUtW708rz58/XO43FhQsXLly4WNsyf/586Z+fRp3BcHNzg42NTZX57IWFhVVOWV28eBFOTk5wd3c3pkvFxcbGQvw+24aLlS1bt27FyJEja90GQLXtu3btQmhoqNlfg6Us//znPxEVFVWnsVy2bBkiIyPN/hq41L8lIiICcXFxNa6vaZ8TQiAyMhLLli1TvOawsDA0alTzR+/AgQPNMpaxsbHSPz+NChj29vYICAhAWlqaXntaWhqCgoL02hITEzFgwAA4ODgY0yWRND169EB6ejru3r1r8GP37t2Lnj17mqCq+ikoKAhJSUl1ugueY0l19cd+ZyiNRoNvvvnGLPtdVFRUjZ+Dzs7OmD17tsIVmY7R01RnzZqFhIQErFu3Djk5OZg5cyby8vIwZcoUve0SExMNvpmOyJR8fHzQvXt3bN++3aDH3bhxA7t3736kaXENRc+ePeHk5IQDBw4Y9LhffvkFp0+fxsiRI01UGVmzMWPG4NixYzh//rxBj0tJSUHLli3x/PPPm6iymj3//POYN28enJycdFPjGzVqBCcnJ0RGRuLll19WvCaTEQaq6Yu2vL29hb29vfD3969yT0Zubq6wtbUV169fN7Q7IpNKSkoSnTt3FmVlZdWur+4QiYmJEePGjTN1afXO6tWrxYsvvigqKyurXf/gWGq1WjFu3Di9Ke1Ehnr77bfFxIkTH+nL3YT4/WsTevXqJeLj45Uor0YnT54U4eHhomj/D1cAAAOlSURBVEePHiIsLKzWKd71lUqI/7tQ9YjS09MRHh6OCxcuPPJj4uLi8MUXX+DgwYMGhR8iUxNC4PXXX0deXh527doFJycnvfUqlQr3HyKrVq3CBx98gKNHjxo8Nc7aqdVqDB06FK1atcK6deuqzM65fyyFEJg3bx6SkpJw6NAhNGnSxBwlkxUoKSnBCy+8gFdffRX/8z//ozeT6cHjt7KyEuHh4SgtLcWXX34JW1v+v09TUuSfnSUmJmLYsGFKdEVkEJVKhU8//RTu7u7o1asXdu/eDbVaXWW77OxsTJo0CR9++CHS0tIYLqpha2uLHTt24OrVq+jXrx/S0tKq3JMhhMCxY8fw6quvIjk5Gd9++y3DBRmladOmSElJwZ49ezB69GgcP368yjZarRYpKSno27cvSkpKsHXrVoYLBSgywikpKUp0Q1QndnZ2SEhIwNatW7F06VLMmDEDw4YNQ8uWLQEAwcHB+O233zB58mQcO3ZM105Vubi44KuvvkJ8fDxmz56Nu3fvYtCgQWjevDkA4LnnnkNxcTGmTJmCjRs3wtnZ2cwVkzVo3bo1Dh06hFWrVmH06NFwc3PT/Qfft956C19//TWaNGmCyMhIhIeHM1woxOBLJBcuXMCePXsQFRVlqpqIzOrUqVM4cOAAiouLkZmZicjISAwePLhOX8jVkAkhkJmZiaNHj6KkpARHjx7F7Nmz0a9fv1qn6REZQ6PRIDU1FT/99BOSkpIwZMgQ9OrVCz169KjTF8FR3RkcMIiIiIgehn9GEBERkXQMGERERCQdAwYRERFJx4BBRERE0jFgEBERkXQMGERERCQdAwYRERFJx4BBRERE0jFgEBERkXQMGERERCQdAwYRERFJx4BBRERE0jFgEBERkXQMGERERCQdAwYRERFJx4BBRERE0jFgEBERkXQMGERERCQdAwYRERFJx4BBRERE0jFgEBERkXQMGERERCQdAwYRERFJx4BBRERE0jFgEBERkXQMGERERCQdAwYRERFJx4BBRERE0jFgEBERkXQMGERERCQdAwYRERFJx4BBRERE0jFgEBERkXQMGERERCQdAwYRERFJx4BBRERE0jFgEBERkXQMGERERCQdAwYRERFJx4BBRERE0jFgEBERkXQMGERERCQdAwYRERFJx4BBRERE0jFgEBERkXQMGERERCQdAwYRERFJx4BBRERE0jFgEBERkXQMGERERCQdAwYRERFJx4BBRERE0v0vyCeaMDUndnkAAAAASUVORK5CYII=\n", | |
"text/plain": [ | |
"<Figure size 691.927x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "tIW5Wn9LBbZQ", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"In principle, that is it! Let's run the simulation again to see if Alice's state has been teleported." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "ZvKsTw4YdT1x", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 459 | |
}, | |
"outputId": "5dc67da5-6998-4086-e00e-b0086d10b363" | |
}, | |
"source": [ | |
"teleport = projectq.MainEngine() \n", | |
"\n", | |
"alice_psi = teleport.allocate_qubit()\n", | |
"alice = teleport.allocate_qubit()\n", | |
"bob = teleport.allocate_qubit()\n", | |
"\n", | |
"# state creation\n", | |
"projectq.ops.Ry(np.pi/4) | alice_psi\n", | |
"\n", | |
"# entangle\n", | |
"projectq.ops.H | alice\n", | |
"projectq.ops.CNOT | (alice,bob)\n", | |
"\n", | |
"# measure\n", | |
"projectq.ops.CNOT | (alice_psi,alice)\n", | |
"projectq.ops.H | alice_psi\n", | |
"projectq.ops.Measure | alice_psi\n", | |
"projectq.ops.Measure | alice\n", | |
"\n", | |
"msg_to_bob = [int(alice_psi), int(alice)]\n", | |
"\n", | |
"# correct\n", | |
"with projectq.meta.Control(teleport, alice):\n", | |
" projectq.ops.X | bob\n", | |
"with projectq.meta.Control(teleport, alice_psi):\n", | |
" projectq.ops.Z | bob\n", | |
"\n", | |
"# print\n", | |
"\n", | |
"teleport.flush()\n", | |
"print(teleport.backend.cheat())" | |
], | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"({2: 0}, [(0.9238795325113724+0j), (0.38268343236488256+0j)])\n" | |
], | |
"name": "stdout" | |
}, | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Exception ignored in: <bound method Qubit.__del__ of <projectq.types._qubit.Qubit object at 0x7f21bc2da240>>\n", | |
"Traceback (most recent call last):\n", | |
" File \"/usr/local/lib/python3.6/dist-packages/projectq/types/_qubit.py\", line 135, in __del__\n", | |
" self.engine.deallocate_qubit(weak_copy)\n", | |
" File \"/usr/local/lib/python3.6/dist-packages/projectq/cengines/_basics.py\", line 153, in deallocate_qubit\n", | |
" tags=[DirtyQubitTag()] if is_dirty else [])])\n", | |
" File \"/usr/local/lib/python3.6/dist-packages/projectq/cengines/_main.py\", line 288, in send\n", | |
" raise compact_exception # use verbose=True for more info\n", | |
"RuntimeError: Error: Qubit has not been measured / uncomputed! There is most likely a bug in your code.\n", | |
" raised in:\n", | |
"' File \"/usr/local/lib/python3.6/dist-packages/projectq/backends/_sim/_simulator.py\", line 387, in _handle'\n", | |
"' self._simulator.deallocate_qubit(ID)'\n" | |
], | |
"name": "stderr" | |
}, | |
{ | |
"output_type": "stream", | |
"text": [ | |
"({0: 0, 1: 1, 2: 2}, [(0.9238795325113724+0j), 0j, 0j, 0j, (0.38268343236488256+0j), 0j, 0j, 0j])\n" | |
], | |
"name": "stdout" | |
}, | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Exception ignored in: <bound method Qubit.__del__ of <projectq.types._qubit.Qubit object at 0x7f21bc38d9b0>>\n", | |
"Traceback (most recent call last):\n", | |
" File \"/usr/local/lib/python3.6/dist-packages/projectq/types/_qubit.py\", line 135, in __del__\n", | |
" self.engine.deallocate_qubit(weak_copy)\n", | |
" File \"/usr/local/lib/python3.6/dist-packages/projectq/cengines/_basics.py\", line 153, in deallocate_qubit\n", | |
" tags=[DirtyQubitTag()] if is_dirty else [])])\n", | |
" File \"/usr/local/lib/python3.6/dist-packages/projectq/cengines/_main.py\", line 288, in send\n", | |
" raise compact_exception # use verbose=True for more info\n", | |
"RuntimeError: Error: Qubit has not been measured / uncomputed! There is most likely a bug in your code.\n", | |
" raised in:\n", | |
"' File \"/usr/local/lib/python3.6/dist-packages/projectq/backends/_sim/_simulator.py\", line 387, in _handle'\n", | |
"' self._simulator.deallocate_qubit(ID)'\n" | |
], | |
"name": "stderr" | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "2i3dkPcHBh2b", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"Excellent! Now it's your turn. Here we wrote an ugly script if it's put all together. Why don't you create your own functions to perform teleportation of any state?" | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment