{ "cells": [ { "cell_type": "markdown", "id": "29990c15", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "# Perceval Detailed Walkthrough" ] }, { "cell_type": "markdown", "id": "c1e5e2ac", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "In this notebook, we aim to reproduce the $\\mathsf{CNOT}$ Gate to \n", "evaluate its performance while demonstrating key features of Perceval. We use as basis the implementation from [1]." ] }, { "cell_type": "code", "execution_count": 1, "id": "bb751c13", "metadata": { "pycharm": { "name": "#%%\n" }, "scrolled": true }, "outputs": [], "source": [ "import perceval as pcvl\n", "import perceval.lib.phys as phys\n", "import sympy as sp\n", "import numpy as np" ] }, { "cell_type": "markdown", "id": "cb91de5c", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Ralph CNOT Gate" ] }, { "cell_type": "markdown", "id": "d1d6cd32", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "We start by describing the circuit as defined by the paper above- it is a circuit on six modes (labelled from 0 to 5 from top to bottom) consisting of five beam splitters. Modes 1 and 2 contain the control system while modes 3 and 4 encode the target syestem. Modes 0 and 5 are unoccupied ancillary modes." ] }, { "cell_type": "code", "execution_count": 2, "id": "83ff4732", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": "", "text/html": "\n0\n\n1\n\n2\n\n3\n\n4\n\n5\n\n\n\n\n\nphi_b=pi, phi_d=0\nR=1/3\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nphi_b=pi, phi_d=0\nR=1/3\n\n\n\n\n\n\n\n\nR=1/3\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n0\n\n1\n\n2\n\n3\n\n4\n\n5" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cnot = phys.Circuit(6, name=\"Ralph CNOT\")\n", "cnot.add((0, 1), phys.BS(R=1/3, phi_b=sp.pi, phi_d=0))\n", "cnot.add((3, 4), phys.BS(R=1/2))\n", "cnot.add((2, 3), phys.BS(R=1/3, phi_b=sp.pi, phi_d=0))\n", "cnot.add((4, 5), phys.BS(R=1/3))\n", "cnot.add((3, 4), phys.BS(R=1/2))\n", "pcvl.pdisplay(cnot)" ] }, { "cell_type": "markdown", "id": "ed7b0498", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "We can then simulate this circuit using the `Naive` backend on four different input states corresponding to the two-qubit computational basis states. We use `CircuitAnalyser` to analyse the performance of the gate." ] }, { "cell_type": "code", "execution_count": 3, "id": "87a00b53", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": "", "text/html": "\n\n\n\n\n\n\n\n\n\n
00 01 10 11
000.9999910 0 0
010 0.9999910 0
100 0 0 0.999991
110 0 0.9999910
" }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "performance=1/9, error rate=0.000%\n" ] } ], "source": [ "simulator_backend = pcvl.BackendFactory().get_backend(\"Naive\")\n", "s_cnot = simulator_backend(cnot.U)\n", "\n", "states = {\n", " pcvl.BasicState([0, 1, 0, 1, 0, 0]): \"00\",\n", " pcvl.BasicState([0, 1, 0, 0, 1, 0]): \"01\",\n", " pcvl.BasicState([0, 0, 1, 1, 0, 0]): \"10\",\n", " pcvl.BasicState([0, 0, 1, 0, 1, 0]): \"11\"\n", "}\n", "\n", "ca = pcvl.CircuitAnalyser(s_cnot, states)\n", "ca.compute(expected={\"00\": \"00\", \"01\": \"01\", \"10\": \"11\", \"11\": \"10\"})\n", "pcvl.pdisplay(ca)\n", "print(\"performance=%s, error rate=%.3f%%\" % (pcvl.simple_float(ca.performance)[1], ca.error_rate))" ] }, { "cell_type": "markdown", "id": "0cd5fcf4", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Beyond the actual logic function, what is interesting with this gate us that it produces entangled states that we will be trying to check with CHSH experiment when the source is not perfect." ] }, { "cell_type": "markdown", "id": "c0fb4c12", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Checking for entanglement with CHSH experiment\n", "![https://en.wikipedia.org/wiki/File:Two_channel_bell_test.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Two_channel_bell_test.svg/1340px-Two_channel_bell_test.svg.png)\n", "*https://en.wikipedia.org/wiki/File:Two_channel_bell_test.svg*" ] }, { "cell_type": "markdown", "id": "4e523cfc", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "To reproduce this Bell test protocol, we define a new circuit which uses the $\\mathsf{CNOT}$ gate implemented above as a sub-circuit. The parameters $a$ and $b$ describe the measurement bases used by players $A$ and $B$ in the runs of the Bell-test." ] }, { "cell_type": "code", "execution_count": 4, "id": "6b889867", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": "", "text/html": "\n0\n\n1\n\n2\n\n3\n\n4\n\n5\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nRALPH CNOT\n\n\n\n\n\n\ntheta=a\n\n\n\n\n\n\n\ntheta=b\n\n\n\n\n0\n\n1\n\n2\n\n3\n\n4\n\n5" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "test_cnot = phys.Circuit(6)\n", "test_cnot.add((1, 2), phys.BS())\n", "\n", "test_cnot //= cnot\n", "\n", "a = pcvl.Parameter(\"a\")\n", "b = pcvl.Parameter(\"b\")\n", "\n", "test_cnot.add((1, 2), phys.BS(theta=a))\n", "test_cnot.add((3, 4), phys.BS(theta=b))\n", "\n", "pcvl.pdisplay(test_cnot)" ] }, { "cell_type": "markdown", "id": "1c96eaec", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "We start by setting the values of the two parameters to 0, meaning that the beam splitters after the $\\mathsf{CNOT}$ effectively act as the identity. " ] }, { "cell_type": "code", "execution_count": 5, "id": "1e935739", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "a.set_value(0)\n", "b.set_value(0)" ] }, { "cell_type": "markdown", "id": "3451e7d1", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "We now define a photon source with a brightness of 40% and a purity of 99%. We then define a `Processor` which plugs two such sources to the circuit above, on ports 2 and 3 (using the 0-index convention)." ] }, { "cell_type": "code", "execution_count": 6, "id": "1b626655", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "source = pcvl.Source(brightness=0.40, purity=0.99)\n", "QPU = pcvl.Processor({2:source, 3:source}, test_cnot)" ] }, { "cell_type": "markdown", "id": "fcdef3f6", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "We now detail the different state vectors that are the probabilistic inputs to the circuit. The most frequent input is the empty state, followed by two states with only a single photon on either of the input ports, then by the expected nominal input $|0,0,1,1,0,0\\rangle$." ] }, { "cell_type": "code", "execution_count": 7, "id": "e8af01a9", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": "", "text/html": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
state probability
|0,0,0,0,0,0>9/25
|0,0,0,1,0,0>0.2376
|0,0,1,0,0,0>0.2376
|0,0,1,1,0,0>0.1568
|0,0,0,2,0,0>0.0024
|0,0,2,0,0,0>0.0024
|0,0,2,1,0,0>0.0016
|0,0,1,2,0,0>0.0016
|0,0,2,2,0,0>0
" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pcvl.pdisplay(QPU.source_distribution, precision=1e-4)" ] }, { "cell_type": "markdown", "id": "73af9f32", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "We can then check the output state distribution corresponding to this input distribution." ] }, { "cell_type": "code", "execution_count": 8, "id": "cbee9802", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": "", "text/html": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
state probability
|0,0,0,0,0,0> 0.360006
|0,0,0,1,0,0> 0.118802
|0,0,1,0,0,0> 0.118802
|0,0,0,0,0,1> 0.079201
|1,0,0,0,0,0> 0.079201
|0,0,0,0,1,0> 0.039601
|0,1,0,0,0,0> 0.039601
|0,0,2,0,0,0> 0.017758
|0,0,0,2,0,0> 0.017758
|1,0,1,0,0,0> 0.017691
" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "_, output_distribution=QPU.run(simulator_backend)\n", "pcvl.pdisplay(output_distribution, max_v=10)" ] }, { "cell_type": "markdown", "id": "3cda6b52", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Let us run now the experiment with decreasing value of purity in the range $[0.98,1]$ and check the CHSH inequality." ] }, { "cell_type": "code", "execution_count": 9, "id": "3f29137a", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": " 0%| | 0/40 [00:00", "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "plt.title(\"CHSH value with purity\")\n", "plt.xlabel(\"impurity (%)\")\n", "plt.ylabel(\"bell inegality\")\n", "plt.axhline(y=2, linewidth=2, color=\"red\", label= 'horizontal-line')\n", "plt.plot(x, y, color =\"green\")\n", "plt.grid(color='b', dashes=(3, 2, 1, 2))\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "1329a625", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Beyond only 1% of impurity, we are crossing the value $2$, ie not violating anymore the $|CHSH|\\le 2$ inegality!" ] }, { "cell_type": "markdown", "source": [ "## Reference" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } } }, { "cell_type": "markdown", "source": [ "[1] T. C. Ralph, N. K. Langford, T. B. Bell, and A. G. White. Linear optical controlled-NOT gate in the coincidence basis. [Physical Review A](https://link.aps.org/doi/10.1103/PhysRevA.65.062324), 65(6):062324, June 2002. Publisher: American Physical Society." ], "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } } } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" } }, "nbformat": 4, "nbformat_minor": 5 }