{ "cells": [ { "cell_type": "markdown", "id": "5c38153e", "metadata": {}, "source": [ "# Introduction to quantum photonics" ] }, { "cell_type": "code", "execution_count": 1, "id": "e20f1af2", "metadata": {}, "outputs": [], "source": [ "import qoptkit # QOPTKIT module\n", "import numpy as np # Numpy\n", "from math import acos,sqrt,pi # Mathematical module\n", "from qiskit import QuantumCircuit # QISKIT Circuits \n", "from qiskit_aer import Aer # QISKIT Aer" ] }, { "cell_type": "markdown", "id": "400ec6a7", "metadata": {}, "source": [ "## 1 Basic concepts" ] }, { "cell_type": "markdown", "id": "567c03d3", "metadata": {}, "source": [ "### 1.1 Circuit and state" ] }, { "cell_type": "markdown", "id": "d5f6d837", "metadata": {}, "source": [ "

An optical quantum computer is based on an ensemble of indistinguishable photons traveling through a set of optical gates. The kind of optical gates used and their interconnections define the circuit. The ensemble of photons define the state of the quantum operation. In a superconductor qubit based hardware, the active part of the computation is performed by the qubits. However, in an optical quantum computer the active part of the computation is performed by photons traveling trough the circuit. Therefore a quantum optical computer will consist of a set of emitters, an optical circuit and a set of detectors. Those define the input state, the transformation rules of the circuit and the output state respectively.

\n", " \n", "

Photons may arrive to the optical circuit by different channels or modes. For example, we can see next a simple circuit made of a single balanced beamsplitter with two channels labeled as \"0\" and \"1\".

" ] }, { "cell_type": "code", "execution_count": 2, "id": "d344f067", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create circuit\n", "hom = qoptkit.qocircuit(2);\n", "# Build circuit\n", "hom.bs(0,1,45.0,0.0)\n", "# Plot circuit\n", "hom.show()" ] }, { "cell_type": "markdown", "id": "ff086211", "metadata": {}, "source": [ "A beamsplitter can be represented by the transformation between input and output bosonic operators:\n", "\n", "$$ \\begin{equation}\n", "\t\\begin{matrix}\n", "\t\t\\hat{a}_0^\\dagger \\rightarrow & \\cos(\\theta)\\hat{a}_0^\\dagger + e^{-i \\phi}\\sin(\\theta) \\hat{a}_1^\\dagger \\\\\n", "\t\t\\hat{a}_1^\\dagger \\rightarrow & -e^{i \\phi} \\sin(\\theta)\\hat{a}_0^\\dagger + \\cos(\\theta) \\hat{a}_1^\\dagger. \n", "\t\\end{matrix}\n", "\\end{equation} \n", "$$" ] }, { "cell_type": "markdown", "id": "7420b823", "metadata": {}, "source": [ "

For the moment, we can think of the channels in an optical circuit as being equivalent to qubits in a computer based on superconductor qubits. We will refine this idea later on. Note that photons are bosonic states therefore states of an optical quantum machine may have more than one photon in each channel. For example we can define a state with two photons in the first channel and zero photons in the second one as follows:

" ] }, { "cell_type": "code", "execution_count": 3, "id": "d93f8a64", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[36m | 2, 0 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n" ] } ], "source": [ "# Define a |2,0> state\n", "inputst = qoptkit.state(2,st=[[1.0,[2,0]]])\n", "# Print the state\n", "inputst.prnt_state()" ] }, { "cell_type": "markdown", "id": "a3d60fd1", "metadata": {}, "source": [ "### 1.2 Simulation" ] }, { "cell_type": "markdown", "id": "4b4ce7bc", "metadata": {}, "source": [ "

By convention we consider that photons travel trough a circuit from the left to the right direction. We can use the previously defined state as an input state of the beamsplitter circuit and calculate the corresponding output state.

" ] }, { "cell_type": "code", "execution_count": 4, "id": "48852a10", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[36m | 2, 0 >\u001b[0m: 0.50000000 + 0.00000000 j\n", "\u001b[36m | 1, 1 >\u001b[0m: 0.70710678 + 0.00000000 j\n", "\u001b[36m | 0, 2 >\u001b[0m: 0.50000000 + 0.00000000 j\n", "\n" ] } ], "source": [ "# Create a simulator\n", "sim=qoptkit.simulator()\n", "# Calculate the output\n", "outputst=sim.run(inputst,hom)\n", "# Print output state\n", "outputst.prnt_state()" ] }, { "cell_type": "markdown", "id": "985934a9", "metadata": {}, "source": [ "

In this particular case we can see how each photon has a 1/2 of probability to be detected in each of the channels because the beamsplitter is balanced. Therefore, this circuit implements the transformation,

\n", "\n", "$$ \n", "\\begin{equation}\n", "\\begin{split}\n", "|2, 0 \\rangle &=\\frac{\\bigl(\\hat{a}_{0}^{\\dagger}\\bigr)^{2}} {\\sqrt{2!}}\\frac{\\bigl(\\hat{a}_{1}^{\\dagger}\\bigr)^{0}}{\\sqrt{0!}}|0, 0 \\rangle \n", "\\rightarrow \\frac{1}{\\sqrt{2}} \\Bigl( \\hat{a}_{0}^{\\dagger}\\frac{1}{\\sqrt{2}}+\\hat{a}_{1}^{\\dagger}\\frac{1}{\\sqrt{2}}\\Bigr)^{2} |0, 0 \\rangle\n", "= \\frac{1}{2} |2, 0 \\rangle + \\sqrt2 |1, 1 \\rangle + \\frac{1}{2} |0, 2 \\rangle\n", "\\end{split}\n", "\\end{equation}\n", "$$" ] }, { "cell_type": "markdown", "id": "a464aa36", "metadata": {}, "source": [ "### 1.3 HOM Effect" ] }, { "cell_type": "markdown", "id": "ed0bf84e", "metadata": {}, "source": [ "

Of course, optical circuits may give rise to some interesting quantum effects. For example, the correlation at the output of indistinguishable photons that enter the beamsplitter by different channels. This effect is the well known Hong-Ou-Mandel effect [1].

" ] }, { "cell_type": "code", "execution_count": 5, "id": "c827b1d2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Input state:\n", "\u001b[36m | 1, 1 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n", "Output state:\n", "\u001b[36m | 2, 0 >\u001b[0m: -0.70710678 + 0.00000000 j\n", "\u001b[36m | 0, 2 >\u001b[0m: 0.70710678 + 0.00000000 j\n", "\n" ] } ], "source": [ "inputst = qoptkit.state(2,st=[[1.0,[1,1]]])\n", "outputst=sim.run(inputst,hom)\n", "print(\"Input state:\")\n", "inputst.prnt_state()\n", "print(\"Output state:\")\n", "outputst.prnt_state()" ] }, { "cell_type": "markdown", "id": "84bb117d", "metadata": {}, "source": [ "Note how in this case the outcome $|1,1\\rangle$ does not appear. The Hong-Ou-Mandel effect results in bunching both photons in one or the other output channel of the beamsplitter." ] }, { "cell_type": "markdown", "id": "ce493012", "metadata": {}, "source": [ "## 2 Basic gates" ] }, { "cell_type": "markdown", "id": "a04019a6", "metadata": {}, "source": [ "### 2.1 Qubit encoding" ] }, { "cell_type": "markdown", "id": "0c0e41eb", "metadata": {}, "source": [ "

But how a qubit is defined in a quantum optical circuit? And how I can define some of the logical gates that I know? For example qubit rotations. There are various ways to encode a photonic state into a logical qubit state. In this tutorial we will use path encoding. But what is path encoding?

\n", "\n", "

We will use a pair of channels to define a qubit. For example, channels \"0\" and \"1\" may define qubit \"0\". There will be only one photon by each pair of channels defining a qubit. The position of the photon will define the qubit value. If the photon is on the first channel this represents a logical \"1\". However, if the photon is in the second channel this means a logical \"0\".

\n", "\n", "Photonic state $\\rightarrow$ qubit:\n", "\n", "$|0,1\\rangle\\rightarrow |0 \\rangle$\n", "\n", "$|1,0\\rangle\\rightarrow |1 \\rangle$" ] }, { "cell_type": "markdown", "id": "af1f367e", "metadata": {}, "source": [ "

We can define a map specifying the channels for each qubit. Each pair of channels define a qubit and differentt qubits are defined in order from 0 to n.

" ] }, { "cell_type": "code", "execution_count": 6, "id": "4219dd12", "metadata": {}, "outputs": [], "source": [ "qmap=[[0, 1], [2, 3]]" ] }, { "cell_type": "markdown", "id": "9cef4189", "metadata": {}, "source": [ "

In this particular case, the map specifies that channels \"0\" and \"1\" define qubit \"0\" while channels \"2\" and \"3\" define qubit \"1\". We can encode photonic states into qubits with this map,

" ] }, { "cell_type": "code", "execution_count": 7, "id": "0b8efeba", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Photonic states:\n", "\n", "\u001b[36m | 0, 1, 0, 1 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n", "\u001b[36m | 0, 1, 1, 0 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n", "\u001b[36m | 1, 0, 0, 1 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n", "\u001b[36m | 1, 0, 1, 0 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n", "\n", "Equivalent logic states:\n", "\n", "\u001b[36m | 0, 0 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n", "\u001b[36m | 0, 1 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n", "\u001b[36m | 1, 0 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n", "\u001b[36m | 1, 1 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n" ] } ], "source": [ "# Define states\n", "input0101 = qoptkit.state(4,st=[[1.0,[0,1,0,1]]]) #0101\n", "input0110 = qoptkit.state(4,st=[[1.0,[0,1,1,0]]]) #0110\n", "input1001 = qoptkit.state(4,st=[[1.0,[1,0,0,1]]]) #1001\n", "input1010 = qoptkit.state(4,st=[[1.0,[1,0,1,0]]]) #1010\n", "\n", "# Encode\n", "encoded00=input0101.encode(qmap,hom) #00\n", "encoded01=input0110.encode(qmap,hom) #01\n", "encoded10=input1001.encode(qmap,hom) #10\n", "encoded11=input1010.encode(qmap,hom) #11\n", "\n", "# Print comparison\n", "print(\"Photonic states:\\n\")\n", "input0101.prnt_state()\n", "input0110.prnt_state()\n", "input1001.prnt_state()\n", "input1010.prnt_state()\n", "print(\"\")\n", "print(\"Equivalent logic states:\\n\")\n", "encoded00.prnt_state()\n", "encoded01.prnt_state()\n", "encoded10.prnt_state()\n", "encoded11.prnt_state()" ] }, { "cell_type": "markdown", "id": "3c6e50c0", "metadata": {}, "source": [ "It is also possible to decode them back to photonic states," ] }, { "cell_type": "code", "execution_count": 8, "id": "683bae23", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Photonic states:\n", "\n", "\u001b[36m | 0, 1, 0, 1 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n", "\u001b[36m | 0, 1, 1, 0 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n", "\u001b[36m | 1, 0, 0, 1 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n", "\u001b[36m | 1, 0, 1, 0 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n" ] } ], "source": [ "# Decode\n", "decoded00=encoded00.decode(qmap,[],hom) #00\n", "decoded01=encoded01.decode(qmap,[],hom) #01\n", "decoded10=encoded10.decode(qmap,[],hom) #10\n", "decoded11=encoded11.decode(qmap,[],hom) #11\n", "print(\"Photonic states:\\n\")\n", "decoded00.prnt_state()\n", "decoded01.prnt_state()\n", "decoded10.prnt_state()\n", "decoded11.prnt_state()" ] }, { "cell_type": "markdown", "id": "b8bcf6d5", "metadata": {}, "source": [ "### 2.2 Rotations" ] }, { "cell_type": "markdown", "id": "17895cdc", "metadata": {}, "source": [ "

Now, we can define circuits and states, and we know how to interpret those states as qubits therefore we are in position to define some basic gates.

" ] }, { "cell_type": "markdown", "id": "9e96d551", "metadata": {}, "source": [ "### 2.2.1 Rx" ] }, { "cell_type": "markdown", "id": "198fedd3", "metadata": {}, "source": [ "For example, we can define a $Rx(\\pi/2)$ gate using optical elements," ] }, { "cell_type": "code", "execution_count": 9, "id": "e73a0a41", "metadata": {}, "outputs": [ { "data": { "image/png": "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AAAAoAACdwAAAAAAKIDAHQAAAAAACiBwBwAAAACAAgjcAQAAAACgAAJ3AAAAAAAogMAdAAAAAAAKIHAHAAAAAIACCNwBAAAAAKAAAncAAAAAACiAwB0AAAAAAAogcAcAAAAAgAII3AEAAAAAoAACdwAAAAAAKIDAHQAAAAAACiBwBwAAAACAAgjcAQAAAACgAAJ3AAAAAAAogMAdAAAAAAAKIHAHAAAAAIACCNwBAAAAAKAAAncAAAAAACiAwB0AAAAAAAogcAcAAAAAgAII3AEAAAAAoAACdwAAAAAAKIDAHQAAAAAACiBwBwAAAACAAgjcAQAAAACgAAJ3AAAAAAAogMAdAAAAAAAKIHAHAAAAAIACCNwBAAAAAKAAAncAAAAAACiAwB0AAAAAAAogcAcAAAAAgAII3AEAAAAAoAACdwAAAAAAKIDAHQAAAAAACiBwBwAAAACAAgjcAQAAAACgAAJ3AAAAAAAogMAdAAAAAAAKIHAHAAAAAIACCNwBAAAAAKAAAncAAAAAACiAwB0AAAAAAAogcAcAAAAAgAII3AEAAAAAoAACdwAAAAAAKIDAHQAAAAAACiBwBwAAAACAAgjcAQAAAACgAAJ3AAAAAAAogMAdAAAAAAAKIHAHAAAAAIACCNwBAAAAAKAAAncAAAAAACiAwB0AAAAAAAogcAcAAAAAgAII3AEAAAAAoAACdwAAAAAAKIDAHQAAAAAACiBwBwAAAACAAvw/0lsR2uTP5CkAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "qmap=[[0, 1]]\n", "rx = qoptkit.qocircuit(2);\n", "rx.bs(0,1,45.0,180.0/2.0)\n", "rx.show()" ] }, { "cell_type": "markdown", "id": "c6bd44a9", "metadata": {}, "source": [ "We can test this gate for an input qubit initialized to zero," ] }, { "cell_type": "code", "execution_count": 10, "id": "d856a454", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[36m | 1 >\u001b[0m: -0.00000000 - 0.70710678 j\n", "\u001b[36m | 0 >\u001b[0m: 0.70710678 + 0.00000000 j\n", "\n" ] } ], "source": [ "qubit = qoptkit.state(1,st=[[1.0,[0]]])\n", "input=qubit.decode(qmap,[],rx) \n", "output=sim.run(input,rx)\n", "result=output.encode(qmap,rx)\n", "result.prnt_state()" ] }, { "cell_type": "markdown", "id": "b54fd6f5", "metadata": {}, "source": [ "And finally, we can also check the correctness of this result with the equivalent simulation of this gate in QISKIT," ] }, { "cell_type": "code", "execution_count": 11, "id": "a7b74f72", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "QISKIT State vector:\n", " | 1 >: 0.0 - 0.70710678 j\n", " | 0 >: 0.70710678 + 0.0 j\n" ] } ], "source": [ "qiskitsim = Aer.get_backend('aer_simulator') \n", "qc = QuantumCircuit(1)\n", "qc.rx(np.pi/2,0)\n", "qc.save_statevector() \n", "result = qiskitsim.run(qc).result()\n", "state = result.get_statevector(decimals=8)\n", "print(\"QISKIT State vector:\")\n", "print(\" | 1 >: \", ' ' if np.real(state[1]) >= 0.0 else '', np.real(state[1]), '+' if np.imag(state[1]) >= 0.0 else '-', abs(np.imag(state[1])),'j' )\n", "print(\" | 0 >: \", ' ' if np.real(state[0]) >= 0.0 else '', np.real(state[0]), '+' if np.imag(state[0]) >= 0.0 else '-', abs(np.imag(state[0])),'j' )" ] }, { "cell_type": "markdown", "id": "36bd35a8", "metadata": {}, "source": [ "### 2.2.2 Ry" ] }, { "cell_type": "markdown", "id": "0448ca55", "metadata": {}, "source": [ "We can do the same for the $Ry(\\pi/2)$ gate," ] }, { "cell_type": "code", "execution_count": 12, "id": "b63b7bbd", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "qmap=[[0, 1]]\n", "ry = qoptkit.qocircuit(2);\n", "ry.bs(0,1,-45.0,0)\n", "ry.show()" ] }, { "cell_type": "markdown", "id": "a15f90a5", "metadata": {}, "source": [ "Again test the gate with an input qubit initialized to zero," ] }, { "cell_type": "code", "execution_count": 13, "id": "1bfae457", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[36m | 1 >\u001b[0m: 0.70710678 + 0.00000000 j\n", "\u001b[36m | 0 >\u001b[0m: 0.70710678 + 0.00000000 j\n", "\n" ] } ], "source": [ "qubit = qoptkit.state(1,st=[[1.0,[0]]])\n", "input=qubit.decode(qmap,[],ry) \n", "output=sim.run(input,ry)\n", "result=output.encode(qmap,ry)\n", "result.prnt_state()" ] }, { "cell_type": "markdown", "id": "3e15b725", "metadata": {}, "source": [ "And check the result with the equivalent QISKIT simulation," ] }, { "cell_type": "code", "execution_count": 14, "id": "937af3e0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "QISKIT State vector:\n", " | 1 >: 0.70710678 + 0.0 j\n", " | 0 >: 0.70710678 + 0.0 j\n" ] } ], "source": [ "qiskitsim = Aer.get_backend('aer_simulator') \n", "qc = QuantumCircuit(1)\n", "qc.ry(np.pi/2,0)\n", "qc.save_statevector() \n", "result = qiskitsim.run(qc).result()\n", "state = result.get_statevector(decimals=8)\n", "print(\"QISKIT State vector:\")\n", "print(\" | 1 >: \", ' ' if np.real(state[1]) >= 0.0 else '', np.real(state[1]), '+' if np.imag(state[1]) >= 0.0 else '-', abs(np.imag(state[1])),'j' )\n", "print(\" | 0 >: \", ' ' if np.real(state[0]) >= 0.0 else '', np.real(state[0]), '+' if np.imag(state[0]) >= 0.0 else '-', abs(np.imag(state[0])),'j' )" ] }, { "cell_type": "markdown", "id": "bace000b", "metadata": {}, "source": [ "### 2.2.3 Rz" ] }, { "cell_type": "markdown", "id": "c4a2f059", "metadata": {}, "source": [ "Finally, we can also define a $Rz(\\pi/2)$ gate," ] }, { "cell_type": "code", "execution_count": 15, "id": "f0c06be7", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "qmap=[[0, 1]]\n", "rz = qoptkit.qocircuit(2);\n", "rz.ph(0, 45)\n", "rz.ph(1, -45)\n", "rz.show()" ] }, { "cell_type": "markdown", "id": "943137b0", "metadata": {}, "source": [ "

In this case, instead of using a beamsplitter gate we have used two phase shifters. A phase shifter adds a phase $e^{i\\theta}$ to a state for each photon present in the channel in which it is defined. Once more, we test the gate for an input qubit initialized to zero. The reader may test those gates with other inputs or create rotation gates with different angles.

" ] }, { "cell_type": "code", "execution_count": 16, "id": "7e4942b7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[36m | 0 >\u001b[0m: 0.70710678 - 0.70710678 j\n", "\n" ] } ], "source": [ "qubit = qoptkit.state(1,st=[[1.0,[0]]])\n", "input=qubit.decode(qmap,[],rz) \n", "output=sim.run(input,rz)\n", "result=output.encode(qmap,rz)\n", "result.prnt_state()" ] }, { "cell_type": "markdown", "id": "4110f3b3", "metadata": {}, "source": [ "Finally, we can check again the result with QISKIT." ] }, { "cell_type": "code", "execution_count": 17, "id": "21024fa4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "QISKIT State vector:\n", " | 0 >: 0.70710678 - 0.70710678 j\n", " | 1 >: 0.0 + 0.0 j\n" ] } ], "source": [ "qiskitsim = Aer.get_backend('aer_simulator') \n", "qc = QuantumCircuit(1)\n", "qc.rz(np.pi/2,0)\n", "qc.save_statevector() \n", "result = qiskitsim.run(qc).result()\n", "state = result.get_statevector(decimals=8)\n", "print(\"QISKIT State vector:\")\n", "print(\" | 0 >: \", ' ' if np.real(state[0]) >= 0.0 else '', np.real(state[0]), '+' if np.imag(state[0]) >= 0.0 else '-', abs(np.imag(state[0])),'j' )\n", "print(\" | 1 >: \", ' ' if np.real(state[1]) >= 0.0 else '', np.real(state[1]), '+' if np.imag(state[1]) >= 0.0 else '-', abs(np.imag(state[1])),'j' )\n" ] }, { "cell_type": "markdown", "id": "11c6e039", "metadata": {}, "source": [ "

It is not very difficult to see how these operations can be generalized to any rotation. Therefore, we can implement with optical circuits any single qubit operation. But what about two qubits operations?

" ] }, { "cell_type": "markdown", "id": "43cdf05d", "metadata": {}, "source": [ "## 3 Post-selection" ] }, { "cell_type": "markdown", "id": "0020e06c", "metadata": {}, "source": [ "

Unfortunately, a linear optical circuit by itself can not implement every possible quantum gate. Some non-linearity is needed to achieve this purpose. It has been demonstrated [2] that the required non-linearity can be introduced by a partial measurement of the circuit output called post-selection. The price to pay is that gates that make use of post-selection only work with a certain probability of success. Let's see an example.

" ] }, { "cell_type": "markdown", "id": "7ee530b9", "metadata": {}, "source": [ "### The $NS_{-1}$ gate" ] }, { "cell_type": "markdown", "id": "759f29d0", "metadata": {}, "source": [ "

For example, we can find in the literature [3] a gate that changes the sign of an input state if the number of photons is two. This is, we want a photonic gate that implements the operation,\n", "$$ |0\\rangle + |1\\rangle + |2\\rangle \\rightarrow |0\\rangle + |1\\rangle - |2\\rangle$$

" ] }, { "cell_type": "code", "execution_count": 18, "id": "269d907f", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create circuit\n", "NSx = qoptkit.qocircuit(3);\n", "# Build circuit\n", "NSx.ph(0,180.0)\n", "NSx.bs(1,2,22.5,0.0)\n", "NSx.bs(0,1,65.5302,0.0)\n", "NSx.bs(1,2,-22.5,0.0)\n", "# Show circuit\n", "NSx.show(depth=8,sizexy=80,font=16)" ] }, { "cell_type": "markdown", "id": "6933f569", "metadata": {}, "source": [ "

This gate has three channels instead of one. It adds two auxiliary channels to perform the operation. We will assume, for the moment, that these two extra channels are initialized to 1 and 0 photons respectively and we will require from those channels to have the same values at the output. We will explain the reason below. Therefore,\n", "$$ |0,1,0 \\rangle + |1,1,0\\rangle + |2,1,0\\rangle \\rightarrow |0,1,0\\rangle + |1,1,0\\rangle - |2,1,0\\rangle$$

\n" ] }, { "cell_type": "code", "execution_count": 19, "id": "31d24211", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[36m | 0, 1, 0 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\u001b[36m | 1, 1, 0 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\u001b[36m | 2, 1, 0 >\u001b[0m: 1.00000000 + 0.00000000 j\n", "\n" ] } ], "source": [ "# Create input state\n", "state=[ [1.0,[0,1,0]],\n", " [1.0,[1,1,0]],\n", " [1.0,[2,1,0]],\n", " ]\n", "inputst = qoptkit.state(NSx.num_ch(),st=state,nph=3)\n", "inputst.prnt_state()" ] }, { "cell_type": "markdown", "id": "876677bd", "metadata": {}, "source": [ "

We have left the state intentionally unnormalized as it will simplify an explanation below. Next, we can calculate the output of the circuit with QoptKIT.

" ] }, { "cell_type": "code", "execution_count": 20, "id": "5e7e91a9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[36m | 1, 0, 0 >\u001b[0m: -0.84089642 + 0.00000000 j\n", "\u001b[36m | 0, 1, 0 >\u001b[0m: 0.49999999 + 0.00000000 j\n", "\u001b[36m | 0, 0, 1 >\u001b[0m: 0.20710678 + 0.00000000 j\n", "\u001b[36m | 2, 0, 0 >\u001b[0m: 0.49258571 - 0.00000000 j\n", "\u001b[36m | 1, 1, 0 >\u001b[0m: 0.50000001 - 0.00000000 j\n", "\u001b[36m | 1, 0, 1 >\u001b[0m: -0.37867966 + 0.00000000 j\n", "\u001b[36m | 0, 2, 0 >\u001b[0m: -0.59460355 + 0.00000000 j\n", "\u001b[36m | 0, 0, 2 >\u001b[0m: 0.10201784 - 0.00000000 j\n", "\u001b[36m | 3, 0, 0 >\u001b[0m: -0.24989165 + 0.00000000 j\n", "\u001b[36m | 2, 1, 0 >\u001b[0m: -0.50000000 + 0.00000000 j\n", "\u001b[36m | 2, 0, 1 >\u001b[0m: 0.27817459 - 0.00000000 j\n", "\u001b[36m | 1, 2, 0 >\u001b[0m: -0.24629288 + 0.00000000 j\n", "\u001b[36m | 1, 1, 1 >\u001b[0m: 0.34831071 - 0.00000000 j\n", "\u001b[36m | 1, 0, 2 >\u001b[0m: -0.16177851 + 0.00000000 j\n", "\u001b[36m | 0, 3, 0 >\u001b[0m: 0.61237243 - 0.00000000 j\n", "\u001b[36m | 0, 2, 1 >\u001b[0m: -0.14644660 + 0.00000000 j\n", "\u001b[36m | 0, 1, 2 >\u001b[0m: -0.06066017 + 0.00000000 j\n", "\u001b[36m | 0, 0, 3 >\u001b[0m: 0.04351997 - 0.00000000 j\n", "\n" ] } ], "source": [ "sim=qoptkit.simulator()\n", "outputst=sim.run(inputst,NSx)\n", "outputst.prnt_state()" ] }, { "cell_type": "markdown", "id": "0b0510c8", "metadata": {}, "source": [ "

On a first glance the result looks quite different from what we were expecting. However, the intended result is obtained if after measuring channels \"1\" and \"2\" we require the detection of one photon only in channel \"1\". If this condition is met, we conclude the gate has worked, otherwise we reject the result in channel \"0\" . Post-selected channels \"1\" and \"2\" are erased from the result.

" ] }, { "cell_type": "code", "execution_count": 21, "id": "84391ad0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[36m | 0 >\u001b[0m: 0.49999999 + 0.00000000 j\n", "\u001b[36m | 1 >\u001b[0m: 0.50000001 - 0.00000000 j\n", "\u001b[36m | 2 >\u001b[0m: -0.50000000 + 0.00000000 j\n", "\n" ] } ], "source": [ "finalst=outputst.post_selection([-1,1,0])\n", "finalst.prnt_state()" ] }, { "cell_type": "markdown", "id": "7ca6e958", "metadata": {}, "source": [ "

Physically post-selection means that we only accept the quantum state defined by channel zero if after a partial measurement of the rest of the channels the result meets the pre-established conditions. The price to pay is that this condition may not be always met. This gate has a success probability of 1/4. This means that only 1 in 4 times on average the \"10\" condition will be measured in channels 2 and 3. Therefore only around 1 of 4 times this gate will work as intended. This can also be seen in the normalization of the end state that is 1/4. (This is the reason we didn't normalize the state before. It is easier to see the success probability this way).

" ] }, { "cell_type": "markdown", "id": "e3cf7bc3", "metadata": {}, "source": [ "### CZ gate" ] }, { "cell_type": "markdown", "id": "e23c1ff2", "metadata": {}, "source": [ "

Post-selection is one of the more difficult concepts in quantum computation with photonic circuits but once mastered the sky is the limit. We can use the $NS_{-1}$ gate to build a two qubit CZ gate as shown in [2]. This can be achieved with a eight channel circuit. Four channel for the qubit definitions and four extra ancilla channels for post-selection because this circuit uses two $NS_{-1}$ gates.

" ] }, { "cell_type": "code", "execution_count": 22, "id": "759570d3", "metadata": {}, "outputs": [], "source": [ "qmap=[[0, 1], [2, 3]]\n", "csign = qoptkit.qocircuit(8)\n", "csign.bs(0,2,45.0,0.0)\n", "csign.gate([ 0, 4, 5 ],NSx,\"NSX\")\n", "csign.gate([ 2, 6, 7 ],NSx,\"NSX\")\n", "csign.bs(0,2,-45.0,0.0) " ] }, { "cell_type": "markdown", "id": "aaa8915e", "metadata": {}, "source": [ "
\n", "\n", "
\n", "

CZ asdescribed in ref. [2]

" ] }, { "cell_type": "markdown", "id": "dd85d504", "metadata": {}, "source": [ "In this case, we choose an input state with all the possibilities in superposition with equal probability." ] }, { "cell_type": "code", "execution_count": 23, "id": "418d522f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[36m | 0, 0 >\u001b[0m: 0.50000000 + 0.00000000 j\n", "\u001b[36m | 0, 1 >\u001b[0m: 0.50000000 + 0.00000000 j\n", "\u001b[36m | 1, 0 >\u001b[0m: 0.50000000 + 0.00000000 j\n", "\u001b[36m | 1, 1 >\u001b[0m: 0.50000000 + 0.00000000 j\n", "\n" ] } ], "source": [ "qubit= qoptkit.state(2,st=[ [0.5,[0,0]], [0.5,[0,1]], [0.5,[1,0]], [0.5,[1,1]] ],nph=2)\n", "qubit.prnt_state()" ] }, { "cell_type": "markdown", "id": "b644d2c2", "metadata": {}, "source": [ "

First, we decode the qubit state into its equivalent photonic state. Next, we obtain the output of the circuit and\n", "apply the post-selection conditions required by the $NS_{-1}$ gates. Finally, we encode the output into a qubit representation.

" ] }, { "cell_type": "code", "execution_count": 24, "id": "fe3503bb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[36m | 0, 0 >\u001b[0m: 0.49999999 + 0.00000000 j\n", "\u001b[36m | 0, 1 >\u001b[0m: 0.50000001 - 0.00000000 j\n", "\u001b[36m | 1, 0 >\u001b[0m: 0.50000001 - 0.00000000 j\n", "\u001b[36m | 1, 1 >\u001b[0m: -0.49999999 + 0.00000000 j\n", "\n" ] } ], "source": [ "# Decode input into photonic state\n", "inputst=qubit.decode(qmap,[1,0,1,0],csign)\n", "# Create a simulator\n", "sim=qoptkit.simulator()\n", "# Calculate the output\n", "outputst=sim.run(inputst,csign)\n", "# Apply post-selection\n", "pselected=outputst.post_selection([-1,-1,-1,-1, 1,0,1,0])\n", "# Encode output photonic state into qubit state \n", "encoded=pselected.encode(qmap,csign)\n", "# Normalize\n", "encoded.normalize()\n", "# Print the resulting state\n", "encoded.prnt_state()" ] }, { "cell_type": "markdown", "id": "c7fc515f", "metadata": {}, "source": [ "

We can see how a phase flip happens for the outcome $|1,1\\rangle$. We have normalized the output, otherwise we would see that the success probability of this gate is 1/16. Note that, in this particular case, the post-selected states only contain outcomes with 0 or 1 photons by channel.

" ] }, { "cell_type": "code", "execution_count": 25, "id": "3c9d856a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[36m | 0, 1, 0, 1 >\u001b[0m: 0.12500000 + 0.00000000 j\n", "\u001b[36m | 0, 1, 1, 0 >\u001b[0m: 0.12500000 - 0.00000000 j\n", "\u001b[36m | 1, 0, 0, 1 >\u001b[0m: 0.12500000 - 0.00000000 j\n", "\u001b[36m | 1, 0, 1, 0 >\u001b[0m: -0.12500000 + 0.00000000 j\n", "\n" ] } ], "source": [ "pselected.prnt_state()" ] }, { "cell_type": "markdown", "id": "b6e0be96", "metadata": {}, "source": [ "

Therefore, the encoding is straightforward. The encoding operation implemented in QOKIT will ignore outcomes with more than one photon by qubit. This may be used on purpose like a sort of an additional post-selection condition although it has some disadvantages. See our next example.

" ] }, { "cell_type": "markdown", "id": "8f07439a", "metadata": {}, "source": [ "### CNOT gate" ] }, { "cell_type": "markdown", "id": "9f36c112", "metadata": {}, "source": [ "Here we show a CNOT implementation as suggested in ref. [4]. " ] }, { "cell_type": "code", "execution_count": 26, "id": "b887f392", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "qmap=[[1, 2], [3, 4]]\n", "cnot=qoptkit.qocircuit(6);\n", "cnot.bs(3,4, -45.0,0.0)\n", "cnot.barrier()\n", "cnot.bs(0,1,180*acos(1.0/sqrt(3.0))/pi,0.0)\n", "cnot.bs(2,3,180*acos(1.0/sqrt(3.0))/pi,0.0)\n", "cnot.bs(4,5,180*acos(1.0/sqrt(3.0))/pi,0.0)\n", "cnot.barrier()\n", "cnot.bs(3,4, -45.0,0.0)\n", "cnot.barrier()\n", "cnot.ph(1, 180)\n", "cnot.ph(3, 180)\n", "cnot.show(depth=15,sizexy=60,font=18)" ] }, { "cell_type": "markdown", "id": "30337c04", "metadata": {}, "source": [ "Below it is shown how to perform the simulation for the case of a $|10\\rangle$ input state. We invite the reader to check the rest of possible inputs." ] }, { "cell_type": "code", "execution_count": 27, "id": "fe675fff", "metadata": {}, "outputs": [], "source": [ "# Input state (qubit definition)\n", "qubit= qoptkit.state(2,st=[[1.0,[1,0]]])\n", "# Decode input into photonic state\n", "input=qubit.decode(qmap,[0,0],cnot)\n", "# Create a simulator\n", "sim=qoptkit.simulator()\n", "# Calculate the output\n", "output=sim.run(input,cnot)\n", "# Apply post-selection\n", "pselected=output.post_selection([0,-1,-1,-1,-1, 0])\n", "# Encode output photonic state into qubit state \n", "encoded=pselected.encode(qmap,cnot)" ] }, { "cell_type": "markdown", "id": "e11393a2", "metadata": {}, "source": [ "Now, we can show the output. However, this time we will plot the probabilities instead of printing the states," ] }, { "cell_type": "code", "execution_count": 28, "id": "4a52d7c9", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "encoded.show(sizex=4,sizey=4)" ] }, { "cell_type": "markdown", "id": "1296ec88", "metadata": {}, "source": [ "

Note that the normalization 1/9 correspond with the success probability of this gate. Here we have printed the outcome probabilities after the encoding of the photonic state into qubits. However, if we plot the outcome probabilities of the photonic state directly we can see that there are two possible different outcomes. A \"1010\" outcome with success probability 1/9 that corresponds with a 11 qubit configuration and a \"1100\" outcome that has no valid encoding.

" ] }, { "cell_type": "code", "execution_count": 29, "id": "4d63c9c2", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pselected.show(sizex=4,sizey=4)" ] }, { "cell_type": "markdown", "id": "78e2d758", "metadata": {}, "source": [ "

We reject outcomes that can not be encoded. This can be understood as a sort of an additional post-selection condition. Of course, that means that this CNOT gate\n", "can work as a CNOT in an isolated way but can not be used to design large circuits like the CZ because these extra outcomes will play a role once multiple gates are interconnected.

" ] }, { "cell_type": "markdown", "id": "1ce53f55", "metadata": {}, "source": [ "## Bibliography" ] }, { "cell_type": "markdown", "id": "c0c812e5", "metadata": {}, "source": [ "**[1]** C. K. Hong, Z. Y. Ou and L. Mandel, **Phys. Rev. Lett. 59 (18): 2044–2046.** (1987) \n", "\n", "**[2]** E. Knill, R. Laflamme, G. J. Milburn, **Nature 409 46-52** (2001) \n", "\n", "**[3]** C. Myers et Al. **Quantum Computers, Algorithms and Chaos, vol. 162, IOS Press, pp. 45–93** (2006) \n", "\n", "**[4]** J L O'Brien, G J Pryde, A G White, T C Ralph, D Branning, **Nature 426:264** (2003)" ] }, { "cell_type": "markdown", "id": "8e668366", "metadata": {}, "source": [ "**THIS CODE IS PART OF QoptKIT**
\n", "\n", "**Copyright:**
\n", "Copyright © 2023 National University of Ireland Maynooth, Maynooth University.\n", "\n", "Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 5 }