{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Error Simulation\n",
"Within Lightworks, it is possible to simulate a number of errors which can occur within linear optic systems, this includes loss, source & detector imperfections. This notebook demonstrates the inclusion of each of these."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from random import random, seed\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"import lightworks as lw\n",
"from lightworks import emulator"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Loss\n",
"In photonic systems, loss is a critical error source which results in the erasure of quantum information from systems. For interferometric systems, imbalances in loss will also limit fidelity of the operations implemented. Losses in lightworks can be added to the system through the loss method.\n",
"\n",
"To see the effect of this on a small system, below we add a loss element to a single output mode of a 50:50 beam splitter. The loss elements can be viewed with the display_loss option."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"lossy_circuit = lw.PhotonicCircuit(2)\n",
"\n",
"lossy_circuit.bs(0, reflectivity=0.5)\n",
"lossy_circuit.loss(0, 0.5)\n",
"\n",
"lossy_circuit.display(display_loss=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"When this circuit is then sampled with a single photon input, it can be seen how the probability distribution is skewed which could alter any conclusions derived from the results. Without loss, it is expected that both $\\ket{1,0}$ and $\\ket{0,1}$ would be seen in near equal amounts."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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ExOjL774QmvWrNG+ffskSXFxcUpKSgrocAAAADi/y7oit3btWsXHx8vr9SokJETdu3fXyJEjNXLkSN1yyy268cYb9dlnn1XVrAAAADjDZYXcK6+8oiFDhshms521z2636/HHH9f06dMDNhwAAADO77JCbseOHerZs+d59/fo0UO5ublXPBQAAAAu7rJCzuPxnPO2IxVq1qypn3766YqHAgAAwMVdVsj913/9l3bv3n3e/Tt37lTTpk2veCgAAABc3GWF3N13363nnntOJ0+ePGvfiRMn9Pzzz6t3794BGw4AAADnd1m3Hxk/frzef/993XDDDRoxYoRat24tSdq3b5/mzJmjsrIyPfvss1UyKAAAAPxdVshFRUVp06ZNGj58uMaNGyefzydJCgkJkcvl0pw5cxQVFVUlgwIAAMDfZd8QuEWLFvr444919OhRffPNN/L5fLr++uvVoEGDqpgPAAAA51Gpv+wgSQ0aNNAtt9wSyFkAAABwGSr1t1YBAAAQfIQcAACAoYIacvPmzVO7du1ks9lks9nkdDq1cuVKa//JkyeVlpamRo0aqV69ekpJSZHH4/E7RkFBgZKTk1WnTh01adJETz/9tE6fPu23Zt26dUpISFBERIRatWqljIyMq3F6AAAAVSqoIdesWTO9/PLLys3N1fbt23XXXXfp3nvv1Z49eyRJ6enpWr58uZYuXar169fr4MGD6tu3r/X7ZWVlSk5OVmlpqTZt2qSFCxcqIyNDEyZMsNbk5+crOTlZXbt2VV5enkaNGqXBgwdr9erVV/18AQAAAinEV3EPkWqiYcOGmjp1qu6//341btxYixYt0v333y/p3/eri4uLU05Ojjp37qyVK1eqd+/eOnjwoHXbk/nz52vs2LH66aefFB4errFjxyozM9PvL1L069dPRUVFWrVq1SXN5PV6ZbfbVVxcLJvNFviT/v9aPpNZZccG8B8HXk4O9ghVhtcR4Oqo6teRS22PavMZubKyMi1evFjHjx+X0+lUbm6uTp06paSkJGtNmzZt1Lx5c+Xk5EiScnJy1LZtW79717lcLnm9XuuqXk5Ojt8xKtZUHONcSkpK5PV6/R4AAADVTdBDbteuXapXr54iIiI0bNgwffDBB4qPj5fb7VZ4eLgiIyP91kdFRcntdkuS3G73WTcgrvj5Ymu8Xq9OnDhxzpkmT54su91u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rVUAOI969eqpXr16WrZsmUpKSs7av23bNknSggULdOjQIevnY8eO6e6771Z2drb+9a9/qWfPnrrnnntUUFAgSXr//ffVrFkzTZo0SYcOHdKhQ4ckSd9++6169uyplJQU7dy5U++9954+//xzjRgx4iqdMQDTcEUOAC7gn//8p4YMGaITJ04oISFBd955p/r166d27dpJ+vdn5D744AP16dPngse56aabNGzYMCvKWrZsqVGjRmnUqFHWmsGDB6tGjRp67bXXrG2ff/657rzzTh0/fly1atUK+PkBMBtX5ADgAlJSUnTw4EF99NFH6tmzp9atW6eEhARlZGSc93eOHTump556SnFxcYqMjFS9evW0d+9e64rc+ezYsUMZGRnWlcB69erJ5XKpvLxc+fn5AT4zAL8HfNkBAC6iVq1a6t69u7p3767nnntOgwcP1vPPP69HHnnknOufeuopZWVl6W9/+5tatWql2rVr6/7771dpaekFn+fYsWN6/PHH9cQTT5y1r3nz5oE4FQC/M4QcAFym+Ph465YjYWFhKisr89u/ceNGPfLII7rvvvsk/TvQDhw44LcmPDz8rN9LSEjQl19+qVatWlXZ7AB+X3hrFQDO45dfftFdd92ld955Rzt37lR+fr6WLl2qKVOm6N5775X078+6ZWdny+126+jRo5Kk66+/Xu+//77y8vK0Y8cOPfTQQyovL/c7dsuWLbVhwwb9+OOP+vnnnyVJY8eO1aZNmzRixAjl5eXp66+/1ocffsiXHQCcFyEHAOdRr149JSYmasaMGerSpYtuuukmPffccxoyZIhmz54tSZo2bZqysrIUExOjDh06SJKmT5+uBg0a6NZbb9U999wjl8ulhIQEv2NPmjRJBw4c0HXXXafGjRtLktq1a6f169frq6++0h133KEOHTpowoQJio6OvronDsAYfGsVAADAUFyRAwAAMBQhBwAAYChCDgAAwFCEHAAAgKEIOQAAAEMRcgAAAIYi5AAAAAxFyAEAABiKkAMAADAUIQcAAGAoQg4AAMBQ/w+kuTpiUmI+KAAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"backend = emulator.Backend(\"permanent\")\n",
"\n",
"sampler = lw.Sampler(\n",
" lossy_circuit, lw.State([1, 0]), 10000, min_detection=1, random_seed=1\n",
")\n",
"results = backend.run(sampler)\n",
"\n",
"results.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Scaling this up to a larger system, a lossy Reck interferometer can be configured and compared to the non-lossy equivalent. To achieve this we will parameterize the loss value and extract the unitary with and without loss.\n",
"\n",
"It can also be seen how some components offer the option to include loss without adding these as additional elements."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"n_modes = 6\n",
"\n",
"interferometer = lw.PhotonicCircuit(n_modes)\n",
"\n",
"# Define parameter to set loss\n",
"loss = lw.Parameter(0, bounds=[0, 1], label=\"loss\")\n",
"\n",
"# Set random seed to ensure repeatability\n",
"seed(111)\n",
"\n",
"for i in range(n_modes - 1):\n",
" for j in range(0, n_modes - 1 - i, 1):\n",
" interferometer.barrier(\n",
" [n_modes - 2 - j, n_modes - 1 - j]\n",
" ) # Use barrier to separate unit cells\n",
"\n",
" # Add randomly configured elements\n",
" interferometer.ps(n_modes - 2 - j, 2 * np.pi * random())\n",
" interferometer.bs(\n",
" n_modes - 2 - j,\n",
" reflectivity=random(),\n",
" loss=loss, # Include loss on beam splitter\n",
" )\n",
"\n",
"interferometer.display(display_loss=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Once the circuit is created, the unitary matrices are then extracted and plotted below. It can be seen how the implemented unitary transformation is altered in the presence of losses."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABEQAAAH5CAYAAACI6esvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAfiElEQVR4nO3dfYyVhb3g8d8wUw6iwygKKGHwZY2y6g6uqFzWl/UFdYlhtX80hpBISdNsm8GVEG/a+Ud0t90h22xXd+VSbrctm7QEbRN0460QSxfYplJ5KVm0W6uuvY6XN7XbAaZlgJnZP3o799JWO8/AzHOe+X0+yUmck2d4fnmY4fz8zjlnGgYGBgYCAAAAIJFxZQ8AAAAAMNoEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIp2m0T9jf3x/79++P5ubmaGhoGO3TA0ClDAwMxNGjR2P69OkxbpyfY2RkdwKAoSuyO416ENm/f3+0traO9mkBoNK6urpixowZZY9BCexOAFDcUHanUQ8izc3NERHxT7/1SDROrI326SvryP89v+wRKufL/+rZskeonCc3LCp7hMqZ+Tf/r+wRKufA7ReUPUKl9J04Hr/4b/9u8PGTfH7/d//X/+uaOOe8xpKnqY7Hf/qvyx6hctbe+O2yR6icZd/6N2WPUDmt/+NQ2SNUzq9unlr2CJXSd/J4/O/v/fsh7U6jHkR+/1TPxok1QaSAcRMmlD1C5UxstjQW1VjzdVZUU6N/x4rydTY8XiqR1+//7s85r9FjWwHjJvq3pqhzm70sryiPacXZnYprHO/rbDiGsjv5Vw8AAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACCdYQWR1atXx2WXXRYTJkyIuXPnxquvvnq25wIAGFPsTwBQXwoHkWeffTZWrFgRK1eujD179sTs2bPjvvvui8OHD4/EfAAAlWd/AoD6UziIfPWrX43PfvazsXTp0rjmmmvia1/7WkycODG++c1vjsR8AACVZ38CgPpTKIicOHEidu/eHfPnz/+HP2DcuJg/f3688sorf/Jzent748iRI6fdAACyKLo/2Z0AYHQUCiIffPBB9PX1xbRp0067f9q0aXHw4ME/+TmdnZ3R0tIyeGttbR3+tAAAFVN0f7I7AcDoGPHfMtPR0RHd3d2Dt66urpE+JQBAZdmdAGB0NBU5+KKLLorGxsY4dOjQafcfOnQoLr744j/5ObVaLWq12vAnBACosKL7k90JAEZHoWeIjB8/PubMmRNbtmwZvK+/vz+2bNkS8+bNO+vDAQBUnf0JAOpToWeIRESsWLEilixZEjfeeGPcfPPN8dRTT0VPT08sXbp0JOYDAKg8+xMA1J/CQeShhx6K999/Px5//PE4ePBgXH/99bFp06Y/eqMwAAB+x/4EAPWncBCJiFi2bFksW7bsbM8CADBm2Z8AoL6M+G+ZAQAAAKg3gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApNNU1okvbj4anzi3t6zTV86mT32z7BEq556v/mXZI1ROU0PZE1TPBzdeUPYIlXPxUz8ue4RKOTVwMv5P2UNQF37Vd2789lRpq1vl/OJf/veyR6icf/7lR8oeoXImHhsoe4TKOfrPppQ9QuWc/+1Xyx6hUk4NnBzysZ4hAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpFA4i27dvj4ULF8b06dOjoaEhnn/++REYCwBgbLA7AUB9KhxEenp6Yvbs2bF69eqRmAcAYEyxOwFAfWoq+gkLFiyIBQsWjMQsAABjjt0JAOpT4SBSVG9vb/T29g5+fOTIkZE+JQBAZdmdAGB0jPibqnZ2dkZLS8vgrbW1daRPCQBQWXYnABgdIx5EOjo6oru7e/DW1dU10qcEAKgsuxMAjI4Rf8lMrVaLWq020qcBABgT7E4AMDpG/BkiAAAAAPWm8DNEjh07Fm+99dbgx++8807s3bs3Jk+eHDNnzjyrwwEAVJ3dCQDqU+EgsmvXrrjzzjsHP16xYkVERCxZsiTWrVt31gYDABgL7E4AUJ8KB5E77rgjBgYGRmIWAIAxx+4EAPXJe4gAAAAA6QgiAAAAQDqCCAAAAJCOIAIAAACkI4gAAAAA6QgiAAAAQDqCCAAAAJCOIAIAAACkI4gAAAAA6QgiAAAAQDqCCAAAAJCOIAIAAACkI4gAAAAA6QgiAAAAQDqCCAAAAJCOIAIAAACkI4gAAAAA6QgiAAAAQDqCCAAAAJCOIAIAAACkI4gAAAAA6QgiAAAAQDqCCAAAAJCOIAIAAACkI4gAAAAA6QgiAAAAQDqCCAAAAJCOIAIAAACkI4gAAAAA6QgiAAAAQDqCCAAAAJBOU1knfvvgRTFu4oSyTl85d//NX5Y9QuVM/88/LnuEyln6xt+WPULlfPvAX5Q9QuUcf+eGskeolL5TxyO2v1D2GNSBNW/eHo0Ta2WPURn/5X9eUPYIlXPxartTUYdfmFX2CJXz/t9NKnuEyrlq/7Vlj1Atp45H7BzaoZ4hAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpFAoinZ2dcdNNN0Vzc3NMnTo1HnzwwXjjjTdGajYAgMqzPwFAfSoURLZt2xbt7e2xY8eOePnll+PkyZNx7733Rk9Pz0jNBwBQafYnAKhPTUUO3rRp02kfr1u3LqZOnRq7d++O22+//awOBgAwFtifAKA+FQoif6i7uzsiIiZPnvyRx/T29kZvb+/gx0eOHDmTUwIAVNqf25/sTgAwOob9pqr9/f2xfPnyuOWWW+K66677yOM6OzujpaVl8Nba2jrcUwIAVNpQ9ie7EwCMjmEHkfb29njttddiw4YNH3tcR0dHdHd3D966urqGe0oAgEobyv5kdwKA0TGsl8wsW7YsXnzxxdi+fXvMmDHjY4+t1WpRq9WGNRwAwFgx1P3J7gQAo6NQEBkYGIhHHnkkNm7cGFu3bo3LL798pOYCABgT7E8AUJ8KBZH29vZYv359vPDCC9Hc3BwHDx6MiIiWlpY455xzRmRAAIAqsz8BQH0q9B4ia9asie7u7rjjjjvikksuGbw9++yzIzUfAECl2Z8AoD4VfskMAABDZ38CgPo07N8yAwAAAFBVgggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApNNU1okv+6990dR4qqzTV87Rf9Jf9giVc+jf/ouyR6icncc00qJuuuBvyx6hctY91Fr2CJXS/9umiO1lT0E9uOQ/joumRv9OD1XvlJNlj1A5xz41t+wRKufXfzdQ9gjV01D2ANXz3p3nlT1CpfT1NkXsHNqxHlUBAACAdAQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIJ1CQWTNmjXR1tYWkyZNikmTJsW8efPipZdeGqnZAAAqz/4EAPWpUBCZMWNGrFq1Knbv3h27du2Ku+66Kx544IF4/fXXR2o+AIBKsz8BQH1qKnLwwoULT/v4y1/+cqxZsyZ27NgR11577VkdDABgLLA/AUB9KhRE/rG+vr747ne/Gz09PTFv3ryPPK63tzd6e3sHPz5y5MhwTwkAUGlD2Z/sTgAwOgq/qeq+ffvivPPOi1qtFp/73Odi48aNcc0113zk8Z2dndHS0jJ4a21tPaOBAQCqpsj+ZHcCgNFROIhcffXVsXfv3vjJT34Sn//852PJkiXxs5/97COP7+joiO7u7sFbV1fXGQ0MAFA1RfYnuxMAjI7CL5kZP358XHnllRERMWfOnNi5c2c8/fTTsXbt2j95fK1Wi1qtdmZTAgBUWJH9ye4EAKOj8DNE/lB/f/9pr3MFAODj2Z8AoHyFniHS0dERCxYsiJkzZ8bRo0dj/fr1sXXr1ti8efNIzQcAUGn2JwCoT4WCyOHDh+Phhx+OAwcOREtLS7S1tcXmzZvjnnvuGan5AAAqzf4EAPWpUBD5xje+MVJzAACMSfYnAKhPZ/weIgAAAABVI4gAAAAA6QgiAAAAQDqCCAAAAJCOIAIAAACkI4gAAAAA6QgiAAAAQDqCCAAAAJCOIAIAAACkI4gAAAAA6QgiAAAAQDqCCAAAAJCOIAIAAACkI4gAAAAA6QgiAAAAQDqCCAAAAJCOIAIAAACkI4gAAAAA6QgiAAAAQDqCCAAAAJCOIAIAAACkI4gAAAAA6QgiAAAAQDqCCAAAAJCOIAIAAACkI4gAAAAA6QgiAAAAQDqCCAAAAJCOIAIAAACkI4gAAAAA6QgiAAAAQDpNZZ342KXnRtMnJpR1+so5NLfsCarnhrlvlD1C5fz8/illj1A5AwMDZY9QOe/89K/LHqFSjhztjwuWlz0F9eDE5AnR32R3GqpfzfpE2SNUzpFZp8oeoXKuXran7BEqZ+CUr7Oijm26ouwRKuVUT2/EfxrasZ4hAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpCCIAAABAOoIIAAAAkI4gAgAAAKQjiAAAAADpnFEQWbVqVTQ0NMTy5cvP0jgAAGOb/QkA6sOwg8jOnTtj7dq10dbWdjbnAQAYs+xPAFA/hhVEjh07FosXL46vf/3rccEFF5ztmQAAxhz7EwDUl2EFkfb29rj//vtj/vz5f/bY3t7eOHLkyGk3AIBshro/2Z0AYHQ0Ff2EDRs2xJ49e2Lnzp1DOr6zszOefPLJwoMBAIwVRfYnuxMAjI5CzxDp6uqKRx99NL7zne/EhAkThvQ5HR0d0d3dPXjr6uoa1qAAAFVUdH+yOwHA6Cj0DJHdu3fH4cOH44Ybbhi8r6+vL7Zv3x7PPPNM9Pb2RmNj42mfU6vVolarnZ1pAQAqpuj+ZHcCgNFRKIjcfffdsW/fvtPuW7p0acyaNSu+8IUv/FEMAQDIzv4EAPWpUBBpbm6O66677rT7zj333Ljwwgv/6H4AAOxPAFCvhvVbZgAAAACqrPBvmflDW7duPQtjAADkYX8CgPJ5hggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOkIIgAAAEA6gggAAACQjiACAAAApCOIAAAAAOk0lXXiDz/5m2ic2F/W6SuneWtz2SNUzk9PXVX2CJXTcn/ZE1TPFUt/UfYIlXPV9ofLHqFS+n9zPCL+Q9ljUAe65jfFuAmlrW6V0/qDk2WPUDmfOOrrq6i+v7iu7BEq59DciWWPUDmNL5Y9QbX0nTg+5GM9QwQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0ikURJ544oloaGg47TZr1qyRmg0AoPLsTwBQn5qKfsK1114bP/jBD/7hD2gq/EcAAKRifwKA+lP40bipqSkuvvjikZgFAGBMsj8BQP0p/B4ib775ZkyfPj2uuOKKWLx4cbz77rsfe3xvb28cOXLktBsAQCZF9ie7EwCMjkJBZO7cubFu3brYtGlTrFmzJt5555247bbb4ujRox/5OZ2dndHS0jJ4a21tPeOhAQCqouj+ZHcCgNFRKIgsWLAgPvWpT0VbW1vcd9998f3vfz9+/etfx3PPPfeRn9PR0RHd3d2Dt66urjMeGgCgKoruT3YnABgdZ/SOXueff35cddVV8dZbb33kMbVaLWq12pmcBgBgzPhz+5PdCQBGR+H3EPnHjh07Fm+//XZccsklZ2seAIAxzf4EAPWhUBB57LHHYtu2bfHLX/4yfvzjH8cnP/nJaGxsjEWLFo3UfAAAlWZ/AoD6VOglM++9914sWrQoPvzww5gyZUrceuutsWPHjpgyZcpIzQcAUGn2JwCoT4WCyIYNG0ZqDgCAMcn+BAD16YzeQwQAAACgigQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIB1BBAAAAEhHEAEAAADSEUQAAACAdAQRAAAAIJ2m0T7hwMBARET0/7Z3tE9daX0nPlH2CJXTf3yg7BEqp+9E2RNUz8keF62o/t8cL3uESvn94+XvHz/JZ3B3Ou57p4hTJ/vKHqFy+k6M+v8aVN6pU74vi+rr9TP5wqybhfSd+N335VB2p4aBUd6w3nvvvWhtbR3NUwJA5XV1dcWMGTPKHoMS2J0AoLih7E6jHkT6+/tj//790dzcHA0NDaN56o915MiRaG1tja6urpg0aVLZ41SCa1aca1aca1aca1ZcPV+zgYGBOHr0aEyfPj3GjfNTtYzqdXeKqO/vnXrlmhXnmhXnmhXnmhVXr9esyO406s+LGzduXF3/hGvSpEl19ZdZBa5Zca5Zca5Zca5ZcfV6zVpaWsoegRLV++4UUb/fO/XMNSvONSvONSvONSuuHq/ZUHcnP2oCAAAA0hFEAAAAgHQEkb9Xq9Vi5cqVUavVyh6lMlyz4lyz4lyz4lyz4lwzGB7fO8W5ZsW5ZsW5ZsW5ZsWNhWs26m+qCgAAAFA2zxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFE/t7q1avjsssuiwkTJsTcuXPj1VdfLXukurV9+/ZYuHBhTJ8+PRoaGuL5558ve6S619nZGTfddFM0NzfH1KlT48EHH4w33nij7LHq2po1a6KtrS0mTZoUkyZNinnz5sVLL71U9liVsWrVqmhoaIjly5eXPUpde+KJJ6KhoeG026xZs8oeCyrB7lSM/ak4+1Nx9qczY38amrG0PwkiEfHss8/GihUrYuXKlbFnz56YPXt23HfffXH48OGyR6tLPT09MXv27Fi9enXZo1TGtm3bor29PXbs2BEvv/xynDx5Mu69997o6ekpe7S6NWPGjFi1alXs3r07du3aFXfddVc88MAD8frrr5c9Wt3buXNnrF27Ntra2soepRKuvfbaOHDgwODtRz/6UdkjQd2zOxVnfyrO/lSc/Wn47E/FjJX9qWFgYGCg7CHKNnfu3LjpppvimWeeiYiI/v7+aG1tjUceeSS++MUvljxdfWtoaIiNGzfGgw8+WPYolfL+++/H1KlTY9u2bXH77beXPU5lTJ48Ob7yla/EZz7zmbJHqVvHjh2LG264If7qr/4qvvSlL8X1118fTz31VNlj1a0nnnginn/++di7d2/Zo0Cl2J3OjP1peOxPw2N/+vPsT8WMpf0p/TNETpw4Ebt374758+cP3jdu3LiYP39+vPLKKyVOxljW3d0dEb97gOLP6+vriw0bNkRPT0/Mmzev7HHqWnt7e9x///2n/ZvGx3vzzTdj+vTpccUVV8TixYvj3XffLXskqGt2J8pifyrG/jR09qfixsr+1FT2AGX74IMPoq+vL6ZNm3ba/dOmTYuf//znJU3FWNbf3x/Lly+PW265Ja677rqyx6lr+/bti3nz5sXx48fjvPPOi40bN8Y111xT9lh1a8OGDbFnz57YuXNn2aNUxty5c2PdunVx9dVXx4EDB+LJJ5+M2267LV577bVobm4uezyoS3YnymB/Gjr7UzH2p+LG0v6UPojAaGtvb4/XXnutsq+zG01XX3117N27N7q7u+N73/teLFmyJLZt2+ZB/U/o6uqKRx99NF5++eWYMGFC2eNUxoIFCwb/u62tLebOnRuXXnppPPfcc55aDFBH7E9DZ38aOvvT8Iyl/Sl9ELnooouisbExDh06dNr9hw4diosvvrikqRirli1bFi+++GJs3749ZsyYUfY4dW/8+PFx5ZVXRkTEnDlzYufOnfH000/H2rVrS56s/uzevTsOHz4cN9xww+B9fX19sX379njmmWeit7c3GhsbS5ywGs4///y46qqr4q233ip7FKhbdidGm/2pGPvT0Nmfzo4q70/p30Nk/PjxMWfOnNiyZcvgff39/bFlyxavteOsGRgYiGXLlsXGjRvjhz/8YVx++eVlj1RJ/f390dvbW/YYdenuu++Offv2xd69ewdvN954YyxevDj27t3rwXyIjh07Fm+//XZccsklZY8CdcvuxGixP50d9qePZn86O6q8P6V/hkhExIoVK2LJkiVx4403xs033xxPPfVU9PT0xNKlS8serS4dO3bstPr3zjvvxN69e2Py5Mkxc+bMEierX+3t7bF+/fp44YUXorm5OQ4ePBgRES0tLXHOOeeUPF196ujoiAULFsTMmTPj6NGjsX79+ti6dWts3ry57NHqUnNz8x+9pvrcc8+NCy+80GutP8Zjjz0WCxcujEsvvTT2798fK1eujMbGxli0aFHZo0FdszsVZ38qzv5UnP2pGPvT8Iyl/UkQiYiHHnoo3n///Xj88cfj4MGDcf3118emTZv+6M3C+J1du3bFnXfeOfjxihUrIiJiyZIlsW7dupKmqm9r1qyJiIg77rjjtPu/9a1vxac//enRH6gCDh8+HA8//HAcOHAgWlpaoq2tLTZv3hz33HNP2aMxhrz33nuxaNGi+PDDD2PKlClx6623xo4dO2LKlClljwZ1ze5UnP2pOPtTcfYnRsNY2p8aBgYGBsoeAgAAAGA0pX8PEQAAACAfQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0hFEAAAAgHQEEQAAACAdQQQAAABIRxABAAAA0vn/n9UNLM+5SMgAAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Set loss to 0 and get unitary\n",
"loss.set(0)\n",
"U_ideal = interferometer.U\n",
"\n",
"# Set loss to 0.2 and get unitary\n",
"loss.set(0.2)\n",
"U_lossy = interferometer.U\n",
"\n",
"fig, ax = plt.subplots(1, 2, figsize=(14, 6))\n",
"\n",
"ax[0].imshow(abs(U_ideal))\n",
"ax[1].imshow(abs(U_lossy))\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Source Imperfections\n",
"\n",
"There are a number of imperfections that can be introduced within the Source. To view these, we'll configure a basic Hong-Ou-Mandel (HOM) configuration, consisting of two input photons incident on a 50:50 beam splitter. When using a perfect source the $\\ket{1,1}$ input should produce an output of either $\\ket{2,0}$ or $\\ket{0,2}$."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"hom = lw.PhotonicCircuit(2)\n",
"\n",
"hom.bs(0, reflectivity=0.5)\n",
"\n",
"hom.display()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
".. note:: Source imperfections can only be used with the Sampler."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Indistinguishability\n",
"\n",
"Indistinguishability is a measure of how similar the photons are to each other. This alters the extent to which the photons interfere, affecting the fidelity of transformations which are implemented. The model used in Lightworks assumes an identical level of indistinguishability between all photons. \n",
"\n",
"For the HOM setup, it can be seen how the presence of partial distinguishability introduces a $\\ket{1,1}$ component which should not be measured."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAIlCAYAAABRpRXaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAr8klEQVR4nO3de5SVdd3//9cgMB5wBvEAkSCkZuAZLJ3q9oiMiq1MXCvKA+Uh5QYKWaU3dx6Ku3vZsjyVpnZQsHJplpZKaQiJpaSG4Sm1EwaFM5gKg9wCysz3j37sXxOgMg3s+ejjsdZeq7muz+x5X7XX7sm1r713TVtbW1sAAChOt2oPAABAxwg5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQnWv9gAlaG1tzeLFi7Ptttumpqam2uMAAG9xbW1tWb58efr3759u3TZ83k3IvQmLFy/OgAEDqj0GAPA2s2jRouy8884b3C/k3oRtt902yT/+y6yrq6vyNADAW11LS0sGDBhQaZANEXJvwtqXU+vq6oQcALDZvNElXd7sAABQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQqO7VHoD/36D/mlHtESjMs18eVe0RAKgiZ+QAAAol5AAACuWlVQDe9lzawsbqKpe2OCMHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUKguE3Jf/vKXU1NTk0mTJlW2rVy5MuPHj8/222+fXr16ZfTo0Wlubm73ewsXLsyoUaOy9dZbZ6eddsrnPve5vPbaa+3W3HvvvRk2bFhqa2uz2267Zdq0aZvhiAAANq0uEXIPP/xwrr322uyzzz7ttp999tm54447csstt2TOnDlZvHhxjj/++Mr+NWvWZNSoUVm9enUeeOCBTJ8+PdOmTcsFF1xQWbNgwYKMGjUqhx12WObPn59Jkybl9NNPz913373Zjg8AYFOoesi9/PLLOfHEE/Otb30r2223XWX7smXL8p3vfCeXXnppDj/88AwfPjzXX399Hnjggfz6179Okvz85z/P7373u3zve9/Lfvvtl6OPPjr/8z//k6uuuiqrV69OklxzzTUZPHhwLrnkkgwZMiQTJkzICSeckMsuu6wqxwsA0FmqHnLjx4/PqFGjMmLEiHbb582bl1dffbXd9ve85z0ZOHBg5s6dmySZO3du9t577/Tt27eyprGxMS0tLXnyyScra/71vhsbGyv3sT6rVq1KS0tLuxsAQFfTvZp//KabbsojjzyShx9+eJ19TU1N6dmzZ3r37t1ue9++fdPU1FRZ888Rt3b/2n2vt6alpSWvvPJKttpqq3X+9kUXXZQvfvGLHT4uAIDNoWpn5BYtWpTPfOYz+f73v58tt9yyWmOs15QpU7Js2bLKbdGiRdUeCQBgHVULuXnz5mXJkiUZNmxYunfvnu7du2fOnDn52te+lu7du6dv375ZvXp1li5d2u73mpub069fvyRJv3791nkX69qf32hNXV3des/GJUltbW3q6ura3QAAupqqhdwRRxyRxx9/PPPnz6/cDjjggJx44omV/9yjR4/MmjWr8jvPPPNMFi5cmIaGhiRJQ0NDHn/88SxZsqSyZubMmamrq8vQoUMra/75PtauWXsfAAClqto1cttuu2322muvdtu22WabbL/99pXtp512WiZPnpw+ffqkrq4uEydOTENDQw466KAkyciRIzN06NCcfPLJufjii9PU1JTzzjsv48ePT21tbZLkrLPOypVXXplzzjknp556ambPnp0f/OAHmTFjxuY9YACATlbVNzu8kcsuuyzdunXL6NGjs2rVqjQ2NuYb3/hGZf8WW2yRO++8M+PGjUtDQ0O22WabjB07NlOnTq2sGTx4cGbMmJGzzz47V1xxRXbeeed8+9vfTmNjYzUOCQCg09S0tbW1VXuIrq6lpSX19fVZtmzZJr1ebtB/OUvIxnn2y6OqPQK8JXj+ZWNt6uffN9seVf8cOQAAOkbIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABSqqiF39dVXZ5999kldXV3q6urS0NCQn/3sZ5X9K1euzPjx47P99tunV69eGT16dJqbm9vdx8KFCzNq1KhsvfXW2WmnnfK5z30ur732Wrs19957b4YNG5ba2trstttumTZt2uY4PACATaqqIbfzzjvny1/+cubNm5ff/OY3Ofzww/PhD384Tz75ZJLk7LPPzh133JFbbrklc+bMyeLFi3P88cdXfn/NmjUZNWpUVq9enQceeCDTp0/PtGnTcsEFF1TWLFiwIKNGjcphhx2W+fPnZ9KkSTn99NNz9913b/bjBQDoTDVtbW1t1R7in/Xp0ydf+cpXcsIJJ2THHXfMjTfemBNOOCFJ8vTTT2fIkCGZO3duDjrooPzsZz/Lsccem8WLF6dv375JkmuuuSbnnntunn/++fTs2TPnnntuZsyYkSeeeKLyN8aMGZOlS5fmrrvuelMztbS0pL6+PsuWLUtdXV3nH/T/Z9B/zdhk981b07NfHlXtEeAtwfMvG2tTP/++2fboMtfIrVmzJjfddFNWrFiRhoaGzJs3L6+++mpGjBhRWfOe97wnAwcOzNy5c5Mkc+fOzd57712JuCRpbGxMS0tL5aze3Llz293H2jVr72N9Vq1alZaWlnY3AICupuoh9/jjj6dXr16pra3NWWedldtuuy1Dhw5NU1NTevbsmd69e7db37dv3zQ1NSVJmpqa2kXc2v1r973empaWlrzyyivrnemiiy5KfX195TZgwIDOOFQAgE5V9ZDbY489Mn/+/Dz44IMZN25cxo4dm9/97ndVnWnKlClZtmxZ5bZo0aKqzgMAsD7dqz1Az549s9tuuyVJhg8fnocffjhXXHFFPvrRj2b16tVZunRpu7Nyzc3N6devX5KkX79+eeihh9rd39p3tf7zmn99p2tzc3Pq6uqy1VZbrXem2tra1NbWdsrxAQBsKlU/I/evWltbs2rVqgwfPjw9evTIrFmzKvueeeaZLFy4MA0NDUmShoaGPP7441myZEllzcyZM1NXV5ehQ4dW1vzzfaxds/Y+AABKVdUzclOmTMnRRx+dgQMHZvny5bnxxhtz77335u677059fX1OO+20TJ48OX369EldXV0mTpyYhoaGHHTQQUmSkSNHZujQoTn55JNz8cUXp6mpKeedd17Gjx9fOaN21lln5corr8w555yTU089NbNnz84PfvCDzJjhHUoAQNmqGnJLlizJKaeckueeey719fXZZ599cvfdd+fII49Mklx22WXp1q1bRo8enVWrVqWxsTHf+MY3Kr+/xRZb5M4778y4cePS0NCQbbbZJmPHjs3UqVMrawYPHpwZM2bk7LPPzhVXXJGdd9453/72t9PY2LjZjxcAoDN1uc+R64p8jhxdlc+Rg87h+ZeN5XPkAAD4twg5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQnUo5B555JE8/vjjlZ9/8pOf5Ljjjst///d/Z/Xq1Z02HAAAG9ahkDvzzDPz+9//Pkny5z//OWPGjMnWW2+dW265Jeecc06nDggAwPp1KOR+//vfZ7/99kuS3HLLLTn44INz4403Ztq0afnRj37UmfMBALABHQq5tra2tLa2JknuueeeHHPMMUmSAQMG5O9//3vnTQcAwAZ1KOQOOOCAfOlLX8p3v/vdzJkzJ6NGjUqSLFiwIH379u3UAQEAWL8Ohdxll12WRx55JBMmTMjnP//57LbbbkmSH/7wh3n/+9/fqQMCALB+3TvyS/vuu2+7d62u9ZWvfCXdu3foLgEA2EgdOiP3rne9Ky+88MI621euXJl3v/vd//ZQAAC8sQ6F3LPPPps1a9ass33VqlX561//+m8PBQDAG9uo10Fvv/32yn++++67U19fX/l5zZo1mTVrVgYPHtx50wEAsEEbFXLHHXdckqSmpiZjx45tt69Hjx4ZNGhQLrnkkk4bDgCADduokFv72XGDBw/Oww8/nB122GGTDAUAwBvr0FtMFyxY0NlzAACwkTr8WSGzZs3KrFmzsmTJksqZurWuu+66f3swAABeX4dC7otf/GKmTp2aAw44IO94xztSU1PT2XMBAPAGOhRy11xzTaZNm5aTTz65s+cBAOBN6tDnyK1evdpXcQEAVFmHQu7000/PjTfe2NmzAACwETr00urKlSvzzW9+M/fcc0/22Wef9OjRo93+Sy+9tFOGAwBgwzoUco899lj222+/JMkTTzzRbp83PgAAbB4dCrlf/OIXnT0HAAAbqUPXyAEAUH0dOiN32GGHve5LqLNnz+7wQAAAvDkdCrm118et9eqrr2b+/Pl54oknMnbs2M6YCwCAN9ChkLvsssvWu/0LX/hCXn755X9rIAAA3pxOvUbupJNO8j2rAACbSaeG3Ny5c7Plllt25l0CALABHXpp9fjjj2/3c1tbW5577rn85je/yfnnn98pgwEA8Po6FHL19fXtfu7WrVv22GOPTJ06NSNHjuyUwQAAeH0dCrnrr7++s+cAAGAjdSjk1po3b16eeuqpJMmee+6Z/fffv1OGAgDgjXUo5JYsWZIxY8bk3nvvTe/evZMkS5cuzWGHHZabbropO+64Y2fOCADAenToXasTJ07M8uXL8+STT+bFF1/Miy++mCeeeCItLS359Kc/3dkzAgCwHh06I3fXXXflnnvuyZAhQyrbhg4dmquuusqbHQAANpMOnZFrbW1Njx491tneo0ePtLa2/ttDAQDwxjoUcocffng+85nPZPHixZVtf/vb33L22WfniCOO6LThAADYsA6F3JVXXpmWlpYMGjQou+66a3bdddcMHjw4LS0t+frXv97ZMwIAsB4dukZuwIABeeSRR3LPPffk6aefTpIMGTIkI0aM6NThAADYsI06Izd79uwMHTo0LS0tqampyZFHHpmJEydm4sSJee9735s999wzv/zlLzfVrAAA/JONCrnLL788Z5xxRurq6tbZV19fnzPPPDOXXnpppw0HAMCGbVTIPfrooznqqKM2uH/kyJGZN2/evz0UAABvbKNCrrm5eb0fO7JW9+7d8/zzz//bQwEA8MY2KuTe+c535oknntjg/sceeyzveMc7/u2hAAB4YxsVcsccc0zOP//8rFy5cp19r7zySi688MIce+yxnTYcAAAbtlEfP3Leeefl1ltvzbvf/e5MmDAhe+yxR5Lk6aefzlVXXZU1a9bk85///CYZFACA9jYq5Pr27ZsHHngg48aNy5QpU9LW1pYkqampSWNjY6666qr07dt3kwwKAEB7G/2BwLvsskt++tOf5qWXXsof//jHtLW1Zffdd8922223KeYDAGADOvTNDkmy3Xbb5b3vfW9nzgIAwEbo0HetAgBQfUIOAKBQQg4AoFBCDgCgUEIOAKBQVQ25iy66KO9973uz7bbbZqeddspxxx2XZ555pt2alStXZvz48dl+++3Tq1evjB49Os3Nze3WLFy4MKNGjcrWW2+dnXbaKZ/73Ofy2muvtVtz7733ZtiwYamtrc1uu+2WadOmberDAwDYpKoacnPmzMn48ePz61//OjNnzsyrr76akSNHZsWKFZU1Z599du64447ccsstmTNnThYvXpzjjz++sn/NmjUZNWpUVq9enQceeCDTp0/PtGnTcsEFF1TWLFiwIKNGjcphhx2W+fPnZ9KkSTn99NNz9913b9bjBQDoTDVta7+eoQt4/vnns9NOO2XOnDk5+OCDs2zZsuy444658cYbc8IJJyT5x9eBDRkyJHPnzs1BBx2Un/3sZzn22GOzePHiyrdKXHPNNTn33HPz/PPPp2fPnjn33HMzY8aMPPHEE5W/NWbMmCxdujR33XXXG87V0tKS+vr6LFu2LHV1dZvm4JMM+q8Zm+y+eWt69sujqj0CvCV4/mVjbern3zfbHl3qGrlly5YlSfr06ZMkmTdvXl599dWMGDGisuY973lPBg4cmLlz5yZJ5s6dm7333rvdV4M1NjampaUlTz75ZGXNP9/H2jVr7+NfrVq1Ki0tLe1uAABdTZcJudbW1kyaNCkf+MAHstdeeyVJmpqa0rNnz/Tu3bvd2r59+6apqamy5l+/33Xtz2+0pqWlJa+88so6s1x00UWpr6+v3AYMGNApxwgA0Jm6TMiNHz8+TzzxRG666aZqj5IpU6Zk2bJllduiRYuqPRIAwDo6/F2rnWnChAm58847c99992XnnXeubO/Xr19Wr16dpUuXtjsr19zcnH79+lXWPPTQQ+3ub+27Wv95zb++07W5uTl1dXXZaqut1pmntrY2tbW1nXJsAACbSlXPyLW1tWXChAm57bbbMnv27AwePLjd/uHDh6dHjx6ZNWtWZdszzzyThQsXpqGhIUnS0NCQxx9/PEuWLKmsmTlzZurq6jJ06NDKmn++j7Vr1t4HAECJqnpGbvz48bnxxhvzk5/8JNtuu23lmrb6+vpstdVWqa+vz2mnnZbJkyenT58+qaury8SJE9PQ0JCDDjooSTJy5MgMHTo0J598ci6++OI0NTXlvPPOy/jx4ytn1c4666xceeWVOeecc3Lqqadm9uzZ+cEPfpAZM7xLCQAoV1XPyF199dVZtmxZDj300LzjHe+o3G6++ebKmssuuyzHHntsRo8enYMPPjj9+vXLrbfeWtm/xRZb5M4778wWW2yRhoaGnHTSSTnllFMyderUyprBgwdnxowZmTlzZvbdd99ccskl+fa3v53GxsbNerwAAJ2pS32OXFflc+ToqnyOHHQOz79sLJ8jBwDAv0XIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABSqezX/+H333ZevfOUrmTdvXp577rncdtttOe644yr729racuGFF+Zb3/pWli5dmg984AO5+uqrs/vuu1fWvPjii5k4cWLuuOOOdOvWLaNHj84VV1yRXr16VdY89thjGT9+fB5++OHsuOOOmThxYs4555zNeajwljfov2ZUewQK8+yXR1V7BCheVc/IrVixIvvuu2+uuuqq9e6/+OKL87WvfS3XXHNNHnzwwWyzzTZpbGzMypUrK2tOPPHEPPnkk5k5c2buvPPO3HffffnUpz5V2d/S0pKRI0dml112ybx58/KVr3wlX/jCF/LNb35zkx8fAMCmVNUzckcffXSOPvro9e5ra2vL5ZdfnvPOOy8f/vCHkyQ33HBD+vbtmx//+McZM2ZMnnrqqdx11115+OGHc8ABByRJvv71r+eYY47JV7/61fTv3z/f//73s3r16lx33XXp2bNn9txzz8yfPz+XXnppu+ADAChNl71GbsGCBWlqasqIESMq2+rr63PggQdm7ty5SZK5c+emd+/elYhLkhEjRqRbt2558MEHK2sOPvjg9OzZs7KmsbExzzzzTF566aX1/u1Vq1alpaWl3Q0AoKvpsiHX1NSUJOnbt2+77X379q3sa2pqyk477dRuf/fu3dOnT592a9Z3H//8N/7VRRddlPr6+sptwIAB//4BAQB0si4bctU0ZcqULFu2rHJbtGhRtUcCAFhHlw25fv36JUmam5vbbW9ubq7s69evX5YsWdJu/2uvvZYXX3yx3Zr13cc//41/VVtbm7q6unY3AICupsuG3ODBg9OvX7/MmjWrsq2lpSUPPvhgGhoakiQNDQ1ZunRp5s2bV1kze/bstLa25sADD6ysue+++/Lqq69W1sycOTN77LFHtttuu810NAAAna+qIffyyy9n/vz5mT9/fpJ/vMFh/vz5WbhwYWpqajJp0qR86Utfyu23357HH388p5xySvr371/5rLkhQ4bkqKOOyhlnnJGHHnoo999/fyZMmJAxY8akf//+SZKPf/zj6dmzZ0477bQ8+eSTufnmm3PFFVdk8uTJVTpqAIDOUdWPH/nNb36Tww47rPLz2rgaO3Zspk2blnPOOScrVqzIpz71qSxdujQf/OAHc9ddd2XLLbes/M73v//9TJgwIUcccUTlA4G/9rWvVfbX19fn5z//ecaPH5/hw4dnhx12yAUXXOCjRwCA4lU15A499NC0tbVtcH9NTU2mTp2aqVOnbnBNnz59cuONN77u39lnn33yy1/+ssNzAgB0RV32GjkAAF6fkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKNTbKuSuuuqqDBo0KFtuuWUOPPDAPPTQQ9UeCQCgw942IXfzzTdn8uTJufDCC/PII49k3333TWNjY5YsWVLt0QAAOuRtE3KXXnppzjjjjHzyk5/M0KFDc80112TrrbfOddddV+3RAAA6pHu1B9gcVq9enXnz5mXKlCmVbd26dcuIESMyd+7cddavWrUqq1atqvy8bNmyJElLS8smnbN11f9t0vvnrWdTPyY3hscvG8vjl5Jt6sfv2vtva2t73XVvi5D7+9//njVr1qRv377ttvft2zdPP/30OusvuuiifPGLX1xn+4ABAzbZjNAR9ZdXewLoOI9fSra5Hr/Lly9PfX39Bve/LUJuY02ZMiWTJ0+u/Nza2poXX3wx22+/fWpqaqo42dtTS0tLBgwYkEWLFqWurq7a48BG8filZB6/1dPW1pbly5enf//+r7vubRFyO+ywQ7bYYos0Nze3297c3Jx+/fqts762tja1tbXttvXu3XtTjsibUFdX54mEYnn8UjKP3+p4vTNxa70t3uzQs2fPDB8+PLNmzapsa21tzaxZs9LQ0FDFyQAAOu5tcUYuSSZPnpyxY8fmgAMOyPve975cfvnlWbFiRT75yU9WezQAgA5524TcRz/60Tz//PO54IIL0tTUlP322y933XXXOm+AoOupra3NhRdeuM7L3VACj19K5vHb9dW0vdH7WgEA6JLeFtfIAQC8FQk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTm6vGeffTbHH398nnnmmWqPAhvtwQcfTJ8+ffKLX/yi2qPARvP82/UJObq86dOn58c//nG+853vVHsU2GjTpk3LihUrcv3111d7FNhonn+7Pl/RRZe36667pqGhIbNnz85f//rXdOvm3x+UYdWqVenfv3/OPffcTJ06NU1NTenVq1e1x4I3zfNv1+d/Ebq0++67Ly+88EKuvvrqtLa25u677672SPCm/eQnP0mvXr3yuc99LoMGDcoPf/jDao8Eb5rn3zIIObq06dOnZ/To0dl2220zZsyYTJs2rdojwZs2ffr0nHjiiampqclJJ53k5VWK4vm3DF5apct65ZVX0q9fv9x+++055JBD8sgjj+SDH/xgnnvuudTX11d7PHhdTU1NGThwYB5//PHsscceWbRoUQYPHpw//OEPGTx4cLXHg9fl+bcczsjRZf3oRz9Knz59csghhyRJhg0blne961256aabqjwZvLHvfe972W+//bLHHnskSQYMGJBDDjkkN9xwQ5Ungzfm+bccQo4u64YbbsiJJ57YbttJJ53k9D5FmD59ek455ZR2204++WQhRxE8/5bDS6t0SWtfhnrqqaey++67V7b/9a9/zaBBg/K73/0u7373u6s4IWzYokWLMnbs2Nxyyy3ZfvvtK9tffvnlHHfccbn66qvbPa6hK/H8WxYhBwBQKC+tAgAUqnu1B4ANaW1tXe+HT7a2tuavf/1rBg4cWIWp4N/T3Nyca6+9NhdccEG1R4ENeuihhzJ37tw0NTUlSfr165eGhoa8733vq/Jk/CsvrdLltLS05PTTT88dd9yRurq6nHnmmbnwwguzxRZbJPnH/xH2798/a9asqfKksPEeffTRDBs2zOOXLmnJkiUZPXp07r///gwcODB9+/ZN8o/n3YULF+YDH/hAfvSjH2WnnXaq8qSs5YwcXc7555+fRx99NN/97nezdOnSfOlLX8ojjzySW2+9NT179kyS+PcHXdVjjz32uvt9+Thd2X/+539mzZo1eeqppyofnbPWM888k1NPPTXjx4/PLbfcUqUJ+VfOyNHl7LLLLpk+fXoOPfTQJMnf//73jBo1Kr17987tt9+epUuXOiNHl9WtW7fU1NSs9x8ba7fX1NR4/NIlbbvttrnvvvuy//77r3f/vHnzcuihh2b58uWbeTI2xJsd6HKef/757LLLLpWfd9hhh9xzzz1Zvnx5jjnmmPzf//1fFaeD19enT59861vfyoIFC9a5/fnPf86dd95Z7RFhg2pra9PS0rLB/cuXL09tbe1mnIg3IuTocgYOHJinnnqq3bZtt902P//5z/PKK6/kIx/5SJUmgzc2fPjwLF68OLvssst6b+985ztdGkCX9dGPfjRjx47Nbbfd1i7oWlpactttt+WTn/xkPvaxj1VxQv6Va+TockaOHJnrr78+xxxzTLvtvXr1yt13350jjzyySpPBGzvrrLOyYsWKDe4fOHBgrr/++s04Ebx5l156aVpbWzNmzJi89tprleuSV69ene7du+e0007LV7/61SpPyT9zjRxdzksvvZTFixdnzz33XO/+5cuX55FHHql8ByAAnaulpSXz5s1r9/Ejw4cPT11dXZUn418JOQCAQrlGjiLdcMMN+dOf/lTtMaBDpk6dml/+8pfVHgM6xPNv1+KMHEXq1q1bevTokU996lP5+te/Xu1xYKMMHjw4zc3NOeKII3LHHXdUexzYKJ5/uxZn5ChSa2trnn766QwZMqTao8BGW7BgQV544YWMGzeu2qPARvP827U4IwcAUCgfP0KX1dTUlAcffLDdu6YOPPDA9OvXr8qTQcetWLEi8+bNy8EHH1ztUYC3AGfk6HJWrFiRM888MzfddFNqamrSp0+fJMmLL76Ytra2fOxjH8u1116brbfeusqTwsZ79NFHM2zYMF/RRZf06quv5vOf/3xuvfXW9OnTJ2eddVZOPfXUyv7m5mZfkdjFuEaOLuczn/lMHnroocyYMSMrV65Mc3Nzmpubs3Llyvz0pz/NQw89lM985jPVHhPgLed///d/c8MNN+Sss87KyJEjM3ny5Jx55pnt1jj/07U4I0eXs91222XGjBl5//vfv979999/f4499ti89NJLm3kyeGNrzyBvyJo1a/Lyyy87o0GXtPvuu+eyyy7LsccemyT54x//mKOPPjof/OAHc91112XJkiXOyHUxrpGjy2ltba18Lcz69OzZM62trZtxInjzVq1alXHjxmXvvfde7/6//OUv+eIXv7iZp4I3529/+1v22muvys+77bZb7r333hx++OE5+eSTc/HFF1dxOtZHyNHlHHvssfnUpz6V73znO9l///3b7fvtb3+bcePG5UMf+lCVpoPXt99++2XAgAEZO3bsevc/+uijQo4uq1+/fvnTn/6UQYMGVba9853vzC9+8Yscdthh+cQnPlG12Vg/18jR5Vx55ZXp27dvhg8fnu233z5DhgzJkCFDsv322+eAAw7ITjvtlCuvvLLaY8J6jRo1KkuXLt3g/j59+uSUU07ZfAPBRjj88MNz4403rrO9f//+mT17dhYsWFCFqXg9rpGjy3rqqacyd+7cNDc3J/nHvxQbGhrynve8p8qTAbw1/eUvf8nTTz+dxsbG9e5fvHhxZs6cucEzzmx+Qg4AoFCukaNLGTx4cGpqajb69yZNmpRPf/rTm2AiePM8fimZx2+ZnJGjS5kzZ06Hfm/QoEHZZZddOnka2Dgev5TM47dMQg4AoFDetQoAUCghBwBQKCEHAFAoIQcAUCghBwBQKCEH8Dqef/75jBs3LgMHDkxtbW369euXxsbG3H///UmSmpqa/PjHP97o+x00aFAuv/zyzh0WeNvxgcAAr2P06NFZvXp1pk+fnne9611pbm7OrFmz8sILL1R7NACfIwewIUuXLs12222Xe++9N4cccsg6+wcNGpS//OUvlZ932WWXPPvss/nTn/6UyZMn59e//nVWrFiRIUOG5KKLLsqIESOSJIceeug6H7669qn4V7/6VaZMmZLf/OY32WGHHfKRj3wkF110UbbZZptNeKRAqby0CrABvXr1Sq9evfLjH/84q1atWmf/ww8/nCS5/vrr89xzz1V+fvnll3PMMcdk1qxZ+e1vf5ujjjoqH/rQh7Jw4cIkya233pqdd945U6dOzXPPPZfnnnsuSfKnP/0pRx11VEaPHp3HHnssN998c371q19lwoQJm+mIgdI4IwfwOn70ox/ljDPOyCuvvJJhw4blkEMOyZgxY7LPPvsk+cc1crfddluOO+64172fvfbaK2eddVYlygYNGpRJkyZl0qRJlTWnn356tthii1x77bWVbb/61a9yyCGHZMWKFdlyyy07/fiAsjkjB/A6Ro8encWLF+f222/PUUcdlXvvvTfDhg3LtGnTNvg7L7/8cj772c9myJAh6d27d3r16pWnnnqqckZuQx599NFMmzatciawV69eaWxsTGtraxYsWNDJRwa8FXizA8Ab2HLLLXPkkUfmyCOPzPnnn5/TTz89F154YT7xiU+sd/1nP/vZzJw5M1/96lez2267ZauttsoJJ5yQ1atXv+7fefnll3PmmWfm05/+9Dr7Bg4c2BmHArzFCDmAjTR06NDKR4706NEja9asabf//vvvzyc+8Yl85CMfSfKPQHv22WfbrenZs+c6vzds2LD87ne/y2677bbJZgfeWry0CrABL7zwQg4//PB873vfy2OPPZYFCxbklltuycUXX5wPf/jDSf5xrdusWbPS1NSUl156KUmy++6759Zbb838+fPz6KOP5uMf/3haW1vb3fegQYNy33335W9/+1v+/ve/J0nOPffcPPDAA5kwYULmz5+fP/zhD/nJT37izQ7ABgk5gA3o1atXDjzwwFx22WU5+OCDs9dee+X888/PGWeckSuvvDJJcskll2TmzJkZMGBA9t9//yTJpZdemu222y7vf//786EPfSiNjY0ZNmxYu/ueOnVqnn322ey6667ZcccdkyT77LNP5syZk9///vf5j//4j+y///654IIL0r9//8174EAxvGsVAKBQzsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFOr/ARBgKqLozr6GAAAAAElFTkSuQmCC",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"source = emulator.Source(indistinguishability=0.8)\n",
"\n",
"sampler = lw.Sampler(\n",
" hom, lw.State([1, 1]), 10000, source=source, random_seed=99\n",
")\n",
"results = backend.run(sampler)\n",
"\n",
"results.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Purity\n",
"\n",
"Single photon purity is a measure of the multi-photon elements present in each time bin of the system. These typically result from the laser used to drive the single photon source and act as distinguishable photons to the generated photons from the source. When introducing this affect, it can be seen how a significant number of outputs with more than the two input photons are generated. \n",
"\n",
"Particularly in a lossy environment this leads to errors as a seemingly valid output may be measured (i.e. it has the correct number of photons) but some of these photons may be from the impure element of the single photon source, and these would interact differently when propagating through the system. "
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAIqCAYAAACg86cPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA//klEQVR4nO3de1RVdcL/8Q938XJQVG4DIkkp5BUtPU2ZGYFKTU40axxNrdTSB52UGXWYMUu70NhFLTVnni7Ukz6WM9pFSkNMTSUvGHkprRwdLD1oXjhqCgr790c/ztMZBYWQc772fq2113Lv/WWfz95rc/q0zz4bH8uyLAEAAMA4vp4OAAAAgLqhyAEAABiKIgcAAGAoihwAAIChKHIAAACGosgBAAAYiiIHAABgKIocAACAoShyAAAAhqLIAQAAGMpritxTTz0lHx8fjR8/3rXszJkzysjIUMuWLdW0aVOlp6erpKTE7eeKi4uVlpamxo0bKywsTBMnTtS5c+fcxqxevVpJSUkKCgpSfHy8cnJyGmCPAAAALi+vKHKbN2/W3/72N3Xu3Nlt+YQJE/Tee+9p8eLFWrNmjQ4cOKC77rrLtb6iokJpaWkqLy/Xhg0b9NprryknJ0dTp051jdm7d6/S0tJ0yy23qKioSOPHj9fIkSO1YsWKBts/AACAy8HHsizLkwFOnjyppKQkzZs3T48//ri6du2qWbNmqbS0VK1bt9bChQt19913S5J27dqlhIQEFRQUqFevXvrggw90++2368CBAwoPD5ckzZ8/X5MnT9bhw4cVGBioyZMnKzc3Vzt27HC95qBBg3T8+HEtX778kjJWVlbqwIEDatasmXx8fOr/IAAAAPyIZVk6ceKEoqKi5Otb/XU3/wbMdEEZGRlKS0tTcnKyHn/8cdfywsJCnT17VsnJya5lHTp0UJs2bVxFrqCgQJ06dXKVOElKTU3VmDFjtHPnTnXr1k0FBQVu26ga8+OPcP9TWVmZysrKXPPffvutEhMT62FvAQAALt3+/fsVHR1d7XqPFrlFixZp69at2rx583nrHA6HAgMD1bx5c7fl4eHhcjgcrjE/LnFV66vW1TTG6XTq9OnTCg4OPu+1s7OzNW3atPOW79+/Xzab7dJ3EAAAoA6cTqdiYmLUrFmzGsd5rMjt379fDz30kPLy8tSoUSNPxbigrKwsZWZmuuarDqbNZqPIAQCABnOxW7o89mWHwsJCHTp0SElJSfL395e/v7/WrFmj559/Xv7+/goPD1d5ebmOHz/u9nMlJSWKiIiQJEVERJz3Ldaq+YuNsdlsF7waJ0lBQUGu0kZ5AwAA3spjRe7WW2/V9u3bVVRU5Jp69OihIUOGuP4dEBCg/Px818/s3r1bxcXFstvtkiS73a7t27fr0KFDrjF5eXmy2Wyue9rsdrvbNqrGVG0DAADAVB77aLVZs2bq2LGj27ImTZqoZcuWruUjRoxQZmamQkNDZbPZNG7cONntdvXq1UuSlJKSosTERA0dOlQzZsyQw+HQlClTlJGRoaCgIEnS6NGjNWfOHE2aNEn333+/Vq1apbfeeku5ubkNu8MAAAD1zOPfWq3JzJkz5evrq/T0dJWVlSk1NVXz5s1zrffz89OyZcs0ZswY2e12NWnSRMOHD9f06dNdY+Li4pSbm6sJEyZo9uzZio6O1ksvvaTU1FRP7BIAAEC98fhz5EzgdDoVEhKi0tJS7pcDAACX3aV2D6/4yw4AAACoPYocAACAoShyAAAAhqLIAQAAGIoiBwAAYCiKHAAAgKEocgAAAIaiyAEAABiKIgcAAGAoihwAAIChKHIAAACGosgBAAAYiiIHAABgKIocAACAofw9HQD/p+2fcj0d4Tz7nkrzdAQAAFANrsgBAAAYiiIHAABgKIocAACAoShyAAAAhuLLDvhZ4oslAIArAVfkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAeLXIvvviiOnfuLJvNJpvNJrvdrg8++MC1vk+fPvLx8XGbRo8e7baN4uJipaWlqXHjxgoLC9PEiRN17tw5tzGrV69WUlKSgoKCFB8fr5ycnIbYPQAAgMvK35MvHh0draeeekpXX321LMvSa6+9pjvvvFOffvqprr32WknSqFGjNH36dNfPNG7c2PXviooKpaWlKSIiQhs2bNDBgwc1bNgwBQQE6Mknn5Qk7d27V2lpaRo9erQWLFig/Px8jRw5UpGRkUpNTW3YHQYAAKhHHi1yd9xxh9v8E088oRdffFGffPKJq8g1btxYERERF/z5Dz/8UJ9//rlWrlyp8PBwde3aVY899pgmT56sRx99VIGBgZo/f77i4uL07LPPSpISEhK0bt06zZw5kyIHAACM5jX3yFVUVGjRokU6deqU7Ha7a/mCBQvUqlUrdezYUVlZWfr+++9d6woKCtSpUyeFh4e7lqWmpsrpdGrnzp2uMcnJyW6vlZqaqoKCgmqzlJWVyel0uk0AAADexqNX5CRp+/btstvtOnPmjJo2baqlS5cqMTFRkjR48GDFxsYqKipK27Zt0+TJk7V7924tWbJEkuRwONxKnCTXvMPhqHGM0+nU6dOnFRwcfF6m7OxsTZs2rd73FQAAoD55vMi1b99eRUVFKi0t1T/+8Q8NHz5ca9asUWJioh544AHXuE6dOikyMlK33nqr9uzZo3bt2l22TFlZWcrMzHTNO51OxcTEXLbXAwAAqAuPf7QaGBio+Ph4de/eXdnZ2erSpYtmz559wbE9e/aUJH399deSpIiICJWUlLiNqZqvuq+uujE2m+2CV+MkKSgoyPVN2qoJAADA23i8yP2nyspKlZWVXXBdUVGRJCkyMlKSZLfbtX37dh06dMg1Ji8vTzabzfXxrN1uV35+vtt28vLy3O7DAwAAMJFHP1rNyspS//791aZNG504cUILFy7U6tWrtWLFCu3Zs0cLFy7UgAED1LJlS23btk0TJkxQ79691blzZ0lSSkqKEhMTNXToUM2YMUMOh0NTpkxRRkaGgoKCJEmjR4/WnDlzNGnSJN1///1atWqV3nrrLeXm5npy1wEAAH4yjxa5Q4cOadiwYTp48KBCQkLUuXNnrVixQrfddpv279+vlStXatasWTp16pRiYmKUnp6uKVOmuH7ez89Py5Yt05gxY2S329WkSRMNHz7c7blzcXFxys3N1YQJEzR79mxFR0frpZde4tEjAADAeB4tci+//HK162JiYrRmzZqLbiM2Nlbvv/9+jWP69OmjTz/9tNb5AAAAvJnX3SMHAACAS0ORAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwlEeL3IsvvqjOnTvLZrPJZrPJbrfrgw8+cK0/c+aMMjIy1LJlSzVt2lTp6ekqKSlx20ZxcbHS0tLUuHFjhYWFaeLEiTp37pzbmNWrVyspKUlBQUGKj49XTk5OQ+weAADAZeXRIhcdHa2nnnpKhYWF2rJli/r27as777xTO3fulCRNmDBB7733nhYvXqw1a9bowIEDuuuuu1w/X1FRobS0NJWXl2vDhg167bXXlJOTo6lTp7rG7N27V2lpabrllltUVFSk8ePHa+TIkVqxYkWD7y8AAEB98rEsy/J0iB8LDQ3V008/rbvvvlutW7fWwoULdffdd0uSdu3apYSEBBUUFKhXr1764IMPdPvtt+vAgQMKDw+XJM2fP1+TJ0/W4cOHFRgYqMmTJys3N1c7duxwvcagQYN0/PhxLV++/JIyOZ1OhYSEqLS0VDabrf53+v9r+6fcy7btutr3VJqnI1wWHGsAgDe71O7hNffIVVRUaNGiRTp16pTsdrsKCwt19uxZJScnu8Z06NBBbdq0UUFBgSSpoKBAnTp1cpU4SUpNTZXT6XRd1SsoKHDbRtWYqm1cSFlZmZxOp9sEAADgbTxe5LZv366mTZsqKChIo0eP1tKlS5WYmCiHw6HAwEA1b97cbXx4eLgcDockyeFwuJW4qvVV62oa43Q6dfr06Qtmys7OVkhIiGuKiYmpj10FAACoVx4vcu3bt1dRUZE2btyoMWPGaPjw4fr88889mikrK0ulpaWuaf/+/R7NAwAAcCH+ng4QGBio+Ph4SVL37t21efNmzZ49W7/97W9VXl6u48ePu12VKykpUUREhCQpIiJCmzZtctte1bdafzzmP7/pWlJSIpvNpuDg4AtmCgoKUlBQUL3sHwAAwOXi8Sty/6myslJlZWXq3r27AgIClJ+f71q3e/duFRcXy263S5Lsdru2b9+uQ4cOucbk5eXJZrMpMTHRNebH26gaU7UNAAAAU3n0ilxWVpb69++vNm3a6MSJE1q4cKFWr16tFStWKCQkRCNGjFBmZqZCQ0Nls9k0btw42e129erVS5KUkpKixMREDR06VDNmzJDD4dCUKVOUkZHhuqI2evRozZkzR5MmTdL999+vVatW6a233lJurvd9axEAAKA2PFrkDh06pGHDhungwYMKCQlR586dtWLFCt12222SpJkzZ8rX11fp6ekqKytTamqq5s2b5/p5Pz8/LVu2TGPGjJHdbleTJk00fPhwTZ8+3TUmLi5Oubm5mjBhgmbPnq3o6Gi99NJLSk1NbfD9BQAAqE9e9xw5b8Rz5K48HGsAgDcz7jlyAAAAqB2KHAAAgKEocgAAAIaiyAEAABiKIgcAAGAoihwAAIChKHIAAACGosgBAAAYiiIHAABgKIocAACAoShyAAAAhqLIAQAAGIoiBwAAYCiKHAAAgKEocgAAAIaiyAEAABiKIgcAAGAoihwAAIChKHIAAACGosgBAAAYiiIHAABgKIocAACAoShyAAAAhqLIAQAAGIoiBwAAYCiKHAAAgKEocgAAAIaiyAEAABiKIgcAAGAoihwAAIChKHIAAACGosgBAAAYiiIHAABgKIocAACAoShyAAAAhqLIAQAAGIoiBwAAYCiKHAAAgKEocgAAAIaiyAEAABiKIgcAAGAoihwAAIChKHIAAACGosgBAAAYiiIHAABgKIocAACAoShyAAAAhvJokcvOztZ1112nZs2aKSwsTAMHDtTu3bvdxvTp00c+Pj5u0+jRo93GFBcXKy0tTY0bN1ZYWJgmTpyoc+fOuY1ZvXq1kpKSFBQUpPj4eOXk5Fzu3QMAALisPFrk1qxZo4yMDH3yySfKy8vT2bNnlZKSolOnTrmNGzVqlA4ePOiaZsyY4VpXUVGhtLQ0lZeXa8OGDXrttdeUk5OjqVOnusbs3btXaWlpuuWWW1RUVKTx48dr5MiRWrFiRYPtKwAAQH3z9+SLL1++3G0+JydHYWFhKiwsVO/evV3LGzdurIiIiAtu48MPP9Tnn3+ulStXKjw8XF27dtVjjz2myZMn69FHH1VgYKDmz5+vuLg4Pfvss5KkhIQErVu3TjNnzlRqaurl20EAAIDLyKvukSstLZUkhYaGui1fsGCBWrVqpY4dOyorK0vff/+9a11BQYE6deqk8PBw17LU1FQ5nU7t3LnTNSY5Odltm6mpqSooKLhgjrKyMjmdTrcJAADA23j0ityPVVZWavz48frlL3+pjh07upYPHjxYsbGxioqK0rZt2zR58mTt3r1bS5YskSQ5HA63EifJNe9wOGoc43Q6dfr0aQUHB7uty87O1rRp0+p9HwEAAOqT1xS5jIwM7dixQ+vWrXNb/sADD7j+3alTJ0VGRurWW2/Vnj171K5du8uSJSsrS5mZma55p9OpmJiYy/JaAAAAdeUVH62OHTtWy5Yt00cffaTo6Ogax/bs2VOS9PXXX0uSIiIiVFJS4jamar7qvrrqxthstvOuxklSUFCQbDab2wQAAOBtPFrkLMvS2LFjtXTpUq1atUpxcXEX/ZmioiJJUmRkpCTJbrdr+/btOnTokGtMXl6ebDabEhMTXWPy8/PdtpOXlye73V5PewIAANDwPFrkMjIy9MYbb2jhwoVq1qyZHA6HHA6HTp8+LUnas2ePHnvsMRUWFmrfvn169913NWzYMPXu3VudO3eWJKWkpCgxMVFDhw7VZ599phUrVmjKlCnKyMhQUFCQJGn06NH617/+pUmTJmnXrl2aN2+e3nrrLU2YMMFj+w4AAPBTebTIvfjiiyotLVWfPn0UGRnpmt58801JUmBgoFauXKmUlBR16NBBf/jDH5Senq733nvPtQ0/Pz8tW7ZMfn5+stvtuueeezRs2DBNnz7dNSYuLk65ubnKy8tTly5d9Oyzz+qll17i0SMAAMBoHv2yg2VZNa6PiYnRmjVrLrqd2NhYvf/++zWO6dOnjz799NNa5QMAAPBmXvFlBwAAANQeRQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwVJ2K3NatW7V9+3bX/DvvvKOBAwfqz3/+s8rLy+stHAAAAKpXpyL34IMP6ssvv5Qk/etf/9KgQYPUuHFjLV68WJMmTarXgAAAALiwOhW5L7/8Ul27dpUkLV68WL1799bChQuVk5Ojf/7zn/WZDwAAANWoU5GzLEuVlZWSpJUrV2rAgAGSpJiYGH333Xf1lw4AAADVqlOR69Gjhx5//HH9z//8j9asWaO0tDRJ0t69exUeHl6vAQEAAHBhdSpyM2fO1NatWzV27Fj95S9/UXx8vCTpH//4h2644YZ6DQgAAIAL86/LD3Xp0sXtW6tVnn76afn712mTAAAAqKU6XZG76qqrdOTIkfOWnzlzRtdcc81PDgUAAICLq1OR27dvnyoqKs5bXlZWpm+++eYnhwIAAMDF1epz0Hfffdf17xUrVigkJMQ1X1FRofz8fMXFxdVfOgAAAFSrVkVu4MCBkiQfHx8NHz7cbV1AQIDatm2rZ599tt7CAQAAoHq1KnJVz46Li4vT5s2b1apVq8sSCgAAABdXp6+Y7t27t75zAAAAoJbq/KyQ/Px85efn69ChQ64rdVVeeeWVnxwMAAAANatTkZs2bZqmT5+uHj16KDIyUj4+PvWdCwAAABdRpyI3f/585eTkaOjQofWdBwAAAJeoTs+RKy8v509xAQAAeFiditzIkSO1cOHC+s4CAACAWqhTkTtz5oyee+453XzzzRo3bpwyMzPdpkuVnZ2t6667Ts2aNVNYWJgGDhyo3bt3n/daGRkZatmypZo2bar09HSVlJS4jSkuLlZaWpoaN26ssLAwTZw4UefOnXMbs3r1aiUlJSkoKEjx8fHKycmpy64DAAB4jTrdI7dt2zZ17dpVkrRjxw63dbX54sOaNWuUkZGh6667TufOndOf//xnpaSk6PPPP1eTJk0kSRMmTFBubq4WL16skJAQjR07VnfddZfWr18v6Ye/KJGWlqaIiAht2LBBBw8e1LBhwxQQEKAnn3xS0g+PS0lLS9Po0aO1YMEC5efna+TIkYqMjFRqampdDgEAAIDH+ViWZXk6RJXDhw8rLCxMa9asUe/evVVaWqrWrVtr4cKFuvvuuyVJu3btUkJCggoKCtSrVy998MEHuv3223XgwAGFh4dL+uHLGJMnT9bhw4cVGBioyZMnKzc31610Dho0SMePH9fy5csvmsvpdCokJESlpaWy2WyXZ+cltf1T7mXbdl3teyrN0xEuC441AMCbXWr3qNNHq5dLaWmpJCk0NFSSVFhYqLNnzyo5Odk1pkOHDmrTpo0KCgokSQUFBerUqZOrxElSamqqnE6ndu7c6Rrz421Ujanaxn8qKyuT0+l0mwAAALxNnT5aveWWW2r8CHXVqlW13mZlZaXGjx+vX/7yl+rYsaMkyeFwKDAwUM2bN3cbGx4eLofD4Rrz4xJXtb5qXU1jnE6nTp8+reDgYLd12dnZmjZtWq33AQAAoCHVqchV3R9X5ezZsyoqKtKOHTs0fPjwOgXJyMjQjh07tG7dujr9fH3Kyspy+9KG0+lUTEyMBxMBAACcr05FbubMmRdc/uijj+rkyZO13t7YsWO1bNkyrV27VtHR0a7lERERKi8v1/Hjx92uypWUlCgiIsI1ZtOmTW7bq/pW64/H/Oc3XUtKSmSz2c67GidJQUFBCgoKqvV+AAAANKR6vUfunnvuqdXfWbUsS2PHjtXSpUu1atUqxcXFua3v3r27AgIClJ+f71q2e/duFRcXy263S5Lsdru2b9+uQ4cOucbk5eXJZrMpMTHRNebH26gaU7UNAAAAE9Xpilx1CgoK1KhRo0sen5GRoYULF+qdd95Rs2bNXPe0hYSEKDg4WCEhIRoxYoQyMzMVGhoqm82mcePGyW63q1evXpKklJQUJSYmaujQoZoxY4YcDoemTJmijIwM11W10aNHa86cOZo0aZLuv/9+rVq1Sm+99ZZyc73vm4sAAACXqk5F7q677nKbtyxLBw8e1JYtW/Twww9f8nZefPFFSVKfPn3clr/66qu69957Jf3wMa6vr6/S09NVVlam1NRUzZs3zzXWz89Py5Yt05gxY2S329WkSRMNHz5c06dPd42Ji4tTbm6uJkyYoNmzZys6OlovvfQSz5ADAABGq9Nz5O677z63eV9fX7Vu3Vp9+/ZVSkpKvYXzFjxH7srDsQYAeLNL7R51uiL36quv1jkYAAAA6sdPukeusLBQX3zxhSTp2muvVbdu3eolFAAAAC6uTkXu0KFDGjRokFavXu16LMjx48d1yy23aNGiRWrdunV9ZgQAAMAF1OnxI+PGjdOJEye0c+dOHT16VEePHtWOHTvkdDr1+9//vr4zAgAA4ALqdEVu+fLlWrlypRISElzLEhMTNXfu3Cvyyw4AAADeqE5X5CorKxUQEHDe8oCAAFVWVv7kUAAAALi4OhW5vn376qGHHtKBAwdcy7799ltNmDBBt956a72FAwAAQPXqVOTmzJkjp9Optm3bql27dmrXrp3i4uLkdDr1wgsv1HdGAAAAXECd7pGLiYnR1q1btXLlSu3atUuSlJCQoOTk5HoNBwAAgOrV6orcqlWrlJiYKKfTKR8fH912220aN26cxo0bp+uuu07XXnutPv7448uVFQAAAD9SqyI3a9YsjRo16oJ/KiIkJEQPPvignnvuuXoLBwAAgOrVqsh99tln6tevX7XrU1JSVFhY+JNDAQAA4OJqVeRKSkou+NiRKv7+/jp8+PBPDgUAAICLq1WR+8UvfqEdO3ZUu37btm2KjIz8yaEAAABwcbUqcgMGDNDDDz+sM2fOnLfu9OnTeuSRR3T77bfXWzgAAABUr1aPH5kyZYqWLFmia665RmPHjlX79u0lSbt27dLcuXNVUVGhv/zlL5clKAAAANzVqsiFh4drw4YNGjNmjLKysmRZliTJx8dHqampmjt3rsLDwy9LUAAAALir9QOBY2Nj9f777+vYsWP6+uuvZVmWrr76arVo0eJy5AMAAEA16vSXHSSpRYsWuu666+ozCwAAAGqhTn9rFQAAAJ5HkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQHi1ya9eu1R133KGoqCj5+Pjo7bffdlt/7733ysfHx23q16+f25ijR49qyJAhstlsat68uUaMGKGTJ0+6jdm2bZtuuukmNWrUSDExMZoxY8bl3jUAAIDLzqNF7tSpU+rSpYvmzp1b7Zh+/frp4MGDrul///d/3dYPGTJEO3fuVF5enpYtW6a1a9fqgQcecK13Op1KSUlRbGysCgsL9fTTT+vRRx/V3//+98u2XwAAAA3B35Mv3r9/f/Xv37/GMUFBQYqIiLjgui+++ELLly/X5s2b1aNHD0nSCy+8oAEDBuiZZ55RVFSUFixYoPLycr3yyisKDAzUtddeq6KiIj333HNuhQ8AAMA0Xn+P3OrVqxUWFqb27dtrzJgxOnLkiGtdQUGBmjdv7ipxkpScnCxfX19t3LjRNaZ3794KDAx0jUlNTdXu3bt17NixC75mWVmZnE6n2wQAAOBtvLrI9evXT6+//rry8/P117/+VWvWrFH//v1VUVEhSXI4HAoLC3P7GX9/f4WGhsrhcLjGhIeHu42pmq8a85+ys7MVEhLimmJiYup71wAAAH4yj360ejGDBg1y/btTp07q3Lmz2rVrp9WrV+vWW2+9bK+blZWlzMxM17zT6aTMAQAAr+PVV+T+01VXXaVWrVrp66+/liRFRETo0KFDbmPOnTuno0ePuu6ri4iIUElJiduYqvnq7r0LCgqSzWZzmwAAALyNUUXum2++0ZEjRxQZGSlJstvtOn78uAoLC11jVq1apcrKSvXs2dM1Zu3atTp79qxrTF5entq3b68WLVo07A4AAADUI48WuZMnT6qoqEhFRUWSpL1796qoqEjFxcU6efKkJk6cqE8++UT79u1Tfn6+7rzzTsXHxys1NVWSlJCQoH79+mnUqFHatGmT1q9fr7Fjx2rQoEGKioqSJA0ePFiBgYEaMWKEdu7cqTfffFOzZ892++gUAADARB4tclu2bFG3bt3UrVs3SVJmZqa6deumqVOnys/PT9u2bdOvfvUrXXPNNRoxYoS6d++ujz/+WEFBQa5tLFiwQB06dNCtt96qAQMG6MYbb3R7RlxISIg+/PBD7d27V927d9cf/vAHTZ06lUePAAAA43n0yw59+vSRZVnVrl+xYsVFtxEaGqqFCxfWOKZz5876+OOPa50PAADAmxl1jxwAAAD+D0UOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDebTIrV27VnfccYeioqLk4+Ojt99+2229ZVmaOnWqIiMjFRwcrOTkZH311VduY44ePaohQ4bIZrOpefPmGjFihE6ePOk2Ztu2bbrpppvUqFEjxcTEaMaMGZd71wAAAC47jxa5U6dOqUuXLpo7d+4F18+YMUPPP/+85s+fr40bN6pJkyZKTU3VmTNnXGOGDBminTt3Ki8vT8uWLdPatWv1wAMPuNY7nU6lpKQoNjZWhYWFevrpp/Xoo4/q73//+2XfPwAAgMvJ35Mv3r9/f/Xv3/+C6yzL0qxZszRlyhTdeeedkqTXX39d4eHhevvttzVo0CB98cUXWr58uTZv3qwePXpIkl544QUNGDBAzzzzjKKiorRgwQKVl5frlVdeUWBgoK699loVFRXpueeecyt8AAAApvHae+T27t0rh8Oh5ORk17KQkBD17NlTBQUFkqSCggI1b97cVeIkKTk5Wb6+vtq4caNrTO/evRUYGOgak5qaqt27d+vYsWMXfO2ysjI5nU63CQAAwNt4bZFzOBySpPDwcLfl4eHhrnUOh0NhYWFu6/39/RUaGuo25kLb+PFr/Kfs7GyFhIS4ppiYmJ++QwAAAPXMa4ucJ2VlZam0tNQ17d+/39ORAAAAzuO1RS4iIkKSVFJS4ra8pKTEtS4iIkKHDh1yW3/u3DkdPXrUbcyFtvHj1/hPQUFBstlsbhMAAIC38doiFxcXp4iICOXn57uWOZ1Obdy4UXa7XZJkt9t1/PhxFRYWusasWrVKlZWV6tmzp2vM2rVrdfbsWdeYvLw8tW/fXi1atGigvQEAAKh/Hi1yJ0+eVFFRkYqKiiT98AWHoqIiFRcXy8fHR+PHj9fjjz+ud999V9u3b9ewYcMUFRWlgQMHSpISEhLUr18/jRo1Sps2bdL69es1duxYDRo0SFFRUZKkwYMHKzAwUCNGjNDOnTv15ptvavbs2crMzPTQXgMAANQPjz5+ZMuWLbrllltc81Xlavjw4crJydGkSZN06tQpPfDAAzp+/LhuvPFGLV++XI0aNXL9zIIFCzR27Fjdeuut8vX1VXp6up5//nnX+pCQEH344YfKyMhQ9+7d1apVK02dOpVHjwAAAOP5WJZleTqEt3M6nQoJCVFpaellvV+u7Z9yL9u262rfU2mejnBZcKwBAN7sUruH194jBwAAgJpR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQ/p4OAODK1/ZPuZ6O4GbfU2mejgAA9YIrcgAAAIbiihx+Mq62AADgGVyRAwAAMBRFDgAAwFB8tAoYxNs+xpb4KBsAPIkrcgAAAIby6ityjz76qKZNm+a2rH379tq1a5ck6cyZM/rDH/6gRYsWqaysTKmpqZo3b57Cw8Nd44uLizVmzBh99NFHatq0qYYPH67s7Gz5+3v1rgNAnXDVFvh58fo2c+2112rlypWu+R8XsAkTJig3N1eLFy9WSEiIxo4dq7vuukvr16+XJFVUVCgtLU0RERHasGGDDh48qGHDhikgIEBPPvlkg+8LAABAffL6Iufv76+IiIjzlpeWlurll1/WwoUL1bdvX0nSq6++qoSEBH3yySfq1auXPvzwQ33++edauXKlwsPD1bVrVz322GOaPHmyHn30UQUGBjb07gAAANQbr79H7quvvlJUVJSuuuoqDRkyRMXFxZKkwsJCnT17VsnJya6xHTp0UJs2bVRQUCBJKigoUKdOndw+ak1NTZXT6dTOnTurfc2ysjI5nU63CQAAwNt4dZHr2bOncnJytHz5cr344ovau3evbrrpJp04cUIOh0OBgYFq3ry528+Eh4fL4XBIkhwOh1uJq1pfta462dnZCgkJcU0xMTH1u2MAAAD1wKs/Wu3fv7/r3507d1bPnj0VGxurt956S8HBwZftdbOyspSZmemadzqdlDkAAOB1vPqK3H9q3ry5rrnmGn399deKiIhQeXm5jh8/7jampKTEdU9dRESESkpKzltfta46QUFBstlsbhMAAIC3MarInTx5Unv27FFkZKS6d++ugIAA5efnu9bv3r1bxcXFstvtkiS73a7t27fr0KFDrjF5eXmy2WxKTExs8PwAAAD1yas/Wv3jH/+oO+64Q7GxsTpw4IAeeeQR+fn56Xe/+51CQkI0YsQIZWZmKjQ0VDabTePGjZPdblevXr0kSSkpKUpMTNTQoUM1Y8YMORwOTZkyRRkZGQoKCvLw3gEAAPw0Xl3kvvnmG/3ud7/TkSNH1Lp1a91444365JNP1Lp1a0nSzJkz5evrq/T0dLcHAlfx8/PTsmXLNGbMGNntdjVp0kTDhw/X9OnTPbVLAAAA9cari9yiRYtqXN+oUSPNnTtXc+fOrXZMbGys3n///fqOBgAA4HFG3SMHAACA/0ORAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAMRZEDAAAwFEUOAADAUBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURQ4AAMBQFDkAAABDUeQAAAAM5e/pAAAAtP1TrqcjuNn3VJqnIwCX5GdV5ObOnaunn35aDodDXbp00QsvvKDrr7/e07EAeCFvKxYS5QLA+X42Re7NN99UZmam5s+fr549e2rWrFlKTU3V7t27FRYW5ul4AAA0CP4n5crysylyzz33nEaNGqX77rtPkjR//nzl5ubqlVde0Z/+9CcPpwMAADXxtgLqLeXzZ1HkysvLVVhYqKysLNcyX19fJScnq6Cg4LzxZWVlKisrc82XlpZKkpxO52XNWVn2/WXdfl1cyj57W24TM0vkbkgmZpbI3ZAuJXPHR1Y0QJLa2TEt9aJjvO1YS1fuOVIf27csq+aB1s/At99+a0myNmzY4LZ84sSJ1vXXX3/e+EceecSSxMTExMTExMTk0Wn//v01dpyfxRW52srKylJmZqZrvrKyUkePHlXLli3l4+PjwWQX53Q6FRMTo/3798tms3k6ziUjd8MxMbNE7oZkYmaJ3A3JxMySWbkty9KJEycUFRVV47ifRZFr1aqV/Pz8VFJS4ra8pKREERER540PCgpSUFCQ27LmzZtfzoj1zmazef1JeiHkbjgmZpbI3ZBMzCyRuyGZmFkyJ3dISMhFx/wsHggcGBio7t27Kz8/37WssrJS+fn5stvtHkwGAABQdz+LK3KSlJmZqeHDh6tHjx66/vrrNWvWLJ06dcr1LVYAAADT/GyK3G9/+1sdPnxYU6dOlcPhUNeuXbV8+XKFh4d7Olq9CgoK0iOPPHLeR8PejtwNx8TMErkbkomZJXI3JBMzS+bmromPZV3se60AAADwRj+Le+QAAACuRBQ5AAAAQ1HkAAAADEWRAwAAMBRFDgAAwFAUOQAAAENR5AAAAAxFkQMAADAURe4Ks2/fPt11113avXu3p6PUCrkbjomZJWnnzp1KSkrSli1bPB2lVkw83qYea1Nzc440HBOP9cVQ5K4wr732mt5++229/PLLno5SK+RuOCZmlqScnBx99tlneuWVVzwdpVZMPN6mHmtTc3OONBwTj/XF8Ce6rjDt2rWT3W7XqlWr9M0338jX14yuTu6GY2LmyspKRUdHa/DgwXr11Vd18OBBBQYGejrWJTHteJt6rE3NLXGONCTTjvWlMH8P4LJ27VodOXJEL774oiorK7VixQpPR7ok5G44JmaWpOXLl6uiokLZ2dmy2Wx65513PB3pkph4vE091qbm5hxpOCYe60tBkbuCvPbaa0pPT1ezZs00aNAg5eTkeDrSJSF3wzExs/RD7t/+9rcKCAjQkCFDjMpt2vE2+VibmptzpGGYeKwviYUrwvfff2/ZbDZr9erVlmVZVmFhoRUcHGwdP37cw8lqRu6GY2Jmy7KsY8eOWcHBwdbmzZsty7KsXbt2WQEBAZbD4fBwspqZeLxNPdam5uYcaTgmHutLxRW5K8Q///lPhYaG6uabb5YkJSUl6aqrrtKiRYs8nKxm5G44JmaWpEWLFikuLk49evSQJLVv315JSUl64403PJysZiYeb1OPtam5OUcajonH+lJR5K4Qr7/+uoYMGeK27J577vH6S8fkbjgmZpZ++Dhk6NChbstMyG3i8Tb1WJuam3Ok4Zh4rC+Zpy8J4qcrLi62/Pz8rC+//NJt+f79+y0/Pz9r9+7dHkpWM3I3HBMzW9YPuePi4qxvvvnGbfl3331ntWvXzqtzm3a8TT7WpubmHGkYJh7r2uDxIwAAAIbio1UAAABD+Xs6AOpHZWXlBR9sWFlZqW+++UZt2rTxQKqaWZalffv2KSYmRv7+/iovL9fSpUtVVlamAQMGqFWrVp6OWK1NmzapoKBADodDkhQRESG73a7rr7/ew8mqZ2JmSfrmm2/UvHlzNW3a1G352bNnVVBQoN69e3soWc1M/J2szrFjx/Tee+9p2LBhno5yniNHjmjbtm3q0qWLQkND9d133+nll19WWVmZfvOb3yghIcHTES9Z37599eqrryo2NtbTUWrNm88Rydz3v0vi4Y928ROVlpZav/nNb6xGjRpZYWFh1sMPP2ydO3fOtd7hcFi+vr4eTHhhu3btsmJjYy1fX18rPj7e+te//mV1797datKkidW4cWOrVatW593P4A1KSkqsG2+80fLx8bFiY2Ot66+/3rr++uut2NhYy8fHx7rxxhutkpIST8d0Y2Jmy7KsAwcOWNddd53l6+tr+fn5WUOHDrVOnDjhWu+t57apv5M1KSoq8srMGzdutEJCQiwfHx+rRYsW1pYtW6y4uDjr6quvttq1a2cFBwdbhYWFno55nnfeeeeCk5+fnzVnzhzXvEm89Rwx9f2vNihyhvv9739vXXPNNdbixYut//7v/7ZiY2OttLQ0q6yszLKsH/6j4ePj4+GU57vzzjutX/3qV9a2bdus8ePHWwkJCdadd95plZeXW2fOnLHuuOMO65577vF0zPOkp6dbdrvd2rVr13nrdu3aZd1www3W3Xff7YFk1TMxs2VZ1rBhw6yePXtamzdvtvLy8qzu3btbPXr0sI4ePWpZlvee2yb+TpaWltY4ffzxx175H+nk5GRr5MiRltPptJ5++mkrOjraGjlypGv9fffdZw0cONCDCS/Mx8fH8vX1tXx8fKqdvO14m3qOmPr+VxsUOcO1adPG+uijj1zzhw8ftq6//norJSXFOnPmjNf+33/r1q2tTz/91LIsyzp58qTl4+Njffzxx67169evt9q0aeOhdNVr2rSptXXr1mrXb9myxWratGkDJro4EzNblmVFRUVZGzdudM1XFfyuXbtaR44c8dpz28TfyariUN3kjcXCsiyrRYsW1ueff25ZlmWVl5dbvr6+budMYWGh9Ytf/MJT8arVr18/Ky0t7bwrQf7+/tbOnTs9lKpmpp4jpr7/1Qb3yBnu8OHDbvdTtGrVSitXrlRqaqoGDBigl156yYPpqnfy5EmFhoZKkpo0aaImTZooMjLStT4mJkYlJSWeiletoKAgOZ3OatefOHFCQUFBDZjo4kzMLEmlpaVq0aKFaz4oKEhLlizRb37zG91yyy1e+wBSE38nmzVrpr/85S/q2bPn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ggKVlJRI+uFr7Ha7XR06dPBwspqZlvvf//63du3apdTU1AuuP3DggPLy8jR8+PAGTlZ3mzZtUuPGjd0+WkPdmXiOmJj5SmDa+19NTHofef755/XRRx/phRdeUHR0tKfj/GQUOQAAAEPxZQeDxcXFycfHp9Y/N378eP3+97+/DIkuDbkbjomZJXI3JBMzS+RuSCZmlszNXVtckTPYmjVr6vRzbdu29eg3dcjdcEzMLJG7IZmYWSJ3QzIxs2Ru7tqiyAEAABiKb60CAAAYiiIHAABgKIocAACAoShyAAAAhqLIAUANDh8+rDFjxqhNmzYKCgpSRESEUlNTtX79ekmSj4+P3n777Vpvt23btpo1a1b9hgXws8Nz5ACgBunp6SovL9drr72mq666SiUlJcrPz9eRI0c8HQ0AePwIAFTn+PHjatGihVavXq2bb775vPVt27bVv//9b9d8bGys9u3bpz179igzM1OffPKJTp06pYSEBGVnZys5OVmS1KdPn/OecVX1Vrxu3TplZWVpy5YtatWqlX79618rOztbTZo0uYx7CsBUfLQKANVo2rSpmjZtqrfffltlZWXnrd+8ebMk6dVXX9XBgwdd8ydPntSAAQOUn5+vTz/9VP369dMdd9yh4uJiSdKSJUsUHR2t6dOn6+DBgzp48KAkac+ePerXr5/S09O1bds2vfnmm1q3bp3Gjh3bQHsMwDRckQOAGvzzn//UqFGjdPr0aSUlJenmm2/WoEGD1LlzZ0k/3CO3dOlSDRw4sMbtdOzYUaNHj3aVsrZt22r8+PEaP368a8zIkSPl5+env/3tb65l69at080336xTp06pUaNG9b5/AMzGFTkAqEF6eroOHDigd999V/369dPq1auVlJSknJycan/m5MmT+uMf/6iEhAQ1b95cTZs21RdffOG6Iledzz77TDk5Oa4rgU2bNlVqaqoqKyu1d+/eet4zAFcCvuwAABfRqFEj3Xbbbbrtttv08MMPa+TIkXrkkUd07733XnD8H//4R+Xl5emZZ55RfHy8goODdffdd6u8vLzG1zl58qQefPDBC/7B7jZt2tTHrgC4wlDkAKCWEhMTXY8cCQgIUEVFhdv69evX695779Wvf/1rST8UtH379rmNCQwMPO/nkpKS9Pnnnys+Pv6yZQdwZeGjVQCoxpEjR9S3b1+98cYb2rZtm/bu3avFixdrxowZuvPOOyX9cK9bfn6+HA6Hjh07Jkm6+uqrtWTJEhUVFemzzz7T4MGDVVlZ6bbttm3bau3atfr222/13XffSZImT56sDRs2aOzYsSoqKtJXX32ld955hy87AKgWRQ4AqtG0aVP17NlTM2fOVO/evdWxY0c9/PDDGjVqlObMmSNJevbZZ5WXl6eYmBh169ZNkvTcc8+pRYsWuuGGG3THHXcoNTVVSUlJbtuePn269u3bp3bt2ql169aSpM6dO2vNmjX68ssvddNNN6lbt26aOnWqoqKiGnbHARiDb60CAAAYiityAAAAhqLIAQAAGIoiBwAAYCiKHAAAgKEocgAAAIaiyAEAABiKIgcAAGAoihwAAIChKHIAAACGosgBAAAYiiIHAABgKIocAACAof4f4FsfNdUZbB0AAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"source = emulator.Source(purity=0.8)\n",
"\n",
"sampler = lw.Sampler(\n",
" hom, lw.State([1, 1]), 10000, source=source, random_seed=99\n",
")\n",
"results = backend.run(sampler)\n",
"\n",
"results.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Brightness\n",
"\n",
"Brightness reflects the fact that a certain percentage of the time the single photon source will not emit a photon. This can lead to error but will also significantly increase the amount of samples that need to be extracted from the system.\n",
"\n",
"Below, when less than ideal brightness is introduced it can be seen how a lot of the outputs no longer contain 2 output photons. Typically, this could be mitigated through the use of the option post_select = 2 in sample_N_inputs."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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bq9WrZqKi4t/81AAAAC4sQqFXLdu3fTss88qOzvbcdvPP/+sCRMmqHv37i4bDgAAAOWr0Eur8+bN05/+9Cc1adJEISEhkqTjx4+rZcuW+uijj1w6IAAAcB1e9nYNT3nZu0IhFxISoj179mjDhg06fPiwJCksLEw9evRw6XAAAAAo3y29tLpx40aFh4fLbrfLy8tLjzzyiMaNG6dx48bpgQceUIsWLbR169bbNSsAAAB+4ZZC7o033tDIkSNlsViuOebn56fRo0drzpw5LhsOAAAA5bulkNu7d6969uxZ7vHo6Gilp6f/5qEAAABwY7cUcjk5OWV+7UipqlWr6tSpU795KAAAANzYLYXc3XffrQMHDpR7fN++fWrQoMFvHgoAAAA3dksh17t3b02dOlWXL1++5tilS5c0ffp09enT56bvb8uWLerbt6+Cg4Pl5eWllStXOh1/+umn5eXl5XT59Uu7Z8+e1aBBg2SxWOTv76/hw4frwoULTmv27dunhx9+WNWrV1dISIhmz5598w8aAADAQ93S149MmTJFK1as0P3336+EhAQ1a9ZMknT48GHNnz9fRUVFevHFF2/6/i5evKg2bdpo2LBh6t+/f5lrevbsqUWLFjmu+/r6Oh0fNGiQTp48qZSUFF25ckV//vOfNWrUKC1ZskSSZLfbFR0drR49emjBggXav3+/hg0bJn9/f40aNepWHj4AAIBHuaWQCwoK0vbt2zV27FhNnjxZJSUlkiQvLy/FxMRo/vz5CgoKuun769Wrl3r16nXdNb6+vrJarWUeO3TokNatW6dvvvlGHTp0kCS9/fbb6t27t1577TUFBwfr448/VmFhoRYuXCgfHx+1aNFCGRkZmjNnDiEHAACMdst/oqtx48Zau3atTp8+rZ07d2rHjh06ffq01q5dq9DQUJcPuGnTJgUGBqpZs2YaO3aszpw54ziWlpYmf39/R8RJUo8ePVSlShXt3LnTsaZTp07y8fFxrImJidGRI0d07ty5Mn9nQUGB7Ha70wUAAMDTVOgvO0hSnTp19MADD7hylmv07NlT/fv3V2hoqI4ePaq//vWv6tWrl9LS0uTt7S2bzabAwECnn6lataoCAgJks9kkSTab7ZrALD1raLPZVKdOnWt+76xZs/TSSy/dpkcFAADgGhUOucowYMAAxz+3atVKrVu31r333qtNmzape/fut+33Tp48WYmJiY7rdrvd8TdlAQAAPMUtv7TqTvfcc4/q1aunH3/8UZJktVqVm5vrtObq1as6e/as4311VqtVOTk5TmtKr5f33jtfX19ZLBanCwAAgKcxKuROnDihM2fOOL6rLioqSnl5eU5/TWLjxo0qLi5WZGSkY82WLVt05coVx5qUlBQ1a9aszJdVAQAATOHWkLtw4YIyMjKUkZEhScrMzFRGRoaysrJ04cIFvfDCC9qxY4eOHTum1NRUPfroo2ratKliYmIkSWFhYerZs6dGjhypXbt2adu2bUpISNCAAQMUHBwsSRo4cKB8fHw0fPhwHTx4UMuWLdObb77p9NIpAACAidwacrt371a7du3Url07SVJiYqLatWunadOmydvbW/v27dOf/vQn3X///Ro+fLjat2+vrVu3On2X3Mcff6zmzZure/fu6t27tx566CG99957juN+fn768ssvlZmZqfbt2+u5557TtGnT+OoRAABgPLd+2KFLly6O76Iry/r16294HwEBAY4v/y1P69attXXr1lueDwAAwJMZ9R45AAAA/D9CDgAAwFCEHAAAgKEIOQAAAEMRcgAAAIYi5AAAAAxFyAEAABiKkAMAADAUIQcAAGAoQg4AAMBQhBwAAIChCDkAAABDEXIAAACGIuQAAAAMRcgBAAAYipADAAAwFCEHAABgKEIOAADAUIQcAACAoQg5AAAAQxFyAAAAhiLkAAAADEXIAQAAGIqQAwAAMBQhBwAAYChCDgAAwFCEHAAAgKEIOQAAAEMRcgAAAIYi5AAAAAxFyAEAABiKkAMAADAUIQcAAGAoQg4AAMBQhBwAAIChCDkAAABDEXIAAACGIuQAAAAMRcgBAAAYipADAAAwFCEHAABgKEIOAADAUIQcAACAoQg5AAAAQxFyAAAAhiLkAAAADEXIAQAAGIqQAwAAMBQhBwAAYChCDgAAwFCEHAAAgKEIOQAAAEMRcgAAAIYi5AAAAAxFyAEAABiKkAMAADAUIQcAAGAoQg4AAMBQbg25LVu2qG/fvgoODpaXl5dWrlzpdLykpETTpk1TgwYNVKNGDfXo0UM//PCD05qzZ89q0KBBslgs8vf31/Dhw3XhwgWnNfv27dPDDz+s6tWrKyQkRLNnz77dDw0AAOC2c2vIXbx4UW3atNH8+fPLPD579my99dZbWrBggXbu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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"source = emulator.Source(brightness=0.8)\n",
"\n",
"sampler = lw.Sampler(\n",
" hom, lw.State([1, 1]), 10000, source=source, random_seed=99\n",
")\n",
"results = backend.run(sampler)\n",
"\n",
"results.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
".. warning::\n",
" Each imperfection introduced through the source object requires simulation of additional inputs, so using these can have a significant impact on simulation time."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Detector Imperfections\n",
"\n",
"The exact specifications of detectors will affect the results when sampling from the system. These often need to be taken into account as it may limit or alter how certain applications are realized. The included affects are detector efficiency, dark counts and non photon number resolving detectors.\n",
"\n",
".. note::\n",
" Detector imperfections can only be used with the Sampler, adn dark counts + sub-unity efficiency require setting the sampling mode to 'input'.\n",
"\n",
"### Efficiency\n",
"\n",
"A non-ideal detector efficiency means that there is a probability that each output photon is not measured. This will increase the number of samples required and potentially alters the measured results.\n",
"\n",
"Using the HOM experiment from above, it can be seen how similar to source brightness the imperfect detector efficiency creates outputs with less than 2 photons measured."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAIlCAYAAABRpRXaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAzzUlEQVR4nO3de1TUdf7H8RdeQE0HRIWRRCUtBe9oIW15D1T0l0nnZJraeveHllLp+stb1O/nrpV20XI7pdiWR3Mzb5SGmJcUNTG8pZYuhoaAqTDqKijw+2OX2UbBC47MfOL5OGfO2Znvh+H93e/5ep5954JHUVFRkQAAAGCcSq4eAAAAAGVDyAEAABiKkAMAADAUIQcAAGAoQg4AAMBQhBwAAIChCDkAAABDVXH1ACYoLCxURkaGatWqJQ8PD1ePAwAAfueKiop0/vx5BQQEqFKl0q+7EXK3ICMjQ4GBga4eAwAAVDAnTpxQgwYNSt1OyN2CWrVqSfrX/5kWi8XF0wAAgN87m82mwMBAe4OUhpC7BcUvp1osFkIOAACUm5u9pYsPOwAAABiKkAMAADAUIQcAAGAoQg4AAMBQhBwAAIChCDkAAABDEXIAAACGIuQAAAAMRcgBAAAYipADAAAwFCEHAABgKEIOAADAUIQcAACAoQg5AAAAQxFyAAAAhiLkAAAADEXIAQAAGIqQAwAAMBQhBwAAYKgqrh4A/9H4TwmuHuF34fifo1w9AgAA5YIrcgAAAIYi5AAAAAxFyAEAABiKkAMAADAUIQcAAGAoQg4AAMBQhBwAAIChCDkAAABD8YXAAIzGF2k7B1+kDZiJK3IAAACGIuQAAAAMRcgBAAAYipADAAAwFCEHAABgKEIOAADAUIQcAACAoQg5AAAAQxFyAAAAhiLkAAAADEXIAQAAGIqQAwAAMBQhBwAAYChCDgAAwFCEHAAAgKEIOQAAAEMRcgAAAIZyaci9//77at26tSwWiywWi8LDw/XVV1/Zt1++fFkxMTGqU6eOatasqejoaGVlZTk8R3p6uqKiolSjRg35+fnppZde0tWrVx3WbNq0SaGhofLy8lLTpk0VHx9fHrsHAABwV7k05Bo0aKA///nPSklJ0e7du9WtWzc9/vjjOnjwoCRp4sSJWrNmjZYvX67NmzcrIyND/fv3t/98QUGBoqKilJ+fr+3bt2vx4sWKj4/X9OnT7WvS0tIUFRWlrl27KjU1VRMmTNCIESO0fv36ct9fAAAAZ/IoKioqcvUQv+Xr66vXX39dTz75pOrVq6clS5boySeflCQdPnxYwcHBSk5OVseOHfXVV1+pT58+ysjIkL+/vyRpwYIFmjx5sk6fPi1PT09NnjxZCQkJOnDggP13DBgwQDk5OVq3bt0tzWSz2eTt7a3c3FxZLBbn7/S/Nf5Twl177ork+J+jXD0CyhHnjXNw3gDu5Vbbw23eI1dQUKClS5fq4sWLCg8PV0pKiq5cuaIePXrY1zRv3lwNGzZUcnKyJCk5OVmtWrWyR5wkRUZGymaz2a/qJScnOzxH8Zri5yhJXl6ebDabww0AAMDduDzk9u/fr5o1a8rLy0tjxozRF198oZCQEGVmZsrT01M+Pj4O6/39/ZWZmSlJyszMdIi44u3F2260xmaz6dKlSyXONGvWLHl7e9tvgYGBzthVAAAAp3J5yDVr1kypqanauXOnxo4dq6FDh+qHH35w6UxTpkxRbm6u/XbixAmXzgMAAFCSKq4ewNPTU02bNpUktW/fXt99953efvttPfXUU8rPz1dOTo7DVbmsrCxZrVZJktVq1a5duxyer/hTrb9dc+0nXbOysmSxWFS9evUSZ/Ly8pKXl5dT9g8AAOBucfkVuWsVFhYqLy9P7du3V9WqVZWUlGTfduTIEaWnpys8PFySFB4erv379ys7O9u+JjExURaLRSEhIfY1v32O4jXFzwEAAGAql16RmzJlinr16qWGDRvq/PnzWrJkiTZt2qT169fL29tbw4cPV2xsrHx9fWWxWDR+/HiFh4erY8eOkqSIiAiFhIRo8ODBmj17tjIzMzV16lTFxMTYr6iNGTNG8+bN06RJkzRs2DBt3LhRn332mRIS+KQbAAAwm0tDLjs7W0OGDNGpU6fk7e2t1q1ba/369XrsscckSXPnzlWlSpUUHR2tvLw8RUZG6r333rP/fOXKlbV27VqNHTtW4eHhuueeezR06FDFxcXZ1wQFBSkhIUETJ07U22+/rQYNGujDDz9UZGRkue8vAACAM7nd98i5I75Hzix8H1bFwnnjHJw3gHsx7nvkAAAAcHsIOQAAAEMRcgAAAIYi5AAAAAxFyAEAABiKkAMAADAUIQcAAGAoQg4AAMBQhBwAAIChCDkAAABDEXIAAACGIuQAAAAMRcgBAAAYipADAAAwFCEHAABgKEIOAADAUIQcAACAoQg5AAAAQxFyAAAAhiLkAAAADEXIAQAAGIqQAwAAMBQhBwAAYChCDgAAwFCEHAAAgKEIOQAAAEMRcgAAAIYi5AAAAAxFyAEAABiKkAMAADAUIQcAAGAoQg4AAMBQhBwAAIChCDkAAABDEXIAAACGIuQAAAAMRcgBAAAYipADAAAwFCEHAABgKEIOAADAUIQcAACAoQg5AAAAQxFyAAAAhiLkAAAADEXIAQAAGIqQAwAAMBQhBwAAYChCDgAAwFCEHAAAgKEIOQAAAEMRcgAAAIYi5AAAAAxFyAEAABiKkAMAADAUIQcAAGAoQg4AAMBQhBwAAIChXBpys2bN0oMPPqhatWrJz89P/fr105EjRxzWdOnSRR4eHg63MWPGOKxJT09XVFSUatSoIT8/P7300ku6evWqw5pNmzYpNDRUXl5eatq0qeLj4+/27gEAANxVLg25zZs3KyYmRjt27FBiYqKuXLmiiIgIXbx40WHdyJEjderUKftt9uzZ9m0FBQWKiopSfn6+tm/frsWLFys+Pl7Tp0+3r0lLS1NUVJS6du2q1NRUTZgwQSNGjND69evLbV8BAACcrYorf/m6desc7sfHx8vPz08pKSnq1KmT/fEaNWrIarWW+Bxff/21fvjhB23YsEH+/v5q27atXn31VU2ePFkzZ86Up6enFixYoKCgIL355puSpODgYH377beaO3euIiMj794OAgAA3EVu9R653NxcSZKvr6/D459++qnq1q2rli1basqUKfrnP/9p35acnKxWrVrJ39/f/lhkZKRsNpsOHjxoX9OjRw+H54yMjFRycnKJc+Tl5clmszncAAAA3I1Lr8j9VmFhoSZMmKA//OEPatmypf3xgQMHqlGjRgoICNC+ffs0efJkHTlyRCtWrJAkZWZmOkScJPv9zMzMG66x2Wy6dOmSqlev7rBt1qxZeuWVV5y+jwAAAM7kNiEXExOjAwcO6Ntvv3V4fNSoUfb/3apVK9WvX1/du3fXsWPH1KRJk7syy5QpUxQbG2u/b7PZFBgYeFd+FwAAQFm5xUur48aN09q1a/XNN9+oQYMGN1wbFhYmSTp69KgkyWq1Kisry2FN8f3i99WVtsZisVx3NU6SvLy8ZLFYHG4AAADuxqUhV1RUpHHjxumLL77Qxo0bFRQUdNOfSU1NlSTVr19fkhQeHq79+/crOzvbviYxMVEWi0UhISH2NUlJSQ7Pk5iYqPDwcCftCQAAQPlzacjFxMTok08+0ZIlS1SrVi1lZmYqMzNTly5dkiQdO3ZMr776qlJSUnT8+HGtXr1aQ4YMUadOndS6dWtJUkREhEJCQjR48GDt3btX69ev19SpUxUTEyMvLy9J0pgxY/SPf/xDkyZN0uHDh/Xee+/ps88+08SJE1227wAAAHfKpSH3/vvvKzc3V126dFH9+vXtt2XLlkmSPD09tWHDBkVERKh58+Z64YUXFB0drTVr1tifo3Llylq7dq0qV66s8PBwPfPMMxoyZIji4uLsa4KCgpSQkKDExES1adNGb775pj788EO+egQAABjNpR92KCoquuH2wMBAbd68+abP06hRI3355Zc3XNOlSxd9//33tzUfAACAO3OLDzsAAADg9hFyAAAAhiLkAAAADEXIAQAAGIqQAwAAMBQhBwAAYChCDgAAwFCEHAAAgKEIOQAAAEMRcgAAAIYi5AAAAAxFyAEAABiKkAMAADAUIQcAAGAoQg4AAMBQhBwAAIChCDkAAABDEXIAAACGIuQAAAAMRcgBAAAYipADAAAwFCEHAABgKEIOAADAUIQcAACAoQg5AAAAQxFyAAAAhiLkAAAADEXIAQAAGIqQAwAAMBQhBwAAYChCDgAAwFCEHAAAgKEIOQAAAEMRcgAAAIYi5AAAAAxFyAEAABiKkAMAADAUIQcAAGAoQg4AAMBQhBwAAIChCDkAAABDEXIAAACGIuQAAAAMRcgBAAAYipADAAAwFCEHAABgKEIOAADAUIQcAACAoQg5AAAAQxFyAAAAhiLkAAAADEXIAQAAGIqQAwAAMBQhBwAAYChCDgAAwFCEHAAAgKEIOQAAAEO5NORmzZqlBx98ULVq1ZKfn5/69eunI0eOOKy5fPmyYmJiVKdOHdWsWVPR0dHKyspyWJOenq6oqCjVqFFDfn5+eumll3T16lWHNZs2bVJoaKi8vLzUtGlTxcfH3+3dAwAAuKtcGnKbN29WTEyMduzYocTERF25ckURERG6ePGifc3EiRO1Zs0aLV++XJs3b1ZGRob69+9v315QUKCoqCjl5+dr+/btWrx4seLj4zV9+nT7mrS0NEVFRalr165KTU3VhAkTNGLECK1fv75c9xcAAMCZPIqKiopcPUSx06dPy8/PT5s3b1anTp2Um5urevXqacmSJXryySclSYcPH1ZwcLCSk5PVsWNHffXVV+rTp48yMjLk7+8vSVqwYIEmT56s06dPy9PTU5MnT1ZCQoIOHDhg/10DBgxQTk6O1q1bd9O5bDabvL29lZubK4vFcnd2XlLjPyXcteeuSI7/OcrVI6Accd44B+cN4F5utT3c6j1yubm5kiRfX19JUkpKiq5cuaIePXrY1zRv3lwNGzZUcnKyJCk5OVmtWrWyR5wkRUZGymaz6eDBg/Y1v32O4jXFz3GtvLw82Ww2hxsAAIC7cZuQKyws1IQJE/SHP/xBLVu2lCRlZmbK09NTPj4+Dmv9/f2VmZlpX/PbiCveXrztRmtsNpsuXbp03SyzZs2St7e3/RYYGOiUfQQAAHAmtwm5mJgYHThwQEuXLnX1KJoyZYpyc3PttxMnTrh6JAAAgOtUcfUAkjRu3DitXbtWW7ZsUYMGDeyPW61W5efnKycnx+GqXFZWlqxWq33Nrl27HJ6v+FOtv11z7Sdds7KyZLFYVL169evm8fLykpeXl1P2DQAA4G5x6RW5oqIijRs3Tl988YU2btyooKAgh+3t27dX1apVlZSUZH/syJEjSk9PV3h4uCQpPDxc+/fvV3Z2tn1NYmKiLBaLQkJC7Gt++xzFa4qfAwAAwEQuvSIXExOjJUuWaNWqVapVq5b9PW3e3t6qXr26vL29NXz4cMXGxsrX11cWi0Xjx49XeHi4OnbsKEmKiIhQSEiIBg8erNmzZyszM1NTp05VTEyM/aramDFjNG/ePE2aNEnDhg3Txo0b9dlnnykhgU+7AQAAc7n0itz777+v3NxcdenSRfXr17ffli1bZl8zd+5c9enTR9HR0erUqZOsVqtWrFhh3165cmWtXbtWlStXVnh4uJ555hkNGTJEcXFx9jVBQUFKSEhQYmKi2rRpozfffFMffvihIiMjy3V/AQAAnMmtvkfOXfE9cmbh+7AqFs4b5+C8AdyLkd8jBwAAgFtHyAEAABiKkAMAADAUIQcAAGAoQg4AAMBQhBwAAIChCDkAAABDEXIAAACGIuQAAAAMRcgBAAAYipADAAAwFCEHAABgKEIOAADAUIQcAACAocoUcnv27NH+/fvt91etWqV+/frpf/7nf5Sfn++04QAAAFC6MoXc6NGj9eOPP0qS/vGPf2jAgAGqUaOGli9frkmTJjl1QAAAAJSsTCH3448/qm3btpKk5cuXq1OnTlqyZIni4+P1+eefO3M+AAAAlKJMIVdUVKTCwkJJ0oYNG9S7d29JUmBgoH799VfnTQcAAIBSlSnkOnTooNdee01/+9vftHnzZkVFRUmS0tLS5O/v79QBAQAAULIyhdzcuXO1Z88ejRs3Ti+//LKaNm0qSfr73/+uhx9+2KkDAgAAoGRVyvJDbdq0cfjUarHXX39dVaqU6SkBAABwm8p0Re6+++7TmTNnrnv88uXLeuCBB+54KAAAANxcmULu+PHjKigouO7xvLw8nTx58o6HAgAAwM3d1uugq1evtv/v9evXy9vb236/oKBASUlJCgoKct50AAAAKNVthVy/fv0kSR4eHho6dKjDtqpVq6px48Z68803nTYcAAAASndbIVf83XFBQUH67rvvVLdu3bsyFAAAAG6uTB8xTUtLc/YcAAAAuE1l/q6QpKQkJSUlKTs7236lrtjChQvveDAAAADcWJlC7pVXXlFcXJw6dOig+vXry8PDw9lzAQAA4CbKFHILFixQfHy8Bg8e7Ox5AAAAcIvK9D1y+fn5/CkuAAAAFytTyI0YMUJLlixx9iwAAAC4DWV6afXy5cv64IMPtGHDBrVu3VpVq1Z12D5nzhynDAcAAIDSlSnk9u3bp7Zt20qSDhw44LCNDz4AAACUjzKF3DfffOPsOQAAAHCbyvQeOQAAALhema7Ide3a9YYvoW7cuLHMAwEAAODWlCnkit8fV+zKlStKTU3VgQMHNHToUGfMBQAAgJsoU8jNnTu3xMdnzpypCxcu3NFAAAAAuDVOfY/cM888w99ZBQAAKCdODbnk5GRVq1bNmU8JAACAUpTppdX+/fs73C8qKtKpU6e0e/duTZs2zSmDAQAA4MbKFHLe3t4O9ytVqqRmzZopLi5OERERThkMAAAAN1amkFu0aJGz5wAAAMBtKlPIFUtJSdGhQ4ckSS1atFC7du2cMhQAAABurkwhl52drQEDBmjTpk3y8fGRJOXk5Khr165aunSp6tWr58wZAQAAUIIyfWp1/PjxOn/+vA4ePKizZ8/q7NmzOnDggGw2m5577jlnzwgAAIASlOmK3Lp167RhwwYFBwfbHwsJCdH8+fP5sAMAAEA5KVPIFRYWqmrVqtc9XrVqVRUWFt7xUIC7afynBFeP8Ltw/M9Rrh4B5YRzxjk4Z3AzZXpptVu3bnr++eeVkZFhf+yXX37RxIkT1b17d6cNBwAAgNKVKeTmzZsnm82mxo0bq0mTJmrSpImCgoJks9n07rvvOntGAAAAlKBML60GBgZqz5492rBhgw4fPixJCg4OVo8ePZw6HAAAAEp3W1fkNm7cqJCQENlsNnl4eOixxx7T+PHjNX78eD344INq0aKFtm7derdmBQAAwG/cVsi99dZbGjlypCwWy3XbvL29NXr0aM2ZM8dpwwEAAKB0txVye/fuVc+ePUvdHhERoZSUlDseCgAAADd3WyGXlZVV4teOFKtSpYpOnz59x0MBAADg5m4r5O69914dOHCg1O379u1T/fr173goAAAA3NxthVzv3r01bdo0Xb58+bptly5d0owZM9SnTx+nDQcAAIDS3VbITZ06VWfPntUDDzyg2bNna9WqVVq1apX+8pe/qFmzZjp79qxefvnlW36+LVu2qG/fvgoICJCHh4dWrlzpsP3ZZ5+Vh4eHw+3a9+idPXtWgwYNksVikY+Pj4YPH64LFy44rNm3b58effRRVatWTYGBgZo9e/bt7DYAAIBbuq3vkfP399f27ds1duxYTZkyRUVFRZIkDw8PRUZGav78+fL397/l57t48aLatGmjYcOGqX///iWu6dmzpxYtWmS/7+Xl5bB90KBBOnXqlBITE3XlyhX98Y9/1KhRo7RkyRJJks1mU0REhHr06KEFCxZo//79GjZsmHx8fDRq1Kjb2X0AAAC3cttfCNyoUSN9+eWXOnfunI4ePaqioiLdf//9ql279m3/8l69eqlXr143XOPl5SWr1VritkOHDmndunX67rvv1KFDB0nSu+++q969e+uNN95QQECAPv30U+Xn52vhwoXy9PRUixYtlJqaqjlz5hByAADAaGX6E12SVLt2bT344IN66KGHyhRxt2rTpk3y8/NTs2bNNHbsWJ05c8a+LTk5WT4+PvaIk6QePXqoUqVK2rlzp31Np06d5OnpaV8TGRmpI0eO6Ny5cyX+zry8PNlsNocbAACAuylzyJWHnj176uOPP1ZSUpL+8pe/aPPmzerVq5cKCgokSZmZmfLz83P4mSpVqsjX11eZmZn2Nde+3Ft8v3jNtWbNmiVvb2/7LTAw0Nm7BgAAcMfK9LdWy8uAAQPs/7tVq1Zq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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"detector = emulator.Detector(efficiency=0.8)\n",
"\n",
"sampler = lw.Sampler(\n",
" hom,\n",
" lw.State([1, 1]),\n",
" 10000,\n",
" detector=detector,\n",
" random_seed=99,\n",
" sampling_mode=\"input\",\n",
")\n",
"results = backend.run(sampler)\n",
"results.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Dark counts\n",
"\n",
"With all photon detection methods, dark counts occur where a detection event is registered without a photon being present. In cases where the dark count rate is large this will alter then output states measured across other modes and so it is important to understand the effect of these. \n",
"\n",
"Below, an empty input is used and the probabilistic nature of dark counts demonstrated. The dark counts rate is set with the p_dark argument and is defined as the probability of a dark count occurring within the detection time bin on a singular detector channel. "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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vHoOEAAAgDtQgAAAgHEoQAAAwDgUIAAAYBwKkCEyMzMVGRmpgIAARUdH67PPPvN0JK+Xn5+vcePGKSwsTBaLpcHfk8O3MjIyNHDgQLVu3Vrt27dXQkKCTp065elYXm/lypXq06eP/UvpYmJi9D//8z+ejuVTli1bJovForlz53o6ildbsmSJLBaLw9K9e3dPx/IICpABNm/erLS0NC1evFhHjhxRVFSU4uLidPHiRU9H82qVlZWKiopSZmamp6P4jLy8PKWkpGj//v3auXOnbt26pdGjR6uystLT0bzaAw88oGXLlunw4cM6dOiQHn/8cY0fP15ffPGFp6P5hIMHD2r16tXq06ePp6P4hF69eunChQv2Zc+ePZ6O5BH8GbwBoqOjNXDgQK1YsULSt9+mHR4ern/6p3/SggULPJzON1gsFn344YdKSEjwdBSfcunSJbVv3155eXl67LHHPB3Hp9x777164403NGPGDE9H8WoVFRXq37+//vM//1M///nP1bdvXy1fvtzTsbzWkiVLlJ2dLavV6ukoHscToLvczZs3dfjwYcXGxtrHmjVrptjYWO3bt8+DyWCCsrIySd/+yxyNU11drU2bNqmyspKf8GmElJQUjR071uF/49Cw06dPKywsTJ07d9aUKVNUVFTk6Uge4fXfBI07c/nyZVVXV9u/Ofs7ISEhOnnypIdSwQQ1NTWaO3euHn30Ub6JvRGOHTummJgYffPNN/rhD3+oDz/8UD179vR0LK+2adMmHTlyRAcPHvR0FJ8RHR2trKwsdevWTRcuXNCrr76qoUOH6vjx42rdurWn4zUpChAAt0hJSdHx48eNnV/grG7duslqtaqsrEy/+c1vlJSUpLy8PEpQPYqLi/XCCy9o586dCggI8HQcnxEfH2//5z59+ig6OloRERHasmWLca9bKUB3uXbt2snPz0+lpaUO46WlpQoNDfVQKtztUlNT9dFHHyk/P18PPPCAp+P4hBYtWqhLly6SpAEDBujgwYN6++23tXr1ag8n806HDx/WxYsX1b9/f/tYdXW18vPztWLFClVVVcnPz8+DCX1DmzZt1LVrV505c8bTUZocc4Duci1atNCAAQOUm5trH6upqVFubi7zC+ByNptNqamp+vDDD7Vr1y516tTJ05F8Vk1Njaqqqjwdw2uNHDlSx44dk9VqtS+PPPKIpkyZIqvVSvlppIqKCp09e1YdOnTwdJQmxxMgA6SlpSkpKUmPPPKIBg0apOXLl6uyslLJycmejubVKioqHP5fUUFBgaxWq+6991517NjRg8m8V0pKijZu3Kht27apdevWKikpkSQFBQWpZcuWHk7nvdLT0xUfH6+OHTvqxo0b2rhxo3bv3q2PP/7Y09G8VuvWrWvNLWvVqpXuu+8+5pw1YN68eRo3bpwiIiL01VdfafHixfLz81NiYqKnozU5CpABJk+erEuXLmnRokUqKSlR3759lZOTU2tiNBwdOnRII0aMsK+npaVJkpKSkpSVleWhVN5t5cqVkqThw4c7jK9bt07Tpk1r+kA+4uLFi5o6daouXLigoKAg9enTRx9//LFGjRrl6Wi4y5w/f16JiYm6cuWKgoODNWTIEO3fv1/BwcGejtbk+B4gAABgHOYAAQAA41CAAACAcShAAADAOBQgAABgHAoQAAAwDgUIAAAYhwIEAACMQwECAADGoQABwP+3e/duWSwWXb9+3dNRALgZBQiAz5g2bZosFouef/75WttSUlJksVj4yQ0AjUIBAuBTwsPDtWnTJv3f//2ffeybb77Rxo0b+ZFaAI1GAQLgU/r376/w8HBt3brVPrZ161Z17NhR/fr1s49VVVVpzpw5at++vQICAjRkyBAdPHjQ4Vw7duxQ165d1bJlS40YMUKFhYW1Pm/Pnj0aOnSoWrZsqfDwcM2ZM0eVlZVuuz4ATYMCBMDnTJ8+XevWrbOvr127VsnJyQ77vPTSS/rggw/0zjvv6MiRI+rSpYvi4uJ09epVSVJxcbGefPJJjRs3TlarVTNnztSCBQscznH27FmNGTNGEydO1NGjR7V582bt2bNHqamp7r9IAG7Fr8ED8BnTpk3T9evX9atf/Urh4eE6deqUJKl79+4qLi7WzJkz1aZNG2VmZqpt27bKysrSs88+K0m6deuWIiMjNXfuXM2fP18LFy7Utm3b9MUXX9jPv2DBAr3++uu6du2a2rRpo5kzZ8rPz0+rV6+277Nnzx4NGzZMlZWVCggIaNobAMBlmns6AAA4Kzg4WGPHjlVWVpZsNpvGjh2rdu3a2befPXtWt27d0qOPPmofu+eeezRo0CB9+eWXkqQvv/xS0dHRDueNiYlxWP/888919OhRbdiwwT5ms9lUU1OjgoIC9ejRwx2XB6AJUIAA+KTp06fbX0VlZma65TMqKir005/+VHPmzKm1jQnXgG+jAAHwSWPGjNHNmzdlsVgUFxfnsO3BBx9UixYt9Mc//lERERGSvn0FdvDgQc2dO1eS1KNHD/32t791OG7//v0O6/3799eJEyfUpUsX910IAI9gEjQAn+Tn56cvv/xSJ06ckJ+fn8O2Vq1aafbs2Zo/f75ycnJ04sQJzZo1S19//bVmzJghSXr++ed1+vRpzZ8/X6dOndLGjRuVlZXlcJ6XX35Ze/fuVWpqqqxWq06fPq1t27YxCRq4C1CAAPiswMBABQYG1rlt2bJlmjhxon7yk5+of//+OnPmjD7++GO1bdtW0revsD744ANlZ2crKipKq1at0r/92785nKNPnz7Ky8vT//7v/2ro0KHq16+fFi1apLCwMLdfGwD34q/AAACAcXgCBAAAjEMBAgAAxqEAAQAA41CAAACAcShAAADAOBQgAABgHAoQAAAwDgUIAAAYhwIEAACMQwECAADGoQABAADj/D9aHNtaeZt/XQAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"detector = emulator.Detector(p_dark=1e-3)\n",
"\n",
"sampler = lw.Sampler(\n",
" lw.PhotonicCircuit(6),\n",
" lw.State([0] * 6),\n",
" 10000,\n",
" detector=detector,\n",
" random_seed=1,\n",
" sampling_mode=\"input\",\n",
")\n",
"results = backend.run(sampler)\n",
"\n",
"# Collect dark counts per mode\n",
"counts = [0] * 6\n",
"for s, c in results.items():\n",
" for i, m in enumerate(s):\n",
" if m >= 1:\n",
" counts[i] += c\n",
"\n",
"plt.bar(range(len(counts)), counts)\n",
"plt.xlabel(\"Mode\")\n",
"plt.ylabel(\"Dark counts\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Photon Number Resolving\n",
"Typically, the SNSPDs used in photonic quantum computing are not able to resolve multiple photons. This means if two or more photons exit on a mode of the QPU then only one detection event will be registered.\n",
"\n",
"Again, using the HOM experiment, we set the photon_counting option to False and it can be seen how the output states are now only $\\ket{1,0}$ or $\\ket{0,1}$. This also means if there is loss within the system, we would not be able to distinguish between the $\\ket{2,0}$ and a $\\ket{1,0}$ state where 1 photon was lost from the system."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAIlCAYAAABRpRXaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAsmklEQVR4nO3de5SWdb3//9cgMB5wBvEwIxsUylLwkKFtHL87TUVHG12auFYeUtqpqQtMZJfGziO1Fi1NycKydiW2y+WhTFNSQ0xMxROGoqWVG4PCGSyFETYHhfn90Y97Owkq48DNJx+Pte61mPv63Ne8r9bqWk+v+76vqeno6OgIAADF6VHtAQAA6BohBwBQKCEHAFAoIQcAUCghBwBQKCEHAFAoIQcAUKie1R6gBKtXr86CBQuy9dZbp6amptrjAAD/5Do6OvLqq6+mf//+6dFj3dfdhNw7sGDBggwcOLDaYwAA7zHz58/PgAED1rldyL0DW2+9dZK//49ZV1dX5WkAgH927e3tGThwYKVB1kXIvQNr3k6tq6sTcgDARvN2H+nyZQcAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEIJOQCAQgk5AIBCCTkAgEL1rPYA/J9BX5xa7RHgPeGFr7ZUewSAblHVK3KXXHJJampqOj122223yvbly5dn9OjR2XbbbdOnT5+MHDkybW1tnfYxb968tLS0ZMstt8wOO+yQL3zhC3n99dc7rbnvvvsybNiw1NbWZpdddsmUKVM2xuEBAGxQVX9rdffdd8+LL75YeTzwwAOVbeeee25uv/323HzzzZkxY0YWLFiQY489trJ91apVaWlpycqVK/PQQw/luuuuy5QpU3LRRRdV1sydOzctLS056KCDMnv27IwdOzannXZa7r777o16nAAA3a3qb6327NkzjY2Nb3p+8eLF+f73v5/rr78+Bx98cJLk2muvzZAhQ/Lwww9nv/32yy9/+cv89re/zT333JOGhobsvffe+fKXv5zzzz8/l1xySXr37p1rrrkmgwcPzhVXXJEkGTJkSB544IFMmjQpzc3NG/VYAQC6U9WvyP3hD39I//798773vS8nnXRS5s2blySZNWtWXnvttYwYMaKydrfddstOO+2UmTNnJklmzpyZPffcMw0NDZU1zc3NaW9vzzPPPFNZ88Z9rFmzZh9rs2LFirS3t3d6AABsaqoacsOHD8+UKVNy11135dvf/nbmzp2bj370o3n11VfT2tqa3r17p2/fvp1e09DQkNbW1iRJa2trp4hbs33Ntrda097enmXLlq11rokTJ6a+vr7yGDhwYHccLgBAt6rqW6tHHHFE5d977bVXhg8fnp133jk33XRTtthii6rNNX78+IwbN67yc3t7u5gDADY5VX9r9Y369u2bD37wg/njH/+YxsbGrFy5MosWLeq0pq2trfKZusbGxjd9i3XNz2+3pq6ubp2xWFtbm7q6uk4PAIBNzSYVckuWLMnzzz+fHXfcMfvss0969eqV6dOnV7Y/99xzmTdvXpqampIkTU1NmTNnThYuXFhZM23atNTV1WXo0KGVNW/cx5o1a/YBAFCqqr61+vnPfz5HHXVUdt555yxYsCAXX3xxNttss5xwwgmpr6/PqaeemnHjxqVfv36pq6vL2Wefnaampuy3335JksMOOyxDhw7NySefnMsuuyytra254IILMnr06NTW1iZJzjzzzEyePDnnnXdePvOZz+Tee+/NTTfdlKlT3XwX+OfjxuKwcWwqNxavasj9+c9/zgknnJC//e1v2X777fNv//Zvefjhh7P99tsnSSZNmpQePXpk5MiRWbFiRZqbm/Otb32r8vrNNtssd9xxR84666w0NTVlq622yqhRozJhwoTKmsGDB2fq1Kk599xzc9VVV2XAgAH53ve+59YjAEDxajo6OjqqPcSmrr29PfX19Vm8ePEG/byc/5KGjWNT+S/pDcF5BDaODX0eeaftsUl9Rg4AgHdOyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIAQAUSsgBABRqkwm5r371q6mpqcnYsWMrzy1fvjyjR4/Otttumz59+mTkyJFpa2vr9Lp58+alpaUlW265ZXbYYYd84QtfyOuvv95pzX333Zdhw4altrY2u+yyS6ZMmbIRjggAYMPaJELusccey3e+853stddenZ4/99xzc/vtt+fmm2/OjBkzsmDBghx77LGV7atWrUpLS0tWrlyZhx56KNddd12mTJmSiy66qLJm7ty5aWlpyUEHHZTZs2dn7NixOe2003L33XdvtOMDANgQqh5yS5YsyUknnZT/+q//yjbbbFN5fvHixfn+97+fK6+8MgcffHD22WefXHvttXnooYfy8MMPJ0l++ctf5re//W1+9KMfZe+9984RRxyRL3/5y7n66quzcuXKJMk111yTwYMH54orrsiQIUMyZsyYHHfccZk0aVJVjhcAoLtUPeRGjx6dlpaWjBgxotPzs2bNymuvvdbp+d122y077bRTZs6cmSSZOXNm9txzzzQ0NFTWNDc3p729Pc8880xlzT/uu7m5ubKPtVmxYkXa29s7PQAANjU9q/nLb7jhhjzxxBN57LHH3rSttbU1vXv3Tt++fTs939DQkNbW1sqaN0bcmu1rtr3Vmvb29ixbtixbbLHFm373xIkTc+mll3b5uAAANoaqXZGbP39+zjnnnPz4xz/O5ptvXq0x1mr8+PFZvHhx5TF//vxqjwQA8CZVC7lZs2Zl4cKFGTZsWHr27JmePXtmxowZ+cY3vpGePXumoaEhK1euzKJFizq9rq2tLY2NjUmSxsbGN32Ldc3Pb7emrq5urVfjkqS2tjZ1dXWdHgAAm5qqhdwhhxySOXPmZPbs2ZXHvvvum5NOOqny7169emX69OmV1zz33HOZN29empqakiRNTU2ZM2dOFi5cWFkzbdq01NXVZejQoZU1b9zHmjVr9gEAUKqqfUZu6623zh577NHpua222irbbrtt5flTTz0148aNS79+/VJXV5ezzz47TU1N2W+//ZIkhx12WIYOHZqTTz45l112WVpbW3PBBRdk9OjRqa2tTZKceeaZmTx5cs4777x85jOfyb333pubbropU6dO3bgHDADQzar6ZYe3M2nSpPTo0SMjR47MihUr0tzcnG9961uV7ZtttlnuuOOOnHXWWWlqaspWW22VUaNGZcKECZU1gwcPztSpU3PuuefmqquuyoABA/K9730vzc3N1TgkAIBuU9PR0dFR7SE2de3t7amvr8/ixYs36OflBn3RVULYGF74aku1R9hgnEdg49jQ55F32h5Vv48cAABdI+QAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKJeQAAAol5AAACiXkAAAKVdWQ+/a3v5299tordXV1qaurS1NTU+68887K9uXLl2f06NHZdttt06dPn4wcOTJtbW2d9jFv3ry0tLRkyy23zA477JAvfOELef311zutue+++zJs2LDU1tZml112yZQpUzbG4QEAbFBVDbkBAwbkq1/9ambNmpXHH388Bx98cI4++ug888wzSZJzzz03t99+e26++ebMmDEjCxYsyLHHHlt5/apVq9LS0pKVK1fmoYceynXXXZcpU6bkoosuqqyZO3duWlpactBBB2X27NkZO3ZsTjvttNx9990b/XgBALpTTUdHR0e1h3ijfv365fLLL89xxx2X7bffPtdff32OO+64JMmzzz6bIUOGZObMmdlvv/1y55135sgjj8yCBQvS0NCQJLnmmmty/vnn56WXXkrv3r1z/vnnZ+rUqXn66acrv+P444/PokWLctddd72jmdrb21NfX5/Fixenrq6u+w/6/zfoi1M32L6B//PCV1uqPcIG4zwCG8eGPo+80/bYZD4jt2rVqtxwww1ZunRpmpqaMmvWrLz22msZMWJEZc1uu+2WnXbaKTNnzkySzJw5M3vuuWcl4pKkubk57e3tlat6M2fO7LSPNWvW7GNtVqxYkfb29k4PAIBNTdVDbs6cOenTp09qa2tz5pln5mc/+1mGDh2a1tbW9O7dO3379u20vqGhIa2trUmS1tbWThG3ZvuabW+1pr29PcuWLVvrTBMnTkx9fX3lMXDgwO44VACAblX1kNt1110ze/bsPPLIIznrrLMyatSo/Pa3v63qTOPHj8/ixYsrj/nz51d1HgCAtelZ7QF69+6dXXbZJUmyzz775LHHHstVV12VT37yk1m5cmUWLVrU6apcW1tbGhsbkySNjY159NFHO+1vzbda37jmH7/p2tbWlrq6umyxxRZrnam2tja1tbXdcnwAABtK1a/I/aPVq1dnxYoV2WeffdKrV69Mnz69su25557LvHnz0tTUlCRpamrKnDlzsnDhwsqaadOmpa6uLkOHDq2seeM+1qxZsw8AgFJV9Yrc+PHjc8QRR2SnnXbKq6++muuvvz733Xdf7r777tTX1+fUU0/NuHHj0q9fv9TV1eXss89OU1NT9ttvvyTJYYcdlqFDh+bkk0/OZZddltbW1lxwwQUZPXp05YramWeemcmTJ+e8887LZz7zmdx777256aabMnWqb3YBAGWrasgtXLgwp5xySl588cXU19dnr732yt13351DDz00STJp0qT06NEjI0eOzIoVK9Lc3JxvfetblddvttlmueOOO3LWWWelqakpW221VUaNGpUJEyZU1gwePDhTp07Nueeem6uuuioDBgzI9773vTQ3N2/04wUA6E6b3H3kNkXuIwf/XNxHDni33EcOAIB3RcgBABSqSyH3xBNPZM6cOZWfb7vtthxzzDH5z//8z6xcubLbhgMAYN26FHJnnHFGfv/73ydJ/ud//ifHH398ttxyy9x8880577zzunVAAADWrksh9/vf/z577713kuTmm2/OAQcckOuvvz5TpkzJT3/60+6cDwCAdehSyHV0dGT16tVJknvuuScf//jHkyQDBw7MX//61+6bDgCAdepSyO277775yle+kv/+7//OjBkz0tLy96/gzp07901/oB4AgA2jSyE3adKkPPHEExkzZky+9KUvVf5W6k9+8pPsv//+3TogAABr16W/7PChD32o07dW17j88svTs2dV/1gEAMB7RpeuyL3vfe/L3/72tzc9v3z58nzwgx9810MBAPD2uhRyL7zwQlatWvWm51esWJE///nP73ooAADe3nq9D/rzn/+88u+777479fX1lZ9XrVqV6dOnZ/Dgwd03HQAA67ReIXfMMcckSWpqajJq1KhO23r16pVBgwbliiuu6LbhAABYt/UKuTX3jhs8eHAee+yxbLfddhtkKAAA3l6XvmI6d+7c7p4DAID11OV7hUyfPj3Tp0/PwoULK1fq1vjBD37wrgcDAOCtdSnkLr300kyYMCH77rtvdtxxx9TU1HT3XAAAvI0uhdw111yTKVOm5OSTT+7ueQAAeIe6dB+5lStX+lNcAABV1qWQO+2003L99dd39ywAAKyHLr21unz58nz3u9/NPffck7322iu9evXqtP3KK6/sluEAAFi3LoXcU089lb333jtJ8vTTT3fa5osPAAAbR5dC7le/+lV3zwEAwHrq0mfkAACovi5dkTvooIPe8i3Ue++9t8sDAQDwznQp5NZ8Pm6N1157LbNnz87TTz+dUaNGdcdcAAC8jS6F3KRJk9b6/CWXXJIlS5a8q4EAAHhnuvUzcp/61Kf8nVUAgI2kW0Nu5syZ2XzzzbtzlwAArEOX3lo99thjO/3c0dGRF198MY8//nguvPDCbhkMAIC31qWQq6+v7/Rzjx49suuuu2bChAk57LDDumUwAADeWpdC7tprr+3uOQAAWE9dCrk1Zs2ald/97ndJkt133z0f/vCHu2UoAADeXpdCbuHChTn++ONz3333pW/fvkmSRYsW5aCDDsoNN9yQ7bffvjtnBABgLbr0rdWzzz47r776ap555pm8/PLLefnll/P000+nvb09n/vc57p7RgAA1qJLV+Tuuuuu3HPPPRkyZEjluaFDh+bqq6/2ZQcAgI2kS1fkVq9enV69er3p+V69emX16tXveigAAN5el0Lu4IMPzjnnnJMFCxZUnvvLX/6Sc889N4cccki3DQcAwLp1KeQmT56c9vb2DBo0KO9///vz/ve/P4MHD057e3u++c1vdveMAACsRZc+Izdw4MA88cQTueeee/Lss88mSYYMGZIRI0Z063AAAKzbel2Ru/feezN06NC0t7enpqYmhx56aM4+++ycffbZ+chHPpLdd989v/71rzfUrAAAvMF6hdzXv/71nH766amrq3vTtvr6+pxxxhm58soru204AADWbb1C7sknn8zhhx++zu2HHXZYZs2a9a6HAgDg7a1XyLW1ta31tiNr9OzZMy+99NK7HgoAgLe3XiH3L//yL3n66afXuf2pp57Kjjvu+K6HAgDg7a1XyH384x/PhRdemOXLl79p27Jly3LxxRfnyCOP7LbhAABYt/W6/cgFF1yQW265JR/84AczZsyY7LrrrkmSZ599NldffXVWrVqVL33pSxtkUAAAOluvkGtoaMhDDz2Us846K+PHj09HR0eSpKamJs3Nzbn66qvT0NCwQQYFAKCz9b4h8M4775xf/OIXeeWVV/LHP/4xHR0d+cAHPpBtttlmQ8wHAMA6dOkvOyTJNttsk4985CPdOQsAAOuhS39rFQCA6hNyAACFEnIAAIUScgAAhRJyAACFEnIAAIUScgAAhRJyAACFEnIAAIUScgAAhRJyAACFEnIAAIUScgAAhRJyAACFEnIAAIUScgAAhRJyAACFEnIAAIUScgAAhRJyAACFEnIAAIUScgAAhRJyAACFEnIAAIUScgAAhRJyAACFqmrITZw4MR/5yEey9dZbZ4cddsgxxxyT5557rtOa5cuXZ/To0dl2223Tp0+fjBw5Mm1tbZ3WzJs3Ly0tLdlyyy2zww475Atf+EJef/31Tmvuu+++DBs2LLW1tdlll10yZcqUDX14AAAbVFVDbsaMGRk9enQefvjhTJs2La+99loOO+ywLF26tLLm3HPPze23356bb745M2bMyIIFC3LsscdWtq9atSotLS1ZuXJlHnrooVx33XWZMmVKLrroosqauXPnpqWlJQcddFBmz56dsWPH5rTTTsvdd9+9UY8XAKA71XR0dHRUe4g1Xnrppeywww6ZMWNGDjjggCxevDjbb799rr/++hx33HFJkmeffTZDhgzJzJkzs99+++XOO+/MkUcemQULFqShoSFJcs011+T888/PSy+9lN69e+f888/P1KlT8/TTT1d+1/HHH59Fixblrrvuetu52tvbU19fn8WLF6eurm7DHHySQV+cusH2DfyfF77aUu0RNhjnEdg4NvR55J22xyb1GbnFixcnSfr165ckmTVrVl577bWMGDGisma33XbLTjvtlJkzZyZJZs6cmT333LMScUnS3Nyc9vb2PPPMM5U1b9zHmjVr9vGPVqxYkfb29k4PAIBNzSYTcqtXr87YsWPz//7f/8see+yRJGltbU3v3r3Tt2/fTmsbGhrS2tpaWfPGiFuzfc22t1rT3t6eZcuWvWmWiRMnpr6+vvIYOHBgtxwjAEB32mRCbvTo0Xn66adzww03VHuUjB8/PosXL6485s+fX+2RAADepGe1B0iSMWPG5I477sj999+fAQMGVJ5vbGzMypUrs2jRok5X5dra2tLY2FhZ8+ijj3ba35pvtb5xzT9+07WtrS11dXXZYost3jRPbW1tamtru+XYAAA2lKpekevo6MiYMWPys5/9LPfee28GDx7cafs+++yTXr16Zfr06ZXnnnvuucybNy9NTU1JkqampsyZMycLFy6srJk2bVrq6uoydOjQypo37mPNmjX7AAAoUVWvyI0ePTrXX399brvttmy99daVz7TV19dniy22SH19fU499dSMGzcu/fr1S11dXc4+++w0NTVlv/32S5IcdthhGTp0aE4++eRcdtllaW1tzQUXXJDRo0dXrqqdeeaZmTx5cs4777x85jOfyb333pubbropU6f6dhcAUK6qXpH79re/ncWLF+djH/tYdtxxx8rjxhtvrKyZNGlSjjzyyIwcOTIHHHBAGhsbc8stt1S2b7bZZrnjjjuy2WabpampKZ/61KdyyimnZMKECZU1gwcPztSpUzNt2rR86EMfyhVXXJHvfe97aW5u3qjHCwDQnTap+8htqtxHDv65uI8c8G65jxwAAO+KkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADAChUVUPu/vvvz1FHHZX+/funpqYmt956a6ftHR0dueiii7Ljjjtmiy22yIgRI/KHP/yh05qXX345J510Uurq6tK3b9+ceuqpWbJkSac1Tz31VD760Y9m8803z8CBA3PZZZdt6EMDANjgqhpyS5cuzYc+9KFcffXVa91+2WWX5Rvf+EauueaaPPLII9lqq63S3Nyc5cuXV9acdNJJeeaZZzJt2rTccccduf/++/PZz362sr29vT2HHXZYdt5558yaNSuXX355Lrnkknz3u9/d4McHALAh9azmLz/iiCNyxBFHrHVbR0dHvv71r+eCCy7I0UcfnST54Q9/mIaGhtx66605/vjj87vf/S533XVXHnvssey7775Jkm9+85v5+Mc/nq997Wvp379/fvzjH2flypX5wQ9+kN69e2f33XfP7Nmzc+WVV3YKPgCA0myyn5GbO3duWltbM2LEiMpz9fX1GT58eGbOnJkkmTlzZvr27VuJuCQZMWJEevTokUceeaSy5oADDkjv3r0ra5qbm/Pcc8/llVdeWevvXrFiRdrb2zs9AAA2NZtsyLW2tiZJGhoaOj3f0NBQ2dba2poddtih0/aePXumX79+ndasbR9v/B3/aOLEiamvr688Bg4c+O4PCACgm22yIVdN48ePz+LFiyuP+fPnV3skAIA32WRDrrGxMUnS1tbW6fm2trbKtsbGxixcuLDT9tdffz0vv/xypzVr28cbf8c/qq2tTV1dXacHAMCmZpMNucGDB6exsTHTp0+vPNfe3p5HHnkkTU1NSZKmpqYsWrQos2bNqqy59957s3r16gwfPryy5v77789rr71WWTNt2rTsuuuu2WabbTbS0QAAdL+qhtySJUsye/bszJ49O8nfv+Awe/bszJs3LzU1NRk7dmy+8pWv5Oc//3nmzJmTU045Jf37988xxxyTJBkyZEgOP/zwnH766Xn00Ufz4IMPZsyYMTn++OPTv3//JMmJJ56Y3r1759RTT80zzzyTG2+8MVdddVXGjRtXpaMGAOgeVb39yOOPP56DDjqo8vOauBo1alSmTJmS8847L0uXLs1nP/vZLFq0KP/2b/+Wu+66K5tvvnnlNT/+8Y8zZsyYHHLIIenRo0dGjhyZb3zjG5Xt9fX1+eUvf5nRo0dnn332yXbbbZeLLrrIrUcAgOLVdHR0dFR7iE1de3t76uvrs3jx4g36eblBX5y6wfYN/J8XvtpS7RE2GOcR2Dg29HnknbbHJvsZOQAA3pqQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAolJADACiUkAMAKJSQAwAo1Hsq5K6++uoMGjQom2++eYYPH55HH3202iMBAHTZeybkbrzxxowbNy4XX3xxnnjiiXzoQx9Kc3NzFi5cWO3RAAC6pGe1B9hYrrzyypx++un593//9yTJNddck6lTp+YHP/hBvvjFL3Zau2LFiqxYsaLy8+LFi5Mk7e3tG3TG1Sv+d4PuH/i7Df3/5WpyHoGNY0OfR9bsv6Oj4y3X1XS83Yp/AitXrsyWW26Zn/zkJznmmGMqz48aNSqLFi3Kbbfd1mn9JZdckksvvXQjTwkA0Nn8+fMzYMCAdW5/T1yR++tf/5pVq1aloaGh0/MNDQ159tln37R+/PjxGTduXOXn1atX5+WXX862226bmpqaDT4v5Whvb8/AgQMzf/781NXVVXscoEDOI6xNR0dHXn311fTv3/8t170nQm591dbWpra2ttNzffv2rc4wFKGurs4JGHhXnEf4R/X19W+75j3xZYftttsum222Wdra2jo939bWlsbGxipNBQDw7rwnQq53797ZZ599Mn369Mpzq1evzvTp09PU1FTFyQAAuu4989bquHHjMmrUqOy7777513/913z961/P0qVLK99iha6ora3NxRdf/Ka34gHeKecR3o33xLdW15g8eXIuv/zytLa2Zu+99843vvGNDB8+vNpjAQB0yXsq5AAA/pm8Jz4jBwDwz0jIAQAUSsgBABRKyAEAFErIAQAUSsgBABRKyAEAFErIwbvwzDPPZNiwYXn88cerPQpQKOcR3g0hB+/ClClT8uSTT+YHP/hBtUcBCuU8wrvhLztAF61evToDBgzIiSeemGuvvTYvvvhievfuXe2xgII4j/BuuSIHXXTXXXdl1apVmThxYurq6nLbbbdVeySgMM4jvFtCDrrouuuuyyc/+cn06tUrJ510UqZMmVLtkYDCOI/wbnlrFbpg0aJF6d+/f+6///7su+++ee6557Lnnntm/vz5aWhoqPZ4QAGcR+gOrshBF9xwww0ZPHhw9t133yTJrrvummHDhuVHP/pRlScDSuE8QncQctAF1113XU4++eROz33qU5/ytgjwjjmP0B2EHKyn+fPnp62t7U0n4BNOOCHLli3L73//+ypNBpTCeYTu4jNyAACFckUOAKBQPas9APwzeeWVV3L77bfnlFNOqfYowCZs5cqVufXWWzNz5sy0trYmSRobG7P//vvn6KOPdlNg3jFvrUI3evLJJzNs2LCsWrWq2qMAm6g//vGPaW5uzoIFCzJ8+PDKrUba2tryyCOPZMCAAbnzzjuzyy67VHlSSiDkYD20t7e/5fannnoqBx54oJAD1unQQw/NVlttlR/+8Iepq6vrtK29vT2nnHJKli1blrvvvrtKE1ISIQfroUePHqmpqVnn9o6OjtTU1Ag5YJ223HLLPProo9ljjz3Wun3OnDkZPnx4/vd//3cjT0aJfEYO1sPWW2+dL33pSxk+fPhat//hD3/IGWecsZGnAkrSt2/fvPDCC+sMuRdeeCF9+/bduENRLCEH62HYsGFJkgMPPHCt2/v27RsXuYG3ctppp+WUU07JhRdemEMOOaTTZ+SmT5+er3zlKzn77LOrPCWlEHKwHk488cQsW7ZsndsbGxtz8cUXb8SJgNJMmDAhW221VS6//PL8x3/8R+XjGh0dHWlsbMz555+f8847r8pTUgqfkQOAKpk7d26n248MHjy4yhNRGiEHAFAof9kButkPf/jDPP/889UeAyjYhAkT8utf/7raY1AAV+Sgm/Xo0SO9evXKZz/72Xzzm9+s9jhAgQYPHpy2trYccsghuf3226s9DpswX3aAbrZ69erMnTs3d955Z7VHAQo1d+7cLFu2LL/61a+qPQqbOFfkAAAK5YocdEFra2seeeSRTt82Gz58eBobG6s8GVC6pUuXZtasWTnggAOqPQoFcEUO1sPSpUtzxhln5IYbbkhNTU369euXJHn55ZfT0dGRE044Id/5zney5ZZbVnlSoFRPPvlkhg0b5k/98Y741iqsh3POOSePPvpopk6dmuXLl6etrS1tbW1Zvnx5fvGLX+TRRx/NOeecU+0xAXiPcEUO1sM222yTqVOnZv/991/r9gcffDBHHnlkXnnllY08GVCKNVfy12XVqlVZsmSJK3K8Iz4jB+th9erV6d279zq39+7dO6tXr96IEwGlWbFiRc4666zsueeea93+pz/9KZdeeulGnopSCTlYD0ceeWQ++9nP5vvf/34+/OEPd9r2m9/8JmeddVaOOuqoKk0HlGDvvffOwIEDM2rUqLVuf/LJJ4Uc75jPyMF6mDx5choaGrLPPvtk2223zZAhQzJkyJBsu+222XfffbPDDjtk8uTJ1R4T2IS1tLRk0aJF69zer1+/nHLKKRtvIIrmM3LQBb/73e8yc+bMtLW1Jfn77Ueampqy2267VXkyAN5LhBwAQKF8Rg7eocGDB6empma9Xzd27Nh87nOf2wATAaVxHqG7uSIH79CMGTO69LpBgwZl55137uZpgBI5j9DdhBwAQKF8axUAoFBCDgCgUEIOAKBQQg4AoFBCDgCgUEIO4C289NJLOeuss7LTTjultrY2jY2NaW5uzoMPPpgkqampya233rre+x00aFC+/vWvd++wwHuOGwIDvIWRI0dm5cqVue666/K+970vbW1tmT59ev72t79VezQA95EDWJdFixZlm222yX333ZcDDzzwTdsHDRqUP/3pT5Wfd95557zwwgt5/vnnM27cuDz88MNZunRphgwZkokTJ2bEiBFJko997GNvujHsmlPxAw88kPHjx+fxxx/Pdtttl0984hOZOHFittpqqw14pECpvLUKsA59+vRJnz59cuutt2bFihVv2v7YY48lSa699tq8+OKLlZ+XLFmSj3/845k+fXp+85vf5PDDD89RRx2VefPmJUluueWWDBgwIBMmTMiLL76YF198MUny/PPP5/DDD8/IkSPz1FNP5cYbb8wDDzyQMWPGbKQjBkrjihzAW/jpT3+a008/PcuWLcuwYcNy4IEH5vjjj89ee+2V5O+fkfvZz36WY4455i33s8cee+TMM8+sRNmgQYMyduzYjB07trLmtNNOy2abbZbvfOc7leceeOCBHHjggVm6dGk233zzbj8+oGyuyAG8hZEjR2bBggX5+c9/nsMPPzz33Xdfhg0blilTpqzzNUuWLMnnP//5DBkyJH379k2fPn3yu9/9rnJFbl2efPLJTJkypXIlsE+fPmlubs7q1aszd+7cbj4y4J+BLzsAvI3NN988hx56aA499NBceOGFOe2003LxxRfn05/+9FrXf/7zn8+0adPyta99Lbvssku22GKLHHfccVm5cuVb/p4lS5bkjDPOyOc+97k3bdtpp52641CAfzJCDmA9DR06tHLLkV69emXVqlWdtj/44IP59Kc/nU984hNJ/h5oL7zwQqc1vXv3ftPrhg0blt/+9rfZZZddNtjswD8Xb60CrMPf/va3HHzwwfnRj36Up556KnPnzs3NN9+cyy67LEcffXSSv3/Wbfr06Wltbc0rr7ySJPnABz6QW265JbNnz86TTz6ZE088MatXr+6070GDBuX+++/PX/7yl/z1r39Nkpx//vl56KGHMmbMmMyePTt/+MMfctttt/myA7BOQg5gHfr06ZPhw4dn0qRJOeCAA7LHHnvkwgsvzOmnn57JkycnSa644opMmzYtAwcOzIc//OEkyZVXXpltttkm+++/f4466qg0Nzdn2LBhnfY9YcKEvPDCC3n/+9+f7bffPkmy1157ZcaMGfn973+fj370o/nwhz+ciy66KP3799+4Bw4Uw7dWAQAK5YocAEChhBwAQKGEHABAoYQcAEChhBwAQKGEHABAoYQcAEChhBwAQKGEHABAoYQcAEChhBwAQKH+PwuaWjvR46cKAAAAAElFTkSuQmCC",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"detector = emulator.Detector(photon_counting=False)\n",
"\n",
"sampler = lw.Sampler(\n",
" hom, lw.State([1, 1]), 10000, detector=detector, random_seed=99\n",
")\n",
"results = backend.run(sampler)\n",
"\n",
"results.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Combining All Errors\n",
"Now all of the potential error source have been introduced, we can add all of the errors into a single simulation and view the effect this has. In this case we choose to use a Hadamard and CNOT gate on a pair of dual-rail encoded to qubit to create a $\\Phi^+$ bell state.\n",
"\n",
"We start by simulating the ideal case and as expected the only outputs measured are $\\ket{1,0,1,0}$ and $\\ket{0,1,0,1}$ ($\\ket{1,0}$ and $\\ket{0,1}$ in qubit language respectively)."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAI/CAYAAADz6DQnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAwo0lEQVR4nO3dfVSUdf7/8RcqoIgD3oL+QKHcEjJTsC9Ou1ne5JjYV4vOfu1O2rTSg5aypbmZlvU9diylGy3bLcNu/Ga2ZSmlISbdiGkY3pV2h4sbzpgpTJCCwvz+6DDbJCjgwMUnn49z5hyZ68PF+9pz9jrPrpm5JsDj8XgEAAAA47SyegAAAAA0DiEHAABgKEIOAADAUIQcAACAoQg5AAAAQxFyAAAAhiLkAAAADNXG6gFMUF1dreLiYnXo0EEBAQFWjwMAAH7nPB6PfvrpJ/Xo0UOtWtV93Y2Qq4fi4mJFR0dbPQYAADjHHDhwQFFRUXVuJ+TqoUOHDpJ++R/TZrNZPA0AAPi9c7vdio6O9jZIXQi5eqh5OdVmsxFyAACg2ZzpLV182AEAAMBQhBwAAIChCDkAAABDEXIAAACGIuQAAAAMRcgBAAAYipADAAAwFCEHAABgKEIOAADAUIQcAACAoQg5AAAAQxFyAAAAhiLkAAAADEXIAQAAGIqQAwAAMBQhBwAAYChCDgAAwFCEHAAAgKEIOQAAAEO1sXoA/EfMfVlWjwCcE/Y/mmz1CADgF1yRAwAAMBQhBwAAYChCDgAAwFCEHAAAgKEIOQAAAEMRcgAAAIYi5AAAAAzFfeQA4HeE+1ECzaOl3I+SK3IAAACGIuQAAAAMRcgBAAAYipADAAAwFCEHAABgKEIOAADAUIQcAACAoQg5AAAAQxFyAAAAhiLkAAAADEXIAQAAGIqQAwAAMBQhBwAAYChCDgAAwFCEHAAAgKEIOQAAAEMRcgAAAIYi5AAAAAxFyAEAABiKkAMAADAUIQcAAGAoQg4AAMBQhBwAAIChCDkAAABDEXIAAACGIuQAAAAMRcgBAAAYipADAAAwFCEHAABgKEIOAADAUIQcAACAoQg5AAAAQxFyAAAAhiLkAAAADEXIAQAAGMrSkHvwwQcVEBDg8+jTp493+/Hjx5WWlqbOnTsrNDRUKSkpcrlcPvsoKipScnKyQkJC1K1bN9177706efKkz5pNmzYpISFBwcHB6t27tzIzM5vj8AAAAJqU5VfkLrroIh08eND7+Pjjj73bpk+frjVr1mjVqlXKzc1VcXGxrrvuOu/2qqoqJScnq7KyUps3b9by5cuVmZmpOXPmeNcUFhYqOTlZQ4YMUUFBgaZNm6aJEydq/fr1zXqcAAAA/tbG8gHatFFkZOQpz5eWluqFF17QihUrNHToUEnSiy++qLi4OG3ZskWDBg3S+++/ry+++EIbNmxQRESE+vfvr4cfflgzZ87Ugw8+qKCgIC1dulSxsbFauHChJCkuLk4ff/yxMjIy5HA4ap2poqJCFRUV3p/dbncTHDkAAMDZsfyK3Ndff60ePXrovPPO00033aSioiJJUn5+vk6cOKHhw4d71/bp00c9e/ZUXl6eJCkvL08XX3yxIiIivGscDofcbrf27NnjXfPrfdSsqdlHbebPn6+wsDDvIzo62m/HCwAA4C+WhlxSUpIyMzO1bt06PfvssyosLNTll1+un376SU6nU0FBQQoPD/f5nYiICDmdTkmS0+n0ibia7TXbTrfG7Xbr2LFjtc41a9YslZaWeh8HDhzwx+ECAAD4laUvrV599dXef/fr109JSUnq1auXXn/9dbVr186yuYKDgxUcHGzZ3wcAAKgPy19a/bXw8HBdcMEF+uabbxQZGanKykqVlJT4rHG5XN731EVGRp7yKdaan8+0xmazWRqLAAAAZ6tFhVxZWZm+/fZbde/eXYmJiQoMDFROTo53+759+1RUVCS73S5Jstvt2rVrlw4dOuRdk52dLZvNpvj4eO+aX++jZk3NPgAAAExlacjdc889ys3N1f79+7V582Zde+21at26tW644QaFhYVpwoQJSk9P1wcffKD8/Hz95S9/kd1u16BBgyRJI0aMUHx8vG655Rbt2LFD69ev1+zZs5WWluZ9aXTSpEn67rvvNGPGDO3du1fPPPOMXn/9dU2fPt3KQwcAADhrlr5H7t///rduuOEG/fjjj+ratav+9Kc/acuWLerataskKSMjQ61atVJKSooqKirkcDj0zDPPeH+/devWWrt2rSZPniy73a727dsrNTVV8+bN866JjY1VVlaWpk+frieffFJRUVF6/vnn67z1CAAAgCkCPB6Px+ohWjq3262wsDCVlpbKZrM12d+JuS+ryfYN4D/2P5ps9QhNhvMI0Dya+jxS3/ZoUe+R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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"loss = lw.Parameter(0) # Define loss parameter\n",
"\n",
"r = 1 / 3\n",
"theta = np.arccos(r)\n",
"\n",
"bell_circuit = lw.PhotonicCircuit(6)\n",
"to_add = [\n",
" (1, np.pi / 2, 0),\n",
" (3, np.pi / 2, 0),\n",
" (0, theta, 0),\n",
" (2, theta, np.pi),\n",
" (4, theta, 0),\n",
" (3, np.pi / 2, 0),\n",
"]\n",
"\n",
"for m, t, p in to_add:\n",
" bell_circuit.bs(m, loss=loss, reflectivity=0.5)\n",
" bell_circuit.ps(m + 1, t)\n",
" bell_circuit.bs(m, loss=loss, reflectivity=0.5)\n",
" bell_circuit.ps(m + 1, p)\n",
"\n",
"# Then add required heralds\n",
"bell_circuit.herald(0, 0, 0)\n",
"bell_circuit.herald(0, 5, 5)\n",
"\n",
"# Define required post-selection\n",
"post_select = lambda s: sum(s[0:2]) == 1 and sum(s[2:]) == 1\n",
"\n",
"sampler = lw.Sampler(\n",
" bell_circuit,\n",
" lw.State([1, 0, 1, 0]),\n",
" 100000,\n",
" post_selection=post_select,\n",
" sampling_mode=\"input\",\n",
" random_seed=99,\n",
")\n",
"results = backend.run(sampler)\n",
"\n",
"results.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The loss parameter is then updated to introduce loss, and the source and detector attribute of the Sampler are also updated. For the source, a brightness of 80%, purity of 90% & indistinguishability of 90% is chosen and for the detector, efficiency of 80%, a dark count probability of $10^{-4}$ and non photon number resolving is used. A number of error states can then be seen to be present in the system.\n",
"\n",
"Interested users may wish to tweak these parameters to view the effect each has on the produced output result."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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ypQpU3LggQdmr732SpIsX7483bt3T79+/Vo9trq6OsuXL1/v60ybNi0rV65suS1dunRzjw4AsNGKfhz5f02aNCmPPvpo7rnnnk16nR49eqRHjx4VmgoAYPNoF0fCTjnllPzqV7/Kb3/72+y4444t22tqarJ27dqsWLGi1ePr6+tTU1OzhacEAKicohHW3NycU045JTfeeGPuuuuu1NbWtto/YsSIdOvWLXV1dS3bnnzyyTz33HMZNWrUlh4XAKBiin4cOWnSpFx77bX55S9/mW233bblPK++ffumV69e6du3b7785S9n6tSp2W677dKnT59Mnjw5o0aNWu83IwEAOoqiEXbFFVckST7+8Y+32n711VfnC1/4QpJk1qxZ6dKlSyZMmJDGxsaMGTMml19++RaeFACgsopGWHNz87s+pmfPnpk9e3Zmz569BSYCANgy2sWJ+QAA7zciDACgABEGAFCACAMAKECEAQAUIMIAAAoQYQAABYgwAIACRBgAQAEiDACgABEGAFCACAMAKECEAQAUIMIAAAoQYQAABYgwAIACRBgAQAEiDACgABEGAFCACAMAKECEAQAUIMIAAAoQYQAABYgwAIACRBgAQAEiDACgABEGAFCACAMAKECEAQAUIMIAAAoQYQAABYgwAIACRBgAQAEiDACgABEGAFCACAMAKECEAQAUIMIAAAoQYQAABYgwAIACRBgAQAEiDACgABEGAFCACAMAKECEAQAUIMIAAAoQYQAABYgwAIACRBgAQAEiDACgABEGAFCACAMAKECEAQAUIMIAAAoQYQAABYgwAIACRBgAQAEiDACgABEGAFCACAMAKECEAQAUIMIAAAoQYQAABYgwAIACRBgAQAEiDACgABEGAFCACAMAKECEAQAUIMIAAAoQYQAABYgwAIACRBgAQAEiDACgABEGAFCACAMAKECEAQAUIMIAAAoQYQAABYgwAIACRBgAQAEiDACgABEGAFCACAMAKECEAQAUIMIAAAoQYQAABXSICJs9e3aGDBmSnj17ZuTIkVmwYEHpkQAANkm7j7DrrrsuU6dOzdlnn50HH3wwH/nIRzJmzJi8+OKLpUcDAGizrqUHeDcXXXRRTjzxxHzxi19Mklx55ZW59dZb86Mf/Shnnnnm2x7f2NiYxsbGlvsrV65MkjQ0NGzWOZsaX9+sr0/nsrnX48ayftlY7WkNW79srM25ft967ebm5nd/cHM71tjY2LzVVls133jjja22H3fccc2f+tSn1vucs88+uzmJm5ubm5ubm1ux29KlS9+1c9r1kbCXXnop69atS3V1davt1dXVeeKJJ9b7nGnTpmXq1Kkt95uamvLKK69kwIABqaqq2qzz0lpDQ0MGDx6cpUuXpk+fPqXHgY1i/dKRWb/lNDc357XXXssOO+zwro9t1xHWFj169EiPHj1abevXr1+ZYUiS9OnTx5sAHZb1S0dm/ZbRt2/f9/S4dn1i/sCBA7PVVlulvr6+1fb6+vrU1NQUmgoAYNO16wjr3r17RowYkbq6upZtTU1Nqaury6hRowpOBgCwadr9x5FTp07N8ccfn/322y9///d/n4svvjirV69u+bYk7VePHj1y9tlnv+3jYegIrF86Muu3Y6hqbn4v36Es67LLLsv555+f5cuXZ999980ll1ySkSNHlh4LAKDNOkSEAQB0Nu36nDAAgM5KhAEAFCDCAAAKEGEAAAWIMACAAkQYAEABIozNZt26dXnkkUfy//7f/ys9Cmw065eOzPrtGEQYm80tt9ySYcOG5brrris9Cmw065eOzPrtGEQYm83cuXPzgQ98IHPmzCk9Cmw065eOzPrtGFwxn83ipZdeyo477pibbropn/rUp/Lss89mxx13LD0WvCfWLx2Z9dtxOBLGZvGzn/0se+21Vw4//PD8wz/8Q3784x+XHgneM+uXjsz67ThEGJvFnDlzctxxxyVJjj322FxzzTWFJ4L3zvqlI7N+Ow4fR1Jxjz76aEaMGJHnn38+AwcOzKpVq1JdXZ277rorI0eOLD0evCPrl47M+u1YHAmj4ubOnZvDDjssAwcOTJL07t0748ePd4IoHYL1S0dm/XYsIoyKWrduXX7yk5+0HAp/y7HHHpvrrrsua9euLTQZvDvrl47M+u14RBgV9eKLL2bixIkZN25cq+1jxozJ1KlTs3z58kKTwbuzfunIrN+OxzlhAAAFOBLGZtPY2JjGxsbSYwC873j/7RhEGBV1xx13ZOzYsenfv3+23nrrbL311unfv3/Gjh2bO++8s/R40GbPPPNMDjnkkNJjwAZ5/+14RBgVM3fu3IwdOzZ9+/bNrFmz8qtf/Sq/+tWvMmvWrPTr1y9jx4510UA6rFWrVmXevHmlx4D18v7bMTknjIr50Ic+lNNOOy2TJk1a7/7LL788s2bNytNPP72FJ4N3d8kll7zj/ueffz4XXHBB1q1bt4UmgvfO+2/HJMKomJ49e2bRokX58Ic/vN79Tz75ZPbdd9+88cYbW3gyeHddunTJoEGD0r179/XuX7t2bZYvXy7CaJe8/3ZMPo6kYvbcc89cddVVG9z/ox/9KHvssccWnAjeu5133jmzZs3K4sWL13u79dZbS48IG+T9t2PqWnoAOo8LL7wwRx55ZG677baMHj061dXVSZL6+vrU1dXl2Wef9R8y2q0RI0Zk4cKF+exnP7ve/VVVVfHBAe2V99+OyceRVNSSJUtyxRVX5L777mu5MGBNTU1GjRqVr3zlKxkyZEjZAWEDHnvssbz++uvZb7/91rv/zTffzLJly7Lzzjtv4cngvfH+2/GIMACAApwTBgBQgAhji6qtrc2Xv/zlLFu2rPQosNEOOeSQfOtb38rrr79eehTYaN5/2x8RxhZ1/PHHZ926dTnwwANLjwIbbaeddkpdXV1233330qPARvP+2/44JwxgIzU0NKRPnz6lxwA6OBEGAFCAjyPZYpYuXZovfelLpceADXrppZdy3nnn5eijj86oUaMyatSoHH300Tn//PPzl7/8pfR40Gbef9snR8LYYhYtWpThw4f72RfapQceeCBjxozJ1ltvvd6LXb7++uu5/fbbN3gdMWjPvP+2T66YT8XcfPPN77j/2Wef3UKTwMabPHlyPvOZz+TKK69MVVVVq33Nzc35yle+ksmTJ2f+/PmFJoQN8/7bMTkSRsV06dLlXX/apaqqyv8To13q1atXHnrooQ1+8/GJJ57IsGHD/AAy7ZL3347JOWFUzKBBg3LDDTekqalpvbcHH3yw9IiwQTU1NVmwYMEG9y9YsKDlI0pob7z/dkw+jqRi3voB5HHjxq13vx9Apj376le/mpNOOikLFy7MoYce+rZzwn74wx/mggsuKDwlrJ/3345JhFExX/va17J69eoN7t91113z29/+dgtOBO/dpEmTMnDgwMyaNSuXX355y8c2W221VUaMGJE5c+bks5/9bOEpYf28/3ZMzgkD+BtvvvlmXnrppSTJwIED061bt8ITAZ2RCAMAKMCJ+WxRX/rSl/LjH/+49BjQJtYvHZn12/44EsYW9fGPfzxLlixJv3798vDDD5ceBzaK9UtHZv22PyKMIh577LHssccepceANrF+6cis3/ZDhAEAFOASFWwxr776am655ZYcd9xxpUeBjWb90t6tXbs2N910U+bPn5/ly5cn+etFiA844ICMGzcu3bt3Lzwhf8uRMLYYPyBLR2b90p796U9/ypgxY7Js2bKMHDmy1cWG77///uy44475zW9+k1133bXwpPxfjoRRMQ0NDe+4/7XXXttCk8DGs37pyCZOnJi99947Dz30UPr06dNqX0NDQ4477rhMmjQpt99+e6EJWR9HwqiYt35AdkOam5v9gCztlvVLR7b11ltnwYIF2Wuvvda7/49//GNGjhyZ119/fQtPxjtxJIyK2XbbbfONb3wjI0eOXO/+p59+OieffPIWngreG+uXjqxfv35ZsmTJBiPsrUtT0L6IMCpm+PDhSZKDDz54vfv79evnB2Rpt6xfOrITTjghxx13XKZPn77eH6A/99xzM3ny5MJT8rdEGBXzuc99Lm+88cYG99fU1OTss8/eghPBe2f90pHNmDEj22yzTc4///z827/9W8tH683NzampqcnXv/71nHHGGYWn5G85JwwAOpHFixe3ukRFbW1t4YnYEBEGAFCAH/Bmi7rmmmvyzDPPlB4D2sT6pSObMWNGfve735Ueg//DkTC2qC5duqRbt2456aSTcumll5YeBzaK9UtHVltbm/r6+hx66KG55ZZbSo9DHAljC2tqasoTTzyRoUOHlh4FNpr1S0e2ePHivPzyy5k4cWLpUfj/ORIGAFCAS1RQccuXL8/999/f6ts5I0eOTE1NTeHJ4N1Zv3RGq1evzsKFC3PQQQeVHoX/w5EwKmb16tU5+eST8/Of/zxVVVXZbrvtkiSvvPJKmpub88///M/5/ve/n6233rrwpPB21i+dmR+gb5+cE0bFnHbaaVmwYEFuvfXWrFmzJvX19amvr8+aNWvy61//OgsWLMhpp51WekxYL+sX2NIcCaNi+vfvn1tvvTUHHHDAevf//ve/z5FHHplXX311C08G7876pSN768jthqxbty6rVq1yJKydcU4YFdPU1JTu3btvcH/37t3T1NS0BSeC9876pSNrbGzMxIkTs/fee693/5///Oecc845W3gq3o0Io2KOPPLInHTSSbnqqqsybNiwVvseeuihTJw4MUcddVSh6eCdWb90ZPvuu28GDx6c448/fr37Fy1aJMLaIeeEUTGXXXZZqqurM2LEiAwYMCBDhw7N0KFDM2DAgOy3337Zfvvtc9lll5UeE9bL+qUjO+KII7JixYoN7t9uu+1y3HHHbbmBeE+cE0bFPf7445k/f37q6+uT/PUr/qNGjcruu+9eeDJ4d9YvsKWIMACAApwTRkXU1tamqqpqo583ZcqUnHrqqZthInjvrF86Muu343IkjIqYN29em543ZMiQ7LzzzhWeBjaO9UtHZv12XCIMAKAA344EAChAhAEAFCDCAAAKEGEAAAWIMACAAkQY0Gn95S9/ycSJE7PTTjulR48eqampyZgxY/L73/8+SVJVVZWbbrppo193yJAhufjiiys7LPC+42KtQKc1YcKErF27NnPnzs0HP/jB1NfXp66uLi+//HLp0QBcJwzonFasWJH+/fvn7rvvzsEHH/y2/UOGDMmf//znlvs777xzlixZkmeeeSZTp07Nfffdl9WrV2fo0KGZOXNmRo8enST5+Mc//raLY771NnrPPfdk2rRp+cMf/pCBAwfm6KOPzsyZM7PNNttsxr8U6Kh8HAl0Sr17907v3r1z0003pbGx8W37H3jggSTJ1VdfnRdeeKHl/qpVqzJ27NjU1dXloYceyuGHH56jjjoqzz33XJLkhhtuyI477pgZM2bkhRdeyAsvvJAkeeaZZ3L44YdnwoQJeeSRR3LdddflnnvuySmnnLKF/mKgo3EkDOi0fvGLX+TEE0/MG2+8keHDh+fggw/OMccck3322SfJX88Ju/HGGzN+/Ph3fJ299torX/nKV1qCasiQIZkyZUqmTJnS8pgTTjghW221Vb7//e+3bLvnnnty8MEHZ/Xq1enZs2fF/z6gY3MkDOi0JkyYkGXLluXmm2/O4YcfnrvvvjvDhw/PnDlzNvicVatW5atf/WqGDh2afv36pXfv3nn88cdbjoRtyKJFizJnzpyWI3C9e/fOmDFj0tTUlMWLF1f4LwM6AyfmA51az54988lPfjKf/OQnM3369Jxwwgk5++yz84UvfGG9j//qV7+aO+64IxdccEF23XXX9OrVK//0T/+UtWvXvuO/Z9WqVTn55JNz6qmnvm3fTjvtVIk/BehkRBjwvrLHHnu0XJaiW7duWbduXav9v//97/OFL3whRx99dJK/xtWSJUtaPaZ79+5ve97w4cPz2GOPZdddd91sswOdi48jgU7p5ZdfziGHHJKf/OQneeSRR7J48eJcf/31Oe+88zJu3Lgkfz23q66uLsuXL8+rr76aJNltt91yww035OGHH86iRYvyuc99Lk1NTa1ee8iQIfnv//7vPP/883nppZeSJF//+tdz77335pRTTsnDDz+cp59+Or/85S+dmA9skAgDOqXevXtn5MiRmTVrVg466KDstddemT59ek488cRcdtllSZILL7wwd9xxRwYPHpxhw4YlSS666KL0798/BxxwQI466qiMGTMmw4cPb/XaM2bMyJIlS7LLLrvkAx/4QJJkn332ybx58/LUU0/lH/7hHzJs2LCcddZZ2WGHHbbsHw50GL4dCQBQgCNhAAAFiDAAgAJEGABAASIMAKAAEQYAUIAIAwAoQIQBABQgwgAAChBhAAAFiDAAgAJEGABAAf8fD9lpllScXP0AAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"loss.set(0.3)\n",
"sampler.source = emulator.Source(\n",
" brightness=0.8, indistinguishability=0.90, purity=0.90\n",
")\n",
"sampler.detector = emulator.Detector(\n",
" efficiency=0.8, p_dark=1e-4, photon_counting=False\n",
")\n",
"\n",
"results = backend.run(sampler)\n",
"results.plot()"
]
}
],
"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
}