{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Mixmod conversion example" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "This notebook shows how to convert to a mixmod ensemble. To drive the point home, we'll start with an initial mixmod ensemble based on 3 normal distributions. However to make it easier to see what's going on, we'll focus on the first normal distribution centered at 0.5" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAG5CAYAAACeD3CNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABG1ElEQVR4nO3deXxU9b3/8fdMZjKTQBIIkBBI2HeoKKCyiKBUqNzqz1u9V9veavurVm61VvPDhdqq9LaXa6tepBVX0FpFaQtVW62CFVkEFzYVCYpsCSEBQshGksky5/dHciaJCYEkM3POzLyej8c8ak7OmfnMTJl55/v9nO9xGIZhCAAAAG1yWl0AAACAnRGWAAAA2kFYAgAAaAdhCQAAoB2EJQAAgHYQlgAAANpBWAIAAGiHy+oC7Mjv9+vIkSNKSkqSw+GwuhwAAHAWDMNQeXm5+vXrJ6czeONBhKU2HDlyRFlZWVaXAQAAOiEvL0+ZmZlBuz/CUhuSkpIkNbzYycnJFlcDAADORllZmbKysgLf48FCWGqDOfWWnJxMWAIAIMIEu4WGBm8AAIB2EJYAAADaQVgCAABoB2EJAACgHYQlAACAdhCWAAAA2kFYAgAAaAdhCQAAoB2EJQAAgHYQlgAAANpBWAIAAGgHYQkAAKAdhCUAMae6tt7qEgBEEMISgJiy6B85Gr9wjVZvP2x1KQAiBGEJQMz4+ydH9OT6/fLV+fWzv36qzwvLrS4JQAQgLAGICYdOnNKCVZ9KklK7xau61q9bVmxXZU2dxZUBsDvCEoCo56ur160rdqjcV6dJA3vqzZ9OV3qyR18eq9AvXvnM6vIA2BxhCUDUW/TGHn2aX6oeiW4t+fZ5Skv26tHrzpPTIa3aflh/2Ub/EoDTIywBiGpv7irUc5sPSpIe+ffx6tcjQZI0eUgv3f71EZKkX7yyS3uP0r8EoG2EJQBRK6+4Unf95WNJ0o8uHqJLR6W3+P0tlwzTtGG9VFVbr1tWbFdVDUsKAGiNsAQgaj227kuVVdfpvAE9dOecka1+H+d0aPG156l3d4++OFqhv7CcAIA2EJYARCXDMLRxb5Ek6aezhssd1/bHXZ8kj34wbZAk6b3G/QGgOcISgKiUV1yl/JIqueMcumBwarv7ThnaS5K0Zf8J+f1GOMoDEEEISwCi0uZ9DaNE52X1VGK8q919z+mfou4el0qrarW7oCwc5QGIIIQlAFFp874TkppGjdrjinPqwsbRJzNkAYCJsAQg6hiGEQhLU88iLElNoco8DgBMhCUAUWfvsQoVVfjkdTt17oAeZ3XM1KG9JUkfHihWbb0/hNUBiDSEJQBRZ/OXDVNp5w9KlccVd1bHjOqbpNRu8aqsqdcnh0tCWB2ASENYAhB1OtKvZHI6HZoypGH/975kKg5AE8ISgKhS7zf0/n6zX6l3h45t6luiyRtAE9uHpUWLFun8889XUlKS0tLSdNVVV+nzzz9v95h3331XDoej1W3Pnj1hqhqAVXYfKVNZdZ2SvC6N65fcoWPNZvDth0pUXculTwA0sH1YWr9+vW655Ra9//77Wrt2rerq6jR79mydOnXqjMd+/vnnKigoCNyGDx8ehooBWOm9xlGhCwf3kus0q3afzuDe3dQ32auaer+2HToZivIARKD2V2qzgTfffLPFz88++6zS0tK0bds2XXzxxe0em5aWph49eoSwOgB209ElA5pzOByaOqyXVm/P1+Z9RZo2rGPTeACik+1Hlr6qtLRUkpSa2v7lCyTpvPPOU0ZGhmbNmqV169addj+fz6eysrIWNwCRp6bOr48OFEuSpg7reFiSmvqcaPIGYIqosGQYhrKzs3XRRRdp3Lhxp90vIyNDTz31lFatWqXVq1dr5MiRmjVrljZs2NDm/osWLVJKSkrglpWVFaqnACCEPj5coqraevXqFq8RaUmdug+zyfuTwyUqq64NZnkAIpTtp+Gau/XWW/XJJ59o06ZN7e43cuRIjRw5MvDzlClTlJeXp4ceeqjNqbsFCxYoOzs78HNZWRmBCYhAmxtHgyYP7SWn09Gp++jfI0GDeiXq4IlKfXSgWLNGpwezRAARKGJGln7yk5/otdde07p165SZmdnh4ydPnqy9e/e2+TuPx6Pk5OQWNwCRxzzlf1oHlwz4qimNx3PpEwBSBIQlwzB06623avXq1XrnnXc0ePDgTt3Pjh07lJGREeTqANhFVU29duSWSOpcc3dz04aZi1Oy3hKACJiGu+WWW7RixQq9+uqrSkpKUmFhoSQpJSVFCQkJkhqm0fLz8/X8889LkhYvXqxBgwZp7Nixqqmp0QsvvKBVq1Zp1apVlj0PAKG19VCxaur96pfi1cBeiV26r8mNK3nvKSzXiQqfenX3BKNEABHK9mHp8ccflyTNnDmzxfZnn31W3//+9yVJBQUFys3NDfyupqZG8+fPV35+vhISEjR27Fi9/vrrmjt3brjKBhBm5qrdk4f2ksPRuX4lU+/uHo3qm6Q9heX68ECxLv8ao9JALLN9WDIM44z7PPfccy1+vuuuu3TXXXeFqCIAdrSnoFySdF5Wj6Dc3/jMHtpTWK6cwnLCEhDjbN+zBABn44tjDWFpeHrnlgz4quHp3SVJe4+WB+X+AEQuwhKAiFdZU6e84ipJ0ogghSXzfr4gLAExj7AEIOJ9eaxCktS7e7xSu8UH5T7NsHTwRKV8dVxUF4hlhCUAEe+Low1haXgnV+1uS3qyR0lel+r9hg4UnfnC3QCiF2EJQMQzp8pGNPYZBYPD4Wg2FVcRtPsFEHkISwAinhmWgtXcbRpBkzcAEZYARIG9jSM/wWruNpnTejR5A7GNsAQgolX46pRfYp4JF7xpuIb7awhLe5mGA2IaYQlARDOnyPokedQjMThnwpnM8HXwxClV13JGHBCrCEsAIlrTFFxwR5WkhgCWkuCW35D2H+eMOCBWEZYARLRAc3cQlw0wNZwR19jkfYy+JSBWEZYARLQvjoWmuds0nJW8gZhHWAIQ0faGYI2l5kakNdwvay0BsYuwBCBilVXXqqC0WlLw11gyNZ0Rx8gSEKsISwAiltncnZ7c0IgdCmYIO1RcyRlxQIwiLAGIWE1TcKEZVZIaLs7bM9Etw2i6YC+A2EJYAhCxQnEB3a9yOByB0SXOiANiE2EJQMQyw0uomrtN5v3T5A3EJsISgIgVqgvofhVN3kBsIywBiEilVbU6WuaTJA0P8chS0wV1GVkCYhFhCUBEMkd5MlK8SvaG5kw4kzkNl3eyUlU1nBEHxBrCEoCIFGjuDvEUnCT16u5Rr27xnBEHxCjCEoCIZPYrmStsh9rwQJM3fUtArCEsAYhITWfChX5kqfnjfMHyAUDMISwBiEhN03DhGlkyz4hjGg6INYQlABGnpLJGx8vNM+HCNLKUxjQcEKsISwAijjmq1L9Hgrp7XGF5THMa7vDJKp3y1YXlMQHYA2EJQMRpWowyPFNwktSzW7x6d/dI4ow4INYQlgBEnH3HG8LKsD7hC0uSNLxxKs58fACxgbAEIOLknqiUJA3s3S2sjzuwV6Ik6VDj4wOIDYQlABEnt7gxLKUmhvVxBzSGpbxiwhIQSwhLACKK3280haVe4Q1LA1MbRrIOEZaAmEJYAhBRjpX75KvzK87pUL8eCWF97AGpTMMBsYiwBCCimKNK/Xp45Y4L70eYOQ1XVOFTZQ3LBwCxgrAEIKIcOnFKUtOUWDilJLjVI9EtqSm0AYh+hCUAEcVsrs4Kc3O3iak4IPYQlgBElEMWNXebzLDEGXFA7CAsAYgo5ojOAEaWAIQJYQlARDFHdKwKS4GFKRlZAmIGYQlAxKjw1enEqRpJTWemhduAxsZypuGA2EFYAhAxzDPheia6lex1W1KDGdIOn6xUvd+wpAYA4UVYAhAxAlNwvcK/bICpb7JX8XFO1dYbOlJSZVkdAMKHsAQgYphN1eG+JlxzcU6HMlMbVg5nKg6IDYQlABEj1+LmblPgjDjCEhATCEsAIkYgLFnU3G0yR7ZYxRuIDYQlABHD6jWWTObq4bmstQTEBMISgIhQV+9XfmNDtVWrd5sGNjaYHyo+ZWkdAMKDsAQgIhwpqVa931C8y6n0JK+ltZhhjZElIDYQlgBEBLM/KKtngpxOh6W1ZPVsCEtl1XUqqayxtBYAoUdYAhARzCmvgRausWRKiI9TWpJHEteIA2IBYQlARMi1SXO3KTAVxxlxQNQjLAGICHZZY8mUxfIBQMwgLAGICIHVuy0+E840sPGCuub16gBEL9uHpUWLFun8889XUlKS0tLSdNVVV+nzzz8/43Hr16/XxIkT5fV6NWTIED3xxBNhqBZAKBiGERjBsU1YYhoOiBm2D0vr16/XLbfcovfff19r165VXV2dZs+erVOnTv/X3IEDBzR37lxNnz5dO3bs0M9+9jPddtttWrVqVRgrBxAsJytrVeGrkyRl9rRHWGJhSiB2uKwu4EzefPPNFj8/++yzSktL07Zt23TxxRe3ecwTTzyhAQMGaPHixZKk0aNHa+vWrXrooYd09dVXt9rf5/PJ5/MFfi4rKwveEwDQZeZUV99kr7zuOIuraWCOLBWUVctXVy+Pyx51AQg+248sfVVpaakkKTU19bT7bNmyRbNnz26xbc6cOdq6datqa2tb7b9o0SKlpKQEbllZWcEtGkCX2K25W5J6dYtXYnycDEM6fLLK6nIAhFBEhSXDMJSdna2LLrpI48aNO+1+hYWFSk9Pb7EtPT1ddXV1KioqarX/ggULVFpaGrjl5eUFvXYAnRdYNsAm/UqS5HA4AuGNqTggutl+Gq65W2+9VZ988ok2bdp0xn0djpYr/BqG0eZ2SfJ4PPJ4PMEpEkDQHTKbu200siQ1TMXtKSznjDggykVMWPrJT36i1157TRs2bFBmZma7+/bt21eFhYUtth07dkwul0u9evUKZZkAQiAwDWejkSWpaVowt5hpOCCa2X4azjAM3XrrrVq9erXeeecdDR48+IzHTJkyRWvXrm2xbc2aNZo0aZLcbneoSgUQInZbvds0oPHSK7nFjCwB0cz2YemWW27RCy+8oBUrVigpKUmFhYUqLCxUVVXTX3ILFizQ9ddfH/h53rx5OnTokLKzs5WTk6Ply5dr2bJlmj9/vhVPAUAXVNfWq7CsWpI9rgvX3EBW8QZigu3D0uOPP67S0lLNnDlTGRkZgdvKlSsD+xQUFCg3Nzfw8+DBg/XGG2/o3Xff1bnnnqv/+q//0pIlS9pcNgCAvR0+2RBEuntc6plor5HhAc3CktkXCSD62L5n6Ww+gJ577rlW22bMmKHt27eHoCIA4XSo2RRcWydoWKl/zwQ5HVJ1rV/Hyn1KT/ZaXRKAELD9yBKA2GbHNZZM7jin+vVIkNQU6gBEH8ISAFvLazzTLCs1weJK2maGOHO6EED0ISwBsLX8koYQYpdrwn1V/8aRpXxW8QaiFmEJgK2ZlxLJ7GnPkSUzxHHJEyB6EZYA2FpTWLLnyJIZ4g6XMA0HRCvCEgDbKq+uVWlVw8Wv+9t0ZMmsi2k4IHoRlgDYVn5JQwDpkehWd489VzoxR5aOlFTL72etJSAaEZYA2Fa+zfuVJKlvsldxTodq6v06XuGzuhwAIUBYAmBbZr+SecaZHbninOrbuBglywcA0YmwBMC2zPBh1+ZuU6DJm74lICoRlgDYltmzZOeRJampyZuwBEQnwhIA27L7Gksm1loCohthCYBt5dt8jSVTprmKdwlhCYhGhCUAtlRZU6cTp2ok2XeNJVNTzxIN3kA0IiwBsKUjjaM0SV6XUhLcFlfTvuYLUxoGay0B0YawBMCW8iJg2QBTRkqCHA7JV+dXUUWN1eUACDLCEgBbsvs14ZqLd7HWEhDNCEsAbCkSVu9urj9N3kDUIiwBsKWmBSkjIyyxMCUQvQhLAGzJHKGJlLDUvMkbQHQhLAGwpabrwtm/Z0lqvjAlPUtAtCEsAbCd6tp6HS/3SYqgkaUeTMMB0YqwBMB2zDWWusXHqUeivddYMpmhLr+EtZaAaENYAmA7gSm4nglyOBwWV3N2+jWOLFXW1OtkZa3F1QAIJsISANtpau6OjH4lSfK649QnySOJJm8g2hCWANiO2SQdCat3N8c14oDoRFgCYDuHI2xBShNN3kB0IiwBsJ38CLrUSXNmvaziDUQXwhIA22ne4B1JmIYDohNhCYCt1NT5dbS8WlIETsNxyRMgKhGWANhKQWmVDEPyup3q1S3e6nI6JKvZJU9YawmIHoQlALbSdJmTyFljyWSutVTuq1NZVZ3F1QAIFsISAFuJ1OZuSUqMdwVGww6X0LcERAvCEgBbCayxFGH9Sib6loDoQ1gCYCuHSyJzjSVTZrO+JQDRgbAEwFaa9yxFInP6kJElIHoQlgDYSiT3LEnNV/GmZwmIFoQlALZRV+9XYVnDGktZkT4NxyreQNQgLAGwjYLSatX7DcXHOdW7u8fqcjqFBm8g+hCWANiGORrTv2eCnM7IWmPJZE7DlVbVqry61uJqAAQDYQmAbUR6c7ckJXndSklwS2IqDogWhCUAtpEfBWFJanZB3WLCEhANCEsAbMM8gywrNTrCEiNLQHQgLAGwjcA0XISeCWfq38Nca4nlA4BoQFgCYBv5JZG9xpKJkSUguhCWANhCvd/QkZLo6Fli+QAguhCWANjCsfJq1fkNuZwOpSd7rS6nS7g+HBBdCEsAbMEchcno4VVchK6xZMps7Fk6capGlTV1FlcDoKsISwBsIXBNuB6R3a8kSckJLiV5XJIUmFoEELkISwBswTxzLNLPhJMkh8MReB55TMUBEY+wBMAWzGm4zCgISxJ9S0A0ISwBsIVoWTbAZD4PzogDIp/tw9KGDRt0xRVXqF+/fnI4HHrllVfa3f/dd9+Vw+FodduzZ094CgbQKdFwXbjmzOfBWktA5HNZXcCZnDp1SuPHj9cPfvADXX311Wd93Oeff67k5OTAz3369AlFeQCCwO83mo0sRUdYClwfjlW8gYhn+7B0+eWX6/LLL+/wcWlpaerRo8dZ7evz+eTz+QI/l5WVdfjxAHReUYVPNXV+OR1S35TIXmPJ1J+eJSBq2H4arrPOO+88ZWRkaNasWVq3bl27+y5atEgpKSmBW1ZWVpiqBCBJhxtHlTJSEuSOi46PJbNn6Vi5T9W19RZXA6ArouNTqZmMjAw99dRTWrVqlVavXq2RI0dq1qxZ2rBhw2mPWbBggUpLSwO3vLy8MFYMINr6lSSpZ6JbCe44Say1BEQ620/DddTIkSM1cuTIwM9TpkxRXl6eHnroIV188cVtHuPxeOTxeMJVIoCvyI+yZQOkhrWWMnsmaO+xCuWXVGlIn+5WlwSgk6JuZKktkydP1t69e60uA8BpRNOClM1xQV0gOsREWNqxY4cyMjKsLgPAaUTbgpQmFqYEokPQpuEMw1BRUZGOHz+uqqoq9e7dW3369FFiYtcWmKuoqNCXX34Z+PnAgQPauXOnUlNTNWDAAC1YsED5+fl6/vnnJUmLFy/WoEGDNHbsWNXU1OiFF17QqlWrtGrVqi7VASB0om1BSlPTwpQsHwBEsi6Fpb1792rlypXasGGDtmzZosrK1h8Iw4cP1/Tp0zV79mxdddVVcrvdHXqMrVu36pJLLgn8nJ2dLUm64YYb9Nxzz6mgoEC5ubmB39fU1Gj+/PnKz89XQkKCxo4dq9dff11z587t5LMEEEqGYTRNw0VRg7fEwpRAtHAYhmF09KA///nP+v3vf69NmzZJaviwkySn06mUlBQlJCSouLhY1dXVTQ/kcCg1NVXXX3+9srOz1b9//yA9heArKytTSkqKSktLWyxsCSD4TlT4NPFXb8vhkPb81zfkccVZXVLQ7Mg9qX9dulkZKV5tWTDL6nKAqBeq7+8O9Sz985//1Pnnn6/rrrtOGzdu1DnnnKOf/exnevXVV3XkyBHV1tbqxIkTOnz4sCorK1VVVaWtW7dq6dKl+va3v62amhr97//+r0aMGBE4XR9AbDP7ldKSPFEVlKSmBu+jZdWqqfNbXA2AzurQNNxll12mlJQU3X333brhhhtanKLfFo/HowkTJmjChAmaN2+efD6f/va3v+l3v/udHnzwQSUkJOi+++7r0hMAENmitV9Jkvp098jjcspX51dhabUG9Iq+5wjEgg6FpYULF+q2225TSkpKpx7M4/Hommuu0TXXXKONGzeqpKSkU/cDIHpEa7+S1NB+0L9HgvYXndLhkkrCEhChOhSWfvGLXwTtgadPnx60+wIQuaJxQcrm+vdsDEssHwBErJhYZwmAfQUudRKlYYm1loDI1+V1ln75y19Kkr797W9r+PDh7e773HPPKTc3lz4lAAFNC1JG5xRV01pLhCUgUnV5ZOmBBx7QwoULdeGFF2rNmjXt7rts2TItXLiwqw8JIEoYhtGswTvKR5ZKWJgSiFRBmYbzer0qKSnRv/zLv+jhhx8Oxl0CiAGlVbWq8NVJis4Gb6npeTGyBESuoISliRMnasWKFXK73brrrrv0ve99Tz6fLxh3DSCKmQGid3ePvO7oWmPJZE7DFZRWq66etZaASBS0Bu/rrrtOmzZtUv/+/bVixQpdfPHFOnLkSLDuHkAUivbmbqlhsU13nEP1fkNHy/kjEohEQT0bbsKECdq2bZumTZumjz76SOeff77ef//9YD4EgCgS7f1KkuR0OtTPnIorpm8JiERBXzqgT58+euedd/SjH/1IBQUFuuSSS7R8+fJgPwyAKGAuSJkZpf1KJi6oC0S2Li8d0Oadulx64oknNH78eN1+++266aabtHPnTtXV1YXi4QBEqMNRviClyXx+NHkDkSkkYcn0n//5nxo3bpyuueYaPfbYY6F8KAARKD8GepYkqX+PhiZvFqYEIlPIV/CePn26PvroI40fP16GYYT64QBEkMA0XJQuSGkKjCyx1hIQkbo8suT3n/lU2AEDBmjz5s364IMPuvpwAKJEWXWtyqqje40lU38ueQJEtJBOwzXn9Xo1Y8aMcD0cAJszg0PPRLe6ecL2UWQJc2TpSEm1/H5DTqfD4ooAdAQX0gVgifwovyZcc32TvYpzOlRT79fxCtZaAiJNh8LS3LlzgzKVdurUKf3P//yPli5d2uX7AhCZ8hr7laJ9Ck6SXHFO9U32SpLyWGsJiDgdCksbN27U1KlT9fWvf11//OMfVV5e3qEH27Fjh+bPn6+BAwfq3nvv5ZIoQAzLK24YWRrQK/pHliRpQGrD8zRDIoDI0aFGgf379+uBBx7QM888o3Xr1snj8eiiiy7SBRdcoIkTJyojI0OpqanyeDwqKSlRcXGxcnJytHXrVm3atEn79u2TYRgaPXq0li9friuvvDJUzwuAzeU2jrBkpcZOWNqy/4RyT9DkDUSaDoWlPn366LHHHtP8+fP1xBNP6A9/+IPefvttvf3223I4Tt+waBiGHA6HLr30Uv3oRz/S1VdfLaeTdikglpnTUQNiJSw1jqDlMg0HRJxOnYIyePBgPfjgg/r1r3+tdevWacOGDdq8ebMOHTqkoqIiVVdXKzU1VWlpaTr33HN10UUX6bLLLtPAgQODXT+ACGQYRiA0xEpYMkfQ6FkCIk+Xztd1uVy67LLLdNlllwWrHgAxoKiiRlW19XI4YqPBW2oKhYwsAZGHuTAAYWcGhn4pCYp3xcbHkBmWCsuqVV1bb3E1ADoiNj6lANhKXqC5OzZGlaSGxTe7Ny6+yQV1gcgStGVzfT6fXn75Zb311lv64osvVF5erqSkJI0YMUKzZ8/WddddJ6/XG6yHAxDBYq1fSZIcDoeyUhOVU1CmvOJKDUvrbnVJAM5SUMLS5s2b9R//8R86dOhQq4vlbt++XStXrtTChQv1wgsvaNq0acF4SAARLDCyFAOrdzeX1TOhISyx1hIQUboclj777DNddtllqqqqUt++fXXjjTdq9OjRSk9P17Fjx5STk6Nly5bp0KFDmj17tj744AONGzcuGLUDiFCBkaUYWZDSFGjyPkFYAiJJl8PSz3/+c1VVVek//uM/tGzZMrnd7jb3ufHGG/XHP/5R9913n1avXt3VhwUQwfJibEFKE2stAZGpyw3eGzZsUHJysp566qk2g5Ikud1uPfnkk0pOTta7777b1YcEEMF8dfUqKKuWFFs9S1JTOCQsAZGly2GppqZGI0eOPGPzttfr1ciRI1VbW9vVhwQQwfJPVskwpMT4OPXqFm91OWE1oNnClF/t7wRgX10OS6NHj9bhw4fPat+8vDyNHTu2qw8JIII1PxOuvcskRaP+PRLkcEinaupVfKrG6nIAnKUuh6Xbb79dBQUFevTRR9vdb8mSJSosLNTtt9/e1YcEEMFitV9JkrzuOPVNbhiFZyoOiBxdbvD+zne+o/z8fN19991av369fvzjH2v06NFKS0vT8ePHlZOTo6VLl+r111/Xb37zG1133XXBqBtAhIrFNZaay0pNVEFptXKLK3XegJ5WlwPgLHQ5LMXFxQX++9VXX9Wrr7562n3vvvtu3X333a22OxwO1dXVdbUUABEg1sPSgNREfXigmAvqAhGky2EpGE2KNDoCsSO3uOFSH7EcliSm4YBI0uWw5Pf7g1EHgBhgGIYOx+B14Zozn3deMdeHAyIFF9IFEDYllbUq9zVMuWfG2KVOTIwsAZGHsAQgbMyAkJ7skdcdd4a9o5N5FmBBaZVq6hiZByIBYQlA2MR6c7ck9enukdftlN+QjpQwFQdEAsISgLDJjeE1lkwOh4OpOCDCEJYAhE0eI0uS6FsCIg1hCUDYMA3XIKvZNeIA2B9hCUDYEJYaMLIERBbCEoCwqK33BxqaCUuEJSCSEJYAhMWRkir5DcnjcqpPksfqcixFWAIiC2EJQFiYK1ZnpSbK4XBYXI21zAU5y6vrVFpZa3E1AM6EsAQgLOhXapIQHxcYXWN0CbA/whKAsCAstcRUHBA5CEsAwiKPBSlbICwBkYOwBCAsGFlqKYuwBEQM24elDRs26IorrlC/fv3kcDj0yiuvnPGY9evXa+LEifJ6vRoyZIieeOKJ0BcKoF2EpZYGsDAlEDFsH5ZOnTql8ePH6/e///1Z7X/gwAHNnTtX06dP144dO/Szn/1Mt912m1atWhXiSgGcTmllrUqrGs76ykpNsLgae2AaDogcLqsLOJPLL79cl19++Vnv/8QTT2jAgAFavHixJGn06NHaunWrHnroIV199dUhqhJAe/JONgSC3t09Soy3/cdOWJhhKb+kSnX1frnibP+3KxCzou5f55YtWzR79uwW2+bMmaOtW7eqtrbt9Ux8Pp/Kyspa3AAET26guZtRJVNakkfxLqfq/YaOlFRbXQ6AdkRdWCosLFR6enqLbenp6aqrq1NRUVGbxyxatEgpKSmBW1ZWVjhKBWLGgaJTkqTBvbpZXIl9OJ0ODWwcXTpw4pTF1QBoT9SFJUmtVgc2DKPN7aYFCxaotLQ0cMvLywt5jUAs2Xe8QpI0pA9hqTnz9djf+PoAsKeoax7o27evCgsLW2w7duyYXC6XevXq1eYxHo9HHk9sX6sKCKX9xxtGTob06W5xJfbS8HocDbw+AOwp6kaWpkyZorVr17bYtmbNGk2aNElut9uiqoDYZRhGYORkcG9GlpozX4/9RYwsAXZm+7BUUVGhnTt3aufOnZIalgbYuXOncnNzJTVMoV1//fWB/efNm6dDhw4pOztbOTk5Wr58uZYtW6b58+dbUT4Q806cqlFZdZ0cDsLSVw0NTMMxsgTYme2n4bZu3apLLrkk8HN2drYk6YYbbtBzzz2ngoKCQHCSpMGDB+uNN97QHXfcoccee0z9+vXTkiVLWDYAsIjZ3N0vJUFed5zF1djLkN4N05IFpdWqrKljWQXApmz/L3PmzJmBBu22PPfcc622zZgxQ9u3bw9hVQDO1n6au0+rZ7d49Ux062RlrQ4UndLYfilWlwSgDbafhgMQ2cwppqE0d7fJbHpnKg6wL8ISgJDaFzgTjpGltgzpTd8SYHeEJQAhZZ7pZfbnoKXAyBJnxAG2RVgCEDK19X7lnmi41MlgRpbaNJiRJcD2CEsAQiavuFJ1fkNet1MZyV6ry7Gloc1W8W7vZBYA1iEsAQiZwDXheneX09n25YZi3YBeiXI6pFM19Tpe7rO6HABtICwBCJn9NHefkccVp6zGC+ruYyoOsCXCEoCQMZuWh7Jyd7uGcNkTwNYISwBCZh8X0D0rrLUE2BthCUDIMA13doY0a/IGYD+EJQAhUVZdq6KKhoZlLqDbvsDyAUWMLAF2RFgCEBLmqFKfJI+SvG6Lq7E381IwecWV8tXVW1wNgK8iLAEIiQOBlbsZVTqTtCSPusXHyW80BCYA9kJYAhAS+2nuPmsOhyPwOrF8AGA/hCUAIWGGpaE0d5+VpiZvwhJgN4QlACGxr/HMLs6EOzvmhYY5Iw6wH8ISgKDz+w0dPNE4DdebabizERhZ4ow4wHYISwCC7khplapr/XLHOZTZM8HqciJCYPkARpYA2yEsAQg6s+9mQGqiXHF8zJwNc2TpZGWtTp6qsbgaAM3xKQYg6A4UcSZcRyXGu5SR4pXEVBxgN4QlAEG3n+buTuGyJ4A9EZYABJ05MjKU5u4OCZwRx8gSYCuEJQBBxwV0O4eRJcCeCEsAgqqqpl75JVWS6FnqKPP1YmFKwF4ISwCCymzuTklwq2ciF9DtCPM6eodOVKreb1hcDQATYQlAUDVfudvhcFhcTWTp1yNBHpdTNfV+5XJBXcA2CEsAgiqnoEySNKpvssWVRJ44p0Mj0pMkSXsaX0cA1iMsAQgqMyyNyUiyuJLINLrxdcshLAG2QVgCEFS7G7/kR2cwstQZ5uu2m7AE2AZhCUDQFJ+q0dEynyRpFGGpU8ywlFNQbnElAEyEJQBBY04dDeyVqO4el8XVRCYzLOWXVKm0stbiagBIhCUAQWSGpdE0d3daSoJb/XskSJJyCpmKA+yAsAQgaOhXCo6mqTjCEmAHhCUAQWP22YzmTLguGcMZcYCtEJYABEVNnV9fHjPDEiNLXUGTN2AvhCUAQfHlsQrV1htK8rqU2TPB6nIi2ph+DWHp86Plqqv3W1wNAMISgKDIadavxGVOuiarZ6K6xcepps6v/UVcVBewGmEJQFA0rdzNFFxXOZ2OwDpV9C0B1iMsAQgK8zR3mruDw3wdWckbsB5hCUCXGYbR7Ew4RpaCgSZvwD4ISwC67Fi5T8WnauR0SCPSGVkKBtZaAuyDsASgy3YfafhCH9qnu7zuOIuriQ6j+ibJ4ZCOl/t0vNxndTlATCMsAegyVu4OvsR4lwb36iaJ0SXAaoQlAF2WQ1gKCabiAHsgLAHosqawRL9SMI3msieALRCWAHRJdW29DjQunMgaS8HFGXGAPRCWAHTJ54Xl8htSr27x6pPksbqcqGKGpX3HK1RdW29xNUDsIiwB6BKzuXtMPy5zEmwZKV71SHSrzm/oy2MVVpcDxCzCEoAuobk7dBwOh0b3bXhdWckbsA5hCUCX0NwdWpwRB1iPsASg0wzD0B4ucxJSnBEHWI+wBKDTDp+sUrmvTvFxTg3t093qcqJS8zPiDMOwuBogNkVEWFq6dKkGDx4sr9eriRMnauPGjafd991335XD4Wh127NnTxgrBmLDp/mlkqTh6d3ljouIj5OI0/DaOlRaVau84iqrywFiku0/3VauXKnbb79d9957r3bs2KHp06fr8ssvV25ubrvHff755yooKAjchg8fHqaKgdjx0cFiSdLEgT0triR6eVxxGtc/RZK09VCxxdUAscn2YemRRx7RD3/4Q914440aPXq0Fi9erKysLD3++OPtHpeWlqa+ffsGbnFxXNwTCDYzLJ0/KNXiSqLbBY2vr/l6AwgvW4elmpoabdu2TbNnz26xffbs2dq8eXO7x5533nnKyMjQrFmztG7dunb39fl8Kisra3ED0L4KX512H2n4tzJpECNLoTQpEJZOWlwJEJtsHZaKiopUX1+v9PT0FtvT09NVWFjY5jEZGRl66qmntGrVKq1evVojR47UrFmztGHDhtM+zqJFi5SSkhK4ZWVlBfV5ANFo+6GT8htSZs8EZaQkWF1OVJvUOM355bEKFZ+qsbgaIPa4rC7gbHx1VWDDME67UvDIkSM1cuTIwM9TpkxRXl6eHnroIV188cVtHrNgwQJlZ2cHfi4rKyMwAWewtXFK6AKm4EKuZ7d4DU/rrr3HKrT1YLFmj+1rdUlATLH1yFLv3r0VFxfXahTp2LFjrUab2jN58mTt3bv3tL/3eDxKTk5ucQPQPnNKaBJhKSzM13nrIabigHCzdViKj4/XxIkTtXbt2hbb165dq6lTp571/ezYsUMZGRnBLg+IWTV1fu3Ia/jSPp9+pbC4YHDD6/zhAZq8gXCz/TRcdna2vve972nSpEmaMmWKnnrqKeXm5mrevHmSGqbQ8vPz9fzzz0uSFi9erEGDBmns2LGqqanRCy+8oFWrVmnVqlVWPg0gqnx2pFTVtX71THRrWBqLUYbDpIENI0u78ktVVVOvhHjO8AXCxfZh6dprr9WJEyf0y1/+UgUFBRo3bpzeeOMNDRw4UJJUUFDQYs2lmpoazZ8/X/n5+UpISNDYsWP1+uuva+7cuVY9BSDqNK2vlHra/kEEV0MjvVcFpdXakXdSU4f2trokIGY4DNbPb6WsrEwpKSkqLS2lfwlow03Pb9Xa3Uf1s7mj9KOLh1pdTsz4yUs79LePjyj7shG6bRYL7QJfFarvb1v3LAGwH8MwAmfC0dwdXmZ/GItTAuFFWALQIfuOV+hkZa28bqfG9UuxupyYYq6Uvv3QSdXV+y2uBogdhCUAHWIuGXBuVg/Fu/gICacR6UlK8rp0qqZeewrLrS4HiBl80gHokI8OcD04q8Q5HYHVvFlCAAgfwhKADvnoEP1KVmpanJKwBIQLYQnAWSssrVZecZWcDmnCgB5WlxOTLhjcdFFdTmYGwoOwBOCsmWdhjc5IVpLXbXE1selr/VMUH+fU8XKfDp2otLocICYQlgCcNXPJAPqVrON1x+mczIazEFlCAAgPwhKAs/bhQfN6cIQlK50fmIojLAHhQFgCcFbKqmu1p7BMEhfPtZr5+m9tDK8AQouwBOCsbNl3QoYhDeyVqLRkr9XlxLSJA1PldEj7i04pv6TK6nKAqEdYAnBW3vqsUJJ06ag0iytBSoJbkwY2TMWtaXxfAIQOYQnAGdXW+/XPnGOSpG+M7WtxNZCk2WPTJTWFWAChQ1gCcEYf7C9WaVWtenWLZzFKm5jTGFo/PFCsExU+i6sBohthCcAZmaMXXx+drjinw+JqIElZqYka2y9ZfkOBUT8AoUFYAtAuv98IhKVvjGMKzk7MKdE3mYoDQoqwBKBdOw+X6Fi5T909Lk0d1svqctDMnMbwumlvkSp8dRZXA0QvwhKAdpmjSpeMSpPHFWdxNWhueFp3De7dTTX1fr37OVNxQKgQlgCclmEYemtXQ1ia03j2FezD4XAEGr3f3MVUHBAqhCUAp/XF0QodPFGpeJdTM0eyvpIdmSF23Z5jqq6tt7gaIDoRlgCcljlaMX1Yb3X3uCyuBm0Zn9lD6ckenaqp1+Z9RVaXA0QlwhKA0zL7leZwFpxtOZ1NU3Fv7TpqcTVAdCIsAWhTXnGldheUyeloWF8J9mWGpbU5R1VX77e4GiD6EJYAtMkcVbpgcKpSu8VbXA3ac8HgVPVIdKv4VI22HjppdTlA1CEsAWhTYCFKrgVne+44p2aN4lpxQKgQlgC0cqysOjBCMZuwFBHMs+Le2lUov9+wuBoguhCWALTywvuHZBjSxIE91a9HgtXl4CxcPKKPkr0uHSmt1ts5NHoDwURYAtBCVU29/vj+IUnSDy8abHE1OFted5y+O3mgJOnpjfstrgaILoQlAC38ZfthnaysVVZqQuAsK0SG708dJHecQx8dPKmdeSVWlwNEDcISgAC/39DyTQckSf932mDFOR0WV4SOSE/26orx/SQxugQEE2EJQMDbOUd1oOiUkr0u/fukLKvLQSfceNEQSdI/Pi1QXnGlxdUA0YGwBCDgmY0No0rfnTxQ3bi8SUQa0y9Z04f3lt+Qnn3voNXlAFGBsARAkrQzr0QfHiyWO86h708dZHU56IIbpzeMLq38KFelVbUWVwNEPsISAElNPS5XjO+n9GSvxdWgKy4e3lsj05N0qqZeL32Ya3U5QMQjLAFQXnGl/vFpgSTppsZRCUQuh8OhG6c3LPvw3HsHVVPH9eKAriAsAdCz7x2U35CmD++t0RnJVpeDILjy3H7qk+RRYVm1Xv/0iNXlABGNsATEuKIKn1Z+1DBVcyOjSlHD44oL9J49uX6/6uoZXQI6i7AExLj7Xt2lUzX1GtsvWRcP7211OQii7144QMlel/YUlusp1l0COo2wBMSwv39yRG98Wqg4p0MPXn2OHA4WoYwmPRLjdd8VYyVJi9fu1RdHyy2uCIhMhCUgRhVV+HTfq59Jkm6ZOVTj+qdYXBFC4eoJ/XXpqDTV1Ps1/88fMx0HdAJhCYhBhmHoF6/sUvGpGo3qm6RbLx1udUkIEYfDoUXf+pqSvS59crhUT25gOg7oKMISEIP+/kmB/rGrUC6nQw/923jFu/goiGbpyV7db07Hvf2FPi9kOg7oCD4hgRhzvNyn+17dJUm65ZJhTL/FiG9N6K9Zo9JUW29o/p8/Vi3TccBZIywBMcQwDP38lU91srJWozOSdcslw6wuCWHicDj0343TcZ/ml+rxd/dZXRIQMQhLQIzw+w3d+8ouvfXZ0cbpt3OYfosx6clePXBlw3TcI2u/0B+3HLS2ICBC8EkJxIC6er/m/+VjrfggVw6HtOhbX9PYfky/xaJ/Pa+//u+0hkuh/OLVz/QM6y8BZ0RYAqJcbb1fP125U6u35yvO6dDia8/Vv03KsrosWMThcOgX3xyt/5w5VJL0q9dz9Lt/7rW4KsDeCEtAFPPV1es/X9iu1z8pkDvOoce+M0H/59z+VpcFizkcDt01Z6SyLxshSXp47Rf67Vt7ZBiGxZUB9kRYAqJUXnGlfvDsR3o756g8Lqeeun6SvjGur9VlwSYcDodumzVcP5s7SpL02Lp9WrD6U5VW1VpcGWA/LqsLABBcVTX1enz9Pj25fp98dX4luOO07IZJmjqM676htR9dPFRed5zue/UzvfxRntbuPqq7vzFK10zMlNPJ5W8ASXIYjLu2UlZWppSUFJWWlio5OdnqcoCzYhiG3vqsUP/19xzll1RJkqYO7aWFV47V8PQki6uD3b33ZZHue3WX9h0/JUkan9VDC68cq3OzelhbGNABofr+Jiy1gbCESFJSWaN/7CrUqm2HtfXQSUlSvxSvfv7NMbp8XF8ujouzVlPn1x82H9Sj/9yrCl+dJGn2mHRddV7D9eW87jiLKwTaF6rv74joWVq6dKkGDx4sr9eriRMnauPGje3uv379ek2cOFFer1dDhgzRE088EaZKgfAor67Vqzvz9cPnPtL5v35bC1Z/qq2HTire5dRPLh2mt//fDM39WgZBCR0S73LqpouH6J3/N0PfmtBwIsCa3Uf14xe3a9Kv3lb2yp1a9/kx+erqLa4UCC/bjyytXLlS3/ve97R06VJNmzZNTz75pJ555hnt3r1bAwYMaLX/gQMHNG7cON100026+eab9d577+nHP/6xXnrpJV199dVn9ZiMLMEu6ur9Kqqo0b7jFdqVX6pdR8r0WX6pDpw4peb/ckdnJOvK8f30f87tp349EqwrGFFlT2GZ/rojX3//uCAwtStJLqdDI9KTNK5/ssb1T9HYfska2KubUhPj6XOCpWJ2Gu7CCy/UhAkT9Pjjjwe2jR49WldddZUWLVrUav+7775br732mnJycgLb5s2bp48//lhbtmw5q8c0X+zdBwuURFiKWW39yzAMyZDR4veGJL9hNP5syG80/FzvN+T3S/WGoXq/X3X1hmrq/aqpa7zV+1VdW6/y6jpV+OpU0fi/xadqdLSsWoVl1Tpe7pP/NP9CB/fupm+ek6Erx/ejJwkh5fcb2p57Uq99fERvfFqoogpfm/u54xxKS/Kqb4pXfZO9Skl0K8njUnePS929LnXzuOR1xyk+zql4l0PxcXGKdzkV53Q03ByOwH87HVLDwKj53w6ZMczhkMyf2ho8ZUA1dpWXlWnMoIyghyVbnw1XU1Ojbdu26Z577mmxffbs2dq8eXObx2zZskWzZ89usW3OnDlatmyZamtr5Xa7Wx3j8/nk8zX94y8rK2s4bvFGOT2JXX0aQJfEOR3K7Jmgcf1SNKZf01/yvbt7rC4NMcLpdGjSoFRNGpSqhVeOVX5JlT5rHOXcdaRMnx0p1bFyn2rrDeWXVLUYhQLCye+rDMn92josFRUVqb6+Xunp6S22p6enq7CwsM1jCgsL29y/rq5ORUVFysjIaHXMokWLtHDhwlbb411OxXHtrKh0tn95Nv0t2/JYhxToB3KY2xxNfwE7HZKz2V/J5i0+zimPyyl3nFPxLqe87jgleZv+8k7yuJSS4FZ6ctNf5726exTH1AZswuFwKLNnojJ7JmrO2KZ1u2rr/TpW7lNhabWOljXcyqrqVOGrVYWvLjCC6qv1txphrfc3jsQ2jsjW+40WI7aG+b9SYOHMhv9uXZ858nsm9p5TQWfV14fmO9vWYcn01SZVwzDabVxta/+2tpsWLFig7OzswM9lZWXKysrS9l9cRs8SAJwFd5xT/XskqD89c7BQWVmZUh4K/v3aOiz17t1bcXFxrUaRjh071mr0yNS3b98293e5XOrVq1ebx3g8Hnk8TGkAAIDWbD3HFB8fr4kTJ2rt2rUttq9du1ZTp05t85gpU6a02n/NmjWaNGlSm/1KAAAA7bF1WJKk7OxsPfPMM1q+fLlycnJ0xx13KDc3V/PmzZPUMIV2/fXXB/afN2+eDh06pOzsbOXk5Gj58uVatmyZ5s+fb9VTAAAAEczW03CSdO211+rEiRP65S9/qYKCAo0bN05vvPGGBg4cKEkqKChQbm5uYP/BgwfrjTfe0B133KHHHntM/fr105IlS856jSUAAIDmbL/OkhVYlBIAgMgT05c7AQAAsAphCQAAoB2EJQAAgHYQlgAAANpBWAIAAGgHYQkAAKAdhCUAAIB2EJYAAADaQVgCAABoh+0vd2IFc1HzsrIyiysBAABny/zeDvbFSQhLbThx4oQkKSsry+JKAABAR504cUIpKSlBuz/CUhtSU1MlSbm5uUF9sdE5ZWVlysrKUl5eHtfqsxjvhX3wXtgH74V9lJaWasCAAYHv8WAhLLXB6Wxo5UpJSeH/+DaSnJzM+2ETvBf2wXthH7wX9mF+jwft/oJ6bwAAAFGGsAQAANAOwlIbPB6P7r//fnk8HqtLgXg/7IT3wj54L+yD98I+QvVeOIxgn18HAAAQRRhZAgAAaAdhCQAAoB2EJQAAgHYQlgAAANoRs2Fp6dKlGjx4sLxeryZOnKiNGze2u//69es1ceJEeb1eDRkyRE888USYKo1+HXkvVq9ercsuu0x9+vRRcnKypkyZorfeeiuM1Ua/jv7bML333ntyuVw699xzQ1tgDOnoe+Hz+XTvvfdq4MCB8ng8Gjp0qJYvXx6maqNbR9+LF198UePHj1diYqIyMjL0gx/8IHApLXTehg0bdMUVV6hfv35yOBx65ZVXznhMUL6/jRj08ssvG26323j66aeN3bt3Gz/96U+Nbt26GYcOHWpz//379xuJiYnGT3/6U2P37t3G008/bbjdbuMvf/lLmCuPPh19L376058aDz74oPHhhx8aX3zxhbFgwQLD7XYb27dvD3Pl0amj74eppKTEGDJkiDF79mxj/Pjx4Sk2ynXmvbjyyiuNCy+80Fi7dq1x4MAB44MPPjDee++9MFYdnTr6XmzcuNFwOp3Go48+auzfv9/YuHGjMXbsWOOqq64Kc+XR54033jDuvfdeY9WqVYYk469//Wu7+wfr+zsmw9IFF1xgzJs3r8W2UaNGGffcc0+b+991113GqFGjWmy7+eabjcmTJ4esxljR0feiLWPGjDEWLlwY7NJiUmffj2uvvdb4+c9/btx///2EpSDp6Hvxj3/8w0hJSTFOnDgRjvJiSkffi9/+9rfGkCFDWmxbsmSJkZmZGbIaY9HZhKVgfX/H3DRcTU2Ntm3bptmzZ7fYPnv2bG3evLnNY7Zs2dJq/zlz5mjr1q2qra0NWa3RrjPvxVf5/X6Vl5cH/aKJsaiz78ezzz6rffv26f777w91iTGjM+/Fa6+9pkmTJuk3v/mN+vfvrxEjRmj+/PmqqqoKR8lRqzPvxdSpU3X48GG98cYbMgxDR48e1V/+8hf9y7/8SzhKRjPB+v6OuQvpFhUVqb6+Xunp6S22p6enq7CwsM1jCgsL29y/rq5ORUVFysjICFm90awz78VXPfzwwzp16pT+/d//PRQlxpTOvB979+7VPffco40bN8rlirmPk5DpzHuxf/9+bdq0SV6vV3/9619VVFSkH//4xyouLqZvqQs6815MnTpVL774oq699lpVV1errq5OV155pX73u9+Fo2Q0E6zv75gbWTI5HI4WPxuG0WrbmfZvazs6rqPvhemll17SAw88oJUrVyotLS1U5cWcs30/6uvr9Z3vfEcLFy7UiBEjwlVeTOnIvw2/3y+Hw6EXX3xRF1xwgebOnatHHnlEzz33HKNLQdCR92L37t267bbbdN9992nbtm168803deDAAc2bNy8cpeIrgvH9HXN/Cvbu3VtxcXGt/iI4duxYq/Rp6tu3b5v7u1wu9erVK2S1RrvOvBemlStX6oc//KH+/Oc/6+tf/3ooy4wZHX0/ysvLtXXrVu3YsUO33nqrpIYvbMMw5HK5tGbNGl166aVhqT3adObfRkZGhvr376+UlJTAttGjR8swDB0+fFjDhw8Pac3RqjPvxaJFizRt2jTdeeedkqRzzjlH3bp10/Tp0/WrX/2K2YgwCtb3d8yNLMXHx2vixIlau3Zti+1r167V1KlT2zxmypQprfZfs2aNJk2aJLfbHbJao11n3gupYUTp+9//vlasWEEPQBB19P1ITk7Wp59+qp07dwZu8+bN08iRI7Vz505deOGF4So96nTm38a0adN05MgRVVRUBLZ98cUXcjqdyszMDGm90awz70VlZaWczpZfr3FxcZKaRjUQHkH7/u5QO3iUME8DXbZsmbF7927j9ttvN7p162YcPHjQMAzDuOeee4zvfe97gf3NUw/vuOMOY/fu3cayZctYOiBIOvperFixwnC5XMZjjz1mFBQUBG4lJSVWPYWo0tH346s4Gy54OvpelJeXG5mZmcY111xjfPbZZ8b69euN4cOHGzfeeKNVTyFqdPS9ePbZZw2Xy2UsXbrU2Ldvn7Fp0yZj0qRJxgUXXGDVU4ga5eXlxo4dO4wdO3YYkoxHHnnE2LFjR2AZh1B9f8dkWDIMw3jssceMgQMHGvHx8caECROM9evXB353ww03GDNmzGix/7vvvmucd955Rnx8vDFo0CDj8ccfD3PF0asj78WMGTMMSa1uN9xwQ/gLj1Id/bfRHGEpuDr6XuTk5Bhf//rXjYSEBCMzM9PIzs42Kisrw1x1dOroe7FkyRJjzJgxRkJCgpGRkWF897vfNQ4fPhzmqqPPunXr2v0OCNX3t8MwGBMEAAA4nZjrWQIAAOgIwhIAAEA7CEsAAADtICwBAAC0g7AEAADQDsISAABAOwhLAAAA7SAsAQAAtIOwBCBqPPDAA3I4HHrggQe6dD+DBg2Sw+HQwYMHO3TczJkz5XA49O6777b6XWVlpebPn6/BgwfL7XbL4XDo+9//fpfqBBAeLqsLAIBYcNNNN2nFihVKTEzUueeeK4/HoxEjRkhSINx1NeQBCA3CEgAEyYABAzRy5EglJia22H7y5Em9/PLLSkxM1J49e5SVldXi9wsXLpREWALsirAEAEHy/PPPt7l979698vv9GjduXKugBMD+6FkCgBCrqqqSJCUkJFhcCYDOICwBCDqHwyGHwyFJWrVqlS6++GL16NGjVdN0cXGx7r33Xo0bN07dunVTUlKSJk+erKefflp+v7/N+66rq9NvfvMbjRo1Sl6vV/3799dNN92ko0ePnrYewzD0/PPPB+qIj49X3759NXHiRN111106fPjwaY99//33dfnll6tnz57q1q2bpk+frnfeeafNfb/a4H3w4EE5HA7NnDlTkrR+/frAa2M2eJuvU/PXzbx1tMEcQGgwDQcgZB588EHdc889Sk9P14gRI1p8+X/22WeaM2eO8vPzFR8fr2HDhsnn8+nDDz/UBx98oDVr1uhPf/pTizBRX1+vb33rW/rb3/4mSRoxYoQSEhL07LPPas2aNbryyivbrOPOO+/Uww8/LKmhr2jEiBEqKirSrl27tH37dk2dOlWZmZmtjvv73/+u7OxsJScna+jQofryyy+1adMmzZkzR2vXrg2EoNPxer2aNm2aSktLtWvXLiUnJ+trX/ta4PcjRozQtGnT9N5770mSpk2b1up4ADZgAECQSTIkGfHx8cZTTz1l+P1+wzAMo7a21qitrTUqKiqMoUOHGpKM2267zSgtLQ0c+9lnnxljx441JBm///3vW9zvo48+akgyevbsaWzcuDGw/cCBA8a4ceMMt9ttSDLuv//+wO+OHTtmOJ1OIyUlxdi0aVOL+6uqqjJeeukl4+OPP26xfeDAgYYkw+12G4sWLTLq6uoMwzCMmpoa47vf/a4hybjwwgtbPe8ZM2YYkox169a12L5u3TpDkjFjxox2Xy8A9sQ0HICQufnmm3XTTTcFRodcLpdcLpeWL1+uffv26V//9V/16KOPKjk5OXDMmDFjtGLFCjkcDj3yyCOB7YZhBEaHfvWrX+miiy4K/G7QoEH6wx/+oNra2lY17Nu3T36/X5deemmbIzfXXXedzjnnnDbr/8Y3vqF77rlHcXFxkiS3263FixfL4/Hogw8+0MmTJzv5ygCIJIQlACFz/fXXt7l99erVkqQbb7yxzd+fc845GjRokPbv3x/oJ8rJyVFubq68Xm+bizlOmDBBkydPbrXdPPvsgw8+UG5ubofqb6u+3r17a9CgQZKk/fv3d+j+AEQmepYAhMzo0aPb3P7pp59Kku677z7993//d5v7FBUVSZLy8/OVmZmpL774QpI0cODAVusYNX+8999/v8W2/v3769/+7d/05z//WcOGDdMll1yimTNnavr06Zo8ebJcrtN/DA4dOrTN7Wlpafr8889VUVFx2mMBRA/CEoCQ6datW5vbS0tLJUnbtm07432Yp92bwaRPnz6n3Tc9Pb3N7c8//7zGjBmjZ555RmvWrNGaNWsC93XXXXcpOztbTmfrgfbT1W/uaxjGGesHEPmYhgMQdt27d5fUsFijYRjt3swzzsxjjh8/ftr7PXbsWJvbvV6vHnjgAR0+fFg5OTl68skndcUVV+jEiRO68847W/RGAcBXEZYAhN2YMWMkSbt27TrrY8zrqOXm5qqysrLNfXJycs54P6NGjdKPfvQjvfbaa1q6dKkk6emnnz7rOgDEHsISgLD71re+JUlasmTJWU9ljRo1SllZWaqqqmrzsiI7d+7Uli1bOlSH2RB+5MiRDh0XbObK3uaUIwB7ISwBCLubb75ZQ4YM0bp16/Td735XBQUFLX5fUVGhP/3pT8rOzg5sczqdgZ/vvfdebd68OfC7Q4cO6YYbbpDb7W71WP/85z915513avfu3a0e47e//a2khjPprDRkyBBJDSt8A7AfwhKAsOvevbtef/11DR48WC+99JIyMzM1ZswYTZ48WSNHjlSPHj107bXXtghEkvSTn/xEc+fOVXFxsaZNm6bRo0frvPPO07Bhw1RSUqKbb7651WOVl5froYce0tixY5WWlqbzzz9f5557rtLT0/Xiiy8qJSVF//u//xuup96ma6+9VpL0zW9+UxMmTNDMmTM1c+ZMFRYWWloXgAacDQfAEqNGjdLHH3+spUuX6q9//atycnK0f/9+ZWRkaMaMGZo7d66uvvrqFsfExcXplVde0cMPP6xnn31W+/fvV69evXTDDTfo17/+tR5//PFWjzN9+nQtWbJEa9eu1a5du7R792653W4NGzZM3/jGN3THHXeob9++4XrabbrnnntUX1+vl19+Wbt375bP55MkVVdXW1oXgAYOg3NfAQAATotpOAAAgHYQlgAAANpBWAIAAGgHYQkAAKAdhCUAAIB2EJYAAADaQVgCAABoB2EJAACgHYQlAACAdhCWAAAA2kFYAgAAaAdhCQAAoB2EJQAAgHb8f7AC+lAPrduTAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import qp\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "mu = np.array([[0.5,1.1, 2.9], [0.5, 1.25, 2.8], [0.3, 1.9, 2.2]])\n", "sig = np.array([[0.05,0.01,0.04], [0.05,0.01,0.02], [0.025, 0.01, 0.025]])\n", "wt = np.array([[1,1,1], [1,1,1], [1,1,1]])\n", "\n", "ens = qp.Ensemble(qp.mixmod, data=dict(means=mu, stds=sig, weights=wt))\n", "ens[1].plot_native(xlim=(0,1))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "In the following example we use the default parameters to convert the input mixmod ensemble into another mixmod ensemble. We do the conversion 10 times and plot each on top of the original distribution. \n", "\n", "Note that the peaks of the converted distributions are not consistent." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "Oops, we can't handle this kind of input to mixmod._ppf 2", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[4], line 6\u001b[0m\n\u001b[1;32m 3\u001b[0m axes_m \u001b[38;5;241m=\u001b[39m ens\u001b[38;5;241m.\u001b[39mplot_native(xlim\u001b[38;5;241m=\u001b[39m(\u001b[38;5;241m0\u001b[39m,\u001b[38;5;241m1.\u001b[39m), label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mOriginal\u001b[39m\u001b[38;5;124m'\u001b[39m, marker\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m10\u001b[39m):\n\u001b[0;32m----> 6\u001b[0m ens_m \u001b[38;5;241m=\u001b[39m \u001b[43mqp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconvert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mens\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mmixmod\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mxvals\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mxvals\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mncomps\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 7\u001b[0m _ \u001b[38;5;241m=\u001b[39m ens_m\u001b[38;5;241m.\u001b[39mplot(axes\u001b[38;5;241m=\u001b[39maxes_m, label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124miteration_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m, color\u001b[38;5;241m=\u001b[39mnp\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39mrand(\u001b[38;5;241m3\u001b[39m,))\n\u001b[1;32m 9\u001b[0m leg_m \u001b[38;5;241m=\u001b[39m axes_m\u001b[38;5;241m.\u001b[39mlegend()\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/core/factory.py:551\u001b[0m, in \u001b[0;36mFactory.convert\u001b[0;34m(self, in_dist, class_name, **kwds)\u001b[0m\n\u001b[1;32m 546\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m extract_func \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[1;32m 547\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\n\u001b[1;32m 548\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClass named \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m does not have a extraction_method named \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 549\u001b[0m \u001b[38;5;241m%\u001b[39m (class_name, method)\n\u001b[1;32m 550\u001b[0m )\n\u001b[0;32m--> 551\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mextract_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43min_dist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds_copy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 552\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcreate(class_name, data, method)\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/parameterizations/mixmod/mixmod_utils.py:30\u001b[0m, in \u001b[0;36mextract_mixmod_fit_samples\u001b[0;34m(in_dist, **kwargs)\u001b[0m\n\u001b[1;32m 28\u001b[0m n_sample \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnsamples\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;241m1000\u001b[39m)\n\u001b[1;32m 29\u001b[0m random_state \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrandom_state\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m---> 30\u001b[0m samples \u001b[38;5;241m=\u001b[39m \u001b[43min_dist\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrvs\u001b[49m\u001b[43m(\u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mn_sample\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrandom_state\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 32\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mmixmod_helper\u001b[39m(samps):\n\u001b[1;32m 33\u001b[0m estimator \u001b[38;5;241m=\u001b[39m mixture\u001b[38;5;241m.\u001b[39mGaussianMixture(n_components\u001b[38;5;241m=\u001b[39mn_comps)\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/core/ensemble.py:983\u001b[0m, in \u001b[0;36mEnsemble.rvs\u001b[0;34m(self, size, random_state)\u001b[0m\n\u001b[1;32m 947\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrvs\u001b[39m(\n\u001b[1;32m 948\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 949\u001b[0m size: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m,\n\u001b[1;32m 950\u001b[0m random_state: Union[\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;28mint\u001b[39m, np\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39mGenerator] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 951\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m ArrayLike:\n\u001b[1;32m 952\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 953\u001b[0m \u001b[38;5;124;03m Generate samples from the distributions in this ensemble.\u001b[39;00m\n\u001b[1;32m 954\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 981\u001b[0m \n\u001b[1;32m 982\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 983\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_frozen\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrvs\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 984\u001b[0m \u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_frozen\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnpdf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrandom_state\u001b[49m\n\u001b[1;32m 985\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/software/anaconda3/envs/qp/lib/python3.12/site-packages/scipy/stats/_distn_infrastructure.py:532\u001b[0m, in \u001b[0;36mrv_frozen.rvs\u001b[0;34m(self, size, random_state)\u001b[0m\n\u001b[1;32m 530\u001b[0m kwds \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkwds\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[1;32m 531\u001b[0m kwds\u001b[38;5;241m.\u001b[39mupdate({\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msize\u001b[39m\u001b[38;5;124m'\u001b[39m: size, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrandom_state\u001b[39m\u001b[38;5;124m'\u001b[39m: random_state})\n\u001b[0;32m--> 532\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdist\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrvs\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/software/anaconda3/envs/qp/lib/python3.12/site-packages/scipy/stats/_distn_infrastructure.py:1108\u001b[0m, in \u001b[0;36mrv_generic.rvs\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 1105\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1106\u001b[0m random_state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_random_state\n\u001b[0;32m-> 1108\u001b[0m vals \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_rvs\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msize\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrandom_state\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1110\u001b[0m vals \u001b[38;5;241m=\u001b[39m vals \u001b[38;5;241m*\u001b[39m scale \u001b[38;5;241m+\u001b[39m loc\n\u001b[1;32m 1112\u001b[0m \u001b[38;5;66;03m# do not forget to restore the _random_state\u001b[39;00m\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/parameterizations/base.py:321\u001b[0m, in \u001b[0;36mPdf_rows_gen._rvs\u001b[0;34m(self, size, random_state, *args)\u001b[0m\n\u001b[1;32m 318\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_rvs\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, random_state\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 319\u001b[0m \u001b[38;5;66;03m# Use basic inverse cdf algorithm for RV generation as default.\u001b[39;00m\n\u001b[1;32m 320\u001b[0m U \u001b[38;5;241m=\u001b[39m random_state\u001b[38;5;241m.\u001b[39muniform(size\u001b[38;5;241m=\u001b[39msize)\n\u001b[0;32m--> 321\u001b[0m Y \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_ppf\u001b[49m\u001b[43m(\u001b[49m\u001b[43mU\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 322\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m size \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[1;32m 323\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Y\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/parameterizations/mixmod/mixmod.py:253\u001b[0m, in \u001b[0;36mmixmod_gen._ppf\u001b[0;34m(self, x, row)\u001b[0m\n\u001b[1;32m 251\u001b[0m cdf_vals \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcdf(grid, np\u001b[38;5;241m.\u001b[39mexpand_dims(rr, \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m))\n\u001b[1;32m 252\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[0;32m--> 253\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 254\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mOops, we can\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt handle this kind of input to mixmod._ppf \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mcase_idx\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 255\u001b[0m )\n\u001b[1;32m 256\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m interpolate_multi_x_y(\n\u001b[1;32m 257\u001b[0m x, row, cdf_vals, grid, bounds_error\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, fill_value\u001b[38;5;241m=\u001b[39m(min_val, max_val)\n\u001b[1;32m 258\u001b[0m )\u001b[38;5;241m.\u001b[39mravel()\n", "\u001b[0;31mValueError\u001b[0m: Oops, we can't handle this kind of input to mixmod._ppf 2" ] }, { "data": { "image/png": "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VF1Xr9goe9QFwPdsP7LUktvtliT17NnzlPt8+OGHmj59erNtV155pbZt26ba2tpW+2dnZ8vhcHhv6enpvi0aQKfYrblbknolxighJlKmKR08URnocgD4UVCFJdM0NXfuXF1yySUaPXr0KfcrKChQWlpas21paWmqq6tTUVFRq/0XLlwot9vtveXn5/u8dgBnz7tsgE36lSTJMAxveGMqDghttp+Ga+r222/XF198oc2bN592X8NovsKvaZptbpek2NhYxcbG+qZIAD53wGruttHIktQwFfd1QSlnxAEhLmjC0s9//nO99dZb2rhxo/r379/uvn369FFBQUGzbYWFhYqKilKvXr38WSYAP/BOw9loZEk6OS2Yd5xpOCCU2X4azjRN3X777Vq1apXWrVunzMzM0z5mwoQJWrt2bbNta9as0YUXXqjo6Gh/lQrAT+y2erclo/HSK3nHGVkCQpntw9Jtt92ml156ScuXL1dSUpIKCgpUUFCgysqT/ye3cOFC3Xjjjd77c+bM0YEDBzR37lzl5OToueee07JlyzRv3rxAvAUAnVBVW6+CkipJ9rguXFMDWMUbCAu2D0tPP/203G63pk2bJqfT6b2tWLHCu4/L5VJeXp73fmZmplavXq33339f5513nn7zm99o8eLFbS4bAMDeDp5oCCJx0RGqqq0LcDXNWSNduUXlOlxMYAJClWFanc/wKikpkcPhkNvtVnJycqDLAcLaA2/t1AtbDkiSIgwpe9Y5mj0uI8BVNVj+8QHd98ZOSfarDQhH/vr+tv3IEoDw5XJX6i+NQUmSPKZ036qdcrkD31DtclfqF2/u9N63U20AfIuwBMC2covK1XLou940tb8o8FNeuUXl8rQozi61AfAtwhIA28pMad3QHWkYGpgS+LPiMlMSFdFi2Ta71AbAtwhLAGzL6YhXX0ec936kYeihWaPldMQHsKoGTke8smedIysvGZJtagPgW0GzKCWA8FReUy9JevTaczV5WIqtwsjscRkqq6rTb97J0diB3WnuBkIUYQmAbZVW1cpd2XDx65nnOtUt1n5/skb1c0iSikprAlwJAH9hGg6AbR0qbjizrHtCtC2DkiT179Ew0nW4uEqelh3fAEICYQmAbR060RCWrEBiR32S4xQZYaim3qOjZdWBLgeAHxCWANjWwcaw1K+7fcNSVGSE+iQ3NKFbq40DCC2EJQC2ZYWP/j3sfTq+NfJlhTsAoYWwBMC2rJ4lO48sSVI/whIQ0ghLAGzrYBD0LEknR74IS0BoIiwBsK2TDd42n4ZrHPmyRsIAhBbCEgBbqqip07HyhrWL+tl+ZMmahqPBGwhFhCUAtnS4cZQmKS5KjvjoAFfTPivMHTpRKdNkrSUg1BCWANhSfhAsG2BxOuJlGFJ1nUdFZazkDYQawhIAWzoYJP1KkhQTxVpLQCgjLAGwpWBYvbupfjR5AyGLsATAlk4uSBkcYYmFKYHQRVgCYEvWCE2whKWmTd4AQgthCYAtnbwunP17lqSmC1PSswSEGsISANupqq3X0dJqSUE0stSdaTggVBGWANiOtcZSYkykuifYe40lixXqDhWz1hIQaghLAGzHOwXXI16GYQS4mjPTt3FkqaKmXicqagNcDQBfIiwBsJ2Tzd3B0a8kSXHRkeqdFCuJJm8g1BCWANiO1SQdDKt3N8U14oDQRFgCYDsHg2xBSgtN3kBoIiwBsJ1DQXSpk6aselnFGwgthCUAttO0wTuYMA0HhCbCEgBbqanz6EhplaQgnIbjkidASCIsAbAVl7tSpinFRUeoV2JMoMvpkPQmlzxhrSUgdBCWANjKycucBM8aSxZrraXS6jqVVNYFuBoAvkJYAmArwdrcLUkJMVHe0bCDxfQtAaGCsATAVrxrLAVZv5KFviUg9BCWANjKweLgXGPJ0r9J3xKA0EBYAmArTXuWgpE1fcjIEhA6CEsAbCWYe5akpqt407MEhArCEgDbqKv3qKCkYY2l9GCfhmMVbyBkEJYA2IbLXaV6j6moCEO19Z5Al3NWrAbv/UXlcrkJTEAoICwBsI2/fnRAklTnMTX50fVasTUvwBV13Mf7jkmSymvqNenhdUH5HgA0R1gCYAsud6We3bjPe99jSvet2hlUozMud6UefHuX934wvgcArRGWANhCblG5Wl4gpN40tb8oeBqlc4vK5WnxJoLtPQBojbAEwBYyUxJbbYs0DA1MCZ6z4jJTEhXR4gotwfYeALRGWAJgC05HvAY1CUyRhqGHZo2W0xE8Z8U5HfHKnnWOrLxkSEH3HgC0FhXoAgDAUtc4h/XAVSN15eg+QRkyZo/LkKu4Sov+uUfThvfW7HEZgS4JQCcxsgTAFuo9pg43rk00fVRwBiXLiL7JkqRjZTUBrgSALxCWANhCYWmV6hrXWEpLjgt0OZ3C9eGA0EJYAmAL1rXUnN3jFNmySzrI9O/e0NB9rLxGFTV1Aa4GQGcRlgDYgveacN2D/8yx5PgoJcU2tIQe5rInQNAjLAGwBevCs/2C9JpwTRmG4X0f+UzFAUGPsATAFqxpuP4hEJYk+paAUEJYAmALh4qtsBT803DSyfdxkLAEBD3bh6WNGzfqqquuUt++fWUYht58881293///fdlGEar29dff901BQM4K1ao6Nc9NEaWrPdxiJ4lIOjZflHK8vJyjRkzRv/xH/+ha6+99owft3v3biUnJ3vv9+7d2x/lAfABj8dsMrIUGmHJeh9WLxaA4GX7sDRjxgzNmDGjw49LTU1V9+7dz2jf6upqVVdXe++XlJR0+PUAnL2ismrV1HkUYUh9HMG9xpKlHz1LQMiw/TTc2Tr//PPldDp12WWXaf369e3um52dLYfD4b2lp6d3UZUAJOlg46iS0xGv6MjQ+LNk9SwVllarqrY+wNUA6IzQ+KvUhNPp1DPPPKOVK1dq1apVysrK0mWXXaaNGzee8jELFy6U2+323vLz87uwYgCh1q8kST0SohUfHSmJtZaAYGf7abiOysrKUlZWlvf+hAkTlJ+fr8cee0xTpkxp8zGxsbGKjY3tqhIBtHAoxJYNkBrWWurfI157Cst0qLhSg3p3C3RJAM5SyI0stWX8+PHas2dPoMsAcAqhtCBlU/28Td6MLAHBLCzC0vbt2+V0OgNdBoBTCLUFKS0sTAmEBp9Nw5mmqaKiIh09elSVlZVKSUlR7969lZDQuQXmysrK9O2333rv5+bmaseOHerZs6cyMjK0cOFCHTp0SC+++KIkadGiRRo4cKBGjRqlmpoavfTSS1q5cqVWrlzZqToA+E+oLUhpObkwJcsHAMGsU2Fpz549WrFihTZu3KgPP/xQFRWt/yAMHTpUkydP1vTp03XNNdcoOjq6Q6+xbds2XXrppd77c+fOlSTddNNNeuGFF+RyuZSXl+f995qaGs2bN0+HDh1SfHy8Ro0apXfeeUczZ848y3cJwJ9M0zw5DRdCDd4SC1MCocIwTdPs6INee+01/fGPf9TmzZslNfyxk6SIiAg5HA7Fx8fr+PHjqqqqOvlChqGePXvqxhtv1Ny5c9WvXz8fvQXfKykpkcPhkNvtbrawJQDfO1ZWrbG//T8ZhvT1b76r2KjIQJfkM9vzTuj7S7bI6YjThwsvC3Q5QMjz1/d3h3qW/vnPf2rcuHG6/vrrtWnTJp177rm677779Pe//12HDx9WbW2tjh07poMHD6qiokKVlZXatm2blixZon//939XTU2Nfv/732vYsGHe0/UBhDerXyk1KTakgpJ0ssH7SEmVauo8Aa4GwNnq0DTcFVdcIYfDoXvvvVc33XRTs1P02xIbG6sLLrhAF1xwgebMmaPq6mq9/fbb+sMf/qBHHnlE8fHx+uUvf9mpNwAguIVqv5Ik9e4Wq9ioCFXXeVTgrlJGr9B7j0A46FBYevDBB3XHHXfI4XCc1YvFxsbquuuu03XXXadNmzapuLj4rJ4HQOgI1X4lqaH9oF/3eO0rKtfB4grCEhCkOhSW/vu//9tnLzx58mSfPReA4BWKC1I21a9HY1hi+QAgaIXFOksA7Mt7qZMQDUustQQEv06vs/TrX/9akvTv//7vGjp0aLv7vvDCC8rLy6NPCYDXyQUpQ3OK6uRaS4QlIFh1emTpgQce0IMPPqiLL75Ya9asaXffZcuW6cEHH+zsSwIIEaZpNmnwDvGRpWIWpgSClU+m4eLi4lRcXKzvfe97evzxx33xlADCgLuyVmXVdZJCs8FbOvm+GFkCgpdPwtLYsWO1fPlyRUdHa/78+brhhhtUXV3ti6cGEMKsAJHSLVZx0aG1xpLFmoZzuatUV89aS0Aw8lmD9/XXX6/NmzerX79+Wr58uaZMmaLDhw/76ukBhKBQb+6WGhbbjI40VO8xdaSU/4kEgpFPz4a74IIL9Omnn2rSpEnaunWrxo0bp48++siXLwEghIR6v5IkRUQY6mtNxR2nbwkIRj5fOqB3795at26dfvrTn8rlcunSSy/Vc8895+uXARACrAUp+4dov5KFC+oCwa3TSwe0+aRRUVq6dKnGjBmju+66S7fccot27Nihuro6f7wcgCB1MMQXpLRY748mbyA4+SUsWf7rv/5Lo0eP1nXXXaennnrKny8FIAgdCoOeJUnq172hyZuFKYHg5PcVvCdPnqytW7dqzJgxMk3T3y8HIIh4p+FCdEFKi3dkibWWgKDU6ZElj+f0p8JmZGRoy5Yt+vjjjzv7cgBCRElVrUqqGqbmIw0jwNX4lzVy9m1hmVzuSjkdoT2SBoSaLrs2XFxcnKZOnaqpU6d21UsCsLHnNuV6//uK32/Qiq15AazGv3bknZAkHSmp1qSH14X0ewVCERfSBdDlXO5KPbluj/e+x5TuW7VTLnfo9fS43JV69L3d3vuh/F6BUNWhsDRz5kyfTKWVl5fr4Ycf1pIlSzr9XACCT25RuVq2MNabpvYXhV5PT25RuTxh8l6BUNWhsLRp0yZNnDhRl19+uf7617+qtLS0Qy+2fft2zZs3TwMGDND999/PJVGAMJWZkqiWXUqRhqGBKaHX6J2ZkqiIFm82VN8rEKo61OC9b98+PfDAA/rzn/+s9evXKzY2VpdccokuuugijR07Vk6nUz179lRsbKyKi4t1/Phx5eTkaNu2bdq8ebP27t0r0zQ1YsQIPffcc7r66qv99b4A2JjTEa/hzmTluEokNYSHh2aNDsnGZ6cjXtmzztGClV/KlGRIIftegVBlmGdxPn9ubq6WLl2qv/zlLyosLGx4onbOZjFNU4Zh6Dvf+Y5++tOf6tprr1VEhH3bpUpKSuRwOOR2u5WcnBzocoCQdOXvN2r3kVItmDFc/3pe35APDw//I0dLN+zTjNF99PSPxwa6HCAk+ev7+6yWDsjMzNQjjzyi//mf/9H69eu1ceNGbdmyRQcOHFBRUZGqqqrUs2dPpaam6rzzztMll1yiK664QgMGDPBZ4QCCl2maymu8TtqVo/qEfFCSpJF9HZKkY2U1Aa4EQEd1ap2lqKgoXXHFFbriiit8VQ+AMFBUVqPK2noZxsnrpoW6jJ4NPUp5XEwXCDr2nQsDELKswNDXEa+YqPD4M2SFpYKSKlXV1ge4GgAdER5/pQDYSn5jWErvGR6jSpLUIyFa3WIbBvO5oC4QXHx2Id3q6mq9+uqreu+99/TNN9+otLRUSUlJGjZsmKZPn67rr79ecXFxvno5AEHMGlmyRlvCgWEYSu+ZoBxXifKPV2hIardAlwTgDPkkLG3ZskU//vGPdeDAgVYXy/3ss8+0YsUKPfjgg3rppZc0adIkX7wkgCDmHVkK8QvotpTeI74hLJ2gbwkIJp0OS1999ZWuuOIKVVZWqk+fPrr55ps1YsQIpaWlqbCwUDk5OVq2bJkOHDig6dOn6+OPP9bo0aN9UTuAIOUdWeoVXmHJ2+R9jLAEBJNOh6Vf/OIXqqys1I9//GMtW7ZM0dHRbe5z8803669//at++ctfatWqVZ19WQBB7GTPUpiFpV6cEQcEo043eG/cuFHJycl65pln2gxKkhQdHa0//elPSk5O1vvvv9/ZlwQQxKrr6uUqqZIUXj1L0slwSFgCgkunw1JNTY2ysrJO27wdFxenrKws1dbWdvYlAQSxQycqZZpSQkykeiXGBLqcLmWFw/zjFa36OwHYV6fD0ogRI3Tw4MEz2jc/P1+jRo3q7EsCCGJNz4Rr7zJJoahf93gZhlReU6/j5azkDQSLToelu+66Sy6XS08++WS7+y1evFgFBQW66667OvuSAIJYuPYrSVJcdKT6JDeMwjMVBwSPTjd4//CHP9ShQ4d07733asOGDfrZz36mESNGKDU1VUePHlVOTo6WLFmid955R48++qiuv/56X9QNIEiF4xpLTaX3TJDLXaW84xU6P6NHoMsBcAY6HZYiIyO9//33v/9df//730+577333qt777231XbDMFRXV9fZUgAEgXAPSxk9E/RJ7nHvCBsA++t0WPJFkyKNjkD4yDvecKmPcA5LEtNwQDDpdFjyeDy+qANAGDBNUwfD8LpwTVnvO/8414cDggUX0gXQZYoralVa3TDl3j/MLnViYWQJCD6EJQBdxgoIacmxiouOPM3eock6C9DlrlRNHSPzQDAgLAHoMuHe3C1JvbvFKi46Qh5TOlzMVBwQDAhLALpMXhivsWQxDIOpOCDIEJYAdJl8RpYk0bcEBBvCEoAuwzRcg/Qm14gDYH+EJQBdhrDUgJElILgQlgB0idp6j7ehmbBEWAKCCWEJQJc4XFwpjynFRkWod1JsoMsJKMISEFwISwC6hLVidXrPBBmGEeBqAstakLO0qk7uitoAVwPgdAhLALoE/UonxcdEekfXGF0C7I+wBKBLEJaaYyoOCB6EJQBdIp8FKZshLAHBg7AEoEswstRcOmEJCBq2D0sbN27UVVddpb59+8owDL355punfcyGDRs0duxYxcXFadCgQVq6dKn/CwXQLsJScxksTAkEDduHpfLyco0ZM0Z//OMfz2j/3NxczZw5U5MnT9b27dt133336Y477tDKlSv9XCmAU3FX1Mpd2XDWV3RkeJ8JZ7HC0jdHSuVyc0FdwM6iAl3A6cyYMUMzZsw44/2XLl2qjIwMLVq0SJI0YsQIbdu2TY899piuvfZaP1UJoD3LNu/z/vflT2xQ9qxzNHtcRgArCrwd+cWSpMLSak16eB2fCWBjth9Z6qgPP/xQ06dPb7btyiuv1LZt21Rb2/Z6JtXV1SopKWl2A+AbLnel/rDuW+99jyndt2pnWI+muNyVevgfOd77fCaAvYVcWCooKFBaWlqzbWlpaaqrq1NRUVGbj8nOzpbD4fDe0tPTu6JUICzkFpXLbLGt3jS1vyh8e3Vyi8rlafGhhPtnAthZyIUlSa1WBzZNs83tloULF8rtdntv+fn5fq8RCBeZKYmttkUahgamhG+jd2ZKoiJa/DkK988EsLOQC0t9+vRRQUFBs22FhYWKiopSr1692nxMbGyskpOTm90A+IbTEa/0HvHe+5GGoYdmjZbTEd/Oo0Kb0xGv7FnnyMpLhhT2nwlgZ7Zv8O6oCRMm6O233262bc2aNbrwwgsVHR0doKqA8GWapvdMuEeuPUdThvUmFEiaPS5D7spaPbT6a40d2J3mbsDGbD+yVFZWph07dmjHjh2SGpYG2LFjh/Ly8iQ1TKHdeOON3v3nzJmjAwcOaO7cucrJydFzzz2nZcuWad68eYEoHwh7x8prVFJVJ8OQ/vW8fgSlJsYO6CFJOnSiKsCVAGiP7UeWtm3bpksvvdR7f+7cuZKkm266SS+88IJcLpc3OElSZmamVq9erbvvvltPPfWU+vbtq8WLF7NsABAguUXlkqS+jnjFRUcGuBp7GZTSTZLkclepoqZOCTG2/5MMhCXb/2ZOmzbN26DdlhdeeKHVtqlTp+qzzz7zY1UAztS+o2WSpEG9Wzd6h7seiTHqkRCtExW1yi0q16i+jkCXBKANtp+GAxDc9h1tGFka3LtbgCuxp0GNn4v1OQGwH8ISAL/a2xgCGFlq26DGpRUIS4B9EZYA+NW+osZpuBRGltriHVlq/JwA2A9hCYDf1NZ7lHesYVXqTEaW2pTJyBJge4QlAH6Tf7xCdR5TcdERcibHBbocWxrc2wpLZe2ezAIgcAhLAPzGWjYgM6WbIlpe3wOSpIxeCYowpPKaeh0trQ50OQDaQFgC4Df7aO4+rdioSKX3bLgm3F6m4gBbIiwB8BuraXlwGxfTxUneM+Jo8gZsibAEwG9OLhvAmXDtYa0lwN4ISwD8hmm4MzOoSZM3APshLAHwi5KqWhWVNTQsZzIN1y7v8gFFjCwBdkRYAuAX1qhS76RYJcVFB7gae7MuBZN/vELVdfUBrgZAS4QlAH6R6125m1Gl00lNilViTKQ8ZkNgAmAvhCUAfrGP5u4zZhiG93Ni+QDAfghLAPzCCkuDae4+IyebvAlLgN0QlgD4xd7GM7s4E+7MWBca5ow4wH4ISwB8zuMxtf9Y4zRcCtNwZ8I7ssQZcYDtEJYA+Nxhd6Wqaj2KjjTUv0d8oMsJCt7lAxhZAmyHsATA56y+m4yeCYqK5M/MmbBGlk5U1OpEeU2AqwHQFH/FAPhcbhFnwnVUQkyUnI44SUzFAXZDWALgc/to7j4rXPYEsCfCEgCfs0ZGBtPc3SHeM+IYWQJshbAEwOe4gO7ZYWQJsCfCEgCfqqyp16HiSklSYmxUgKsJLlaP185DbrnclQGuBoCFsATAp5Zu2Ov97+8t3qQVW/MCWE1w2XXYLUk6VFylSQ+v47MDbIKwBMBnXO5KLf7nHu99jyndt2onoyRnwOWu1O/e2+29z2cH2AdhCYDP5BaVy2yxrd40tb+oIiD1BJPconJ5Wnx4fHaAPRCWAPiMtQp1U5GGoYEpCQGoJrhkpiQqwmi+jc8OsAfCEgCfcTrilRx3sqk70jD00KzRcjq45MnpOB3xyp51jowmgYnPDrAHTlUB4DPHy2tUUlUnSXruJ+M0wpnEl30HzB6XoW6xUbpt+Xb1SY7T7HEZgS4JgAhLAHwox1UiSRrQK0HfGZ4a4GqC0yVDe0uSCkqq5K6olSMhOsAVAWAaDoDPWGFpRJ/kAFcSvBzx0erXvWE0LqegJMDVAJAISwB8aJcVlpyEpc6wPj8rfAIILMISAJ/JcZVKkkY4kwJcSXAb2fj5EZYAeyAsAfCJmjqPvi20whIjS51xcmSpNMCVAJAISwB85NvCMtXWm0qKi1L/HpwB1xkj+zaEpd1HSlVX7wlwNQAISwB8IqdJv5JhGKfZG+1J75GgxJhI1dR5tK+oPNDlAGGPsATAJ6ywNJIpuE6LiDA0nCZvwDYISwB8wjrNneZu37A+x12EJSDgCEsAOs00zSZnwjGy5As0eQP2QVgC0GmFpdU6Xl6jCEMalsbIki+w1hJgH4QlAJ2263DDF/rg3t0UFx0Z4GpCw/A+STIM6WhptY6WVge6HCCsEZYAdBord/teQkyUMnslSmJ0CQg0whKATsshLPkFU3GAPRCWAHTaybBEv5IvjeCyJ4AtEJYAdEpVbb1yGxdOZI0l3+KMOMAeCEsAOmV3Qak8ptQrMUa9k2IDXU5IscLS3qNlqqqtD3A1QPgiLAHoFKu5e2RfLnPia05HnLonRKvOY+rbwrJAlwOELcISgE6hudt/DMPQiD4NnysreQOBQ1gC0Cmf5xdLkpwOpuD8wQqh63KOyOWuDHA1QHgiLAE4a69+kqfPD7olSb/+3xyt2JoX4IpCT2lVrSTp3a+OaNLD6/iMgQAgLAE4Ky53pe5740vvfdOU7lu1k9EPH3K5K/X6Zwe99z18xkBABEVYWrJkiTIzMxUXF6exY8dq06ZNp9z3/fffl2EYrW5ff/11F1YMhL7conJ5zObb6k1T+4sqAlNQCMotKpfJZwwEnO3D0ooVK3TXXXfp/vvv1/bt2zV58mTNmDFDeXntD0Xv3r1bLpfLexs6dGgXVQyEh8yURLU89y3SMDQwJSEg9YSizJRERbT4kPmMga5n+7D0xBNP6D//8z918803a8SIEVq0aJHS09P19NNPt/u41NRU9enTx3uLjOTinoAvOR3xcnaP896PNAw9NGu0nI74AFYVWpyOeGXPOscbSg2JzxgIAFuHpZqaGn366aeaPn16s+3Tp0/Xli1b2n3s+eefL6fTqcsuu0zr169vd9/q6mqVlJQ0uwFoX1l1nQrcVZKkp354vjYvuFSzx2UEuKrQM3tchh6+9lxJ0oBeCXzGQADYOiwVFRWpvr5eaWlpzbanpaWpoKCgzcc4nU4988wzWrlypVatWqWsrCxddtll2rhx4ylfJzs7Ww6Hw3tLT0/36fsAQtFnB07IY0r9e8Tre+f2ZbTDj6aPbPgbuP9YhY6X1wS4GiD8RAW6gDPRclVg0zRPuVJwVlaWsrKyvPcnTJig/Px8PfbYY5oyZUqbj1m4cKHmzp3rvV9SUkJgAk5j2/7jkqSLBvYMcCWhr0dijIamdtOewjJt239c00f1CXRJQFix9chSSkqKIiMjW40iFRYWthptas/48eO1Z8+eU/57bGyskpOTm90AtG/r/hOSpAsJS13C+py3HTgR4EqA8GPrsBQTE6OxY8dq7dq1zbavXbtWEydOPOPn2b59u5xOp6/LA8JWTZ1H2/MbvrTHDewR4GrCw0WZDZ/zJ7nHA1wJEH5sPw03d+5c3XDDDbrwwgs1YcIEPfPMM8rLy9OcOXMkNUyhHTp0SC+++KIkadGiRRo4cKBGjRqlmpoavfTSS1q5cqVWrlwZyLcBhJSvDrtVVetRj4RoDUntFuhywsKFAxpGlnYecquypl7xMZzhC3QV24el2bNn69ixY/r1r38tl8ul0aNHa/Xq1RowYIAkyeVyNVtzqaamRvPmzdOhQ4cUHx+vUaNG6Z133tHMmTMD9RaAkLO1sV9p7ICep+wfhG/17xEvpyNOLneVtuef0MTBKYEuCQgbhmm2XB8WJSUlcjgccrvd9C8BbbjlxW1au+uI7ps5XD+dMjjQ5YSNn7+yXW9/flhzrximOy5joV2gJX99f9u6ZwmA/Zim6T0TjuburmX1h1kjewC6BmEJQIfsPVqmExW1iouO0Oi+jkCXE1bGNYbTzw6cUF29J8DVAOGDsASgQ6wlA85L766YKP6EdKVhaUlKiotSeU29vi4oDXQ5QNjgLx2ADtnaeOr6OKbgulxkhKELB7CEANDVCEsAOmTrAfqVAunk4pSEJaCrEJYAnLECd5Xyj1cqwpAuyOge6HLC0kWZDWFp6/4T4mRmoGsQlgCcMessrBHOZCXFRQe4mvB0Tj+HYiIjdLS0WgeOVQS6HCAsEJYAnLENuwslSSOdrD8WKHHRkTq3f8NZiK98kieXuzLAFQGhj7AE4Iys2Jqn1z87JEl6/dODWrE17zSPgL90i2u4+MKfNu7TpIfXcSwAPyMsATgtl7tSC1d96b1vSrpv1U5GNQLA5a7Uhm+Oeu97TI4F4G+EJQCnlVtULk+LXuJ609T+InpmulpuUbla9nVzLAD/IiwBOK3MlMRW2yINQwNTEgJQTXjLTElURItrF3MsAP8iLAE4rZRusYqPjvTejzQMPTRrtJyO+ABWFZ6cjnhlzzpHRpPAxLEA/Csq0AUAsL+P9x1XZW29usdH66kfXaBBvRP5cg6g2eMyNCS1m659+kMZki4fkRbokoCQxsgSgNN676sCSdKVo/po0pAUgpINjB3QU6P6JsuU9M+cwkCXA4Q0whKAdnk8pjcsfXd0nwBXg6a+O6rheLzbeHwA+AdhCUC7dhwsVmFptbrFRmnikF6BLgdNXNkYXjfvKVJZdV2AqwFCF2EJQLusUaVLh6cqNiryNHujKw1N7abMlETV1Hv0/m6m4gB/ISwBOCXTNPXeTqtfiSZiuzEMQ1daU3E7mYoD/IWwBOCUvjlSpv3HKhQTFaFpWamBLgdtsELs+q8LVVVbH+BqgNBEWAJwStZoxeQhKeoWy0ojdjSmf3elJceqvKZeW/YWBbocICQRlgCcknfJAM6Cs62IiJNTce/tPBLgaoDQRFgC0Kb84xXa5SpRhMGih3ZnhaW1OUdUV+8JcDVA6CEsAWjTa9vyJUlj0rurZ2JMgKtBey7K7KnuCdE6Xl6jv3y4Xy53ZaBLAkIKYQlAKyu25mnxum8lSTvyirVia16AK0J7oiMjNCilmyTpN/+bo0kPr+OYAT5EWALQjMtdqYWrvvTeNyXdt2onoxU25nJXanveCe99j8kxA3yJsASgmdyicnnM5tvqTVP7iyoCUxBOK7eoXC0OGccM8CHCEoBmnMmtL5IbaRgamJIQgGpwJjJTEhVhNN/GMQN8h7AEoJnNLdbqiTQMPTRrtJyO1iEK9uB0xCt71jnNAtOcaYM5ZoCPsMocAC+Px9Rzm3MlSXdfPlQXZfbSwJQEvnSDwOxxGZoyrLfmv/6FNu0p0v5j5YEuCQgZjCwB8Pq/nCPKLSpXclyUbp48SBMG9yIoBRGnI14LZ4yQJP3jS5fyj9OzBPgCYQmA1583NYwq/Wj8ACVyeZOgNLJvsiYPTZHHlJ7/YH+gywFCAmEJgCRpR36xPtl/XNGRhn4ycWCgy0En3Dx5kKSG9bLclbUBrgYIfoQlAJKkZzftkyRdNaav0pLjAlwNOmPK0BRlpSWpvKZer3zC4pRAZxGWAOjTA8e1+guXJOmWxlEJBC/DMHTz5ExJ0rJNudr4zVEWqAQ6gbAEhLkVW/N03dMfehc1/OJgcSDLgY9cfV5fdYuN0tGyat343CdcAgXoBMISEMasS5s0Xf2Zy2SEhuPlNSqvrvPe5xIowNkjLAFhjEubhC4ugQL4DmEJCGN7j5a12sZlMkJDW5dAiTDEsQXOAmEJCFNFZdX6/do9kiTrO5VLm4QO6xIokU0CU9/u8erdLTZwRQFBilXngDBkmqb++82dOl5eo+F9kvTMDWN1qLiKS5uEGOsSKNvzijX/9c918ESl/rRxn267dEigSwOCCmEJCDMud6WWf5ynf+wsUFSEocf+bYwyeiUqo1dioEuDHzgd8XKeE6/Kmnr9v9c+16L/+0Zj+ndXRETDVB3hGDg9whIQRlZszdPCVV96m7qnZvXW6H6OwBaFLjHrgn5a/aVL//y6UD9e9rGkhh6m7FnnaPa4jABXB9gbPUtAmLCWCWh69tv6rws5lTxMGIahOy8f2mwbywkAZ4awBISJfYWtlwnwmOJU8jBS1mTdJQvLCQCnR1gCwkBdvUd//fhAq+0sExBe2lpOwGA5AeC0CEtACHO5K7Vpz1H99K+f6t2dBTKMhi9HiWUCwlFbywmYpvT6toNyuSu1ZW8RU3JAGwzTNFsu8hr2SkpK5HA45Ha7lZycHOhygLPSspk70pCe+tFYjUl3aH9RBcsEhDGXu1L7i8q17utCPbspV1LDWlumaPpGcPPX9zdnwwEhqK1mblPSmHRHw6nkhKSwZv0MTBicotioCP1x/V7vpVGspu8pw3rzcwI0YhoOCBHWNEru0XI9+u5umrlxRiYOSWm1rd40lXu0nKk5oBEjS0AIaDnl1haaudEWq+m75c/O/3vtcxWUVMk0mZoDGFkCglDT/+PfXVCiBStbB6Xvn9/X28hLMzdO5WTTd8MPiyEpJtKQy90QlKSGILVw1ZdyuSsZbUJYCooG7yVLluh3v/udXC6XRo0apUWLFmny5Mmn3H/Dhg2aO3euvvrqK/Xt21fz58/XnDlzzvj1aPBGoLjclcotKm92GYqW21qOIkVI8rTxXK/cMl4DUxJo5sYZaWj6bvhZ2X7ghH62fHurfYamdtO3R8tajTadyc8t0BXCtsF7xYoVuuuuu7RkyRJNmjRJf/rTnzRjxgzt2rVLGRmth4Rzc3M1c+ZM3XLLLXrppZf0wQcf6Gc/+5l69+6ta6+9tkOvXeCu9H7YZ/rHgG322WaXOs50W9MQZH0R1XtM/eLNnfKYDf/HP7xPknIKSpv9nLYVlKwpN5q5caaa/awMUJtTc3sKy7z/7TGlBSu/1D9zCrU250izACWp1c9yR0JVKP5+s61rjneBn0Y8bT+ydPHFF+uCCy7Q008/7d02YsQIXXPNNcrOzm61/7333qu33npLOTk53m1z5szR559/rg8//PCMXtNKpgPu/psWXH2+JOnR93Z7f/HnX5nFNptvu3JUmt776ohPnuuexm2/a7Jt3vQsmZIeX3Ny292XD5Nk6vf/t6ch3BjS7ZcOkceUlrz/rczGbTdNGKC6elMvf5wnUw0haNKQXvrg22PeM5I66qeTB2nZ5lzVm6Z3yo3+EnTGiq15um/VzsafKel75zj11heus3ouQ9LlI1L1fzmF3p/5myYOUFREhJZ9kOv93bj90iGKMAz9Yd2eZr9XhiE9sfYb77bpI9O0ZteRdn9H7fT3iG1d9/f84be268Dvf+DzkSVbh6WamholJCTotdde0/e//33v9jvvvFM7duzQhg0bWj1mypQpOv/88/Xkk096t73xxhv6wQ9+oIqKCkVHR7d6THV1taqrq733S0pKlJ6ervS7/qaIWBpiYS/WejiWSMPQ5gWXShJTbvCpplNzkjTp4XXtnkQABJqnukL5i3wflmzd4F1UVKT6+nqlpaU1256WlqaCgoI2H1NQUNDm/nV1dSoqKmrzMdnZ2XI4HN5benq6b94A0AmGTq62bYk0DC2YOdzbjNu0cbth3ZxeBCX4TNOfqZaN4JGGoYUzhre+fErjDQgltu9Zkhqult2UaZqttp1u/7a2WxYuXKi5c+d671sjS1Jjmmwxd882+29ryU61tbUt0jA0f0aWHv3H7mZTaZKaTIWcnF67ekxfRpHQ5WaPy9CUYb2b/ex1T4hu9TMqNf+5nf/dLD3y7tdh+/vNti483qd+WKfYOiylpKQoMjKy1ShSYWFhq9EjS58+fdrcPyoqSr169WrzMbGxsYqNjW21PdIwlH1tQ7Pi6f4YsM1e2645v6/e3H444HV0ZNupQlDLLyepRTMu0IVa/uy1FaCk1j+3ZxKqQvn3m21dc7wXvPLJaX+Gz4ate5akhgbvsWPHasmSJd5tI0eO1L/+67+essH77bff1q5du7zb/uu//ks7duzocIP37rwCDUtvCGVN5+6bduKzzb7b7FJHR7YBoSzcf7/Z5v/j/U3+EWVl9AmvBm+pYemAG264QUuXLtWECRP0zDPP6Nlnn9VXX32lAQMGaOHChTp06JBefPFFSQ1LB4wePVq33nqrbrnlFn344YeaM2eOXnnllTNeOoB1lgAACD5hu87S7NmzdezYMf3617+Wy+XS6NGjtXr1ag0YMECS5HK5lJeX590/MzNTq1ev1t13362nnnpKffv21eLFizu8xhIAAIAUBCNLgcDIEgAAwcdf39+2XjoAAAAg0AhLAAAA7SAsAQAAtIOwBAAA0A7CEgAAQDsISwAAAO0gLAEAALSDsAQAANAOwhIAAEA7bH+5k0CwFjUvKSkJcCUAAOBMWd/bvr44CWGpDceOHZMkpaenB7gSAADQUceOHZPD4fDZ8xGW2tCzZ09JUl5enk8/bJydkpISpaenKz8/n2v1BRjHwj44FvbBsbAPt9utjIwM7/e4rxCW2hAR0dDK5XA4+MG3keTkZI6HTXAs7INjYR8cC/uwvsd99nw+fTYAAIAQQ1gCAABoB2GpDbGxsfrVr36l2NjYQJcCcTzshGNhHxwL++BY2Ie/joVh+vr8OgAAgBDCyBIAAEA7CEsAAADtICwBAAC0g7AEAADQjrANS0uWLFFmZqbi4uI0duxYbdq0qd39N2zYoLFjxyouLk6DBg3S0qVLu6jS0NeRY7Fq1SpdccUV6t27t5KTkzVhwgS99957XVht6Ovo74blgw8+UFRUlM477zz/FhhGOnosqqurdf/992vAgAGKjY3V4MGD9dxzz3VRtaGto8fi5Zdf1pgxY5SQkCCn06n/+I//8F5KC2dv48aNuuqqq9S3b18ZhqE333zztI/xyfe3GYZeffVVMzo62nz22WfNXbt2mXfeeaeZmJhoHjhwoM399+3bZyYkJJh33nmnuWvXLvPZZ581o6Ojzddff72LKw89HT0Wd955p/nII4+Yn3zyifnNN9+YCxcuNKOjo83PPvusiysPTR09Hpbi4mJz0KBB5vTp080xY8Z0TbEh7myOxdVXX21efPHF5tq1a83c3Fzz448/Nj/44IMurDo0dfRYbNq0yYyIiDCffPJJc9++feamTZvMUaNGmddcc00XVx56Vq9ebd5///3mypUrTUnmG2+80e7+vvr+DsuwdNFFF5lz5sxptm348OHmggUL2tx//vz55vDhw5ttu/XWW83x48f7rcZw0dFj0ZaRI0eaDz74oK9LC0tnezxmz55t/uIXvzB/9atfEZZ8pKPH4h//+IfpcDjMY8eOdUV5YaWjx+J3v/udOWjQoGbbFi9ebPbv399vNYajMwlLvvr+DrtpuJqaGn366aeaPn16s+3Tp0/Xli1b2nzMhx9+2Gr/K6+8Utu2bVNtba3fag11Z3MsWvJ4PCotLfX5RRPD0dkej+eff1579+7Vr371K3+XGDbO5li89dZbuvDCC/Xoo4+qX79+GjZsmObNm6fKysquKDlknc2xmDhxog4ePKjVq1fLNE0dOXJEr7/+ur73ve91Rclowlff32F3Id2ioiLV19crLS2t2fa0tDQVFBS0+ZiCgoI296+rq1NRUZGcTqff6g1lZ3MsWnr88cdVXl6uH/zgB/4oMayczfHYs2ePFixYoE2bNikqKuz+nPjN2RyLffv2afPmzYqLi9Mbb7yhoqIi/exnP9Px48fpW+qEszkWEydO1Msvv6zZs2erqqpKdXV1uvrqq/WHP/yhK0pGE776/g67kSWLYRjN7pum2Wrb6fZvazs6rqPHwvLKK6/ogQce0IoVK5Samuqv8sLOmR6P+vp6/fCHP9SDDz6oYcOGdVV5YaUjvxsej0eGYejll1/WRRddpJkzZ+qJJ57QCy+8wOiSD3TkWOzatUt33HGHfvnLX+rTTz/Vu+++q9zcXM2ZM6crSkULvvj+Drv/FUxJSVFkZGSr/yMoLCxslT4tffr0aXP/qKgo9erVy2+1hrqzORaWFStW6D//8z/12muv6fLLL/dnmWGjo8ejtLRU27Zt0/bt23X77bdLavjCNk1TUVFRWrNmjb7zne90Se2h5mx+N5xOp/r16yeHw+HdNmLECJmmqYMHD2ro0KF+rTlUnc2xyM7O1qRJk3TPPfdIks4991wlJiZq8uTJ+u1vf8tsRBfy1fd32I0sxcTEaOzYsVq7dm2z7WvXrtXEiRPbfMyECRNa7b9mzRpdeOGFio6O9lutoe5sjoXUMKL0k5/8RMuXL6cHwIc6ejySk5P15ZdfaseOHd7bnDlzlJWVpR07dujiiy/uqtJDztn8bkyaNEmHDx9WWVmZd9s333yjiIgI9e/f36/1hrKzORYVFRWKiGj+9RoZGSnp5KgGuobPvr871A4eIqzTQJctW2bu2rXLvOuuu8zExERz//79pmma5oIFC8wbbrjBu7916uHdd99t7tq1y1y2bBlLB/hIR4/F8uXLzaioKPOpp54yXS6X91ZcXByotxBSOno8WuJsON/p6LEoLS01+/fvb1533XXmV199ZW7YsMEcOnSoefPNNwfqLYSMjh6L559/3oyKijKXLFli7t2719y8ebN54YUXmhdddFGg3kLIKC0tNbdv325u377dlGQ+8cQT5vbt273LOPjr+zssw5JpmuZTTz1lDhgwwIyJiTEvuOACc8OGDd5/u+mmm8ypU6c22//99983zz//fDMmJsYcOHCg+fTTT3dxxaGrI8di6tSppqRWt5tuuqnrCw9RHf3daIqw5FsdPRY5OTnm5ZdfbsbHx5v9+/c3586da1ZUVHRx1aGpo8di8eLF5siRI834+HjT6XSaP/rRj8yDBw92cdWhZ/369e1+B/jr+9swTcYEAQAATiXsepYAAAA6grAEAADQDsISAABAOwhLAAAA7SAsAQAAtIOwBAAA0A7CEgAAQDsISwAAAO0gLAEIGQ888IAMw9ADDzzQqecZOHCgDMPQ/v37O/S4adOmyTAMvf/++63+raKiQvPmzVNmZqaio6NlGIZ+8pOfdKpOAF0jKtAFAEA4uOWWW7R8+XIlJCTovPPOU2xsrIYNGyZJ3nDX2ZAHwD8ISwDgIxkZGcrKylJCQkKz7SdOnNCrr76qhIQEff3110pPT2/27w8++KAkwhJgV4QlAPCRF198sc3te/bskcfj0ejRo1sFJQD2R88SAPhZZWWlJCk+Pj7AlQA4G4QlAD5nGIYMw5AkrVy5UlOmTFH37t1bNU0fP35c999/v0aPHq3ExEQlJSVp/PjxevbZZ+XxeNp87rq6Oj366KMaPny44uLi1K9fP91yyy06cuTIKesxTVMvvviit46YmBj16dNHY8eO1fz583Xw4MFTPvajjz7SjBkz1KNHDyUmJmry5Mlat25dm/u2bPDev3+/DMPQtGnTJEkbNmzwfjZWg7f1OTX93KxbRxvMAfgH03AA/OaRRx7RggULlJaWpmHDhjX78v/qq6905ZVX6tChQ4qJidGQIUNUXV2tTz75RB9//LHWrFmjv/3tb83CRH19vWbNmqW3335bkjRs2DDFx8fr+eef15o1a3T11Ve3Wcc999yjxx9/XFJDX9GwYcNUVFSknTt36rPPPtPEiRPVv3//Vo/73//9X82dO1fJyckaPHiwvv32W23evFlXXnml1q5d6w1BpxIXF6dJkybJ7XZr586dSk5O1jnnnOP992HDhmnSpEn64IMPJEmTJk1q9XgANmACgI9JMiWZMTEx5jPPPGN6PB7TNE2ztrbWrK2tNcvKyszBgwebksw77rjDdLvd3sd+9dVX5qhRo0xJ5h//+Mdmz/vkk0+akswePXqYmzZt8m7Pzc01R48ebUZHR5uSzF/96lfefyssLDQjIiJMh8Nhbt68udnzVVZWmq+88or5+eefN9s+YMAAU5IZHR1tZmdnm3V1daZpmmZNTY35ox/9yJRkXnzxxa3e99SpU01J5vr165ttX79+vSnJnDp1arufFwB7YhoOgN/ceuutuuWWW7yjQ1FRUYqKitJzzz2nvXv36vvf/76efPJJJScnex8zcuRILV++XIZh6IknnvBuN03TOzr029/+Vpdccon33wYOHKi//OUvqq2tbVXD3r175fF49J3vfKfNkZvrr79e5557bpv1f/e739WCBQsUGRkpSYqOjtaiRYsUGxurjz/+WCdOnDjLTwZAMCEsAfCbG2+8sc3tq1atkiTdfPPNbf77ueeeq4EDB2rfvn3efqKcnBzl5eUpLi6uzcUcL7jgAo0fP77Vduvss48//lh5eXkdqr+t+lJSUjRw4EBJ0r59+zr0fACCEz1LAPxmxIgRbW7/8ssvJUm//OUv9dBDD7W5T1FRkSTp0KFD6t+/v7755htJ0oABA1qtY9T09T766KNm2/r166d/+7d/02uvvaYhQ4bo0ksv1bRp0zR58mSNHz9eUVGn/jM4ePDgNrenpqZq9+7dKisrO+VjAYQOwhIAv0lMTGxzu9vtliR9+umnp30O67R7K5j07t37lPumpaW1uf3FF1/UyJEj9ec//1lr1qzRmjVrvM81f/58zZ07VxERrQfaT1W/ta9pmqetH0DwYxoOQJfr1q2bpIbFGk3TbPdmnXFmPebo0aOnfN7CwsI2t8fFxemBBx7QwYMHlZOToz/96U+66qqrdOzYMd1zzz3NeqMAoCXCEoAuN3LkSEnSzp07z/gx1nXU8vLyVFFR0eY+OTk5p32e4cOH66c//aneeustLVmyRJL07LPPnnEdAMIPYQlAl5s1a5YkafHixWc8lTV8+HClp6ersrKyzcuK7NixQx9++GGH6rAawg8fPtyhx/matbK3NeUIwF4ISwC63K233qpBgwZp/fr1+tGPfiSXy9Xs38vKyvS3v/1Nc+fO9W6LiIjw3r///vu1ZcsW778dOHBAN910k6Kjo1u91j//+U/dc8892rVrV6vX+N3vfiep4Uy6QBo0aJCkhhW+AdgPYQlAl+vWrZveeecdZWZm6pVXXlH//v01cuRIjR8/XllZWerevbtmz57dLBBJ0s9//nPNnDlTx48f16RJkzRixAidf/75GjJkiIqLi3Xrrbe2eq3S0lI99thjGjVqlFJTUzVu3Didd955SktL08svvyyHw6Hf//73XfXW2zR79mxJ0r/8y7/oggsu0LRp0zRt2jQVFBQEtC4ADTgbDkBADB8+XJ9//rmWLFmiN954Qzk5Odq3b5+cTqemTp2qmTNn6tprr232mMjISL355pt6/PHH9fzzz2vfvn3q1auXbrrpJv3P//yPnn766VavM3nyZC1evFhr167Vzp07tWvXLkVHR2vIkCH67ne/q7vvvlt9+vTpqrfdpgULFqi+vl6vvvqqdu3aperqaklSVVVVQOsC0MAwOfcVAADglJiGAwAAaAdhCQAAoB2EJQAAgHYQlgAAANpBWAIAAGgHYQkAAKAdhCUAAIB2EJYAAADaQVgCAABoB2EJAACgHYQlAACAdhCWAAAA2kFYAgAAaMf/B0pKo8PvIN7RAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xvals = np.linspace(0, 1., 301)\n", "\n", "axes_m = ens.plot_native(xlim=(0,1.), label='Original', marker='.')\n", "\n", "for i in range(10):\n", " ens_m = qp.convert(ens[0], 'mixmod', xvals=xvals, ncomps=3)\n", " _ = ens_m.plot(axes=axes_m, label=f'iteration_{i}', color=np.random.rand(3,))\n", "\n", "leg_m = axes_m.legend()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Reproducing the above plots, but this time specifying the number of random variates to be drawn from the input distribution to be 100_000 instead of the default 1000. Note that the peaks are now more consistent across the 10 iterations, but still show some jitter." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "Opps, we handle this kind of input to mixmod._ppf 2", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[3], line 6\u001b[0m\n\u001b[1;32m 3\u001b[0m axes_m \u001b[38;5;241m=\u001b[39m ens\u001b[38;5;241m.\u001b[39mplot_native(xlim\u001b[38;5;241m=\u001b[39m(\u001b[38;5;241m0\u001b[39m,\u001b[38;5;241m1.\u001b[39m), label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mOriginal\u001b[39m\u001b[38;5;124m'\u001b[39m, marker\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m10\u001b[39m):\n\u001b[0;32m----> 6\u001b[0m ens_m \u001b[38;5;241m=\u001b[39m \u001b[43mqp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconvert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mens\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mmixmod\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mxvals\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mxvals\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mncomps\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnsamples\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m100_000\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 7\u001b[0m _ \u001b[38;5;241m=\u001b[39m ens_m\u001b[38;5;241m.\u001b[39mplot(axes\u001b[38;5;241m=\u001b[39maxes_m, label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124miteration_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m, color\u001b[38;5;241m=\u001b[39mnp\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39mrand(\u001b[38;5;241m3\u001b[39m,))\n\u001b[1;32m 9\u001b[0m leg_m \u001b[38;5;241m=\u001b[39m axes_m\u001b[38;5;241m.\u001b[39mlegend()\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/factory.py:300\u001b[0m, in \u001b[0;36mFactory.convert\u001b[0;34m(self, in_dist, class_name, **kwds)\u001b[0m\n\u001b[1;32m 295\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m extract_func \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[1;32m 296\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\n\u001b[1;32m 297\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClass named \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m does not have a extraction_method named \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 298\u001b[0m \u001b[38;5;241m%\u001b[39m (class_name, method)\n\u001b[1;32m 299\u001b[0m )\n\u001b[0;32m--> 300\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mextract_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43min_dist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds_copy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 301\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcreate(class_name, data, method)\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/conversion_funcs.py:227\u001b[0m, in \u001b[0;36mextract_mixmod_fit_samples\u001b[0;34m(in_dist, **kwargs)\u001b[0m\n\u001b[1;32m 225\u001b[0m n_sample \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnsamples\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;241m1000\u001b[39m)\n\u001b[1;32m 226\u001b[0m random_state \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrandom_state\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m--> 227\u001b[0m samples \u001b[38;5;241m=\u001b[39m \u001b[43min_dist\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrvs\u001b[49m\u001b[43m(\u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mn_sample\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrandom_state\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 229\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mmixmod_helper\u001b[39m(samps):\n\u001b[1;32m 230\u001b[0m estimator \u001b[38;5;241m=\u001b[39m mixture\u001b[38;5;241m.\u001b[39mGaussianMixture(n_components\u001b[38;5;241m=\u001b[39mn_comps)\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/ensemble.py:487\u001b[0m, in \u001b[0;36mEnsemble.rvs\u001b[0;34m(self, size, random_state)\u001b[0m\n\u001b[1;32m 475\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrvs\u001b[39m(\u001b[38;5;28mself\u001b[39m, size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, random_state\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 476\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 477\u001b[0m \u001b[38;5;124;03m Generate samples from this ensmeble\u001b[39;00m\n\u001b[1;32m 478\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 485\u001b[0m \u001b[38;5;124;03m -------\u001b[39;00m\n\u001b[1;32m 486\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 487\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_frozen\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrvs\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 488\u001b[0m \u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_frozen\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnpdf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrandom_state\u001b[49m\n\u001b[1;32m 489\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/software/anaconda3/envs/qp/lib/python3.12/site-packages/scipy/stats/_distn_infrastructure.py:532\u001b[0m, in \u001b[0;36mrv_frozen.rvs\u001b[0;34m(self, size, random_state)\u001b[0m\n\u001b[1;32m 530\u001b[0m kwds \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkwds\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[1;32m 531\u001b[0m kwds\u001b[38;5;241m.\u001b[39mupdate({\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msize\u001b[39m\u001b[38;5;124m'\u001b[39m: size, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrandom_state\u001b[39m\u001b[38;5;124m'\u001b[39m: random_state})\n\u001b[0;32m--> 532\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdist\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrvs\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/software/anaconda3/envs/qp/lib/python3.12/site-packages/scipy/stats/_distn_infrastructure.py:1108\u001b[0m, in \u001b[0;36mrv_generic.rvs\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 1105\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1106\u001b[0m random_state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_random_state\n\u001b[0;32m-> 1108\u001b[0m vals \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_rvs\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msize\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrandom_state\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1110\u001b[0m vals \u001b[38;5;241m=\u001b[39m vals \u001b[38;5;241m*\u001b[39m scale \u001b[38;5;241m+\u001b[39m loc\n\u001b[1;32m 1112\u001b[0m \u001b[38;5;66;03m# do not forget to restore the _random_state\u001b[39;00m\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/pdf_gen.py:315\u001b[0m, in \u001b[0;36mPdf_rows_gen._rvs\u001b[0;34m(self, size, random_state, *args)\u001b[0m\n\u001b[1;32m 312\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_rvs\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, random_state\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 313\u001b[0m \u001b[38;5;66;03m# Use basic inverse cdf algorithm for RV generation as default.\u001b[39;00m\n\u001b[1;32m 314\u001b[0m U \u001b[38;5;241m=\u001b[39m random_state\u001b[38;5;241m.\u001b[39muniform(size\u001b[38;5;241m=\u001b[39msize)\n\u001b[0;32m--> 315\u001b[0m Y \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_ppf\u001b[49m\u001b[43m(\u001b[49m\u001b[43mU\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 316\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m size \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[1;32m 317\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Y\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/mixmod_pdf.py:131\u001b[0m, in \u001b[0;36mmixmod_gen._ppf\u001b[0;34m(self, x, row)\u001b[0m\n\u001b[1;32m 129\u001b[0m cdf_vals \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcdf(grid, np\u001b[38;5;241m.\u001b[39mexpand_dims(rr, \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m))\n\u001b[1;32m 130\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[0;32m--> 131\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 132\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mOpps, we handle this kind of input to mixmod._ppf \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mcase_idx\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 133\u001b[0m )\n\u001b[1;32m 134\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m interpolate_multi_x_y(\n\u001b[1;32m 135\u001b[0m x, row, cdf_vals, grid, bounds_error\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, fill_value\u001b[38;5;241m=\u001b[39m(min_val, max_val)\n\u001b[1;32m 136\u001b[0m )\u001b[38;5;241m.\u001b[39mravel()\n", "\u001b[0;31mValueError\u001b[0m: Opps, we handle this kind of input to mixmod._ppf 2" ] }, { "data": { "image/png": "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VF1Xr9goe9QFwPdsP7LUktvtliT17NnzlPt8+OGHmj59erNtV155pbZt26ba2tpW+2dnZ8vhcHhv6enpvi0aQKfYrblbknolxighJlKmKR08URnocgD4UVCFJdM0NXfuXF1yySUaPXr0KfcrKChQWlpas21paWmqq6tTUVFRq/0XLlwot9vtveXn5/u8dgBnz7tsgE36lSTJMAxveGMqDghttp+Ga+r222/XF198oc2bN592X8NovsKvaZptbpek2NhYxcbG+qZIAD53wGruttHIktQwFfd1QSlnxAEhLmjC0s9//nO99dZb2rhxo/r379/uvn369FFBQUGzbYWFhYqKilKvXr38WSYAP/BOw9loZEk6OS2Yd5xpOCCU2X4azjRN3X777Vq1apXWrVunzMzM0z5mwoQJWrt2bbNta9as0YUXXqjo6Gh/lQrAT+y2erclo/HSK3nHGVkCQpntw9Jtt92ml156ScuXL1dSUpIKCgpUUFCgysqT/ye3cOFC3Xjjjd77c+bM0YEDBzR37lzl5OToueee07JlyzRv3rxAvAUAnVBVW6+CkipJ9rguXFMDWMUbCAu2D0tPP/203G63pk2bJqfT6b2tWLHCu4/L5VJeXp73fmZmplavXq33339f5513nn7zm99o8eLFbS4bAMDeDp5oCCJx0RGqqq0LcDXNWSNduUXlOlxMYAJClWFanc/wKikpkcPhkNvtVnJycqDLAcLaA2/t1AtbDkiSIgwpe9Y5mj0uI8BVNVj+8QHd98ZOSfarDQhH/vr+tv3IEoDw5XJX6i+NQUmSPKZ036qdcrkD31DtclfqF2/u9N63U20AfIuwBMC2covK1XLou940tb8o8FNeuUXl8rQozi61AfAtwhIA28pMad3QHWkYGpgS+LPiMlMSFdFi2Ta71AbAtwhLAGzL6YhXX0ec936kYeihWaPldMQHsKoGTke8smedIysvGZJtagPgW0GzKCWA8FReUy9JevTaczV5WIqtwsjscRkqq6rTb97J0diB3WnuBkIUYQmAbZVW1cpd2XDx65nnOtUt1n5/skb1c0iSikprAlwJAH9hGg6AbR0qbjizrHtCtC2DkiT179Ew0nW4uEqelh3fAEICYQmAbR060RCWrEBiR32S4xQZYaim3qOjZdWBLgeAHxCWANjWwcaw1K+7fcNSVGSE+iQ3NKFb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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xvals = np.linspace(0, 1., 301)\n", "\n", "axes_m = ens.plot_native(xlim=(0,1.), label='Original', marker='.')\n", "\n", "for i in range(10):\n", " ens_m = qp.convert(ens, 'mixmod', xvals=xvals, ncomps=3, nsamples=100_000)\n", " _ = ens_m.plot(axes=axes_m, label=f'iteration_{i}', color=np.random.rand(3,))\n", "\n", "leg_m = axes_m.legend()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Here we use the default number of samples (1000), but specify the random_state value for drawing the random variates. This results in all iterations being identical, and reproducible. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "Opps, we handle this kind of input to mixmod._ppf 2", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[4], line 6\u001b[0m\n\u001b[1;32m 3\u001b[0m axes_m \u001b[38;5;241m=\u001b[39m ens\u001b[38;5;241m.\u001b[39mplot_native(xlim\u001b[38;5;241m=\u001b[39m(\u001b[38;5;241m0\u001b[39m,\u001b[38;5;241m1.\u001b[39m), label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mOriginal\u001b[39m\u001b[38;5;124m'\u001b[39m, marker\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m10\u001b[39m):\n\u001b[0;32m----> 6\u001b[0m ens_m \u001b[38;5;241m=\u001b[39m \u001b[43mqp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconvert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mens\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mmixmod\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mxvals\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mxvals\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mncomps\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m42\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 7\u001b[0m _ \u001b[38;5;241m=\u001b[39m ens_m\u001b[38;5;241m.\u001b[39mplot(axes\u001b[38;5;241m=\u001b[39maxes_m, label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124miteration_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m, color\u001b[38;5;241m=\u001b[39mnp\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39mrand(\u001b[38;5;241m3\u001b[39m,))\n\u001b[1;32m 9\u001b[0m leg_m \u001b[38;5;241m=\u001b[39m axes_m\u001b[38;5;241m.\u001b[39mlegend()\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/factory.py:300\u001b[0m, in \u001b[0;36mFactory.convert\u001b[0;34m(self, in_dist, class_name, **kwds)\u001b[0m\n\u001b[1;32m 295\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m extract_func \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[1;32m 296\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\n\u001b[1;32m 297\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClass named \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m does not have a extraction_method named \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 298\u001b[0m \u001b[38;5;241m%\u001b[39m (class_name, method)\n\u001b[1;32m 299\u001b[0m )\n\u001b[0;32m--> 300\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mextract_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43min_dist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds_copy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 301\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcreate(class_name, data, method)\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/conversion_funcs.py:227\u001b[0m, in \u001b[0;36mextract_mixmod_fit_samples\u001b[0;34m(in_dist, **kwargs)\u001b[0m\n\u001b[1;32m 225\u001b[0m n_sample \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnsamples\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;241m1000\u001b[39m)\n\u001b[1;32m 226\u001b[0m random_state \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrandom_state\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m--> 227\u001b[0m samples \u001b[38;5;241m=\u001b[39m \u001b[43min_dist\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrvs\u001b[49m\u001b[43m(\u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mn_sample\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrandom_state\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 229\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mmixmod_helper\u001b[39m(samps):\n\u001b[1;32m 230\u001b[0m estimator \u001b[38;5;241m=\u001b[39m mixture\u001b[38;5;241m.\u001b[39mGaussianMixture(n_components\u001b[38;5;241m=\u001b[39mn_comps)\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/ensemble.py:487\u001b[0m, in \u001b[0;36mEnsemble.rvs\u001b[0;34m(self, size, random_state)\u001b[0m\n\u001b[1;32m 475\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrvs\u001b[39m(\u001b[38;5;28mself\u001b[39m, size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, random_state\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 476\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 477\u001b[0m \u001b[38;5;124;03m Generate samples from this ensmeble\u001b[39;00m\n\u001b[1;32m 478\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 485\u001b[0m \u001b[38;5;124;03m -------\u001b[39;00m\n\u001b[1;32m 486\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 487\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_frozen\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrvs\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 488\u001b[0m \u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_frozen\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnpdf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrandom_state\u001b[49m\n\u001b[1;32m 489\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/software/anaconda3/envs/qp/lib/python3.12/site-packages/scipy/stats/_distn_infrastructure.py:532\u001b[0m, in \u001b[0;36mrv_frozen.rvs\u001b[0;34m(self, size, random_state)\u001b[0m\n\u001b[1;32m 530\u001b[0m kwds \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkwds\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[1;32m 531\u001b[0m kwds\u001b[38;5;241m.\u001b[39mupdate({\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msize\u001b[39m\u001b[38;5;124m'\u001b[39m: size, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrandom_state\u001b[39m\u001b[38;5;124m'\u001b[39m: random_state})\n\u001b[0;32m--> 532\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdist\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrvs\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/software/anaconda3/envs/qp/lib/python3.12/site-packages/scipy/stats/_distn_infrastructure.py:1108\u001b[0m, in \u001b[0;36mrv_generic.rvs\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 1105\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1106\u001b[0m random_state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_random_state\n\u001b[0;32m-> 1108\u001b[0m vals \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_rvs\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msize\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrandom_state\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1110\u001b[0m vals \u001b[38;5;241m=\u001b[39m vals \u001b[38;5;241m*\u001b[39m scale \u001b[38;5;241m+\u001b[39m loc\n\u001b[1;32m 1112\u001b[0m \u001b[38;5;66;03m# do not forget to restore the _random_state\u001b[39;00m\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/pdf_gen.py:315\u001b[0m, in \u001b[0;36mPdf_rows_gen._rvs\u001b[0;34m(self, size, random_state, *args)\u001b[0m\n\u001b[1;32m 312\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_rvs\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, random_state\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 313\u001b[0m \u001b[38;5;66;03m# Use basic inverse cdf algorithm for RV generation as default.\u001b[39;00m\n\u001b[1;32m 314\u001b[0m U \u001b[38;5;241m=\u001b[39m random_state\u001b[38;5;241m.\u001b[39muniform(size\u001b[38;5;241m=\u001b[39msize)\n\u001b[0;32m--> 315\u001b[0m Y \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_ppf\u001b[49m\u001b[43m(\u001b[49m\u001b[43mU\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 316\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m size \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[1;32m 317\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Y\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/mixmod_pdf.py:131\u001b[0m, in \u001b[0;36mmixmod_gen._ppf\u001b[0;34m(self, x, row)\u001b[0m\n\u001b[1;32m 129\u001b[0m cdf_vals \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcdf(grid, np\u001b[38;5;241m.\u001b[39mexpand_dims(rr, \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m))\n\u001b[1;32m 130\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[0;32m--> 131\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 132\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mOpps, we handle this kind of input to mixmod._ppf \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mcase_idx\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 133\u001b[0m )\n\u001b[1;32m 134\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m interpolate_multi_x_y(\n\u001b[1;32m 135\u001b[0m x, row, cdf_vals, grid, bounds_error\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, fill_value\u001b[38;5;241m=\u001b[39m(min_val, max_val)\n\u001b[1;32m 136\u001b[0m )\u001b[38;5;241m.\u001b[39mravel()\n", "\u001b[0;31mValueError\u001b[0m: Opps, we handle this kind of input to mixmod._ppf 2" ] }, { "data": { "image/png": "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VF1Xr9goe9QFwPdsP7LUktvtliT17NnzlPt8+OGHmj59erNtV155pbZt26ba2tpW+2dnZ8vhcHhv6enpvi0aQKfYrblbknolxighJlKmKR08URnocgD4UVCFJdM0NXfuXF1yySUaPXr0KfcrKChQWlpas21paWmqq6tTUVFRq/0XLlwot9vtveXn5/u8dgBnz7tsgE36lSTJMAxveGMqDghttp+Ga+r222/XF198oc2bN592X8NovsKvaZptbpek2NhYxcbG+qZIAD53wGruttHIktQwFfd1QSlnxAEhLmjC0s9//nO99dZb2rhxo/r379/uvn369FFBQUGzbYWFhYqKilKvXr38WSYAP/BOw9loZEk6OS2Yd5xpOCCU2X4azjRN3X777Vq1apXWrVunzMzM0z5mwoQJWrt2bbNta9as0YUXXqjo6Gh/lQrAT+y2erclo/HSK3nHGVkCQpntw9Jtt92ml156ScuXL1dSUpIKCgpUUFCgysqT/ye3cOFC3Xjjjd77c+bM0YEDBzR37lzl5OToueee07JlyzRv3rxAvAUAnVBVW6+CkipJ9rguXFMDWMUbCAu2D0tPP/203G63pk2bJqfT6b2tWLHCu4/L5VJeXp73fmZmplavXq33339f5513nn7zm99o8eLFbS4bAMDeDp5oCCJx0RGqqq0LcDXNWSNduUXlOlxMYAJClWFanc/wKikpkcPhkNvtVnJycqDLAcLaA2/t1AtbDkiSIgwpe9Y5mj0uI8BVNVj+8QHd98ZOSfarDQhH/vr+tv3IEoDw5XJX6i+NQUmSPKZ036qdcrkD31DtclfqF2/u9N63U20AfIuwBMC2covK1XLou940tb8o8FNeuUXl8rQozi61AfAtwhIA28pMad3QHWkYGpgS+LPiMlMSFdFi2Ta71AbAtwhLAGzL6YhXX0ec936kYeihWaPldMQHsKoGTke8smedIysvGZJtagPgW0GzKCWA8FReUy9JevTaczV5WIqtwsjscRkqq6rTb97J0diB3WnuBkIUYQmAbZVW1cpd2XDx65nnOtUt1n5/skb1c0iSikprAlwJAH9hGg6AbR0qbjizrHtCtC2DkiT179Ew0nW4uEqelh3fAEICYQmAbR060RCWrEBiR32S4xQZYaim3qOjZdWBLgeAHxCWANjWwcaw1K+7fcNSVGSE+iQ3NKFb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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xvals = np.linspace(0, 1., 301)\n", "\n", "axes_m = ens.plot_native(xlim=(0,1.), label='Original', marker='.')\n", "\n", "for i in range(10):\n", " ens_m = qp.convert(ens, 'mixmod', xvals=xvals, ncomps=3, random_state=42)\n", " _ = ens_m.plot(axes=axes_m, label=f'iteration_{i}', color=np.random.rand(3,))\n", "\n", "leg_m = axes_m.legend()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Finally, holding random_state constant, and increasing the number of samples results in the converted distributions consistently having the same values and showing a better reproduction of the input distribution." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "Opps, we handle this kind of input to mixmod._ppf 2", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[5], line 6\u001b[0m\n\u001b[1;32m 3\u001b[0m axes_m \u001b[38;5;241m=\u001b[39m ens\u001b[38;5;241m.\u001b[39mplot_native(xlim\u001b[38;5;241m=\u001b[39m(\u001b[38;5;241m0\u001b[39m,\u001b[38;5;241m1.\u001b[39m), label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mOriginal\u001b[39m\u001b[38;5;124m'\u001b[39m, marker\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m10\u001b[39m):\n\u001b[0;32m----> 6\u001b[0m ens_m \u001b[38;5;241m=\u001b[39m \u001b[43mqp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconvert\u001b[49m\u001b[43m(\u001b[49m\u001b[43mens\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mmixmod\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mxvals\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mxvals\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mncomps\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnsamples\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m100_000\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m42\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 7\u001b[0m _ \u001b[38;5;241m=\u001b[39m ens_m\u001b[38;5;241m.\u001b[39mplot(axes\u001b[38;5;241m=\u001b[39maxes_m, label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124miteration_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mi\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m, color\u001b[38;5;241m=\u001b[39mnp\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39mrand(\u001b[38;5;241m3\u001b[39m,))\n\u001b[1;32m 9\u001b[0m leg_m \u001b[38;5;241m=\u001b[39m axes_m\u001b[38;5;241m.\u001b[39mlegend()\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/factory.py:300\u001b[0m, in \u001b[0;36mFactory.convert\u001b[0;34m(self, in_dist, class_name, **kwds)\u001b[0m\n\u001b[1;32m 295\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m extract_func \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[1;32m 296\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\n\u001b[1;32m 297\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClass named \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m does not have a extraction_method named \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 298\u001b[0m \u001b[38;5;241m%\u001b[39m (class_name, method)\n\u001b[1;32m 299\u001b[0m )\n\u001b[0;32m--> 300\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mextract_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43min_dist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds_copy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 301\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcreate(class_name, data, method)\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/conversion_funcs.py:227\u001b[0m, in \u001b[0;36mextract_mixmod_fit_samples\u001b[0;34m(in_dist, **kwargs)\u001b[0m\n\u001b[1;32m 225\u001b[0m n_sample \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnsamples\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;241m1000\u001b[39m)\n\u001b[1;32m 226\u001b[0m random_state \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrandom_state\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m--> 227\u001b[0m samples \u001b[38;5;241m=\u001b[39m \u001b[43min_dist\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrvs\u001b[49m\u001b[43m(\u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mn_sample\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrandom_state\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 229\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mmixmod_helper\u001b[39m(samps):\n\u001b[1;32m 230\u001b[0m estimator \u001b[38;5;241m=\u001b[39m mixture\u001b[38;5;241m.\u001b[39mGaussianMixture(n_components\u001b[38;5;241m=\u001b[39mn_comps)\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/ensemble.py:487\u001b[0m, in \u001b[0;36mEnsemble.rvs\u001b[0;34m(self, size, random_state)\u001b[0m\n\u001b[1;32m 475\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mrvs\u001b[39m(\u001b[38;5;28mself\u001b[39m, size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, random_state\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 476\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 477\u001b[0m \u001b[38;5;124;03m Generate samples from this ensmeble\u001b[39;00m\n\u001b[1;32m 478\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 485\u001b[0m \u001b[38;5;124;03m -------\u001b[39;00m\n\u001b[1;32m 486\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 487\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_frozen\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrvs\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 488\u001b[0m \u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_frozen\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnpdf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrandom_state\u001b[49m\n\u001b[1;32m 489\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/software/anaconda3/envs/qp/lib/python3.12/site-packages/scipy/stats/_distn_infrastructure.py:532\u001b[0m, in \u001b[0;36mrv_frozen.rvs\u001b[0;34m(self, size, random_state)\u001b[0m\n\u001b[1;32m 530\u001b[0m kwds \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkwds\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[1;32m 531\u001b[0m kwds\u001b[38;5;241m.\u001b[39mupdate({\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msize\u001b[39m\u001b[38;5;124m'\u001b[39m: size, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrandom_state\u001b[39m\u001b[38;5;124m'\u001b[39m: random_state})\n\u001b[0;32m--> 532\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdist\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrvs\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/software/anaconda3/envs/qp/lib/python3.12/site-packages/scipy/stats/_distn_infrastructure.py:1108\u001b[0m, in \u001b[0;36mrv_generic.rvs\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 1105\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1106\u001b[0m random_state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_random_state\n\u001b[0;32m-> 1108\u001b[0m vals \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_rvs\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msize\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrandom_state\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrandom_state\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1110\u001b[0m vals \u001b[38;5;241m=\u001b[39m vals \u001b[38;5;241m*\u001b[39m scale \u001b[38;5;241m+\u001b[39m loc\n\u001b[1;32m 1112\u001b[0m \u001b[38;5;66;03m# do not forget to restore the _random_state\u001b[39;00m\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/pdf_gen.py:315\u001b[0m, in \u001b[0;36mPdf_rows_gen._rvs\u001b[0;34m(self, size, random_state, *args)\u001b[0m\n\u001b[1;32m 312\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_rvs\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, random_state\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 313\u001b[0m \u001b[38;5;66;03m# Use basic inverse cdf algorithm for RV generation as default.\u001b[39;00m\n\u001b[1;32m 314\u001b[0m U \u001b[38;5;241m=\u001b[39m random_state\u001b[38;5;241m.\u001b[39muniform(size\u001b[38;5;241m=\u001b[39msize)\n\u001b[0;32m--> 315\u001b[0m Y \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_ppf\u001b[49m\u001b[43m(\u001b[49m\u001b[43mU\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 316\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m size \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[1;32m 317\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Y\n", "File \u001b[0;32m~/code/desc-rail/forked/qp/src/qp/mixmod_pdf.py:131\u001b[0m, in \u001b[0;36mmixmod_gen._ppf\u001b[0;34m(self, x, row)\u001b[0m\n\u001b[1;32m 129\u001b[0m cdf_vals \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcdf(grid, np\u001b[38;5;241m.\u001b[39mexpand_dims(rr, \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m))\n\u001b[1;32m 130\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m: \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[0;32m--> 131\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 132\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mOpps, we handle this kind of input to mixmod._ppf \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mcase_idx\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 133\u001b[0m )\n\u001b[1;32m 134\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m interpolate_multi_x_y(\n\u001b[1;32m 135\u001b[0m x, row, cdf_vals, grid, bounds_error\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m, fill_value\u001b[38;5;241m=\u001b[39m(min_val, max_val)\n\u001b[1;32m 136\u001b[0m )\u001b[38;5;241m.\u001b[39mravel()\n", "\u001b[0;31mValueError\u001b[0m: Opps, we handle this kind of input to mixmod._ppf 2" ] }, { "data": { "image/png": "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VF1Xr9goe9QFwPdsP7LUktvtliT17NnzlPt8+OGHmj59erNtV155pbZt26ba2tpW+2dnZ8vhcHhv6enpvi0aQKfYrblbknolxighJlKmKR08URnocgD4UVCFJdM0NXfuXF1yySUaPXr0KfcrKChQWlpas21paWmqq6tTUVFRq/0XLlwot9vtveXn5/u8dgBnz7tsgE36lSTJMAxveGMqDghttp+Ga+r222/XF198oc2bN592X8NovsKvaZptbpek2NhYxcbG+qZIAD53wGruttHIktQwFfd1QSlnxAEhLmjC0s9//nO99dZb2rhxo/r379/uvn369FFBQUGzbYWFhYqKilKvXr38WSYAP/BOw9loZEk6OS2Yd5xpOCCU2X4azjRN3X777Vq1apXWrVunzMzM0z5mwoQJWrt2bbNta9as0YUXXqjo6Gh/lQrAT+y2erclo/HSK3nHGVkCQpntw9Jtt92ml156ScuXL1dSUpIKCgpUUFCgysqT/ye3cOFC3Xjjjd77c+bM0YEDBzR37lzl5OToueee07JlyzRv3rxAvAUAnVBVW6+CkipJ9rguXFMDWMUbCAu2D0tPP/203G63pk2bJqfT6b2tWLHCu4/L5VJeXp73fmZmplavXq33339f5513nn7zm99o8eLFbS4bAMDeDp5oCCJx0RGqqq0LcDXNWSNduUXlOlxMYAJClWFanc/wKikpkcPhkNvtVnJycqDLAcLaA2/t1AtbDkiSIgwpe9Y5mj0uI8BVNVj+8QHd98ZOSfarDQhH/vr+tv3IEoDw5XJX6i+NQUmSPKZ036qdcrkD31DtclfqF2/u9N63U20AfIuwBMC2covK1XLou940tb8o8FNeuUXl8rQozi61AfAtwhIA28pMad3QHWkYGpgS+LPiMlMSFdFi2Ta71AbAtwhLAGzL6YhXX0ec936kYeihWaPldMQHsKoGTke8smedIysvGZJtagPgW0GzKCWA8FReUy9JevTaczV5WIqtwsjscRkqq6rTb97J0diB3WnuBkIUYQmAbZVW1cpd2XDx65nnOtUt1n5/skb1c0iSikprAlwJAH9hGg6AbR0qbjizrHtCtC2DkiT179Ew0nW4uEqelh3fAEICYQmAbR060RCWrEBiR32S4xQZYaim3qOjZdWBLgeAHxCWANjWwcaw1K+7fcNSVGSE+iQ3NKFb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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xvals = np.linspace(0, 1., 301)\n", "\n", "axes_m = ens.plot_native(xlim=(0,1.), label='Original', marker='.')\n", "\n", "for i in range(10):\n", " ens_m = qp.convert(ens, 'mixmod', xvals=xvals, ncomps=3, nsamples=100_000, random_state=42)\n", " _ = ens_m.plot(axes=axes_m, label=f'iteration_{i}', color=np.random.rand(3,))\n", "\n", "leg_m = axes_m.legend()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "qp", "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.7" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }