{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "31dfbc3e",
   "metadata": {},
   "source": [
    "# Stochastic Robustness Explorer\n",
    "\n",
    "Analyse stochastic playback ensembles for the synthetic medium bundle using preset sampling configurations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8a93a5a4",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-11-14T10:34:35.839329Z",
     "iopub.status.busy": "2025-11-14T10:34:35.838880Z",
     "iopub.status.idle": "2025-11-14T10:34:36.730838Z",
     "shell.execute_reply": "2025-11-14T10:34:36.730218Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Samples: 4\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>day</th>\n",
       "      <th>shift_id</th>\n",
       "      <th>machine_id</th>\n",
       "      <th>machine_role</th>\n",
       "      <th>sample_id</th>\n",
       "      <th>production_units</th>\n",
       "      <th>total_hours</th>\n",
       "      <th>idle_hours</th>\n",
       "      <th>mobilisation_cost</th>\n",
       "      <th>sequencing_violations</th>\n",
       "      <th>blackout_conflicts</th>\n",
       "      <th>available_hours</th>\n",
       "      <th>utilisation_ratio</th>\n",
       "      <th>downtime_hours</th>\n",
       "      <th>downtime_events</th>\n",
       "      <th>weather_severity_total</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>S1</td>\n",
       "      <td>M2</td>\n",
       "      <td>forwarder</td>\n",
       "      <td>0</td>\n",
       "      <td>8.3370</td>\n",
       "      <td>10.024585</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>10.024585</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>S1</td>\n",
       "      <td>M2</td>\n",
       "      <td>forwarder</td>\n",
       "      <td>0</td>\n",
       "      <td>7.0857</td>\n",
       "      <td>10.024585</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>10.024585</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>S1</td>\n",
       "      <td>M1</td>\n",
       "      <td>harvester</td>\n",
       "      <td>0</td>\n",
       "      <td>13.8230</td>\n",
       "      <td>10.024585</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>10.024585</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>S1</td>\n",
       "      <td>M1</td>\n",
       "      <td>harvester</td>\n",
       "      <td>1</td>\n",
       "      <td>9.2510</td>\n",
       "      <td>10.024585</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>10.024585</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>S1</td>\n",
       "      <td>M2</td>\n",
       "      <td>forwarder</td>\n",
       "      <td>1</td>\n",
       "      <td>7.8730</td>\n",
       "      <td>10.024585</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>10.024585</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   day shift_id machine_id machine_role  sample_id  production_units  \\\n",
       "0    1       S1         M2    forwarder          0            8.3370   \n",
       "1    2       S1         M2    forwarder          0            7.0857   \n",
       "2    8       S1         M1    harvester          0           13.8230   \n",
       "3    1       S1         M1    harvester          1            9.2510   \n",
       "4    2       S1         M2    forwarder          1            7.8730   \n",
       "\n",
       "   total_hours  idle_hours  mobilisation_cost  sequencing_violations  \\\n",
       "0    10.024585         0.0                0.0                      0   \n",
       "1    10.024585         0.0                0.0                      0   \n",
       "2    10.024585         0.0                0.0                      0   \n",
       "3    10.024585         0.0                0.0                      0   \n",
       "4    10.024585         0.0                0.0                      0   \n",
       "\n",
       "   blackout_conflicts  available_hours  utilisation_ratio  downtime_hours  \\\n",
       "0                   0        10.024585                1.0             0.0   \n",
       "1                   0        10.024585                1.0             0.0   \n",
       "2                   0        10.024585                1.0             0.0   \n",
       "3                   0        10.024585                1.0             0.0   \n",
       "4                   0        10.024585                1.0             0.0   \n",
       "\n",
       "   downtime_events  weather_severity_total  \n",
       "0                0                     0.0  \n",
       "1                0                     0.1  \n",
       "2                0                     0.0  \n",
       "3                0                     0.0  \n",
       "4                0                     0.0  "
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import sys\n",
    "from pathlib import Path\n",
    "\n",
    "PROJECT_ROOT = Path.cwd().resolve()\n",
    "while PROJECT_ROOT != PROJECT_ROOT.parent and not (PROJECT_ROOT / \"pyproject.toml\").exists():\n",
    "    PROJECT_ROOT = PROJECT_ROOT.parent\n",
    "if not (PROJECT_ROOT / \"pyproject.toml\").exists():\n",
    "    raise RuntimeError(\n",
    "        \"Notebook must be executed within a FHOPS checkout (pyproject.toml not found).\"\n",
    "    )\n",
    "if str(PROJECT_ROOT) not in sys.path:\n",
    "    sys.path.insert(0, str(PROJECT_ROOT))\n",
    "\n",
    "from docs.examples.analytics import utils\n",
    "\n",
    "SCENARIO = PROJECT_ROOT / \"examples/synthetic/medium/scenario.yaml\"\n",
    "ASSIGNMENTS = (\n",
    "    PROJECT_ROOT / \"docs/examples/analytics/data/scaling_medium_sa_assignments.csv\"\n",
    ")  # update with fresh assignments if desired\n",
    "\n",
    "(tables, sampling_config) = utils.run_stochastic_summary(SCENARIO, ASSIGNMENTS, tier=\"medium\")\n",
    "print(f\"Samples: {sampling_config.samples}\")\n",
    "tables.shift.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bde45154",
   "metadata": {},
   "source": [
    "### Production Distribution\n",
    "\n",
    "Inspect the distribution of production across ensemble samples."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "137462ef",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-11-14T10:34:36.734569Z",
     "iopub.status.busy": "2025-11-14T10:34:36.734407Z",
     "iopub.status.idle": "2025-11-14T10:34:36.939640Z",
     "shell.execute_reply": "2025-11-14T10:34:36.939041Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500x300 with 1 Axes>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAEiCAYAAAA21pHjAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAL3tJREFUeJzt3Xlczfn+B/DXad+TtCFlRGQd69QgSyP0c8WMfYmxDtli/MY1d6zzyy7zs82MS4Nr0B3bz9gSmUGD0JAlZCk6JRdFUul8fn+4net0zqFOp843vZ6Px3lwPufz/Xzf59Ph1Xc7X5kQQoCIiIgkycjQBRAREZF2DGoiIiIJY1ATERFJGIOaiIhIwhjUREREEsagJiIikjAGNRERkYQxqImIiCSMQU1ERCRhDGqiMpLJZJg7d26Frzc2NhYymQyxsbEVvm5deHp6YsSIEeW+nrt370ImkyEyMlLZNmLECNjY2JT7uosY6jNB7ycGNVVqkZGRkMlkyoeFhQUaNGiA0NBQZGRkGLo8vVi7dq1K6EhBp06dlHNuZGQEOzs7eHt7Y9iwYYiOjtbbeg4cOCDZwJNybfR+MTF0AUT6MH/+fNStWxcvX77EyZMnsW7dOhw4cACJiYmwsrIydHllsnbtWtSoUUNta7Rjx47Izc2FmZmZQeqqXbs2wsPDAQA5OTm4desWdu3aha1bt6J///7YunUrTE1Nlf2TkpJgZFS6bYMDBw5gzZo1pQpEDw8P5Obmqqy7PLytttzcXJiY8L9X0g9+kui90KNHD7Ru3RoAMHr0aDg6OmLFihXYu3cvBg0apHGZnJwcWFtbV2SZemVkZAQLCwuDrd/e3h5Dhw5VaVu0aBEmT56MtWvXwtPTE4sXL1a+Zm5uXq71vHr1CgqFAmZmZgadFwAGXz+9X7jrm95LXbp0AQDcuXMHwH+OUSYnJ6Nnz56wtbXFkCFDALwO7OnTp8Pd3R3m5ubw9vbGsmXLUPzGcnl5eZg2bRqcnJxga2uLv/zlL7h//77aukeMGAFPT0+19rlz50Imk6m1b926FW3btoWVlRUcHBzQsWNHHDlyBMDr47pXrlzBiRMnlLuaO3XqBED7MeqoqCi0atUKlpaWqFGjBoYOHYoHDx6o1WhjY4MHDx4gODgYNjY2cHJywowZM1BYWPjuCdbC2NgY3333HXx8fLB69WpkZWUpXyt+jLqgoADz5s1D/fr1YWFhAUdHR7Rv316563zEiBFYs2YNAKgc3gD+cxx62bJliIiIQL169WBubo6rV69qPEZd5Pbt2wgMDIS1tTVq1qyJ+fPnq/yctc1p8THfVltRW/Et7YsXL6JHjx6ws7ODjY0Nunbtij/++EOlT9GhnFOnTiEsLAxOTk6wtrZGnz59kJmZ+e4fAL2XuEVN76Xk5GQAgKOjo7Lt1atXCAwMRPv27bFs2TJYWVlBCIG//OUvOH78OEaNGoUWLVrg8OHD+PLLL/HgwQOsXLlSufzo0aOxdetWDB48GH5+fjh27BiCgoLKVOe8efMwd+5c+Pn5Yf78+TAzM8OZM2dw7NgxdOvWDREREZg0aRJsbGwwe/ZsAICLi4vW8SIjIzFy5Ei0adMG4eHhyMjIwKpVq3Dq1ClcvHgR1apVU/YtLCxEYGAg2rVrh2XLluHo0aNYvnw56tWrhy+++ELn92RsbIxBgwbhb3/7G06ePKl1jubOnYvw8HCMHj0abdu2RXZ2NuLj43HhwgV88sknGDduHNLS0hAdHY0tW7ZoHGPTpk14+fIlxo4dC3Nzc1SvXh0KhUJj38LCQnTv3h0fffQRlixZgkOHDmHOnDl49eoV5s+fX6r3WJLa3nTlyhV06NABdnZ2mDlzJkxNTfH999+jU6dOOHHiBNq1a6fSf9KkSXBwcMCcOXNw9+5dREREIDQ0FDt27ChVnfSeEESV2KZNmwQAcfToUZGZmSlSU1PF9u3bhaOjo7C0tBT3798XQggREhIiAIivvvpKZfk9e/YIAGLhwoUq7Z999pmQyWTi1q1bQgghEhISBAAxYcIElX6DBw8WAMScOXOUbSEhIcLDw0Ot1jlz5og3/8ndvHlTGBkZiT59+ojCwkKVvgqFQvn3xo0bC39/f7Xxjh8/LgCI48ePCyGEyM/PF87OzqJJkyYiNzdX2W///v0CgPjmm29UagQg5s+frzLmhx9+KFq1aqW2ruL8/f1F48aNtb6+e/duAUCsWrVK2ebh4SFCQkKUz5s3by6CgoLeup6JEycKTf9N3blzRwAQdnZ24uHDhxpf27Rpk7Kt6P1OmjRJ2aZQKERQUJAwMzMTmZmZQgj1OX3bmNpqE0KofSaCg4OFmZmZSE5OVralpaUJW1tb0bFjR2Vb0ec5ICBA5TMwbdo0YWxsLJ4+fapxffR+465vei8EBATAyckJ7u7uGDhwIGxsbLB7927UqlVLpV/xLcUDBw7A2NgYkydPVmmfPn06hBA4ePCgsh8AtX5Tp07VueY9e/ZAoVDgm2++UTvJStMu8neJj4/Hw4cPMWHCBJVjpEFBQWjYsCF+/fVXtWXGjx+v8rxDhw64fft2qdddXNGlUM+ePdPap1q1arhy5Qpu3ryp83o+/fRTODk5lbh/aGio8u8ymQyhoaHIz8/H0aNHda7hXQoLC3HkyBEEBwfjgw8+ULa7ublh8ODBOHnyJLKzs1WWGTt2rMpnoEOHDigsLMS9e/fKrU6SLgY1vRfWrFmD6OhoHD9+HFevXlUei3yTiYkJateurdJ279491KxZE7a2tirtjRo1Ur5e9KeRkRHq1aun0s/b21vnmpOTk2FkZAQfHx+dx3hTUa2aamrYsKHaf/IWFhZqIefg4IAnT56UuZbnz58DgNq8vmn+/Pl4+vQpGjRogKZNm+LLL7/EpUuXSrWeunXrlrivkZGRSlACQIMGDQC8PgZdXjIzM/HixQuNP5dGjRpBoVAgNTVVpb1OnToqzx0cHABALz8bqnwY1PReaNu2LQICAtCpUyc0atRI42VA5ubmpb48SBfatobLcpJWeTA2Ni63sRMTEwEAXl5eWvt07NgRycnJ2LhxI5o0aYINGzagZcuW2LBhQ4nXY2lpWeZa3ySVn522n40odoIjVQ0MaqrSPDw8kJaWpraL9vr168rXi/5UKBTKk9SKJCUlqY3p4OCAp0+fqrUX36KtV68eFAoFrl69+tYaS7obvKhWTTUlJSUpXy9vhYWF2LZtG6ysrNC+ffu39q1evTpGjhyJn3/+GampqWjWrJnK2dK6HALQRqFQqO3Wv3HjBgAoz9Iv2nIt/vPTtMu5pLU5OTnByspK48/l+vXrMDIygru7e4nGoqqJQU1VWs+ePVFYWIjVq1ertK9cuRIymQw9evQAAOWf3333nUq/iIgItTHr1auHrKwsld24crkcu3fvVukXHBwMIyMjzJ8/X+1M5Te3nKytrTUGf3GtW7eGs7Mz1q9fj7y8PGX7wYMHce3atTKfoV4ShYWFmDx5Mq5du4bJkyfDzs5Oa99//etfKs9tbGzg5eWlUnvRde4lef8l8ebPWQiB1atXw9TUFF27dgXw+pcdY2Nj/PbbbyrLrV27Vm2sktZmbGyMbt26Ye/evSq72DMyMrBt2za0b9/+rfNExMuzqErr1asXOnfujNmzZ+Pu3bto3rw5jhw5gr1792Lq1KnKY9ItWrTAoEGDsHbtWmRlZcHPzw8xMTG4deuW2pgDBw7Ef//3f6NPnz6YPHkyXrx4gXXr1qFBgwa4cOGCsp+Xlxdmz56NBQsWoEOHDujbty/Mzc1x7tw51KxZU/mtX61atcK6deuwcOFCeHl5wdnZWXmd+JtMTU2xePFijBw5Ev7+/hg0aJDy8ixPT09MmzZNr3OXlZWFrVu3AgBevHih/Gay5ORkDBw4EAsWLHjr8j4+PujUqRNatWqF6tWrIz4+Hv/85z9VTvhq1aoVgNcn8QUGBsLY2BgDBw7UqV4LCwscOnQIISEhaNeuHQ4ePIhff/0Vf/3rX5XH6u3t7dGvXz/87//+L2QyGerVq4f9+/fj4cOHauOVpraFCxciOjoa7du3x4QJE2BiYoLvv/8eeXl5WLJkiU7vh6oQw550TlQ2RZeznDt37q39QkJChLW1tcbXnj17JqZNmyZq1qwpTE1NRf369cXSpUtVLo8RQojc3FwxefJk4ejoKKytrUWvXr1Eamqq2qU4Qghx5MgR0aRJE2FmZia8vb3F1q1b1S7PKrJx40bx4YcfCnNzc+Hg4CD8/f1FdHS08vX09HQRFBQkbG1tBQDlpVraLiXasWOHcrzq1auLIUOGKC9Te9d8aKuxOH9/fwFA+bCxsRH169cXQ4cOFUeOHNG4TPHLsxYuXCjatm0rqlWrJiwtLUXDhg3Ft99+K/Lz85V9Xr16JSZNmiScnJyETCZT1lZ0udTSpUvV1qPt8ixra2uRnJwsunXrJqysrISLi4uYM2eO2qVxmZmZ4tNPPxVWVlbCwcFBjBs3TiQmJqqNqa02IdQvzxJCiAsXLojAwEBhY2MjrKysROfOncXp06dV+mj7PGv7WVPVIBOCZycQERFJFY9RExERSRiDmoiISMIY1ERERBLGoCYiIpIwBjUREZGEMaiJiIgkrMp94YlCoUBaWhpsbW31+vWEREREJSWEwLNnz1CzZs133oOgygV1Wloav1eXiIgkITU1Ve2ufsVVuaAuuu1eamoqv1+XiIgMIjs7G+7u7m+9FWyRKhfURbu77ezsGNRERGRQJTkEy5PJiIiIJIxBTUREJGEMaiIiIgkzaFCHh4ejTZs2sLW1hbOzM4KDg5GUlPTO5aKiotCwYUNYWFigadOmOHDgQAVUS0REVPEMGtQnTpzAxIkT8ccffyA6OhoFBQXo1q0bcnJytC5z+vRpDBo0CKNGjcLFixcRHByM4OBgJCYmVmDlREREFUNS96POzMyEs7MzTpw4gY4dO2rsM2DAAOTk5GD//v3Kto8++ggtWrTA+vXr37mO7Oxs2NvbIysri2d9ExGRQZQmiyR1jDorKwsAUL16da194uLiEBAQoNIWGBiIuLg4jf3z8vKQnZ2t8iAiIqosJHMdtUKhwNSpU/Hxxx+jSZMmWvulp6fDxcVFpc3FxQXp6eka+4eHh2PevHl6rfVNA3/Q/AuCLraP9dXbWERE9H6QzBb1xIkTkZiYiO3bt+t13FmzZiErK0v5SE1N1ev4RERE5UkSW9ShoaHYv38/fvvtt3d+56mrqysyMjJU2jIyMuDq6qqxv7m5OczNzfVWKxERUUUy6Ba1EAKhoaHYvXs3jh07hrp1675zGV9fX8TExKi0RUdHw9eXu42JiOj9Y9At6okTJ2Lbtm3Yu3cvbG1tlceZ7e3tYWlpCQAYPnw4atWqhfDwcADAlClT4O/vj+XLlyMoKAjbt29HfHw8fvjhB4O9DyIiovJi0C3qdevWISsrC506dYKbm5vysWPHDmWflJQUyOVy5XM/Pz9s27YNP/zwA5o3b45//vOf2LNnz1tPQCMiIqqsDLpFXZJLuGNjY9Xa+vXrh379+pVDRURERNIimbO+iYiISB2DmoiISMIY1ERERBLGoCYiIpIwBjUREZGEMaiJiIgkjEFNREQkYQxqIiIiCWNQExERSRiDmoiISMIY1ERERBLGoCYiIpIwBjUREZGEMaiJiIgkjEFNREQkYQxqIiIiCWNQExERSRiDmoiISMIY1ERERBLGoCYiIpIwBjUREZGEMaiJiIgkjEFNREQkYQxqIiIiCWNQExERSRiDmoiISMIY1ERERBLGoCYiIpIwBjUREZGEMaiJiIgkjEFNREQkYQxqIiIiCWNQExERSRiDmoiISMIY1ERERBLGoCYiIpIwBjUREZGEGTSof/vtN/Tq1Qs1a9aETCbDnj173to/NjYWMplM7ZGenl4xBRMREVUwgwZ1Tk4OmjdvjjVr1pRquaSkJMjlcuXD2dm5nCokIiIyLBNDrrxHjx7o0aNHqZdzdnZGtWrV9F8QERGRxFTKY9QtWrSAm5sbPvnkE5w6dcrQ5RAREZUbg25Rl5abmxvWr1+P1q1bIy8vDxs2bECnTp1w5swZtGzZUuMyeXl5yMvLUz7Pzs6uqHKJiIjKrFIFtbe3N7y9vZXP/fz8kJycjJUrV2LLli0alwkPD8e8efMqqkQiIiK9qpS7vt/Utm1b3Lp1S+vrs2bNQlZWlvKRmppagdURERGVTaXaotYkISEBbm5uWl83NzeHubl5BVZERESkPwYN6ufPn6tsDd+5cwcJCQmoXr066tSpg1mzZuHBgwfYvHkzACAiIgJ169ZF48aN8fLlS2zYsAHHjh3DkSNHDPUWiIiIypVBgzo+Ph6dO3dWPg8LCwMAhISEIDIyEnK5HCkpKcrX8/PzMX36dDx48ABWVlZo1qwZjh49qjIGERHR+0QmhBCGLqIiZWdnw97eHllZWbCzsyvzeAN/iNNDVa9tH+urt7GIiEi6SpNFlf5kMiIiovcZg5qIiEjCGNREREQSxqAmIiKSMJ2C+vbt2/qug4iIiDTQKai9vLzQuXNnbN26FS9fvtR3TURERPRvOgX1hQsX0KxZM4SFhcHV1RXjxo3D2bNn9V0bERFRladTULdo0QKrVq1CWloaNm7cCLlcjvbt26NJkyZYsWIFMjMz9V0nERFRlVSmk8lMTEzQt29fREVFYfHixbh16xZmzJgBd3d3DB8+HHK5XF91EhERVUllCur4+HhMmDABbm5uWLFiBWbMmIHk5GRER0cjLS0NvXv31ledREREVZJO3/W9YsUKbNq0CUlJSejZsyc2b96Mnj17wsjode7XrVsXkZGR8PT01GetREREVY5OQb1u3Tp8/vnnGDFihNZbTDo7O+Pvf/97mYojIiKq6nQK6ps3b76zj5mZGUJCQnQZnoiIiP5Np2PUmzZtQlRUlFp7VFQUfvrppzIXRURERK/pFNTh4eGoUaOGWruzszP+53/+p8xFERER0Ws6BXVKSgrq1q2r1u7h4YGUlJQyF0VERESv6RTUzs7OuHTpklr7n3/+CUdHxzIXRURERK/pFNSDBg3C5MmTcfz4cRQWFqKwsBDHjh3DlClTMHDgQH3XSEREVGXpdNb3ggULcPfuXXTt2hUmJq+HUCgUGD58OI9RExER6ZFOQW1mZoYdO3ZgwYIF+PPPP2FpaYmmTZvCw8ND3/URERFVaToFdZEGDRqgQYMG+qqFiIiIitEpqAsLCxEZGYmYmBg8fPgQCoVC5fVjx47ppTgiIqKqTqegnjJlCiIjIxEUFIQmTZpAJpPpuy4iIiKCjkG9fft27Ny5Ez179tR3PURERPQGnS7PMjMzg5eXl75rISIiomJ0Curp06dj1apVEELoux4iIiJ6g067vk+ePInjx4/j4MGDaNy4MUxNTVVe37Vrl16KIyIiqup0Cupq1aqhT58++q6FiIiIitEpqDdt2qTvOoiIiEgDnY5RA8CrV69w9OhRfP/993j27BkAIC0tDc+fP9dbcURERFWdTlvU9+7dQ/fu3ZGSkoK8vDx88sknsLW1xeLFi5GXl4f169fru04iIqIqSact6ilTpqB169Z48uQJLC0tle19+vRBTEyM3oojIiKq6nTaov79999x+vRpmJmZqbR7enriwYMHeimMiIiIdNyiVigUKCwsVGu/f/8+bG1ty1wUERERvaZTUHfr1g0RERHK5zKZDM+fP8ecOXP4taJERER6pNOu7+XLlyMwMBA+Pj54+fIlBg8ejJs3b6JGjRr4+eef9V0jERFRlaVTUNeuXRt//vkntm/fjkuXLuH58+cYNWoUhgwZonJyGREREZWNTkENACYmJhg6dKg+ayEiIqJidArqzZs3v/X14cOHl2ic3377DUuXLsX58+chl8uxe/duBAcHv3WZ2NhYhIWF4cqVK3B3d8fXX3+NESNGlLByIiKiykWnoJ4yZYrK84KCArx48QJmZmawsrIqcVDn5OSgefPm+Pzzz9G3b9939r9z5w6CgoIwfvx4/OMf/0BMTAxGjx4NNzc3BAYG6vJWiIiIJE2noH7y5Ila282bN/HFF1/gyy+/LPE4PXr0QI8ePUrcf/369ahbty6WL18OAGjUqBFOnjyJlStXMqiJiOi9pPN3fRdXv359LFq0SG1rW5/i4uIQEBCg0hYYGIi4uDity+Tl5SE7O1vlQUREVFnofDKZxsFMTJCWlqbPIVWkp6fDxcVFpc3FxQXZ2dnIzc3VeMZ5eHg45s2bV241EVHZDfxB+y/bpbV9rK/exqL3Q2X/fOkU1Pv27VN5LoSAXC7H6tWr8fHHH+ulMH2ZNWsWwsLClM+zs7Ph7u5uwIqIiIhKTqegLn5mtkwmg5OTE7p06aI8flweXF1dkZGRodKWkZEBOzs7rddvm5ubw9zcvNxqIiIiKk86BbVCodB3HSXi6+uLAwcOqLRFR0fD15e7uoiI6P2kt5PJdPH8+XMkJCQgISEBwOvLrxISEpCSkgLg9W7rNy/1Gj9+PG7fvo2ZM2fi+vXrWLt2LXbu3Ilp06YZonwiIqJyp9MW9ZvHfN9lxYoVWl+Lj49H586d1cYNCQlBZGQk5HK5MrQBoG7duvj1118xbdo0rFq1CrVr18aGDRt4aRYREb23dArqixcv4uLFiygoKIC3tzcA4MaNGzA2NkbLli2V/WQy2VvH6dSpE4QQWl+PjIzUuMzFixd1KZuIiKjS0Smoe/XqBVtbW/z0009wcHAA8PpLUEaOHIkOHTpg+vTpei2SiIioqtLpGPXy5csRHh6uDGkAcHBwwMKFC8v1rG8iIqKqRqegzs7ORmZmplp7ZmYmnj17VuaiiIiI6DWdgrpPnz4YOXIkdu3ahfv37+P+/fv45ZdfMGrUqBLdXIOIiIhKRqdj1OvXr8eMGTMwePBgFBQUvB7IxASjRo3C0qVL9VogERFRVaZTUFtZWWHt2rVYunQpkpOTAQD16tWDtbW1XosjIiKq6sr0hSdyuRxyuRz169eHtbX1Wy+1IiIiotLTKaj/9a9/oWvXrmjQoAF69uwJuVwOABg1ahQvzSIiItIjnYJ62rRpMDU1RUpKCqysrJTtAwYMwKFDh/RWHBERUVWn0zHqI0eO4PDhw6hdu7ZKe/369XHv3j29FEZEREQ6blHn5OSobEkXefz4MW8pSUREpEc6BXWHDh2wefNm5XOZTAaFQoElS5ao3GSDiIiIykanXd9LlixB165dER8fj/z8fMycORNXrlzB48ePcerUKX3XSEREVGXptEXdpEkT3LhxA+3bt0fv3r2Rk5ODvn374uLFi6hXr56+ayQiIqqySr1FXVBQgO7du2P9+vWYPXt2edRERERE/1bqLWpTU1NcunSpPGohIiKiYnTa9T106FD8/e9/13ctREREVIxOJ5O9evUKGzduxNGjR9GqVSu17/hesWKFXoojIiKq6koV1Ldv34anpycSExPRsmVLAMCNGzdU+shkMv1VR0REVMWVKqjr168PuVyO48ePA3j9laHfffcdXFxcyqU4IiKiqq5Ux6iL3x3r4MGDyMnJ0WtBRERE9B9lus0lb2tJRERUvkoV1DKZTO0YNI9JExERlZ9SHaMWQmDEiBHKG2+8fPkS48ePVzvre9euXfqrkIiIqAorVVCHhISoPB86dKheiyEiIiJVpQrqTZs2lVcdREREpEGZTiYjIiKi8sWgJiIikjAGNRERkYQxqImIiCSMQU1ERCRhDGoiIiIJY1ATERFJGIOaiIhIwhjUREREEsagJiIikjAGNRERkYQxqImIiCRMEkG9Zs0aeHp6wsLCAu3atcPZs2e19o2MjFTeF7voYWFhUYHVEhERVRyDB/WOHTsQFhaGOXPm4MKFC2jevDkCAwPx8OFDrcvY2dlBLpcrH/fu3avAiomIiCqOwYN6xYoVGDNmDEaOHAkfHx+sX78eVlZW2Lhxo9ZlZDIZXF1dlQ8XF5cKrJiIiKjiGDSo8/Pzcf78eQQEBCjbjIyMEBAQgLi4OK3LPX/+HB4eHnB3d0fv3r1x5coVrX3z8vKQnZ2t8iAiIqosDBrUjx49QmFhodoWsYuLC9LT0zUu4+3tjY0bN2Lv3r3YunUrFAoF/Pz8cP/+fY39w8PDYW9vr3y4u7vr/X0QERGVF4Pv+i4tX19fDB8+HC1atIC/vz927doFJycnfP/99xr7z5o1C1lZWcpHampqBVdMRESkOxNDrrxGjRowNjZGRkaGSntGRgZcXV1LNIapqSk+/PBD3Lp1S+Pr5ubmMDc3L3OtREREhmDQLWozMzO0atUKMTExyjaFQoGYmBj4+vqWaIzCwkJcvnwZbm5u5VUmERGRwRh0ixoAwsLCEBISgtatW6Nt27aIiIhATk4ORo4cCQAYPnw4atWqhfDwcADA/Pnz8dFHH8HLywtPnz7F0qVLce/ePYwePdqQb4OIiKhcGDyoBwwYgMzMTHzzzTdIT09HixYtcOjQIeUJZikpKTAy+s+G/5MnTzBmzBikp6fDwcEBrVq1wunTp+Hj42Oot0BERFRuDB7UABAaGorQ0FCNr8XGxqo8X7lyJVauXFkBVRERERlepTvrm4iIqCphUBMREUkYg5qIiEjCGNREREQSxqAmIiKSMAY1ERGRhDGoiYiIJIxBTUREJGEMaiIiIgljUBMREUkYg5qIiEjCGNREREQSxqAmIiKSMAY1ERGRhDGoiYiIJIxBTUREJGEMaiIiIgljUBMREUkYg5qIiEjCGNREREQSxqAmIiKSMAY1ERGRhDGoiYiIJIxBTUREJGEMaiIiIgljUBMREUkYg5qIiEjCGNREREQSxqAmIiKSMAY1ERGRhDGoiYiIJIxBTUREJGEMaiIiIgljUBMREUkYg5qIiEjCGNREREQSxqAmIiKSMEkE9Zo1a+Dp6QkLCwu0a9cOZ8+efWv/qKgoNGzYEBYWFmjatCkOHDhQQZUSERFVLIMH9Y4dOxAWFoY5c+bgwoULaN68OQIDA/Hw4UON/U+fPo1BgwZh1KhRuHjxIoKDgxEcHIzExMQKrpyIiKj8GTyoV6xYgTFjxmDkyJHw8fHB+vXrYWVlhY0bN2rsv2rVKnTv3h1ffvklGjVqhAULFqBly5ZYvXp1BVdORERU/gwa1Pn5+Th//jwCAgKUbUZGRggICEBcXJzGZeLi4lT6A0BgYKDW/kRERJWZiSFX/ujRIxQWFsLFxUWl3cXFBdevX9e4THp6usb+6enpGvvn5eUhLy9P+TwrKwsAkJ2dXZbSlQpyc/QyDqC/mogqG/47ovIkxc9X0ThCiHf2NWhQV4Tw8HDMmzdPrd3d3d0A1bzdrqmGroCo8uO/IypP+v58PXv2DPb29m/tY9CgrlGjBoyNjZGRkaHSnpGRAVdXV43LuLq6lqr/rFmzEBYWpnyuUCjw+PFjODo6QiaTlfEdqMrOzoa7uztSU1NhZ2en17GrEs5j2XEO9YPzWHacQ82EEHj27Blq1qz5zr4GDWozMzO0atUKMTExCA4OBvA6SGNiYhAaGqpxGV9fX8TExGDq1KnKtujoaPj6+mrsb25uDnNzc5W2atWq6aN8rezs7PiB1APOY9lxDvWD81h2nEN179qSLmLwXd9hYWEICQlB69at0bZtW0RERCAnJwcjR44EAAwfPhy1atVCeHg4AGDKlCnw9/fH8uXLERQUhO3btyM+Ph4//PCDId8GERFRuTB4UA8YMACZmZn45ptvkJ6ejhYtWuDQoUPKE8ZSUlJgZPSfk9P9/Pywbds2fP311/jrX/+K+vXrY8+ePWjSpImh3gIREVG5MXhQA0BoaKjWXd2xsbFqbf369UO/fv3KuarSMzc3x5w5c9R2tVPpcB7LjnOoH5zHsuMclp1MlOTccCIiIjIIg38zGREREWnHoCYiIpIwBjUREZGEMahLKTw8HG3atIGtrS2cnZ0RHByMpKQklT4vX77ExIkT4ejoCBsbG3z66adqX9JS1b1rHh8/foxJkybB29sblpaWqFOnDiZPnqz8Clgq2WexiBACPXr0gEwmw549eyq2UIkr6TzGxcWhS5cusLa2hp2dHTp27Ijc3FwDVCw9JZnD9PR0DBs2DK6urrC2tkbLli3xyy+/GKjiyoVBXUonTpzAxIkT8ccffyA6OhoFBQXo1q0bcnL+812y06ZNw//93/8hKioKJ06cQFpaGvr27WvAqqXnXfOYlpaGtLQ0LFu2DImJiYiMjMShQ4cwatQoA1cuHSX5LBaJiIjQ+zfxvS9KMo9xcXHo3r07unXrhrNnz+LcuXMIDQ1VuXS0KivJHA4fPhxJSUnYt28fLl++jL59+6J///64ePGiASuvJASVycOHDwUAceLECSGEEE+fPhWmpqYiKipK2efatWsCgIiLizNUmZJXfB412blzpzAzMxMFBQUVWFnloW0OL168KGrVqiXkcrkAIHbv3m2YAisJTfPYrl078fXXXxuwqspF0xxaW1uLzZs3q/SrXr26+PHHHyu6vEqHvw6WUdGu2OrVqwMAzp8/j4KCApVbcTZs2BB16tThrTjfovg8autjZ2cHExNJXP4vOZrm8MWLFxg8eDDWrFmj9fvwSVXxeXz48CHOnDkDZ2dn+Pn5wcXFBf7+/jh58qQhy5Q0TZ9FPz8/7NixA48fP4ZCocD27dvx8uVLdOrUyUBVVh4M6jJQKBSYOnUqPv74Y+U3o6Wnp8PMzEzt+8TfdivOqk7TPBb36NEjLFiwAGPHjq3g6ioHbXM4bdo0+Pn5oXfv3gasrvLQNI+3b98GAMydOxdjxozBoUOH0LJlS3Tt2hU3b940ZLmSpO2zuHPnThQUFMDR0RHm5uYYN24cdu/eDS8vLwNWWzlw06QMJk6ciMTERP5mXUbvmsfs7GwEBQXBx8cHc+fOrdjiKglNc7hv3z4cO3aMxwBLQdM8KhQKAMC4ceOU9yD48MMPERMTg40bNyrvQ0Cvafv3/Le//Q1Pnz7F0aNHUaNGDezZswf9+/fH77//jqZNmxqo2krC0PveK6uJEyeK2rVri9u3b6u0x8TECADiyZMnKu116tQRK1asqMAKKwdt81gkOztb+Pr6iq5du4rc3NwKrq5y0DaHU6ZMETKZTBgbGysfAISRkZHw9/c3TLESpm0eb9++LQCILVu2qLT3799fDB48uCJLlDxtc3jr1i0BQCQmJqq0d+3aVYwbN64iS6yUuOu7lIQQCA0Nxe7du3Hs2DHUrVtX5fVWrVrB1NQUMTExyrakpCSkpKRovRVnVfSueQReb0l369YNZmZm2LdvHywsLAxQqXS9aw6/+uorXLp0CQkJCcoHAKxcuRKbNm0yQMXS9K559PT0RM2aNdUuN7px4wY8PDwqslTJetccvnjxAgDUzpI3NjZW7rGgtzDorwmV0BdffCHs7e1FbGyskMvlyseLFy+UfcaPHy/q1Kkjjh07JuLj44Wvr6/w9fU1YNXS8655zMrKEu3atRNNmzYVt27dUunz6tUrA1cvDSX5LBYHnvWtpiTzuHLlSmFnZyeioqLEzZs3xddffy0sLCzErVu3DFi5dLxrDvPz84WXl5fo0KGDOHPmjLh165ZYtmyZkMlk4tdffzVw9dLHoC4lABofmzZtUvbJzc0VEyZMEA4ODsLKykr06dNHyOVywxUtQe+ax+PHj2vtc+fOHYPWLhUl+SxqWoZBraqk8xgeHi5q164trKyshK+vr/j9998NU7AElWQOb9y4Ifr27SucnZ2FlZWVaNasmdrlWqQZ755FREQkYTxGTUREJGEMaiIiIgljUBMREUkYg5qIiEjCGNREREQSxqAmIiKSMAY1ERGRhDGoiYiIJIxBTfQeGDFiBIKDg8t9PZ6enoiIiCj39ejL3Llz0aJFC0OXQVQmDGqicjJixAjIZDLIZDKYmZnBy8sL8+fPx6tXrwxd2jtFRkaq3VMdAM6dO1fu9wTXtm4AkMlk2LNnT4nHmjFjhsoNcirqFxoifeL9qInKUffu3bFp0ybk5eXhwIEDmDhxIkxNTTFr1iy1vvn5+TAzMzNAlSXn5ORk6BJKxcbGBjY2NoYug6hMuEVNVI7Mzc3h6uoKDw8PfPHFFwgICMC+ffsA/Gfr7ttvv0XNmjXh7e0NALh8+TK6dOkCS0tLODo6YuzYsXj+/LlyzMLCQoSFhaFatWpwdHTEzJkzUfwr+zXtom7RogXmzp2rfP706VOMGzcOLi4usLCwQJMmTbB//37ExsZi5MiRyMrKUu4RKFqu+LgpKSno3bs3bGxsYGdnh/79+yMjI0P5etGu5y1btsDT0xP29vYYOHAgnj17Vua5jY2NhUwmQ0xMDFq3bg0rKyv4+fmp3I7yzV3fc+fOxU8//YS9e/cq31dsbCzy8/MRGhoKNzc3WFhYwMPDA+Hh4WWuj0hfGNREFcjS0hL5+fnK5zExMUhKSkJ0dDT279+PnJwcBAYGwsHBAefOnUNUVBSOHj2K0NBQ5TLLly9HZGQkNm7ciJMnT+Lx48fYvXt3qepQKBTo0aMHTp06ha1bt+Lq1atYtGgRjI2N4efnh4iICNjZ2UEul0Mul2PGjBkax+jduzceP36MEydOIDo6Grdv38aAAQNU+iUnJ2PPnj3Yv38/9u/fjxMnTmDRokWlnDntZs+ejeXLlyM+Ph4mJib4/PPPNfabMWMG+vfvj+7duyvfl5+fH7777jvs27cPO3fuRFJSEv7xj3/A09NTb/URlRV3fRNVACEEYmJicPjwYUyaNEnZbm1tjQ0bNih3ef/44494+fIlNm/eDGtrawDA6tWr0atXLyxevBguLi6IiIjArFmz0LdvXwDA+vXrcfjw4VLVc/ToUZw9exbXrl1DgwYNAAAffPCB8nV7e3vIZDK4urpqHSMmJgaXL1/GnTt34O7uDgDYvHkzGjdujHPnzqFNmzYAXgd6ZGQkbG1tAQDDhg1DTEwMvv3221LVrM23334Lf39/AMBXX32FoKAgvHz5EhYWFir9bGxsYGlpiby8PJX3lZKSgvr166N9+/aQyWTw8PDQS11E+sItaqJytH//ftjY2MDCwgI9evTAgAEDVHY/N23aVOW49LVr19C8eXNlSAPAxx9/DIVCgaSkJGRlZUEul6Ndu3bK101MTNC6detS1ZWQkIDatWsrQ1oX165dg7u7uzKkAcDHxwfVqlXDtWvXlG2enp7KkAYANzc3PHz4UOf1FtesWTOVsQGUavwRI0YgISEB3t7emDx5Mo4cOaK32oj0gUFNVI46d+6MhIQE3Lx5E7m5ufjpp59UQvjNv+uTkZGR2nHrgoIC5d8tLS3LZb2amJqaqjyXyWRQKBRa+9vZ2SEnJ0etz9OnTwG83trXNr5MJgOAt45fXMuWLXHnzh0sWLAAubm56N+/Pz777LMSL09U3hjUROXI2toaXl5eqFOnDkxM3n2kqVGjRvjzzz+Rk5OjbDt16hSMjIzg7e0Ne3t7uLm54cyZM8rXX716hfPnz6uM4+TkBLlcrnyenZ2NO3fuKJ83a9YM9+/fx40bNzTWYWZmhsLCwnfWmpqaitTUVGXb1atX8fTpU/j4+LzzvWrj7e2NV69eISEhQaX9woULAFCmvQDa3pednR0GDBiAH3/8ETt27MAvv/yCx48f67weIn1iUBNJyJAhQ2BhYYGQkBAkJibi+PHjmDRpEoYNGwYXFxcAwJQpU7Bo0SLs2bMH169fx4QJE5Rbm0W6dOmCLVu24Pfff8fly5cREhICY2Nj5ev+/v7o2LEjPv30U0RHR+POnTs4ePAgDh06BOD17urnz58jJiYGjx49wosXL9RqDQgIQNOmTTFkyBBcuHABZ8+exfDhw+Hv71/qXfFvaty4Mbp164bPP/8cMTExuHPnDg4dOoQJEyZgwIABqFWrls5je3p64tKlS0hKSsKjR49QUFCAFStW4Oeff8b169dx48YNREVFwdXVVeu13EQVjUFNJCFWVlY4fPgwHj9+jDZt2uCzzz5D165dsXr1amWf6dOnY9iwYQgJCYGvry9sbW3Rp08flXFmzZoFf39//Nd//ReCgoIQHByMevXqqfT55Zdf0KZNGwwaNAg+Pj6YOXOmcmvTz88P48ePx4ABA+Dk5IQlS5ao1SqTybB37144ODigY8eOCAgIwAcffIAdO3aUeR527NgBf39/jBs3Do0bN8bkyZPRu3dvbNiwoUzjjhkzBt7e3mjdujWcnJxw6tQp2NraYsmSJWjdujXatGmDu3fv4sCBAzAy4n+PJA0yUfxAFhEREUkGf2UkIiKSMAY1ERGRhDGoiYiIJIxBTUREJGEMaiIiIgljUBMREUkYg5qIiEjCGNREREQSxqAmIiKSMAY1ERGRhDGoiYiIJIxBTUREJGH/D9WAjwXwobAyAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 500x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "utils.plot_distribution(\n",
    "    tables.shift.groupby(\"sample_id\")[\"production_units\"].sum(),\n",
    "    title=\"Production Distribution\",\n",
    "    xlabel=\"Production Units\",\n",
    ")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
