{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "42d8d1c7", "metadata": {}, "source": [ "# Distributions" ] }, { "attachments": {}, "cell_type": "markdown", "id": "245e6641", "metadata": {}, "source": [ "QDFlow allows you to specify exactly how parameters are randomized.\n", "This is done through the `Distribution` class.\n", "\n", "Several basic distributions are provided (which are essentially wrappers of the\n", "numpy random functions), and QDFlow also allows for the definition of custom\n", "distributions if more complex behavior is needed." ] }, { "cell_type": "code", "execution_count": 1, "id": "0a2d7f9a", "metadata": {}, "outputs": [], "source": [ "import tutorial_helper\n", "from qdflow.util import distribution\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "id": "347bd909", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABEEAAADwCAYAAADvuHoXAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAARRpJREFUeJzt3QeYFGW28PEDDElyDiugGBCQJCCigCQZAbkg3FURAXEUlw9QYBGcFckrQSQ6iq6SVlnCvQsqsGQJwiBBuERZYGEBSa6SFYbQ33PO3urbPczAzNA9Her/e56y6arq7uruqde3Tr/vOVk8Ho9HAAAAAAAAolzWUB8AAAAAAABAZiAIAgAAAAAAXIEgCAAAAAAAcAWCIAAAAAAAwBUIggAAAAAAAFcgCAIAAAAAAFyBIAgAAAAAAHAFgiAAAAAAAMAVCIIAAAAAAABXIAiCoHrxxRflrrvu8lt34cIFefnll6VkyZKSJUsW6dWrF98CgKA6dOiQtTfTpk3zW7948WKpXr265MqVy7afOXOGbwJAUDVs2NAWAAilVatWWd9Hb92GIAjM4MGD7ST417/+leIn8uCDDwbsf9jvvPOOXYh069ZN/vznP0vHjh35FoAQ0vNRz//NmzeH/HvQ4+jRo0eK2/7rv/4roP+z/umnn+SZZ56R3LlzS0JCgrVHefLkCchzAwhMu6QByh9++OGG7don0b4JgOgTTv0S/TFXj6Vnz56pBhG0f4LIEhPqA0B0+9Of/iTXr1/3W7dy5Up55JFHZNCgQSE7LgDuUq5cOfn1118le/bs3nWbNm2S8+fPy7Bhw6Rp06YhPT4AKbt8+bKMHDlSJk2axEcEIKTXNPHx8VK6dGm+hSjASBAElV5w5MyZ02/dqVOnpGDBggF7jatXr0pSUlLAng9A9HF+Uc6WLZtfW6QC2R5dvHgxYM8FQGy6ml58HDt2LCgfh8fjsQApAKSmcuXKcu3aNQvIBhN9iMxDEATp5gz9mjNnjvzxj3+UO++80y4umjRpIvv37081J4jzuIMHD8rChQvt37roXH3ngiQuLk5KlChhz1etWjWZPn16ivP6x4wZI+PHj5d77rnHgiy7d+/2Tun5+9//Li+88IIUKFBAihUrJm+//bZ1co4cOSKtW7eW/PnzWz6S9957j28fSKOtW7dK8+bN7fzJmzevne8bNmy4Yb/t27fL448/blNMtG0YPny4TJ061e9cDyRnSLy2AY0aNZI77rhDfvOb38jo0aNvmhNEH9e5c2f7d+3atW2btleOuXPnSs2aNe19FC1a1NqU5EPydX/9LA4cOCAtWrSQfPnySYcOHfym9ejzVKpUyZ6nbt26smPHDtv+0Ucfyb333mttnR5LMD4bIBr84Q9/SNPFh/4goqO6nH6B9j30sTqSxJeuf+qpp2TJkiVSq1YtOzf1fPTt2wwZMsTaET2n//M//1POnj1rz6M5zIoXL27nfZcuXW54bm3rGjdubPvoMei5/+GHHwblcwHcLjP7JdpudOrUKc0B2bQcmzPlZ/Xq1fL//t//s3ZDj8+3b+Mcu/ZttM/gTLvRx9SpU8feU4UKFWT58uV+z/3Pf/7TnlO36T5FihSR3/72t/Q1fDAdBhmmHZKsWbNK3759rYOgFx16AfDtt9+muH/FihVtzn3v3r3tJP/9739v6zVQob/C6AmvQRS9cLj77rvt4kEvMjRR4euvv+73XNp4Xbp0Sbp27WodjcKFC3u3Pfvss/ZaenwabNHGTrdrJ0c7J6NGjZLPP//cjlsvfho0aMBfAXATu3btkvr169v/zPv162cjvPR80nPW+R+x0iCBBiL0f+o6ZFTza3zyySc3jAYLtNOnT8uTTz4pbdu2tRwf2kno37+/VKlSxTohKXnrrbesc/Dxxx/L0KFDrc3RiyenY6IXONo+jBgxQk6ePCkTJkyQdevWWcfGd+SIXnjFxsZKvXr1LDirHRXH2rVr5csvv5Tu3bvbfX0uvfjSz/CDDz6wDooeu7adL730kk0VBOBPz03n4uPNN99MdSi6JlzXH040aKH9C+2L6Dm3Z88emTdvnt++e/fulfbt28urr74qr7zyirUFDn2MXjToa2mfRKfhaJun/R09X/UHF72Y0XZCj23gwIHex2rAQ38x/o//+A+JiYmRr776ys5znRbstAMAIrNfov2GGTNm2PXFxIkTb/vYHNpG6LWQtiW+I0G0vdE+w3PPPWcBDG1f9N96DaMB2d/97nfy/PPPy7vvvmvtnv7Yq4FbZ7rv+vXrbX+95tJgjz5ej0F/NLrDp6/iWh7A4/EMGjTIo38OP/74Y4qfR+XKlT2PP/64/fvrr7+2fStWrOi5fPmyd58JEybY+h07dnjXde7c2VOuXDm/59L7LVu29Fs3fvx4e+xnn33mXZeUlOSpW7euJ2/evJ5z587ZuoMHD9p++fPn95w6dSrF99C1a1fvuqtXr3ruvPNOT5YsWTwjR470rj99+rQnd+7cdnyA202dOtXOnU2bNqW4vU2bNp4cOXJ4Dhw44F137NgxT758+TwNGjTwruvZs6eda1u3bvWu++mnnzyFCxe259fz91Z0v+7du6e4be7cubZd2yCHtku6bsaMGd512i6VLFnS065dO+86p+3Q93qz963tTvHixT0PPvig59dff/WuX7Bgge07cOBA7zptP3Tdm2++meL7yJkzp997/uijj2y9HpvTpqn4+Pg0fz6AW/ien9r2xMTEeF577TW/c1/7Jmrbtm2278svv+z3HH379rX1K1eu9OuD6LrFixf77ev0bfTc13bA0b59e2vXmjdv7re/9k+S929++eWXG95HbGysp3z58n7r9NidPhWAm5//oe6X+F63dOnSxZMrVy57Ld92Q/sn6T025z3Wq1fPrleStxG6bebMmd5133//va3LmjWrZ8OGDd71S5YsuaF/k1JblJiYeEN/6ev/PX7ffpVbMB0GGaa/lObIkcN7X6Oe6h//+Ee6n2vRokU2RUV/mXFo5PS1116zkroaOfXVrl07i5qm9muQQ+f/63BXvSbRqTYO/SVXf/nJyLECbqLD0JcuXSpt2rSR8uXLe9eXKlXKfoH45ptv5Ny5c95yszrlQ+fwO3QUljNFJFh0qKlOV3Fou/Twww9n6PzWTPQ6NU9/mdGpKo6WLVvKAw88YKPLktNKVynR4a++JcKdX3+0/XJ+rfFdT3sEpEzbHq0kpyO3jh8/nmIfQvXp08dvvTPiNPl5qyM4dARXSnTUiW8CZT0/tQ+ho7V86Xr95VVHgzl0BIlDR8hqxT0dyq7ntt4HENn9kgEDBtg5n9r0vPQcm0NHo/nmK/Pt2+hIDodet+j1i4529x1NklIfwrctunLlilXD0+k0+vjvvvsuQ+892hAEQZrpUDJfZcuW9btfqFAh7/Ct9NK5a/fdd58NN/WlJ7qzPXkHJjXJj0tzg+jFjM7rT74+I8cKuMmPP/4ov/zyi99wcd/zU4d564WAc57q/2STS75OLwZOnDjhXX7++efbaot0qGfyddoeZbQtUim9Xw2CJG+LdMi7M4c3LW2RKlOmTIrraY+AjF186Hmp/YfkbY3+uKKd/tvtQ6R23mr75xvc0ClzWmlKh9zr6+qPNZqXRBEEASK/X3KrgGx6ju1W7VFKfRttd9LSh9A0Azq9RvfVqT96DaTtkaYYoC36N4IgMM4vnqllSNcT2vdXUZVS1FL9eyR4cPlGOJNL6bhCeawA/GmOH/1VxFk0l4dD/2d9s3ZIhVNbpMebPHh7q+OiPQLSTy8+dMRXahcfKvkFQ6D6EGlpZzRBso7+0tEfY8eOtdEny5YtszxoSi9+AERevySl3CAakNUcg4GQWnt0O32Inj17WvEKzZOmyZ51dIq2R5oglbbo30iMClOuXDlvsrDkEUa98NCoZbNmzYL6+poBWU9M3wuK77//3u/4AGQu/eVAE2hp25Ccnp96vjpthp6nyStEqeTrNFGY7/QVZxSZ8xwpvZZy1gezPfBtCzWRcvLXpy0CQjsa5LPPPrvh4kPPS+0/7Nu3zzuCVGlSY/3lMzPOW02CqtViNBmy72iSr7/+OuivDbhJZvdLktMk6rqvJjtNnuQ0PccWTJogXivg+VbC1IIS2h7i3xgJAqO/Xug8es0cnDxCqL+6aMQztSoLgaDlJXX42ezZs73r9DU1K7vOidM5tQAyn/7ioAHQL774wq+0ml5czJw506qiaAZ0pXPsExMTZdu2bd79dEipZjL3pWUjdci4s2gpWt+2QCsvbNmyxe8x+j9ufR6d16tD3INFcwhpmbrJkyf7lb/829/+ZlUmNDcIgNDwvfjQPoNvu6HGjx/vt7+OyFCZcd46v876/hqrw861mh2AyO2XpBaQ1VwbWt0to8cWTHocyUfD6jWV5izBvzESBEY7/Tp3TE9qLRmr5d00kqnllf7yl7/YCd2qVaugfVpa6lY7NVoSVy9+NJmgRjF1fq12anyTCAIIjilTplgSseS0JKQOo9T/eWvCUM2DoeerBgl8OwD6S4r+SvvEE0/YUEynFJ3+KqqdjrQMVdeylFoeW9shLV+peTiOHTtm5Sh1CHywLyg0IaL+yqyJnzX4qsmanRK52i45Q9sBhIYORf/zn/9sv7RqOVpVrVo1+9VTf7TRgKmeuxs3brSSuZqgUEtkBpv2k/THJO0radulSd21rK/2r1KbvgMg/PslNwvIahuT3PDhw9N0bMGkpXW1ndR8IRrg0UDQ8uXLbToM/o0gCPw6FtrJf//992Xo0KE2EkOT9QwZMkT69++f6rz3QM2HW7VqlV0AaYOimZM1qZBe8GhgBEDw6UiwlOg5uHbtWomPj5cRI0bYaDEdAqodC9+hoDrEU4d+a1Wnd955x4aFdu/e3Todui55Lo+UlChRQr799lvr4Og8Vg1A6K8mjz76qI0USz70NBj0/WoQWBMwatunx//0009bcESTHQIIHU1omNLFh17YaN4QDZjOmzfPRoxpmzVo0KBMOS7ts+iPN/pjUt++fe31tXKUtoPJK8sAiJx+ya2m5yUfXaHB2bQcWzDpDzc6GkRHvOg0mMcee8yCIKlVxXKjLFonN9QHAQCIXr169bJfQfSX0dQSegEAAGQG+iUgJwgAIGCSV3bR2vQ6JFOHhRIAAQAAmYl+CVLCdBgAQMDUrVtXGjZsaBUadCrLp59+atPb3n77bT5lAACQqeiXICUEQQAAAaNVGnRevCYo1IRjDz30kAVCNNEpAABAZqJfgpSQEwQAAAAAALgCOUEAAAAAAIArEAQBAAAAAACuQE4QEavffOzYMcmXL5/NYQfcQitknz9/XkqXLi1ZsxITzSjaELgZ7Uhg0I7ArWhDAoM2BG7mSec1DUEQEQuAlClTJjO+HyAsHTlyRO68885QH0bEog0BaEdoR4DbQ1/k9tAXASTN7QhBEBEbAeI0vvnz5+fvB66hpUs1AOicA8gY2hC4Ge1IYNCOwK1oQwKDNgRudi6d1zQEQbREzv9OgdEACEEQuBHTwALz+dGGwM1oRwLz+dGOwK1oQwLz+dGGwM2ypDG1BUkAAAAAAACAKxAEAQAAAAAArkAQBAAAAAAAuAJBEAAAAAAA4AoEQQAAAAAAgCtQHSZI7npzYbr2PzSyZbAOBUAEtgu0CcDtW7Nmjbz77ruyZcsWOX78uMybN0/atGnj3f7iiy/K9OnT/R4TGxsrixcv9t7/+eefpWfPnvLVV19J1qxZpV27djJhwgTJmzevd5/t27dL9+7dZdOmTVKsWDHbv1+/fnyFYYq2GAj9uaXo6yBUGAkCAACi0sWLF6VatWqSkJCQ6j5PPvmkBUic5S9/+Yvf9g4dOsiuXbtk2bJlsmDBAgusdO3a1bv93Llz0qxZMylXrpwFWzToMnjwYPn444+D+t4AAEDGMBIECINIeHoQNQeAtGnevLktN5MzZ04pWbJkitv27Nljo0J0hEetWrVs3aRJk6RFixYyZswYKV26tHz++eeSlJQkU6ZMkRw5ckjlypVl27ZtMnbsWL9gCQAACA8EQYAIwzBeAAicVatWSfHixaVQoULSuHFjGT58uBQpUsS2JSYmSsGCBb0BENW0aVObFvPtt9/K008/bfs0aNDAAiC+U2pGjRolp0+ftudNyeXLl23xHVECAACCj+kwAADAlXQqzIwZM2TFihUWtFi9erWNHLl27ZptP3HihAVIfMXExEjhwoVtm7NPiRIl/PZx7jv7pGTEiBFSoEAB71KmTJkgvEMAAJAcI0EAAIArPffcc95/V6lSRapWrSr33HOPjQ5p0qRJUF87Pj5e+vTp4zcShEAIAADBx0gQAAAAESlfvrwULVpU9u/fb5+H5go5deqU32dz9epVqxjj5BHR25MnT/rt49xPLdeIk4skf/78fguA8KIjtmrXri358uWzUWFaXWrv3r1++1y6dMmqQ+k0Oq0apRWkkrcJhw8flpYtW8odd9xhz/PGG29YW+JLg68PPfSQtQ333nuvTJs2LVPeI+BGjARBppa2Ip8FACBcHT16VH766ScpVaqU3a9bt66cOXPGqr7UrFnT1q1cuVKuX78uderU8e7z1ltvyZUrVyR79uy2TivJVKhQIdV8IAAig06R0wCHBkI0aPGHP/zBqkHt3r1b8uTJY/v07t1bFi5cKHPnzrWpbT169JC2bdvKunXrbLtOr9MAiAZF169fb1WoOnXqZO3FO++8Y/scPHjQ9vnd735nyZZ1it7LL79sbZHmGAIQWARBwqDaR3pRgxsAgFu7cOGCd1SHc6GhlVs0p4cuQ4YMsV9t9eLkwIED0q9fP/sF1rnoqFixouUNeeWVV2Ty5MkW6NALHJ1Go5Vh1PPPP2/PExcXJ/3795edO3fKhAkTZNy4cXxFQITT6lC+dHSGjuTQwKgmRD579qx8+umnMnPmTEusrKZOnWptx4YNG+SRRx6RpUuXWtBk+fLlli+oevXqMmzYMGsvtJy2JlXW9uXuu++W9957z55DH//NN99YO0IQBAg8giAuEMwATjgFhwAA8LV582Zp1KiR976Tg6Nz587y4Ycfyvbt22X69Ok22kODGvoLr16c6HB0h/4qq4EPzRGiVWE0aDJx4kTvdv3lVy9y9NdiHS2i02kGDhxIeVwgCmnQQ2kQVWkwRIOjWjXK8cADD0jZsmWtcpQGQfRWcw75JlDWwEa3bt1k165dUqNGDdvH9zmcfXr16pXqsVBhCsg4giCIGsEMyKR32g8AIPQaNmwoHo8n1e1Lliy55XPoxY7+ynszmlB17dq1GTpGAJFBp8FpUOKxxx6TBx980FsBSkdyaCltXxrwSE8FqdT20YTJv/76q+TOnTvFfCU6Cg1A+pEYFQAAAABuQkd76XS3WbNmhcXnpBWmdGSKsxw5ciTUhwREDEaChAmmlQAAAADhR6fELViwQNasWSN33nmnd73mE0pKSrIpdb6jQbQ6jG8FqY0bN960glRqVaa0alRKo0CUTtvznboHIO0IggAAACBi8UMSgkWn0/Xs2VPmzZtnJWw1eakvzQOkVV60movmC1JaQldL4mrlKKW3f/zjH63ctiZVdSpIaYCjUqVK3n0WLVrk99y6j/McAAKLIAgAAAAApDAFRnMCffHFF5IvXz5vDg9NiKwjNPRWK0Np0mXNH6SBDQ2aaPBCk6IqTbiswY6OHTvK6NGj7TkGDBhgz+2M5NDSuO+//75VqHrppZesFPecOXOs9C6AwCMnCAAAAAAko1WkNN+GJlkuVaqUd5k9e7Z3Hy1j+9RTT9lIEC2bq1Nb/vrXv3q3Z8uWzabS6K0GR1544QXp1KmTDB061LuPjjDRgIeO/qhWrZqVyv3kk08ojwsECSNBgDRgqC0AAIC73Ky6lCNXrlySkJBgS2rKlSt3w3SX5DTQsnXr1gwdJ4D0IQgCAAAABOBHkEMjW/I5AkCYC/l0mB9++MGGhRUpUsTm1lWpUkU2b97sF4EdOHCgDT3T7U2bNpV9+/b5PcfPP/8sHTp0sHl4mplZ5+ZduHAhBO8GAAAAAACEq5COBDl9+rQ89thj0qhRI/nb3/4mxYoVswBHoUKFvPtoAqGJEyfK9OnTbb7c22+/bfPjdu/ebcPPlAZAjh8/bvPorly5Il26dJGuXbtaIiMAAAAAQOSOtGKUFaImCDJq1CgpU6aMTJ061bvOt/SUjgIZP368ZVBu3bq1rZsxY4aUKFFC5s+fL88995zs2bNHFi9eLJs2bZJatWrZPpMmTZIWLVrImDFjpHTp0iF4ZwAAAAAAINyEdDrMl19+aYGL3/72t1Y3u0aNGvKnP/3Ju/3gwYNWRkqnwDi0FFWdOnUkMTHR7uutToFxAiBK98+aNat8++23Kb7u5cuX5dy5c34LAAAAAACIbiEdCfKPf/zDSk9pbe0//OEPNprjtddekxw5ckjnzp29tbh15Icvve9s01sNoPiKiYmxWt3OPsmNGDFChgwZErT3hcCgIgsAAAAAIGpGgly/fl0eeugheeedd2wUiObxeOWVV2Ty5MlBfd34+Hir+e0sR44cCerrAQAAAAAAlwdBtOJLpUqV/NZVrFhRDh8+bP8uWbKk3Z48edJvH73vbNPbU6dO+W2/evWqVYxx9kkuZ86cVknGdwEAAAAAANEtpEEQrQyzd+9ev3V///vfpVy5ct4kqRrIWLFihXe75u/QXB9169a1+3p75swZ2bJli3eflStX2igTzR0CAAAAAAAQ8pwgvXv3lkcffdSmwzzzzDOyceNG+fjjj21RWbJkkV69esnw4cPlvvvu85bI1Yovbdq08Y4cefLJJ73TaLREbo8ePaxyDJVhALglJw6l4wAAAIAwD4LUrl1b5s2bZzk6hg4dakEOLYnboUMH7z79+vWTixcvWr4QHfFRr149K4mbK1cu7z6ff/65BT6aNGliVWHatWsnEydODNG7AgAAAAAA4SikQRD11FNP2ZIaHQ2iARJdUqOVYGbOnBmkIwQAAAAAd6FSI6JVyIMgAAAAgIMLLwBA1CZGBYCbWbNmjbRq1cry++iosPnz5/tt93g8MnDgQKs0lTt3bmnatKns27fPbx+tFKVT7LQKVMGCBSUuLk4uXLjgt8/27dulfv36Ns2uTJkyMnr0aL4YAAAAIAoRBAEQtjQfULVq1SQhISHF7Rqs0Pw/mhRZq0blyZNHYmNj5dKlS959NACya9cuWbZsmSxYsMACK5pjyLfiVLNmzawqlVaZevfdd2Xw4MHeBM0AAAAAogfTYQCErebNm9uSEh0FoomUBwwYIK1bt7Z1M2bMkBIlStiIEa0QtWfPHkukvGnTJqlVq5btM2nSJGnRooWMGTPGRphoYuWkpCSZMmWK5MiRQypXrizbtm2TsWPH+gVLAAAAAEQ+RoIAiEgHDx6UEydO2BQYR4ECBaROnTqSmJho9/VWp8A4ARCl+2sVKR054uzToEEDC4A4dDTJ3r175fTp05n6ngAAAAAEFyNBAEQkDYAoHfnhS+872/S2ePHifttjYmKsopTvPlqeO/lzONsKFSp0w2tfvnzZFt8pNQAAAADCHyNBACCdRowYYaNOnEWTqQIAAAAIf4wEARCRSpYsabcnT5606jAOvV+9enXvPqdOnfJ73NWrV61ijPN4vdXH+HLuO/skFx8fL3369PEbCRLqQEh6S0oeGtkyaMcCAAAAhCtGggCISDqFRYMUK1as8AtGaK6PunXr2n29PXPmjFV9caxcuVKuX79uuUOcfbRizJUrV7z7aCWZChUqpDgVRuXMmdNK7vouAAAAAMIfQRAAYevChQtWqUUXJxmq/vvw4cOSJUsW6dWrlwwfPly+/PJL2bFjh3Tq1MkqvrRp08b2r1ixojz55JPyyiuvyMaNG2XdunXSo0cPqxyj+6nnn3/ekqLGxcVZKd3Zs2fLhAkT/EZ6AAAAAIgOTIcBELY2b94sjRo18t53AhOdO3eWadOmSb9+/eTixYtWylZHfNSrV89K4ubKlcv7GC2Bq4GPJk2aWFWYdu3aycSJE73bNafH0qVLpXv37lKzZk0pWrSoDBw4kPK4AAAAQBRiJAiAsNWwYUPxeDw3LBoAUToaZOjQoVbF5dKlS7J8+XK5//77/Z5DK8HMnDlTzp8/L2fPnpUpU6ZI3rx5/fapWrWqrF271p7j6NGj0r9//0x9nwAAIDzplNlWrVrZCFLtd8yfP99v+4svvmjrfRcdhepLc5F16NDBps8WLFjQRp/qaFdf27dvl/r169sPOZpnbPTo0Zny/gA3YiQIAAAAkMlJqklQHRl0xGm1atXkpZdekrZt26a4jwY9pk6d6pc7zJcGQI4fP245xzQHWZcuXWzEqf5I4+Q0a9asmTRt2lQmT55sU3z19TRgovsBCCyCIAAAAACQgubNm9tyMxr0SK2i3J49e2yq7qZNm6RWrVq2btKkSdKiRQsZM2aMjTDRqbtJSUk2WlXzlFWuXNlyoI0dO5YgCBAETIcBAAAAgAxatWqVFC9e3CrLdevWTX766SfvtsTERBvR4QRAlI740DxlWtHO2adBgwYWAHHExsbK3r175fTp0ym+5uXLl20Eie8CIG0IggAAAABABuhUmBkzZsiKFStk1KhRsnr1ahs5cu3aNduuecs0QOIrJibGcpbpNmefEiVK+O3j3Hf2SW7EiBGW3N1ZNI8IgLRhOgwAAAAAZMBzzz3n/XeVKlUs2fo999xjo0O0Ml2wxMfHe6vmKR0JQiAESBtGggAAAABAAJQvX16KFi0q+/fvt/uaK+TUqVN++1y9etUqxjh5RPT25MmTfvs491PLNaJ5SLTajO8CIG0IggAAAFeWttSS2wMHDpRSpUpJ7ty5bZ7+vn37/PahtCWA9Dh69KjlBNF2RdWtW1fOnDkjW7Zs8e6zcuVKuX79utSpU8e7j7ZXWjnGoZVkNMdIoUKF+AKAACMIAgAAorq0ZUJCQorbR48eLRMnTrSSlJqgME+ePJaM8NKlS36lLXft2mUXJAsWLLALFd+SlU5py3LlytlFzrvvviuDBw+Wjz/+OFPeI4DgunDhglVq0UUdPHjQ/n348GHb9sYbb8iGDRvk0KFDlhekdevWcu+991pboipWrGh5Q1555RXZuHGjrFu3Tnr06GHTaDRAq55//nlLihoXF2ftzezZs2XChAl+010ABA45QQAAgOtKW+ookPHjx8uAAQPsokVpckNNRqgjRvQChdKWADZv3iyNGjXyfhBOYKJz587y4Ycfyvbt22X69Ok22kODGhoUHTZsmE1XcWgJXA18aI4QrQrTrl07C8A6NLHp0qVLpXv37lKzZk2bTqOj1HwDrgAChyAIAABwHf01V6su6BQY3wsRHZ6u5So1CHKr0pZPP/10qqUttUqElrZkKDsQ2Ro2bGhB09QsWbLkls+hlWBmzpx50300oeratWszdIwAMmE6jCb88a1/7dAIqG4D4F60DwAioR1xyk6mVJbSt2xlMEpbqsuXL9tUGt8FQGDQFwEQ8CCIznlzal8n/x/6Dz/8kJGnBBAlaB8A0I7c2ogRI2zkibNQ2hKgLwIgDKfDfPnll35Dv/R/2g4NimgyoLvuuiuwRwggItA+RJa73lyY5n0PjWwZ1GMBQtGOOGUntQylU8XBuV+9evWglrZU8fHxfkkPdSQIgRDg9tAXARDwIEibNm3sVsvMaTIgX9mzZ7eOyXvvvZeepwQQJWgfAERSO3L33XdbkEIDK07QQwMRmuujW7duN5S21GSFqZW2fOutt6y0pR5jWktbatJE38SJAG4ffREAAQ+C6P/0nY7Dpk2bLHMxANA+AAiEQPcztHzl/v37vfed0paa06Ns2bLSq1cvGT58uNx33332mm+//bZVd3AupHxLW2oZXQ10pFTacsiQIVbasn///rJz504rbTlu3LjbOnYA6ce1CoCgVYfRTgQA0D4ACIZA9TNuVtpy2rRp0q9fP7l48aKVodQRH/Xq1ZPFixdLrly5vI+htCUQebhWARCUErk6fFQXnSvrRF0dU6ZMyejTAogCtA8AwqEduVVpS512M3ToUFtSQ2lLIDLRFwEQ0CCIDvvUDkOtWrUsmZh2IgCA9gFAINDPAEAbgowmdFckdUfAgyA6L1aHkXbs2FECZeTIkZYp/fXXX5fx48fbukuXLsnvf/97mTVrlpXfjY2NlQ8++EBKlCjhfdzhw4ctgdnXX38tefPmtSGuWnYuJibDg1wA3IZgtA8A3IV2BABtCIBgyZqRByUlJcmjjz4asIPQ5GcfffSRVK1a1W9979695auvvpK5c+fK6tWr5dixY9K2bVu/cnktW7a041m/fr1Mnz7dLr4GDhwYsGMDENr2AYD70I4AoA0BEFZBkJdffllmzpwZkAPQzO0dOnSQP/3pT36l5M6ePSuffvqpjB07Vho3bmyl6aZOnWrBjg0bNtg+S5culd27d8tnn31m5e2aN28uw4YNk4SEBOtAAch8gWwfALgT7QgA2hAAwZKhOSM6TeXjjz+W5cuX2+iN7Nmz+23XwEVade/e3UZzNG3a1MrUObZs2WKl6HS944EHHrCSdomJifLII4/YbZUqVfymx+iUGZ0es2vXLqlRo0ZG3h6A2xDI9gHhgXm4yGy0IwBoQwCEVRBk+/btNvJC7dy5029bepKkaq6P7777zqbDJHfixAnJkSOHFCxY0G+9Bjx0m7OPbwDE2e5sS43mF9HFce7cuTQfM4DMaR8AuBftCADaEABhFQTRJKS368iRI5YEddmyZZIrVy7JTJo4VTPPAwi8QLQPANyNdgQAbQiAYAlZCRWd7nLq1Cl56KGH/BKdrlmzRt5//31ZsmSJ5fU4c+aM32iQkydPSsmSJe3fertx40a/59XtzrbUaBWaPn36+I0EKVOmTEDfHwC4VXqmz1DCDgAAAGEfBGnUqNFNh7WvXLnyls/RpEkT2bFjh9+6Ll26WN6P/v37W1BCcwmsWLFC2rVrZ9v37t1rJXHr1q1r9/X2j3/8owVTihcvbut0ZEn+/PmlUqVKqb52zpw5bQEQeIFoHwC4G+1I9ElvbiHgdtCGAAh4EMSZ7+/QBKbbtm2z+f+dO3dO03Pky5dPHnzwQb91efLkkSJFinjXx8XF2YiNwoULW2CjZ8+eFvjQpKiqWbNmFuzo2LGjjB492vKADBgwwJKtEuQAQiMQ7QMAd6MdAUAbAiCsgiDjxo1Lcf3gwYOt5G2g6OtkzZrVRoJoIlOt/PLBBx94t2fLlk0WLFhg1WA0OKJBFL3IGjp0aMCOAUD6z9vMaB8ARC/aEQC0IQAiIifICy+8IA8//LCMGTMmQ49ftWqV331NmJqQkGBLasqVKyeLFi3K0OsByDy32z4AAO0IAPoiAG5XVgmgxMTETK/0AiAy0D4AoB0BEEr0RQBkeCRI27Zt/e57PB45fvy4bN68Wd5++20+WcDFaB8A0I4ACCX6IgACHgQpUKCA333N21GhQgXLxaHJSgG4F+0DANoRAKFEXwRAwIMgU6dOzcjDALgA7QMA2hEAoURfBEDQcoJs2bJFPvvsM1u2bt16O08FIMrQPgCgHQEQ6X2RNWvWSKtWraR06dKSJUsWmT9//g1pAQYOHCilSpWS3LlzS9OmTWXfvn1++/z888/SoUMHyZ8/vxQsWFDi4uJuqJi3fft2qV+/vuVXLFOmjIwePTpDxwsgSCNBTp06Jc8995xVc9ETWZ05c0YaNWoks2bNkmLFimXkaQFEAdoHpMddby5M1/6HRrbkA3YB2hEA4dKGXLx4UapVqyYvvfTSDblGlAYrJk6cKNOnT5e7777b8iPGxsbK7t27vQUjNACi+ROXLVsmV65ckS5dukjXrl1l5syZtv3cuXOWUkADKJMnT5YdO3bY6+mx634AwmAkSM+ePeX8+fOya9cui2zqsnPnTjuBX3vttQAfIoBIQvsAgHYEQLT0RZo3by7Dhw+Xp59++oZtOgpk/PjxMmDAAGndurVUrVpVZsyYIceOHfOOGNmzZ48sXrxYPvnkE6lTp47Uq1dPJk2aZMEY3U99/vnnkpSUJFOmTJHKlStbAEePc+zYsQH6RADc9kgQPZGXL18uFStW9K6rVKmSJCQkkBgVcDnaBwC0I8CtMRIu8vsiBw8elBMnTtgIDt+krBrs0HK8GszQWx3RUatWLe8+ur8Wlvj2228tuKL7NGjQQHLkyOHdR0eTjBo1Sk6fPi2FChUK2DEDyGAQ5Pr165I9e/Yb1us63QbAvWgfANCOAHBDX0QDIKpEiRJ+6/W+s01vixcv7rc9JiZGChcu7LePTqVJ/hzOtpSCIJcvX7bFoaNcAARxOkzjxo3l9ddf9w7hUj/88IP07t1bmjRpkpGnBBAlaB8A0I4ACCU39EVGjBhho06cRZOpAghiEOT999+3aONdd90l99xzjy0avdR1OscNgHvRPgCgHQHghr5IyZIl7fbkyZN+6/W+s01vNVGrr6tXr1qeEt99UnoO39dILj4+Xs6ePetdjhw5ErD3BUS7DE2H0Ujjd999Z3Ptvv/+e1unc+5858MBcCfaBwC0IwDc0BfRwIoGKVasWCHVq1e3dRpo0Vwf3bp1s/t169a1yjRarrdmzZq2buXKlTYtR3OHOPu89dZbVjnGmcajlWQqVKiQaj6QnDlz2gIgyEEQPWF79OghGzZssDrXTzzxhC1KI5CazVjLOmmNawDuQvuAzEAiwehGOwIg3NqQCxcuyP79+/2SoW7bts1yepQtW1Z69epl1WPuu+8+b4nc0qVLS5s2bbzBlyeffFJeeeUVe20NdOgxatJU3U89//zzMmTIEImLi5P+/ftbJZsJEybIuHHj+IMAQj0dRktA6QmsjUpyOhft1VdfpZQT4FK0DwBoRwBEW19k8+bNUqNGDVtUnz597N8DBw60+/369bOSvF27dpXatWtb0ESr0+TKlcv7HFoC94EHHrB8JC1atLAyuR9//LHfsS1dutQCLDpa5Pe//709vz4ngBAHQf7nf/7HIpmp0ZJTOtQLgPvQPgCgHQEQbX2Rhg0bisfjuWGZNm2abc+SJYsMHTrUqrhcunTJpuDcf//9fs+ho0Zmzpwp58+ftxEpU6ZMkbx58/rtU7VqVVm7dq09x9GjR21ECIAwCIJogp6Uyk35lnv68ccfA3FcACIM7QMA2hEAoURfBEDAc4L85je/sTlq9957b4rbt2/fLqVKlUrPUwKIEqFoHwYPHmxzaH1pEjEnCZr+mqJDSmfNmiWXL1+W2NhY+eCDD6REiRLe/Q8fPmzJy77++mv7VaZz585Wdk6DugAyF/0MALQhyOwcYodGtuRDd5l0jQTROWya7EcvLJL79ddfZdCgQfLUU08F8vgARIhQtQ+a5Oz48ePe5ZtvvvFu6927t3z11Vcyd+5cWb16tRw7dkzatm3r3X7t2jVp2bKlJCUlyfr162X69Ok2vNWZ5wsgc9HPAEAbAiDY0vVT54ABA+Svf/2rzXPTrMb6i6vSX10TEhLsgkLLOwFwn1C1DzpiQ8vTJadzbj/99FObg9u4cWNbN3XqVMvSrlnjH3nkEUtCtnv3bpu/q6NDtLzdsGHDbB6ujjLJkSNHwI8XQOroZwC4HbQhAAIeBNGLBP21VIeOx8fHW1IgJyGQDjPXCx3fYeYA3CNU7cO+ffusxJxmYa9bt65NZdGSdZr4TMvQNW3a1LuvZmbXbYmJiRYE0dsqVar4HZceq76HXbt2eTPBA8gc9DMA0IYACLZ0T3ovV66cLFq0SE6fPm01s/VCR+tiFypUKDhHCCBiZHb7UKdOHZu+oqNOdCqM5gepX7++5SbRLO06kqNgwYI3XGTpNqW3yQMzzn1nn5RofhFdHOfOnQvwOwPci34GANoQAMGU4cx/elGjtbABIFTtQ/Pmzf1Ky2lQRC+g5syZI7lz5w7a6+pok+QJWeGuJGqKRGrBRT8DAG0IgGCg/AGAqKGjPjQniY5CeeKJJyzh6ZkzZ/xGg2j5PCeHiN5u3LjR7zl0u7MtNTrdp0+fPn4jQcqUKROEd4TMDmwAAAAguqWrOgwAhLMLFy7IgQMHrBRvzZo1JXv27LJixQrv9r1791pJXM0dovR2x44dcurUKe8+y5Ytk/z580ulSpVSfZ2cOXPaPr4LAAAAgPDHSBAAEatv377SqlUrmwKj5W+1DG+2bNmkffv2UqBAAYmLi7MRG4ULF7ZARc+ePS3woUlRVbNmzSzY0bFjRxk9erTlAdHM8t27d7dABwAAAIDowkgQABHr6NGjFvDQxKjPPPOMFClSxMrfFitWzLaPGzdOnnrqKWnXrp00aNDAprhoGV+HBkwWLFhgtxoceeGFF6RTp04ydOjQEL4rAJlJy2FrFSvfRStJOS5dumSBUW1f8ubNa+2JM23OoSPMWrZsKXfccYcUL15c3njjDbl69SpfJAAAYYiRIAAi1qxZs266XcvmamleXW5ViQJILxKpRo/KlSvL8uXLvfdjYv6ve9S7d29ZuHChzJ0710aY9ejRQ9q2bSvr1q2z7deuXbMAiAZZtUy4VqrSYKpOx3vnnXdC8n4AAEDqCIIAAABX06BHSsmQz549K59++qnMnDlTGjdubOumTp0qFStWtFFnOrVu6dKlsnv3bguiaInt6tWry7Bhw6R///42ykRLdQMAgPDBdBgAAOBq+/btk9KlS0v58uWlQ4cONr1FbdmyRa5cuSJNmzb17qtTZcqWLSuJiYl2X2+rVKliARBHbGysVY3atWtXqq95+fJl28d3AQAAwcdIEAAAwmz6zKGRLYN6LPg/derUkWnTplluIZ3KMmTIEKlfv77s3LnTkiXrSA7fMttKAx66TemtbwDE2e5sS82IESPstSIV5acBAJGKIAgAABGOAEvGNW/e3PvvqlWrWlBEcwXNmTNHcufOLcESHx9v1ascOhKkTJkyQXs9AAAQBtNh9FeQ2rVrS758+Sybeps2bWTv3r1++5CVHQAAZBYd9XH//ffL/v37LU9IUlKSnDlzxm8frQ7j5BDR2+TVYpz7KeUZcWgZbi3d7bsAAIAoD4KsXr3ays5pcrFly5bZvNtmzZrJxYsX/bKyf/XVV5aVXfc/duyYZWV3OFnZtZOiWdmnT59uw1oHDhwYoncFAAAi1YULF+TAgQNSqlQpqVmzplV5WbFihXe7/lijOUO0rLbS2x07dsipU6e8+2ifRoMalSpVCsl7AAAAYTodZvHixX73NXihI0I0EVmDBg3Iyg4AAIKqb9++0qpVK5sCoz+0DBo0SLJlyybt27e3krhxcXE2baVw4cIW2OjZs6cFPrQyjNIfbzTY0bFjRxk9erTlARkwYID9yKOjPQAAQHgJq5wgWopOaUcjLVnZtQOSWlb2bt26WVb2GjVqpJiRXRcHGdkBAG5JOpne5472JK1Hjx61gMdPP/0kxYoVk3r16tkIVf23GjdunGTNmlXatWtnfQftY3zwwQfex2vAZMGCBdbv0OBInjx5pHPnzjJ06NAQvisAABD2QZDr169Lr1695LHHHpMHH3zQ1gUrK3ukZ2QHAACBMWvWrJtuz5UrlyQkJNiSGh1FsmjRIr4SAAAiQEhzgvjSYaNaju5WnZFAZWTXUSfOcuTIkaC/JgAAAAAACK2wGAnSo0cPG0q6Zs0aufPOO73rfbOy+44GSZ6VfePGjenKyq5zdJmnCwAAgEjBVDYAiIKRIB6PxwIg8+bNk5UrV8rdd9/tt52s7AAAAADC1eDBgyVLlix+i+YwdFy6dMlGvBcpUkTy5s1r+YWSl9XWilNa7fKOO+6wIhFvvPGGXL16NQTvBnCHkI4E0QZh5syZ8sUXX0i+fPm8OTw0G3vu3LnJyg4AAAAgrFWuXFmWL1/uvR8T83+XWL1795aFCxfK3Llz7dpGfwBu27atrFu3zrZfu3bNAiA6gn39+vVy/Phx6dSpk5Xnfuedd0LyfoBoF9IgyIcffmi3DRs29Fs/depUefHFF+3fZGUHAAAAEK406JHSNHzNPfjpp5/aj76NGzf2XudUrFjRqlBppculS5fK7t27LYiixR2qV68uw4YNk/79+9soEy0SASCKgiA6HeZWyMoOAAAAIFzt27dPSpcubdctWipbK1GWLVtWtmzZIleuXJGmTZt699WpMrotMTHRgiB6W6VKFb9ql1qKW8tu79q1S2rUqBExJdgjFfl23CcsEqMCAAAAQKSpU6eOTJs2TSpUqGBTWYYMGSL169e3qpc61V9HcvgWeFAa8HDSAOitbwDE2e5sS83ly5dtcZw7dy7A7wyIXgRBAAAAACADmjdv7v131apVLShSrlw5mTNnjuU4DBYdbaIBFwARVh0GAAAAAKKFjvq4//77Zf/+/ZYnJCkpSc6cOeO3j1aHcXKI6G3yajHO/ZTyjDji4+Mt54izHDlyJCjvB4hGBEEAAAAAIAAuXLggBw4ckFKlSknNmjWtysuKFSu82/fu3WslcTV3iNLbHTt2yKlTp7z7LFu2TPLnzy+VKlVK9XVy5sxp+/guANKG6TAAAAAAkAF9+/aVVq1a2RSYY8eOyaBBgyRbtmzSvn17K4kbFxcnffr0kcKFC1ugomfPnhb40KSoqlmzZhbs6Nixo4wePdrygAwYMEC6d+9ugQ4AgUcQBAAAAAAy4OjRoxbw+Omnn6RYsWJSr149K3+r/1bjxo2TrFmzSrt27SyRqVZ++eCDD7yP14DJggULrBqMBkfy5MkjnTt3lqFDh/J9AEFCEAQAAAAAMmDWrFk33a5lcxMSEmxJjY4iWbRoEZ8/kEnICQIAAAAAAFyBIAgAAAAAAHAFgiAAAAAAAMAVyAkCAAAAuevNhXwKAICoRxAEAAAAAIAgBIwPjWzJ5xpmmA4DAAAAAABcgSAIAAAAAABwBabDAAAAAC4ess9wfQBuwkgQAAAAAADgCgRBAAAAAACAKzAdBgAAAACAIGBqWvhhJAgAAAAAAHAFgiAAAAAAAMAVCIIAAAAAAABXIAgCAAAAAABcgSAIAAAAAABwBYIgAAAAAADAFSiRCwAA4PKyjAAAuAUjQQAAAAAAgCswEgQAAAAAgAgbwXdoZMugHUs0IwgCAAAAuBgXXgDchOkwAAAAAADAFRgJAgAAAABAhGEUl8uDIAkJCfLuu+/KiRMnpFq1ajJp0iR5+OGHQ31YACII7QiAcG5DqPYCRD/6Igim9Px/5FAU5xuJiiDI7NmzpU+fPjJ58mSpU6eOjB8/XmJjY2Xv3r1SvHjxUB8egAhAOwKANgRIGy6kgoO+CJA5sng8Ho9EOA181K5dW95//327f/36dSlTpoz07NlT3nzzzVs+/ty5c1KgQAE5e/as5M+fP8V9+PUFkehWEdy0/O27xe20I2n9HGlHEIloR9KGvghAG3K76Isgkh0K4ciR9F7TRPxIkKSkJNmyZYvEx8d712XNmlWaNm0qiYmJIT02AJGBdgQAbQiAUKIvgkh3VzrL+4YywBLxQZB//etfcu3aNSlRooTfer3//fffp/iYy5cv2+LQiJETQUrN9cu/BOyYgcxys79p3+1RMCAsU9uRjLQhinYEkYh25NboiwC0IbeLvgiQeX2RiA+CZMSIESNkyJAhN6zXoe9ANCkwPm37nT9/3oaQIW1oQ+AmtCPBQTsCt6ANCQ7aELhJoNuRiA+CFC1aVLJlyyYnT570W6/3S5YsmeJjdOqMJlJ16Nz/n3/+WYoUKSJZsmRJMbKkAZIjR45Edd4E3qf7vk+NlmpjUbp0aXGz9LYj6W1DFOdXdOH7/D+0I5nTF8ksbvnbduP7Ddf3ShuSeX0RuOe8ctvnf/jwYfu7T+s1TcQHQXLkyCE1a9aUFStWSJs2bbyNgN7v0aNHio/JmTOnLb4KFix4y9fSP2w3/HHzPt31fTICJP3tSEbbkLR8H9GC9xldaEfCpy+SWdxyDrvx/Ybje6Uvkrl9EbjjvHKTAgUKpOvzj/ggiNIoaOfOnaVWrVry8MMPW4ncixcvSpcuXUJ9aAAiBO0IANoQAKFEXwTIHFERBHn22Wflxx9/lIEDB8qJEyekevXqsnjx4huSHAIA7QgA+iIAwhHXNEDmiIogiNJhYqkNOb1dOtRs0KBBNww5iza8z+jilu8zkGhHbp9b/u54n8jsNiSzuOVv243v103vNZJFQzviJpxXkfn5Z/G4vTYmAAAAAABwhayhPgAAAAAAAIDMQBAEAAAAAAC4AkEQAAAAAADgCgRB/ldCQoLcddddkitXLqlTp45s3Lgx1Q9t2rRpkiVLFr9FHxfu1qxZI61atZLSpUvbMc+fP/+Wj1m1apU89NBDlmzm3nvvtfcebe9T32Py71MXrTQUzkaMGCG1a9eWfPnySfHixa2m/N69e2/5uLlz58oDDzxgf7NVqlSRRYsWZcrxukG0tyNuaUPc0o7QhuB227FIlpH2LFJl9FwHwHkVCUaOHGnteK9evdL8GIIgIjJ79myry62ZZb/77jupVq2axMbGyqlTp1L94PLnzy/Hjx/3Lv/85z8l3F28eNHem3Zw0uLgwYPSsmVLadSokWzbts3+sF5++WVZsmSJRNP7dGiHwPc71Y5COFu9erV0795dNmzYIMuWLZMrV65Is2bN7P2nZv369dK+fXuJi4uTrVu3WkdIl507d2bqsUcjN7QjbmlD3NKO0IYgEO1YpMroOR6JMnKuA+C8igSbNm2Sjz76SKpWrZq+B2p1GLd7+OGHPd27d/fev3btmqd06dKeESNGpLj/1KlTPQUKFPBEMv3q582bd9N9+vXr56lcubLfumeffdYTGxvriab3+fXXX9t+p0+f9kSyU6dO2ftYvXp1qvs888wznpYtW/qtq1OnjufVV1/NhCOMbm5rR9zShripHaENQXrbsWiRlnM8mqTlXAfAeRXuzp8/77nvvvs8y5Yt8zz++OOe119/Pc2Pdf1IkKSkJNmyZYs0bdrUGxjKmjWr3U9MTEw1eHThwgUpV66clClTRlq3bi27du2SaKPv3/dzUfqL0M0+l0hWvXp1KVWqlDzxxBOybt06iTRnz56128KFC6e6j9u+08xCO5IyN/69RXI7QhvibhltxxB50nKuA+C8Cnc6wk1HHCfva6aF64Mg//rXv+TatWtSokQJvw9G76c2l7tChQoyZcoU+eKLL+Szzz6T69evy6OPPipHjx6VaKLvP6XP5dy5c/Lrr79KtNALlsmTJ8t///d/26KBrYYNG9pQ4Eihf4M61eCxxx6TBx98MN3faTjnLYgEtCPubkOioR2hDUFG2jFEnrSe6wA4r8LZrFmzrI+lOY8yIibgR+QCdevWtcWhAZCKFSvafKRhw4aF9NiQfhrU0sX3+zxw4ICMGzdO/vznP0dMJFTzenzzzTehPhSkEe1IdIn0doQ2BHAHznWA8yrSHTlyRF5//XXLcZTRogKuHwlStGhRyZYtm5w8edLvg9H7JUuWTNOHmD17dqlRo4bs379foom+/5Q+F03mmDt3bolmDz/8cMR8nz169JAFCxbI119/LXfeeWeGvtO0/q0jZbQj6ft7c0MbEkntCG0IAtWOIXrOdQCcV+FKp25qwm6tPhgTE2OLJoCeOHGi/VtHNd6K64MgOXLkkJo1a8qKFSv8hgrqfd/RHjejH/SOHTtsOHQ00ffv+7kojbil9XOJZFrJIty/T83lph2aefPmycqVK+Xuu+++5WPc/J0GE+1Iytz+9xbu7QhtCALdjiF6znUAnFfhqkmTJnbtrf0sZ6lVq5Z06NDB/q0B/VsKasrWCDFr1ixPzpw5PdOmTfPs3r3b07VrV0/BggU9J06csO0dO3b0vPnmm979hwwZ4lmyZInnwIEDni1btniee+45T65cuTy7du3yhHsG3a1bt9qiX/3YsWPt3//85z9tu75Hfa+Of/zjH5477rjD88Ybb3j27NnjSUhI8GTLls2zePFiTzS9z3Hjxnnmz5/v2bdvn2fHjh2WWThr1qye5cuXe8JZt27drLrIqlWrPMePH/cuv/zyi3ef5H+769at88TExHjGjBlj3+mgQYM82bNnt/eN2+OGdsQtbYhb2hHaEKS3HYsmtzrHo0laznUAnFeRLL3VYQiC/K9JkyZ5ypYt68mRI4eViNuwYYPfh9q5c2fv/V69enn3LVGihKdFixae7777zhPunBKOyRfnvemtvtfkj6levbq91/Lly1tZz2h7n6NGjfLcc889dgFauHBhT8OGDT0rV670hLuU3qMuvt9R8r9dNWfOHM/9999v36mWL124cGEIjj46RXs74pY2xC3tCG0I0tuORZNbnePRJC3nOgDOKzcFQbLofzJj2AoAAAAAAEAouT4nCAAAAAAAcAeCIAAAAAAAwBUIggAAAAAAAFcgCAIAAAAAAFyBIAgAAAAAAHAFgiAAAAAAAMAVCIIAAAAAAABXIAgCAAAAAABcgSAIQqZhw4bSq1cvvgEAtCMAQoK+CADaEfchCIIMadWqlTz55JMpblu7dq1kyZJFtm/fzqcLgHYEQFDQFwFAO4KMIAiCDImLi5Nly5bJ0aNHb9g2depUqVWrllStWpVPFwDtCICgoC8CgHYEGUEQBBny1FNPSbFixWTatGl+6y9cuCBz586VNm3aSPv27eU3v/mN3HHHHVKlShX5y1/+ctPn1NEj8+fP91tXsGBBv9c4cuSIPPPMM7a+cOHC0rp1azl06BDfIhCBaEcA0IYACCX6Iu5EEAQZEhMTI506dbIAhcfj8a7XAMi1a9fkhRdekJo1a8rChQtl586d0rVrV+nYsaNs3Lgxw5/4lStXJDY2VvLly2dTbtatWyd58+a1aTlJSUl8k0CEoR0BQBsCIJToi7gTQRBk2EsvvSQHDhyQ1atX+02FadeunZQrV0769u0r1atXl/Lly0vPnj0tWDFnzpwMv97s2bPl+vXr8sknn9jIkooVK9rrHT58WFatWsU3CUQg2hEAtCEAQom+iPsQBEGGPfDAA/Loo4/KlClT7P7+/ftthIbO0dXRIMOGDbNghU5b0REbS5YssYBFRv3P//yPvYaOBNHn00Wf+9KlSxaMARB5aEcA0IYACCX6Iu4TE+oDQGTTgIeO8khISLBRGffcc488/vjjMmrUKJkwYYKMHz/eAiF58uSxcrg3m7aiOUF8p9Y4U2B8843oFJvPP//8hsdqfhIAkYl2BABtCIBQoi/iLgRBcFs0Senrr78uM2fOlBkzZki3bt0smKH5OjRpqeYGUTqN5e9//7tUqlQp1efSQMbx48e99/ft2ye//PKL9/5DDz1kU2KKFy8u+fPn55sDogTtCADaEAChRF/EXZgOg9uiU1KeffZZiY+PtwDGiy++aOvvu+8+K6G7fv162bNnj7z66qty8uTJmz5X48aN5f3335etW7fK5s2b5Xe/+51kz57du71Dhw5StGhRC67otJuDBw9aLpDXXnstxVK9ACID7QgA2hAAoURfxF0IgiAgw8dOnz5tlVtKly5t6wYMGGAjN3Rdw4YNpWTJklY292bee+89KVOmjNSvX1+ef/55S6yq5XUd+u81a9ZI2bJlpW3btpYYVV9bc4IwMgSIbLQjAGhDAIQSfRH3yOJJnoQBAAAAAAAgCjESBAAAAAAAuAJBEAAAAAAA4AoEQQAAAAAAgCsQBAEAAAAAAK5AEAQAAAAAALgCQRAAAAAAAOAKBEEAAAAAAIArEAQBAAAAAACuQBAEAAAAAAC4AkEQAAAAAADgCgRBAAAAAACAKxAEAQAAAAAA4gb/H740TgQ+hxyoAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Simple distributions built into QDFlow\n", "uniform_dist = distribution.Uniform(0.5, 2)\n", "log_uniform_dist = distribution.LogUniform(0.5, 2)\n", "normal_dist = distribution.Normal(1, 0.5)\n", "log_normal_dist = distribution.LogNormal(0, 0.5)\n", "\n", "dists = [uniform_dist, log_uniform_dist, normal_dist, log_normal_dist]\n", "\n", "num_samples = 10000 # How many times to sample from each distribution\n", "\n", "rng = np.random.default_rng(seed=2)\n", "\n", "# Sample from each distribution\n", "samples = [dist.draw(rng, num_samples) for dist in dists]\n", "\n", "# Plot results\n", "fig, ax = plt.subplots(1, 4, figsize=(11,2.5))\n", "for i in range(4):\n", " tutorial_helper.plot_dist_data(fig, ax[i], samples[i], bins=15)\n", " ax[i].set_title([\"Uniform\",\"Log-Uniform\",\"Normal\",\"Log-Normal\"][i])\n", "fig.tight_layout()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "f3dae7ad", "metadata": {}, "source": [ "Distributions can be combined with basic arithmetic operations +, -, *, and /.\n", "This has the effect of drawing from each distribution and performing the\n", "arithmetic operation on the resulting values.\n", "The absolute value can also be taken with `dist.abs()`." ] }, { "cell_type": "code", "execution_count": 3, "id": "3367dc54", "metadata": {}, "outputs": [ { "data": { "image/png": "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QqVN2LBhg3Tp0sUEO++9916yfA/AVzRlT9ORsmbNaooQPGzQtI5FiC91RlN2Ehu4/euvv5r0KR0XlZTPrnr22WelVatWZvyEphY2b95cZsyYEe+4g0DQtCVNx3JddKyDBlv3r9e0pMToeSpatOgD6WWPcp7+9re/mTaucePG8vjjj5sxKMuXL5dgeN/4EoEF/E7zCI8cOSLTp0+X0qVLyxdffGHKoekjAPvxV5ugg1h1QKp+D/1jGyplK2FPV65cMRehGnTrBagGB0mhg4f9MY+FXmTr50lLves8CqdOnTIXzTpI+fr16xJoefLkMb0ErouOCdExHvevL1euXLIdR2RkpKlS+fXXX5t2aM2aNeb36+veBG/fN94isIBHNLLXyg/xpS48St1mrdzUqVMn+ec//yknTpwwH3DXBjBYqj8ACI82QQMXnb9C/7hrOoMvSlYCyeXWrVvSrFkzM7mZphgllsbkC9rToSlD+jlxlZR5GJ555hnTC6iFF7SMs6Y3as9AoP+ma6W5+vXruy2azvTYY489sF7XPew86TnSQdGenKeIiAjze/3000/N62hhilmzZpkywb44T/5+38SHwAIe0W41TSVYvHix6Wa0aIUDzbNOzIULF9ye6x947Vp07TbVMm6KmXGB0BDMbYKmBegdSk310GOxSl8CwTpeSUvDag/AwoULTY58ctM73EorErnScrUPc+nSpQcutMuXL28erc+wjkMIh7/pTZo0MRXqtIfGoqV9p0yZ8tCvvXBfO6ftkVUZyzpP3rRzgXjfxId+YHhM8ym1m61mzZomd1BLS06cONGUNUssP1ojaK0rr92kepdS727oh1S7UC26zRpIphcretHy0ksvPXI3oB6HsvIldZZdHTili+v3ARD+bYL2VPzyyy/y+uuvm3k2dLFoKVwtaQsECy0qoOkyeuf54sWLD0xspjPI+5oGAloKVe+k699QLTe7atUq5530xHz55Zfm67SUrI7RuHbtmpl1Wudp0Atxpb2Z+jmfP3++GWegn3NNSdTlUXzzzTcmlVHpAGttT959913zXNOK/FW6tmvXruZ6okOHDrJ9+3bT86HlZq3A6WHlfPX3qXON6BgLHa+h7aOee2tcjP5f2zYtR6u/B51MVPfXntZgfN/Ey2/1pxCW1q1b56hQoYIjIiLCUbhwYcfkyZNNObnESku+++67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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Simple distributions built into QDFlow\n", "dist_1 = distribution.Binary(.7, 1, -1)\n", "dist_2 = distribution.Normal(0, 0.5)\n", "\n", "# Define a new distribution by using arithmetic operators on the first two\n", "dist_3 = 2 * dist_1 + dist_2\n", "\n", "dists = [dist_1, dist_2, dist_3]\n", "\n", "num_samples = 10000 # How many times to sample from each distribution\n", "\n", "rng = np.random.default_rng(seed=3)\n", "\n", "# Sample from each distribution\n", "samples = [dist.draw(rng, num_samples) for dist in dists]\n", "\n", "# Plot results\n", "fig, ax = plt.subplots(1, 3, figsize=(8,2.5))\n", "for i in range(3):\n", " tutorial_helper.plot_dist_data(fig, ax[i], samples[i], bins=20)\n", " ax[i].set_title([\"dist_1\",\"dist_2\",\"2 * dist_1 + dist_2\"][i])\n", "fig.tight_layout()" ] }, { "cell_type": "code", "execution_count": 4, "id": "bac6cd28", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Simple distribution built into QDFlow\n", "dist_1 = distribution.Normal(0, 0.5)\n", "\n", "# Define a new distribution by using arithmetic operators on the first one\n", "dist_2 = dist_1.abs() + 2\n", "\n", "dists = [dist_1, dist_2]\n", "\n", "num_samples = 10000 # How many times to sample from each distribution\n", "\n", "rng = np.random.default_rng(seed=4)\n", "\n", "# Sample from each distribution\n", "samples = [dist.draw(rng, num_samples) for dist in dists]\n", "\n", "# Plot results\n", "fig, ax = plt.subplots(1, 2, figsize=(5.5,2.5))\n", "for i in range(2):\n", " tutorial_helper.plot_dist_data(fig, ax[i], samples[i], bins=20)\n", " ax[i].set_title([\"dist_1\", \"dist_1.abs() + 2\"][i])\n", "fig.tight_layout()" ] } ], "metadata": { "kernelspec": { "display_name": "qdflow_venv", "language": "python", "name": "qdflow_venv" }, "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.12.2" } }, "nbformat": 4, "nbformat_minor": 5 }