diff --git a/docs/notebooks/structural_reliability.ipynb b/docs/notebooks/structural_reliability.ipynb index 2a4b4af..77b5f55 100644 --- a/docs/notebooks/structural_reliability.ipynb +++ b/docs/notebooks/structural_reliability.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 1, "id": "cedd5ec9-31f7-4e7f-91be-f73b1d1d00f1", "metadata": { "ExecuteTime": { @@ -40,7 +40,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 2, "id": "0b21846d-edff-4e39-a423-b247f81c4520", "metadata": { "ExecuteTime": { @@ -125,7 +125,7 @@ "4 2.615602 -32.937734 979.498038 0.419690" ] }, - "execution_count": 11, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -141,7 +141,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 3, "id": "4206d712-b525-4e9b-9724-262a1fb3fb02", "metadata": { "ExecuteTime": { @@ -161,7 +161,7 @@ "Name: delta_sig, dtype: float64" ] }, - "execution_count": 12, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -180,7 +180,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 4, "id": "1367362a-9b3d-4624-88d5-4931d4a56c8d", "metadata": { "ExecuteTime": { @@ -202,7 +202,7 @@ " 0.00000000e+00]]))" ] }, - "execution_count": 13, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -222,7 +222,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 5, "id": "ad38a9b2-199a-458e-953b-33dbee5b9bd1", "metadata": { "ExecuteTime": { @@ -265,7 +265,7 @@ "[1134 rows x 9 columns], states=[3, 3], bin_edges=[array([-399.89835911, -65.53161418, 167.29633942, 949.91234636]), array([-1.19998572, -0.80203225, 0.30600691, 0.69994998])])" ] }, - "execution_count": 14, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -287,7 +287,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 6, "id": "baf6963d-700c-4eca-83c8-35b6a487e105", "metadata": { "ExecuteTime": { @@ -299,18 +299,18 @@ { "data": { "text/plain": [ - "[[0.0702614379084967, 0.43562091503267975, 0.41353874883286645, 1.0],\n", + "[[0.5846405228758169, 0.9330065359477124, 0.9119514472455649, 1.0],\n", " [0.14901960784313728, 0.8627450980392157, 0.8196078431372549, 1.0],\n", - " [0.5846405228758169, 0.9330065359477124, 0.9119514472455649, 1.0],\n", - " [0.4956417501498417, 0.5004538059765391, 0.050526586180323685, 1.0],\n", - " [0.9098039215686274, 0.9176470588235294, 0.1843137254901961, 1.0],\n", + " [0.0702614379084967, 0.43562091503267975, 0.41353874883286645, 1.0],\n", " [0.9651425635756488, 0.9681736450038532, 0.6847675314667352, 1.0],\n", - " [0.43562091503267975, 0.0702614379084967, 0.24892623716153087, 1.0],\n", + " [0.9098039215686274, 0.9176470588235294, 0.1843137254901961, 1.0],\n", + " [0.4956417501498417, 0.5004538059765391, 0.050526586180323685, 1.0],\n", + " [0.9330065359477124, 0.5846405228758169, 0.7549953314659192, 1.0],\n", " [0.8627450980392157, 0.14901960784313728, 0.4980392156862745, 1.0],\n", - " [0.9330065359477124, 0.5846405228758169, 0.7549953314659192, 1.0]]" + " [0.43562091503267975, 0.0702614379084967, 0.24892623716153087, 1.0]]" ] }, - "execution_count": 15, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -330,7 +330,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "fe70e06e-5377-431e-8e3e-82aa4d21a792", "metadata": { "ExecuteTime": { @@ -341,7 +341,7 @@ "outputs": [ { "data": { - "image/png": "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2c/0BgAAEJalMAAAACzXAwQAwVZeVKTzjp1vEVQA0YMACEDUUgkFY2Jj5W/de5s7wG7X6TkARD8CIABRSyUU9FZWysI9uyQhOclUgVN7HDnBACsgAAIQ9S5onSUJfrIwA7AWJkEDAADLIQACAACWQwAEAAAshwAIAABYDgEQAACwHFaBAUAjmUmeWF5MgkUgHBEAAUCADK8h4nDImpybeO+ACEUABAABssXYRKqq5IX3d0pSaoqpBIsAwgsBEAA0UousLElOT+P9AyIQk6ABAIDlEAABAADLIQACAACWQwAEAAAshwAIAABYDgEQAACwHAIgAABgOQRAAADAcgiAAACA5ZAJGgDCTLHJAqpxcXESHx8f9OsBohEBEACECU9FhYjNJtnZ2abaZ2S2km8O5RMEAY1AAAQAYcJbUSliGNI3L1eciYk+21a53bI+N08qKioIgIBGIAACgDDjiI8Xh9MZ6ssAohqToAEAgOUQAAEAAMshAAIAAJZDAAQAACyHAAgAAFgOARAAALAcAiAAAGA5BEAAAMBywiIAWrRokbRr106cTqf06NFDdu3a5bP9qlWr5KqrrtLtO3XqJGvXrq3z/P333y82m63ONmDAgCC/CgAAEClCHgCtXLlSxo8fL9OmTZO9e/dK586dpX///nLs2LF622/fvl1GjBghDzzwgHzwwQcydOhQvX3yySd12qmA57vvvqvZ/vznPzfTKwIAAOEu5AHQ3LlzZcyYMTJ69Gjp0KGDLFmyRBITE2XZsmX1tp8/f74ObiZMmCBXX321TJ8+Xa6//npZuHBhnXaqQnLr1q1rthYtWjTTKwIAAOEupLXAVBG/PXv2yKRJk2r2xcTESL9+/WTHjh31HqP2qx6j2lSP0erVq+vs27Jli2RmZurAp2/fvjJjxgxp2bJlved0u916q1ZUVHSerwxApCopPO23jauoOODzuk0cU14c+HkBRGAAdPz4cfF4PJKVlVVnv3q8f//+eo85cuRIve3V/mqqh+jOO++USy+9VP71r3/J5MmTZeDAgTp4stvt55xz5syZkpeX12SvC0DkUb8bYhwO+WWn68wfZJho4jVEHA5Zk3NTk54XwPmJymrw99xzT82/1STpa6+9Vi6//HLdK3TLLbec0171QNXuVVI9QG3btm226wUQeva4ePFWVcnUp3pJWprvSuyFheXy26e2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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAGeCAYAAAB8Rr70AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASZVJREFUeJzt3Ql8VOX1+P8zk0mYhCwgkAQoigsFWQQEgVALLvxls4r6RaRWkFL6dUFRWixQFilaRAsFgcqPVqx+WwpSLYoiShFcvqAIuCOoVQpfFAgC2fe5/9d5NGkCycydkMks9/N+vQaYm+cONzNZzjzPec5xWZZlCQAAgIO4w30BAAAAjY0ACAAAOA4BEAAAcBwCIAAA4DgEQAAAwHEIgAAAgOMQAAEAAMchAAIAAI5DAAQAABzHE+4LiEQ+n0+++uorSUlJEZfLFe7LAQAANmhzi7y8PGnTpo243QHmeKwwW7p0qXXOOedYTZo0sfr06WO9/fbbfsc//fTTVseOHc34rl27Wi+++GKNj+fl5Vl33nmn1bZtW8vr9VoXXnih9dhjjwV1TQcPHtT2INx4Dvga4GuArwG+BvgakOh7DvT3eCBhnQFas2aNTJ48WZYvXy59+/aVRYsWyeDBg2Xfvn2Snp5+2vht27bJ6NGjZd68eXL11VfLqlWrZMSIEbJ7927p2rWrGaOP9+qrr8pf/vIXad++vbzyyityxx13mGjwmmuusXVdOvOjDh48KKmpqQ38WQMAgFDIzc2Vdu3aVf0e98elUZCEiQY9l1xyiSxdurRq6Ukv/K677pKpU6eeNn7UqFFSUFAgL7zwQtWxfv36SY8ePUwQpTQQ0nEzZ86sGtOrVy8ZOnSoPPDAA7afwLS0NMnJySEAAgAgSgTz+ztsSdClpaWya9cuGTRo0H8uxu0297dv317rOXq8+nilM0bVx/fv31+ef/55OXTokFkL3LJli3z66ady1VVX1XktJSUl5kmrfgMAALErbAHQsWPHpKKiQjIyMmoc1/uHDx+u9Rw9Hmj8kiVLpHPnzvK9731PEhISZMiQIbJs2TIZMGBAndeiS2oaMVbedBYKAADErpjbBq8B0FtvvWVmgXSGacGCBXLnnXfKP//5zzrPmTZtmpkuq7xp7g8AAIhdYUuCbtmypcTFxcmRI0dqHNf7mZmZtZ6jx/2NLyoqkunTp8s//vEPGT58uDl20UUXyXvvvSe/+93vTls+q9SkSRNzAwAAzhC2GSBdntLk5M2bN1cd0yRovZ+VlVXrOXq8+ni1adOmqvFlZWXmdurefw209LEBAABUWLfB65b1sWPHSu/evaVPnz5mG7zu8ho3bpz5+JgxY6Rt27YmR0dNmjRJBg4caJa1dIZn9erVsnPnTlmxYoX5uGZ868enTJkiiYmJcs4558hrr70mTz31lCxcuDCcnyoAAIggYQ2AdLt6dna2zJo1yyQy63b2jRs3ViU6HzhwoMZsju7w0to/M2bMMEtdHTp0kHXr1lXVAFIaFGlOz8033yzHjx83QdCDDz4ot912W1g+RwAAEHnCWgcoUlEHCACA6BMVdYAAAADChQAIAAA4DgEQAABwHAIgAADgOARAAADAccK6DR4AopU2UdamznYLv1JtHogsBEAAUI/g5+z27eVoHY2bT5WemSkH9u8nCAIiCAEQAARJZ340+Hl838eSmJzsd2xRfr6M79jFnMMsEBA5CIAAoJ40+ElMSeH5A6IQSdAAAMBxCIAAAIDjEAABAADHIQACAACOQwAEAAAchwAIAAA4DtvgASDI6s55eXk8Z0CUIwACgHpUd1aWz8dzB0QpAiAACLK68/HDR2Rirz7is3jqgGhFAAQAQVZ3TszP5zkDohxJ0AAAwHEIgAAAgOMQAAEAAMchAAIAAI5DAAQAAByHXWAAUE1+Tq5UVPiv71OQSyFEINoRAAGAFjW0LPEkJMjPO3ez/3xQBwiIWgRAACAiLpdLyktL5UevvSLxTZv6fU6KsrPlpaEjRFw8dUC0IgACgGqSMtIlPkAlaADRjyRoAADgOARAAADAcQiAAACA4xAAAQAAxyEAAgAAjkMABAAAHIcACAAAOE5EBEDLli2T9u3bi9frlb59+8qOHTv8jl+7dq106tTJjO/WrZts2LDhtIJmtd0eeeSREH8mAAAgGoQ9AFqzZo1MnjxZZs+eLbt375bu3bvL4MGD5ejRo7WO37Ztm4wePVrGjx8v7777rowYMcLcPvroo6oxX3/9dY3bypUrTQB0ww03NOJnBgAAIpXL0gY4YaQzPpdccoksXbrU3Pf5fNKuXTu56667ZOrUqaeNHzVqlBQUFMgLL7xQdaxfv37So0cPWb58ea3/hwZIeXl5snnzZlvXlJubK2lpaZKTkyOpqan1/twARA/9GaHf76P2vhewEnTh4SPybO8fyP8c+FKSm6X5HVuUlyc/bnuOHDp0SFJSUgJeR0JCgjRp0iTo6wcgQf3+DmsrjNLSUtm1a5dMmzat6pjb7ZZBgwbJ9u3baz1Hj+uMUXU6Y7Ru3bpaxx85ckRefPFFefLJJ+u8jpKSEnOr/gQCQEMoKykRt8cjbdu2tTU+PTNTDuzfTxAEhFhYA6Bjx45JRUWFZGRk1Diu9/fu3VvrOYcPH651vB6vjQY++q7r+uuvr/M65s2bJ3PmzKnX5wAA/pSXlYmvvFxW7PlQktP8vyMtys+X8R27mDeHzAIBoRXzzVA1/+fmm282CdN10Rmo6rNKOgOky3AA0FASk5Ml0cYSGAAHBEAtW7aUuLg4s0xVnd7PzMys9Rw9bnf8G2+8Ifv27TOJ1v7oOy3ebQEA4Bxh3QWmyX69evWqkZysSdB6Pysrq9Zz9PipycybNm2qdfzjjz9uHl93lgFAQ8vPOSn5J3P83gpy83jigQgU9iUwXXoaO3as9O7dW/r06SOLFi0yu7zGjRtnPj5mzBiTPKh5OmrSpEkycOBAWbBggQwfPlxWr14tO3fulBUrVtR4XF3G0npBOg4AGpIllklsvr1bz2BOAhBBwh4A6bb27OxsmTVrlklk1u3sGzdurEp0PnDggNkZVql///6yatUqmTFjhkyfPl06dOhgdoB17dq1xuNqYKQ7/LVmEAA0JJe4TGLzsC0bxRsgr6coO1teGjpCTwIQQcJeBygSUQcIcJ761AH6r493iTctrcFrBunPIDs1gwDU//d32CtBAwAANDYCIAAA4DgEQAAAwHEIgAAAgOMQAAEAAMchAAIAAI5DAAQAAByHAAgAADgOARAAAHAcAiAAAOA4BEAAAMBxCIAAAIDjEAABAADHIQACAACOQwAEAAAchwAIAAA4DgEQAABwHAIgAADgOARAAADAcQiAAACA4xAAAQAAxyEAAgAAjkMABAAAHIcACAAAOA4BEAAAcBxPuC8AAEIpNzdX8vPzA46zMwZA7CAAAhCzSkpKJLNNGykqKLB9jmX5QnpNACIDARCAmFVaWmqCnx+99orEN23qd2xRdra8NHSE+HxWo10fgPAhAAIQ85Iy0iU+OTnclwEggpAEDQAAHIcACAAAOA4BEAAAcBwCIAAA4DgkQQNANSW5eQGfj+K8wGMARLawzwAtW7ZM2rdvL16vV/r27Ss7duzwO37t2rXSqVMnM75bt26yYcOG08Z88skncs0110haWpo0bdpULrnkEjlw4EAIPwsA0c4VHycSFyfrsy6Tv3fp5fe24fIh4b5cANE8A7RmzRqZPHmyLF++3AQ/ixYtksGDB8u+ffskPT39tPHbtm2T0aNHy7x58+Tqq6+WVatWyYgRI2T37t3StWtXM+Zf//qXXHrppTJ+/HiZM2eOpKamyscff2wCJgCoi8sTL1JRIQPuu1e8Kal+n6jivFx5/eHf82QCUSysAdDChQtlwoQJMm7cOHNfA6EXX3xRVq5cKVOnTj1t/OLFi2XIkCEyZcoUc3/u3LmyadMmWbp0qTlX/frXv5Zhw4bJww8/XHXe+eef32ifE4DopsGPt1lauC8DQKwugWmF1l27dsmgQYP+czFut7m/ffv2Ws/R49XHK50xqhzv8/lMAPX973/fHNdZJJ1ZWrduXcBy+dovqPoNABpSfs5JyT+Z4/+Ww88eIOZngI4dOyYVFRWSkZFR47je37t3b63nHD58uNbxelwdPXrUNDR86KGH5IEHHpD58+fLxo0b5frrr5ctW7bIwIEDa31cXVLT5TIAaGiWWOL2eOT2bj1tjfckJIhl0Y4DCLWY2gWmM0Dq2muvlXvvvdf8u0ePHiZ3SJfI6gqApk2bZnKRKukMULt27RrpqgHEMpe4xFdeLsO2bBRvSorfsWUFBbJ+4FXicrka7foApwpbANSyZUuJi4uTI0eO1Diu9zMzM2s9R4/7G6+P6fF4pHPnzjXGXHjhhfLmm2/WeS1NmjQxNwAIlaT0VuJN859bVJafzwsAxHoOUEJCgvTq1Us2b95cYwZH72dlZdV6jh6vPl5pEnTleH1M3fKuu8iq+/TTT+Wcc84JyecBAACiT1iXwHTZaezYsdK7d2/p06eP2QZfUFBQtStszJgx0rZtW5OjoyZNmmSWsRYsWCDDhw+X1atXy86dO2XFihVVj6k7xEaNGiUDBgyQyy+/3OQArV+/XrZu3Rq2zxMAAESWsAZAGqhkZ2fLrFmzTCKz5utowFKZ6KzFC3VnWKX+/fub2j8zZsyQ6dOnS4cOHcwOr8oaQOq6664z+T4aNN19993SsWNHeeaZZ0xtIAAAgIhIgp44caK51aa2WZuRI0eamz8//elPzQ0AACAiW2EAAAA4bgYIAEKtODfX1B070yaoAGIHARCAmKUFBd3x8fJcnwH2ToiL05L0ob4sABGAAAhAzNKCgr6yMrli5lTxJDSx1+A0jgAIcAICIAAxz5uaKh6vN9yXASCC8FYHAAA4DgEQAABwHAIgAADgOARAAADAcQiAAACA47ALDADqyU7xxOI8CiwCkYgACACCZIkl4omT9VmX8dwBUYoACACC5BKXSHmFDJg+RbyJSfYKLAKIKARAAHAGBRa9TZvy/AFRiCRoAADgOARAAADAcQiAAACA4xAAAQAAxyEAAgAAjkMABAAAHIcACAAAOA4BEAAAcBwCIAAA4DhUggaACJNns4FqQkKCNGnSJOTXA8QiAiAAiBAVpaXi9nikbdu2tsanZ2bKgf37CYKAeiAAAoAI4SstE195uazY86Ekp6X6HVuUny/jO3aR0tJSAiCgHgiAACDCJCYnS2JKSrgvA4hpJEEDAADHIQACAACOQwAEAAAchwAIAAA4DgEQAABwHAIgAADgOARAAADAcQiAAACA40REALRs2TJp3769eL1e6du3r+zYscPv+LVr10qnTp3M+G7dusmGDRtqfPzWW28Vl8tV4zZkyJAQfxYAACBahD0AWrNmjUyePFlmz54tu3fvlu7du8vgwYPl6NGjtY7ftm2bjB49WsaPHy/vvvuujBgxwtw++uijGuM04Pn666+rbn/7298a6TMCAACRLuwB0MKFC2XChAkybtw46dy5syxfvlySkpJk5cqVtY5fvHixCW6mTJkiF154ocydO1cuvvhiWbp0aY1x2iE5MzOz6ta8efNG+owAAECkC2svMG3it2vXLpk2bVrVMbfbLYMGDZLt27fXeo4e1xmj6nTGaN26dTWObd26VdLT003gc8UVV8gDDzwgLVq0qPUxS0pKzK1Sbm7uGX5mAKJVSUFRwDHFRYXBP25uXuDHzQs8BkAMBEDHjh2TiooKycjIqHFc7+/du7fWcw4fPlzreD1eSWeIrr/+ejn33HPlX//6l0yfPl2GDh1qgqe4uLjTHnPevHkyZ86cBvu8AEQht1vE5ZLX5v7W/jmWnSGWiCdO1mdd1qCPC+DMxGQ3+Jtuuqnq35okfdFFF8n5559vZoWuvPLK08brDFT1WSWdAWrXrl2jXS+ACBDnFrEs2f7W45KZcZbfoYePHJesfuNFXIEf1qWDyitkwPQp4k1M8ju2OC9XXn/497YeF0AUB0AtW7Y0MzJHjhypcVzva95ObfR4MOPVeeedZ/6vzz//vNYASPOF9AYAGvy0btOywZ8Ib2qqeJs25QkGIkRYk6ATEhKkV69esnnz5qpjPp/P3M/Kyqr1HD1efbzatGlTnePV//3f/8k333wjrVu3bsCrBwAA0Srsu8B06emPf/yjPPnkk/LJJ5/I7bffLgUFBWZXmBozZkyNJOlJkybJxo0bZcGCBSZP6P7775edO3fKxIkTzcfz8/PNDrG33npL9u/fb4Kla6+9Vi644AKTLA0AABD2HKBRo0ZJdna2zJo1yyQy9+jRwwQ4lYnOBw4cMDvDKvXv319WrVolM2bMMMnNHTp0MDvAunbtaj6uS2offPCBCahOnjwpbdq0kauuuspsl2eZCwAAREQApHT2pnIG51SauHyqkSNHmlttEhMT5eWXX27wawQAALEj7EtgAAAAjY0ACAAAOA4BEAAAcJx6BUBbtmxp+CsBAACI5ABIW01oZWXtr3Xw4MGGvyoAAIBIC4AOHTpkdm39/e9/N1WWtb7O008/bZqbAgAAxGQApG0l7r33Xnnvvffk7bfflu9///tyxx13mJo7d999t7z//vsNf6UAAACRUgfo4osvNn24WrRoIQ899JCsXLlS/vCHP5jWFMuXL5cuXbo0zJUCwHe0eOqJEycCPh9aGR4AGjQAKisrk+eee84EPNqLq3fv3rJ06VIZPXq0+eGklZq1WOGePXvq+18AwGlKSkrMbHN5ebntZ8fns3gmAZx5AHTXXXfJ3/72N7EsS2655RZ5+OGHq1pRqKZNm8rvfvc780MKABqS5hpq8DPgvnvFk9DE79jivDzZtniZ+CwfLwKAMw+AdFZnyZIlcv3119fZX0vzhNguDyBUklu1Eo/X63eMp46fTw2lpKAo4JjiosKQXgOARgyAZs+ebZqSejw1T9d3Zdu2bZMBAwaYjw0cOLCelwUAkctnWSJut7w297f2T2IVDoj+AOjyyy+Xr7/+WtLT02scz8nJMR+rqKhoqOsDgIjjdrk0sUjefe8paZaW4nfs4SPHJavfeBFXo10egFAFQJr749IfAKf45ptvTP4PAEQSO0tVdsacKjOzhTRvnlrPqwIQNQGQ5vwoDX5uvfXWGvk/OuvzwQcfmKUxAIgIbrf+wLK/VOVySZyHFomAEwQVAKWlpVXNAKWkpEhiYmLVxxISEqRfv34yYcKEhr9KAKiPOLf+wJLtbz0umRln2Vqqio8/4/JoAKJAUN/pTzzxhPm7ffv28stf/pLlLgBRQYOf1m1ahvsyAMTCLjAAAICYD4C05cXmzZulefPm0rNnz1qToCvt3r27oa4PAGICNYOAKA2Arr322qqk5xEjRoTymgAgZlAzCIjyAKj6shdLYABgDzWDgMjEdgcAaATUDAKiNADS3B9/eT/VHT9+/EyuCQAAIDICoEWLFoX2SgAAACItABo7dmxorwQAQuRkTp54ExMCjgHgHLYDoNzcXElNTa36tz+V4wAgrL7rwN6zxxheCAD1zwGq7ADfrFmzWvOBKpuk0g0eQET47sfUq1uvkfT0JL9Djx4tlCsue14iQX7OyYBjivLzG+VaAHF6APTqq6/KWWd920tny5YtobwmAGhQGvy0bt00KmoGuT0eub1bT1vjPQkJ5o0ngBAGQAMHDqz13wCAhqsZ5Csvl2FbNoo3JcXv2LKCAlk/8Crbu3MBNFAdoBMnTsjjjz8un3zyibnfuXNnGTduXNUsEQBEoxwbydChTphOSm8l3rQ0v2PKvlsCy8uzdy0JCQlV1fwB1DMAev311+VHP/qRpKWlSe/evc2xRx99VH7zm9/I+vXrZcCAATy3AKKK5bPE44mTTh1vkmhQUVpqlsvatm1ra3x6ZqYc2L+fIAg4kwDozjvvlFGjRsljjz0mcXFx5pgmPt9xxx3mYx9++GF9HhYAwsbldkl5eYVsf+s6SUltEvEJ077SMrNctmLPh5KclhowYXp8xy5SWlpKAAScSQD0+eefy9///veq4EfpvydPnixPPfVUfR4SACJCRkaSpDXzSrRITE6WxAD5QgBO55Z6uPjii6tyf6rTY927d6/PQwIAAETeDNAHH3xQ9e+7775bJk2aZGaC+vXrZ4699dZbsmzZMnnooYdCc6UAAESgkpISs7xoB8noUTgD1KNHD+nZs6f5e/To0XLw4EG57777TMKz3vTf//73v+XHP/5x0BehgVP79u3F6/VK3759ZceOHX7Hr127Vjp16mTGd+vWTTZs2FDn2Ntuu81sE6WXGQAgFMHP2e3bmw4Idm46Vs9BFM0AffnllyG5gDVr1pjcoeXLl5vgRwOVwYMHy759+0zV6VNt27bNBGDz5s2Tq6++WlatWiUjRoyQ3bt3S9euXWuM/cc//mFmptq0aROSawcAOJvO/Bw9fFge3/exycfyh2T0KA2AzjnnnJBcwMKFC2XChAmmhpDSQOjFF1+UlStXytSpU08bv3jxYhkyZIhMmTLF3J87d65s2rRJli5das6tdOjQIbnrrrvk5ZdfluHDh4fk2gEAUCSjO6gQotqzZ48cOHDgtLXPa665xtb5et6uXbtk2rRpVcfcbrcMGjRItm/fXus5elxnjKrTGaN169ZV3ff5fHLLLbeYIKlLly4Br0OnI6tPSQZq9goAABwYAH3xxRdy3XXXmXo/ml9T2YumsiS73Waox44dM2MzMjJqHNf7e/furfWcw4cP1zpej1eaP3++eDwek6xthy6nzZkzx9ZYAADg0G3wugPs3HPPlaNHj0pSUpJ8/PHHpjq0VoXeunWrhJPOKOky2Z///GfbPXJ0BionJ6fqpgneAABn05UBbTUS6AYHzQDpMpR2h2/ZsqVZstLbpZdeamZSdNbl3XfftfU4er4WUDxy5EiN43o/MzOz1nP0uL/xb7zxhgnMzj777KqP6yzTL37xC5NgvX///tMeU/vj0CMHAHDq7i5NcLbD8vl48pwQAGlAkfJd5VENYr766ivp2LGjSZTW3Vt2aT2EXr16yebNm81Orsr8Hb0/ceLEWs/JysoyH7/nnnuqjmkStB5XmvujOUSn5gjp8cpEawAAGmJ31/HDR2Rirz7i+zYTBLEeAOl28/fff98sg+nW9YcfftgEMytWrJDzzjsvqMfShOaxY8ea5bM+ffqYWZqCgoKqYGXMmDGm2Z/OLlUuvw0cOFAWLFhgdnetXr1adu7caf5v1aJFC3OrLj4+3swQaZAGIDJlZ2fLiRMnAo7L/64LOhAJu7sS+Xp0VgA0Y8YME6Qo7QCv9Xh++MMfmsBD6/oEQ5uq6g++WbNmmURmLbS4cePGqkRn3WWmS2yV+vfvb2r/6DVMnz5dOnToYHaAnVoDCEB0LTdova7y8nLb5/h4yw2gsQMgXVKqdMEFF5gdW8ePH5fmzZvbTjyuTpe76lryqi2peuTIkeZmV215PwAia7lBg58B990rngT/ndiL8/Jk2+Jl4rPIuQAQpjpAqnLHVLt27c70oQA4XHKrVuLx+u/E7mniP0ACgJBtg9d3ajNnzpS0tDTTw0tv+m9dliorK6vPQwIAAET2DJC2mHj22WdN8nPl7ivdGn///ffLN998I4899lhDXycAAEB4AyBNQtbdV0OHDq06dtFFF5llMG1USgAEAABibglMiwbqstepdFu8bocHAACIuRkg3bGlXdifeOKJqgrKuo31wQcfrHM3FwA0pKK8fKko978TrLSokCcdwJkFQNdff32N+//85z/le9/7nnTv3t3c18KIupX1yiuvtPuQABA8rQvmcskbD863N97lEk9c8OU5AMQ22wGQ7vKq7oYbbqhxn23wABpFnFvEsuSFDcOkVatEv0Ozs4vk6mEbJCGhXqv9QEjYbaCqKSX0qYyAAEiXuwAgUrRvnyqtWzf1O6Zp0/hGux4gkLKSEnF7PKa9kx3pmZlyYP9+gqBILISoLSwqm59qn61WrVo11HUBABBTysvKxFdeLiv2fCjJaal+xxbl58v4jl1MagmzQBEUAGkfMK0F9NRTT5nu7SouLs40Ll2yZIkkJSU19HUCcICC3HzxlPgvpkpiMxpTfk6uVFTUnWxfkGtvOSuYBquI4ABIO7i/9tprsn79evnBD35gjr355pty9913yy9+8QvqAAEIimVZ4nK75bW5v7V3AonNaISvSU9Cgvy8czebJ4T6ihARAdAzzzwjf//73+Wyyy6rOjZs2DBJTEyUG2+8kQAIQFC0ibLl88mrW68JmLcTSYnNOTmB3/2ftDEGkfk1WV5aKj967RWJb1p3rllRdra8NHSECBsNnREAFRYWSkZGxmnH09PTzccAoD7OOy9NUlISIj6x2fJZ4vHESaeON4Xk8UtsLKsU29xJhDOTlJEu8cnJPI0xqF4BkPb/mj17tskB8n7XubmoqEjmzJlT1RsMAGKVy+2S8vIK2f7WdZKS6r87/dGjhXLFZc/belyfZYl44mR91n9m1wNi6QVovABo0aJFMmTIkNMKIWow9PLLL9fvSgAgymRkJElas2/fBDYEt8slUl4hA6ZPEW+i/80kxXm58vrDv2fpBWjMAKhbt27y2WefyV//+lfZu3evOaZNUG+++WaTBwQAqD9vaqp4/eSdAAhDAFRWViadOnWSF154QSZMmNAAlwAAANC4gt5GER8fL8XFxaG5GgAAgEZQr32kd955p8yfP1/Ky8sb/ooAAAAiMQfonXfekc2bN8srr7xi8oGanrJW/eyzzzbU9QEAAERGANSsWbPT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z39uCiFeeuml5jEbswaQLqlpMcZTl9YQeXitogevVXTh9YoeTRz4O8ulmdDhvggAAIDGFNYcIAAAgHAgAAIAAI5DAAQAAByHAAgAADgOAVAILFu2TNq3b292nWkPsh07doTiv4EfWjbhkksukZSUFElPTzclEPbt21djTHFxsdx5552m4ndycrLccMMNpxXZ1F2IWm4hKSnJPI424S0vL+e5D6GHHnqoqpwFr1VkOnTokPzkJz8x3zuJiYnSrVs3U46kku6t0Z29WoxWP669GT/77LMaj6HV9m+++WZTdE8Lz44fP17y87/t84aGUVFRYcrAaDkYfR3OP/9800C8+t4ny8mvVcBmGQjK6tWrrYSEBGvlypXWxx9/bE2YMMFq1qyZdeTIEZ7JRjR48GDriSeesD766CPrvffes4YNG2adffbZVn5+ftWY2267zWrXrp21efNma+fOnVa/fv2s/v37V328vLzc6tq1qzVo0CDr3XfftTZs2GC1bNnSmjZtGq9liOzYscNq3769ddFFF1mTJk3itYpAx48ft8455xzr1ltvtd5++23riy++sF5++WXr888/rxrz0EMPWWlpada6deus999/37rmmmusc8891yoqKqoaM2TIEKt79+7WW2+9Zb3xxhvWBRdcYI0ePTpMn1VsevDBB60WLVpYL7zwgvXll19aa9eutZKTk63FixdXjXHya0UA1MC0ieudd95Zdb+iosJq06aNNW/evIb+rxCEo0ePmgZ5r732mrl/8uRJ01hXfyBU+uSTT8yY7du3m/sa8Ljdbuvw4cNVYx577DErNTXVKikp4flvYHl5eVaHDh2sTZs2WQMHDqwKgHitIsuvfvUr69JLL63z4z6fz8rMzLQeeeSRqmP6GjZp0sT629/+Zu7v2bPHfK+98847VWNeeukly+VymSbZaBjDhw+3fvrTn9Y4dv3111s333wzr5VlWSyBNaDS0lLZtWuXmUKspEUc9f727dsb8r9CkHJycszfZ511lvlbX6eysrIar1WnTp3k7LPPrnqt9G+d2q8syqkGDx5sWqt8/PHHvAYNTJcjdbmx+mvCaxV5nn/+eVO5f+TIkWZZuGfPnvLHP/6x6uNffvmlKWpb/XXU3kyaDlD9e0uXUvRxKul4/XmpbYvQMLRwsLaF+vTTT839999/X958800ZOnQor1UktMKIJceOHTNrrtV/YSq9v3fv3rBdl9NpfznNJ/nBD35QVTFcf0BrL7pTm97qa6UfqxxT22tZ+TE0HG1ps3v3bnnnnXdO+xivVWT54osv5LHHHjNtjLQav75md999t/l+0rZGld8btX3vVP/e0uCpOo/HY96g8L3VcKZOnWresOmbO208rr+fHnzwQZPPo5z+WhEAwREzCx999JF554PIc/DgQdPjT5saN2a7GtT/DYXO3Pz2t78193UGSL+/li9fbgIgRI6nn35a/vrXv5r2UV26dJH33nvPvBnU3phjea3YBdaQWrZsaaLsU3cS6X3tUI/GN3HiRHnhhRdky5Yt8r3vfa/quL4eumSpveLqeq3079pey8qPoWHocuTRo0fl4osvNu8s9fbaa6/Jo48+av6t70Z5rSKH7hbq3LlzjWMXXnih2TFZ/XvD389B/Vtf8+p0d6XuNuJ7q+HorlWdBbrpppvMcv4tt9wi9957b1Vz8UyHv1bkADUgnQLu1auXWXOt/m5J72dlZTXkf4UANMFfg59//OMf8uqrr5ptoNXp6xQfH1/jtdJt8vpDvPK10r8//PDDGt/8OkuhW0FP/QWA+rvyyivN86zvTitvOsOg0/SV/+a1ihy6lHxqSQnNMTnnnHPMv/V7TX8xVv/e0mUYze2p/r2lbz40+K2k36f681JzhdAwCgsLazQTV/omXZ9n5fjXimz7ht8Gr7sd/vznP5udDj//+c/NNvjqO4kQerfffrvZ2rl161br66+/rroVFhbW2AavW+NfffVVsw0+KyvL3E7dBn/VVVeZrfQbN260WrVqxTb4RlB9FxivVeSVKvB4PGaL9WeffWb99a9/tZKSkqy//OUvNbZW68+95557zvrggw+sa6+9ttat1T179jRb6d98802zAzAWtlZHkrFjx1pt27at2gb/7LPPmlIe9913X9UYJ79WBEAhsGTJEvOLVesB6bZ4rZ2AxqWTQLXdtDZQJf0Gv+OOO6zmzZubH+DXXXedCZKq279/vzV06FArMTHR/OD4xS9+YZWVlfFyNnIAxGsVWdavX2/eHOibvU6dOlkrVqw4bSv8zJkzrYyMDDPmyiuvtPbt21djzDfffGN+iWpdGi0tMW7cOFMKAQ0nNzfXfB/p7yOv12udd9551q9//esaZTx8Dn6tXPqHmQsDAABwCHKAAACA4xAAAQAAxyEAAgAAjkMABAAAHIcACAAAOA4BEAAAcBwCIAAA4DgEQAAAwHEIgAAAgOMQAAEAAMchAAIAAI5DAAQAAMRp/n8HikxfvF6KZgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -365,7 +365,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 8, "id": "2e340cd7-bab2-4b36-9b2c-0a300b2fd57b", "metadata": { "ExecuteTime": { @@ -376,7 +376,7 @@ "outputs": [ { "data": { - "image/png": "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ex+wb9mjvdi01uLb3/62Oa373e9+V+6++27Ta075fV15JlhodeBFF11kzmuFJnx9PXLkyLiWzU+0wa+GiqVLl8rrr79uuluF0nXUvn37sPWk3VH1yzG4nvT5ww8/DNup9Fe1drlq+MWKyF177bVmOeuvqeBDfxFrdW3wb9aVe+gpxYZdt/Uc/oABA8zfuq/pASd039LqeD0fH7pvaajXUBmk+6l+V+r5fdhx+PBh0xYilP7w1eWsfL+uHI91N9VWtYsWLTItau+8807T3TS0dwGi60c/+pHpQrVy5Upn165d9Y/Dhw+HdWHULqivv/666W46cuRI82jY3XT06NGmy+qyZcucHj160N00BkJ7hbCu3NcluF27dqYr49atW51nnnnGOe2005ynn346rAujfuf9+c9/dj744APnpptuarQL4/Dhw02X1dWrV5seQYnQhdFNJkyY4PTt27e+u+mf/vQn02V++vTp9eP4eV15Klioxx57zBy09HoW2v1U+/8idrTSorGHXtsiSHecH//4x05qaqr5Yvz6179uwkeojz/+2MnKynJSUlLMDvnTn/7UOXbsGKsyxsGCdeUuL7/8sgnd+gNqyJAhzvz588Pe126M9913n9OrVy8zzrXXXuts3rw5bJzPPvvMHJz0ugrahfu2224zXY5hT2VlpdmP9FiUnJzsZGRkOL/4xS/CusvX+Xhdcdt0AADgvzYWAADA/QgWAADAGoIFAACwhmABAACsIVgAAABrCBYAAMAaggUAALCGYAEAAKwhWAAAAGsIFgAAwBqCBQAAsIZgAQAAxJb/B11Vqlu3tk26AAAAAElFTkSuQmCC", + "image/png": "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4Lz//vtOcXGxc9ZZZzl5eXlx+q8S37vvvuucffbZzogRI5zp06c3jGdbucfBgwedQYMGOZMnT3beeecdp6yszFm5cqWzY8eOhmlmz57tdOvWzXnxxRedzZs3O1/96ledc845x6murm6Y5qabbnIuuugiZ926dc5bb73lDB482JkwYUKc/qvE9PDDDzs9e/Z0XnnlFeejjz5ynn/+eadz587O3LlzG6bx87byVLC4/PLLnalTpzY8r6urc9LS0pyCgoK4lsvP9u/frxHdWbNmjXl+6NAhp2PHjuZAC/r73/9upnn77bfNcw0S7dq1c/bu3dswzfz5852uXbs6tbW1cfgvEtuRI0ecIUOGOKtWrXK++MUvNgQLtpW73Hfffc4111zT7Ov19fVO3759ncLCwoZxug0DgYDzhz/8wTz/29/+Zo619evXN0xTUlLiJCUlObt3747yf+Af48ePd6ZMmRI27hvf+IYzceJE87fft5VnLoUcO3ZMNm7caKqTQn93RJ+//fbbcS2bnx0+fNgMe/ToYYa6jY4fPx62nYYNGyYDBw5s2E461CrePn36NExz4403mh/qKS0tjfn/kOj0spRedgrdJopt5S4vvfSSXHrppXLrrbeay4MjR46URYsWNbz+0Ucfyd69e8O2o/5ug14SDj22tEpd5xOk0+tn5TvvvBPj/yhxXXXVVfLaa6/Jtm3bzPPNmzfL2rVrJSsryzz3+7aK+Y+QRerAgQPmulboyUjp83/84x9xK5ef6S/V6vX6q6++WoYPH27G6cHUqVMnc8A03k76WnCaprZj8DXYs2zZMnnvvfdk/fr1J73GtnKXsrIymT9/vuTk5MhPf/pTs82mTZtmjqdJkyY1HBtNHTuhx5aGklAdOnQwwZ9jy57777/ffBHSL03t27c356aHH37YtJdQft9WngkWcOc34S1btpikDvfRn2iePn26rFq1yjR2hvuDun57/eUvf2mea42FHl9PPPGECRZwj+eee06eeeYZWbp0qWRmZsqmTZvMlyz9OfFJbCvv9Ao566yzTDJs3LtAn/ft2zdu5fKre+65R1555RV54403ZMCAAQ3jdVvoZatDhw41u5102NR2DL4GO/RSx/79+2XUqFHmm5A+1qxZI48++qj5W789sa3cQ3sPXHDBBWHjzj//fNODKvTYaOkzUIe6zUNpbyvtfcCxZY/2YtNai29/+9vmsu53v/tduffee02vOeX3beWZYKHVgZdccom5rhWa8PX56NGj41o2P9EGvxoqli9fLq+//rrpbhVKt1HHjh3DtpN2R9UPx+B20uGHH34YdlDpt2rtctX4gxWRu/7668161m9TwYd+I9bq2uDfbCv30EuKjbtu6zX8QYMGmb/1WNMTTuixpdXxej0+9NjSUK+hMkiPU/2s1Ov7sOPo0aOmLUQo/eKr61n5fls5Hutuqq1qlyxZYlrU3n333aa7aWjvAkTXj370I9OFavXq1c6ePXsaHkePHg3rwqhdUF9//XXT3XT06NHm0bi76dixY02X1RUrVji9evWiu2kMhPYKYVu5r0twhw4dTFfG7du3O88884xzxhlnOE8//XRYF0b9zPvTn/7kfPDBB84tt9zSZBfGkSNHmi6ra9euNT2CEqELo5tMmjTJ6d+/f0N30z/+8Y+my/zMmTMbpvHztvJUsFCPPfaYOWnp/Sy0+6n2/0XsaKVFUw+9t0WQHjg//vGPndTUVPPB+PWvf92Ej1Aff/yxk5WV5aSkpJgD8r/+67+c48ePsyljHCzYVu7y8ssvm9CtX6CGDRvmLFy4MOx17cb4wAMPOH369DHTXH/99c7WrVvDpvnss8/MyUnvq6BduO+44w7T5Rj2VFZWmuNIz0XJyclORkaG8z//8z9h3eXrfbyt+Nl0AADgvzYWAADA/QgWAADAGoIFAACwhmABAACsIVgAAABrCBYAAMAaggUAALCGYAEAAKwhWAAAAGsIFgAAwBqCBQAAsIZgAQAAxJb/A+H3qlvgpYAHAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -402,7 +402,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 9, "id": "1d3dfce7-bf9c-42e1-97b4-a0b9d6a27a83", "metadata": { "ExecuteTime": { @@ -415,58 +415,58 @@ "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", @@ -482,106 +482,106 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
  colourstdminmeanmaxprobabilitycolourstdminmeanmaxprobability
sigma_res
lowlow984.7311.74226.72397.620.11lowlow984.7311.74226.72397.620.11
medium882.6511.19385.26619.780.11medium882.6511.19385.26619.780.11
high7101.23384.75567.44817.840.11high7101.23384.75567.44817.840.11
mediumlow643.37268.77376.10515.250.11mediumlow643.37268.77376.10515.250.11
medium563.56318.15485.57711.720.11medium563.56318.15485.57711.720.11
high4106.22420.61580.03819.410.11high4106.22420.61580.03819.410.11
highlow3132.84383.11576.80794.810.11highlow3132.84383.11576.80794.810.11
medium2129.07410.77611.25824.870.11medium2129.07410.77611.25824.870.11
high1127.28448.85643.91851.000.11high1127.28448.85643.91851.000.11
\n" ], "text/plain": [ - "" + "" ] }, - "execution_count": 18, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } diff --git a/panel/simdec_app.py b/panel/simdec_app.py index 0619e70..d351ac4 100644 --- a/panel/simdec_app.py +++ b/panel/simdec_app.py @@ -42,10 +42,7 @@ ) VALID_CHARACTERS = re.compile(r"[^A-Za-z0-9_ \-.]") -# try: -# DEFAULT_STRESS_CSV = Path(__file__).resolve().parent / "data" / "stress.csv" -# except NameError: -# DEFAULT_STRESS_CSV = Path("data/stress.csv") + if Path("data/stress.csv").exists(): DEFAULT_STRESS_CSV = Path("data/stress.csv") else: @@ -98,7 +95,7 @@ def filtered_data(data, output_name): return pd.DataFrame() try: if isinstance(output_name, str): - return data[[output_name]] + return data[output_name] return data[output_name] except KeyError: return data.iloc[:, [0]] @@ -128,31 +125,40 @@ def sensitivity_indices_table(si, inputs): si = list(si[var_order]) sum_si = sum(si) - var_names.append("Sum of Indices") + # Insert labels and values at the top (index 0) + var_names.insert(0, "Sum of Indices") + si_numerics = si.copy() - si.append(0) - si_numerics.append(sum_si) + si.insert(0, 0) + si_numerics.insert(0, sum_si) - d = {"Inputs": var_names, "Indices": si, "": si_numerics} + d = {"Inputs": var_names, "Indices": si, "Value": si_numerics} df = pd.DataFrame(data=d) + formatters = { "Indices": {"type": "progress", "max": sum_si, "color": "#007eff"}, - "": NumberFormatter(format="0.00"), + "Value": NumberFormatter(format="0.00"), } + widget = pn.widgets.Tabulator( df, show_index=False, formatters=formatters, theme="bulma", - frozen_rows=[-1], - # page_size=5, - # pagination='local', layout="fit_columns", ) + widget.style.apply( - lambda x: ["font-style: italic"] * 3, axis=1, subset=df.index[-1] + lambda x: ( + [ + "font-size: 11pt; font-style: italic; font-weight: bold; border-bottom: 2px solid #b5b5b5" + ] + * len(x) + if x.name == 0 + else ["font-size: 11pt"] * len(x) + ), + axis=1, ) - widget.style.apply(lambda x: ["font-size: 11pt"] * len(si)) return widget @@ -165,23 +171,22 @@ def filtered_si(sensitivity_indices_table, input_names): df = sensitivity_indices_table.value si = [] for input_name in input_names: - si.append(df.loc[df["Inputs"] == input_name, "Indices"]) + # Pull from "Value" explicit column + si.append(df.loc[df["Inputs"] == input_name, "Value"]) return np.asarray(si).flatten() def explained_variance_80(sensitivity_indices_table): df = sensitivity_indices_table.value - df = df[df["Inputs"] != "Sum of Indices"] - si = df["Indices"].values - target = 0.8 * np.sum(si) - pos_80 = bisect.bisect_right(np.cumsum(si), target) - # pos_80 = max(2, pos_80) - # pos_80 = min(len(si), pos_80) + # Slice [1:] to skip the 'Sum of Indices' row at the top + si_values = df["Value"].tolist()[1:] + input_names = df["Inputs"].tolist()[1:] + + # Ensuring explained variance is at least 80% of the total + target = 0.8 * sum(si_values) + pos_80 = bisect.bisect_right(np.cumsum(si_values), target) - input_names = sensitivity_indices_table.value["Inputs"] - input_names = input_names.to_list() - input_names.remove("Sum of Indices") return input_names[: pos_80 + 1] @@ -229,7 +234,7 @@ def create_color_pickers(states, colors): def palette_(states: list[list[str]], colors_picked: list[list[float]]): cmaps = [single_color_to_colormap(color_picked) for color_picked in colors_picked] states = [len(states_) for states_ in states] - return sd.palette(states, cmaps=cmaps) + return sd.palette(states, cmaps=cmaps)[::-1] @pn.cache @@ -263,10 +268,11 @@ def figure_pn( kind = "histogram" if kind == "Stacked histogram" else "boxplot" _ = sd.visualization( - bins=res.bins, palette=palette, n_bins=n_bins, kind=kind, ax=ax + bins=res.bins.copy(), palette=palette, n_bins=n_bins, kind=kind, ax=ax ) ax.set(xlabel=output_name) - ax.set_xlim(xlim) + if xlim is not None: + ax.set_xlim(xlim) else: fig, _ = sd.two_output_visualization( bins=res.bins, @@ -296,7 +302,7 @@ def tableau_pn(res, states, palette): var_names=res.var_names, states=res.states, bins=res.bins, - palette=palette, + palette=palette[::-1], # reverse to match the order in the figure ) return styler diff --git a/src/simdec/visualization.py b/src/simdec/visualization.py index 4349921..555da4a 100644 --- a/src/simdec/visualization.py +++ b/src/simdec/visualization.py @@ -136,7 +136,8 @@ def palette( n_shades = int(np.prod(states[1:])) for i in range(n_cmaps): cmap = cmaps[i].resampled(n_shades) - colors.append(cmap(np.linspace(0, 1, n_shades))) + # colors.append(cmap(np.linspace(0, 1, n_shades))) + colors.append(cmap(np.linspace(1, 0, n_shades))) return np.concatenate(colors).tolist() @@ -298,12 +299,12 @@ def two_output_visualization( bins2_plot = bins2.copy() bins2_plot.columns = pd.RangeIndex(start=len(bins2_plot.columns), stop=0, step=-1) - data = pd.concat([pd.melt(bins), pd.melt(bins2)["value"]], axis=1) + data = pd.concat([pd.melt(bins_plot), pd.melt(bins2_plot)["value"]], axis=1) data.columns = ["c", "x", "y"] if r_scatter < 1.0: data = data.sample(frac=r_scatter) - hue_order = sorted(data["c"].unique(), reverse=True) + hue_order = sorted(data["c"].unique()) sns.scatterplot( data=data, x="x", @@ -362,7 +363,7 @@ def two_output_visualization( statistic=decomposition.statistic, states=decomposition.states, bins=decomposition.bins, - palette=palette, + palette=palette[::-1], ) display(styler) diff --git a/tests/test_visualization.py b/tests/test_visualization.py index 362fc89..44ca22d 100644 --- a/tests/test_visualization.py +++ b/tests/test_visualization.py @@ -146,3 +146,192 @@ def test_two_output_visualization_missing_decomposition_warning(): sd.two_output_visualization( bins=bins, bins2=bins2, palette=pal, print_legend=True, decomposition=None ) + + +def test_tableau_legend_colors_match_scenario_order(stress_results): + """Verify that the legend table (tableau) colors and scenarios align correctly. + + When calling `palette = sd.palette(states)[::-1]`, tableau() must receive the + flipped palette in a way that matches the row index generation (0..N-1) + so that each scenario is assigned its correct shade. + """ + res = stress_results + + # Simulate the Python workflow + palette = sd.palette(states=res.states)[::-1] + + # Generate the legend table and styler + table, _ = sd.tableau( + var_names=res.var_names, + statistic=res.statistic, + states=res.states, + bins=res.bins, + palette=palette, + ) + + # Verify 'colour' column contains a sequential range from 0 to N-1. + n_scenarios = len(table) + assert table["colour"].tolist() == list(range(n_scenarios)) + + # Ensure that the first row (the lowest scenario index) maps to color index 0 (red), + # which corresponds to the correct starting shade. + assert table.iloc[0]["colour"] == 0 + assert table.iloc[-1]["colour"] == n_scenarios - 1 + + +# Palette ordering tests + + +def test_palette_length_equals_product_of_states(stress_results): + """palette() must return exactly one colour per scenario.""" + pal = sd.palette(states=stress_results.states) + assert len(pal) == np.prod(stress_results.states) + + +def test_palette_entries_are_valid_rgba(stress_results): + """Every colour must be a 4-element RGBA sequence with values in [0, 1].""" + pal = sd.palette(states=stress_results.states) + for i, colour in enumerate(pal): + assert len(colour) == 4, f"colour {i} has {len(colour)} channels, expected 4" + for ch in colour: + assert 0.0 <= ch <= 1.0, f"channel {ch:.3f} out of [0,1] in colour {i}" + + +def test_palette_groups_colours_by_first_state(stress_results): + """Colours sharing the same first-variable state must form a tighter hue cluster + than colours across different first-variable states. + + palette() assigns one colormap per value of states[0]. All shades drawn from + the same colormap are geometrically closer in RGB space than shades across + different colormaps. If this fails, the palette has mixed up its cmap blocks. + """ + states = stress_results.states + pal = np.array(sd.palette(states=states)) + n_first = states[0] + n_shades = int(np.prod(states[1:])) + + for block in range(n_first): + block_rgb = pal[block * n_shades : (block + 1) * n_shades, :3] + centroid = block_rgb.mean(axis=0) + intra = np.linalg.norm(block_rgb - centroid, axis=1).mean() + + other_mask = np.ones(len(pal), dtype=bool) + other_mask[block * n_shades : (block + 1) * n_shades] = False + cross = np.linalg.norm(pal[other_mask, :3] - centroid, axis=1).mean() + + assert intra < cross, ( + f"Block {block}: intra-block spread {intra:.3f} >= " + f"cross-block spread {cross:.3f}. Colours are not grouped by first state." + ) + + +def test_caller_flip_puts_high_scenario_colour_first(stress_results): + """After the caller applies [::-1], index 0 of the passed palette must be the + colour palette() originally assigned to the last (highest) scenario, and index + -1 must be the colour for the first (lowest) scenario. + + visualization() feeds columns to seaborn in the order they appear, so the first + colour in the palette ends up at the bottom of the stacked histogram. The + caller flip ensures the highest scenario is at the bottom. + """ + pal_raw = sd.palette(states=stress_results.states) + pal_caller = pal_raw[::-1] + assert ( + pal_caller[0] == pal_raw[-1] + ), "pal[::-1][0] should equal pal[-1] (the highest-scenario colour)" + assert ( + pal_caller[-1] == pal_raw[0] + ), "pal[::-1][-1] should equal pal[0] (the lowest-scenario colour)" + + +def test_visualization_column_flip_is_descending(stress_results): + """visualization() re-labels bin columns as a descending RangeIndex so that + seaborn stacks scenario 0 at the bottom of the histogram. + + Simulating the transform and asserting the exact column sequence guards against + any refactor that accidentally changes the stacking direction. + """ + bins = stress_results.bins.copy() + n = len(bins.columns) + bins.columns = pd.RangeIndex(start=n, stop=0, step=-1) + assert list(bins.columns) == list(range(n, 0, -1)) + + +def test_palette_length_matches_bins_columns_after_flip(stress_results): + """The caller palette must have the same length as the number of bin columns. + + A mismatch would cause seaborn to silently cycle or truncate colours, breaking + the one-colour-per-scenario contract. + """ + pal = sd.palette(states=stress_results.states)[::-1] + assert len(pal) == len(stress_results.bins.columns) + + +def test_tableau_colour_column_is_sequential(stress_results): + """tableau()'s 'colour' column must be exactly [0, 1, …, N-1]. + + bins.describe().T.reset_index() inherits the original RangeIndex labels + (0..N-1) as the 'colour' column. ListedColormap(palette) then maps colour + integer i to palette[i], so rows and colours are aligned position-for-position. + """ + res = stress_results + n = int(np.prod(res.states)) + pal = sd.palette(states=res.states)[::-1] + + table, _ = sd.tableau( + var_names=res.var_names, + statistic=res.statistic, + states=res.states, + bins=res.bins, + palette=pal, + ) + assert table["colour"].tolist() == list(range(n)) + + +def test_tableau_n_col_is_descending(stress_results): + """tableau()'s 'N°' column must run N, N-1, …, 1. + + Row 0 (the lowest scenario) gets the highest label, matching the reversed + stacking order in the histogram where scenario 0 is at the bottom. + """ + res = stress_results + n = int(np.prod(res.states)) + pal = sd.palette(states=res.states)[::-1] + + table, _ = sd.tableau( + var_names=res.var_names, + statistic=res.statistic, + states=res.states, + bins=res.bins, + palette=pal, + ) + assert table["N°"].tolist() == list(range(n, 0, -1)) + + +def test_two_output_double_flip_restores_original_palette(stress_results): + """two_output_visualization() receives palette[::-1] from the caller, then + passes palette[::-1] again to tableau() internally. The two flips cancel, so + tableau always receives colours in original scenario order (0..N-1). + + If this identity breaks, the legend colour swatches no longer correspond to + the correct scenario rows. + """ + pal_raw = sd.palette(states=stress_results.states) + pal_caller = pal_raw[::-1] # flip the caller applies before passing in + pal_internal = pal_caller[::-1] # flip two_output_visualization applies for tableau + assert pal_internal == pal_raw + + +def test_two_output_scatter_hue_order_is_ascending(stress_results): + """Inside two_output_visualization, hue_order = sorted(data['c'].unique()). + + After the descending RangeIndex rename, column labels are n..1, so sorted() + yields [1, 2, …, n] — ascending. seaborn maps palette[0] to hue value 1, + palette[1] to hue value 2, and so on. This test pins that contract so any + change to the column-rename or sort strategy is caught immediately. + """ + bins = stress_results.bins.copy() + n = len(bins.columns) + bins.columns = pd.RangeIndex(start=n, stop=0, step=-1) + hue_order = sorted(pd.melt(bins)["variable"].unique()) + assert hue_order == list(range(1, n + 1))