{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Multi-photon Sampling\n", "The following notebook demonstrates the use of the emulator to sample from multi-photon inputs.\n", "\n", "First import required modules and some additional tools." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "import lightworks as lw\n", "from lightworks import State, emulator" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "A general N is then defined, which is used to adjust the number of modes used for the interferometer throughout the notebook." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "N = 8" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Can then create a random unitary matrix which is programmed onto the chip." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "U = lw.random_unitary(N, seed=10)\n", "\n", "circuit = lw.Unitary(U)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "For the simulation, the Sampler is used, choosing a 3 photon state with photons on mode 0, 1 and 2, and collecting 200 samples." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "sampler = lw.Sampler(circuit, State([1, 1, 0] + [0] * (N - 3)), 200)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Once the sampler has been set up, we can then sample by running on a backend. This data is then converted into photon counts on each output mode." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "backend = emulator.Backend(\"slos\")\n", "results = backend.run(sampler)\n", "\n", "counts = dict.fromkeys(range(N), 0)\n", "\n", "for state, count in results.items():\n", " # Get state from sampler and add photon counts to dict\n", " for j in range(N):\n", " counts[j] += state[j] * count" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "The counts can then be converted into probabilities and compared to the expected values calculated directly from the probability distribution." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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QhRF9OzZs97Xe/bsiZ9++gmlpaVo167dTdcXFhYGAGjbti0iIiJcXtPpdFi3bh2MRiN69+6NF198EbNmzcJLL70Elerm+7d1627VqtV1667PzJkzkZSUBACYNm0aJk6ciOzsbAwdOhQA8NhjjzmPFALAsmXL8Nxzz+GBBx4AACxevBj79u3DypUrkZWVhU2bNsHhcOBvf/sbDAYDevfujYsXL+Lpp592rmPVqlWIjY3FK6+84ly2bt06REdH48SJE7jllltuGjcRSY9H3IjIrzX2iFpz9O/fH0aj0fl8yJAhqKysxIULF7zy+/r16+f8OTw8HADQt29fl2UlJSUAgIqKCvzwww/OpK7O0KFDcfz4cQDA8ePH0a9fPxgMBpc+/Nx///tf7Nu3D8HBwc7HrbfeCgA4ffq0B3tHRN7EI25E5Je6desGQRBw/Phx/Pa3v73u9ePHj6N169bOo12CIFyX5NlsNo/EolKpPLpurVbr/FkQhHqXORyOJq+/PpWVlbjnnnuwePHi616LjIz06O8iIu/hETci8ktt27bF3XffjTfffBPV1dUurxUVFeGdd97BhAkTnIlPWFgYLl265Gxz8uRJVFVVOZ/rdDoAgN1uv+53/fe//3X5HV9++SWCg4MRHR1d77orKipw5swZl3Votdp6191cLVu2RFRUFD7//HOX5Z9//jl69eoF4Npp4yNHjqCmpsalDz83cOBAHD16FDExMejWrZvLw2QyeTxuIvIOJm5E5LdWrVoFi8WCpKQk/Oc//8GFCxewe/du3H333Wjfvj3+/Oc/O9veddddWLVqFb766iscPHgQTz31lMtRrHbt2iEoKMh5UX55ebnzNavVisceewzHjh3Drl27kJGRgalTpzqvb7vrrrvw97//HZ9++im+/vprTJ48GWq12iXWmJgYZGdno6ioCD/99JNH/w6zZs3C4sWLsWXLFnz77beYM2cODh8+jGnTpgEAHnzwQQiCgMcff9zZh2XLlrmsIy0tDT/++CMmTpyI/Px8nD59Gnv27EFqaqpXEk4i8g4mbkTkt7p3746DBw+iS5cuGD9+PLp27YonnngCw4cPR25uLtq0aeNsu3z5ckRHR+POO+/Egw8+iJkzZ7pct6bRaPD666/jL3/5C6KionDvvfc6XxsxYgS6d++OX//615gwYQJ+85vfOKf6AIC5c+di2LBhGDt2LJKTkzFu3Dh07drVJdbly5fjk08+QXR0NGJjYz36d/jDH/6A9PR0/PGPf0Tfvn2xe/du/POf/0T37t0BAMHBwfh//+//4euvv0ZsbCxeeOGF606J1h21s9vtGDlyJPr27Yvp06ejVatWjboBg4j8gyD64spfIiI/NWXKFFy5coVVD4hIFribRURERCQTTNyIiIiIZIKnSomIiIhkgkfciIiIiGSCiRsRERGRTDBxIyIiIpIJJm5EREREMsHEjYiIiEgmmLgRERERyQQTNyIiIiKZYOJGREREJBNM3IiIiIhk4v8DuR+1hH34DvUAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = range(N)\n", "\n", "# Convert counts to a list and normalise to total count numbers\n", "p_calc = [counts[i] / sum(counts.values()) for i in x]\n", "\n", "# Find expected distribution\n", "counts_exp = {} # Setup dict to store counts\n", "for i in range(N):\n", " counts_exp[i] = 0\n", "# Loop over each state and add photons to counts, weighted by probability\n", "for state, p in sampler.probability_distribution.items():\n", " for j in range(N):\n", " counts_exp[j] += p * state[j]\n", "# Normalise so sum is 1\n", "p_exp = [counts_exp[i] / sum(counts_exp.values()) for i in x]\n", "\n", "# Plotting\n", "plt.figure(figsize=(7, 6))\n", "plt.bar(x, p_calc, label=\"Measured\", alpha=1)\n", "plt.bar(\n", " x,\n", " p_exp,\n", " label=\"Expected\",\n", " edgecolor=\"Black\",\n", " fill=False,\n", " linestyle=\"dashed\",\n", " linewidth=1.5,\n", ")\n", "plt.xlabel(\"Output mode\")\n", "plt.ylabel(\"Counts\")\n", "plt.legend()\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" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }