From a39bc645c63e88548ce42cf174fe6c4f36dddea8 Mon Sep 17 00:00:00 2001 From: Teresa OV Date: Sat, 23 May 2026 13:29:27 -0400 Subject: [PATCH] assignment 1 changes --- .../a1_sampling_and_reproducibility.ipynb | 125 ++++++++++++++++-- 1 file changed, 113 insertions(+), 12 deletions(-) diff --git a/02_activities/assignments/a1_sampling_and_reproducibility.ipynb b/02_activities/assignments/a1_sampling_and_reproducibility.ipynb index 873f5985..be5f7262 100644 --- a/02_activities/assignments/a1_sampling_and_reproducibility.ipynb +++ b/02_activities/assignments/a1_sampling_and_reproducibility.ipynb @@ -16,7 +16,24 @@ "cell_type": "markdown", "id": "4ea73db3", "metadata": {}, - "source": [] + "source": [ + "#all the stages where sampling is occuring: \n", + " # events = ['wedding'] * 200 + ['brunch'] * 800 \n", + " # this is the sampling frame, functino of constructing the population\n", + " # entire population of N=1000, sample of wedding n=200, sample of brunch n=800\n", + " # infected_indices = np.random.choice(ppl.index, size=int(len(ppl) * ATTACK_RATE)\n", + " replace=False) ppl.loc[infected_indices, 'infected'] = True\n", + " # this is random sampling (choosing a random sample of people to be 'infected') with the function np.random.choice\n", + " # since the ATTACK_RATE is 0.1 , 10% of inficiduals will be infected from the entire population, infected n=100\n", + " # ppl.loc[ppl['infected'], 'traced'] = np.random.rand(sum(ppl['infected'])) < TRACE_SUCCESS\n", + " # another random sampling (choosing a random sample of people the be traced) with the function np.random.rand\n", + " # since the TRACE_SUCCESS is .2, 20% of the infected individuals will be traced, traced n=20\n", + " # event_trace_counts = ppl[ppl['traced'] == True]['event'].value_counts()\n", + " events_traced = event_trace_counts[event_trace_counts >= SECONDARY_TRACE_THRESHOLD].index\n", + " ppl.loc[ppl['event'].isin(events_traced) & ppl['infected'], 'traced'] = True\n", + " # cluster-based sampling (counting the number of traced individuals per event wedding/brunch) with the function event_trace_counts = ppl[ppl['traced'] == True]['event'].value_counts()\n", + " # there is also a SECONDARY_TRACE_THRESHOLD setting that requires at least 2 traced individuals, both events should have at least 2 traced individuals " + ] }, { "cell_type": "markdown", @@ -27,10 +44,17 @@ ] }, { - "cell_type": "markdown", - "id": "4cf5d993", + "cell_type": "code", + "execution_count": null, + "id": "88c5e194", "metadata": {}, - "source": [] + "outputs": [], + "source": [ + "# when the script was run at the 1000 repetitions, the histogram looks like a normal distribution, with most cases in the middle \n", + "# when the script was run at 100 repetitions, the histogram was slightly skewed to the right\n", + "# when the script was run at 10 repetitions, the histogram clustered to the right \n", + "# therefore, with lower repetitions, there is more variability in the data with low reproducibility, the larger the repeitions the more reproducible the results are" + ] }, { "cell_type": "markdown", @@ -44,7 +68,9 @@ "cell_type": "markdown", "id": "77613cc3", "metadata": {}, - "source": [] + "source": [ + "#I added a random seed function for reproducibility. By setting a random seed fixed number, every script run will produce the same outputs, even when run multiple times. " + ] }, { "cell_type": "markdown", @@ -56,10 +82,76 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, + "id": "78c34c1c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting matplotlib\n", + " Downloading matplotlib-3.10.9-cp314-cp314-macosx_11_0_arm64.whl.metadata (52 kB)\n", + "Collecting seaborn\n", + " Downloading seaborn-0.13.2-py3-none-any.whl.metadata (5.4 kB)\n", + "Collecting contourpy>=1.0.1 (from matplotlib)\n", + " Downloading contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl.metadata (5.5 kB)\n", + "Collecting cycler>=0.10 (from matplotlib)\n", + " Downloading cycler-0.12.1-py3-none-any.whl.metadata (3.8 kB)\n", + "Collecting fonttools>=4.22.0 (from matplotlib)\n", + " Downloading fonttools-4.63.0-cp314-cp314-macosx_10_15_universal2.whl.metadata (118 kB)\n", + "Collecting kiwisolver>=1.3.1 (from matplotlib)\n", + " Downloading kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl.metadata (5.1 kB)\n", + "Requirement already satisfied: numpy>=1.23 in /Users/teresaorbillo/opensmile-env/lib/python3.14/site-packages (from matplotlib) (2.4.4)\n", + "Requirement already satisfied: packaging>=20.0 in /Users/teresaorbillo/opensmile-env/lib/python3.14/site-packages (from matplotlib) (26.1)\n", + "Collecting pillow>=8 (from matplotlib)\n", + " Downloading pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl.metadata (8.8 kB)\n", + "Collecting pyparsing>=3 (from matplotlib)\n", + " Downloading pyparsing-3.3.2-py3-none-any.whl.metadata (5.8 kB)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /Users/teresaorbillo/opensmile-env/lib/python3.14/site-packages (from matplotlib) (2.9.0.post0)\n", + "Requirement already satisfied: pandas>=1.2 in /Users/teresaorbillo/opensmile-env/lib/python3.14/site-packages (from seaborn) (3.0.2)\n", + "Requirement already satisfied: six>=1.5 in /Users/teresaorbillo/opensmile-env/lib/python3.14/site-packages (from python-dateutil>=2.7->matplotlib) (1.17.0)\n", + "Downloading matplotlib-3.10.9-cp314-cp314-macosx_11_0_arm64.whl (8.2 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8.2/8.2 MB\u001b[0m \u001b[31m53.7 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading seaborn-0.13.2-py3-none-any.whl (294 kB)\n", + "Downloading contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl (273 kB)\n", + "Downloading cycler-0.12.1-py3-none-any.whl (8.3 kB)\n", + "Downloading fonttools-4.63.0-cp314-cp314-macosx_10_15_universal2.whl (2.9 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.9/2.9 MB\u001b[0m \u001b[31m70.4 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl (64 kB)\n", + "Downloading pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl (4.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.7/4.7 MB\u001b[0m \u001b[31m50.8 MB/s\u001b[0m \u001b[33m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading pyparsing-3.3.2-py3-none-any.whl (122 kB)\n", + "Installing collected packages: pyparsing, pillow, kiwisolver, fonttools, cycler, contourpy, matplotlib, seaborn\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8/8\u001b[0m [seaborn]m7/8\u001b[0m [seaborn]ib]\n", + "\u001b[1A\u001b[2KSuccessfully installed contourpy-1.3.3 cycler-0.12.1 fonttools-4.63.0 kiwisolver-1.5.0 matplotlib-3.10.9 pillow-12.2.0 pyparsing-3.3.2 seaborn-0.13.2\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m26.0.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m26.1.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" + ] + } + ], + "source": [ + "!pip install matplotlib seaborn" + ] + }, + { + "cell_type": "code", + "execution_count": 9, "id": "ab8587a0", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9wAAAJOCAYAAABFiQ/hAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAW8FJREFUeJzt3QmcXeP9P/An+0IIQSLETsROFEHVHkv9bG1VqVBF7WuVn9a+q31t1VpqLUprj612YmfELjQJYsvW7Pf/+j6/153/nckkmUnmZCYz7/frdU3uueee+5zlXudznuW0KZVKpQQAAAA0qraNuzgAAABA4AYAAICCqOEGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACN0Aj+Otf/5pWXnnl1KFDh9S9e3fbdB7Vpk2bdPLJJzd1Mahl7733Tssss8w8f0w05XrUZcqUKenYY49Nffr0SW3btk077bTTXPvsTz75JG/b66+/fq59JkBTELiBmYqToTgpevnll+f5LXX//fcXEqbefffdfCK9/PLLp6uvvjr9+c9/nuV7XnvttbTnnnvmE91OnTqlhRdeOG255ZbpuuuuS1OnTk1FefbZZ/M2+O6771KR/va3v6WLLrpolvNFWeL4mtVj0003LbS8rcUTTzxRY7vGBaLlllsu7bXXXumjjz5q6uLNs8rhsa7HBhtsUPj+vPPOO2fr/ddee20677zz0k9+8pN0ww03pCOPPLLJfgvmtvvuuy/96Ec/Sosttljq2rVr/h787Gc/Sw8++GBTFw1oYdo3dQEA5mbgvvzyyxs9dMdJ77Rp09LFF1+cVlhhhVnO/5e//CX95je/ST179ky//OUv04orrpjGjBmTBg8enPbdd980YsSI9L//+7+pqMB9yimn5AsERdbEx0n2W2+9lY444oiZzrfLLrvU2GZjx45NBx54YNp5553za2WxreaG//73v6l9+5b/v8bDDjss/eAHP0iTJ09Or7zySr5I9K9//Su9+eabqXfv3qm5iQtZ8R1r7nbfffe03Xbb1Zi26KKLpubqscceS0sssUS68MIL5/pvwdJLL52/b3HRZ2774x//mH7729/mwH388cfnwP3BBx+kRx99NN16661pm222metlAlquln9WAVCwL7/8Mv+tT4B9/vnnc9geMGBAvgDQ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ZsyY1Lt373wHkvpq8YE7wrbRYQEAAJhTn332WVpyySXrPX+LD9xRs13eMAsssEBTFwcAAIB5zOjRo3NFbjlf1leLD9zlZuQRtgVuAAAAZldDuykbNA0AAAAKIHADAABAAQRuAAAAKECL78NdX1OnTk2TJ09u6mJAq9OhQ4fUrl27pi4GAAA0ulYfuON+aiNHjkzfffdd429doF66d++eevXq1eBBKAAAoDlr9YG7HLYXW2yx1LVrVyf8MJcveI0fPz59+eWX+fniiy9u+wMA0GK0b+3NyMthu0ePHk1dHGiVunTpkv9G6I7voublAAC0FK160LRyn+2o2QaaTvk7aBwFAABaklYduMv0GwXfQQAAaGwCNwAAABSgVffhnpFhw4alUaNGzbXPW2SRRdJSSy1V+OBwv/zlL9Ozzz6bb8NU1Kjs119/fTriiCOadNT3GIjrgAMOSHfeeWf69ttv06uvvprWWmut1BrUZ/uffPLJ6Z577kmvvfZafr733nvn+WMaAADQeATuOsJ237790oQJ49Pc0rlz1zR0aFW9Q/fsBKQLL7wwjRgxIoesBRdcMDWGZZZZJoe7eJTttttuabvttktN6cEHH8zB84knnkjLLbdcvqDRlI477ri8r959993qafHvfv36pUGDBuWylsW/42JB7N/yYGJFu/jii/NFCgAAoHEJ3LVEzXaE7X79bkpdu/ZLRRs/vipVVe2ZP7fIWu4PP/ww9e/fP6244oqpSBES51ZQnNm6xu2lNtxwwxnOM2nSpNSxY8e5Up7NNtssnXPOObmVQdxrOjz++OOpT58++aJApZi+wQYbzNVt2FgXYAAAgJr04Z6BCNvduq1T+KMxQv2mm26aDjvssHTsscemhRdeOIe6aDZcWRP997//Pd144415gLioIQ9Ri/rrX/86LbroommBBRZIm2++eXr99ddrLPu+++5LP/jBD1Lnzp1zTfHOO+9c/ZmffvppOvLII/MyywPPRQ1t9+7dayzjyiuvTMsvv3wOuH379k1//etfa7we7/3LX/6Slx2jVcdFgXvvvbf69WgWvscee+RyRhCN16+77ro6t0Ws26GHHppbKsRyY93L5T3kkENybXysx8CBA/P0J598Mq233nqpU6dOOaRHbfSUKVNqbNtYXrxvoYUWSj179kxXX311GjduXNpnn31St27d0gorrJAe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2q677pr7xEc4n13RxD0G14tbysUFggjv5513Xtphhx3yoG8hWglEGI8R1WP+mC+2dREXMgCYu2JgzOgONSMxXkncehTiQntcgC+Lc5m4nSm0Jm1KdaWkFmT06NF55Orvv/8+B8ZKEUCin2mEwHJQiP+J9O3bL02YUPctnorQuXPXNHRolR8g5lnRFD8Ggvvggw/yBZiGquu7CEDzE+dJ/fr2TeNncbcLCHGZvXIEGOe8tNRcOTNquGuJq24Rfmd25baxudrHvCburx6Dt8WtvyJkR+uFaLI+O2EbgHlHnB9F2L6pX7/Ur2vX6V4fN358eqeqKnXuvExq12buDb5K8/PxtP+mEyd+kvr1uyl17dovt+qsqtozH0NquWlNBO46xI+AHwKYsei3HX35o6YjLhhFc/boaw5A6xBhe51u3aabPialNCW6FrXvkdq1n/51Wo+2U8akNPGTHLa7dfv/Y9dAayNwAw0Wg7nFAwAAmDEjGAEAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACuC1YHeLewqNGjUpzS9zHuCXe93vTTTdNa621VrroootSS7H33nun7777Lt1zzz31Xu9lllkmHXHEEfkBAAC0HgJ3HWG7X9++afyECXNtJ3Tt3DlVDR1ar9Ddpk2bmb5+0kknpZNPPjnNC6KcEVxfe+21OVrOBhtskAPuVVddVT0t/n3ggQem6667Lofksvj3hx9+mP7973+nueWll15K880331z7PAAAoHkQuGuJmu0I2zf165f6de1a+A6oGj8+7VlVlT+3PoF7xIgR1f++7bbb0oknnpiGDh1aPW3++eev/nepVEpTp05N7du37N282WabpbvvvrvGtMcffzz16dMnPfHEEzUCdzwfNGjQXC3foosuOlc/DwAAaB704Z6BCNvrdOtW+KOhob5Xr17VjwUXXDDXeJefv/vuu6lbt27pgQceSP3790+dOnVKTz/9dK7R3XHHHVPPnj1zIP/BD36QHn300RrLnThxYvrd736XQ2q8b4UVVkjXXHNN9etvvfVW2nbbbfP7Yzm//OUvazS7HzduXNprr73y64svvng6//zzZ7oe119/fTrllFPS66+/ntchHjGt3MogyhvLWmCBBdLPfvaz9MUXX8w0cMdFh5EjR1ZPe/LJJ9Nxxx2XA3bZxx9/nD799NM8f/jss8/ysrt3754WXnjh/JmffPJJ9fxxseKoo47Kr/fo0SMde+yx+SJGpfqsdzQpr2xWH+v6l7/8Je28886pa9euacUVV0z33ntvjffE85jeuXPnXN4bbrghvy+as4dYjx122CEttNBCufZ81VVXTffff/9MtzkAADB3CdwtUATNs88+O1VVVaU11lgjjR07Nm233XZp8ODB6dVXX03bbLNNDmsRbMsiNN5yyy3pkksuye/705/+VF1bHiFv8803T2uvvXZ6+eWX04MPPpgDcITVst/+9rc55P7jH/9IDz/8cA66r7zyygzLuNtuu6Wjjz46B8WotY9HTJs2bVoOvt98801e3iOPPJI++uij/NqMbLTRRqlDhw65Vju888476b///W/ad99909dff52DdojXI8AOGDAgTZ48OQ0cODBfoIjm5c8880xe39g2kyZNyvNHeI6LANdee22+cBFlql2T3tD1LouLDbH93njjjbxv9thjj7z8EOX9yU9+knbaaad8QeKAAw5IJ5xwQo33H3zwwfkiyVNPPZXefPPNdM4559Ro3QAAADS9lt3WuJU69dRT01ZbbVX9PGpv11xzzernp512Wg6OUYt6yCGHpPfeey/dfvvtOdxuueWWeZ7llluuev7LLrssh+0zzzyzelqE0KgNj/f27t0714bfdNNNaYsttsivR43skksuOcMydunSJQfEaO4etfNlUYYIkBE6Y/nhxhtvzME8+kJH7XxtUcO73nrr5bC7++67578bb7xxrqnfcMMN8/Nll102/42wHdOjrBHuo6a53C8++ntHbXbMt/XWW+da6eOPPz7tsssu1f3CH3rooerPjQsZDV3vsmjmHmUNsV3jQseLL76YA39c7Ojbt28677zz8uvx72hhcMYZZ1S/Py6W7Lrrrmn11Vefbn8BAADNgxruFmjdddet8TyC4THHHJP69euXA2UE3ajFLtdwx6Bl7dq1Sz/60Y/qXF7UskbtcLyv/Fh55ZXza9FcPR5RK7z++uvXCPkRFBsqyhVBuxy2wyqrrJLLHa/NbGTwcvPx+BvPQ6xT5fRyc/JYpw8++CDXcJfXKco8YcKEvD7ff/99rnWvXKe4OFC5bedkvaPlQeUFg2g6/+WXX+bn0Ty+9oWFuKBQ6bDDDkunn356rt2PgfKiphwAAGheBO4WqPaI2BG2o0Y7alKj+XQE7KgZLTedjtrmmYnAHk3Q432Vj/fffz9tsskmqTmIIB217f/5z39ysC5fPCgH7gjH0Wc7msaX1yn6uddep1jGL37xi8LLG03gK0Ute9S419evf/3r3NQ++tJHi4C4EHDppZcWUFIAAGB2CdytQPRPjibMMUhXBO1owl05OFhMi7AXfZHrss4666S33347D/4Vg6lVPiLcL7/88jlAvvDCC9Xv+fbbb3N4nZmOHTvmgckqRS18BON4lEWf7OhHHjXdMxJNx2N5V1xxRa6ljjAdoqb4q6++yk3gy03Py+sUFwwWW2yx6dYpBqOLRwyCVrlOU6ZMSUOGDKl+PrvrPStRQx595StFc/raohXAb37zm3TXXXfl/vBXX331HH0uAADQuATuViBGu45QFjW40ZQ6anAra1MjSMetsn71q1/l+2JH/+moFY5+3eUBumJAr+hzHMEvaoujL/M+++yTA3M0x44BymIAscceeyz3N46A37btzA+v+Nz4rChXjHgeg4BFH/K4ABCDiMXgY9GvOQZ0i5rq2k3lK0UtfdyPO2p5o5l1NJEPEcIrp5drlmP5iyyySB6gLWr9y+scTbU///zzPM/hhx+eB5+LbRIjwB900EHVo4SH2V3vWYlB0uLzYtT4cv/68gju5f7mRxxxRN4HUe7YTtHkPy5WAAAAzYdB02Zyf+yW8jkXXHBBDtNRCxwhM4Lc6NGja8xz5ZVXpv/93//NoTJG9o57gsfzEIOiRS15vC8GE4tgvPTSS+cBvsrhMgb4Kjc9j37RUeMa/aBnJgb9igsB0Rw8gmwMWhaBNUb8PvTQQ3Nz9Vh+fE59mkvHcmLU7nL/7bII6xFIy/23Q9yOK+aNdYpB0caMGZOWWGKJPPhZ9KcOsQ7RjzsuRkQ5YhtGK4HK9Zqd9Z6VGODtzjvvzMu6+OKL80BvMUr5gQcemAd8C3GhIy6ExMWBKG9sowsvvHCOPhcAAGhcbUq1byzcwkSwjObBEYLKQaosmh5HDWEEnLhdVIiBxPr17ZvGT5gw18rYtXPnVDV0aA65UJcYoTxGSa9sat+S1PVdBKD5iVZV0W1rSP/+aZ1u3aZ7PS5gvzxkSOo2f//Urv30r9N6VE0Zk/YYOyT17z8kdeu2Thoz5pU0ZEj/3D0vuvZBS8qVM6OGu5YIvRF+o4nz3BK1zsI2laIvevQ/79GjR25dEDXpcQs3AABg3iFw1yHCrwBMU4oB3eK2X9F3Po7FaF4e9wQHAADmHQI3NEPRH1ufbAAAmLcZpRwAAAAKIHADAABAAQTulGrckxqY+3wHAQBoiVp1H+6OHTvm+ysPHz48Lbroovl5mzZtmrpY0GrEXQknTZqUvvrqq/xdjO8gAAC0FK06cMcJftz3d8SIETl0A02ja9eueTT2+E4CAEBL0aoDd4gatTjRnzJlSpo6dWpTFwdanXbt2qX27dtrXQIAQIvT6gN3iGbkHTp0yA8AAABoDNpvAgAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEBLDtxnn312atOmTTriiCOqp02YMCEdfPDBqUePHmn++edPu+66a/riiy+atJwAAAAwzwTul156Kf3pT39Ka6yxRo3pRx55ZLrvvvvSHXfckZ588sk0fPjwtMsuuzRZOQEAAGCeCdxjx45Ne+yxR7r66qvTQgstVD39+++/T9dcc0264IIL0uabb5769++frrvuuvTss8+m559/vknLDAAAAM0+cEeT8e233z5tueWWNaYPGTIkTZ48ucb0lVdeOS211FLpueeea4KSAgAAQP21T03o1ltvTa+88kpuUl7byJEjU8eOHVP37t1rTO/Zs2d+bUYmTpyYH2WjR49u5FIDAABAM67h/uyzz9Lhhx+ebr755tS5c+dGW+5ZZ52VFlxwwepHnz59Gm3ZAAAA0OwDdzQZ//LLL9M666yT2rdvnx8xMNoll1yS/x012ZMmTUrfffddjffFKOW9evWa4XKPP/743P+7/IhgDwAAAK2mSfkWW2yR3nzzzRrT9tlnn9xP+3e/+12ume7QoUMaPHhwvh1YGDp0aBo2bFgaMGDADJfbqVOn/AAAAIBWGbi7deuWVltttRrT5ptvvnzP7fL0fffdNx111FFp4YUXTgsssEA69NBDc9jeYIMNmqjUAAAAMA8MmjYrF154YWrbtm2u4Y6B0AYOHJiuuOKKpi4WAAAAzFuB+4knnqjxPAZTu/zyy/MDAAAA5iVNfh9uAAAAaIkEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAArQvYqEAQMs2bNiwNGrUqKYuBnNZVVVV/jtu/Pg0po7XYzoA/5/ADQA0OGz37dsvTZggXLVW71RVpSkzeX1aqZTazcXyADRXAjcA0CBRsx1hu1+/m1LXrv1svVZk/PiqVFW1Z5qvS7/UrV3X6V6fPOWbNGHCx6lUKjVJ+QCaG4EbAJgtEba7dVvH1muF2rbrmtq17zbd9KnTtHoAqGTQNAAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACtC+iIUCAPOWYcOGpVGjRtVr3qqqqvx3/Pj/+0vrYZ8DNIzADQCtXITtfn37pvETJjTofVVVexZWJpq3UmlSUxcBYJ4gcANAKxc12xG2b+rXL/Xr2nWW848bPz69U1WV5uvSL7VtN+v5aTmemfJ1umLCJ6k0bUpTFwVgniBwAwBZhO11unWb5dYYk1KKuNWtXdfUrv2s56fl+Hjq+KYuAsA8xaBpAAAAUACBGwAAAAogcAMAAEBLC9xXXnllWmONNdICCyyQHwMGDEgPPPBA9esTJkxIBx98cOrRo0eaf/7506677pq++OKLpiwyAAAANP/AveSSS6azzz47DRkyJL388stp8803TzvuuGN6++238+tHHnlkuu+++9Idd9yRnnzyyTR8+PC0yy67NGWRAQAAoPmPUr7DDjvUeH7GGWfkWu/nn38+h/Frrrkm/e1vf8tBPFx33XWpX79++fUNNtigiUoNAAAA81Af7qlTp6Zbb701jRs3Ljctj1rvyZMnpy233LJ6npVXXjkttdRS6bnnnpvhciZOnJhGjx5d4wEAAACtLnC/+eabuX92p06d0m9+85t09913p1VWWSWNHDkydezYMXXv3r3G/D179syvzchZZ52VFlxwwepHnz595sJaAAAAQDML3H379k2vvfZaeuGFF9KBBx6YBg0alN55553ZXt7xxx+fvv/+++rHZ5991qjlBQAAgGbfhztELfYKK6yQ/92/f//00ksvpYsvvjjttttuadKkSem7776rUcsdo5T36tVrhsuLmvJ4AAAAQKuu4a5t2rRpuR92hO8OHTqkwYMHV782dOjQNGzYsNzHGwAAAJqzJq3hjubf2267bR4IbcyYMXlE8ieeeCI99NBDuf/1vvvum4466qi08MIL5/t0H3rooTlsG6EcAACA5q5JA/eXX36Z9tprrzRixIgcsNdYY40ctrfaaqv8+oUXXpjatm2bdt1111zrPXDgwHTFFVc0ZZEBAACg+QfuuM/2zHTu3Dldfvnl+QEAAADzkmbXhxsAAABaAoEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAAGgugfujjz5q/JIAAABAaw/cK6ywQtpss83STTfdlCZMmND4pQIAAIDWGLhfeeWVtMYaa6Sjjjoq9erVKx1wwAHpxRdfbPzSAQAAQGsK3GuttVa6+OKL0/Dhw9O1116bRowYkTbeeOO02mqrpQsuuCB99dVXjV9SAAAAaC2DprVv3z7tsssu6Y477kjnnHNO+uCDD9IxxxyT+vTpk/baa68cxAEAAKA1mqPA/fLLL6eDDjooLb744rlmO8L2hx9+mB555JFc+73jjjs2XkkBAABgHtJ+dt4U4fq6665LQ4cOTdttt1268cYb89+2bf8vvy+77LLp+uuvT8sss0xjlxcAAABabuC+8sor069+9au0995759rtuiy22GLpmmuumdPyAQAAQOsJ3O+///4s5+nYsWMaNGjQ7CweAAAAWmcf7mhOHgOl1RbTbrjhhsYoFwAAALS+wH3WWWelRRZZpM5m5GeeeWZjlAsAAABaX+AeNmxYHhittqWXXjq/BgAAAK3dbAXuqMl+4403ppv++uuvpx49ejRGuQAAAKD1Be7dd989HXbYYenxxx9PU6dOzY/HHnssHX744ennP/9545cSAAAAWsMo5aeddlr65JNP0hZbbJHat/+/RUybNi3ttdde+nADAADA7AbuuOXXbbfdloN3NCPv0qVLWn311XMfbgAAAGA2A3fZSiutlB8AAABAIwTu6LN9/fXXp8GDB6cvv/wyNyevFP25AQAAoDWbrcAdg6NF4N5+++3Taqutltq0adP4JQMAAIDWFrhvvfXWdPvtt6ftttuu8UsEAAAArfW2YDFo2gorrND4pQEAAIDWHLiPPvrodPHFF6dSqdT4JQIAAIDW2qT86aefTo8//nh64IEH0qqrrpo6dOhQ4/W77rqrscoHAAAArSdwd+/ePe28886NXxoAAABozYH7uuuua/ySAAAAQGvvwx2mTJmSHn300fSnP/0pjRkzJk8bPnx4Gjt2bGOWDwAAAFpPDfenn36attlmmzRs2LA0ceLEtNVWW6Vu3bqlc845Jz+/6qqrGr+kAAAA0NJruA8//PC07rrrpm+//TZ16dKlenr06x48eHBjlg8AAABaTw33v//97/Tss8/m+3FXWmaZZdJ//vOfxiobAAAAtK4a7mnTpqWpU6dON/3zzz/PTcsBAACgtZutwL311luniy66qPp5mzZt8mBpJ510Utpuu+0as3wAAADQepqUn3/++WngwIFplVVWSRMmTEi/+MUv0vvvv58WWWSRdMsttzR+KQEAAKA1BO4ll1wyvf766+nWW29Nb7zxRq7d3nfffdMee+xRYxA1AAAAaK3az/Yb27dPe+65Z+OWBgAAAFpz4L7xxhtn+vpee+01u+UBAACA1hu44z7clSZPnpzGjx+fbxPWtWtXgRsAAIBWb7ZGKf/2229rPKIP99ChQ9PGG29s0DQAAACY3duC1WXFFVdMZ5999nS13wAAANAaNVrgLg+kNnz48MZcJAAAALSePtz33ntvjeelUimNGDEiXXbZZWmjjTZqrLIBAABA6wrcO+20U43nbdq0SYsuumjafPPN0/nnn99YZQMAAIDWFbinTZvW+CUBAACAFqRR+3ADAAAAc1DDfdRRR9V73gsuuGB2PgIAAABaX+B+9dVX82Py5Mmpb9++edp7772X2rVrl9ZZZ50afbsBAACgNZqtwL3DDjukbt26pRtuuCEttNBCedq3336b9tlnn/TDH/4wHX300Y1dTgAAAGj5fbhjJPKzzjqrOmyH+Pfpp59ulHIAAACY3cA9evTo9NVXX003PaaNGTPGhgUAAKDVm63AvfPOO+fm43fddVf6/PPP8+Pvf/972nfffdMuu+zS6jcqAAAAzFYf7quuuiodc8wx6Re/+EUeOC20b98+B+7zzjvPVgUAAKDVm63A3bVr13TFFVfkcP3hhx/macsvv3yab775Wv0GBQAAgNluUl42YsSI/FhxxRVz2C6VSrYqAAAAzG7g/vrrr9MWW2yRVlpppbTddtvl0B2iSblbggEAAMBsBu4jjzwydejQIQ0bNiw3Ly/bbbfd0oMPPmi7AgAA0OrNVh/uhx9+OD300ENpySWXrDE9mpZ/+umnrX6jAgAAwGzVcI8bN65GzXbZN998kzp16mSrAgAA0OrNVuD+4Q9/mG688cbq523atEnTpk1L5557btpss81a/UYFAACA2WpSHsE6Bk17+eWX06RJk9Kxxx6b3n777VzD/cwzz9iqAAAAtHqzVcO92mqrpffeey9tvPHGaccdd8xNzHfZZZf06quv5vtxAwAAQGvX4BruyZMnp2222SZdddVV6YQTTiimVAAAANDaarjjdmBvvPFGMaUBAACA1tykfM8990zXXHNN45cGAAAAWvOgaVOmTEnXXnttevTRR1P//v3TfPPNV+P1Cy64oLHKBwAAAC0/cH/00UdpmWWWSW+99VZaZ5118rQYPK1S3CIMAAAAWrsGBe4VV1wxjRgxIj3++OP5+W677ZYuueSS1LNnz6LKBwAAAC2/D3epVKrx/IEHHsi3BAMAAAAaYdC0GQVwAAAAYDYCd/TPrt1HW59tAAAAmMM+3FGjvffee6dOnTrl5xMmTEi/+c1vphul/K677qrX8s4666w877vvvpu6dOmSNtxww3TOOeekvn37Vs8Tn3H00UenW2+9NU2cODENHDgwXXHFFfqNAwAA0HJquAcNGpQWW2yxtOCCC+ZH3I+7d+/e1c/Lj/p68skn08EHH5yef/759Mgjj6TJkyenrbfeuka/8COPPDLdd9996Y477sjzDx8+PO2yyy4NW0sAAABozjXc1113XaN++IMPPljj+fXXX58D/ZAhQ9Imm2ySvv/++3TNNdekv/3tb2nzzTevLkO/fv1ySN9ggw0atTwAAADQLAZNa2wRsMPCCy+c/0bwjlrvLbfcsnqelVdeOS211FLpueeeq3MZ0ex89OjRNR4AAADQagP3tGnT0hFHHJE22mijtNpqq+VpI0eOTB07dkzdu3evMW/c9ztem1G/8Mrm7X369Jkr5QcAAIBmGbijL/dbb72VB0ebE8cff3yuKS8/Pvvss0YrIwAAABTSh7sohxxySPrnP/+ZnnrqqbTkkktWT+/Vq1eaNGlS+u6772rUcn/xxRf5tbrECOrlUdQBAACgVdZwx23GImzffffd6bHHHkvLLrtsjdf79++fOnTokAYPHlw9bejQoWnYsGFpwIABTVBiAAAAmAdquKMZeYxA/o9//CN169atul929L2O+3LH33333TcdddRReSC1BRZYIB166KE5bBuhHAAAgOasSQP3lVdemf9uuummNabHrb/23nvv/O8LL7wwtW3bNu266655BPKBAwemK664oknKCwAAAPNE4I4m5bPSuXPndPnll+cHAAAAzCuazSjlAAAA0JII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAABG4AAACYN6jhBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAABaWuB+6qmn0g477JB69+6d2rRpk+65554ar5dKpXTiiSemxRdfPHXp0iVtueWW6f3332+y8gIAAMA8EbjHjRuX1lxzzXT55ZfX+fq5556bLrnkknTVVVelF154Ic0333xp4MCBacKECXO9rAAAANAQ7VMT2nbbbfOjLlG7fdFFF6Xf//73accdd8zTbrzxxtSzZ89cE/7zn/98LpcWAAAAWkAf7o8//jiNHDkyNyMvW3DBBdP666+fnnvuuSYtGwAAADTrGu6ZibAdoka7Ujwvv1aXiRMn5kfZ6NGjCywlAAAwI+PHV9X4e//996eqqv/7N5Qtt9xyacCAAaklaraBe3adddZZ6ZRTTmnqYgAAQKs1atqk3JS2qmrPGtP/8Ic/NFmZaL7appSefvbZFhm6m23g7tWrV/77xRdf5FHKy+L5WmutNcP3HX/88emoo46qUcPdp0+fgksLAACUjSlNSdNSSqd2WiYt36FHmjzl6zRhwiepU8elU/t2XW0oqn049ft08qTh6aOPPhK456Zll102h+7BgwdXB+wIzzFa+YEHHjjD93Xq1Ck/AACAprVs2y6pX/tuadK08Wl8Sqlr+4VTx44L2i38f7k38PDUUjVpDffYsWPTBx98UGOgtNdeey0tvPDCaamllkpHHHFEOv3009OKK66YA3g0QYl7du+0005NWWwAAABo3oH75ZdfTptttln183JT8EGDBqXrr78+HXvssfle3fvvv3/67rvv0sYbb5wefPDB1Llz5yYsNQAAADTzwL3pppvm+23PSJs2bdKpp56aHwAAADAvabb34QYAAIB5mcANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFCA9kUslNkzbNiwNGrUKJuPWVpkkUXSUkstZUsBAEAzJnA3o7Ddr2/fNH7ChKYuCvOArp07p6qhQ4VuAABoxgTuZiJqtiNs39SvX+rXtWtTF4dmrGr8+LRnVVU+ZtRyAwBA8yVwNzMRttfp1q2piwEAAMAcMmgaAAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAVwH24AZmjYsGFp1KhRtlALV1VVlf+OGz8+janH/DEfADBrAjcAMwzbffv2SxMmCFetxTtVVWlKA+afViqldgWWBwDmdQI3AHWKmu0I2/363ZS6du1nK7Vg48dXpaqqPdN8Xfqlbu26znL+yVO+SRMmfJxKpdJcKR8AzKsEbgBmKsJ2t27r2EqtQNt2XVO79t1mOd/UaVo9AEB9GDQNAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAK4DzdACzZs2LA0atSo2XpvVVVV/jt+/P/9peWyjwGgGAI3QAsO2/369k3jJ0yYo+VUVe3ZaGWieSuVJjV1EQCgRRG4AVqoqNmOsH1Tv36pX9euDX7/uPHj0ztVVWm+Lv1S23YNfz/zjmemfJ2umPBJKk2b0tRFAYAWReAGaOEibK/TrVuD3zcmpRTxq1u7rqld+4a/n3nHx1PHN3URAKBFMmgaAAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAAAogMANAAAABRC4AQAAoAACNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBAACgAAI3AAAAFEDgBgAAgAII3AAAAFAAgRsAAAAKIHADAABAAQRuAAAAKIDADQAAAAUQuAEAAKC1Bu7LL788LbPMMqlz585p/fXXTy+++GJTFwkAAADm7cB92223paOOOiqddNJJ6ZVXXklrrrlmGjhwYPryyy+bumgAAAAw7wbuCy64IO23335pn332Sausskq66qqrUteuXdO1117b1EUDAACAeTNwT5o0KQ0ZMiRtueWW1dPatm2bnz/33HNNWjYAAACYmfapGRs1alSaOnVq6tmzZ43p8fzdd9+t8z0TJ07Mj7Lvv/8+/x09enRqzsaOHZv/DhkzJo2dOrWpi0MzNnT8+Pw3LkaVjxuo81gZOnSOflfGjx+f4pe28+SvUrspY2zkFuyjKf/3/8q3p3yb/lua9bEyZeroFP+n7TR5VGo/bdxcKCHzyrHi2GBGx4pjgxn5aOro6vOO5pzZymUrlUoNel+bUkPfMRcNHz48LbHEEunZZ59NAwYMqJ5+7LHHpieffDK98MIL073n5JNPTqeccspcLikAAAAt3WeffZaWXHLJllHDvcgii6R27dqlL774osb0eN6rV68633P88cfnQdbKpk2blr755pvUo0eP1KZNm+muUvTp0ydvtAUWWKCgtaC1cVzhmGJe4LcKxxXzCr9XNIfjKuqpx4wZk3r37t2gz2nWgbtjx46pf//+afDgwWmnnXaqDtDx/JBDDqnzPZ06dcqPSt27d5/p58QGFrhpbI4rHFPMC/xW4bhiXuH3iqY+rhZccMEGL79ZB+4QtdWDBg1K6667blpvvfXSRRddlMaNG5dHLQcAAIDmqtkH7t122y199dVX6cQTT0wjR45Ma621VnrwwQenG0gNAAAAmpNmH7hDNB+fURPyORFNz0866aTpmqCD44rmxG8VjivmFX6vcFwxr+g0l7Jgsx6lHAAAAOZVbZu6AAAAANASCdwAAABQAIEbAAAACtCiAvfll1+elllmmdS5c+e0/vrrpxdffHGm899xxx1p5ZVXzvOvvvrq6f7776/xenRvj9HRF1988dSlS5e05ZZbpvfff7/gtaClH1d77713atOmTY3HNttsU/BaMC8fV2+//Xbadddd8/xxvMTtEed0mbRMjX1cnXzyydP9XsXvG61LQ46rq6++Ov3whz9MCy20UH7EuVPt+Z1fUcRx5fyKyxtwTN111135ttPdu3dP8803X74T1l//+tdCfqtaTOC+7bbb8j27Y6S5V155Ja255ppp4MCB6csvv6xz/meffTbtvvvuad99902vvvpq2mmnnfLjrbfeqp7n3HPPTZdcckm66qqr0gsvvJB3RixzwoQJc3HNaGnHVYiAPWLEiOrHLbfcMpfWiHnxuBo/fnxabrnl0tlnn5169erVKMuk5SniuAqrrrpqjd+rp59+usC1YF4/rp544on8/8HHH388Pffcc6lPnz5p6623Tv/5z3+q53F+RRHHVXB+1Xrd1sBjauGFF04nnHBCPp7eeOONtM8+++THQw891Pi/VaUWYr311isdfPDB1c+nTp1a6t27d+mss86qc/6f/exnpe23377GtPXXX790wAEH5H9Pmzat1KtXr9J5551X/fp3331X6tSpU+mWW24pbD1o2cdVGDRoUGnHHXcssNS0tOOq0tJLL1268MILG3WZtAxFHFcnnXRSac0112z0sjLvmNPflilTppS6detWuuGGG/Jz51cUcVwF51et23qNcB609tprl37/+983+m9Vi6jhnjRpUhoyZEiu5i9r27Ztfh5XLeoS0yvnD3HFojz/xx9/nEaOHFljngUXXDA3T5jRMmlZijiuKq/ULrbYYqlv377pwAMPTF9//XVBa0FLOK6aYpnMW4o8BqL5XO/evXNt+B577JGGDRvWCCWmtRxX0ZJi8uTJuTYpOL+iiOOqzPlV6zRpDo+paDo+ePDgNHTo0LTJJps0+m9Viwjco0aNSlOnTk09e/asMT2ex4aqS0yf2fzlvw1ZJi1LEcdVubnTjTfemL/Y55xzTnryySfTtttumz+Llm92jqumWCbzlqKOgTixuP7669ODDz6YrrzyynwCEv0ox4wZ0wilpjUcV7/73e/yBZvySavzK4o4roLzq9Zr1GweU99//32af/75U8eOHdP222+fLr300rTVVls1+m9V+wbNDcyxn//859X/jkHV1lhjjbT88svnq7JbbLGFLQw0G3ExsCx+qyKAL7300un222/PY1XAzMT4ALfeemv+/1sMYgRFHlfOr2iobt26pddeey2NHTs2V4RFH/BozbXpppumxtQiargXWWSR1K5du/TFF1/UmB7PZzQQTEyf2fzlvw1ZJi1LEcdVXeKLHZ/1wQcfNFLJaWnHVVMsk3nL3DoGYjTXlVZaye9VKzEnx9Uf//jHHIwefvjhfLGmzPkVRRxXdXF+1XosMpvHVDQ7X2GFFfII5UcffXT6yU9+ks4666xG/61qEYE7mgH0798/X5komzZtWn4+YMCAOt8T0yvnD4888kj1/Msuu2zemJXzjB49Oo9QN6Nl0rIUcVzV5fPPP899uOOWA7R8s3NcNcUymbfMrWMgagE+/PBDv1etxOweVzGy72mnnZa7IsRtdyo5v6KI46ouzq9aj46N9P/AeM/EiRMb/7eq1ELceuutedS466+/vvTOO++U9t9//1L37t1LI0eOzK//8pe/LB133HHV8z/zzDOl9u3bl/74xz+Wqqqq8kisHTp0KL355pvV85x99tl5Gf/4xz9Kb7zxRh5Zetllly3997//bZJ1ZN4/rsaMGVM65phjSs8991zp448/Lj366KOlddZZp7TiiiuWJkyYYBe3Eg09riZOnFh69dVX82PxxRfPx1D8+/3336/3Mmn5ijiujj766NITTzyRf6/i923LLbcsLbLIIqUvv/yySdaR5n9cxblTx44dS3feeWdpxIgR1Y/4/1/lPM6vWrfGPq6cX3FrA4+pM888s/Twww+XPvzwwzx/nLvHOfzVV1/d6L9VLSZwh0svvbS01FJL5S9kDA3//PPPV7/2ox/9KN8uoNLtt99eWmmllfL8q666aulf//pXjddjOPg//OEPpZ49e+YduMUWW5SGDh0619aHlndcjR8/vrT11luXFl100RzE41Y8++23n1DUCjXkuIqwE9dHaz9ivvouk9ahsY+r3XbbLYfxWN4SSyyRn3/wwQdzfb2Yd46r+P9aXcdVXIAuc35FYx9Xzq9o6DF1wgknlFZYYYVS586dSwsttFBpwIABObRXaqzfqjbxn4bViQMAAACtog83AAAANDcCNwAAABRA4AYAAIACCNwAAABQAIEbAAAACiBwAwAAQAEEbgAAACiAwA0AAAAFELgBoIVo06ZNuueee5q6GGnkyJFpq622SvPNN1/q3r17UxcHAJqMwA1Aq7b33nvnoBqPjh07phVWWCGdeuqpacqUKam5Ovnkk9Naa6013fQRI0akbbfdNjW1Cy+8MJfltddeS++9915TFwcAmkz7pvtoAGgettlmm3TdddeliRMnpvvvvz8dfPDBqUOHDun444+fbt5JkyblYN4USqVSmjp16gxf79WrV2oOPvzww9S/f/+04oorNnVRAKBJqeEGoNXr1KlTDqtLL710OvDAA9OWW26Z7r333uoa8J122imdccYZqXfv3qlv3755+ptvvpk233zz1KVLl9SjR4+0//77p7Fjx1Zvy/L7TjnllLToooumBRZYIP3mN7/Jgb0sAv5hhx2WFltssdS5c+e08cYbp5deeqn69SeeeCLXvD/wwAM5wEY5b7rpprzM119/vbpm/vrrr6+zSXl9y/jHP/4xLb744nmeuNgwefLkmR4TV155ZVp++eXzhYfYHn/961+rX1tmmWXS3//+93TjjTfm8sRnzMi1116bVl111bxe8fmHHHJI9WsXXHBBWn311XOz9D59+qSDDjqoRtk//fTTtMMOO6SFFloozxPLiYslZW+99Vau7Z9//vlTz5490y9/+cs0atSo6tfvvPPOvPzytol9Pm7cuFb/XQCgcQncAFBLhLDKYDx48OA0dOjQ9Mgjj6R//vOfOZgNHDgwh70IyHfccUd69NFHawTG8vuqqqpycL7lllvSXXfdlcNy2bHHHpvD6Q033JBeeeWV3Jw9lvvNN9/UWM5xxx2Xzj777Lys6Bt99NFH54AZzbbjsdtuu023D+tbxscffzzXSMffKEeE93KAr8vdd9+dDj/88FyGCLUHHHBA2mefffL7Q3xWtBj42c9+lst28cUXzzC0R7iPiwBxYSAucMT6l7Vt2zZdcskl6e23387leuyxx/L2Kov3xgWLp556Kr//nHPOyeE6fPfdd/lCw9prr51efvnl9OCDD6YvvvgilylEuXbffff0q1/9qnr/7LLLLrkFAQA0qhIAtGKDBg0q7bjjjvnf06ZNKz3yyCOlTp06lY455pjq13v27FmaOHFi9Xv+/Oc/lxZaaKHS2LFjq6f961//KrVt27Y0cuTI6vctvPDCpXHjxlXPc+WVV5bmn3/+0tSpU/N7O3ToULr55purX580aVKpd+/epXPPPTc/f/zxxyMBlu65554aZT7ppJNKa6655nTrEvPefffdDSrj0ksvXZoyZUr1PD/96U9Lu+222wy314Ybbljab7/9akyL92y33XbVz2N7xrJnJtbzhBNOKNXXHXfcUerRo0f189VXX7108skn1znvaaedVtp6661rTPvss8/y9hk6dGhpyJAh+d+ffPJJvT8fAGaHGm4AWr2otY7a0WjWHc2Qo8Y4BiYri6bHlf22o1Z0zTXXzE2ZyzbaaKM0bdq0XBNeFvN07dq1+vmAAQNys+jPPvss1ypH0+14X1n0G19vvfXy8iutu+66Dd5H9S1j1JS3a9eu+nk07f7yyy9nutzKMpeXW7vMMxPLHz58eNpiiy1mOE/UxsfrSyyxROrWrVtuEv7111+n8ePH59ejKf7pp5+eP/ukk05Kb7zxRvV7o7l91LjHPi0/Vl555fxabPfYLrHs2K8//elP09VXX52+/fbbepcfAOpL4Aag1dtss83yiNrvv/9++u9//5ubMFcG1cp/N4UiPz9CfqXodx2hvOgm+zPzySefpB//+MdpjTXWyE3uhwwZki6//PL8Wrmp/69//ev00Ucf5SAeTcrjosSll16aX4uLGtG/O/Zp5SP27yabbJIvMET3gOgbv8oqq+T3RV/0jz/+uND1BqD1EbgBaPUi0Eb/4aWWWiq1bz/rG3j069cv16JWDrL1zDPP5H7H5UHVQswTAb7s+eefz7WtMQhYedCxeF9Z1HhHH+gIgTMT75vZaOUNKWNDxXIry1xe7qzKXClqrGNwtejjXpcI2BH6zz///LTBBhuklVZaKdeI1xbbMQaii77x0ac8aqrDOuusk/t+x2fEfq18lC9exIWFqB2PPvWvvvpq3qbRPx0AGpPADQANtMcee+Tm54MGDcoDh0Xz5UMPPTTXtsaI2GVRG7vvvvumd955J4+gHU2fY9CyCL0R/GJE9N/+9rd5UK+YZ7/99stNpuM9MxNBMmpjo9Y2Rt6OwcNmt4wNFeWNQdVi0LOoMY7RxCPwHnPMMQ1aTjTZj0AdA6PFcmLQuHINdQTjuPgQz6MWO0ZBv+qqq2q8/4gjjkgPPfRQ3g7x3li/uBhQHlAtBp6LgdHiAkY0I495Y3C3uFDxwgsvpDPPPDMPqDZs2LBc/q+++qr6/QDQWARuAGig6JcdAS5C3Q9+8IP0k5/8JPcJvuyyy2rMF9PiXtTRjDn6hf/P//xPjb7hMfL4rrvumkNw1Mp+8MEHebkxsvjMxHtiJPBoCh+3HIsR0Ge3jA0VtxGLkcfjVmLR//tPf/pTvof5pptu2qDlxIWAiy66KF1xxRV5OdGEPIJ3iD7WEeRj5PHVVlst3Xzzzemss86q8f4IzhGsIyTHtoha8FhWiNu3Ra17zLP11lvnvtoR0Lt3754vdsQt2mJ08+222y6/7/e//30O/9F/HwAaU5sYOa1RlwgA5PtPx+2pKu+LDQC0Lmq4AQAAoAACNwAAABRAk3IAAAAogBpuAAAAKIDADQAAAAUQuAEAAKAAAjcAAAAUQOAGAACAAgjcAAAAUACBGwAAAAogcAMAAEABBG4AAABIje//AZNhd6Wi8qGkAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Import necessary libraries\n", "import pandas as pd\n", @@ -67,6 +159,9 @@ "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", + "# random seed for reproducibility\n", + "np.random.seed(42)\n", + "\n", "# Note: Suppressing FutureWarnings to maintain a clean output. This is specifically to ignore warnings about\n", "# deprecated features in the libraries we're using (e.g., 'use_inf_as_na' option in Pandas, used by Seaborn),\n", "# which we currently have no direct control over. This action is taken to ensure that our output remains\n", @@ -130,8 +225,8 @@ "\n", " return p_wedding_infections, p_wedding_traces\n", "\n", - "# Run the simulation 1000 times\n", - "results = [simulate_event(m) for m in range(1000)]\n", + "# Run the simulation 1000 times > turned into 10 and 100\n", + "results = [simulate_event(m) for m in range(100)]\n", "props_df = pd.DataFrame(results, columns=[\"Infections\", \"Traces\"])\n", "\n", "# Plotting the results\n", @@ -146,6 +241,12 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "id": "0687ca76", + "metadata": {}, + "source": [] + }, { "cell_type": "markdown", "id": "f418c720", @@ -193,9 +294,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python (opensmile)", "language": "python", - "name": "python3" + "name": "opensmile-env" }, "language_info": { "codemirror_mode": { @@ -207,7 +308,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.0" + "version": "3.14.4" } }, "nbformat": 4,