{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# The empiricaldist API\n", "\n", "This notebook documents the most useful features of the `empiricaldist` API.\n", "\n", "[Click here to run this notebook on Colab](https://colab.research.google.com/github/AllenDowney/empiricaldist/blob/master/empiricaldist/dist_demo.ipynb)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "try:\n", " import empiricaldist\n", "except ImportError:\n", " !pip install empiricaldist" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A Pmf is a Series\n", "\n", "`empiricaldist` provides `Pmf`, which is a Pandas Series that represents a probability mass function." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "scrolled": true }, "outputs": [], "source": [ "from empiricaldist import Pmf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can create a `Pmf` in any of the ways you can create a `Series`, but the most common way is to use `from_seq` to make a `Pmf` from a sequence.\n", "\n", "The following is a `Pmf` that represents a six-sided die." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "d6 = Pmf.from_seq([1,2,3,4,5,6])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default, the probabilities are normalized to add up to 1." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.166667
20.166667
30.166667
40.166667
50.166667
60.166667
\n", "
" ], "text/plain": [ "1 0.166667\n", "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "Name: , dtype: float64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But you can also make an unnormalized `Pmf` if you want to keep track of the counts." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
11
21
31
41
51
61
\n", "
" ], "text/plain": [ "1 1\n", "2 1\n", "3 1\n", "4 1\n", "5 1\n", "6 1\n", "Name: , dtype: int64" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6 = Pmf.from_seq([1,2,3,4,5,6], normalize=False)\n", "d6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or normalize later (the return value is the prior sum)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.normalize()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the Pmf is normalized." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.166667
20.166667
30.166667
40.166667
50.166667
60.166667
\n", "
" ], "text/plain": [ "1 0.166667\n", "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "Name: , dtype: float64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Properties\n", "\n", "In a `Pmf` the index contains the quantities (`qs`) and the values contain the probabilities (`ps`).\n", "\n", "These attributes are available as properties that return arrays (same semantics as the Pandas `values` property)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3, 4, 5, 6])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.qs" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.16666667, 0.16666667, 0.16666667, 0.16666667, 0.16666667,\n", " 0.16666667])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.ps" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotting PMFs\n", "\n", "`Pmf` provides two plotting functions. `bar` plots the `Pmf` as a histogram." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "def decorate_dice(title):\n", " \"\"\"Labels the axes.\n", " \n", " title: string\n", " \"\"\"\n", " plt.xlabel('Outcome')\n", " plt.ylabel('PMF')\n", " plt.title(title)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHHCAYAAABXx+fLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA0LElEQVR4nO3df1yV9f3/8ecB5IcKqCCgiKL5E3+honyxlFosbLak9VHyY0nkdG2ydGxs4UzyY4U29YOlSfbJXLfl9GOfdLYMM6a2btJI0OWvmf0wmHpAp0FioXHO949unXby+AMCLuD9uN9u122e9/W63tfrfd1qPb3Odc6xOZ1OpwAAAAziZXUDAAAAzY0ABAAAjEMAAgAAxiEAAQAA4xCAAACAcQhAAADAOAQgAABgHAIQAAAwDgEIAAAYhwAEANfp0Ucflc1mcxuLjo7W/fffb01DABqMAATAUocOHdK9996ryMhI+fn5qXv37po2bZoOHTpkdWsA2jAfqxsAYK5XXnlFU6dOVZcuXTRjxgz17t1bx48f1/PPP6+XX35ZGzZs0F133WV1m1d19OhReXnxd0mgtSEAAbDEhx9+qPvuu099+vTRW2+9pa5du7r2zZkzR+PGjdN9992n9957T3369LGw06vz8/OzugUADcBfWwBY4ne/+50uXLigNWvWuIUfSQoNDdWzzz6rmpoaPfnkk67xr5/B+eCDD3T//ferU6dOCg4OVnp6ui5cuHDZOf7whz9o1KhRCggIUJcuXXTPPfeovLz8uvp7++23NXr0aPn7++uGG27Qs88+67HO0zNAn376qebOnauoqCj5+fmpb9++WrJkiRwOx3WdG0DT4w4QAEu8+uqrio6O1rhx4zzuHz9+vKKjo/Xaa69dtm/KlCnq3bu3cnNzVVpaqv/5n/9RWFiYlixZ4qp5/PHH9cgjj2jKlCn68Y9/rNOnT+vpp5/W+PHjtW/fPnXq1OmKvR04cEC33XabunbtqkcffVRffvmlcnJyFB4efs11XbhwQYmJiTpx4oR+8pOfqGfPntqzZ4+ys7N16tQp5eXlXXMOAM3ACQDN7NNPP3VKck6aNOmqdXfeeadTkrO6utrpdDqdOTk5TknOBx54wK3urrvucoaEhLheHz9+3Ont7e18/PHH3eoOHDjg9PHxuWz821JSUpz+/v7OTz75xDV2+PBhp7e3t/Pb/7fZq1cvZ1pamuv1okWLnB06dHC+//77bnUPP/yw09vb21lWVnbVcwNoHrwFBqDZffbZZ5KkwMDAq9Z9vb+6utpt/MEHH3R7PW7cOP3rX/9y1b3yyityOByaMmWKzpw549oiIiLUr18/7dy584rnrKur0/bt25WSkqKePXu6xgcNGqTk5ORrrm3Tpk0aN26cOnfu7HbupKQk1dXV6a233rrmHACaHm+BAWh2Xwebr4PQlVwpKP17MJGkzp07S5LOnTunoKAgHTt2TE6nU/369fM4b7t27a54ztOnT+vzzz/3eOyAAQO0bdu2q/Z87Ngxvffee5c91/S1ysrKqx4PoHkQgAA0u+DgYHXr1k3vvffeVevee+89RUZGKigoyG3c29vbY73T6ZQkORwO2Ww2vf766x5rO3bs2MDOr83hcOj73/++fv3rX3vc379//yY7N4DrRwACYIk77rhDzz33nN5++23ddNNNl+3/61//quPHj+snP/lJvee+4YYb5HQ61bt373oHjq5duyogIEDHjh27bN/Ro0ev69znz59XUlJSvc4LoHnxDBAAS2RlZSkgIEA/+clP9K9//ctt39mzZ/Xggw+qffv2ysrKqvfcP/rRj+Tt7a2FCxe67gp9zel0Xna+f+ft7a3k5GRt2bJFZWVlrvEjR45o+/bt1zz3lClTVFRU5LH2008/1ZdfflmPlQBoKtwBAmCJfv366fe//72mTZumoUOHXvZN0GfOnNEf//hH3XDDDfWe+4YbbtBjjz2m7OxsHT9+XCkpKQoMDNTHH3+szZs3a9asWfrVr351xeMXLlyogoICjRs3Tj/72c/05Zdf6umnn9bgwYOv+bZdVlaWtm7dqjvuuEP333+/Ro0apZqaGh04cEAvv/yyjh8/rtDQ0HqvCUDjIgABsMzkyZM1cOBA5ebmukJPSEiIbrnlFs2bN09Dhgxp8NwPP/yw+vfvr//+7//WwoULJUlRUVG67bbbdOedd1712GHDhmn79u3KzMzUggUL1KNHDy1cuFCnTp26ZgBq3769du/erSeeeEKbNm3Siy++qKCgIPXv318LFy5UcHBwg9cEoPHYnN++PwwAANDG8QwQAAAwDgEIAAAYhwAEAACMQwACAADGIQABAADjEIAAAIBx+B4gDxwOh06ePKnAwEDZbDar2wEAANfB6XTqs88+U/fu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AAAAmk29AlBiYmJT9QEAANBseAgaAAAYp153gLy9va+rjmeAAABAS1bvh6B79eqltLQ0t4efAQAAWpN6BaDi4mI9//zzWrFihXr37q0HHnhA06ZNU+fOnZuqPwAAgEZXr2eA4uLitHr1ap06dUqZmZnavHmzevTooXvuuUc7duxoqh4BAAAaVYMegvb399e9996rwsJCHTx4UJWVlZowYYLOnj3b2P0BAAA0unq9Bfbv/vnPf2rdunVat26dLly4oKysLL4BGgAAtAr1CkAXL17U5s2b9fzzz+uvf/2rbr/9duXl5en222+/7k+IAQAAWK1eAahbt24KDAxUWlqannnmGYWFhUmSampq3Oq4EwQAAFqyegWgc+fO6dy5c1q0aJEee+yxy/bzW2AAAKA14LfAAACAceoVgG666SYtXbpUW7du1cWLF3XrrbcqJydHAQEBTdUfAABAo6vXx+CfeOIJzZs3Tx07dlRkZKRWrFih2bNnN1VvAAAATaJeAejFF1/UM888o+3bt2vLli169dVX9dJLL8nhcDRVfwAAAI2uXgGorKxMP/jBD1yvk5KSZLPZdPLkye/UxKpVqxQdHS1/f3/Fx8eruLj4qvWbNm3SwIED5e/vr6FDh2rbtm1u+8+fP6+MjAz16NFDAQEBiomJUX5+/nfqEQAAtB31CkBffvml/P393cbatWunS5cuNbiBjRs3KjMzUzk5OSotLdXw4cOVnJysyspKj/V79uzR1KlTNWPGDO3bt08pKSlKSUnRwYMHXTWZmZkqKCjQH/7wBx05ckRz585VRkaGtm7d2uA+AQBA21HvX4O///775efn5xr74osv9OCDD6pDhw6usVdeeeW651y+fLlmzpyp9PR0SVJ+fr5ee+01rV27Vg8//PBl9StWrNCECROUlZUlSVq0aJF27NihlStXuu7y7NmzR2lpabr55pslSbNmzdKzzz6r4uJi3XnnnfVZMgAAaIPqdQcoLS1NYWFhCg4Odm333nuvunfv7jZ2vS5evKiSkhIlJSV905CXl5KSklRUVOTxmKKiIrd6SUpOTnarHzt2rLZu3aoTJ07I6XRq586dev/993XbbbfVZ7kAAKCNqtcdoBdeeKFRT37mzBnV1dUpPDzcbTw8PFz/+Mc/PB5jt9s91tvtdtfrp59+WrNmzVKPHj3k4+MjLy8vPffccxo/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qgMHDriNpaena+DAgfrNb34jb29vizprXc6fP68PP/xQ9913n9WttGg33njjZV/p8f7776tXr14WdWQdApABzp8/7/a3oo8//lj79+9Xly5d1LNnTws7a7lmz56t9evX609/+pMCAwNlt9slScHBwQoICLC4u5YrOztbt99+u3r27KnPPvtM69ev165du7R9+3arW2uxAgMDL3u2rEOHDgoJCeGZs6v41a9+pR/+8Ifq1auXTp48qZycHHl7e2vq1KlWt9ai/eIXv9DYsWP1xBNPaMqUKSouLtaaNWu0Zs0aq1trfk60eTt37nRKumxLS0uzurUWy9P1kuR84YUXrG6tRXvggQecvXr1cvr6+jq7du3qvPXWW51vvPGG1W21OomJic45c+ZY3UaLlpqa6uzWrZvT19fXGRkZ6UxNTXV+8MEHVrfVKrz66qvOIUOGOP38/JwDBw50rlmzxuqWLGFzOp1Oi7IXAACAJXgIGgAAGIcABAAAjEMAAgAAxiEAAQAA4xCAAACAcQhAAADAOAQgAABgHAIQAAAwDgEIgKXKy8v1wAMPqHv37vL19VWvXr00Z84c/etf/7ruOY4fPy6bzab9+/c3XaMA2hQCEADLfPTRR4qLi9OxY8f0xz/+UR988IHy8/NVWFiohIQEnT171uoWAbRRBCAAlpk9e7Z8fX31xhtvKDExUT179tTtt9+uN998UydOnNBvf/tbSZLNZtOWLVvcju3UqZPWrVsnSerdu7ckacSIEbLZbLr55ptddWvXrtXgwYPl5+enbt26KSMjw7WvrKxMkyZNUseOHRUUFKQpU6aooqLCtf/RRx9VbGys1q5dq549e6pjx4762c9+prq6Oj355JOKiIhQWFiYHn/8cbfePv30U/34xz9W165dFRQUpO9973v6+9//3ohXDsB3RQACYImzZ89q+/bt+tnPfqaAgAC3fREREZo2bZo2btyo6/m5wuLiYknSm2++qVOnTumVV16RJK1evVqzZ8/WrFmzdODAAW3dulV9+/aVJDkcDk2aNElnz57V7t27tWPHDn300UdKTU11m/vDDz/U66+/roKCAv3xj3/U888/r4kTJ+qf//yndu/erSVLlmj+/Pn629/+5jpm8uTJqqys1Ouvv66SkhKNHDlSt956K3e0gBbEx+oGAJjp2LFjcjqdGjRokMf9gwYN0rlz53T69OlrztW1a1dJUkhIiCIiIlzjjz32mH75y19qzpw5rrHRo0dLkgoLC3XgwAF9/PHHioqKkiS9+OKLGjx4sN59911XncPh0Nq1axUYGKiYmBjdcsstOnr0qLZt2yYvLy8NGDBAS5Ys0c6dOxUfH6+3335bxcXFqqyslJ+fnyRp6dKl2rJli15++WXNmjWrAVcLQGMjAAGw1PXc4WmIyspKnTx5UrfeeqvH/UeOHFFUVJQr/EhSTEyMOnXqpCNHjrgCUHR0tAIDA1014eHh8vb2lpeXl9tYZWWlJOnvf/+7zp8/r5CQELfzff755/rwww8bbX0AvhsCEABL9O3bVzabTUeOHNFdd9112f4jR46oc+fO6tq1q2w222VB6dKlS1ed/9tvqzVUu3bt3F7bbDaPYw6HQ5J0/vx5devWTbt27bpsrk6dOjVKTwC+O54BAmCJkJAQff/739czzzyjzz//3G2f3W7XSy+9pNTUVNlsNnXt2lWnTp1y7T927JguXLjgeu3r6ytJqqurc40FBgYqOjpahYWFHs8/aNAglZeXq7y83DV2+PBhffrpp4qJiWnwukaOHCm73S4fHx/17dvXbQsNDW3wvAAaFwEIgGVWrlyp2tpaJScn66233lJ5ebkKCgr0/e9/X5GRka5PV33ve9/TypUrtW/fPu3du1cPPvig212YsLAwBQQEqKCgQBUVFaqqqpL01ae4li1bpqeeekrHjh1TaWmpnn76aUlSUlKShg4dqmnTpqm0tFTFxcWaPn26EhMTFRcX1+A1JSUlKSEhQSkpKXrjjTd0/Phx7dmzR7/97W+1d+/e73C1ADQmAhAAy/Tr10979+5Vnz59NGXKFN1www2aNWuWbrnlFhUVFalLly6SpGXLlikqKkrjxo3Tf/7nf+pXv/qV2rdv75rHx8dHTz31lJ599ll1795dkyZNkiSlpaUpLy9PzzzzjAYPHqw77rhDx44dk/TV21Z/+tOf1LlzZ40fP15JSUnq06ePNm7c+J3WZLPZtG3bNo0fP17p6enq37+/7rnnHn3yyScKDw//TnMDaDw2Z1M9gQgAANBCcQcIAAAYhwAEAACMQwACAADGIQABAADjEIAAAIBxCEAAAMA4BCAAAGAcAhAAADAOAQgAABiHAAQAAIxDAAIAAMYhAAEAAOP8f8URhfWs0sTfAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "d6.bar()\n", "decorate_dice('One die')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`plot` displays the `Pmf` as a line." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlEAAAHHCAYAAACfqw0dAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA7dElEQVR4nO3de1SVVf7H8c/hjnJTEBBDEPFGXiIRhsyYkiTHLs74U2s08ZJ2IU35ddGZ0mwKtHRiKtNovLWaKX+1ylFLTRm1mlAUhkmhzGsYCF4BhUTlPL8/Wp6ZE6DyiB5h3q+1nrU4e++z9/d5Zk3n43P2OcdiGIYhAAAANIqTowsAAABojghRAAAAJhCiAAAATCBEAQAAmECIAgAAMIEQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQBwDT3//POyWCx2beHh4Ro7dqxjCgJgGiEKQLNXUFCg0aNHq0OHDnJ3d1dISIhGjRqlgoICR5cGoAVzcXQBAHAlPvroIz3wwANq27atJkyYoE6dOungwYNavHixPvzwQ73//vv69a9/7egyL2r37t1ycuLftEBzQ4gC0Gzt27dPDz74oCIiIvT555+rXbt2tr4nnnhCAwYM0IMPPqivv/5aERERDqz04tzd3R1dAgAT+KcPgGbrlVdeUXV1tTIzM+0ClCQFBATorbfeUlVVlV5++WVb+4U9SXv37tXYsWPl5+cnX19fjRs3TtXV1XXWePfdd9W3b195enqqbdu2uv/++3Xo0KHLqu/LL79Uv3795OHhoc6dO+utt96qd1x9e6LKy8s1depUhYaGyt3dXZGRkZo7d66sVutlrQ3g6uNOFIBma/Xq1QoPD9eAAQPq7b/tttsUHh6uTz75pE7fiBEj1KlTJ6WnpysvL09//vOfFRgYqLlz59rGvPTSS3ruuec0YsQIPfTQQzp69Khef/113XbbbfrnP/8pPz+/BmvbuXOnBg0apHbt2un555/X+fPnNWvWLAUFBV3yvKqrq5WQkKDi4mI9/PDD6tixo7766ivNmDFDhw8fVkZGxiXnAHANGADQDJWXlxuSjPvuu++i4+69915DklFZWWkYhmHMmjXLkGSMHz/ebtyvf/1rw9/f3/b44MGDhrOzs/HSSy/Zjdu5c6fh4uJSp/3nhg4danh4eBjff/+9ra2wsNBwdnY2fv6f3rCwMCM5Odn2+A9/+IPRunVr47vvvrMbN336dMPZ2dkoKiq66NoArg3ezgPQLJ06dUqS5O3tfdFxF/orKyvt2h955BG7xwMGDNDx48dt4z766CNZrVaNGDFCx44dsx3BwcHq0qWLNm3a1OCatbW1Wr9+vYYOHaqOHTva2nv06KGkpKRLntsHH3ygAQMGqE2bNnZrJyYmqra2Vp9//vkl5wBw9fF2HoBm6UI4uhCmGtJQ2PrPcCNJbdq0kSSdPHlSPj4+2rNnjwzDUJcuXeqd19XVtcE1jx49qh9//LHe53br1k2ffvrpRWves2ePvv766zr7vC44cuTIRZ8P4NogRAFolnx9fdW+fXt9/fXXFx339ddfq0OHDvLx8bFrd3Z2rne8YRiSJKvVKovForVr19Y71svLy2Tll2a1WnXnnXfq6aefrre/a9euV21tAJePEAWg2br77rv19ttv68svv9Stt95ap/+LL77QwYMH9fDDDzd67s6dO8swDHXq1KnRoaVdu3by9PTUnj176vTt3r37stY+ffq0EhMTG7UugGuLPVEAmq2nnnpKnp6eevjhh3X8+HG7vhMnTuiRRx5Rq1at9NRTTzV67t/85jdydnbW7NmzbXenLjAMo856/8nZ2VlJSUlauXKlioqKbO3ffPON1q9ff8m1R4wYoezs7HrHlpeX6/z58404EwBXC3eiADRbXbp00fLlyzVq1Cj16tWrzjeWHzt2TO+99546d+7c6Lk7d+6sF198UTNmzNDBgwc1dOhQeXt768CBA/r44481adIkPfnkkw0+f/bs2Vq3bp0GDBigxx57TOfPn9frr7+uG2+88ZJvQT711FNatWqV7r77bo0dO1Z9+/ZVVVWVdu7cqQ8//FAHDx5UQEBAo88JQNMiRAFo1oYPH67u3bsrPT3dFpz8/f11++2363e/+5169uxpeu7p06era9euevXVVzV79mxJUmhoqAYNGqR77733os/t3bu31q9fr9TUVM2cOVM33HCDZs+ercOHD18yRLVq1UpbtmxRWlqaPvjgA73zzjvy8fFR165dNXv2bPn6+po+JwBNx2L8/D41AAAALok9UQAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMAEvifqKrJarSopKZG3t7csFoujywEAAJfBMAydOnVKISEhcnJq+H4TIeoqKikpUWhoqKPLAAAAJhw6dEg33HBDg/2EqKvI29tb0k//I/z8F+QBAMD1qbKyUqGhobbX8YYQoq6iC2/h+fj4EKIAAGhmLrUVh43lAAAAJhCiAAAATCBEAQAAmECIAgAAMIEQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEy4LkLUggULFB4eLg8PD8XFxSknJ6fBsQUFBRo2bJjCw8NlsViUkZFRZ8yFvp8fKSkptjG//OUv6/Q/8sgjdvMUFRVpyJAhatWqlQIDA/XUU0/p/PnzTXbeAACg+XJ4iFqxYoVSU1M1a9Ys5eXlqU+fPkpKStKRI0fqHV9dXa2IiAjNmTNHwcHB9Y7Zvn27Dh8+bDs2bNggSRo+fLjduIkTJ9qNe/nll219tbW1GjJkiM6ePauvvvpKy5cv17JlyzRz5swmOnMAANCcWQzDMBxZQFxcnPr166c33nhDkmS1WhUaGqrJkydr+vTpF31ueHi4pk6dqqlTp1503NSpU7VmzRrt2bPH9mOCv/zlL3XTTTfVeydLktauXau7775bJSUlCgoKkiQtWrRIzzzzjI4ePSo3N7dLnltlZaV8fX1VUVHBDxADANBMXO7rt0PvRJ09e1a5ublKTEy0tTk5OSkxMVHZ2dlNtsa7776r8ePH1/k15r/85S8KCAhQz549NWPGDFVXV9v6srOz1atXL1uAkqSkpCRVVlaqoKCg3rVqampUWVlpdwAAgJbJxZGLHzt2TLW1tXZBRZKCgoL07bffNskaK1euVHl5ucaOHWvX/tvf/lZhYWEKCQnR119/rWeeeUa7d+/WRx99JEkqLS2tt64LffVJT0/X7Nmzm6RuAABwfXNoiLoWFi9erMGDByskJMSufdKkSba/e/Xqpfbt22vgwIHat2+fOnfubGqtGTNmKDU11fa4srJSoaGh5goHAADXNYeGqICAADk7O6usrMyuvaysrMFN443x/fffa+PGjba7SxcTFxcnSdq7d686d+6s4ODgOp8SvFBnQ7W5u7vL3d39CqsGAADNgUP3RLm5ualv377KysqytVmtVmVlZSk+Pv6K51+6dKkCAwM1ZMiQS47Nz8+XJLVv316SFB8fr507d9p9SnDDhg3y8fFRVFTUFdcGAACaN4e/nZeamqrk5GTFxMQoNjZWGRkZqqqq0rhx4yRJY8aMUYcOHZSeni7pp43ihYWFtr+Li4uVn58vLy8vRUZG2ua1Wq1aunSpkpOT5eJif5r79u3TX//6V/3qV7+Sv7+/vv76a02bNk233XabevfuLUkaNGiQoqKi9OCDD+rll19WaWmpnn32WaWkpHC3CQAAOD5EjRw5UkePHtXMmTNVWlqqm266SevWrbNt4i4qKpKT079vmJWUlCg6Otr2eN68eZo3b54SEhK0efNmW/vGjRtVVFSk8ePH11nTzc1NGzdutAW20NBQDRs2TM8++6xtjLOzs9asWaNHH31U8fHxat26tZKTk/XCCy9chasAAACaG4d/T1RLxvdEAQDQ/DSL74kCAABorghRAAAAJhCiAAAATCBEAQAAmECIAgAAMIEQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMAEQhQAAIAJhCgAAAATCFEAAAAmEKIAAABMIEQBAACYQIgCAAAwgRAFAABgAiEKAADABEIUAACACYQoAAAAEwhRAAAAJhCiAAAATCBEAQAAmECIAgAAMIEQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMCE6yJELViwQOHh4fLw8FBcXJxycnIaHFtQUKBhw4YpPDxcFotFGRkZdcZc6Pv5kZKSIkk6ceKEJk+erG7dusnT01MdO3bUlClTVFFRYTdPfXO8//77TXruAACgeXJ4iFqxYoVSU1M1a9Ys5eXlqU+fPkpKStKRI0fqHV9dXa2IiAjNmTNHwcHB9Y7Zvn27Dh8+bDs2bNggSRo+fLgkqaSkRCUlJZo3b5527dqlZcuWad26dZowYUKduZYuXWo319ChQ5vmxAEAQLNmMQzDcGQBcXFx6tevn9544w1JktVqVWhoqCZPnqzp06df9Lnh4eGaOnWqpk6detFxU6dO1Zo1a7Rnzx5ZLJZ6x3zwwQcaPXq0qqqq5OLiIumnO1Eff/yx6eBUWVkpX19fVVRUyMfHx9QcAADg2rrc12+H3ok6e/ascnNzlZiYaGtzcnJSYmKisrOzm2yNd999V+PHj28wQEmyXagLAeqClJQUBQQEKDY2VkuWLNHFMmdNTY0qKyvtDgAA0DK5XHrI1XPs2DHV1tYqKCjIrj0oKEjffvttk6yxcuVKlZeXa+zYsRet4w9/+IMmTZpk1/7CCy/ojjvuUKtWrfTZZ5/pscce0+nTpzVlypR650lPT9fs2bObpG4AAHB9c2iIuhYWL16swYMHKyQkpN7+yspKDRkyRFFRUXr++eft+p577jnb39HR0aqqqtIrr7zSYIiaMWOGUlNT7eYODQ298pMAAADXHYe+nRcQECBnZ2eVlZXZtZeVlTW4abwxvv/+e23cuFEPPfRQvf2nTp3SXXfdJW9vb3388cdydXW96HxxcXH64YcfVFNTU2+/u7u7fHx87A4AANAyOTREubm5qW/fvsrKyrK1Wa1WZWVlKT4+/ornX7p0qQIDAzVkyJA6fZWVlRo0aJDc3Ny0atUqeXh4XHK+/Px8tWnTRu7u7ldcGwAAaN4c/nZeamqqkpOTFRMTo9jYWGVkZKiqqkrjxo2TJI0ZM0YdOnRQenq6pJ82ihcWFtr+Li4uVn5+vry8vBQZGWmb12q1aunSpUpOTq6zWfxCgKqurta7775rtwm8Xbt2cnZ21urVq1VWVqZf/OIX8vDw0IYNG5SWlqYnn3zyWlwWAABwnXN4iBo5cqSOHj2qmTNnqrS0VDfddJPWrVtn22xeVFQkJ6d/3zArKSlRdHS07fG8efM0b948JSQkaPPmzbb2jRs3qqioSOPHj6+zZl5enrZt2yZJdsFLkg4cOKDw8HC5urpqwYIFmjZtmgzDUGRkpP74xz9q4sSJTXn6AACgmXL490S1ZHxPFAAAzU+z+J4oAACA5ooQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMAEQhQAAIAJhCgAAAATCFEAAAAmEKIAAABMIEQBAACYQIgCAAAwgRAFAABgAiEKAADABEIUAACACYQoAAAAEwhRAAAAJhCiAAAATCBEAQAAmECIAgAAMIEQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMAEQhQAAIAJhCgAAAATCFEAAAAmEKIAAABMuC5C1IIFCxQeHi4PDw/FxcUpJyenwbEFBQUaNmyYwsPDZbFYlJGRUWfMhb6fHykpKbYxZ86cUUpKivz9/eXl5aVhw4aprKzMbp6ioiINGTJErVq1UmBgoJ566imdP3++yc4bAAA0Xw4PUStWrFBqaqpmzZqlvLw89enTR0lJSTpy5Ei946urqxUREaE5c+YoODi43jHbt2/X4cOHbceGDRskScOHD7eNmTZtmlavXq0PPvhAW7ZsUUlJiX7zm9/Y+mtrazVkyBCdPXtWX331lZYvX65ly5Zp5syZTXj2AACg2TIcLDY21khJSbE9rq2tNUJCQoz09PRLPjcsLMx49dVXLznuiSeeMDp37mxYrVbDMAyjvLzccHV1NT744APbmG+++caQZGRnZxuGYRiffvqp4eTkZJSWltrGLFy40PDx8TFqamou69wqKioMSUZFRcVljQcAAI53ua/fDr0TdfbsWeXm5ioxMdHW5uTkpMTERGVnZzfZGu+++67Gjx8vi8UiScrNzdW5c+fs1u3evbs6duxoWzc7O1u9evVSUFCQbUxSUpIqKytVUFDQJLUBAIDmy8WRix87dky1tbV2QUWSgoKC9O233zbJGitXrlR5ebnGjh1raystLZWbm5v8/PzqrFtaWmobU19dF/rqU1NTo5qaGtvjysrKJjgDAABwPXL4nqirbfHixRo8eLBCQkKu+lrp6eny9fW1HaGhoVd9TQAA4BgODVEBAQFydnau86m4srKyBjeNN8b333+vjRs36qGHHrJrDw4O1tmzZ1VeXt7gusHBwfXWdaGvPjNmzFBFRYXtOHTo0BWfAwAAuD45NES5ubmpb9++ysrKsrVZrVZlZWUpPj7+iudfunSpAgMDNWTIELv2vn37ytXV1W7d3bt3q6ioyLZufHy8du7cafcpwQ0bNsjHx0dRUVH1rufu7i4fHx+7AwAAtEwO3RMlSampqUpOTlZMTIxiY2OVkZGhqqoqjRs3TpI0ZswYdejQQenp6ZJ+2iheWFho+7u4uFj5+fny8vJSZGSkbV6r1aqlS5cqOTlZLi72p+nr66sJEyYoNTVVbdu2lY+PjyZPnqz4+Hj94he/kCQNGjRIUVFRevDBB/Xyyy+rtLRUzz77rFJSUuTu7n4tLg0AALiOOTxEjRw5UkePHtXMmTNVWlqqm266SevWrbNt4i4qKpKT079vmJWUlCg6Otr2eN68eZo3b54SEhK0efNmW/vGjRtVVFSk8ePH17vuq6++KicnJw0bNkw1NTVKSkrSm2++aet3dnbWmjVr9Oijjyo+Pl6tW7dWcnKyXnjhhSa+AgAAoDmyGIZhOLqIlqqyslK+vr6qqKjgrT0AAJqJy339bvGfzgMAALgaCFEAAAAmEKIAAABMIEQBAACYQIgCAAAwgRAFAABgAiEKAADABEIUAACACYQoAAAAEwhRAAAAJhCiAAAATCBEAQAAmECIAgAAMIEQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMAEQhQAAIAJhCgAAAATCFEAAAAmEKIAAABMIEQBAACYQIgCAAAwgRAFAABgAiEKAADABEIUAACACYQoAAAAEwhRAAAAJhCiAAAATCBEAQAAmECIAgAAMIEQBQAAYAIhCgAAwARCFAAAgAkOD1ELFixQeHi4PDw8FBcXp5ycnAbHFhQUaNiwYQoPD5fFYlFGRka944qLizV69Gj5+/vL09NTvXr10o4dO2z9Foul3uOVV16xjbmwxn8ec+bMabLzBgAAzZtDQ9SKFSuUmpqqWbNmKS8vT3369FFSUpKOHDlS7/jq6mpFRERozpw5Cg4OrnfMyZMn1b9/f7m6umrt2rUqLCzU/Pnz1aZNG9uYw4cP2x1LliyRxWLRsGHD7OZ64YUX7MZNnjy56U4eAAA0ay6OXPyPf/yjJk6cqHHjxkmSFi1apE8++URLlizR9OnT64zv16+f+vXrJ0n19kvS3LlzFRoaqqVLl9raOnXqZDfm5wHsb3/7m26//XZFRETYtXt7ezcY1gAAwH83h92JOnv2rHJzc5WYmPjvYpyclJiYqOzsbNPzrlq1SjExMRo+fLgCAwMVHR2tt99+u8HxZWVl+uSTTzRhwoQ6fXPmzJG/v7+io6P1yiuv6Pz58xddu6amRpWVlXYHAABomRwWoo4dO6ba2loFBQXZtQcFBam0tNT0vPv379fChQvVpUsXrV+/Xo8++qimTJmi5cuX1zt++fLl8vb21m9+8xu79ilTpuj999/Xpk2b9PDDDystLU1PP/30RddOT0+Xr6+v7QgNDTV9HgAA4Prm0Lfzrgar1aqYmBilpaVJkqKjo7Vr1y4tWrRIycnJdcYvWbJEo0aNkoeHh117amqq7e/evXvLzc1NDz/8sNLT0+Xu7l7v2jNmzLB7XmVlJUEKAIAWymF3ogICAuTs7KyysjK79rKysivah9S+fXtFRUXZtfXo0UNFRUV1xn7xxRfavXu3HnrooUvOGxcXp/Pnz+vgwYMNjnF3d5ePj4/dAQAAWiaHhSg3Nzf17dtXWVlZtjar1aqsrCzFx8ebnrd///7avXu3Xdt3332nsLCwOmMXL16svn37qk+fPpecNz8/X05OTgoMDDRdGwAAaDkc+nZeamqqkpOTFRMTo9jYWGVkZKiqqsr2ab0xY8aoQ4cOSk9Pl/TTZvTCwkLb38XFxcrPz5eXl5ciIyMlSdOmTdMtt9yitLQ0jRgxQjk5OcrMzFRmZqbd2pWVlfrggw80f/78OnVlZ2dr27Ztuv322+Xt7a3s7GxNmzZNo0ePtvuqBAAA8F/McLDXX3/d6Nixo+Hm5mbExsYaW7dutfUlJCQYycnJtscHDhwwJNU5EhIS7OZcvXq10bNnT8Pd3d3o3r27kZmZWWfdt956y/D09DTKy8vr9OXm5hpxcXGGr6+v4eHhYfTo0cNIS0szzpw506hzq6ioMCQZFRUVjXoeAABwnMt9/bYYhmFcbuCaOXOmpk+frlatWkn66YstuTPTsMrKSvn6+qqiooL9UQAANBOX+/rdqD1RL730kk6fPm17HBYWpv3795uvEgAAoJlqVIj6+U2rRtzEAgAAaFEc/gPEAAAAzVGjPp1nsVh06tQpeXh4yDAMWSwWnT59us7Pm7D/BwAAtHSNClGGYahr1652j6Ojo+0eWywW1dbWNl2FAAAA16FGhahNmzZdrToAAACalUaFqISEhKtVBwAAQLPCxnIAAAATGnUnytnZ+bLGsSfq6jEMQz+e4/oCACBJnq7OslgsDlm70RvLw8LClJycbLehHNfOj+dqFTVzvaPLAADgulD4QpJauTnmp4AbtWpOTo4WL16sP/3pT+rUqZPGjx+vUaNG8dMvAADgv06jfjvvgjNnzujDDz/U0qVLtXXrVt1zzz2aMGGC7rzzzqtRY7N1NX47j7fzAAD4t6vxdt7lvn6bClH/6cCBA5owYYK2bNmio0ePqm3btlcyXYvCDxADAND8XO7rt+k3EX/44QctW7ZMy5YtU3V1tZ566imCAgAA+K/RqBB19uxZffzxx1q8eLG++OILDR48WBkZGRo8ePBlf3IPAACgJWhUiGrfvr28vb2VnJysN998U4GBgZKkqqoqu3HckQIAAC1do/ZEOTn9+7s569vExW/n2WNPFAAAzc9V2RPFb+cBAAD8pFEh6tZbb9W8efO0atUqnT17VgMHDtSsWbPk6el5teoDAAC4LjXqt/PS0tL0u9/9Tl5eXurQoYP+9Kc/KSUl5WrVBgAAcN1qVIh655139Oabb2r9+vVauXKlVq9erb/85S+yWq1Xqz4AAIDrUqNCVFFRkX71q1/ZHicmJspisaikpKTJCwMAALieNSpEnT9/Xh4eHnZtrq6uOnfuXJMWBQAAcL1r1MZywzA0duxYubu729rOnDmjRx55RK1bt7a1ffTRR01XIQAAwHWoUSEqOTm5Ttvo0aObrBgAAIDmolEhaunSpVerDgAAgGalUXuiAAAA8BNCFAAAgAmEKAAAABMIUQAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMAEQhQAAIAJhCgAAAATCFEAAAAmEKIAAABMcHiIWrBggcLDw+Xh4aG4uDjl5OQ0OLagoEDDhg1TeHi4LBaLMjIy6h1XXFys0aNHy9/fX56enurVq5d27Nhh6x87dqwsFovdcdddd9nNceLECY0aNUo+Pj7y8/PThAkTdPr06SY5ZwAA0Pw5NEStWLFCqampmjVrlvLy8tSnTx8lJSXpyJEj9Y6vrq5WRESE5syZo+Dg4HrHnDx5Uv3795erq6vWrl2rwsJCzZ8/X23atLEbd9ddd+nw4cO247333rPrHzVqlAoKCrRhwwatWbNGn3/+uSZNmtQ0Jw4AAJo9i2EYhqMWj4uLU79+/fTGG29IkqxWq0JDQzV58mRNnz79os8NDw/X1KlTNXXqVLv26dOn6x//+Ie++OKLBp87duxYlZeXa+XKlfX2f/PNN4qKitL27dsVExMjSVq3bp1+9atf6YcfflBISMhlnV9lZaV8fX1VUVEhHx+fy3oOAABwrMt9/XbYnaizZ88qNzdXiYmJ/y7GyUmJiYnKzs42Pe+qVasUExOj4cOHKzAwUNHR0Xr77bfrjNu8ebMCAwPVrVs3Pfroozp+/LitLzs7W35+frYAJUmJiYlycnLStm3bTNcGAABaDoeFqGPHjqm2tlZBQUF27UFBQSotLTU97/79+7Vw4UJ16dJF69ev16OPPqopU6Zo+fLltjF33XWX3nnnHWVlZWnu3LnasmWLBg8erNraWklSaWmpAgMD7eZ1cXFR27ZtL1pbTU2NKisr7Q4AANAyuTi6gKZmtVoVExOjtLQ0SVJ0dLR27dqlRYsWKTk5WZJ0//3328b36tVLvXv3VufOnbV582YNHDjQ9Nrp6emaPXv2lZ0AAABoFhx2JyogIEDOzs4qKyuzay8rK2tw0/jlaN++vaKiouzaevTooaKiogafExERoYCAAO3du1eSFBwcXGdz+/nz53XixImL1jZjxgxVVFTYjkOHDpk+DwAAcH1zWIhyc3NT3759lZWVZWuzWq3KyspSfHy86Xn79++v3bt327V99913CgsLa/A5P/zwg44fP6727dtLkuLj41VeXq7c3FzbmL///e+yWq2Ki4trcB53d3f5+PjYHQAAoGVy6Nt5qampSk5OVkxMjGJjY5WRkaGqqiqNGzdOkjRmzBh16NBB6enpkn7ajF5YWGj7u7i4WPn5+fLy8lJkZKQkadq0abrllluUlpamESNGKCcnR5mZmcrMzJQknT59WrNnz9awYcMUHBysffv26emnn1ZkZKSSkpIk/XTn6q677tLEiRO1aNEinTt3To8//rjuv//+y/5kHgAAaOEMB3v99deNjh07Gm5ubkZsbKyxdetWW19CQoKRnJxse3zgwAFDUp0jISHBbs7Vq1cbPXv2NNzd3Y3u3bsbmZmZtr7q6mpj0KBBRrt27QxXV1cjLCzMmDhxolFaWmo3x/Hjx40HHnjA8PLyMnx8fIxx48YZp06datS5VVRUGJKMioqKRj0PAAA4zuW+fjv0e6JaOr4nCgCA5ue6/54oAACA5owQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMAEQhQAAIAJhCgAAAATCFEAAAAmEKIAAABMIEQBAACYQIgCAAAwgRAFAABgAiEKAADABEIUAACACYQoAAAAEwhRAAAAJhCiAAAATCBEAQAAmECIAgAAMIEQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMAEQhQAAIAJhCgAAAATCFEAAAAmEKIAAABMIEQBAACY4PAQtWDBAoWHh8vDw0NxcXHKyclpcGxBQYGGDRum8PBwWSwWZWRk1DuuuLhYo0ePlr+/vzw9PdWrVy/t2LFDknTu3Dk988wz6tWrl1q3bq2QkBCNGTNGJSUldnNcWOM/jzlz5jTZeQMAgObNoSFqxYoVSk1N1axZs5SXl6c+ffooKSlJR44cqXd8dXW1IiIiNGfOHAUHB9c75uTJk+rfv79cXV21du1aFRYWav78+WrTpo1tjry8PD333HPKy8vTRx99pN27d+vee++tM9cLL7ygw4cP247Jkyc33ckDAIBmzWIYhuGoxePi4tSvXz+98cYbkiSr1arQ0FBNnjxZ06dPv+hzw8PDNXXqVE2dOtWuffr06frHP/6hL7744rLr2L59u2JjY/X999+rY8eOF52/MSorK+Xr66uKigr5+PiYngcAAFw7l/v67bA7UWfPnlVubq4SExP/XYyTkxITE5WdnW163lWrVikmJkbDhw9XYGCgoqOj9fbbb1/0ORUVFbJYLPLz87NrnzNnjvz9/RUdHa1XXnlF58+fv+g8NTU1qqystDsAAEDL5LAQdezYMdXW1iooKMiuPSgoSKWlpabn3b9/vxYuXKguXbpo/fr1evTRRzVlyhQtX7683vFnzpzRM888owceeMAubU6ZMkXvv/++Nm3apIcfflhpaWl6+umnL7p2enq6fH19bUdoaKjp8wAAANc3F0cX0NSsVqtiYmKUlpYmSYqOjtauXbu0aNEiJScn2409d+6cRowYIcMwtHDhQru+1NRU29+9e/eWm5ubHn74YaWnp8vd3b3etWfMmGH3vMrKSoIUAAAtlMPuRAUEBMjZ2VllZWV27WVlZQ1uGr8c7du3V1RUlF1bjx49VFRUZNd2IUB9//332rBhwyX3LMXFxen8+fM6ePBgg2Pc3d3l4+NjdwAAgJbJYSHKzc1Nffv2VVZWlq3NarUqKytL8fHxpuft37+/du/ebdf23XffKSwszPb4QoDas2ePNm7cKH9//0vOm5+fLycnJwUGBpquDQAAtBwOfTsvNTVVycnJiomJUWxsrDIyMlRVVaVx48ZJksaMGaMOHTooPT1d0k+b0QsLC21/FxcXKz8/X15eXoqMjJQkTZs2TbfccovS0tI0YsQI5eTkKDMzU5mZmZJ+ClD/8z//o7y8PK1Zs0a1tbW2PVht27aVm5ubsrOztW3bNt1+++3y9vZWdna2pk2bptGjR9u+KgEAAPyXMxzs9ddfNzp27Gi4ubkZsbGxxtatW219CQkJRnJysu3xgQMHDEl1joSEBLs5V69ebfTs2dNwd3c3unfvbmRmZl5yDknGpk2bDMMwjNzcXCMuLs7w9fU1PDw8jB49ehhpaWnGmTNnGnVuFRUVhiSjoqKi0dcFAAA4xuW+fjv0e6JaOr4nCgCA5ue6/54oAACA5owQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMAEQhQAAIAJhCgAAAATCFEAAAAmEKIAAABMIEQBAACYQIgCAAAwgRAFAABgAiEKAADABEIUAACACYQoAAAAEwhRAAAAJhCiAAAATCBEAQAAmECIAgAAMIEQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMAEQhQAAIAJhCgAAAATCFEAAAAmEKIAAABMcHiIWrBggcLDw+Xh4aG4uDjl5OQ0OLagoEDDhg1TeHi4LBaLMjIy6h1XXFys0aNHy9/fX56enurVq5d27Nhh6zcMQzNnzlT79u3l6empxMRE7dmzx26OEydOaNSoUfLx8ZGfn58mTJig06dPN8k5AwCA5s+hIWrFihVKTU3VrFmzlJeXpz59+igpKUlHjhypd3x1dbUiIiI0Z84cBQcH1zvm5MmT6t+/v1xdXbV27VoVFhZq/vz5atOmjW3Myy+/rNdee02LFi3Stm3b1Lp1ayUlJenMmTO2MaNGjVJBQYE2bNigNWvW6PPPP9ekSZOa9gIAAIDmy3Cg2NhYIyUlxfa4trbWCAkJMdLT0y/53LCwMOPVV1+t0/7MM88Yt956a4PPs1qtRnBwsPHKK6/Y2srLyw13d3fjvffeMwzDMAoLCw1Jxvbt221j1q5da1gsFqO4uPhyTs0wDMOoqKgwJBkVFRWX/RwAAOBYl/v67bA7UWfPnlVubq4SExNtbU5OTkpMTFR2drbpeVetWqWYmBgNHz5cgYGBio6O1ttvv23rP3DggEpLS+3W9fX1VVxcnG3d7Oxs+fn5KSYmxjYmMTFRTk5O2rZtW4Nr19TUqLKy0u4AAAAtk8NC1LFjx1RbW6ugoCC79qCgIJWWlpqed//+/Vq4cKG6dOmi9evX69FHH9WUKVO0fPlySbLNfbF1S0tLFRgYaNfv4uKitm3bXrS29PR0+fr62o7Q0FDT5wEAAK5vDt9Y3tSsVqtuvvlmpaWlKTo6WpMmTdLEiRO1aNGiq772jBkzVFFRYTsOHTp01dcEAACO4bAQFRAQIGdnZ5WVldm1l5WVNbhp/HK0b99eUVFRdm09evRQUVGRJNnmvti6wcHBdTa3nz9/XidOnLhobe7u7vLx8bE7AABAy+SwEOXm5qa+ffsqKyvL1ma1WpWVlaX4+HjT8/bv31+7d++2a/vuu+8UFhYmSerUqZOCg4Pt1q2srNS2bdts68bHx6u8vFy5ubm2MX//+99ltVoVFxdnujYAANByuDhy8dTUVCUnJysmJkaxsbHKyMhQVVWVxo0bJ0kaM2aMOnTooPT0dEk/bUYvLCy0/V1cXKz8/Hx5eXkpMjJSkjRt2jTdcsstSktL04gRI5STk6PMzExlZmZKkiwWi6ZOnaoXX3xRXbp0UadOnfTcc88pJCREQ4cOlfTTnau77rrL9jbguXPn9Pjjj+v+++9XSEjINb5KAADgunSNPi3YoNdff93o2LGj4ebmZsTGxhpbt2619SUkJBjJycm2xwcOHDAk1TkSEhLs5ly9erXRs2dPw93d3ejevbuRmZlp12+1Wo3nnnvOCAoKMtzd3Y2BAwcau3fvthtz/Phx44EHHjC8vLwMHx8fY9y4ccapU6cadW58xQEAAM3P5b5+WwzDMByY4Vq0yspK+fr6qqKigv1RAAA0E5f7+t3iPp0HAABwLRCiAAAATCBEAQAAmECIAgAAMIEQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMAEQhQAAIAJhCgAAAATCFEAAAAmEKIAAABMIEQBAACYQIgCAAAwgRAFAABgAiEKAADABEIUAACACYQoAAAAEwhRAAAAJhCiAAAATCBEAQAAmECIAgAAMIEQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMAEQhQAAIAJ10WIWrBggcLDw+Xh4aG4uDjl5OQ0OLagoEDDhg1TeHi4LBaLMjIy6ox5/vnnZbFY7I7u3bvb+g8ePFin/8LxwQcf2MbV1//+++836bkDAIDmyeEhasWKFUpNTdWsWbOUl5enPn36KCkpSUeOHKl3fHV1tSIiIjRnzhwFBwc3OO+NN96ow4cP244vv/zS1hcaGmrXd/jwYc2ePVteXl4aPHiw3TxLly61Gzd06NAmOW8AANC8uTi6gD/+8Y+aOHGixo0bJ0latGiRPvnkEy1ZskTTp0+vM75fv37q16+fJNXbf4GLi0uDIcvZ2blO38cff6wRI0bIy8vLrt3Pz++iYQ0AAPx3cuidqLNnzyo3N1eJiYm2NicnJyUmJio7O/uK5t6zZ49CQkIUERGhUaNGqaioqMGxubm5ys/P14QJE+r0paSkKCAgQLGxsVqyZIkMw7iiugAAQMvg0DtRx44dU21trYKCguzag4KC9O2335qeNy4uTsuWLVO3bt1sb9UNGDBAu3btkre3d53xixcvVo8ePXTLLbfYtb/wwgu644471KpVK3322Wd67LHHdPr0aU2ZMqXedWtqalRTU2N7XFFRIUmqrKw0fS4AAODauvC6fckbJ4YDFRcXG5KMr776yq79qaeeMmJjYy/5/LCwMOPVV1+95LiTJ08aPj4+xp///Oc6fdXV1Yavr68xb968S87z3HPPGTfccEOD/bNmzTIkcXBwcHBwcLSA49ChQxfNBQ69ExUQECBnZ2eVlZXZtZeVlTXpPiQ/Pz917dpVe/furdP34Ycfqrq6WmPGjLnkPHFxcfrDH/6gmpoaubu71+mfMWOGUlNTbY+tVqtOnDghf39/WSyWKzuJ/1BZWanQ0FAdOnRIPj4+TTYv7HGdrx2u9bXBdb42uM7XxtW8zoZh6NSpUwoJCbnoOIeGKDc3N/Xt21dZWVm2T71ZrVZlZWXp8ccfb7J1Tp8+rX379unBBx+s07d48WLde++9ateu3SXnyc/PV5s2beoNUJLk7u5ep8/Pz89UzZfDx8eH/4NeA1zna4drfW1wna8NrvO1cbWus6+v7yXHOPzTeampqUpOTlZMTIxiY2OVkZGhqqoq26f1xowZow4dOig9PV3ST5vRCwsLbX8XFxcrPz9fXl5eioyMlCQ9+eSTuueeexQWFqaSkhLNmjVLzs7OeuCBB+zW3rt3rz7//HN9+umndepavXq1ysrK9Itf/EIeHh7asGGD0tLS9OSTT17NywEAAJoJh4eokSNH6ujRo5o5c6ZKS0t10003ad26dbbN5kVFRXJy+veHCEtKShQdHW17PG/ePM2bN08JCQnavHmzJOmHH37QAw88oOPHj6tdu3a69dZbtXXr1jp3m5YsWaIbbrhBgwYNqlOXq6urFixYoGnTpskwDEVGRtq+jgEAAMBiGHxmv7mpqalRenq6ZsyY0eBbi7hyXOdrh2t9bXCdrw2u87VxPVxnQhQAAIAJDv/ZFwAAgOaIEAUAAGACIQoAAMAEQhQAAIAJhKhm5PPPP9c999yjkJAQWSwWrVy50tEltUjp6enq16+fvL29FRgYqKFDh2r37t2OLqvFWbhwoXr37m37orz4+HitXbvW0WW1eHPmzJHFYtHUqVMdXUqL8/zzz8tisdgd3bt3d3RZLVJxcbFGjx4tf39/eXp6qlevXtqxY8c1r4MQ1YxUVVWpT58+WrBggaNLadG2bNmilJQUbd26VRs2bNC5c+c0aNAgVVVVObq0FuWGG27QnDlzlJubqx07duiOO+7Qfffdp4KCAkeX1mJt375db731lnr37u3oUlqsG2+8UYcPH7YdX375paNLanFOnjyp/v37y9XVVWvXrlVhYaHmz5+vNm3aXPNaHP5lm7h8gwcP1uDBgx1dRou3bt06u8fLli1TYGCgcnNzddtttzmoqpbnnnvusXv80ksvaeHChdq6datuvPFGB1XVcp0+fVqjRo3S22+/rRdffNHR5bRYLi4uTfrbr6hr7ty5Cg0N1dKlS21tnTp1ckgt3IkCLqGiokKS1LZtWwdX0nLV1tbq/fffV1VVleLj4x1dTouUkpKiIUOGKDEx0dGltGh79uxRSEiIIiIiNGrUKBUVFTm6pBZn1apViomJ0fDhwxUYGKjo6Gi9/fbbDqmFO1HARVitVk2dOlX9+/dXz549HV1Oi7Nz507Fx8frzJkz8vLy0scff6yoqChHl9XivP/++8rLy9P27dsdXUqLFhcXp2XLlqlbt246fPiwZs+erQEDBmjXrl3y9vZ2dHktxv79+7Vw4UKlpqbqd7/7nbZv364pU6bIzc1NycnJ17QWQhRwESkpKdq1axf7Gq6Sbt26KT8/XxUVFfrwww+VnJysLVu2EKSa0KFDh/TEE09ow4YN8vDwcHQ5Ldp/brfo3bu34uLiFBYWpv/7v//ThAkTHFhZy2K1WhUTE6O0tDRJUnR0tHbt2qVFixZd8xDF23lAAx5//HGtWbNGmzZt0g033ODoclokNzc3RUZGqm/fvkpPT1efPn30pz/9ydFltSi5ubk6cuSIbr75Zrm4uMjFxUVbtmzRa6+9JhcXF9XW1jq6xBbLz89PXbt21d69ex1dSovSvn37Ov/Q6tGjh0PeOuVOFPAzhmFo8uTJ+vjjj7V582aHbVj8b2S1WlVTU+PoMlqUgQMHaufOnXZt48aNU/fu3fXMM8/I2dnZQZW1fKdPn9a+ffv04IMPOrqUFqV///51vnbmu+++U1hY2DWvhRDVjJw+fdruXzQHDhxQfn6+2rZtq44dOzqwspYlJSVFf/3rX/W3v/1N3t7eKi0tlST5+vrK09PTwdW1HDNmzNDgwYPVsWNHnTp1Sn/961+1efNmrV+/3tGltSje3t519vO1bt1a/v7+7PNrYk8++aTuuecehYWFqaSkRLNmzZKzs7MeeOABR5fWokybNk233HKL0tLSNGLECOXk5CgzM1OZmZnXvhgDzcamTZsMSXWO5ORkR5fWotR3jSUZS5cudXRpLcr48eONsLAww83NzWjXrp0xcOBA47PPPnN0Wf8VEhISjCeeeMLRZbQ4I0eONNq3b2+4ubkZHTp0MEaOHGns3bvX0WW1SKtXrzZ69uxpuLu7G927dzcyMzMdUofFMAzj2kc3AACA5o2N5QAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMAEQhQAAIAJhCgAAAATCFEAWoRDhw5p/PjxCgkJkZubm8LCwvTEE0/o+PHjlz3HwYMHZbFYlJ+ff/UKBdBiEKIANHv79+9XTEyM9uzZo/fee0979+7VokWLlJWVpfj4eJ04ccLRJQJogQhRAJq9lJQUubm56bPPPlNCQoI6duyowYMHa+PGjSouLtbvf/97SZLFYtHKlSvtnuvn56dly5ZJkjp16iRJio6OlsVi0S9/+UvbuCVLlujGG2+Uu7u72rdvr8cff9zWV1RUpPvuu09eXl7y8fHRiBEjVFZWZut//vnnddNNN2nJkiXq2LGjvLy89Nhjj6m2tlYvv/yygoODFRgYqJdeesmutvLycj300ENq166dfHx8dMcdd+hf//pXE145AFeCEAWgWTtx4oTWr1+vxx57TJ6ennZ9wcHBGjVqlFasWKHL+ZnQnJwcSdLGjRt1+PBhffTRR5KkhQsXKiUlRZMmTdLOnTu1atUqRUZGSpKsVqvuu+8+nThxQlu2bNGGDRu0f/9+jRw50m7uffv2ae3atVq3bp3ee+89LV68WEOGDNEPP/ygLVu2aO7cuXr22We1bds223OGDx+uI0eOaO3atcrNzdXNN9+sgQMHcmcNuE64OLoAALgSe/bskWEY6tGjR739PXr00MmTJ3X06NFLztWuXTtJkr+/v4KDg23tL774ov73f/9XTzzxhK2tX79+kqSsrCzt3LlTBw4cUGhoqCTpnXfe0Y033qjt27fbxlmtVi1ZskTe3t6KiorS7bffrt27d+vTTz+Vk5OTunXrprlz52rTpk2Ki4vTl19+qZycHB05ckTu7u6SpHnz5mnlypX68MMPNWnSJBNXC0BTIkQBaBEu506TGUeOHFFJSYkGDhxYb/8333yj0NBQW4CSpKioKPn5+embb76xhajw8HB5e3vbxgQFBcnZ2VlOTk52bUeOHJEk/etf/9Lp06fl7+9vt96PP/6offv2Ndn5ATCPEAWgWYuMjJTFYtE333yjX//613X6v/nmG7Vp00bt2rWTxWKpE7bOnTt30fl//hahWa6urnaPLRZLvW1Wq1WSdPr0abVv316bN2+uM5efn1+T1ATgyrAnCkCz5u/vrzvvvFNvvvmmfvzxR7u+0tJS/eUvf9HIkSNlsVjUrl07HT582Na/Z88eVVdX2x67ublJkmpra21t3t7eCg8PV1ZWVr3r9+jRQ4cOHdKhQ4dsbYWFhSovL1dUVJTp87r55ptVWloqFxcXRUZG2h0BAQGm5wXQdAhRAJq9N954QzU1NUpKStLnn3+uQ4cOad26dbrzzjvVoUMH26fe7rjjDr3xxhv65z//qR07duiRRx6xuxsUGBgoT09PrVu3TmVlZaqoqJD006fr5s+fr9dee0179uxRXl6eXn/9dUlSYmKievXqpVGjRikvL085OTkaM2aMEhISFBMTY/qcEhMTFR8fr6FDh+qzzz7TwYMH9dVXX+n3v/+9duzYcQVXC0BTIUQBaPa6dOmiHTt2KCIiQiNGjFDnzp01adIk3X777crOzlbbtm0lSfPnz1doaKgGDBig3/72t3ryySfVqlUr2zwuLi567bXX9NZbbykkJET33XefJCk5OVkZGRl68803deONN+ruu+/Wnj17JP30Ftzf/vY3tWnTRrfddpsSExMVERGhFStWXNE5WSwWffrpp7rttts0btw4de3aVffff7++//57BQUFXdHcAJqGxbhauzEBAABaMO5EAQAAmECIAgAAMIEQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEwgRAEAAJhAiAIAADCBEAUAAGACIQoAAMCE/wfXyi3/wmTXWgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "d6.plot()\n", "decorate_dice('One die')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Selection\n", "\n", "The bracket operator looks up an outcome and returns its probability." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.16666666666666666" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6[1]" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.16666666666666666" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6[6]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Outcomes that are not in the distribution cause a `KeyError`\n", "\n", "```\n", "d6[7]\n", "```\n", "\n", "You can also use parentheses to look up a quantity and get the corresponding probability." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.16666666666666666" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With parentheses, a quantity that is not in the distribution returns `0`, not an error." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6(7)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Mutation\n", "\n", "`Pmf` objects are mutable, but in general the result is not normalized." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.166667
20.166667
30.166667
40.166667
50.166667
60.166667
70.166667
\n", "
" ], "text/plain": [ "1 0.166667\n", "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "7 0.166667\n", "Name: , dtype: float64" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d7 = d6.copy()\n", "\n", "d7[7] = 1/6\n", "d7" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.1666666666666665" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d7.sum()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.1666666666666665" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d7.normalize()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0000000000000002" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d7.sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Statistics\n", "\n", "`Pmf` overrides the statistics methods to compute `mean`, `median`, etc.\n", "\n", "These functions only work correctly if the `Pmf` is normalized." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "d6 = Pmf.from_seq([1,2,3,4,5,6])" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.5" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.mean()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.9166666666666665" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.var()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.707825127659933" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.std()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sampling\n", "\n", "`choice` chooses a random values from the Pmf, following the API of `np.random.choice`" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([3, 4, 2, 4, 2, 3, 5, 4, 1, 5])" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.choice(size=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`sample` chooses a random values from the `Pmf`, with replacement." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([5., 3., 4., 3., 5., 3., 1., 2., 4., 3.])" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.sample(n=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## CDFs\n", "\n", "`empiricaldist` also provides `Cdf`, which represents a cumulative distribution function." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "from empiricaldist import Cdf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can create an empty `Cdf` and then add elements.\n", "\n", "Here's a `Cdf` that represents a four-sided die." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "d4 = Cdf.from_seq([1,2,3,4])" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.25
20.50
30.75
41.00
\n", "
" ], "text/plain": [ "1 0.25\n", "2 0.50\n", "3 0.75\n", "4 1.00\n", "Name: , dtype: float64" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Properties\n", "\n", "In a `Cdf` the index contains the quantities (`qs`) and the values contain the probabilities (`ps`).\n", "\n", "These attributes are available as properties that return arrays (same semantics as the Pandas `values` property)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3, 4])" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.qs" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.25, 0.5 , 0.75, 1. ])" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.ps" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Displaying CDFs\n", "\n", "`Cdf` provides two plotting functions.\n", "\n", "`plot` displays the `Cdf` as a line." ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "def decorate_dice(title):\n", " \"\"\"Labels the axes.\n", " \n", " title: string\n", " \"\"\"\n", " plt.xlabel('Outcome')\n", " plt.ylabel('CDF')\n", " plt.title(title)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABR1UlEQVR4nO3dd3wUdeL/8ddueiAJJQ1CIPROCiUXFGsUG4KN5gni2QmisRxYQGzRU5HqwamcZ6EIIjYENRZEOFGSQGgh9FDSgPS+O78//JnvRVoCSSbZvJ+Px/6xs5/Zfc84Zt/MZ3bXYhiGgYiIiIiDsJodQERERKQ2qdyIiIiIQ1G5EREREYeiciMiIiIOReVGREREHIrKjYiIiDgUlRsRERFxKCo3IiIi4lBUbkRERMShqNyIiADPPvssFoulyrKQkBDuvPNOcwKJyHlTuRGROrN9+3b++te/EhQUhJubG23btuX2229n+/btZkcTEQfmbHYAEXFMK1euZMyYMbRq1Yq//e1vdOzYkQMHDvDOO++wYsUKli5dyk033WR2zLNKSUnBatW/AUUaG5UbEal1e/fu5Y477qBTp06sW7cOPz+/yscmT57MkCFDuOOOO9i6dSudOnUyMenZubm5mR1BRM6D/kkiIrXu1VdfpaioiH/9619Vig2Ar68vCxcupLCwkH/84x+Vy/+45mXPnj3ceeedtGjRAh8fHyZMmEBRUdEpr/HBBx/Qv39/PDw8aNWqFaNHjyYtLa1a+davX8/AgQNxd3enc+fOLFy48LTjTnfNTU5ODg8//DDBwcG4ubnRpUsXXnnlFex2e7VeW0Tqns7ciEit+/zzzwkJCWHIkCGnffySSy4hJCSEL7/88pTHRo4cSceOHYmLiyMhIYG3334bf39/XnnllcoxL774Is888wwjR47k7rvvJisri7lz53LJJZeQmJhIixYtzpgtOTmZq6++Gj8/P5599lkqKiqYPn06AQEB59yuoqIiLr30Uo4cOcJ9991H+/bt2bBhA1OnTuXYsWPMmjXrnM8hIvXAEBGpRTk5OQZgDB8+/KzjbrzxRgMw8vLyDMMwjOnTpxuAcdddd1UZd9NNNxmtW7euvH/gwAHDycnJePHFF6uMS05ONpydnU9Z/mcjRoww3N3djYMHD1Yu27Fjh+Hk5GT8+U9ihw4djPHjx1fef/75541mzZoZu3fvrjJuypQphpOTk3Ho0KGzvraI1A9NS4lIrcrPzwfAy8vrrOP+eDwvL6/K8vvvv7/K/SFDhnD8+PHKcStXrsRutzNy5Eiys7Mrb4GBgXTt2pXvv//+jK9ps9lYu3YtI0aMoH379pXLe/bsydChQ8+5bcuXL2fIkCG0bNmyymtHR0djs9lYt27dOZ9DROqepqVEpFb9UVr+KDlncqYS9L+lA6Bly5YAnDx5Em9vb1JTUzEMg65du572eV1cXM74mllZWRQXF5923e7du7N69eqzZk5NTWXr1q2nXEf0h8zMzLOuLyL1Q+VGRGqVj48Pbdq0YevWrWcdt3XrVoKCgvD29q6y3MnJ6bTjDcMAwG63Y7FY+Oqrr047tnnz5ueZ/NzsdjtXXXUVTzzxxGkf79atW529tohUn8qNiNS6G264gbfeeov169dz8cUXn/L4Tz/9xIEDB7jvvvtq/NydO3fGMAw6duxY4zLh5+eHh4cHqamppzyWkpJSrdcuKCggOjq6Rq8rIvVL19yISK17/PHH8fDw4L777uP48eNVHjtx4gT3338/np6ePP744zV+7ptvvhknJydmzJhReTbnD4ZhnPJ6/8vJyYmhQ4eyatUqDh06VLl8586drF279pyvPXLkSDZu3HjasTk5OVRUVNRgS0SkrujMjYjUuq5du/Kf//yH22+/nb59+57yDcXZ2dksWbKEzp071/i5O3fuzAsvvMDUqVM5cOAAI0aMwMvLi/379/PJJ59w77338thjj51x/RkzZrBmzRqGDBnCgw8+SEVFBXPnzqV3797nnEp7/PHH+eyzz7jhhhu488476d+/P4WFhSQnJ7NixQoOHDiAr69vjbdJRGqXyo2I1InbbruNHj16EBcXV1loWrduzeWXX86TTz5Jnz59zvu5p0yZQrdu3XjjjTeYMWMGAMHBwVx99dXceOONZ123X79+rF27ltjYWKZNm0a7du2YMWMGx44dO2e58fT05Mcff+Sll15i+fLlvPfee3h7e9OtWzdmzJiBj4/PeW+TiNQei/Hn87oiIiIijZiuuRERERGHonIjIiIiDkXlRkRERByKyo2IiIg4FJUbERERcSgqNyIiIuJQmtz33Njtdo4ePYqXlxcWi8XsOCIiIlINhmGQn59P27ZtsVrPfm6myZWbo0ePEhwcbHYMEREROQ9paWm0a9furGOaXLnx8vICft85f/41YhEREWmY8vLyCA4OrnwfP5smV27+mIry9vZWuREREWlkqnNJiS4oFhEREYeiciMiIiIOReVGREREHIrKjYiIiDgUlRsRERFxKCo3IiIi4lBUbkRERMShqNyIiIiIQ1G5EREREYeiciMiIiIOxdRys27dOoYNG0bbtm2xWCysWrXqnOv88MMPRERE4ObmRpcuXXj33XfrPKeIiIg0HqaWm8LCQkJDQ5k/f361xu/fv5/rr7+eyy+/nKSkJB5++GHuvvtu1q5dW8dJRUREpLEw9Yczr732Wq699tpqj1+wYAEdO3bk9ddfB6Bnz56sX7+eN954g6FDh9ZVTBEREammzQdPEtLak9bN3UzL0Kiuudm4cSPR0dFVlg0dOpSNGzeecZ3S0lLy8vKq3ERERKR22e0GC37cy8iFG3l0+RbsdsO0LI2q3KSnpxMQEFBlWUBAAHl5eRQXF592nbi4OHx8fCpvwcHB9RFVRESkyTheUMpd//mVl7/ahc1u4OXuQpnNblqeRlVuzsfUqVPJzc2tvKWlpZkdSURExGH8su841835iR9SsnBzthJ3c1/mjA7D3cXJtEymXnNTU4GBgWRkZFRZlpGRgbe3Nx4eHqddx83NDTc38+b9REREHJHNbvDm93t449vd2A3o5NeM+WMj6NnG2+xojavcREVFsXr16irLvvnmG6KiokxKJCIi0vRk5ZfyyLIk1u/JBuDm8CCeH9GHZm4No1aYmqKgoIA9e/ZU3t+/fz9JSUm0atWK9u3bM3XqVI4cOcJ7770HwP3338+8efN44oknuOuuu/juu+/46KOP+PLLL83aBBERkSZlw55sJi9LIiu/FHcXK88P78NtAxrW9aymlpvffvuNyy+/vPJ+bGwsAOPHj+fdd9/l2LFjHDp0qPLxjh078uWXX/LII48we/Zs2rVrx9tvv62PgYuIiNQxm91gdnwqc79LxTCgW0Bz5o+NoGuAl9nRTmExDMO8z2qZIC8vDx8fH3Jzc/H2Nn9eUEREpKHLyCth8tJE/rvvBAAjB7Rjxo198HCtv4uGa/L+3TAmx0RERKRBWrc7i0eWJXG8sAxPVydevKkPN4W3MzvWWanciIiIyCkqbHbe+HY3b/6wF8OAHoFezL89gs5+zc2Odk4qNyIiIlLFsdxiHlqSyK8HTgJwe2R7nrmhl6nfXVMTKjciIiJS6ftdmcR+lMTJonKauzkTd3NfhoW2NTtWjajciIiICOU2O6+tTWHhun0A9AnyZt6YCEJ8m5mcrOZUbkRERJq4wyeLmLQkkcRDOQDcOTiEqdf1wM25cUxD/ZnKjYiISBP29fZ0Hl+xldzicrzcnXn11n5c06eN2bEuiMqNiIhIE1RWYSfuq538++cDAIS282He2AiCW3maG6wWqNyIiIg0MYeOFxGzJIGth3MB+NvFHfn7NT1wdbaanKx2qNyIiIg0IV8lH+OJFVvJL63Ax8OF124L5apeAWbHqlUqNyIiIk1ASbmNl1bv5L2NBwGIaN+CuWMjCGrhYXKy2qdyIyIi4uD2ZxcSsziB7UfzALjv0k48dnV3XJwcYxrqz1RuREREHNhnW47y5MpkCkoraNXMlddHhnJ5d3+zY9UplRsREREHVFJuY8bnO1iy6RAAg0JaMWdMOIE+7iYnq3sqNyIiIg5mT2YBMYsT2JWej8UCMZd3YfKVXXF20GmoP1O5ERERcSArEw7z9KptFJXZ8G3uyhujwhjS1c/sWPVK5UZERMQBFJVVMP3T7SzffBiAqE6tmT06DH9vx5+G+jOVGxERkUZud0Y+Ez9MIDWzAKsFJl/ZjZgruuBktZgdzRQqNyIiIo2UYRgs/+0w0z7bRkm5HT8vN+aMDieqc2uzo5lK5UZERKQRKiyt4OlV2/gk8QgAQ7r68saoMHybu5mczHwqNyIiIo3MzmN5TPwwgX3ZhVgt8OjV3Xng0s5Ym+g01J+p3IiIiDQShmGweNMhZny+g7IKO4He7swZE86gjq3MjtagqNyIiIg0Avkl5UxdmcwXW48BcHl3P14fGUarZq4mJ2t4VG5EREQauG1HcolZnMCB40U4Wy08PrQ79wzppGmoM1C5ERERaaAMw+C9jQd58cudlNnsBLXwYM6YcPp3aGl2tAZN5UZERKQByi0u5+8rtrJmezoA0T0DeO22frTw1DTUuajciIiINDBJaTnELE7g8MliXJwsTL22JxMuCsFi0TRUdajciIiINBCGYfDO+v28smYX5TaD4FYezBsTQWhwC7OjNSoqNyIiIg1ATlEZjy3fyrc7MwC4tk8gL9/SDx8PF5OTNT4qNyIiIibbfPAkkxYncDS3BFcnK0/f0JM7/tJB01DnSeVGRETEJHa7wb9+2sera1Ow2Q1CWnsyb2wEfYJ8zI7WqKnciIiImOBEYRmxHyXxQ0oWAMNC2/LSTX3wctc01IVSuREREalnm/af4KEliaTnleDmbGX6sN6MGRSsaahaYjU7wPz58wkJCcHd3Z3IyEg2bdp0xrHl5eU899xzdO7cGXd3d0JDQ1mzZk09phURETl/drvBvO9SGf2vjaTnldDJrxmrJl7E2Mj2Kja1yNRys2zZMmJjY5k+fToJCQmEhoYydOhQMjMzTzv+6aefZuHChcydO5cdO3Zw//33c9NNN5GYmFjPyUVERGomK7+U8f/exGtf78ZuwM3hQXweczE923ibHc3hWAzDMMx68cjISAYOHMi8efMAsNvtBAcHM2nSJKZMmXLK+LZt2/LUU08xceLEymW33HILHh4efPDBB9V6zby8PHx8fMjNzcXbWweUiIjUvQ17spm8LIms/FLcXaw8N7wPt/Vvp7M1NVCT92/TrrkpKytj8+bNTJ06tXKZ1WolOjqajRs3nnad0tJS3N3dqyzz8PBg/fr1dZpVRETkfNjsBnPiU5nzXSqGAV39m/Pm7RF0DfAyO5pDM63cZGdnY7PZCAgIqLI8ICCAXbt2nXadoUOHMnPmTC655BI6d+5MfHw8K1euxGaznfF1SktLKS0trbyfl5dXOxsgIiJyFpl5JUxemsTGfccBGDmgHTNu7IOHq5PJyRyf6RcU18Ts2bPp2rUrPXr0wNXVlZiYGCZMmIDVeubNiIuLw8fHp/IWHBxcj4lFRKQp+ik1i+vm/MTGfcfxdHXijVGh/OPWUBWbemJaufH19cXJyYmMjIwqyzMyMggMDDztOn5+fqxatYrCwkIOHjzIrl27aN68OZ06dTrj60ydOpXc3NzKW1paWq1uh4iIyB8qbHZeW5vCuEWbyC4oo0egF5/FXMxN4e3MjtakmFZuXF1d6d+/P/Hx8ZXL7HY78fHxREVFnXVdd3d3goKCqKio4OOPP2b48OFnHOvm5oa3t3eVm4iISG07llvM2Ld+Yd73ezAMGBvZnlUTL6KLf3OzozU5pn6JX2xsLOPHj2fAgAEMGjSIWbNmUVhYyIQJEwAYN24cQUFBxMXFAfDLL79w5MgRwsLCOHLkCM8++yx2u50nnnjCzM0QEZEm7vtdmcR+lMTJonKauznz0s19uTG0rdmxmixTy82oUaPIyspi2rRppKenExYWxpo1ayovMj506FCV62lKSkp4+umn2bdvH82bN+e6667j/fffp0WLFiZtgYiINGXl/38aauG6fQD0buvN/LERhPg2MzlZ02bq99yYQd9zIyIiteFITjGTFieQcCgHgPFRHZh6XU/cXXTRcF1oFN9zIyIi0lh9syODx5ZvIbe4HC93Z/5xSz+u7dvG7Fjy/6nciIiIVFNZhZ2Xv9rFop/3AxDazod5YyMIbuVpcjL5Xyo3IiIi1ZB2ooiYxQlsOZwLwN8u7sjfr+mBq3Oj+sq4JkHlRkRE5BzWbDvG4yu2kl9SgY+HC6/dFspVvQLOvaKYQuVGRETkDErKbcSt3sl/Nh4EIKJ9C+aMCaddS01DNWQqNyIiIqdxILuQiYsT2H70998kvO/STjx2dXdcnDQN1dCp3IiIiPzJ51uOMnVlMgWlFbT0dGHmyDAu7+FvdiypJpUbERGR/6+k3MZzX+xg8S+HABgU0orZY8Jo4+NhcjKpCZUbERERYG9WARM/TGBXej4WC0y8rAsPR3fFWdNQjY7KjYiINHmfJB7mqU+2UVRmw7e5K2+MCmNIVz+zY8l5UrkREZEmq7jMxvTPtvHRb4cBiOrUmtmjw/D3djc5mVwIlRsREWmSdmfkM/HDBFIzC7BYYPKVXZl0RVecrBazo8kFUrkREZEmxTAMlm8+zLRPt1FSbsfPy43Zo8MY3NnX7GhSS1RuRESkySgsreCZVdtYmXgEgCFdfZk5Mgw/LzeTk0ltUrkREZEmYeexPCYuTmBfViFWCzx6dXceuLQzVk1DORyVGxERcWiGYbBkUxozPt9OaYWdQG935owJZ1DHVmZHkzqiciMiIg4rv6ScJz/ZxudbjgJwWXc/Zo4Mo1UzV5OTSV1SuREREYe07UguMYsTOHC8CCerhSeGdueeIZ00DdUEqNyIiIhDMQyD9/97kBe+2EmZzU5QCw/mjAmnf4eWZkeTeqJyIyIiDiO3uJypK7eyOjkdgOieAbx2Wz9aeGoaqilRuREREYewJS2HmCUJpJ0oxsXJwpRre3LXRSFYLJqGampUbkREpFEzDINFPx/g5a92Um4zaNfSg/ljIwgNbmF2NDGJyo2IiDRaOUVlPLZ8K9/uzADgmt6BvHJrP3w8XExOJmZSuRERkUZp88GTPLQkkSM5xbg6WXn6hp7c8ZcOmoYSlRsREWlc7HaDt37ax6trU6iwG3Ro7cn8sRH0CfIxO5o0ECo3IiLSaJwoLOPRj5L4PiULgBv6tSHu5r54uWsaSv6Pyo2IiDQKm/af4KEliaTnleDqbOXZYb0ZMyhY01ByCpUbERFp0Ox2g3/+uJeZ3+zGZjfo5NeM+WMj6NnG2+xo0kCp3IiISIOVXVDKI8uS+Ck1G4CbwoN4YUQfmrnp7UvOTEeHiIg0SBv3Hmfy0kQy80txd7Hy3PA+3Na/naah5JxUbkREpEGx2Q3mfpfKnPhU7AZ09W/O/Nsj6BbgZXY0aSRUbkREpMHIzCvh4WVJbNh7HIDb+rdjxvDeeLrq7UqqT0eLiIg0CD+lZvHIsiSyC8rwdHXihRF9uDmindmxpBFSuREREVNV2OzM+jaV+T/swTCgR6AX88ZG0MW/udnRpJGymh1g/vz5hISE4O7uTmRkJJs2bTrr+FmzZtG9e3c8PDwIDg7mkUceoaSkpJ7SiohIbUrPLWHsW78w7/vfi83YyPasmniRio1cEFPP3CxbtozY2FgWLFhAZGQks2bNYujQoaSkpODv73/K+MWLFzNlyhQWLVrE4MGD2b17N3feeScWi4WZM2easAUiInK+vk/J5NGPtnCisIzmbs68dHNfbgxta3YscQAWwzAMs148MjKSgQMHMm/ePADsdjvBwcFMmjSJKVOmnDI+JiaGnTt3Eh8fX7ns0Ucf5ZdffmH9+vXVes28vDx8fHzIzc3F21tfACUiUt/KbXZe+zqFhT/uA6B3W2/mjY2go28zk5NJQ1aT92/TpqXKysrYvHkz0dHR/xfGaiU6OpqNGzeedp3BgwezefPmyqmrffv2sXr1aq677rp6ySwiIhfmSE4xo//138piMy6qAx8/MFjFRmqVadNS2dnZ2Gw2AgICqiwPCAhg165dp11n7NixZGdnc/HFF2MYBhUVFdx///08+eSTZ3yd0tJSSktLK+/n5eXVzgaIiEiNfLsjg0eXbyG3uBwvd2f+cUs/ru3bxuxY4oBMv6C4Jn744Qdeeukl3nzzTRISEli5ciVffvklzz///BnXiYuLw8fHp/IWHBxcj4lFRKSsws4LX+zg7vd+I7e4nNB2Pnw5aYiKjdQZ0665KSsrw9PTkxUrVjBixIjK5ePHjycnJ4dPP/30lHWGDBnCX/7yF1599dXKZR988AH33nsvBQUFWK2ndrXTnbkJDg7WNTciIvUg7UQRMUsS2ZKWA8BdF3VkyrU9cHVuVP+2lgagUVxz4+rqSv/+/atcHGy324mPjycqKuq06xQVFZ1SYJycnAA4U0dzc3PD29u7yk1EROremm3HuG7OT2xJy8HHw4W3xg1g2rBeKjZS50z9KHhsbCzjx49nwIABDBo0iFmzZlFYWMiECRMAGDduHEFBQcTFxQEwbNgwZs6cSXh4OJGRkezZs4dnnnmGYcOGVZYcERExV2mFjZe+3Ml/Nh4EILx9C+aOCaddS0+Tk0lTYWq5GTVqFFlZWUybNo309HTCwsJYs2ZN5UXGhw4dqnKm5umnn8ZisfD0009z5MgR/Pz8GDZsGC+++KJZmyAiIv/jQHYhMUsS2Hbk9w9v3HdpJx67ujsuTjpbI/XH1O+5MYO+50ZEpG58sfUoUz5OpqC0gpaeLswcGcblPU79QlaR81GT92/9tpSIiFyQknIbz32xg8W/HAJgYEhL5owJp42Ph8nJpKlSuRERkfO2N6uAiR8msCs9H4sFHrysM49Ed8NZ01BiIpUbERE5L6sSj/DkJ8kUldlo3cyVN0aFcUk3P7NjiajciIhIzRSX2Xj2s+0s+y0NgL90asWc0eH4e7ubnEzkdyo3IiJSbakZ+UxcnMDujAIsFnjoiq48dGVXnKwWs6OJVFK5ERGRaln+WxrTPt1OcbkNPy83Zo8KY3AXX7NjiZxC5UZERM6qsLSCZz7dxsqEIwAM6erLzJFh+Hm5mZxM5PRUbkRE5Ix2pecx8cME9mYVYrVA7FXdePCyLlg1DSUNmMqNiIicwjAMlv6axrOfbae0wk6AtxtzRocT2am12dFEzknlRkREqsgvKefJT7bx+ZajAFzW3Y/XbwuldXNNQ0njoHIjIiKVth3JJWZxAgeOF+FktfD40O7cO6STpqGkUVG5ERERDMPgg/8e5PkvdlJms9PWx525Y8Pp36GV2dFEakzlRkSkicsrKWfKx1tZnZwOQHRPf167LZQWnq4mJxM5Pyo3IiJN2NbDOUxcnEDaiWJcnCz8/Zoe/O3ijlgsmoaSxkvlRkSkCTIMg3//fIC4r3ZSbjNo19KDeWMjCAtuYXY0kQumciMi0sTkFJXx+IqtfLMjA4Bregfyyq398PFwMTmZSO1QuRERaUISDp1k0uJEjuQU4+pk5anrezIuqoOmocShqNyIiDQBdrvB2+v38Y81KVTYDTq09mT+2Aj6BPmYHU2k1qnciIg4uBOFZTy2fAvf7coE4IZ+bYi7uS9e7pqGEsekciMi4sB+PXCCh5Ykciy3BFdnK9OH9WLsoPaahhKHpnIjIuKA7HaDf/64l5nf7MZmN+jk24x5YyPo1dbb7GgidU7lRkTEwWQXlPLIsiR+Ss0G4KbwIF4Y0YdmbvqTL02DjnQREQeyce9xJi9NJDO/FHcXK8/d2IfbBrTTNJQ0KSo3IiIOwGY3mPfdHmbH78ZuQFf/5sy/PYJuAV5mRxOpdyo3IiKNXGZ+CQ8vTWLD3uMA3Na/HTOG98bTVX/ipWnSkS8i0oitT83m4WWJZBeU4enqxAsj+nBzRDuzY4mYSuVGRKQRqrDZmR2fyrzv92AY0CPQi3ljI+ji39zsaCKmU7kREWlk0nNLeGhpIpv2nwBgzKD2TB/WC3cXJ5OTiTQMKjciIo3IDymZxH60hROFZTRzdSLuln7cGNrW7FgiDYrKjYhII1Bus/P617tZ8ONeAHq18Wb+7RF09G1mcjKRhkflRkSkgTuaU8ykJYlsPngSgHFRHXjyup6ahhI5A5UbEZEG7NsdGTy2Ygs5ReV4uTnzyq39uK5vG7NjiTRoKjciIg1QWYWdf6zZxdvr9wPQr50P88ZE0L61p8nJRBo+lRsRkQYm7UQRMUsS2ZKWA8BdF3Xk79d2x81Z01Ai1WE1OwDA/PnzCQkJwd3dncjISDZt2nTGsZdddhkWi+WU2/XXX1+PiUVE6saabelcP+cntqTl4O3uzL/u6M+0Yb1UbERqwPQzN8uWLSM2NpYFCxYQGRnJrFmzGDp0KCkpKfj7+58yfuXKlZSVlVXeP378OKGhodx22231GVtEpFaVVtiIW72LdzccACC8fQvmjgmnXUtNQ4nUlMUwDMPMAJGRkQwcOJB58+YBYLfbCQ4OZtKkSUyZMuWc68+aNYtp06Zx7NgxmjU790ci8/Ly8PHxITc3F29v7wvOLyJyoQ4eLyRmcSLJR3IBuO+STjw2tDsuTg3i5LpIg1CT929Tz9yUlZWxefNmpk6dWrnMarUSHR3Nxo0bq/Uc77zzDqNHjz5jsSktLaW0tLTyfl5e3oWFFhGpRV9sPcqUj5MpKK2gpacLr48M5YoeAWbHEmnUTP1nQXZ2NjabjYCAqv8jBwQEkJ6efs71N23axLZt27j77rvPOCYuLg4fH5/KW3Bw8AXnFhG5UCXlNp76JJmYxYkUlFYwMKQlqycPUbERqQWN+pznO++8Q9++fRk0aNAZx0ydOpXc3NzKW1paWj0mFBE51b6sAm56cwMf/nIIgAcv68ySe/5CGx8Pk5OJOAZTp6V8fX1xcnIiIyOjyvKMjAwCAwPPum5hYSFLly7lueeeO+s4Nzc33NzcLjiriEhtWJV4hCc/SaaozEbrZq7MHBXGpd38zI4l4lBMPXPj6upK//79iY+Pr1xmt9uJj48nKirqrOsuX76c0tJS/vrXv9Z1TBGRC1ZcZuPvK7by8LIkisps/KVTK1ZPHqJiI1IHTP8oeGxsLOPHj2fAgAEMGjSIWbNmUVhYyIQJEwAYN24cQUFBxMXFVVnvnXfeYcSIEbRu3dqM2CIi1bYnM5+JHyaSkpGPxQKTrujK5Cu74mS1mB1NxCGZXm5GjRpFVlYW06ZNIz09nbCwMNasWVN5kfGhQ4ewWqueYEpJSWH9+vV8/fXXZkQWEam2FZsP88yqbRSX2/Bt7sac0WEM7uJrdiwRh2b699zUN33PjYjUh8LSCp75dBsrE44AcHEXX94YFYafl64BFDkfjeZ7bkREHNGu9DwmfpjA3qxCrBZ4JLobD17eRdNQIvVE5UZEpJYYhsGyX9OY/tl2SivsBHi7MXt0OH/ppGsDReqTyo2ISC0oKK3gyZXJfLblKACXdvNj5shQWjfXNJRIfVO5ERG5QNuP5hKzOJH92YU4WS08dnV37rukE1ZNQ4mYQuVGROQ8GYbBB78c4vkvdlBWYaetjztzx4bTv0Mrs6OJNGkqNyIi5yGvpJypHyfzZfIxAKJ7+vPqraG0bOZqcjIRUbkREamhrYdziFmcyKETRThbLUy5tgd/u7gjFoumoUQaApUbEZFqMgyDdzcc4KXVOym3GQS18GDe2HDC27c0O5qI/A+VGxGRasgtKufxFVv4esfvP/Q7tHcA/7glFB9PF5OTicifqdyIiJxD4qGTxCxO5EhOMa5OVp68rgfjB4doGkqkgVK5ERE5A7vd4J31+3llzS4q7AbtW3kyf2wEfdv5mB1NRM5C5UZE5DROFpbx6PItfLcrE4Dr+7Uh7ua+eLtrGkqkoVO5ERH5k98OnGDSkkSO5Zbg6mxl2g29uD2yvaahRBoJlRsRkf/PbjdYsG4vr3+9G5vdoJNvM+aNjaBX27P/ArGINCwqNyIiQHZBKbEfbWHd7iwARoS15YWb+tLcTX8mRRoba00Gjxs3jvz8/Mr7W7Zsoby8vNZDiYjUp//uO851s39i3e4s3F2svHJLX94YFaZiI9JI1ajcfPjhhxQXF1feHzJkCGlpabUeSkSkPtjsBnPiUxn71n/JzC+li39zPp14MaMG6voakcasRv8sMQzjrPdFRBqLzPwSHlmWxM97jgNwa/92PDe8N56uOlsj0tjp/2IRaXJ+3pPN5KVJZBeU4uHixAsj+nBL/3ZmxxKRWlLjcrNjxw7S09OB38/c7Nq1i4KCgipj+vXrVzvpRERqUYXNzpz4VOZ+vwfDgO4BXsy/PZwu/l5mRxORWmQxajC3ZLVasVgsp52O+mO5xWLBZrPVasjalJeXh4+PD7m5uXh76+OdIk1FRl4Jk5Yksmn/CQDGDApm+rDeuLs4mZxMRKqjJu/fNTpzs3///gsKJiJihh9SMon9aAsnCsto5urESzf3ZXhYkNmxRKSO1KjcdOjQoa5yiIjUugqbnde/2c0/f9gLQM823swfG04nv+YmJxORunReFxSnpqby6aefcuDAASwWCx07dmTEiBF06tSptvOJiJyXoznFPLQkkd8OngTgjr904Knre2oaSqQJqHG5iYuLY9q0adjtdvz9/TEMg6ysLKZMmcJLL73EY489Vhc5RUSqLX5nBo8u30JOUTlebs68fEs/ru/XxuxYIlJPavQlft9//z1PP/00Tz31FNnZ2Rw7doz09PTKcjNlyhTWrVtXV1lFRM6qrMLOi1/u4G//+Y2conL6BvnwxUMXq9iINDE1+rTUqFGjaNGiBQsXLjzt4/feey/5+fksWbKk1gLWNn1aSsQxpZ0oYtKSRJLScgCYcFEIU67tgZuzpqFEHEGdfVpq06ZNvP/++2d8/I477mDcuHE1eUoRkQu2dns6jy/fQl5JBd7uzrx6WyhDeweaHUtETFKjcpORkUFISMgZH+/YsWPlF/yJiNS10gobcat38e6GAwCEBbdg7phwglt5mhtMRExVo3JTUlKCq6vrGR93cXGhrKzsgkOJiJzLweOFxCxOJPlILgD3DOnI40N74Opco0sJRcQB1fjTUm+//TbNm5/+OyLy8/MvOJCIyLl8ufUYUz7eSn5pBS08XXj9tlCu7BlgdiwRaSBqVG7at2/PW2+9dc4xIiJ1oaTcxgtf7uCD/x4CYECHlswZE07bFh4mJxORhqRG5ebAgQN1FENE5Oz2ZRUwcXEiO4/lAfDgZZ155KpuuDhpGkpEqqrRX4XvvvuOXr16kZeXd8pjubm59O7dm59++qnWwomIAHyadIRhc9ez81gerZq58p+7BvHENT1UbETktGr0l2HWrFncc889p/18uY+PD/fddx8zZ86sUYD58+cTEhKCu7s7kZGRbNq06azjc3JymDhxIm3atMHNzY1u3bqxevXqGr2miDQOxWU2pny8lclLkygssxHZsRVfTR7Cpd38zI4mIg1YjcrNli1buOaaa874+NVXX83mzZur/XzLli0jNjaW6dOnk5CQQGhoKEOHDiUzM/O048vKyrjqqqs4cOAAK1asICUlhbfeeougIP26r4ij2ZOZz4j5P7P01zQsFnjoyq58eHckAd7uZkcTkQauxt9z4+LicuYnc3YmKyur2s83c+ZM7rnnHiZMmADAggUL+PLLL1m0aBFTpkw5ZfyiRYs4ceIEGzZsqMxxtu/dEZHGacXmwzyzahvF5TZ8m7sxe3QYF3XxNTuWiDQSNTpzExQUxLZt2874+NatW2nTpnq/4VJWVsbmzZuJjo7+vzBWK9HR0WzcuPG063z22WdERUUxceJEAgIC6NOnDy+99BI2m+2Mr1NaWkpeXl6Vm4g0TEVlFTz60RYeW76F4nIbF3VpzerJF6vYiEiN1KjcXHfddTzzzDOUlJSc8lhxcTHTp0/nhhtuqNZzZWdnY7PZCAio+t0UAQEBZ/yW43379rFixQpsNhurV6/mmWee4fXXX+eFF1444+vExcXh4+NTeQsODq5WPhGpXynp+Qybu56PEw5jtUDsVd14765I/L00DSUiNVOjH87MyMggIiICJycnYmJi6N69OwC7du1i/vz52Gw2EhISTiksp3P06FGCgoLYsGEDUVFRlcufeOIJfvzxR3755ZdT1unWrRslJSXs378fJ6fffwxv5syZvPrqqxw7duy0r1NaWkppaWnl/by8PIKDg/XDmSINhGEYLPs1jemfbae0wk6AtxuzR4fzl06tzY4mIg1Inf1wZkBAABs2bOCBBx5g6tSp/NGLLBYLQ4cOZf78+dUqNgC+vr44OTmRkZFRZXlGRgaBgaf/wbs2bdrg4uJSWWwAevbsSXp6OmVlZaf9aQg3Nzfc3Nyqu4kiUo8KSit46pNkPk06CsAl3fx4Y2QorZvr/1kROX81/vmFDh06sHr1ak6ePMmePXswDIOuXbvSsmXLGj2Pq6sr/fv3Jz4+nhEjRgBgt9uJj48nJibmtOtcdNFFLF68GLvdjtX6+4za7t27adOmzVl/80pEGp7tR3OZtDiRfdmFOFktPHp1N+6/pDNWq8XsaCLSyNW43PyhZcuWDBw48IJePDY2lvHjxzNgwAAGDRrErFmzKCwsrPz01Lhx4wgKCiIuLg6ABx54gHnz5jF58mQmTZpEamoqL730Eg899NAF5RCR+mMYBh/8cojnv9hBWYWdNj7uzB0TzoCQVmZHExEHcd7lpjaMGjWKrKwspk2bRnp6OmFhYaxZs6ZyauvQoUOVZ2gAgoODWbt2LY888gj9+vUjKCiIyZMn8/e//92sTRCRGsgrKWfqymS+3Pr7NXJX9vDntdtCadlMZ15FpPbU6IJiR1CTC5JEpPYkH85l4uIEDp0owtlq4e/X9ODuIR2xWDQNJSLnVmcXFIuI1JRhGPxnwwFeWr2LMpudoBYezB0bTkT7ml2nJyJSXSo3IlJncovKeeLjLazd/vunIq/uFcCrt4bi43nmbzoXEblQKjciUicSD50kZnEiR3KKcXGy8OR1PblzcIimoUSkzqnciEitMgyDt3/azytrdlFhN2jfypN5Y8Pp166F2dFEpIlQuRGRWnOysIzHlm8hflcmANf3bUPcLX3xdtc0lIjUH5UbEakVvx04wUNLEjmaW4Krs5VnbujFXyPbaxpKROqdyo2IXBC73WDBur28/vVubHaDjr7NmDc2nN5tfcyOJiJNlMqNiJy34wWlxH60hR93ZwEwPKwtL97Ul+Zu+tMiIubRXyAROS+/7DvOQ0sTycgrxc3ZyowbezNqYLCmoUTEdCo3IlIjNrvBm9/v4Y1vd2M3oLNfM+bfHkGPQH3jt4g0DCo3IlJtmfklPLIsiZ/3HAfgloh2PD+iN56u+lMiIg2H/iKJSLX8vCebyUuTyC4oxcPFiedH9OHW/u3MjiUicgqVGxE5K5vdYHZ8KnO/S8UwoHuAF/PGhtM1wMvsaCIip6VyIyJnlJFXwkNLEvll/wkARg8MZvqw3ni4OpmcTETkzFRuROS0ftydReyyJI4XltHM1YmXbu7L8LAgs2OJiJyTyo2IVFFhs/P6N7v55w97AejZxpv5Y8Pp5Nfc5GQiItWjciMilY7mFPPQkkR+O3gSgL/+pT1PX98LdxdNQ4lI46FyIyIAfLcrg9iPtpBTVE5zN2devqUvN/Rra3YsEZEaU7kRaeLKbXZeXZvCv9btA6BvkA/zxobToXUzk5OJiJwflRuRJiztRBGTliSSlJYDwJ2DQ5h6XQ/cnDUNJSKNl8qNSBO1dns6jy/fQl5JBd7uzvzj1lCu6RNodiwRkQumciPSxJRW2Hj5q138++cDAIQGt2DemHCCW3maG0xEpJao3Ig0IYeOFzFxcQLJR3IBuGdIRx4f2gNXZ6vJyUREao/KjUgTsTr5GH9fsZX80gpaeLrw2q2hRPcKMDuWiEitU7kRcXAl5TZe/HIn7//3IAD9O7Rk7phw2rbwMDmZiEjdULkRcWD7swuZ+GECO47lAfDAZZ2JvaobLk6ahhIRx6VyI+KgPk06wpMrkykss9GqmSszR4ZyWXd/s2OJiNQ5lRsRB1NSbmPG59tZsikNgEEdWzFndDiBPu4mJxMRqR8qNyIOZE9mPhM/TCQlIx+LBWIu78LkK7virGkoEWlCVG5EHMTHmw/z9KptFJfb8G3uxqxRYVzc1dfsWCIi9U7lRqSRKyqrYNqn21mx+TAAgzu3ZtboMPy9NA0lIk2Tyo1II5aSns/ExQnsySzAaoHJV3Yj5oouOFktZkcTETGNyo1II2QYBh/9lsb0z7ZTUm7H38uN2aPDierc2uxoIiKmU7kRaWQKSit4+pNkViUdBWBIV1/eGBWGb3M3k5OJiDQMDeIjFPPnzyckJAR3d3ciIyPZtGnTGce+++67WCyWKjd3d11bIE3DjqN53Dh3PauSjuJktfDENd35z4RBKjYiIv/D9DM3y5YtIzY2lgULFhAZGcmsWbMYOnQoKSkp+Puf/gvHvL29SUlJqbxvsej6AnFshmHw4S+HeO6LHZRV2Gnj486cMeEMDGlldjQRkQbH9DM3M2fO5J577mHChAn06tWLBQsW4OnpyaJFi864jsViITAwsPIWEKAf/xPHlV9STsySRJ5etY2yCjtX9PDny4eGqNiIiJyBqeWmrKyMzZs3Ex0dXbnMarUSHR3Nxo0bz7heQUEBHTp0IDg4mOHDh7N9+/Yzji0tLSUvL6/KTaSxSD6cyw1z1/Pl1mM4Wy08eV0P3h43gFbNXM2OJiLSYJlabrKzs7HZbKeceQkICCA9Pf2063Tv3p1Fixbx6aef8sEHH2C32xk8eDCHDx8+7fi4uDh8fHwqb8HBwbW+HSK1zTAM3v15P7f8cwMHjxcR1MKDj+6P4t5LOmPVx7xFRM7K9GtuaioqKoqoqKjK+4MHD6Znz54sXLiQ559//pTxU6dOJTY2tvJ+Xl6eCo40aLlF5Tzx8RbWbs8A4KpeAbx2ayg+ni4mJxMRaRxMLTe+vr44OTmRkZFRZXlGRgaBgYHVeg4XFxfCw8PZs2fPaR93c3PDzU2fJJHGISkth5jFCRw+WYyLk4Wp1/ZkwkUhumheRKQGTJ2WcnV1pX///sTHx1cus9vtxMfHVzk7czY2m43k5GTatGlTVzFF6pxhGLz90z5u/ecGDp8sJriVByvuH8xdF3dUsRERqSHTp6ViY2MZP348AwYMYNCgQcyaNYvCwkImTJgAwLhx4wgKCiIuLg6A5557jr/85S906dKFnJwcXn31VQ4ePMjdd99t5maInLecojIeW76Fb3dmAnBd30BevqUf3u6ahhIROR+ml5tRo0aRlZXFtGnTSE9PJywsjDVr1lReZHzo0CGs1v87wXTy5Enuuece0tPTadmyJf3792fDhg306tXLrE0QOW+bD55g0uJEjuaW4Ops5ZkbevHXyPY6WyMicgEshmEYZoeoT3l5efj4+JCbm4u3t7fZcaSJstsNFq7bx2tfp2CzG3T0bca8seH0butjdjQRkQapJu/fpp+5EWlqjheU8ujyLfyQkgXAjaFteenmvjR30/+OIiK1QX9NRerRL/uO89DSRDLySnFztvLsjb0ZPTBY01AiIrVI5UakHtjsBm9+v4c3vt2N3YDOfs2Yf3sEPQI1NSoiUttUbkTqWFZ+KY8sS2L9nmwAbo4I4vnhfWimaSgRkTqhv64idWjDnmwmL0siK78UDxcnnhvem9sG6BuyRUTqksqNSB2w2Q1mx6cy97tUDAO6BTRn/tgIugZ4mR1NRMThqdyI1LKMvBImL03kv/tOADBqQDDP3tgbD1cnk5OJiDQNKjcitWjd7iweWZbE8cIyPF2deOmmvowIDzI7lohIk6JyI1ILKmx2Zn6zmzd/2AtAzzbezB8bTie/5iYnExFpelRuRC7QsdxiHlqSyK8HTgJwe2R7nrmhF+4umoYSETGDyo3IBfh+VyaxHyVxsqic5m7OvHxLX27o19bsWCIiTZrKjch5KLfZeW1tCgvX7QOgT5A388ZEEOLbzORkIiKiciNSQ4dPFjFpSSKJh3IAuHNwCFOv64Gbs6ahREQaApUbkRr4ens6j6/YSm5xOV7uzrx6az+u6dPG7FgiIvI/VG5EqqGswk7cVzv5988HAAht58O8sREEt/I0N5iIiJxC5UbkHA4dLyJmSQJbD+cCcPfFHXnimh64OltNTiYiIqejciNyFl8lH+OJFVvJL63Ax8OF128LJbpXgNmxRETkLFRuRE6jpNzGS6t38t7GgwD079CSOWPCCWrhYXIyERE5F5UbkT/Zn11IzOIEth/NA+D+Szvz6NXdcHHSNJSISGOgciPyPz7bcpSpH2+lsMxGq2auvD4ylMu7+5sdS0REakDlRoTfp6FmfL6DJZsOATAopBVzxoQT6ONucjIREakplRtp8vZkFhCzOIFd6flYLBBzeRcmX9kVZ01DiYg0Sio30qStTDjM06u2UVRmw7e5K2+MCmNIVz+zY4mIyAVQuZEmqaisgumfbmf55sMARHVqzezRYfh7axpKRKSxU7mRJmd3Rj4TP0wgNbMAqwUmX9mNmCu64GS1mB1NRERqgcqNNBmGYbD8t8NM+2wbJeV2/L3cmD06nKjOrc2OJiIitUjlRpqEwtIKnl61jU8SjwAwpKsvb4wKw7e5m8nJRESktqnciMPbeSyPiR8msC+7ECerhdiruvHApZ2xahpKRMQhqdyIwzIMg8WbDjHj8x2UVdgJ9HZn7thwBoa0MjuaiIjUIZUbcUj5JeVMXZnMF1uPAXB5dz9eHxlGq2auJicTEZG6pnIjDmfbkVxiFidw4HgRzlYLT1zTnbsv7qRpKBGRJkLlRhyGYRi8t/EgL365kzKbnaAWHswZE07/Di3NjiYiIvVI5UYcQm5xOX9fsZU129MBuKpXAK/e2o8WnpqGEhFpahrEj+fMnz+fkJAQ3N3diYyMZNOmTdVab+nSpVgsFkaMGFG3AaVBS0rL4fo5P7FmezouTham3dCLf93RX8VGRKSJMr3cLFu2jNjYWKZPn05CQgKhoaEMHTqUzMzMs6534MABHnvsMYYMGVJPSaWhMQyDt3/ax20LNnD4ZDHBrTxYcf9g7rq4IxaLrq8REWmqTC83M2fO5J577mHChAn06tWLBQsW4OnpyaJFi864js1m4/bbb2fGjBl06tSpHtNKQ5FTVMY9723mhS93Um4zuLZPIF9MGkJocAuzo4mIiMlMLTdlZWVs3ryZ6OjoymVWq5Xo6Gg2btx4xvWee+45/P39+dvf/lYfMaWB2XzwJNfN/olvd2bg6mTl+eG9efP2CHw8XMyOJiIiDYCpFxRnZ2djs9kICAiosjwgIIBdu3addp3169fzzjvvkJSUVK3XKC0tpbS0tPJ+Xl7eeecVc9ntBv/6aR+vrk3BZjcIae3JvLER9AnyMTuaiIg0II3q01L5+fnccccdvPXWW/j6+lZrnbi4OGbMmFHHyaSunSgsI/ajJH5IyQJgWGhbXrqpD17uOlsjIiJVmVpufH19cXJyIiMjo8ryjIwMAgMDTxm/d+9eDhw4wLBhwyqX2e12AJydnUlJSaFz585V1pk6dSqxsbGV9/Py8ggODq7NzZA6tmn/CR5akkh6XgluzlaevbE3owcG66JhERE5LVPLjaurK/379yc+Pr7y49x2u534+HhiYmJOGd+jRw+Sk5OrLHv66afJz89n9uzZpy0tbm5uuLnpl58bI7vd4M0f9jDzm93YDejk14z5YyPo2cbb7GgiItKAmT4tFRsby/jx4xkwYACDBg1i1qxZFBYWMmHCBADGjRtHUFAQcXFxuLu706dPnyrrt2jRAuCU5dK4ZeWXEvtREj+lZgNwc3gQz4/oQzM30w9ZERFp4Ex/pxg1ahRZWVlMmzaN9PR0wsLCWLNmTeVFxocOHcJqNf0T61KPNuzNZvLSJLLyS3F3sfL88D7cNkBTiSIiUj0WwzAMs0PUp7y8PHx8fMjNzcXbW9MbDYnNbjD3u1TmxKdiN6BbQHPmj42ga4CX2dFERMRkNXn/Nv3MjQhAZl4Jk5cmsXHfcQBGDmjHjBv74OHqZHIyERFpbFRuxHQ/pWbxyLIksgvK8HR14sWb+nBTeDuzY4mISCOlciOmqbDZmfVtKvN/2INhQI9AL+bfHkFnv+ZmRxMRkUZM5UZMcSy3mMlLkth04AQAYyPbM+2GXri7aBpKREQujMqN1Lvvd2US+1ESJ4vKae7mTNzNfRkW2tbsWCIi4iBUbqTelNvsvLY2hYXr9gHQJ8ibeWMiCPFtZnIyERFxJCo3Ui+O5BQzaXECCYdyALhzcAhTr+uBm7OmoUREpHap3Eid+2ZHBo8t30JucTle7s68ems/runTxuxYIiLioFRupM6UVdh5Zc0u3lm/H4DQdj7MGxtBcCtPk5OJiIgjU7mROpF2ooiYxQlsOZwLwN8u7sjfr+mBq7N+SkNEROqWyo3UujXbjvH4iq3kl1Tg4+HCa7eFclWvALNjiYhIE6FyI7WmtMLGS1/u5D8bDwIQ0b4Fc8dGENTCw+RkIiLSlKjcSK04kF1IzJIEth3JA+C+Szvx2NXdcXHSNJSIiNQvlRu5YJ9vOcrUlckUlFbQ0tOFmSPDuLyHv9mxRESkiVK5kfNWUm7juS92sPiXQwAMCmnF7DFhtPHRNJSIiJhH5UbOy96sAiZ+mMCu9HwsFoi5vAuTr+yKs6ahRETEZCo3UmOfJB7mqU+2UVRmw7e5K2+MCmNIVz+zY4mIiAAqN1IDxWU2pn+2jY9+OwxAVKfWzB4dhr+3u8nJRERE/o/KjVRLakY+D36YQGpmARYLTL6yK5Ou6IqT1WJ2NBERkSpUbuSsDMNg+ebDTPt0GyXldvy83Jg9OozBnX3NjiYiInJaKjdyRoWlFTyzahsrE48AMKSrL2+MCsO3uZvJyURERM5M5UZOa+exPGIWJ7A3qxCrBR69ujsPXNoZq6ahRESkgVO5kSoMw2DJpjRmfL6d0go7gd7uzBkTzqCOrcyOJiIiUi0qN1Ipv6ScJz/ZxudbjgJweXc/Xh8ZRqtmriYnExERqT6VGwFg25FcYhYncOB4Ec5WC48P7c49QzppGkpERBodlZsmzjAMPvjvQZ7/YidlNjtBLTyYMyac/h1amh1NRETkvKjcNGG5xeVMXbmV1cnpAET3DOC12/rRwlPTUCIi0nip3DRRW9JyiFmSQNqJYlycLEy5tid3XRSCxaJpKBERadxUbpoYwzBY9PMBXv5qJ+U2g+BWHswbE0FocAuzo4mIiNQKlZsmJKeojMdXbOWbHRkAXNsnkJdv6YePh4vJyURERGqPyk0TkXDoJJMWJ3IkpxhXJytP39CTO/7SQdNQIiLicFRuHJzdbvDWT/t4dW0KFXaDkNaezBsbQZ8gH7OjiYiI1AmVGwd2orCMx5Zv4btdmQAMC23LSzf1wctd01AiIuK4VG4c1K8HTjBpcSLpeSW4OVuZPqw3YwYFaxpKREQcntXsAADz588nJCQEd3d3IiMj2bRp0xnHrly5kgEDBtCiRQuaNWtGWFgY77//fj2mbdjsdoP53+9h9L/+S3peCZ38mrFq4kWMjWyvYiMiIk2C6Wduli1bRmxsLAsWLCAyMpJZs2YxdOhQUlJS8Pf3P2V8q1ateOqpp+jRoweurq588cUXTJgwAX9/f4YOHWrCFjQc2QWlPLIsiZ9SswG4OTyI50f0oZmb6f+ZRURE6o3FMAzDzACRkZEMHDiQefPmAWC32wkODmbSpElMmTKlWs8RERHB9ddfz/PPP3/OsXl5efj4+JCbm4u3t/cFZW9INu49zuSliWTml+LuYuW54X24rX87na0RERGHUJP3b1OnpcrKyti8eTPR0dGVy6xWK9HR0WzcuPGc6xuGQXx8PCkpKVxyySV1GbXBstkNZn+byu1v/5fM/FK6+jfns5iLGTlA19eIiEjTZOp8RXZ2NjabjYCAgCrLAwIC2LVr1xnXy83NJSgoiNLSUpycnHjzzTe56qqrTju2tLSU0tLSyvt5eXm1E74ByMwv4eGlSWzYexyAkQPaMePGPni4OpmcTERExDyN8mIMLy8vkpKSKCgoID4+ntjYWDp16sRll112yti4uDhmzJhR/yHr2PrUbB5elkh2QRmerk68MKIPN0e0MzuWiIiI6UwtN76+vjg5OZGRkVFleUZGBoGBgWdcz2q10qVLFwDCwsLYuXMncXFxpy03U6dOJTY2tvJ+Xl4ewcHBtbMBJqiw2Zkdn8q87/dgGNAj0It5YyPo4t/c7GgiIiINgqnX3Li6utK/f3/i4+Mrl9ntduLj44mKiqr289jt9ipTT//Lzc0Nb2/vKrfGKj23hLFv/8Lc734vNmMj27Nq4kUqNiIiIv/D9Gmp2NhYxo8fz4ABAxg0aBCzZs2isLCQCRMmADBu3DiCgoKIi4sDfp9mGjBgAJ07d6a0tJTVq1fz/vvv889//tPMzahzP6RkEvvRFk4UltHczZmXbu7LjaFtzY4lIiLS4JhebkaNGkVWVhbTpk0jPT2dsLAw1qxZU3mR8aFDh7Ba/+8EU2FhIQ8++CCHDx/Gw8ODHj168MEHHzBq1CizNqFOldvsvP71bhb8uBeA3m29mT82ghDfZiYnExERaZhM/56b+taYvufmSE4xDy1JZPPBkwCMj+rA1Ot64u6iT0OJiEjTUpP3b9PP3Mjpfbsjg8dWbCGnqBwvd2f+cUs/ru3bxuxYIiIiDZ7KTQNTVmHnH2t28fb6/QCEtvNh7pgI2rf2NDmZiIhI46By04CknSgiZkkiW9JyALjroo5MubYHrs4N4vdNRUREGgWVmwZizbZ0Hl+xhfySCnw8XHjttlCu6hVw7hVFRESkCpUbk5VW2IhbvYt3NxwAIKJ9C+aMCaddS01DiYiInA+VGxMdPF5IzOJEko/kAnDfpZ147OruuDhpGkpEROR8qdyY5IutR5nycTIFpRW09HRh5sgwLu/hb3YsERGRRk/lpp6VlNt4/osdfPjLIQAGhrRkzphw2vh4mJxMRETEMajc1KN9WQVMXJzIzmN5WCww8bIuPBzdFWdNQ4mIiNQalZt6sirxCE9+kkxRmY3WzVyZNTqMIV39zI4lIiLicFRu6lhxmY1nP9vOst/SAIjq1JrZo8Pw93Y3OZmIiIhjUrmpQ6kZ+UxcnMDujAIsFph8ZVcmXdEVJ6vF7GgiIiIOS+Wmjiz/LY1pn26nuNyGn5cbs0eHMbizr9mxREREHJ7KTS0rLK3gmU+3sTLhCABDuvoyc2QYfl5uJicTERFpGlRuatGu9DwmfpjA3qxCrBZ49OruPHBpZ6yahhIREak3Kje15JsdGcQsTqC0wk6gtztzxoQzqGMrs2OJiIg0OSo3taRnGy/cXZyI6tyamSPDaNXM1exIIiIiTZLKTS1p19KTTx4cTEjrZpqGEhERMZHKTS3q5Nfc7AgiIiJNnr73X0RERByKyo2IiIg4FJUbERERcSgqNyIiIuJQVG5ERETEoajciIiIiENRuRERERGHonIjIiIiDkXlRkRERByKyo2IiIg4FJUbERERcSgqNyIiIuJQVG5ERETEoTS5XwU3DAOAvLw8k5OIiIhIdf3xvv3H+/jZNLlyk5+fD0BwcLDJSURERKSm8vPz8fHxOesYi1GdCuRA7HY7R48excvLC4vFUqvPnZeXR3BwMGlpaXh7e9fqczsa7avq076qPu2r6tO+qhntr+qrq31lGAb5+fm0bdsWq/XsV9U0uTM3VquVdu3a1elreHt76+CvJu2r6tO+qj7tq+rTvqoZ7a/qq4t9da4zNn/QBcUiIiLiUFRuRERExKGo3NQiNzc3pk+fjpubm9lRGjztq+rTvqo+7avq076qGe2v6msI+6rJXVAsIiIijk1nbkRERMShqNyIiIiIQ1G5EREREYeiciMiIiIOReWmmtatW8ewYcNo27YtFouFVatWnXOdH374gYiICNzc3OjSpQvvvvtunedsKGq6v3744QcsFsspt/T09PoJbJK4uDgGDhyIl5cX/v7+jBgxgpSUlHOut3z5cnr06IG7uzt9+/Zl9erV9ZDWXOezr959991Tjil3d/d6Smyuf/7zn/Tr16/yi9SioqL46quvzrpOUzyuoOb7qikfV//r5ZdfxmKx8PDDD591nBnHlcpNNRUWFhIaGsr8+fOrNX7//v1cf/31XH755SQlJfHwww9z9913s3bt2jpO2jDUdH/9ISUlhWPHjlXe/P396yhhw/Djjz8yceJE/vvf//LNN99QXl7O1VdfTWFh4RnX2bBhA2PGjOFvf/sbiYmJjBgxghEjRrBt27Z6TF7/zmdfwe/fkvq/x9TBgwfrKbG52rVrx8svv8zmzZv57bffuOKKKxg+fDjbt28/7fimelxBzfcVNN3j6g+//vorCxcupF+/fmcdZ9pxZUiNAcYnn3xy1jFPPPGE0bt37yrLRo0aZQwdOrQOkzVM1dlf33//vQEYJ0+erJdMDVVmZqYBGD/++OMZx4wcOdK4/vrrqyyLjIw07rvvvrqO16BUZ1/9+9//Nnx8fOovVAPXsmVL4+233z7tYzquqjrbvmrqx1V+fr7RtWtX45tvvjEuvfRSY/LkyWcca9ZxpTM3dWTjxo1ER0dXWTZ06FA2btxoUqLGISwsjDZt2nDVVVfx888/mx2n3uXm5gLQqlWrM47RsfW76uwrgIKCAjp06EBwcPA5/zXuqGw2G0uXLqWwsJCoqKjTjtFx9bvq7Cto2sfVxIkTuf766085Xk7HrOOqyf1wZn1JT08nICCgyrKAgADy8vIoLi7Gw8PDpGQNU5s2bViwYAEDBgygtLSUt99+m8suu4xffvmFiIgIs+PVC7vdzsMPP8xFF11Enz59zjjuTMeWo1+f9L+qu6+6d+/OokWL6NevH7m5ubz22msMHjyY7du31/kP6DYEycnJREVFUVJSQvPmzfnkk0/o1avXacc29eOqJvuqKR9XS5cuJSEhgV9//bVa4806rlRupEHo3r073bt3r7w/ePBg9u7dyxtvvMH7779vYrL6M3HiRLZt28b69evNjtLgVXdfRUVFVfnX9+DBg+nZsycLFy7k+eefr+uYpuvevTtJSUnk5uayYsUKxo8fz48//njGN+2mrCb7qqkeV2lpaUyePJlvvvmmwV9ArXJTRwIDA8nIyKiyLCMjA29vb521qaZBgwY1mTf6mJgYvvjiC9atW3fOf/md6dgKDAysy4gNRk321Z+5uLgQHh7Onj176ihdw+Lq6kqXLl0A6N+/P7/++iuzZ89m4cKFp4xt6sdVTfbVnzWV42rz5s1kZmZWOZtus9lYt24d8+bNo7S0FCcnpyrrmHVc6ZqbOhIVFUV8fHyVZd98881Z53ClqqSkJNq0aWN2jDplGAYxMTF88sknfPfdd3Ts2PGc6zTVY+t89tWf2Ww2kpOTHf64OhO73U5paelpH2uqx9WZnG1f/VlTOa6uvPJKkpOTSUpKqrwNGDCA22+/naSkpFOKDZh4XNXp5coOJD8/30hMTDQSExMNwJg5c6aRmJhoHDx40DAMw5gyZYpxxx13VI7ft2+f4enpaTz++OPGzp07jfnz5xtOTk7GmjVrzNqEelXT/fXGG28Yq1atMlJTU43k5GRj8uTJhtVqNb799luzNqFePPDAA4aPj4/xww8/GMeOHau8FRUVVY654447jClTplTe//nnnw1nZ2fjtddeM3bu3GlMnz7dcHFxMZKTk83YhHpzPvtqxowZxtq1a429e/camzdvNkaPHm24u7sb27dvN2MT6tWUKVOMH3/80di/f7+xdetWY8qUKYbFYjG+/vprwzB0XP2vmu6rpnxc/dmfPy3VUI4rlZtq+uOjyn++jR8/3jAMwxg/frxx6aWXnrJOWFiY4erqanTq1Mn497//Xe+5zVLT/fXKK68YnTt3Ntzd3Y1WrVoZl112mfHdd9+ZE74enW4fAVWOlUsvvbRyv/3ho48+Mrp162a4uroavXv3Nr788sv6DW6C89lXDz/8sNG+fXvD1dXVCAgIMK677jojISGh/sOb4K677jI6dOhguLq6Gn5+fsaVV15Z+WZtGDqu/ldN91VTPq7+7M/lpqEcVxbDMIy6PTckIiIiUn90zY2IiIg4FJUbERERcSgqNyIiIuJQVG5ERETEoajciIiIiENRuRERERGHonIjIiIiDkXlRkRERByKyo2I1Jm0tDTuuusu2rZti6urKx06dGDy5MkcP3682s9x4MABLBYLSUlJdRdURByKyo2I1Il9+/YxYMAAUlNTWbJkCXv27GHBggXEx8cTFRXFiRMnzI4oIg5K5UZE6sTEiRNxdXXl66+/5tJLL6V9+/Zce+21fPvttxw5coSnnnoKAIvFwqpVq6qs26JFC959912Ayl//Dg8Px2KxcNlll1WOW7RoEb1798bNzY02bdoQExNT+dihQ4cYPnw4zZs3x9vbm5EjR5KRkVH5+LPPPktYWBiLFi2iffv2NG/enAcffBCbzcY//vEPAgMD8ff358UXX6ySLScnh7vvvhs/Pz+8vb254oor2LJlSy3uORG5UCo3IlLrTpw4wdq1a3nwwQfx8PCo8lhgYCC33347y5Ytozo/bbdp0yYAvv32W44dO8bKlSsB+Oc//8nEiRO59957SU5O5rPPPqNLly4A2O12hg8fzokTJ/jxxx/55ptv2LdvH6NGjary3Hv37uWrr75izZo1LFmyhHfeeYfrr7+ew4cP8+OPP/LKK6/w9NNP88svv1Suc9ttt5GZmclXX33F5s2biYiI4Morr9SZKJEGxNnsACLieFJTUzEMg549e5728Z49e3Ly5EmysrLO+Vx+fn4AtG7dmsDAwMrlL7zwAo8++iiTJ0+uXDZw4EAA4uPjSU5OZv/+/QQHBwPw3nvv0bt3b3799dfKcXa7nUWLFuHl5UWvXr24/PLLSUlJYfXq1VitVrp3784rr7zC999/T2RkJOvXr2fTpk1kZmbi5uYGwGuvvcaqVatYsWIF995773nsLRGpbSo3IlJnqnNm5nxkZmZy9OhRrrzyytM+vnPnToKDgyuLDUCvXr1o0aIFO3furCw3ISEheHl5VY4JCAjAyckJq9VaZVlmZiYAW7ZsoaCggNatW1d5veLiYvbu3Vtr2yciF0blRkRqXZcuXbBYLOzcuZObbrrplMd37txJy5Yt8fPzw2KxnFKCysvLz/r8f57qOl8uLi5V7lssltMus9vtABQUFNCmTRt++OGHU56rRYsWtZJJRC6crrkRkVrXunVrrrrqKt58802Ki4urPJaens6HH37IqFGjsFgs+Pn5cezYscrHU1NTKSoqqrzv6uoKgM1mq1zm5eVFSEgI8fHxp339nj17kpaWRlpaWuWyHTt2kJOTQ69evc57uyIiIkhPT8fZ2ZkuXbpUufn6+p7384pI7VK5EZE6MW/ePEpLSxk6dCjr1q0jLS2NNWvWcNVVVxEUFFT5KaQrrriCefPmkZiYyG+//cb9999f5eyJv78/Hh4erFmzhoyMDHJzc4HfP+30+uuvM2fOHFJTU0lISGDu3LkAREdH07dvX26//XYSEhLYtGkT48aN49JLL2XAgAHnvU3R0dFERUUxYsQIvv76aw4cOMCGDRt46qmn+O233y5gb4lIbVK5EZE60bVrV3777Tc6derEyJEj6dy5M/feey+XX345GzdupFWrVgC8/vrrBAcHM2TIEMaOHctjjz2Gp6dn5fM4OzszZ84cFi5cSNu2bRk+fDgA48ePZ9asWbz55pv07t2bG264gdTUVOD3qaRPP/2Uli1bcskllxAdHU2nTp1YtmzZBW2TxWJh9erVXHLJJUyYMIFu3boxevRoDh48SEBAwAU9t4jUHotRV1f8iYiIiJhAZ25ERETEoajciIiIiENRuRERERGHonIjIiIiDkXlRkRERByKyo2IiIg4FJUbERERcSgqNyIiIuJQVG5ERETEoajciIiIiENRuRERERGHonIjIiIiDuX/ARvOupKD4uUxAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "d4.plot()\n", "decorate_dice('One die')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`step` plots the Cdf as a step function (which is more technically correct)." ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAweklEQVR4nO3df1RVdb7/8dfhKL9S8Dcokfg7sRSF9OKMPyqMm+Zod33TylGjtCxdS+NWV9IgrWSa0myK0imZZmpuOXnNuleDjFLHkaJAkvJH/kLJ5FcmR9FAOfv7R6szQwKCARs/PB9r7T/OZ38+e7/3Z+3FebH3Puc4LMuyBAAAYAgvuwsAAABoTIQbAABgFMINAAAwCuEGAAAYhXADAACMQrgBAABGIdwAAACjEG4AAIBRCDcAAMAohBsAkPT444/L4XBUawsLC9Ndd91lT0EALhnhBkCT+eqrr/Tb3/5WISEh8vHxUY8ePTRt2jR99dVXdpcGwGBt7C4AgJnWr1+vO+64Q506ddI999yjXr16KT8/X2vWrNG6dev01ltv6dZbb7W7zDrt27dPXl78Dwhcbgg3ABrdwYMHNX36dPXu3Vvbtm1T165dPevmz5+vUaNGafr06dq1a5d69+5tY6V18/HxsbsEAJeAf0kANLpnnnlGZ86c0R//+MdqwUaSunTpotWrV6u8vFy///3vPe0/PfNy4MAB3XXXXerQoYMCAwMVFxenM2fOXLCPN954Q5GRkfLz81OnTp10++23q6CgoF71bd++Xdddd518fX3Vp08frV69usZ+NT1zc/LkSS1YsEChoaHy8fFR37599fTTT8vtdtdr3wCaHlduADS6//3f/1VYWJhGjRpV4/rRo0crLCxMGzduvGDdlClT1KtXLyUnJysnJ0evvvqqunXrpqefftrT56mnntJjjz2mKVOmaNasWSopKdELL7yg0aNHa+fOnerQoUOtteXl5emmm25S165d9fjjj+v8+fNKSkpSUFDQRY/rzJkzGjNmjI4dO6b77rtPV111lXbs2KGEhAQdP35cK1euvOg2ADQDCwAa0cmTJy1J1qRJk+rs95vf/MaSZLlcLsuyLCspKcmSZN19993V+t16661W586dPa/z8/Mtp9NpPfXUU9X65eXlWW3atLmg/ecmT55s+fr6WkeOHPG07d6923I6ndbP/yT27NnTmjlzpuf1E088YV1xxRXW119/Xa3fwoULLafTaR09erTOfQNoHtyWAtCoTp06JUlq3759nf1+Wu9yuaq1z5kzp9rrUaNG6bvvvvP0W79+vdxut6ZMmaLS0lLPEhwcrH79+unjjz+udZ9VVVVKT0/X5MmTddVVV3naBw4cqNjY2Ise29tvv61Ro0apY8eO1fYdExOjqqoqbdu27aLbAND0uC0FoFH9FFp+Cjm1qS0E/WvokKSOHTtKkr7//nsFBARo//79sixL/fr1q3G7bdu2rXWfJSUlOnv2bI1jBwwYoE2bNtVZ8/79+7Vr164LniP6SXFxcZ3jATQPwg2ARhUYGKju3btr165ddfbbtWuXQkJCFBAQUK3d6XTW2N+yLEmS2+2Ww+HQ+++/X2Pfdu3aXWLlF+d2uzVu3Dg98sgjNa7v379/k+0bQP0RbgA0ultuuUWvvPKKtm/frl//+tcXrP/73/+u/Px83XfffQ3edp8+fWRZlnr16tXgMNG1a1f5+flp//79F6zbt29fvfZ9+vRpxcTENGi/AJoXz9wAaHQPP/yw/Pz8dN999+m7776rtu7EiROaM2eO/P399fDDDzd42//xH/8hp9OpJUuWeK7m/MSyrAv296+cTqdiY2O1YcMGHT161NO+Z88epaenX3TfU6ZMUWZmZo19T548qfPnzzfgSAA0Fa7cAGh0/fr105///GdNmzZN11577QXfUFxaWqo333xTffr0afC2+/TpoyeffFIJCQnKz8/X5MmT1b59ex0+fFjvvPOO7r33Xj300EO1jl+yZInS0tI0atQoPfDAAzp//rxeeOEFDRo06KK30h5++GG99957uuWWW3TXXXcpMjJS5eXlysvL07p165Sfn68uXbo0+JgANC7CDYAmcdttt+nqq69WcnKyJ9B07txZ119/vR599FFdc801l7zthQsXqn///nruuee0ZMkSSVJoaKhuuukm/eY3v6lz7ODBg5Wenq74+HglJibqyiuv1JIlS3T8+PGLhht/f39t3bpVy5Yt09tvv62//OUvCggIUP/+/bVkyRIFBgZe8jEBaDwO6+fXdQEAAC5jPHMDAACMQrgBAABGIdwAAACjEG4AAIBRCDcAAMAohBsAAGCUVvc9N263W99++63at28vh8NhdzkAAKAeLMvSqVOn1KNHD3l51X1tptWFm2+//Vah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Dbpyk5WVpenTp9e6fvr06frkk09+cVEAAACXqkHhpqioSGFhYbWu79Wrl+cL/gAAAOzQoHDzww8/yNvbu9b1bdu2VWVl5S8uCgAA4FI1+NNSr776qtq1a1fjulOnTv3iggAAAH6JBoWbq666Sq+88spF+wAAANilQeEmPz+/icoAAABoHA165uajjz5SeHi4XC7XBevKyso0aNAg/f3vf2+04gAAABqqQeFm5cqVmj17tgICAi5YFxgYqPvuu08rVqxoUAEpKSkKCwuTr6+vRowYoaysrDr7nzx5UnPnzlX37t3l4+Oj/v37a9OmTQ3aJwAAMFeDws0XX3yhf//3f691/U033aTs7Ox6b2/t2rWKj49XUlKScnJyNGTIEMXGxqq4uLjG/pWVlRo3bpzy8/O1bt067du3T6+88opCQkIachgAAMBgDXrmpqioSG3btq19Y23aqKSkpN7bW7FihWbPnq24uDhJP34D8saNG5WamqqFCxde0D81NVUnTpzQjh07PHXU9b07AACg9WnQlZuQkBB9+eWXta7ftWuXunfvXq9tVVZWKjs7WzExMf8sxstLMTExyszMrHHMe++9p+joaM2dO1dBQUG65pprtGzZMlVVVdW6n4qKCrlcrmoLAAAwV4PCzfjx4/XYY4/phx9+uGDd2bNnlZSUpFtuuaVe2yotLVVVVZWCgoKqtQcFBdX6LceHDh3SunXrVFVVpU2bNumxxx7T8uXL9eSTT9a6n+TkZAUGBnqW0NDQetUHAAAuTw26LbV48WKtX79e/fv317x58zRgwABJ0t69e5WSkqKqqiotWrSoSQqVJLfbrW7duumPf/yjnE6nIiMjdezYMT3zzDNKSkqqcUxCQoLi4+M9r10uFwEHAACDNSjcBAUFaceOHbr//vuVkJAgy7IkSQ6HQ7GxsUpJSbngSkxtunTpIqfTqaKiomrtRUVFCg4OrnFM9+7d1bZtWzmdTk/bwIEDVVhYqMrKyhp/GsLHx0c+Pj71PUQAAHCZa9BtKUnq2bOnNm3apNLSUn366af65JNPVFpaqk2bNqlXr1713o63t7ciIyOVkZHhaXO73crIyFB0dHSNY371q1/pwIEDcrvdnravv/5a3bt3r/M3rwAAQOvR4HDzk44dO+q6667T8OHD1bFjx0vaRnx8vF555RX9+c9/1p49e3T//fervLzc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63/84x9WmzZtrGeffdbas2ePlZSUZLVt29bKy8uz4xCazaXM1ZIlS6z09HTr4MGDVnZ2tnX77bdbvr6+1ldffWXHITSrhQsXWlu3brUOHz5s7dq1y1q4cKHlcDisDz74wLIszqt/1dC5as3n1c/9/NNSLeW8ItzU008fVf75MnPmTMuyLGvmzJnWmDFjLhgTERFheXt7W71797b+9Kc/NXvddmnofD399NNWnz59LF9fX6tTp07W2LFjrY8++sie4ptRTXMkqdq5MmbMGM+8/eRvf/ub1b9/f8vb29saNGiQtXHjxuYt3AaXMlcLFiywrrrqKsvb29sKCgqyxo8fb+Xk5DR/8Ta4++67rZ49e1re3t5W165drRtvvNHzZm1ZnFf/qqFz1ZrPq5/7ebhpKeeVw7Isq2mvDQEAADQfnrkBAABGIdwAAACjEG4AAIBRCDcAAMAohBsAAGAUwg0AADAK4QYAABiFcAMAAIxCuAHQZAoKCnT33XerR48e8vb2Vs+ePTV//nx999139d5Gfn6+HA6HcnNzm65QAEYh3ABoEocOHVJUVJT279+vN998UwcOHNCqVauUkZGh6OhonThxwu4SARiKcAOgScydO1fe3t764IMPNGbMGF111VW6+eab9eGHH+rYsWNatGiRJMnhcGjDhg3Vxnbo0EGvvfaaJHl+/Xvo0KFyOBwaO3asp19qaqoGDRokHx8fde/eXfPmzfOsO3r0qCZNmqR27dopICBAU6ZMUVFRkWf9448/roiICKWmpuqqq65Su3bt9MADD6iqqkq///3vFRwcrG7duumpp56qVtvJkyc1a9Ysde3aVQEBAbrhhhv0xRdfNOLMAfilCDcAGt2JEyeUnp6uBx54QH5+ftXWBQcHa9q0aVq7dq3q89N2WVlZkqQPP/xQx48f1/r16yVJL7/8subOnat7771XeXl5eu+999S3b19Jktvt1qRJk3TixAlt3bpVmzdv1qFDhzR16tRq2z548KDef/99paWl6c0339SaNWs0YcIEffPNN9q6dauefvppLV68WJ9++qlnzG233abi4mK9//77ys7O1rBhw3TjjTdyJQpoQdrYXQAA8+zfv1+WZWngwIE1rh84cKC+//57lZSUXHRbXbt2lSR17txZwcHBnvYnn3xS//mf/6n58+d72q677jpJUkZGhvLy8nT48GGFhoZKkv7yl79o0KBB+uyzzzz93G63UlNT1b59e4WHh+v666/Xvn37tGnTJnl5eWnAgAF6+umn9fHHH2vEiBHavn27srKyVFxcLB8fH0nSs88+qw0bNmjdunW69957L2G2ADQ2wg2AJlOfKzOXori4WN9++61uvPHGGtfv2bNHoaGhnmAjSeHh4erQoYP27NnjCTdhYWFq3769p09QUJCcTqe8vLyqtRUXF0uSvvjiC50+fVqdO3eutr+zZ8/q4MGDjXZ8AH4Zwg2ARte3b185HA7t2bNHt9566wXr9+zZo44dO6pr165yOBwXhKBz587Vuf2f3+q6VG3btq322uFw1NjmdrslSadPn1b37t21ZcuWC7bVoUOHRqkJwC/HMzcAGl3nzp01btw4vfTSSzp79my1dYWFhfrrX/+qqVOnyuFwqGvXrjp+/Lhn/f79+3XmzBnPa29vb0lSVVWVp619+/YKCwtTRkZGjfsfOHCgCgoKVFBQ4GnbvXu3Tp48qfDw8Es+rmHDhqmwsFBt2rRR3759qy1dunS55O0CaFyEGwBN4sUXX1RFRYViY2O1bds2FRQUKC0tTePGjVNISIjnU0g33HCDXnzxRe3cuVOff/655syZU+3qSbdu3eTn56e0tDQVFRWprKxM0o+fdlq+fLn+8Ic/aP/+/crJydELL7wgSYqJidG1116radOmKScnR1lZWZoxY4bGjBmjqKioSz6mmJgYRUdHa/Lkyfrggw+Un5+vHTt2aNGiRfr8889/wWwBaEyEGwBNol+/fvr888/Vu3dvTZkyRX369NG9996r66+/XpmZmerUqZMkafny5QoNDdWoUaN055136qGHHpK/v79nO23atNEf/vAHrV69Wj169NCkSZMkSTNnztTKlSv10ksvadCgQbrlllu0f/9+ST/eSnr33XfVsWNHjR49WjExMerdu7fWrl37i47J4XBo06ZNGj16tOLi4tS/f3/dfvvtOnLkiIKCgn7RtgE0HofVVE/8AQAA2IArNwAAwCiEGwAAYBTCDQAAMArhBgAAGIVwAwAAjEK4AQAARiHcAAAAoxBuAACAUQg3AADAKIQbAABgFMINAAAwCuEGAAAY5f8Dh24RSg6KuDYAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "d4.step()\n", "decorate_dice('One die')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Selection\n", "\n", "The bracket operator works as usual." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.25" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4[1]" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4[4]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Evaluating CDFs\n", "\n", "`Cdf` provides `forward` and `inverse`, which evaluate the CDF and its inverse as functions.\n", "\n", "Evaluating a `Cdf` forward maps from a quantity to its cumulative probability." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "d6 = Cdf.from_seq([1,2,3,4,5,6])" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(0.5)" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.forward(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`forward` interpolates, so it works for quantities that are not in the distribution." ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(0.5)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.forward(3.5)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(0.)" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.forward(0)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(1.)" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.forward(7)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also call the `Cdf` like a function (which it is)." ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(0.16666667)" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6(1.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`forward` can take an array of quantities, too." ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "def decorate_cdf(title):\n", " \"\"\"Labels the axes.\n", " \n", " title: string\n", " \"\"\"\n", " plt.xlabel('Quantity')\n", " plt.ylabel('CDF')\n", " plt.title(title)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+fklEQVR4nO3deXhU5d3/8c9kmUlCNiA7BMIqmxAFQUAEJRoRsVytiCsIihs8BfPwq1KBgG0J7VMRrCyiAj5WCy6VulAQEBSFPigIShFI2ItkY0lCgARmzu8PmMExATPZzknyfl3XXJdzcs7MdwKST+77/p7bZhiGIQAAgHrCz+wCAAAAqhPhBgAA1CuEGwAAUK8QbgAAQL1CuAEAAPUK4QYAANQrhBsAAFCvEG4AAEC9QrgBAAD1CuEGgKWsX79eNptN69evN7uUch04cEA2m01Lliwx5f2XLFkim82mAwcOmPL+QF1AuAEsyv1DrLzHM888Y3Z5qGEzZszQ8uXLzS4DqJMCzC4AwJU999xzatWqldexLl26mFQNasuMGTN01113aejQoV7HH3zwQd1zzz1yOBzmFAbUAYQbwOIGDRqkHj16VPvrFhcXq1GjRtX+uj/HMAydPXtWwcHBtf7e9YG/v7/8/f3NLgOwNKalgDru008/Vb9+/dSoUSNFRkbqF7/4hb7//nuvc6ZNmyabzaadO3fqvvvuU+PGjXXDDTfogw8+kM1m07fffus597333pPNZtMvf/lLr9fo2LGjhg8f7nm+ePFi3XzzzYqJiZHD4VCnTp00f/78MvUlJSXpjjvu0KpVq9SjRw8FBwfr5ZdfliT95z//0dChQ9WoUSPFxMToqaeeUklJSYU/+5EjRzR69GjFxsbK4XCoc+fOWrRokefrOTk5CggI0PTp08tcu3v3btlsNr300kuSpOPHj2vixIm6+uqrFRoaqvDwcA0aNEjbt2//2ToGDBigAQMGlDn+0EMPKSkpyevYn//8Z/Xp00dNmzZVcHCwunfvrnfffdfrHJvNpuLiYr3++uueqciHHnpI0uXX3MybN0+dO3eWw+FQQkKCxo4dq5MnT5aps0uXLtq5c6duuukmhYSEqFmzZvrTn/70s58RqEsYuQEsrqCgQPn5+V7HoqKiJElr1qzRoEGD1Lp1a02bNk1nzpzRX/7yF/Xt21dbt24t84N12LBhateunWbMmCHDMHTDDTfIZrPp888/V9euXSVJGzZskJ+fn7744gvPdXl5edq1a5fGjRvnOTZ//nx17txZd955pwICAvThhx/qySeflMvl0tixY73ed/fu3br33nv12GOPacyYMbrqqqt05swZDRw4UIcOHdKvf/1rJSQk6I033tCnn35aoe9LTk6Orr/+etlsNo0bN07R0dH65z//qYcffliFhYWaMGGCYmNj1b9/f7399ttKT0/3un7ZsmXy9/fXsGHDJEn79u3T8uXLNWzYMLVq1Uo5OTl6+eWX1b9/f+3cuVMJCQkVquvnzJkzR3feeafuv/9+lZaWaunSpRo2bJg++ugjDR48WJL0xhtv6JFHHlHPnj316KOPSpLatGlz2decNm2apk+frpSUFD3xxBPavXu35s+fr6+++kpffvmlAgMDPeeeOHFCt912m375y1/q7rvv1rvvvqunn35aV199tQYNGlQtnxEwnQHAkhYvXmxIKvfhlpycbMTExBjHjh3zHNu+fbvh5+dnjBgxwnMsPT3dkGTce++9Zd6nc+fOxt133+15fu211xrDhg0zJBnff/+9YRiG8fe//92QZGzfvt1z3unTp8u8VmpqqtG6dWuvYy1btjQkGStXrvQ6Pnv2bEOS8fbbb3uOFRcXG23btjUkGevWrbvi9+fhhx824uPjjfz8fK/j99xzjxEREeGp7+WXXzYkGd99953XeZ06dTJuvvlmz/OzZ88aTqfT65z9+/cbDofDeO6557yOSTIWL17sOda/f3+jf//+ZWocOXKk0bJlS69jP/2+lZaWGl26dPGqxTAMo1GjRsbIkSPLvKb778X+/fsNwzCM3Nxcw263G7feeqtX/S+99JIhyVi0aJFXnZKM//3f//UcKykpMeLi4oxf/epXZd4LqKuYlgIsbu7cuVq9erXXQ5KOHj2qbdu26aGHHlKTJk0853ft2lW33HKLVqxYUea1Hn/88TLH+vXrpw0bNkiSioqKtH37dj366KOKioryHN+wYYMiIyO9FjL/eM2Me3Spf//+2rdvnwoKCrzeo1WrVkpNTfU6tmLFCsXHx+uuu+7yHAsJCfGMVFyJYRh67733NGTIEBmGofz8fM8jNTVVBQUF2rp1qyTpl7/8pQICArRs2TLP9Tt27NDOnTu9ptkcDof8/C78k+h0OnXs2DGFhobqqquu8rxWdfjx9+3EiRMqKChQv379Kv0ea9asUWlpqSZMmOCpX5LGjBmj8PBwffzxx17nh4aG6oEHHvA8t9vt6tmzp/bt21ep9wesiHADWFzPnj2VkpLi9ZCkgwcPSpKuuuqqMtd07NhR+fn5Ki4u9jr+064r6UK4OXr0qLKysrRx40bZbDb17t3bK/Rs2LBBffv29frh+eWXXyolJcWz1ic6Olq//e1vJanccPNTBw8eVNu2bWWz2byOl/d5fiovL08nT57UwoULFR0d7fUYNWqUJCk3N1fShSm8gQMH6u233/Zcv2zZMgUEBHitK3K5XHrhhRfUrl07ORwORUVFKTo6Wt9++22Zz1MVH330ka6//noFBQWpSZMmio6O1vz58yv9Hpf7e2C329W6dWvP192aN29e5nveuHFjnThxolLvD1gRa26ABqS8DqUbbrhBkvT5559r3759uvbaa9WoUSP169dPL774ok6dOqVvvvlGf/jDHzzX7N27VwMHDlSHDh00a9YsJSYmym63a8WKFXrhhRfkcrl+9n2rwv36DzzwgEaOHFnuOe41RJJ0zz33aNSoUdq2bZuSk5P19ttva+DAgZ61S9KF1uspU6Zo9OjR+t3vfqcmTZrIz89PEyZMKPN5fspms8kwjDLHnU6n1/MNGzbozjvv1I033qh58+YpPj5egYGBWrx4sd56660Kf/6quFynVXn1A3UV4Qaoo1q2bCnpwmLdn9q1a5eioqIq1OrdokULtWjRQhs2bNC+ffvUr18/SdKNN96otLQ0vfPOO3I6nbrxxhs913z44YcqKSnRBx98oBYtWniOr1u3zqf6d+zYIcMwvEYSyvs8PxUdHa2wsDA5nU7PSNaVDB06VI899phnamrPnj2aNGmS1znvvvuubrrpJr322mtex0+ePOkVgsrTuHHjcqd1fjpq8t577ykoKEirVq3yuk/N4sWLy1z709GVy/nx34PWrVt7jpeWlmr//v0V+v4A9Q3TUkAdFR8fr+TkZL3++uteLb87duzQJ598ottvv73Cr9WvXz99+umn2rx5syfcJCcnKywsTDNnzvS0LLu5f/v/8W/7BQUF5f6Qvpzbb79dP/zwg1cb9OnTp7Vw4cKfvdbf31+/+tWv9N5772nHjh1lvp6Xl+f1PDIyUqmpqXr77be1dOlS2e32MjfH8/f3LzN68c477+jIkSM/W0+bNm20a9cur/fdvn27vvzyyzLvYbPZvEZ0Dhw4UO6diBs1alSmlbs8KSkpstvtevHFF73qf+2111RQUODpwAIaEkZugDrsf/7nfzRo0CD17t1bDz/8sKcVPCIiQtOmTavw6/Tr109vvvmmbDabZ5rK399fffr00apVqzRgwADZ7XbP+bfeeqvsdruGDBmixx57TKdOndIrr7yimJgYHT16tELvOWbMGL300ksaMWKEtmzZovj4eL3xxhsKCQmp0PUzZ87UunXr1KtXL40ZM0adOnXS8ePHtXXrVq1Zs0bHjx/3On/48OF64IEHNG/ePKWmpioyMtLr63fccYeee+45jRo1Sn369NF3332nN99802s05HJGjx6tWbNmKTU1VQ8//LByc3O1YMECde7cWYWFhZ7zBg8erFmzZum2227Tfffdp9zcXM2dO1dt27b1uteQJHXv3l1r1qzRrFmzlJCQoFatWqlXr15l3js6OlqTJk3S9OnTddttt+nOO+/U7t27NW/ePF133XVei4eBBsO8Ri0AV+Ju+f3qq6+ueN6aNWuMvn37GsHBwUZ4eLgxZMgQY+fOnV7nuFvB8/Lyyn2Nf//734Yko2PHjl7Hf//73xuSjClTppS55oMPPjC6du1qBAUFGUlJScYf//hHY9GiRV5tyoZxoRV88ODB5b7vwYMHjTvvvNMICQkxoqKijPHjxxsrV66sUCu4YRhGTk6OMXbsWCMxMdEIDAw04uLijIEDBxoLFy4sc25hYaERHBxsSDL++te/lvn62bNnjf/+7/824uPjjeDgYKNv377Gpk2byrR5l9cKbhiG8de//tVo3bq1YbfbjeTkZGPVqlXltoK/9tprRrt27QyHw2F06NDBWLx4sefP58d27dpl3HjjjZ6a3W3hP20Fd3vppZeMDh06GIGBgUZsbKzxxBNPGCdOnPA6p3///kbnzp3LfPby6gTqMpthsIoMAADUH6y5AQAA9QrhBgAA1CuEGwAAUK8QbgAAQL1CuAEAAPUK4QYAANQrDe4mfi6XSz/88IPCwsIqfHtzAABgLsMwVFRUpISEBK9NfMvT4MLNDz/8oMTERLPLAAAAlXD48GE1b978iuc0uHATFhYm6cI3Jzw83ORqAABARRQWFioxMdHzc/xKGly4cU9FhYeHE24AAKhjKrKkhAXFAACgXiHcAACAeoVwAwAA6hXCDQAAqFcINwAAoF4h3AAAgHqFcAMAAOoVwg0AAKhXCDcAAKBeIdwAAIB6xdRw8/nnn2vIkCFKSEiQzWbT8uXLf/aa9evX69prr5XD4VDbtm21ZMmSGq8TAADUHaaGm+LiYnXr1k1z586t0Pn79+/X4MGDddNNN2nbtm2aMGGCHnnkEa1ataqGKwUAAHWFqRtnDho0SIMGDarw+QsWLFCrVq30/PPPS5I6duyoL774Qi+88IJSU1NrqkwAACrEMAzlFJbovMtldimmsgf4KSYsyLT3r1O7gm/atEkpKSlex1JTUzVhwoTLXlNSUqKSkhLP88LCwpoqDwDQwM385y69/Pk+s8sw3bUtIvX3J/ua9v51KtxkZ2crNjbW61hsbKwKCwt15swZBQcHl7kmIyND06dPr60SAQAN2NpduZIku7+fbDaTizFRoL+5/Up1KtxUxqRJk5SWluZ5XlhYqMTERBMrAgDUR6XnXTqQXyxJWv//Bighsuwv3KgddSrcxMXFKScnx+tYTk6OwsPDyx21kSSHwyGHw1Eb5QEAGrCDx4p13mWokd1f8RHmrTdBHbvPTe/evbV27VqvY6tXr1bv3r1NqggAgAsyc09JktrGhsnWkOekLMDUcHPq1Clt27ZN27Ztk3Sh1Xvbtm06dOiQpAtTSiNGjPCc//jjj2vfvn36zW9+o127dmnevHl6++239dRTT5lRPgAAHpk5F8JNu5hQkyuBqeHm66+/1jXXXKNrrrlGkpSWlqZrrrlGU6dOlSQdPXrUE3QkqVWrVvr444+1evVqdevWTc8//7xeffVV2sABAKbLzC2SRLixAlPX3AwYMECGYVz26+XdfXjAgAH65ptvarAqAAB8l3VxWqpdLOHGbHVqzQ0AAFZ03unSvrwLnVLtYsJMrgaEGwAAqujQ8dMqdboUHOivZrSAm45wAwBAFe25uJi4bUyo/PzolDIb4QYAgCrKYjGxpRBuAACookv3uCHcWAHhBgCAKrp0jxsWE1sB4QYAgCpwugztzeMGflZCuAEAoAr+c+K0Ss67ZA/wU2KTELPLgQg3AABUiXtKqk10qPzplLIEwg0AAFXgXkzMlJR1EG4AAKgC9pSyHsINAABVwJ5S1kO4AQCgklwu40fhhjZwqyDcAABQST8UnNHpUqcC/W1qSaeUZRBuAACoJPdi4tZRoQrw50eqVfAnAQBAJWXlsO2CFRFuAACoJDqlrIlwAwBAJe1hTylLItwAAFAJhmHQBm5RhBsAACohu/CsTpWcl7+fTUlNG5ldDn6EcAMAQCW495RKahoiewA/Tq2EPw0AACrh0p5SrLexGsINAACVkOXulGK9jeUQbgAAqAT3tFRb2sAth3ADAICPDMPwTEu1Z08pyyHcAADgo7xTJSo4c05+NqlVFJ1SVkO4AQDAR+5tF1o2baSgQH+Tq8FPEW4AAPCRe0qK9TbWRLgBAMBH7CllbYQbAAB85O6Uog3cmgg3AAD4KIsb+Fka4QYAAB8cO1WiY8WlstmkNtGM3FgR4QYAAB+4FxM3bxysYDudUlZEuAEAwAfsKWV9hBsAAHyQlUOnlNURbgAA8IFn5IZtFyyLcAMAgA8uTUsxcmNVhBsAACro5OlS5RWVSJLaEG4si3ADAEAFue9v0ywyWKGOAJOrweUQbgAAqCD2lKobCDcAAFSQZ9sFwo2lEW4AAKggz4aZ7CllaYQbAAAqKMszLUUbuJURbgAAqICis+d0tOCsJNbcWB3hBgCACnCP2sSGOxQRHGhyNbgSwg0AABXAnlJ1B+EGAIAKyLy4pxRTUtbHHYgAANXm7Dmn8k+VmF1Gjfj3D4WSpPbsKWV5hBsAQLU4VXJeA/5nfb0NN260gVsf4QYAUC2++0+BJ9g4AurnqocOcWG6ulmE2WXgZxBuAADVIuviDe5SOsbo1ZHXmVwNGrL6Ga0BALUukxvcwSIINwCAasG+S7AKwg0AoFp47gPDgluYjHADAKiyE8WlnsXEbaIJNzAX4QYAUGVZeRdGbZpFBquRg14VmMv0cDN37lwlJSUpKChIvXr10ubNm694/uzZs3XVVVcpODhYiYmJeuqpp3T27NlaqhYAUB7PehumpGABpoabZcuWKS0tTenp6dq6dau6deum1NRU5ebmlnv+W2+9pWeeeUbp6en6/vvv9dprr2nZsmX67W9/W8uVAwB+LPNiGziLiWEFpoabWbNmacyYMRo1apQ6deqkBQsWKCQkRIsWLSr3/I0bN6pv37667777lJSUpFtvvVX33nvvz472AABq1qWRG9rAYT7Twk1paam2bNmilJSUS8X4+SklJUWbNm0q95o+ffpoy5YtnjCzb98+rVixQrfffvtl36ekpESFhYVeDwBA9WLkBlZi2qqv/Px8OZ1OxcbGeh2PjY3Vrl27yr3mvvvuU35+vm644QYZhqHz58/r8ccfv+K0VEZGhqZPn16ttQMALik4c045hRc6pdgxG1Zg+oJiX6xfv14zZszQvHnztHXrVv3973/Xxx9/rN/97neXvWbSpEkqKCjwPA4fPlyLFQNA/Zd18f428RFBCgsKNLkawMSRm6ioKPn7+ysnJ8freE5OjuLi4sq9ZsqUKXrwwQf1yCOPSJKuvvpqFRcX69FHH9Wzzz4rP7+yWc3hcMjhcFT/BwAASLq0pxSjNrAK00Zu7Ha7unfvrrVr13qOuVwurV27Vr179y73mtOnT5cJMP7+/pIkwzBqrlgAwGVd2naBxcSwBlPvtJSWlqaRI0eqR48e6tmzp2bPnq3i4mKNGjVKkjRixAg1a9ZMGRkZkqQhQ4Zo1qxZuuaaa9SrVy9lZWVpypQpGjJkiCfkAABqF9suwGpMDTfDhw9XXl6epk6dquzsbCUnJ2vlypWeRcaHDh3yGqmZPHmybDabJk+erCNHjig6OlpDhgzRH/7wB7M+AgA0eO41N3RKwSpsRgObzyksLFRERIQKCgoUHh5udjkAUKedKjmvLumrJEnbpt6iyBC7yRWhvvLl53ed6pYCAFjL3oujNtFhDoINLINwAwCotEympGBBhBsAQKVxZ2JYEeEGAFBpWRfbwNuypxQshHADAKg0pqVgRYQbAEClnCl16vCJ05IIN7AWwg0AoFL25p2SYUhNG9nVNJRtbmAdhBsAQKVksqcULIpwAwCoFM+eUmy7AIsh3AAAKuXSYmI6pWAthBsAQKWwpxSsinADAPDZ2XNOHTxWLElqy7QULIZwAwDw2f78YrkMKSI4UNF0SsFiCDcAAJ/9+OZ9NpvN5GoAb4QbAIDPsnIu7inFlBQsiHADAPCZe+SmLZ1SsCDCDQDAZ+wpBSsj3AAAfFJ63qUD+Rc6pZiWghURbgAAPjl4rFjnXYZCHQGKCw8yuxygDMINAMAnl9bb0CkFayLcAAB8ssfdKcV6G1gU4QYA4BP3yE37WDqlYE2EGwCAT7Iu7gbOtguwKsINAKDCzjtd2pdPGzisjXADAKiwg8dP65zTUIjdXwkRwWaXA5SLcAMAqLDMnEudUn5+dErBmgg3AIAKy8q90CnVlikpWBjhBgBQYZe2XaBTCtZFuAEAVJh7WorFxLAywg0AoEKcLkN78y6GG9rAYWGEGwBAhfznxGmVnHfJEeCn5o1DzC4HuCzCDQCgQtxTUm2iQ+VPpxQsjHADAKgQz2JipqRgcYQbAECFZOayYSbqBsINAKBCsnLdN/CjDRzWRrgBAPwsl8vwrLlpz7QULC7A7AIAoD7JP1Wis+ecZpdR7XIKS3TmnFN2fz+1aEKnFKyNcAMA1eSdrw/r/737rdll1KjW0Y0U4M+gP6yNcAMA1WTd7lxJUoCfrV62Sgf42TSsR6LZZQA/i3ADANXEvSbl1ZE9NOCqGJOrARouxhYBoBqcc7q0P79YktQulm4iwEyEGwCoBgePFeu8y1Aju78SIoLMLgdo0Ag3AFAN3FNSbWNCZbPVv/U2QF1CuAGAapDJDe4AyyDcAEA1YN8lwDoINwBQDTJz2HcJsArCDQBU0XmnS/vcnVJMSwGmI9wAQBUdOn5apeddCgr0U/PGwWaXAzR4hBsAqKJLi4lD5VcP70wM1DWEGwCooiz3YmKmpABLINwAQBW5FxO3ZTExYAmEGwCoIk8bOOEGsATCDQBUgdNlXJqWYk8pwBIINwBQBUdOnFHJeZfsAX5KpFMKsATCDQBUQWbuhfU2raMaKcCff1IBK+D/RACogkympADLMT3czJ07V0lJSQoKClKvXr20efPmK55/8uRJjR07VvHx8XI4HGrfvr1WrFhRS9UCgDf3buAsJgasI8DMN1+2bJnS0tK0YMEC9erVS7Nnz1Zqaqp2796tmJiYMueXlpbqlltuUUxMjN599101a9ZMBw8eVGRkZO0XDwCSsnLZUwqwGlPDzaxZszRmzBiNGjVKkrRgwQJ9/PHHWrRokZ555pky5y9atEjHjx/Xxo0bFRgYKElKSkqqzZIBwMMwDHYDByzItGmp0tJSbdmyRSkpKZeK8fNTSkqKNm3aVO41H3zwgXr37q2xY8cqNjZWXbp00YwZM+R0Oi/7PiUlJSosLPR6AEB1+KHgrE6XOhXgZ1PLpo3MLgfARaaFm/z8fDmdTsXGxnodj42NVXZ2drnX7Nu3T++++66cTqdWrFihKVOm6Pnnn9fvf//7y75PRkaGIiIiPI/ExMRq/RwAGi73nYlbRTVSIJ1SgGXUqf8bXS6XYmJitHDhQnXv3l3Dhw/Xs88+qwULFlz2mkmTJqmgoMDzOHz4cC1WDKA+y2JKCrAk09bcREVFyd/fXzk5OV7Hc3JyFBcXV+418fHxCgwMlL+/v+dYx44dlZ2drdLSUtnt9jLXOBwOORyO6i0eACTtyXEvJqYNHLAS00Zu7Ha7unfvrrVr13qOuVwurV27Vr179y73mr59+yorK0sul8tzbM+ePYqPjy832ABATWIxMWBNpk5LpaWl6ZVXXtHrr7+u77//Xk888YSKi4s93VMjRozQpEmTPOc/8cQTOn78uMaPH689e/bo448/1owZMzR27FizPgKABsowDGV57nHDyA1gJaa2gg8fPlx5eXmaOnWqsrOzlZycrJUrV3oWGR86dEh+fpfyV2JiolatWqWnnnpKXbt2VbNmzTR+/Hg9/fTTZn0EAA1UTmGJikrOy9/PpqSoELPLAfAjNsMwDLOLqE2FhYWKiIhQQUGBwsPDzS4HQB21ITNPD762Wa2jG+nT/x5gdjlAvefLz+861S0FAFbBtguAdRFuAKASPIuJWW8DWA7hBgAqwbOnFJ1SgOUQbgDAR4ZhaM/Faam2TEsBlkO4AQAf5Z8qVcGZc7LZpDbRhBvAagg3AOCjzItTUi2ahCgo0P9nzgZQ2wg3AOAjz55STEkBlkS4AQAfZXrW29ApBVgR4QYAfOSelmLkBrAmwg0A+MhzAz/awAFLItwAgA+OnSrRseJSSbSBA1ZFuAEAH7gXEzdvHKwQu6l7DwO4DMINAPggk04pwPIINwDgA08beCydUoBVEW4AwAfuTinW2wDW5VO4GTFihIqKijzPt2/frnPnzlV7UQBgVZ5OKcINYFk+hZs333xTZ86c8Tzv16+fDh8+XO1FAYAVFZw+p9yiEkmM3ABW5lO4MQzjis8BoD7Lyrswch0fEaSwoECTqwFwOay5AYAKurTtAqM2gJX5fJOGnTt3Kjs7W9KFkZtdu3bp1KlTXud07dq1eqoDAAu51AZOpxRgZT6Hm4EDB3pNR91xxx2SJJvNJsMwZLPZ5HQ6q69CALAIT7hh2wXA0nwKN/v376+pOgDA8rJy2DATqAt8CjctW7asqToAwNKKzp7TDwVnJbHmBrC6Sm2MkpmZqX/84x86cOCAbDabWrVqpaFDh6p169bVXR8AWMLevGJJUnSYQ5EhdpOrAXAlPoebjIwMTZ06VS6XSzExMTIMQ3l5eXrmmWc0Y8YMTZw4sSbqBABT7bk4JdWe9TaA5fkUbtatW6fJkydrypQpGj9+vBo3bixJOn78uGbPnq1nnnlGPXv21I033lgjxQKwtvNOl7ILz5pdRo3YfvikJDqlgLrAZvhwJ77hw4crMjJSL7/8crlff/TRR1VUVKS//e1v1VZgdSssLFRERIQKCgoUHh5udjlAvfKLuV96QkB99fuhXfTA9aw/BGqbLz+/fRq52bx5s954443Lfv3BBx/UiBEjfHlJAPXEsVMlnmDjCKif9weNDnPopg4xZpcB4Gf4FG5ycnKUlJR02a+3atXKc4M/AA2L+x4wLZqE6PPf3GRyNQAaMp9+vTp79qzs9st3CQQGBqq0tLTKRQGoey7dvZcFtwDM5XO31KuvvqrQ0PL/8SoqKqpyQQDqJvcN7trSTQTAZD6FmxYtWuiVV1752XMANDzsuwTAKnwKNwcOHKihMgDUdUxLAbAKn9bcfPrpp+rUqZMKCwvLfK2goECdO3fWhg0bqq04AHXDydOlyisqkSS1IdwAMJlP4Wb27NkaM2ZMuf3lEREReuyxxzRr1qxqKw5A3ZB1cdSmWWSwQh2V2tUFAKqNT+Fm+/btuu222y779VtvvVVbtmypclEA6hb3lBQbSgKwAp/CTU5OjgIDAy/79YCAAOXl5VW5KAB1C/suAbASn8JNs2bNtGPHjst+/dtvv1V8fHyViwJQt2TRKQXAQnwKN7fffrumTJmis2fLbox35swZpaen64477qi24gDUDZk5F6elGLkBYAE+rfybPHmy/v73v6t9+/YaN26crrrqKknSrl27NHfuXDmdTj377LM1UigAayo8e86zEzhrbgBYgU/hJjY2Vhs3btQTTzyhSZMmyb2huM1mU2pqqubOnavY2NgaKRSANbmnpOLCgxQedPk1eQBQW3zu2WzZsqVWrFihEydOKCsrS4ZhqF27dmrcuHFN1AfA4rIuTkm1Y0oKgEVU+oYUjRs31nXXXVedtQCogzJzL+4pxZQUAIvwaUExAPwUe0oBsBrCDYAqyWRaCoDFEG4AVFpxyXkdOXlGktQ2mnADwBoINwAqbW/ehVGbqFCHGjeym1wNAFxAuAFQaZ4pKRYTA7AQwg2ASvMsJma9DQALIdwAqLSsi23gjNwAsBLCDYBKc4/ctKUNHICFEG4AVMqZUqcOHT8tSWrPtBQACyHcAKiUvXmnZBhSk0Z2NQ11mF0OAHgQbgBUSpZnSopRGwDWQrgBUCmZLCYGYFGEGwCVwj1uAFiVJcLN3LlzlZSUpKCgIPXq1UubN2+u0HVLly6VzWbT0KFDa7ZAAGVkee5xQ6cUAGsxPdwsW7ZMaWlpSk9P19atW9WtWzelpqYqNzf3itcdOHBAEydOVL9+/WqpUgBuJeedOnCsWBIjNwCsx/RwM2vWLI0ZM0ajRo1Sp06dtGDBAoWEhGjRokWXvcbpdOr+++/X9OnT1bp161qsFoAk7c8vlsuQwoMCFB1GpxQAazE13JSWlmrLli1KSUnxHPPz81NKSoo2bdp02euee+45xcTE6OGHH66NMgH8hGe9TWyYbDabydUAgLcAM988Pz9fTqdTsbGxXsdjY2O1a9eucq/54osv9Nprr2nbtm0Veo+SkhKVlJR4nhcWFla6XgAXePaUYkoKgAWZPi3li6KiIj344IN65ZVXFBUVVaFrMjIyFBER4XkkJibWcJVA/efeU4p73ACwIlNHbqKiouTv76+cnByv4zk5OYqLiytz/t69e3XgwAENGTLEc8zlckmSAgICtHv3brVp08brmkmTJiktLc3zvLCwkIADVNGPp6UAwGpMDTd2u13du3fX2rVrPe3cLpdLa9eu1bhx48qc36FDB3333XdexyZPnqyioiLNmTOn3NDicDjkcLDgEagu55wu7c+nUwqAdZkabiQpLS1NI0eOVI8ePdSzZ0/Nnj1bxcXFGjVqlCRpxIgRatasmTIyMhQUFKQuXbp4XR8ZGSlJZY4DqBkHjxXrvMtQI7u/4iOCzC4HAMowPdwMHz5ceXl5mjp1qrKzs5WcnKyVK1d6FhkfOnRIfn51amkQUK/tuTgl1ZZOKQAWZTMMwzC7iNpUWFioiIgIFRQUKDw83OxygDpnzppMvbBmj4Z1b67/GdbN7HIANBC+/PxmSASATzwbZsay3gaANRFuAPjEs6dUDJ1SAKyJcAOgws47XdqXd6FTinvcALAqwg2ACjt0/LRKnS4FB/qrWWSw2eUAQLkINwAqzL3tQtuYUPn50SkFwJoINwAqLIs9pQDUAYQbABWWmXNxTyk6pQBYGOEGQIVl0ikFoA4g3ACoEKfLYFoKQJ1AuAFQIUdOnFHJeZfsAX5KbBJidjkAcFmEGwAV4r4zcZvoUPnTKQXAwgg3ACokkykpAHUE4QZAhWTmEG4A1A2EGwAVcmnDTDqlAFhbgNkFAPVJwZlzKjp7zuwyqp1h/OgGftzjBoDFEW6AarLl4AkNf3mTzrsMs0upMYH+NrWkUwqAxRFugGry+Z48nXcZ8vezKaCedhMN69FcAf7MZgOwNsINUE3c0zbP3NZBY25sbXI1ANBw8SsYUE3cC27ZdwkAzEW4AarBOadL+/OLJdEqDQBmI9wA1eDgsdM65zQUYvdXQkSw2eUAQINGuAGqQZZ7SiomVH71dDExANQVhBugGrjv3tuWKSkAMB3hBqgGl/Zd4u69AGA2wg1QDdhUEgCsg3ADVJHTZWhv3oVw0559lwDAdIQboIoOHT+t0vMuBQX6qVljOqUAwGyEG6CKMnMudEq1iQ6VP51SAGA6wg1QRay3AQBrIdwAVeTeU6od620AwBIIN0AVZf7oBn4AAPMRboAqcLmMSyM3hBsAsATCDVAFR06e0dlzLtn9/dSiSYjZ5QAARLgBqsQ9JdU6upEC/PnfCQCsgH+NgSpgTykAsB7CDVAF7CkFANZDuAGqwBNuYhm5AQCrINwAlWQYhrIu3p2YTikAsA7CDVBJRwvOqrjUqQA/m1o2bWR2OQCAiwg3QCW5p6SSohrJHsD/SgBgFfyLDFSSe8PM9qy3AQBLIdwAlXSpDZxOKQCwEsINUEnuG/ixmBgArIVwA1SCYRi0gQOARRFugErILSpR0dnz8rNJraLolAIAKyHcAJXgXm+T1LSRHAH+JlcDAPgxwg1QCe71NuwpBQDWQ7gBKoH1NgBgXYQboBKyctgwEwCsinAD+MgwDO1hWgoALItwA/joWHGpTp4+J5tNahNNuAEAqyHcAD5yd0olNg5RsJ1OKQCwGsIN4KMs7kwMAJZGuAF85O6UakunFABYEuEG8NGeHPfIDZ1SAGBFhBvAR1kXR27aM3IDAJZkiXAzd+5cJSUlKSgoSL169dLmzZsve+4rr7yifv36qXHjxmrcuLFSUlKueD5QnY4Xlyr/VKkkOqUAwKpMDzfLli1TWlqa0tPTtXXrVnXr1k2pqanKzc0t9/z169fr3nvv1bp167Rp0yYlJibq1ltv1ZEjR2q5cjRE7lGbZpHBauQIMLkaAEB5TA83s2bN0pgxYzRq1Ch16tRJCxYsUEhIiBYtWlTu+W+++aaefPJJJScnq0OHDnr11Vflcrm0du3aWq4cDZF7Tym2XQAA6zI13JSWlmrLli1KSUnxHPPz81NKSoo2bdpUodc4ffq0zp07pyZNmtRUmYBHpmfbBcINAFiVqePq+fn5cjqdio2N9ToeGxurXbt2Veg1nn76aSUkJHgFpB8rKSlRSUmJ53lhYWHlC0aD556WolMKAKzL9Gmpqpg5c6aWLl2q999/X0FBQeWek5GRoYiICM8jMTGxlqtEfeKeluIeNwBgXaaGm6ioKPn7+ysnJ8freE5OjuLi4q547Z///GfNnDlTn3zyibp27XrZ8yZNmqSCggLP4/Dhw9VSOxqegjPnlFN4YRSQDTMBwLpMDTd2u13du3f3WgzsXhzcu3fvy173pz/9Sb/73e+0cuVK9ejR44rv4XA4FB4e7vUAKsM9JRUXHqTwoECTqwEAXI7pvaxpaWkaOXKkevTooZ49e2r27NkqLi7WqFGjJEkjRoxQs2bNlJGRIUn64x//qKlTp+qtt95SUlKSsrOzJUmhoaEKDeW3adScLDqlAKBOMD3cDB8+XHl5eZo6daqys7OVnJyslStXehYZHzp0SH5+lwaY5s+fr9LSUt11111er5Oenq5p06bVZuloYNydUkxJAYC1mR5uJGncuHEaN25cuV9bv3691/MDBw7UfEFAOTLplAKAOqFOd0sBtcnTBs60FABYGuEGqIBTJed15OQZSdzADwCsjnADVIB71CY6zKHIELvJ1QAArsQSa25QPxiGoaMFZ+UyDLNLqXZfHzguiVEbAKgLCDeoNr9591u9s+U/ZpdRowg3AGB9hBtUm0935UqS7P5+stlMLqYGhAUFaHDXBLPLAAD8DMINqsWxUyU6VlwqSdqWfotC7PzVAgCYgwXFqBbuBbfNGwcTbAAApiLcoFpcusEda1IAAOYi3KBaXLrBHXfvBQCYi3CDapF5cVNJ9l0CAJiNcINq4d5UkmkpAIDZCDeosoLT55RbVCKJkRsAgPkIN6iyrLwLU1LxEUEKCwo0uRoAQENHuEGV7clhMTEAwDoIN6gy1tsAAKyEcIMqc3dKEW4AAFZAuEGVXbrHDeEGAGA+wg2qpOjsOR0tOCtJahvNmhsAgPkIN6gS96hNTJhDESF0SgEAzEe4QZVkMiUFALAYwg2qxLPeJoYpKQCANRBuUCWZOewpBQCwFsINqsQzLUW4AQBYBOEGlXa69Lz+c+KMJO5ODACwDsINKm1vbrEkqWkju5o0sptcDQAAFxBuUGnuOxOz3gYAYCWEG1QabeAAACsi3KDSLm2YyXobAIB1EG5QaZ4NMxm5AQBYCOEGlXL2nFOHjp+WxMgNAMBaCDeolL15p2QYUmRIoKJC6ZQCAFgH4QaVkvWjm/fZbDaTqwEA4BLCDSrFvZi4LVNSAACLIdygUjyLibnHDQDAYgg3qBTucQMAsCrCDXxWct6pg8folAIAWBPhBj47kH9aTpehMEeAYsMdZpcDAIAXwg185tlTKpZOKQCA9RBu4LNL2y6w3gYAYD2EG/js0j1uWG8DALAewg189uNpKQAArIZwA5+cc7q0P79YEtNSAABrItzAJwePFeuc01CI3V8JEcFmlwMAQBmEG/jkx4uJ/fzolAIAWA/hBj5x35mYPaUAAFZFuIFP2HYBAGB1hBv4JDOHDTMBANZGuEGFnXe6tM/TKcW0FADAmgg3qLDDJ86o9LxLQYF+ataYTikAgDURblBh7impNtGh8qdTCgBgUYQbVJhnMTHrbQAAFka4QYV59pSKZb0NAMC6CDeoMM+eUozcAAAsjHCDCnG5jB/tBk64AQBYF+EGFXLk5BmdPeeS3d9PLZqEmF0OAACXRbhBhbinpFpHN1KAP39tAADWZYmfUnPnzlVSUpKCgoLUq1cvbd68+Yrnv/POO+rQoYOCgoJ09dVXa8WKFbVUacPl3jCT9TYAAKszPdwsW7ZMaWlpSk9P19atW9WtWzelpqYqNze33PM3btyoe++9Vw8//LC++eYbDR06VEOHDtWOHTtqufKGZc/FcNOeTikAgMXZDMMwzCygV69euu666/TSSy9JklwulxITE/Vf//VfeuaZZ8qcP3z4cBUXF+ujjz7yHLv++uuVnJysBQsW/Oz7FRYWKiIiQgUFBQoPD6+2z1Fy3qm8opJqez2reeyNLfr3D4Waf/+1GnR1vNnlAAAaGF9+fgfUUk3lKi0t1ZYtWzRp0iTPMT8/P6WkpGjTpk3lXrNp0yalpaV5HUtNTdXy5cvLPb+kpEQlJZdCR2FhYdULL8e/fyjUL+dtrJHXthJ2AwcAWJ2p4SY/P19Op1OxsbFex2NjY7Vr165yr8nOzi73/Ozs7HLPz8jI0PTp06un4CuwSXIEmD7LV6N6JDVWqyjCDQDA2kwNN7Vh0qRJXiM9hYWFSkxMrPb3uaZFY+3+/aBqf10AAOAbU8NNVFSU/P39lZOT43U8JydHcXFx5V4TFxfn0/kOh0MOh6N6CgYAAJZn6jyK3W5X9+7dtXbtWs8xl8ultWvXqnfv3uVe07t3b6/zJWn16tWXPR8AADQspk9LpaWlaeTIkerRo4d69uyp2bNnq7i4WKNGjZIkjRgxQs2aNVNGRoYkafz48erfv7+ef/55DR48WEuXLtXXX3+thQsXmvkxAACARZgeboYPH668vDxNnTpV2dnZSk5O1sqVKz2Lhg8dOiQ/v0sDTH369NFbb72lyZMn67e//a3atWun5cuXq0uXLmZ9BAAAYCGm3+emttXUfW4AAEDN8eXnd/3uXQYAAA0O4QYAANQrhBsAAFCvEG4AAEC9QrgBAAD1CuEGAADUK4QbAABQrxBuAABAvUK4AQAA9Yrp2y/UNvcNmQsLC02uBAAAVJT753ZFNlZocOGmqKhIkpSYmGhyJQAAwFdFRUWKiIi44jkNbm8pl8ulH374QWFhYbLZbNX62oWFhUpMTNThw4cb5L5VDf3zS3wP+PwN+/NLfA8a+ueXau57YBiGioqKlJCQ4LWhdnka3MiNn5+fmjdvXqPvER4e3mD/Ukt8fonvAZ+/YX9+ie9BQ//8Us18D35uxMaNBcUAAKBeIdwAAIB6hXBTjRwOh9LT0+VwOMwuxRQN/fNLfA/4/A3780t8Dxr655es8T1ocAuKAQBA/cbIDQAAqFcINwAAoF4h3AAAgHqFcAMAAOoVwk01mTt3rpKSkhQUFKRevXpp8+bNZpdUaz7//HMNGTJECQkJstlsWr58udkl1aqMjAxdd911CgsLU0xMjIYOHardu3ebXVatmj9/vrp27eq5aVfv3r31z3/+0+yyTDNz5kzZbDZNmDDB7FJqzbRp02Sz2bweHTp0MLusWnXkyBE98MADatq0qYKDg3X11Vfr66+/NrusWpGUlFTmz99ms2ns2LGm1EO4qQbLli1TWlqa0tPTtXXrVnXr1k2pqanKzc01u7RaUVxcrG7dumnu3Llml2KKzz77TGPHjtW//vUvrV69WufOndOtt96q4uJis0urNc2bN9fMmTO1ZcsWff3117r55pv1i1/8Qv/+97/NLq3WffXVV3r55ZfVtWtXs0updZ07d9bRo0c9jy+++MLskmrNiRMn1LdvXwUGBuqf//yndu7cqeeff16NGzc2u7Ra8dVXX3n92a9evVqSNGzYMHMKMlBlPXv2NMaOHet57nQ6jYSEBCMjI8PEqswhyXj//ffNLsNUubm5hiTjs88+M7sUUzVu3Nh49dVXzS6jVhUVFRnt2rUzVq9ebfTv398YP3682SXVmvT0dKNbt25ml2Gap59+2rjhhhvMLsMyxo8fb7Rp08ZwuVymvD8jN1VUWlqqLVu2KCUlxXPMz89PKSkp2rRpk4mVwSwFBQWSpCZNmphciTmcTqeWLl2q4uJi9e7d2+xyatXYsWM1ePBgr38PGpLMzEwlJCSodevWuv/++3Xo0CGzS6o1H3zwgXr06KFhw4YpJiZG11xzjV555RWzyzJFaWmp/vrXv2r06NHVvkF1RRFuqig/P19Op1OxsbFex2NjY5WdnW1SVTCLy+XShAkT1LdvX3Xp0sXscmrVd999p9DQUDkcDj3++ON6//331alTJ7PLqjVLly7V1q1blZGRYXYppujVq5eWLFmilStXav78+dq/f7/69eunoqIis0urFfv27dP8+fPVrl07rVq1Sk888YR+/etf6/XXXze7tFq3fPlynTx5Ug899JBpNTS4XcGBmjR27Fjt2LGjQa01cLvqqqu0bds2FRQU6N1339XIkSP12WefNYiAc/jwYY0fP16rV69WUFCQ2eWYYtCgQZ7/7tq1q3r16qWWLVvq7bff1sMPP2xiZbXD5XKpR48emjFjhiTpmmuu0Y4dO7RgwQKNHDnS5Opq12uvvaZBgwYpISHBtBoYuamiqKgo+fv7Kycnx+t4Tk6O4uLiTKoKZhg3bpw++ugjrVu3Ts2bNze7nFpnt9vVtm1bde/eXRkZGerWrZvmzJljdlm1YsuWLcrNzdW1116rgIAABQQE6LPPPtOLL76ogIAAOZ1Os0usdZGRkWrfvr2ysrLMLqVWxMfHlwnyHTt2bFBTc5J08OBBrVmzRo888oipdRBuqshut6t79+5au3at55jL5dLatWsb3HqDhsowDI0bN07vv/++Pv30U7Vq1crskizB5XKppKTE7DJqxcCBA/Xdd99p27ZtnkePHj10//33a9u2bfL39ze7xFp36tQp7d27V/Hx8WaXUiv69u1b5hYQe/bsUcuWLU2qyByLFy9WTEyMBg8ebGodTEtVg7S0NI0cOVI9evRQz549NXv2bBUXF2vUqFFml1YrTp065fXb2f79+7Vt2zY1adJELVq0MLGy2jF27Fi99dZb+sc//qGwsDDPWquIiAgFBwebXF3tmDRpkgYNGqQWLVqoqKhIb731ltavX69Vq1aZXVqtCAsLK7PGqlGjRmratGmDWXs1ceJEDRkyRC1bttQPP/yg9PR0+fv769577zW7tFrx1FNPqU+fPpoxY4buvvtubd68WQsXLtTChQvNLq3WuFwuLV68WCNHjlRAgMnxwpQerXroL3/5i9GiRQvDbrcbPXv2NP71r3+ZXVKtWbdunSGpzGPkyJFml1YryvvskozFixebXVqtGT16tNGyZUvDbrcb0dHRxsCBA41PPvnE7LJM1dBawYcPH27Ex8cbdrvdaNasmTF8+HAjKyvL7LJq1Ycffmh06dLFcDgcRocOHYyFCxeaXVKtWrVqlSHJ2L17t9mlGDbDMAxzYhUAAED1Y80NAACoVwg3AACgXiHcAACAeoVwAwAA6hXCDQAAqFcINwAAoF4h3AAAgHqFcAOgwVu/fr1sNptOnjxpdikAqgHhBkCNO3z4sEaPHq2EhATZ7Xa1bNlS48eP17Fjx2q9lgEDBmjChAlex/r06aOjR48qIiJCkrRkyRJFRkbWem0AqgfhBkCN2rdvn3r06KHMzEz97W9/U1ZWlhYsWODZXPb48eNmlyi73a64uDjZbDazSwFQDQg3AGrU2LFjZbfb9cknn6h///5q0aKFBg0apDVr1ujIkSN69tlnJUk2m03Lly/3ujYyMlJLlizxPH/66afVvn17hYSEqHXr1poyZYrOnTvn+fq0adOUnJysN954Q0lJSYqIiNA999yjoqIiSdJDDz2kzz77THPmzJHNZpPNZtOBAwe8pqXWr1+vUaNGqaCgwHPOtGnT9Nxzz5W7CWZycrKmTJlS/d84AJVGuAFQY44fP65Vq1bpySefLLNDelxcnO6//34tW7ZMFd3iLiwsTEuWLNHOnTs1Z84cvfLKK3rhhRe8ztm7d6+WL1+ujz76SB999JE+++wzzZw5U5I0Z84c9e7dW2PGjNHRo0d19OhRJSYmel3fp08fzZ49W+Hh4Z5zJk6cqNGjR+v777/XV1995Tn3m2++0bfffqtRo0ZV5tsDoIaYvCc5gPosMzNThmGoY8eO5X69Y8eOOnHihPLy8ir0epMnT/b8d1JSkiZOnKilS5fqN7/5jee4y+XSkiVLFBYWJkl68MEHtXbtWv3hD39QRESE7Ha7QkJCFBcXV+572O12RUREyGazeZ0TGhqq1NRULV68WNddd50kafHixerfv79at25dofoB1A5GbgDUuJ8bmbHb7RV6nWXLlqlv376Ki4tTaGioJk+erEOHDnmdk5SU5Ak2khQfH6/c3Fzfiy7HmDFj9Le//U1nz55VaWmp3nrrLY0ePbpaXhtA9SHcAKgxbdu2lc1m0/fff1/u17///ntFR0crMjJSNputTAj68XqaTZs26f7779ftt9+ujz76SN98842effZZlZaWel0TGBjo9dxms8nlclXL5xkyZIgcDofef/99ffjhhzp37pzuuuuuanltANWHaSkANaZp06a65ZZbNG/ePD311FNe626ys7P15ptvauzYsZKk6OhoHT161PP1zMxMnT592vN848aNatmypWcBsiQdPHjQ55rsdrucTmelzgkICNDIkSO1ePFi2e123XPPPWXWEgEwHyM3AGrUSy+9pJKSEqWmpurzzz/X4cOHtXLlSt1yyy1q3769pk6dKkm6+eab9dJLL+mbb77R119/rccff9xrFKZdu3Y6dOiQli5dqr179+rFF1/U+++/73M9SUlJ+r//+z8dOHBA+fn55Y7qJCUl6dSpU1q7dq3y8/O9QtYjjzyiTz/9VCtXrmRKCrAowg2AGtWuXTt99dVXat26te6++261bNlSgwYNUvv27fXll18qNDRUkvT8888rMTFR/fr103333aeJEycqJCTE8zp33nmnnnrqKY0bN07JycnauHFjpVqwJ06cKH9/f3Xq1EnR0dFl1uxIFzqmHn/8cQ0fPlzR0dH605/+5PV5+vTpow4dOqhXr16V+I4AqGk2o6I9mABQTdLT0zVr1iytXr1a119/vdnl+MQwDLVr105PPvmk0tLSzC4HQDlYcwOg1k2fPl1JSUn617/+pZ49e8rPr24MIufl5Wnp0qXKzs7m3jaAhTFyAwAVZLPZFBUVpTlz5ui+++4zuxwAl8HIDQBUEL8LAnVD3RgLBgAAqCDCDQAAqFcINwAAoF4h3AAAgHqFcAMAAOoVwg0AAKhXCDcAAKBeIdwAAIB6hXADAADqlf8P7BN8y94xEAcAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "qs = np.linspace(0, 7)\n", "ps = d6(qs)\n", "plt.plot(qs, ps)\n", "decorate_cdf('Forward evaluation')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`Cdf` also provides `inverse`, which computes the inverse `Cdf`:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(3.)" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.inverse(0.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`quantile` is a synonym for `inverse`" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(3.)" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.quantile(0.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`inverse` and `quantile` work with arrays " ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "image/png": "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e++9ys3N1U033aQrrrhCBw8e1HPPPafu3bv7j/e73/1Or7/+um6//XaNHj1aPXv2VHFxsT7//HOtWrVKBw4cUHx8fJWvHx0drfnz52vEiBG69tprNWzYMDVt2lSHDh3SW2+9pb59++r555/3j2/WrJluvPFGzZ49W0VFRZUCXceOHdWuXTtNnDhRR44cUXR0tP7nf/7noueh3HvvvXrmmWd07733qlevXvrwww+1Z8+eSuNuv/12LVmyRDExMercubM2bdqk9957T02aNAkY1717dwUHB2vmzJkqKCiQy+XSTTfdpGbNmlV6zfvuu08vvviiRo8erW3btik5OVmrVq3Sxx9/rDlz5igqKuqizgEwlo13agG4CBe6FTwiIqLS2PNvWS7n8/mspKQkS5L1hz/8ocrjuN1ua+bMmdbVV19tuVwuKy4uzurZs6f11FNPWQUFBf5xkqxx48ZV2n/VqlXWwIEDrWbNmllOp9Nq1aqVdf/991tHjx4NGFdUVGRNmjTJat++veV0Oq34+HirT58+1rPPPmu53e4ffT/Wr19vpaWlWTExMVZYWJjVrl07a/To0dbWrVsrjV24cKElyYqKirJOnTpVaftXX31lpaamWpGRkVZ8fLw1duxY69NPP610m3dV72tJSYl1zz33WDExMVZUVJQ1dOhQ69ixY5VuBc/Ly7PGjBljxcfHW5GRkVZaWpq1e/duq3Xr1taoUaMq1du2bVsrODg44Lbw828FtyzLysnJ8b+u0+m0unTpUunW9PJbwf/zP/+z0rmfXydgEodlMaMMAACYgzk3AADAKIQbAABgFMINAAAwCuEGAAAYhXADAACMQrgBAABGuew+xM/n8+m7775TVFTUT/qYeQAAUHcsy1JRUZFatGhR6Utjz3fZhZvvvvuu0pcAAgCAhuHw4cO64oorfnDMZRduyj+W/PDhw4qOjra5GgAAcDEKCwuVlJR0UV8vctmFm/JLUdHR0YQbAAAamIuZUsKEYgAAYBTCDQAAMArhBgAAGIVwAwAAjEK4AQAARiHcAAAAoxBuAACAUQg3AADAKIQbAABgFMINAAAwiq3h5sMPP9TgwYPVokULORwOrV69+kf32bBhg6699lq5XC61b99eixcvvuR1AgCAhsPWcFNcXKxu3bpp3rx5FzX+22+/1W233aYbb7xRO3fu1MMPP6x7771X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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ps = np.linspace(0, 1)\n", "qs = d6.quantile(ps)\n", "plt.plot(qs, ps)\n", "decorate_cdf('Inverse evaluation')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These functions provide a simple way to make a Q-Q plot.\n", "\n", "Here are two samples from the same distribution." ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABgOklEQVR4nO3dd3wUdf7H8dduekgjpFFSgBA6BCmhiIiiiIqipyIWEE7OfirqCaIgeooV4RTF8hP1lHI2VEBAkSq9Ky0JNZSEhEAqabvz+2NwISZAgkk25f18PPYxszPf2Xx2lc0735n5fi2GYRiIiIiI1BJWZxcgIiIiUpEUbkRERKRWUbgRERGRWkXhRkRERGoVhRsRERGpVRRuREREpFZRuBEREZFaReFGREREahWFGxEREalVFG5EpFp5/vnnsVgszi6jxrvnnnuIiopydhkiTqFwI+IEFoulTI+lS5c6u1QRkRrH1dkFiNRF//3vf4s9/+yzz/jpp59KbG/dunVVliUiUiso3Ig4wV133VXs+Zo1a/jpp59KbHc2u91OQUEBnp6ezi5FRKTMdFpKpBq6+eabueSSS4ptGzhwIBaLhe+//96xbe3atVgsFn788UfHtr1793LrrbcSGBiIt7c33bt3Z968eWX6uRaLhYcffpgvvviCtm3b4uHhwYIFCwB444036NmzJw0aNMDLy4vOnTvz1VdfnfM15syZQ7t27fDw8KBt27aO1znbypUr6dq1K56enjRv3pz333+/1LqKiop48cUXad68OR4eHkRFRfHMM8+Qn59frF1UVBTXX389S5cupUuXLnh5edG+fXvH6b1vvvmG9u3b4+npSefOndm8efMFP5PCwkImTJhAixYt8PT0pEGDBlx66aX89NNPjjbbtm3jnnvuoVmzZnh6ehIWFsaIESM4fvx4sdf643qi+Ph47rrrLvz9/QkODua5557DMAySkpK48cYb8fPzIywsjDfffLPY8UuXLsVisTB79myeeeYZwsLCqFevHjfccANJSUkXfC92u53JkyfTtm1bPD09CQ0N5b777uPEiRPF2m3YsIH+/fsTFBSEl5cXTZs2ZcSIERd8fZFqwxARp3vooYeMs/85Tpo0ybBarUZGRoZhGIZht9uN+vXrG1ar1XjyyScd7V5//fVi7ZKTk43Q0FDD19fXGDt2rDFp0iSjY8eOhtVqNb755psL1gEYrVu3NoKDg40JEyYYU6dONTZv3mwYhmE0adLEePDBB4133nnHmDRpktGtWzcDMObOnVviNTp27Gg0bNjQePHFF43JkycbzZo1M7y9vY20tDRHu23bthleXl5GRESEMXHiROPFF180QkNDjQ4dOhh//moaNmyYARi33HKLMXXqVGPo0KEGYAwaNKhYu8jISKNly5ZGw4YNjeeff9546623jMaNGxs+Pj7G559/bkRERBivvPKK8corrxj+/v5GdHS0YbPZzvuZPPPMM4bFYjFGjhxpfPjhh8abb75pDBkyxHjllVccbd544w2jd+/exgsvvGB88MEHxqOPPmp4eXkZ3bp1M+x2u6Pd+PHjDcCIjY01hgwZYrz77rvGddddZwDGpEmTjJYtWxoPPPCA8e677xq9evUyAGPZsmWO45csWWIARvv27Y0OHToYkyZNMkaPHm14enoaMTExRm5ubrHPLDIysth7uffeew1XV1dj5MiRxrRp04ynn37aqFevntG1a1ejoKDAMAzDSElJMerXr2/ExMQYr7/+uvHhhx8aY8eONVq3bn3ez0mkOlG4EakG/hxu1q9fbwDG/PnzDcMwgwBg3HrrrUZcXJyj3Q033GB06tTJ8fyxxx4zAGPFihWObVlZWUbTpk2NqKioC/4iBwyr1Wps3769xL6zf3EahmEUFBQY7dq1M6644ooSr+Hu7m4kJiY6tm3dutUAjLffftuxbdCgQYanp6dx4MABx7YdO3YYLi4uxT6LLVu2GIBx7733Fvs5Tz75pAEYv/zyi2NbZGSkARirVq1ybFu4cKEBGF5eXsV+1vvvv28AxpIlS877mXTs2NG47rrrztvmz5+NYRjGzJkzDcBYvny5Y9sf4eYf//iHY1tRUZHRpEkTw2KxFAtMJ06cMLy8vIxhw4Y5tv0Rbho3bmxkZmY6tv/vf/8zAGPKlCmObX8ONytWrDAA44svvihW54IFC4pt//bbbw3AWL9+/Xnfs0h1ptNSItVQp06d8PHxYfny5QCsWLGCJk2aMHToUDZt2kRubi6GYbBy5Up69+7tOG7+/Pl069aNSy+91LHNx8eHf/zjH+zfv58dO3Zc8Gf36dOHNm3alNju5eXlWD9x4gQZGRn07t2bTZs2lWjbr18/mjdv7njeoUMH/Pz82Lt3LwA2m42FCxcyaNAg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77xDfn4+/fv3Z/ny5SQlJbFgwQKuuuoqYmJiGDduHABXXHEF77zzDps3b2bDhg3cf//9xXphWrRowcGDB5k1axZ79uzhP//5D99++22564mKimLt2rXs37+ftLS0Unt1oqKiyM7OZvHixaSlpRULWffeey+//PILCxYs0CkpkWpK4UZEKlWLFi1Yv349zZo147bbbiMyMpIBAwYQExPDr7/+io+PDwBvvvkm4eHh9O7dmzvuuIMnn3wSb29vx+vccMMNPP744zz88MPExsayatWqi7oF+8knn8TFxYU2bdoQHBxc4podMO+Yuv/++xk8eDDBwcG89tprxd5Pz549adWqFXFxcRfxiYhIZbMYZb0HU0SkgowfP55Jkybx008/0b17d2eXUy6GYdCiRQsefPBBRo0a5exyRKQUuuZGRKrchAkTiIqKYs2aNXTr1g2rtWZ0IqempjJr1iySk5M1to1INaaeGxGRMrJYLAQFBTFlyhTuuOMOZ5cjIuegnhsRkTLS34IiNUPN6AsWERERKSOFGxEREalVFG5ERESkVlG4ERERkVpF4UZERERqFYUbERERqVUUbkRERKRWUbgRERGRWkXhRkRERGqV/wdK9vqTWJQqwAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cdf1 = Cdf.from_seq(np.random.normal(size=100))\n", "cdf2 = Cdf.from_seq(np.random.normal(size=100))\n", "\n", "cdf1.plot()\n", "cdf2.plot()\n", "decorate_cdf('Two random samples')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's how we compute the Q-Q plot." ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "def qq_plot(cdf1, cdf2):\n", " \"\"\"Compute results for a Q-Q plot.\n", " \n", " Evaluates the inverse Cdfs for a \n", " range of cumulative probabilities.\n", " \n", " cdf1: Cdf\n", " cdf2: Cdf\n", " \n", " Returns: tuple of arrays\n", " \"\"\"\n", " ps = np.linspace(0, 1)\n", " q1 = cdf1.quantile(ps)\n", " q2 = cdf2.quantile(ps)\n", " return q1, q2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is near the identity line, which suggests that the samples are from the same distribution." ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "image/png": "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goICde/eXS+//LLZUQCgQdl2JEc3v7ZaaaeK1Dq0qT6+L0ltWwSYHQswhUudlho6dKiGDh1qdgwAaFB+2p+lcW9vUEGpTV1bBWnu6N5q7u9tdizANNUauXnllVc0ePBg3XLLLVq2bFml17KystS6dWunhgMAnN+GlGyN+s96FZTalNS6ueaP60uxQaNX5XLz4osv6oknnlCHDh3k7e2ta665RlOnTnW8brPZdOjQoToJWVMlJSXKzc2t9AAAdzJv9SGV2uwa2D5Mc0b3ZvFLQNU4LTV79my98cYbuuOOOyRJ9913n4YPH66ioiI988wzdRawNqZOnaopU6aYHQMA6oTdbuiH5CxJ0v0DE1gAE/hFlUduDh48qH79+jme9+vXT999951ef/11TZo0qU7C1dakSZOUk5PjeKSmppodCQCcZmdGrrILStXU6qmeMc3MjgM0GFUeuQkNDVVqaqri4uIc27p06aLvvvtOl19+udLT0+siX614e3vL25tzzwDc08q9mZKkpDahrO4N/EqV/zZccskl+vTTT8/Y3qlTJy1btkxLlixxarCzyc/P1+bNm7V582ZJFaNJmzdv1uHDh+v8ZwNAQ/P9vopyM6BdqMlJgIalyiM3EydO1MaNG8/6WufOnfXdd9/pk08+cVqws9mwYYMGDRrkeD5hwgRJ0siRIzV37tw6/dkA0JAUlJRr46GTksTSCsBvVLncdOvWTd26dTvn6126dFGXLl2cEupcBg4cKMMw6vRnAIAr+HJbhspshqJDfBXb3M/sOECDwklaAHAxuzJy9fRnOyRJN14UJYvFYnIioGGh3ACAC8kuKNW4eRtUVGbTpW1D9cCgBLMjAQ0O5QYAXESZza7739uoIyeLFNvcTy/d3lNNuEoKOAN/KwDARTzz+U6tOZCtplZPvTmil5r5Wc2OBDRI1S43kydPbnDLLACAu5u/9rDeWXNIFos047aerPgNnEe1y81nn32mNm3a6IorrtD8+fNVUlJSF7kAAL9YdzBbT3+2XZL02JXtdGWnFiYnAhq2apebzZs3a/369ercubMefvhhRURE6L777tP69evrIh8ANGoZOUW6792NKrcburZbS41nAjFwQTWac9OzZ0+9+OKLSk9P11tvvaUjR46of//+6tatm2bOnKmcnBxn5wSARundNYd0oqBUHVsGavpN3bjsG6iC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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "q1, q2 = qq_plot(cdf1, cdf2)\n", "plt.plot(q1, q2)\n", "plt.xlabel('Quantity 1')\n", "plt.ylabel('Quantity 2')\n", "plt.title('Q-Q plot');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's how we compute a P-P plot" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "def pp_plot(cdf1, cdf2):\n", " \"\"\"Compute results for a P-P plot.\n", " \n", " Evaluates the Cdfs for all quantities in either Cdf.\n", " \n", " cdf1: Cdf\n", " cdf2: Cdf\n", " \n", " Returns: tuple of arrays\n", " \"\"\"\n", " qs = cdf1.index.union(cdf2.index)\n", " p1 = cdf1(qs)\n", " p2 = cdf2(qs)\n", " return p1, p2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's what it looks like." ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAvl0lEQVR4nO3dfXRU9Z3H8c8kkAkICSAwAZwSQR7lIQokRrEsPZEINhb3dGWhC5Sj4AO4SNYWIpAACmEVWSxEcqSy2AcFa0WtpKDGsj6QlkMwVRcC8iSskIEcJYMBEkju/sFxmoQ8zISZuTN33q9z8kfu3Jt854rJJ/f7e7AZhmEIAADAIqLMLgAAAMCfCDcAAMBSCDcAAMBSCDcAAMBSCDcAAMBSCDcAAMBSCDcAAMBSCDcAAMBSCDcAAMBSCDcAIlpiYqJ+/vOfm10GAD8i3AAIiE2bNslms3k+YmNj1b9/f82ZM0cul6vF6//pn/6p3vVdunTRqFGjtHHjRtXW1gbhHTTv5MmTWrJkiUpKSswuBUADbcwuAIC1LVu2TDfeeKMuXryojz/+WOvXr1dBQYG++OILtW/fvtlrb7jhBuXm5kqSzpw5o9/85jd64IEHdPDgQa1cuTIY5Tfp5MmTWrp0qRITE5WUlGRqLQDqI9wACKjx48dr5MiRkqQHH3xQ119/vVavXq233npLkydPbvba+Ph4/du//Zvn84ceekgDBgzQunXr9NRTT6lt27YBrR1AeKItBSCofvSjH0mSjh496vO17du312233abKykqdOXOmyfOWLFkim82m0tJS3X///YqLi9P111+vuXPn6uLFiy1+nyNHjuhf/uVf1KVLF8/33LZtm+f1nTt3atSoUZKkGTNmeFpnmzZt8vk9AfA/wg2AoDp8+LAk6frrr2/V9UeOHFF0dLQ6derU4rn333+/Ll68qNzcXE2YMEG/+tWvNGvWrGavcblcuv3227Vjxw49+uijWr58uS5evKh7771XW7dulSQNGjRIy5YtkyTNmjVLv/3tb/Xb3/5WP/zhD1v1ngD4F20pAAFVUVGh8vJyXbx4UZ988omWLVumdu3a6cc//nGL19bU1Ki8vFySVF5ervXr12vv3r3KyMhocbyOJN1444166623JEmzZ89WXFycXnjhBT3xxBMaNmxYo9esXLlSLpdLH330kUaPHi1JmjlzpoYNG6bMzEz95Cc/kcPh0Pjx45Wdna3U1NR6rTMA5uPJDYCASktLU7du3eR0OvWv//qv6tChg7Zu3apevXq1eG1paam6deumbt26adCgQVq7dq3uuecebdy40avvPXv27HqfP/bYY5KkgoKCJq8pKChQcnKyJ9hIUocOHTRr1iwdO3ZM+/bt8+p7AzAPT24ABFReXp769++vNm3ayOFwaMCAAYqKuvJ31XfffafvvvvOc250dLS6devm+TwxMVEbNmzwTCXv16+funfv7vX37tevX73P+/btq6ioKB07dqzJa7766iulpKRcdXzQoEGe14cMGeJ1DQCCj3ADIKCSk5M9s6UaWrVqlZYuXer5vHfv3vWCx3XXXae0tDS/1WKz2fz2tQCELsINANNMmzatXvunXbt2fv36X375pW688UbP54cOHVJtba0SExObvKZ37946cODAVcdLS0s9r0sEJSCUEW4AmKZPnz7q06dPwL5+Xl6exo0b5/l87dq1kq6svdOUCRMmaM2aNSoqKlJqaqokqbKyUi+++KISExM1ePBgSVeeKknS2bNnA1Q9gNYi3ACwrKNHj+ree+/V3XffraKiIv3ud7/TlClTNHz48CavWbBggV599VWNHz9e//7v/64uXbro5Zdf1tGjR/XHP/7RM16ob9++6tSpk/Lz89WxY0ddd911SklJqfekCIA5mC0FwLK2bNkiu92uBQsWaNu2bZozZ45eeumlZq9xOBzatWuX7rrrLq1du1ZZWVmKiYnRn/70J913332e89q2bauXX35Z0dHRevjhhzV58mT9z//8T6DfEgAv2AzDMMwuAgD8acmSJVq6dKnOnDmjrl27ml0OgCDjyQ0AALAUwg0AALAUwg0AALAUxtwAAABL4ckNAACwFMINAACwlIhbxK+2tlYnT55Ux44dWT4dAIAwYRiGzp07p549e3oW02xKxIWbkydPyul0ml0GAABohRMnTuiGG25o9pyICzcdO3aUdOXmxMXFmVwNAADwhtvtltPp9Pweb07EhZvvW1FxcXGEGwAAwow3Q0oYUAwAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACzF1HDz4YcfKiMjQz179pTNZtObb77Z4jU7d+7UrbfeKrvdrptuukmbNm0KeJ0A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DRgwQO3atZPT6dS8efN08eLFIFUbnj788ENlZGSoZ8+estlsevPNN1u8ZufOnbr11ltlt9t10003adOmTQGvUwYatXnzZiMmJsbYuHGj8b//+7/GzJkzjU6dOhkul6vR8z/55BMjOjraeOaZZ4x9+/YZixYtMtq2bWt8/vnnQa48/Ph6r6dMmWLk5eUZn376qbF//37j5z//uREfH2/83//9X5ArDz++3uvvHT161OjVq5dx5513Gj/5yU+CU2yY8/VeV1VVGSNHjjQmTJhgfPzxx8bRo0eNnTt3GiUlJUGuPDz5er9///vfG3a73fj9739vHD161NixY4fRo0cPY968eUGuPLwUFBQYCxcuNN544w1DkrF169Zmzz9y5IjRvn17IzMz09i3b5+xdu1aIzo62ti+fXtA6yTcNCE5OdmYPXu25/OamhqjZ8+eRm5ubqPn33///cY999xT71hKSorx0EMPBbROK/D1Xjd0+fJlo2PHjsbLL78cqBItozX3+vLly8btt99u/PrXvzamT59OuPGSr/d6/fr1Rp8+fYzq6upglWgpvt7v2bNnGz/60Y/qHcvMzDTuuOOOgNZpJd6Em1/+8pfGzTffXO/YpEmTjPT09ABWZhi0pRpRXV2t4uJipaWleY5FRUUpLS1NRUVFjV5TVFRU73xJSk9Pb/J8XNGae93Q+fPndenSJXXp0iVQZVpCa+/1smXL1L17dz3wwAPBKNMSWnOv3377baWmpmr27NlyOBwaMmSIVqxYoZqammCVHbZac79vv/12FRcXe1pXR44cUUFBgSZMmBCUmiOFWb8bI27jTG+Ul5erpqZGDoej3nGHw6HS0tJGrykrK2v0/LKysoDVaQWtudcNzZ8/Xz179rzqfyDU15p7/fHHH+ull15SSUlJECq0jtbc6yNHjuiDDz7Qz372MxUUFOjQoUN69NFHdenSJeXk5ASj7LDVmvs9ZcoUlZeXa/To0TIMQ5cvX9bDDz+sJ598MhglR4ymfje63W5duHBB7dq1C8j35ckNwtrKlSu1efNmbd26VbGxsWaXYynnzp3T1KlTtWHDBnXt2tXsciyvtrZW3bt314svvqgRI0Zo0qRJWrhwofLz880uzZJ27typFStW6IUXXtDevXv1xhtvaNu2bXrqqafMLg1+wJObRnTt2lXR0dFyuVz1jrtcLiUkJDR6TUJCgk/n44rW3OvvrVq1SitXrtT777+vYcOGBbJMS/D1Xh8+fFjHjh1TRkaG51htba0kqU2bNjpw4ID69u0b2KLDVGv+Xffo0UNt27ZVdHS059igQYNUVlam6upqxcTEBLTmcNaa+7148WJNnTpVDz74oCRp6NChqqys1KxZs7Rw4UJFRfG3vz809bsxLi4uYE9tJJ7cNComJkYjRoxQYWGh51htba0KCwuVmpra6DWpqan1zpek9957r8nzcUVr7rUkPfPMM3rqqae0fft2jRw5Mhilhj1f7/XAgQP1+eefq6SkxPNx7733auzYsSopKZHT6Qxm+WGlNf+u77jjDh06dMgTICXp4MGD6tGjB8GmBa253+fPn78qwHwfLA22XPQb0343BnS4chjbvHmzYbfbjU2bNhn79u0zZs2aZXTq1MkoKyszDMMwpk6daixYsMBz/ieffGK0adPGWLVqlbF//34jJyeHqeBe8vVer1y50oiJiTFef/1149SpU56Pc+fOmfUWwoav97ohZkt5z9d7ffz4caNjx47GnDlzjAMHDhjvvPOO0b17d+Ppp5826y2EFV/vd05OjtGxY0fj1VdfNY4cOWK8++67Rt++fY3777/frLcQFs6dO2d8+umnxqeffmpIMlavXm18+umnxldffWUYhmEsWLDAmDp1quf876eC/+IXvzD2799v5OXlMRXcbGvXrjV+8IMfGDExMUZycrLx17/+1fPamDFjjOnTp9c7/7XXXjP69+9vxMTEGDfffLOxbdu2IFccvny517179zYkXfWRk5MT/MLDkK//rusi3PjG13u9a9cuIyUlxbDb7UafPn2M5cuXG5cvXw5y1eHLl/t96dIlY8mSJUbfvn2N2NhYw+l0Go8++qjx7bffBr/wMPKXv/yl0Z+/39/b6dOnG2PGjLnqmqSkJCMmJsbo06eP8d///d8Br9NmGDx/AwAA1sGYGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwAAYCmEGwCWYLPZ9Oabb3o+Ly0t1W233abY2FglJSWZVheA4CPcAAgpZWVleuyxx9SnTx/Z7XY5nU5lZGRctT9NS3JycnTdddfpwIEDTV774YcfKiMjQz179rwqHAEIX4QbACHj2LFjGjFihD744AM9++yz+vzzz7V9+3aNHTtWs2fP9ulrHT58WKNHj1bv3r11/fXXN3pOZWWlhg8frry8PH+UDyBEsP0CgJAxYcIEffbZZzpw4ICuu+66eq+dPXtWnTp1kiR9+eWXeuCBB7R792716dNHzz//vMaNG6etW7dq4sSJstls9a7NycnRkiVLmv3eNpvNcz2A8NbG7AIAQJK++eYbbd++XcuXL78q2EjyBJva2lr98z//sxwOh/72t7+poqJCjz/+eL1zT506pbS0NN1999164okn1KFDhyC8AwChgnADICQcOnRIhmFo4MCBzZ73/vvvq7S0VDt27FDPnj0lSStWrND48eM95yQkJKhNmzbq0KGDEhISAlo3gNDDmBsAIcHbDvn+/fvldDo9wUaSUlNTA1UWgDBEuAEQEvr16yebzabS0lKzSwEQ5gg3AEJCly5dlJ6erry8PFVWVl71+tmzZyVJgwYN0okTJ3Tq1CnPa3/961+DVSaAMEC4ARAy8vLyVFNTo+TkZP3xj3/Ul19+qf379+tXv/qVp/WUlpam/v37a/r06fr73/+ujz76SAsXLmzV9/vuu+9UUlKikpISSdLRo0dVUlKi48eP++stATAB4QZAyOjTp4/27t2rsWPH6j/+4z80ZMgQ3XXXXSosLNT69eslSVFRUdq6dasuXLig5ORkPfjgg1q+fHmrvt+ePXt0yy236JZbbpEkZWZm6pZbblF2drbf3hOA4GOdGwAAYCk8uQEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJby/ztswbaXEwxBAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "p1, p2 = pp_plot(cdf1, cdf2)\n", "plt.plot(p1, p2)\n", "plt.xlabel('Cdf 1')\n", "plt.ylabel('Cdf 2')\n", "plt.title('P-P plot');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Mutation\n", "\n", "`Cdf` objects are mutable, but in general the result is not a valid Cdf." ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.25
20.50
30.75
41.00
51.25
\n", "
" ], "text/plain": [ "1 0.25\n", "2 0.50\n", "3 0.75\n", "4 1.00\n", "5 1.25\n", "Name: , dtype: float64" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4[5] = 1.25\n", "d4" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.2
20.4
30.6
40.8
51.0
\n", "
" ], "text/plain": [ "1 0.2\n", "2 0.4\n", "3 0.6\n", "4 0.8\n", "5 1.0\n", "Name: , dtype: float64" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.normalize()\n", "d4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Statistics\n", "\n", "`Cdf` overrides the statistics methods to compute `mean`, `median`, etc." ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.5" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.mean()" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.916666666666667" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.var()" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.7078251276599332" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.std()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sampling\n", "\n", "`choice` chooses a random values from the Cdf, following the API of `np.random.choice`" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 1, 3, 2, 3, 4, 4, 5, 2, 2])" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.choice(size=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`sample` chooses a random values from the `Cdf`, with replacement." ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([4., 3., 2., 6., 5., 4., 1., 6., 1., 4.])" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.sample(n=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Arithmetic\n", "\n", "`Pmf` and `Cdf` provide `add_dist`, which computes the distribution of the sum." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's the distribution of the sum of two dice." ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
20.027778
30.055556
40.083333
50.111111
60.138889
70.166667
80.138889
90.111111
100.083333
110.055556
120.027778
\n", "
" ], "text/plain": [ "2 0.027778\n", "3 0.055556\n", "4 0.083333\n", "5 0.111111\n", "6 0.138889\n", "7 0.166667\n", "8 0.138889\n", "9 0.111111\n", "10 0.083333\n", "11 0.055556\n", "12 0.027778\n", "dtype: float64" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6 = Pmf.from_seq([1,2,3,4,5,6])\n", "\n", "twice = d6.add_dist(d6)\n", "twice" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6.999999999999998" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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rtf+/v6SpIaGBtdYUFCQrFarbDabx/MPHDhQ5eXlKi8vd40dOHBA33zzjSIjI6/7uoYPHy673S4/Pz/169fPbevWrdt1zwugaRGAABhmxYoVqq+vV2JiorZv367y8nLl5+frBz/4gXr16uX6dNXdd9+tFStWaO/evdqzZ49+/vOfu63CdO/eXe3bt1d+fr4qKipUU1Mj6cKnuJYtW6aXXnpJhw8fVklJiV5++WVJUkJCgoYMGaIpU6aopKRERUVFSk1NVXx8vKKjo6/7mhISEhQXF6fk5GT9+c9/1tGjR7Vz507NnTtXe/bsuYG7BaApEYAAGKZ///7as2eP+vbtq4kTJ+rWW2/VtGnT9P3vf1+FhYXq0qWLJGnZsmUKDw/XnXfeqYcffli/+tWv1KFDB9c8fn5+eumll/S73/1OPXv21P333y9JSktLU05Ojn77299q0KBBuu+++3T48GFJF962evvtt9W5c2eNHTtWCQkJ6tu3r9atW3dD12SxWLR582aNHTtW6enpuu222/TQQw/p2LFjCg0NvaG5ATQdi7O5nkAEAABopVgBAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApvN/B27ZZ2TTmYIAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "twice.bar()\n", "decorate_dice('Two dice')\n", "twice.mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To add a constant to a distribution, you could construct a deterministic `Pmf`" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
20.166667
30.166667
40.166667
50.166667
60.166667
70.166667
\n", "
" ], "text/plain": [ "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "7 0.166667\n", "dtype: float64" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "const = Pmf.from_seq([1])\n", "d6.add_dist(const)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But `add_dist` also handles constants as a special case:" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
20.166667
30.166667
40.166667
50.166667
60.166667
70.166667
\n", "
" ], "text/plain": [ "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "7 0.166667\n", "dtype: float64" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.add_dist(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Other arithmetic operations are also implemented" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "d4 = Pmf.from_seq([1,2,3,4])" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
-30.041667
-20.083333
-10.125000
00.166667
10.166667
20.166667
30.125000
40.083333
50.041667
\n", "
" ], "text/plain": [ "-3 0.041667\n", "-2 0.083333\n", "-1 0.125000\n", " 0 0.166667\n", " 1 0.166667\n", " 2 0.166667\n", " 3 0.125000\n", " 4 0.083333\n", " 5 0.041667\n", "dtype: float64" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.sub_dist(d4)" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.0625
20.1250
30.1250
40.1875
60.1250
80.1250
90.0625
120.1250
160.0625
\n", "
" ], "text/plain": [ "1 0.0625\n", "2 0.1250\n", "3 0.1250\n", "4 0.1875\n", "6 0.1250\n", "8 0.1250\n", "9 0.0625\n", "12 0.1250\n", "16 0.0625\n", "dtype: float64" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.mul_dist(d4)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
0.2500000.0625
0.3333330.0625
0.5000000.1250
0.6666670.0625
0.7500000.0625
1.0000000.2500
1.3333330.0625
1.5000000.0625
2.0000000.1250
3.0000000.0625
4.0000000.0625
\n", "
" ], "text/plain": [ "0.250000 0.0625\n", "0.333333 0.0625\n", "0.500000 0.1250\n", "0.666667 0.0625\n", "0.750000 0.0625\n", "1.000000 0.2500\n", "1.333333 0.0625\n", "1.500000 0.0625\n", "2.000000 0.1250\n", "3.000000 0.0625\n", "4.000000 0.0625\n", "dtype: float64" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.div_dist(d4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Comparison operators\n", "\n", "`Pmf` implements comparison operators that return probabilities.\n", "\n", "You can compare a `Pmf` to a scalar:" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.3333333333333333" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.lt_dist(3)" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.75" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.ge_dist(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or compare `Pmf` objects:" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.25" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.gt_dist(d6)" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.41666666666666663" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6.le_dist(d4)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.16666666666666666" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4.eq_dist(d6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Interestingly, this way of comparing distributions is [nontransitive]()." ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [], "source": [ "A = Pmf.from_seq([2, 2, 4, 4, 9, 9])\n", "B = Pmf.from_seq([1, 1, 6, 6, 8, 8])\n", "C = Pmf.from_seq([3, 3, 5, 5, 7, 7])" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5555555555555556" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.gt_dist(B)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5555555555555556" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "B.gt_dist(C)" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5555555555555556" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "C.gt_dist(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Joint distributions\n", "\n", "`Pmf.make_joint` takes two `Pmf` objects and makes their joint distribution, assuming independence." ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.25
20.25
30.25
40.25
\n", "
" ], "text/plain": [ "1 0.25\n", "2 0.25\n", "3 0.25\n", "4 0.25\n", "Name: , dtype: float64" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d4 = Pmf.from_seq(range(1,5))\n", "d4" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.166667
20.166667
30.166667
40.166667
50.166667
60.166667
\n", "
" ], "text/plain": [ "1 0.166667\n", "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "Name: , dtype: float64" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d6 = Pmf.from_seq(range(1,7))\n", "d6" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
110.041667
20.041667
30.041667
40.041667
50.041667
60.041667
210.041667
20.041667
30.041667
40.041667
50.041667
60.041667
310.041667
20.041667
30.041667
40.041667
50.041667
60.041667
410.041667
20.041667
30.041667
40.041667
50.041667
60.041667
\n", "
" ], "text/plain": [ "1 1 0.041667\n", " 2 0.041667\n", " 3 0.041667\n", " 4 0.041667\n", " 5 0.041667\n", " 6 0.041667\n", "2 1 0.041667\n", " 2 0.041667\n", " 3 0.041667\n", " 4 0.041667\n", " 5 0.041667\n", " 6 0.041667\n", "3 1 0.041667\n", " 2 0.041667\n", " 3 0.041667\n", " 4 0.041667\n", " 5 0.041667\n", " 6 0.041667\n", "4 1 0.041667\n", " 2 0.041667\n", " 3 0.041667\n", " 4 0.041667\n", " 5 0.041667\n", " 6 0.041667\n", "dtype: float64" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint = Pmf.make_joint(d4, d6)\n", "joint" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is a `Pmf` object that uses a MultiIndex to represent the values." ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "MultiIndex([(1, 1),\n", " (1, 2),\n", " (1, 3),\n", " (1, 4),\n", " (1, 5),\n", " (1, 6),\n", " (2, 1),\n", " (2, 2),\n", " (2, 3),\n", " (2, 4),\n", " (2, 5),\n", " (2, 6),\n", " (3, 1),\n", " (3, 2),\n", " (3, 3),\n", " (3, 4),\n", " (3, 5),\n", " (3, 6),\n", " (4, 1),\n", " (4, 2),\n", " (4, 3),\n", " (4, 4),\n", " (4, 5),\n", " (4, 6)],\n", " )" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint.index" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you ask for the `qs`, you get an array of pairs:" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 1), (2, 2),\n", " (2, 3), (2, 4), (2, 5), (2, 6), (3, 1), (3, 2), (3, 3), (3, 4),\n", " (3, 5), (3, 6), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6)],\n", " dtype=object)" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint.qs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can select elements using tuples:" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.041666666666666664" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint[1,1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can get unnnormalized conditional distributions by selecting on different axes:" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.041667
20.041667
30.041667
40.041667
50.041667
60.041667
\n", "
" ], "text/plain": [ "1 0.041667\n", "2 0.041667\n", "3 0.041667\n", "4 0.041667\n", "5 0.041667\n", "6 0.041667\n", "dtype: float64" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Pmf(joint[1])" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.041667
20.041667
30.041667
40.041667
\n", "
" ], "text/plain": [ "1 0.041667\n", "2 0.041667\n", "3 0.041667\n", "4 0.041667\n", "dtype: float64" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Pmf(joint.loc[:, 1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But `Pmf` also provides `conditional(i, val)` which returns the conditional distribution where variable `i` has the value `val`: " ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.166667
20.166667
30.166667
40.166667
50.166667
60.166667
\n", "
" ], "text/plain": [ "1 0.166667\n", "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "dtype: float64" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint.conditional(0, 1)" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.25
20.25
30.25
40.25
\n", "
" ], "text/plain": [ "1 0.25\n", "2 0.25\n", "3 0.25\n", "4 0.25\n", "dtype: float64" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint.conditional(1, 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It also provides `marginal(i)`, which returns the marginal distribution along axis `i`" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.25
20.25
30.25
40.25
\n", "
" ], "text/plain": [ "1 0.25\n", "2 0.25\n", "3 0.25\n", "4 0.25\n", "dtype: float64" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint.marginal(0)" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
probs
10.166667
20.166667
30.166667
40.166667
50.166667
60.166667
\n", "
" ], "text/plain": [ "1 0.166667\n", "2 0.166667\n", "3 0.166667\n", "4 0.166667\n", "5 0.166667\n", "6 0.166667\n", "dtype: float64" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joint.marginal(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are some ways of iterating through a joint distribution." ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 1)\n", "(1, 2)\n", "(1, 3)\n", "(1, 4)\n", "(1, 5)\n", "(1, 6)\n", "(2, 1)\n", "(2, 2)\n", "(2, 3)\n", "(2, 4)\n", "(2, 5)\n", "(2, 6)\n", "(3, 1)\n", "(3, 2)\n", "(3, 3)\n", "(3, 4)\n", "(3, 5)\n", "(3, 6)\n", "(4, 1)\n", "(4, 2)\n", "(4, 3)\n", "(4, 4)\n", "(4, 5)\n", "(4, 6)\n" ] } ], "source": [ "for q in joint.qs:\n", " print(q)" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n", "0.041666666666666664\n" ] } ], "source": [ "for p in joint.ps:\n", " print(p)" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 1) 0.041666666666666664\n", "(1, 2) 0.041666666666666664\n", "(1, 3) 0.041666666666666664\n", "(1, 4) 0.041666666666666664\n", "(1, 5) 0.041666666666666664\n", "(1, 6) 0.041666666666666664\n", "(2, 1) 0.041666666666666664\n", "(2, 2) 0.041666666666666664\n", "(2, 3) 0.041666666666666664\n", "(2, 4) 0.041666666666666664\n", "(2, 5) 0.041666666666666664\n", "(2, 6) 0.041666666666666664\n", "(3, 1) 0.041666666666666664\n", "(3, 2) 0.041666666666666664\n", "(3, 3) 0.041666666666666664\n", "(3, 4) 0.041666666666666664\n", "(3, 5) 0.041666666666666664\n", "(3, 6) 0.041666666666666664\n", "(4, 1) 0.041666666666666664\n", "(4, 2) 0.041666666666666664\n", "(4, 3) 0.041666666666666664\n", "(4, 4) 0.041666666666666664\n", "(4, 5) 0.041666666666666664\n", "(4, 6) 0.041666666666666664\n" ] } ], "source": [ "for q, p in joint.items():\n", " print(q, p)" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 1 0.041666666666666664\n", "1 2 0.041666666666666664\n", "1 3 0.041666666666666664\n", "1 4 0.041666666666666664\n", "1 5 0.041666666666666664\n", "1 6 0.041666666666666664\n", "2 1 0.041666666666666664\n", "2 2 0.041666666666666664\n", "2 3 0.041666666666666664\n", "2 4 0.041666666666666664\n", "2 5 0.041666666666666664\n", "2 6 0.041666666666666664\n", "3 1 0.041666666666666664\n", "3 2 0.041666666666666664\n", "3 3 0.041666666666666664\n", "3 4 0.041666666666666664\n", "3 5 0.041666666666666664\n", "3 6 0.041666666666666664\n", "4 1 0.041666666666666664\n", "4 2 0.041666666666666664\n", "4 3 0.041666666666666664\n", "4 4 0.041666666666666664\n", "4 5 0.041666666666666664\n", "4 6 0.041666666666666664\n" ] } ], "source": [ "for (q1, q2), p in joint.items():\n", " print(q1, q2, p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Copyright 2021 Allen Downey\n", "\n", "BSD 3-clause license: https://opensource.org/licenses/BSD-3-Clause" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.13" } }, "nbformat": 4, "nbformat_minor": 2 }