{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Average Gate Fidelity\n", "Instead of performing process tomography on a system, it is possible to use a series of state tomographies and calculate an average gate fidelity from the measured density matices. To achieve this, the following equation can be used (Nielsen_2002):\n", "\n", "$\\begin{equation}\\overline{F}(\\mathcal{E}, U) = \\frac{\\sum_{jk}\\alpha_{jk}tr(UU_j^{\\dagger}U^{\\dagger}\\mathcal{E}(\\rho_k))+d^2}{d^2(d+1)}\\end{equation},$\n", "\n", "where $\\mathcal{E}(\\rho_k) = \\rho_k^\\prime$ is the result from a single state tomography experiment with input $k$. This sum can then be evaluated using the input basis $\\ket{0}$, $\\ket{1}$, $\\frac{\\ket{0} + \\ket{1}}{\\sqrt{2}}$ & $\\frac{\\ket{0} + i\\ket{1}}{\\sqrt{2}}$ to determine an estimate for gate fidelity.\n", "\n", "This notebook demonstates how the included GateFidelity object in Lightworks can be used to automate the process of gathering and analysing data to find the average gate fidelities." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "import lightworks as lw\n", "from lightworks import emulator, qubit\n", "from lightworks.tomography import GateFidelity" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As with process tomography, an experiment function needs to be defined which accepts a list of circuits and a list of inputs. In this example, as additional source_indistinguishability argument is included to allow for variation of this value, it defaults to a value of 1." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def experiment(\n", " circuits: list[lw.PhotonicCircuit],\n", " inputs: list[lw.State],\n", " source_indistinguishability: float = 1.0,\n", ") -> list:\n", " \"\"\"\n", " Experiment function which is required for performing state tomography on a\n", " system. It takes a list of circuits and generates a corresponding list of\n", " results for each of them. Only supports one qubit systems currently.\n", " \"\"\"\n", " # Post-select on 1 photon across each pair of qubit modes\n", " post_select = lw.PostSelection()\n", " post_select.add((0, 1), 1)\n", " post_select.add((2, 3), 1)\n", "\n", " backend = emulator.Backend(\"slos\")\n", "\n", " # Use a batch to run all tasks at once\n", " batch = lw.Batch(\n", " lw.Sampler,\n", " task_args=[circuits, inputs, [20000]],\n", " task_kwargs={\n", " \"source\": [\n", " emulator.Source(\n", " indistinguishability=source_indistinguishability\n", " )\n", " ],\n", " \"post_selection\": [post_select],\n", " \"random_seed\": [10],\n", " },\n", " )\n", " return backend.run(batch)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this tutorial, the 2 qubit CNOT gate is used, which is created and shown below. A 90% loss is also included on each of the output channels." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "-\n", "0\n", "1\n", "2\n", "3\n", "-\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "CNOT (0, 1)\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0\n", "\n", "0\n", "\n", "0\n", "\n", "0\n", "\n", "\n", "L\n", "loss = 0.9\n", "\n", "\n", "\n", "L\n", "loss = 0.9\n", "\n", "\n", "\n", "L\n", "loss = 0.9\n", "\n", "\n", "\n", "L\n", "loss = 0.9\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_qubits = 2\n", "\n", "cnot = qubit.CNOT()\n", "for i in range(4):\n", " cnot.loss(i, 0.9)\n", "cnot.display(display_loss=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ideal System\n", "To measure the average gate fidelity, a new GateFidelity object is created with the required configuration. Initially, we want to test an ideal system, so the photon indistinguishability is set to 1. The experiment_args value needs to be an iterable such as a list, hence why this is supplied as [1]." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "gate_f = GateFidelity(n_qubits, cnot, experiment, experiment_args=[1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The fidelity is then calculated with the process method. Unlike the other tomography approaches, the average gate fidelity requires knowledge of the expected unitary matrix for the gate. In the case of the CNOT gate, this is\n", "\n", "\\begin{equation} \\text{U}_\\text{cnot} = \\begin{bmatrix} 1 & 0 & 0 & 0 \\\\ 0 & 1 & 0 & 0 \\\\ 0 & 0 & 0 & 1 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix},\\end{equation}\n", "\n", "which is encoded within the array below.\n", "\n", "As expected, the calculated fidelity with an ideal system is nearly 100%." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average gate fidelity = 99.844 %\n" ] } ], "source": [ "u_cnot = np.array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]])\n", "avg_fidelity = gate_f.process(u_cnot)\n", "\n", "print(f\"Average gate fidelity = {avg_fidelity * 100} %\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Photon Distinguishability\n", "\n", "It is then possible to use the built-in noise modelling in Lightworks to simulate the likely effect that this has on the gate fidelity. A key limitation for gate fidelity is the extent to which photons are indistinguishable from each other, with distinguishability reducing overall fidelity.\n", "\n", "To examine this effect, we sweep the photon indistinguishability from 80 to 100% and calculate the fidelity at each point. This is then plotted to view the relationship between the two quantities.\n", "\n", ".. note:: This cell may take a while to execute (~1 min)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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qlWh51gsFlatWnXF55SUa40P/v8X7MGDB1m5ciWVKlUq8utkZGQQFxdHSEjIv85cVNaM8Z8SEhJITk6+Yl5Hew8v+vzzz2nVqhURERFFfh1bvocX+fj4EBISwrlz51ixYgW9evVy+G3wny43RnD87fCiK43vnxxpG/y7a43P0bdBsO7vXocOHUhJSSm0Z+v333/HYrHQrl27y663VatWuLu7F1rv/v37OXr06PW/p9d1WnMZNGjQIKNq1aoFH+tdsmSJERgYaDz//PMFy7z66qtGQECA8cMPPxg7d+40evXqdclH8G677Tbj/fffL7i9cOFCw9PT05gzZ46xZ88eY9iwYUZAQICRmJhoV+PLzc01evbsaVSrVs2IiYkp9BHInJycK47vueeeM9asWWPEx8cbGzZsMCIjI43AwEDj1KlTpTo+a8aYnp5ujB492ti4caMRHx9vrFy50mjZsqVRt25dIzs7+4pjdJT38KLU1FSjXLlyxkcffXTZ9djze7h8+XJj2bJlxqFDh4xff/3ViIiIMNq1a2fk5uYahuHY2+BFVxujM2yHVxufo2+D1xrfRY60Daanpxvbt283tm/fbgDG22+/bWzfvr3g03/WbHNdu3Y1WrRoYURFRRnr16836tatW+ij5wkJCUb9+vWNqKiogvuGDx9u1KhRw/j999+NLVu2GB06dDA6dOhw3eNQ2bFSWlqa8cwzzxg1atQwvLy8jNq1axsTJkwo9AvGYrEYEydONIKCggxPT0+jc+fOxv79+wutp2bNmsbkyZML3ff+++8bNWrUMDw8PIy2bdsamzZtKo0hFXKt8cXHxxvAZb9Wr15dsJ5/jq9fv35GSEiI4eHhYVStWtXo16+fERsbW8qju+BaY8zMzDTuuOMOo3Llyoa7u7tRs2ZN49FHH73kF6ajvocXffLJJ4a3t7eRkpJy2fXY83u4aNEio3bt2oaHh4cRHBxsPPHEE4XG4cjb4EVXG6MzbIdXG5+jb4OGce2fUcNwrG1w9erVl/15GzRokGEY1m1zycnJxoABA4zy5csbfn5+xsMPP2ykp6cXPH7x5/rvP8NZWVnG448/blSoUMEoV66ccffddxsnT5687nGYDONvl1cVERERcTI6Z0dEREScmsqOiIiIODWVHREREXFqKjsiIiLi1FR2RERExKmp7IiIiIhTU9kRERERp6ayIyIiIk5NZUekhM2ZM4eAgABbxyh1a9aswWQyFUzmVxzfh1q1avHuu+/+62xFNXjwYHr37l3sy17JP793l/PP7+eUKVNo3rx5sea4ktzcXMLDw/nzzz//1Tpq1arFli1bijGZyOWp7Ij8S4MHD8ZkMmEymfDw8CA8PJyXXnqJ/Pz8YnuNw4cPYzKZiImJKbZ1Xk1JlIp+/fpx4MABq5a9UjGKjo5m2LBhxZrLGu+99x5z5swp9de9mmt9P/+Z+dZbb2XkyJHF8toff/wxYWFhdOzYEYCcnBwefPBB/Pz8qFevHitXriy0/BtvvMFTTz1V6D4PDw9Gjx7NCy+8UCyZRK7GzdYBRJxB165dmT17Njk5Ofzyyy888cQTuLu7M27cOFtHsxve3t54e3v/q3VUrly5mNIUjb+/v01e92qu9f0sqcyGYfDBBx/w0ksvFdz3n//8h61bt7Jx40aWLVvG/fffT1JSEiaTifj4eD799NPL7sEZOHAgzz33HLt376Zx48YlklcEtGdHpFh4enoSHBxMzZo1GTFiBJGRkfz444+FllmxYgUNGzakfPnydO3alZMnTxY8ZrFYeOmll6hWrRqenp40b96c5cuXFzweFhYGQIsWLTCZTNx6661WPe/iHqElS5bQqVMnypUrR0REBBs3bizS+EwmE5999hl333035cqVo27dupeM75dffqFevXp4e3vTqVMnDh8+XOjxf+6t2bFjB506dcLX1xc/Pz9atWrFli1bWLNmDQ8//DCpqakFe8ymTJkCXLrHyZpcP/74I3Xr1sXLy4tOnToxd+7cQoeI/nn4B+Ddd9+lVq1aBbf/eUjo22+/pWnTpnh7e1OpUiUiIyM5f/58oXW8+eabhISEUKlSJZ544gny8vIKHps3bx6tW7fG19eX4OBg7r//fk6dOnXJ933Dhg00a9YMLy8v2rdvz65du674/fynv2cePHgwf/zxB++9917B9zQ+Pp7w8HDefPPNQs+LiYnBZDIRGxt72fVu3bqVuLg4evToUXDf3r176dmzJ40bN+aJJ57g9OnTnDlzBoARI0bw2muv4efnd8m6KlSowA033MDChQuvOA6R4qCyI1ICvL29yc3NLbidmZnJm2++ybx581i7di1Hjx5l9OjRBY+/9957vPXWW7z55pvs3LmTLl260LNnTw4ePAjA5s2bAVi5ciUnT55kyZIlVj3vogkTJjB69GhiYmKoV68eAwYMKPJhtqlTp3Lfffexc+dOunfvzsCBAzl79iwAx44do0+fPtx1113ExMQwdOhQxo4de9X1DRw4kGrVqhEdHc3WrVsZO3Ys7u7udOzYkXfffRc/Pz9OnjzJyZMnC32vipIrPj6ee++9l969e7Njxw4ee+wxJkyYUKRx/9PJkycZMGAAQ4YMYe/evaxZs4Y+ffrw9zmVV69eTVxcHKtXr2bu3LnMmTOn0CGlvLw8pk2bxo4dO1i6dCmHDx9m8ODBl7zWmDFjeOutt4iOjqZy5crcddddhUqTtd577z06dOjAo48+WvA9rVGjBkOGDGH27NmFlp09ezY333wz4eHhl13XunXrqFevHr6+vgX3RUREsH79erKyslixYgUhISEEBgYyf/58vLy8uPvuu6+YrW3btqxbt67IYxIpkuueL11EDMMwjEGDBhm9evUyDMMwLBaL8dtvvxmenp7G6NGjDcMwjNmzZxuAERsbW/CcWbNmGUFBQQW3Q0NDjenTpxdab5s2bYzHH3/cMAzDiI+PNwBj+/bthZax9nmfffZZweO7d+82AGPv3r1XHFPNmjWNd955p+A2YLz44osFtzMyMgzAWLZsmWEYhjFu3DijUaNGhdbxwgsvGIBx7ty5gu+Dv79/weO+vr7GnDlzLvv6/1z2enO98MILRpMmTQqtY8KECYVyTZ482YiIiCi0zDvvvGPUrFmz4Pbf3+OtW7cagHH48OHLZh80aJBRs2ZNIz8/v+C+vn37Gv369bvs8oZhGNHR0QZgpKenG4ZhGKtXrzYAY+HChQXLJCcnG97e3saiRYsMw7j0e/TPcfw9s2EYxi233GI888wzhV73+PHjhqurqxEVFWUYhmHk5uYagYGBV3xfDMMwnnnmGeO2224rdF9ubq7x+OOPG7Vq1TJat25trFu3zkhOTjZq165tHD161JgwYYJRp04d44477jASEhIKPfe9994zatWqdcXXEykO2rMjUgx+/vlnypcvj5eXF926daNfv34Fh14AypUrR506dQpuh4SEFBy2SEtL48SJE9xwww2F1nnDDTewd+/eK75mUZ7XrFmzQq8NXPawydX8fR0+Pj74+fkVrGPv3r20a9eu0PIdOnS46vpGjRrF0KFDiYyM5NVXXyUuLq5IeazJtX//ftq0aVNo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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "indistinguishability = range(80, 101, 2)\n", "\n", "fidelities = []\n", "for ind in indistinguishability:\n", " # Modify experiment args with new value\n", " gate_f.experiment_args = [ind / 100]\n", " # Then re-calculate fidelity\n", " fidelities.append(gate_f.process(u_cnot) * 100)\n", "\n", "plt.plot(indistinguishability, fidelities)\n", "plt.xlabel(\"Photon Indistinguishability (%)\")\n", "plt.ylabel(\"CNOT Fidelity (%)\")\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "venv", "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.11.6" } }, "nbformat": 4, "nbformat_minor": 2 }