{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Linear Regression with PEST++ GLM\n", "\n", "This notebooks is a small proof of concept / benchmark comparison between PEST and SciPy. It shows how to easily setup the PEST++ solver via pyeumu. The same setup is used for Pastas under the hood of the PestGlmSolver." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Packages" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] } ], "source": [ "import shutil\n", "from pathlib import Path\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "import pyemu\n", "import scipy as sc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create data" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "np.random.seed(pyemu.en.SEED) # set seed\n", "\n", "x = np.linspace(0.0, 1.0, 101) # x coordinates\n", "a = 1.0 # slope\n", "b = 10.0 # y-intercept\n", "y = a * x + b # y coordinates\n", "y_noise = y + np.random.normal(\n", " loc=0.0, scale=0.1, size=len(x)\n", ") # y coordinates with noise" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Scipy Linear Regression" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkcAAAESCAYAAAD36HEuAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAbo1JREFUeJzt3XlcVNX7wPHPzLCv7myOiIZL7oi7pSZqWJZWimm5paZoZdbXsnLJLM2Wn5VrVi6VuaZp7llmmhm4pbkrJoqgqDjsDDP398fICLIIODADPO/Xy1fNmXvPnHtmYB7OPec8KkVRFIQQQgghBABqazdACCGEEMKWSHAkhBBCCJGNBEdCCCGEENlIcCSEEEIIkY0ER0IIIYQQ2UhwJIQQQgiRjQRHQgghhBDZ2Fm7AZZiNBqJiYnB3d0dlUpl7eYIIYQQwsYoikJiYiK+vr6o1fmPD5Wb4CgmJgatVmvtZgghhBDCxkVHR1OzZs18ny83wZG7uztgumAPDw+L1q3X69m+fTvdu3fH3t7eonWLgknfW5f0v/VI31uP9L31lHTf63Q6tFqtOWbIT7kJjrJupXl4eJRIcOTi4oKHh4f8oJQy6Xvrkv63Hul765G+t57S6vt7Tb+RCdlCCCGEENlIcCSEEEIIkY0ER0IIIYQQ2ZSbOUeFYTQaycjIKPJ5er0eOzs70tLSMBgMJdAykR/pe+vKr//t7e3RaDRWbJkQQpScChMcZWRkEBUVhdFoLPK5iqLg7e1NdHS07KFUyqTvraug/q9UqRLe3t7yvgghyp0KERwpisKVK1fQaDRotdoCN37Ki9FoJCkpCTc3tyKfK+6P9L115dX/iqKQkpLC1atXAfDx8bFmE4WoOG5dhhvnoEpd8PQr/jG2wobbWiGCo8zMTFJSUvD19cXFxaXI52fdjnNycpIv6FImfW9d+fW/s7MzAFevXqVGjRpyi02IknZwGWx8BRQjqNTQ6zMIGlT0Y2yFjbe1QnzbZM2VcHBwsHJLhCg/sv7Q0Ov1Vm6JEOXcrct3Agkw/XfjOFN5UY6xFWWgrRUiOMoicyOEsBz5eRKilNw4dyeQyKIY4Mb5oh1TVLcuQ9RuywctJdFWC6sQt9WEEEKIMqtKXdOtp+wBhUoDVeoU7ZiiKMptr6LOHbJ0W0tAhRo5EkIIIcocTz9TcKK6PbdPpYFes3MGIoU5prCKctvr4DKY3RiW9jL99+Ayy1yPlcnIkRBCCGHrggZB3a6mW09V6uQdSBTmmMIo6LZX9jrzC6Lqdr33a1uqrSVERo5slEqlKvDf1KlTrd1EIYQQpcnTDwIeKjiQKMwx95J12yu7vG573e/cIUu0tYTIyJGNunLlivn/V65cyeTJkzl16pS5zM3Nzfz/iqJgMBiws5O3UwghxH3Kuu21cZwp2MnvtlcZmDtUXBVy5EhRFFIyMov0LzXDUORz8vqnKEqh2ujt7W3+5+npiUqlMj8+efIk7u7ubNmyhZYtW+Lo6MiePXsYMmQIvXv3zlHPuHHj6Ny5s/mx0WhkxowZBAQE4OzsTLNmzVizZo0Fe1cIIUSZFzQIxh2FwT+b/pvXZOwyMHeouCrkUEOq3sCDk7dZ5bWPT+uBi4Nluv3NN9/k448/pk6dOlSuXLlQ58yYMYPvvvuOBQsWEBgYyO7du3nuueeoXr06nTp1ski7hBBClAOefrkDnbtXptn43KHiqpDBUXkxbdo0unXrVujj09PT+eCDD/jll19o164dAHXq1GHPnj0sXLhQgiMhhBD5y295f2GCqEKIjo7m8OHDlm93MVTI4MjZXsPxaT0KfbzRaCRRl4i7h/t9p7BwtrdcmoXg4OAiHX/27FlSUlJyBVQZGRm0aNHCYu0SQghRzhRlZVoR9kgyGo3s3LmTefPmsWHDBjw8PFi4cGHJXkshVMjgSKVSFenWltFoJNNBg4uDnU3l93J1dc3xWK1W55rTlD21Q1JSEgCbNm3Czy/nh9nR0bGEWimEEKLMs/Dy/hs3brBkyRIWLFjAmTNnzOXNmzcnISGh5K6jkCpkcFReVa9enWPHjuUoO3z4MPb29gA8+OCDODo6cvHiRbmFJoQQovAKuzKtkEHUypUree211wDw8PBg8ODBjBo1isDAQDZv3lxSV1FoRR4G2b17N7169cLX1xeVSsX69etzPP/jjz/SvXt3qlatikqlKvT9w9WrV9OgQQOcnJxo0qSJTXROWfPII48QGRnJsmXLOHPmDFOmTMkRLLm7u/P666/z6quvsnTpUs6dO8fBgwf54osvWLp0qRVbLoQQwqYVdmVaHnskpejVLN4cwU8//WQue+655+jQoQMLFy7k8uXLfP755zz44IMlfBGFV+SRo+TkZJo1a8awYcN46qmn8ny+Y8eO9OvXjxEjRhSqzj///JNnn32WGTNm8Pjjj7N8+XJ69+7NwYMHady4cVGbWGH16NGDSZMmMWHCBNLS0hg2bBiDBg3i6NGj5mPee+89qlevzowZMzh//jyVKlUiKCiIt956y4otF0IIYfMKszIt2x5Jp+MzWBCZyZLjdtzUvUbz5s154oknUKlUuLu7s2fPntK/hsJS7gOgrFu3Ls/noqKiFEA5dOjQPevp16+f8thjj+Uoa9OmjfLiiy8Wui23bt1SAOXWrVu5nktNTVWOHz+upKamFrq+7AwGg3Lz5k3FYDAU63xRfNL31lVQ/9/vz5UoWEZGhrJ+/XolIyPD2k2pcKTvi0+v1yvr1q1TunV5WAHM/2rXrq3MnDlT0ev1+Z5rMBiVXSeuKG8s/KnE+r6gWCE7m5hztG/fPsaPH5+jrEePHrlu2WWXnp5Oenq6+bFOpwNME5CzT0LOKlMUBaPRiNF4173QQlBuT3LOqkOUHul76yqo/41GI4qioNfr0WgstwpTmGT9Hrv795koedL3xffCCy/w7bffAqbFT6Ghobz44ot0794djUZj/p2R3ZVbaaw9eJm1h2K4dDMVR7Wa15JTqeSa1yvcn8K+pzYRHMXGxuLl5ZWjzMvLi9jY2HzPmTFjBu+++26u8u3bt+Pi4pKjzM7ODm9vb5KSksjIyCh2OxMTE4t9rrg/0vfWlVf/Z2RkkJqayu7du8nMzLRCqyqGHTt2WLsJFZb0fcEUReHff//F19eXKlWqAODv74+Hhwddu3bl0UcfxcvLC0VR2LYt58bLmUY4dlPFX1dVnExQoaACwFmjEFRNYdsvv+Fub/k2p6SkFOo4mwiOimPixIk5Rpt0Oh1arZbu3bvj4eGR49i0tDSio6Nxc3PDycmpyK+lKAqJiYm4u7ujUqnuu+2i8KTvraug/k9LS8PZ2ZmHH364WD9XomB6vZ4dO3bQrVs384pTUTqk7wum0+n4/vvvWbBgASdOnODNN99k2rRpADz66KNMmDAh398JZ+KSWH3wMuuPxnAz5c4oTuvalenX0o8u9aqwZ9evJdb3WXeZ7sUmgiNvb2/i4uJylMXFxeHt7Z3vOY6OjnnuzWNvb5+rQw0GAyqVCrVaXax9irJuJ2TVIUqP9L11FdT/arUalUqV58+csBzpX+uRvs/pyJEjzJ8/n++++47k5GQAXFxczL8Hstz93ZyUnsnGIzGsjIjmcHSCubyGuyPPtKxJv2AttauZ7qFl3fYqqb4vbJ02ERy1a9eOnTt3Mm7cOHPZjh07zCkuhBBCCGEdiqIQGhqa49ZYw4YNCQ8P5/nnn8fT0zPPcw78d5MVEdFs+ucKqXoDAHZqFV0b1qBfsJZO9apjp7HNP3qLHBwlJSVx9uxZ8+OoqCgOHz5MlSpVqFWrFjdu3ODixYvExMQAcOrUKeBOlnmAQYMG4efnx4wZMwB45ZVX6NSpE5988gmPPfYYK1asIDIyki+//PK+L1AIIYQQRXPp0iX8/PxQqVSoVCrq1KmDnZ0dffr0YfTo0XTu3DnPqQ5XE9NYd/AyqyKjOXct2Vxet7orYa209GlRk+rutp+RocjBUWRkJF26dDE/zpr3M3jwYJYsWcKGDRsYOnSo+fn+/fsDMGXKFKZOnQrAxYsXcwzRt2/fnuXLl/POO+/w1ltvERgYyPr162WPIyGEEKKUGAwGtm3bxvz589m0aRN79+4138F5++23mTRpEj4+PrnOyzQY2XXqGisjo/n15FUMRtMqVxcHDY818aF/ay1BtSqXqXmjRQ6OOnfunCt/V3ZDhgxhyJAhBdaxa9euXGV9+/alb9++RW2OEEKIiqYYGd9F/uLj4/nmm29YsGABUVFR5vLdu3ebg6O783ECRMUnsyoymrUHLnE18c7WOi1qVSIsWMvjzXxxc7SJ2TtFVjZbLYqkdu3ajBs3LsecLiGEKJOKkPFdFCwhIYGXX36ZVatWmfcNrFSpEkOHDmXUqFHUq1cv1zmpGQa2HLvCyoho9kfdMJdXcXXgqRZ+hLXSEujlXmrXUFIkOLJhQ4YMYenSpcyYMYM333zTXL5+/Xr69OlT4AhedhEREbi6lsBuWkIIUZoKmfHdasrAiJbRaDRPa3F3d+ePP/4gPT2doKAgwsPDefbZZ3PtFagoCkcv32JlRDQbDseQmG7a10ytgofrVScsWEvXhl442Nnm5OrikODIxjk5OfHhhx/y4osvUrly5WLVUb16dQu3SgghrKCQGd+twsZHtE6ePMn8+fPZtm0b//zzDw4ODmg0GubOnUu1atVo1apVrjlBN5MzWH/4MisjojkZe2cjWG0VZ/q11PJMcE18PJ1L+1JKRfkJ80rLrcsQtdv031IQEhKCt7e3eWVfXtauXUujRo1wdHSkdu3afPLJJzmer127NrNnzwZMfwFMnTqVWrVq4ejoiK+vLy+//DIA06ZNy3MSfPPmzZk0aZLlLkoIIYojj4zvqDSmJKjWlN+IVil9T+RHr9ezdu1aunbtSsOGDfn88885deoUmzZtMn+X9ezQjNatW5sDI6NR4Y8z1xi7/CBtPtjJuxuPczI2EQc7NU8292X58Db8/noXXuoaWG4DI5CRo6I59C38PK5U/zLQaDR88MEHDBgwgJdffpmaNWvmeP7AgQP069ePqVOnEhYWxp9//kl4eDhVq1bNc2L82rVr+b//+z9WrFhBo0aNiI2N5ciRIwAMGzaMd999l4iICFq1amW65EOH+Oeff/jxxx9L9DqFEOKesmV8RzGYAqNes60/amRjI1pXr15l3rx5LFq0yLytjlqtplevXoSHhxNSJQZmN87xXXa5Tl9WR0azOvISlxNSzXU96ONBWCstvZv74elScTbElOCokFSJV1BlBUZQqve6+/TpQ/PmzZkyZQpff/11juc+/fRTunbtah7ZqVevHsePH+ejjz7KMzi6ePEi3t7ehISEYG9vT61atWjdujUANWvWpEePHixevNgcHC1evJhOnTpRp46V/zITQggw/UFat6sp8KhSx/qBEdwZ0coeIFlxRCs2Ntace9TLy4sRI0YwYsQIatWqZRoxmh2W47vMsOEVnkmHK0pVADyc7Ojdwo9+wVoa++Xe4LEikNtqhaRJiEKV318GpeDDDz9k6dKlnDhxIkf5iRMn6NChQ46yDh06cObMGQwGQ656+vbtS2pqKnXq1GHEiBGsW7cuR9LQESNG8MMPP5CWlkZGRgbLly9n2LBhJXNRQghRHJ5+EPCQbQRGcGdES6UxPbbEiFYhp3AkJCTw2Wef5Zj60LRpU1566SVWrFjBxYsXee+990yBEeQ5yqXBiL8qjnZ1qjI7rDl/vx3CtCcbWycw0sVQLfE46GJK/7WzkZGjQjJUCkBRqXMGSKX4l8HDDz9Mjx49mDhx4j33kSqIVqvl1KlT/PLLL+zYsYPw8HA++ugjfv/9d+zt7enVqxeOjo6sW7cOBwcH9Ho9zzzzjOUuRAghyiNLjmgVYnL3wYMHmTdvHsuXLyc1NRUHBwdeeeUVqlWrBsDnn3+e4/jEND0bjsSw868bLFJUaFR3VjsbUfPxi72p6R9Y/DZbwsFl2G18hQ6KEWXOLKtOapfgqJAUdx+Ux2ej+vlVq93rnjlzJs2bN6d+/frmsoYNG7J3794cx+3du5d69eqh0WjyrMfZ2ZlevXrRq1cvxowZQ4MGDTh69ChBQUHY2dkxePBgFi9ejIODA/3798fZufxOuhNCCIvx9Cved0L2LQAg3+0KUh2qsGrVKubPn8/+/fvNpzdp0oTw8PBcv6sVReHvqBusjIxm89ErpOmNgD3v2I1gut1XaDCiqDSoe822fmB0e1J71gCEysrbNEhwVBQtnocHQqx2r7tJkyYMHDgwx18Er732Gq1ateK9994jLCyMffv2MWfOHObNm5dnHUuWLMFgMNCmTRtcXFz47rvvcHZ2xt/f33zM8OHDadiwIUCuwEsIIYQF3T1K1G5MvpO756xZzoQJEwBTdvlnnnmG8PBwOnTokGMZ/lVdGmsOXmJ15CWi4u/kN3ughhthwVr6BIWgMYyDG+dR2cq8LRub1C7BUVEV9y8DC5k2bRorV640Pw4KCmLVqlVMnjyZ9957Dx8fH6ZNm5bvrbdKlSoxc+ZMxo8fj8FgoEmTJmzcuJGqVauajwkMDKR9+/bcuHGDNm3alPQlCSFExZTXFgB/zgWVGoPBwKYzmXg6qugU4AhV6jB4cH0WLVrE0KFDGTZsGF5eXuaq9AYjv528yqrIS/x26k5+M1cHDY839aVfKy1BtSplC6Ks+12Wi41NapfgyIYtWbIkV1nt2rXN27xnefrpp3n66afzrefChQvm/+/duze9e/cu8HUVRSEmJobw8PCiNFcIIURR5DFaEpeUydfXg1m4bjcXbxnp5G/Hrpfng6cfNYBTp07lGCU6fy2JVZGXWHvwEtey5Tdr6V+ZsGAtjzX1wdUW8pvda/fw25PalY3jUCkGFJUGlRW3abCBHhO25Nq1a6xYsYLY2FiGDh1q7eYIIcqCMpA2wybdHi1RjAb2RhuYF5HBmuOZ6I27TE9X8qD1kwMwNBtI1gxSlUpFSkYmm4/Gsioimr8v3MlvVs3NgaeCatIvuCYP1LCh/GaF3T08aBCZ/p3Yv+UH2oQ+i31V/9zHlBIJjkQONWrUoFq1anz55ZfFTlcihKhAbDxthk27PVrywgsjWHw4w1zctm1bwsPD6du3L05OToBpRP/IJVN+s41HYki6nd/MV3Wd3rXSadWyFR1bNsVek8cOPdYMXouaD8/Dl+vuDcHDt1SbeTcJjkQOhU1mK4QQNp8I1kYdO3YMPz8/0x+gQYMIGaNjxUuvM7DfU4x+5XWCgoLMx95IzmDdocusiojmVNyd/Gb+VV2Y4neALmfeRxVnhC1qsMsjMLV28GpjE60LS4IjIYQQxVNGv/isISMjgx9//JF58+bxxx9/MGvWLP73v/8B8MygkfR85jkqVaoEgMGosOdsPKsiotl+PBa9wfRHq6OdmtDG3vRrpaVt1TTUnz1VcGBqC8GrjU20LiwJjoQQQhRPGf3iK00XL17kyy+/ZNGiRVy9ehUw5cy8fPnOztcODg44ODgQfSOF1QcusSYymphbaebnG/t5EBas5Ynmfng6385vFrX73oGpLQSvtpoP7x4kOBJCCFE8ZfSLrzQoikJYWBhr167FaDQFKD4+PowcOZIRI0bg52fqozS9ge3H41gVEc3ec/FkzWzwcLKjTws/+rXS0sg3jzQehQlMbSV4tcV8ePcgwZEQQojiK4NffCVFp9Ph4eEBmFaV2dvbYzQa6dKlC+Hh4Tz55JPY25tGfo7H6FgVGc26Q5e5lao319Hhgar0C9bSo5E3TvZ5ZzkACheY2lLwauU9AotKgiMhhBD3x1a/+EphlZaiKERERDBv3jxWrlxJZGQkjRo1AmDKlCm888475owDt1L1bDjwH6siojl6+Za5Dh9PJ/q2rEnfYC3aKi6Ff/HCBKZFCV5lSwYzCY6EEEKUPyW8SislJYUVK1Ywb948Dhw4YC5fv369OTiqV68eiqKw79x1Vt3Ob5aeabrFZa9R0e1BL/oFa3kosDoatSrP17mnwgSmhTnG2qvabIwER+XYkiVLGDduHAkJCVZrQ+fOnWnevDmzZ8+2Whsqol27dtGlSxdu3rxpXgEjRIVRlFVaRRwtSUhI4N1332XJ4sUk3DKN/jg6OhIWFkZ4eDitW7cGIE6XxpoDl1gdGc2F6ynm8+t5udEvWEufFn5UdXO0yOXeN1tY1WZj8tgtStiKa9euMXr0aGrVqoWjoyPe3t706NGj0Mlgw8LCOH36tPnxkiVLUKlUqFQq1Go1NWvWZOjQoeYVFMWxZMmSAr98f/zxR957771i11/SOnfubO4TJycn6tWrx4wZM8r8fk/t27fnypUreHrmMZFTiPKuoFVa2R1cBrMbw9Jepv8eXGYq18VQLfE46GJyVe3s7Mz3S78m4dYtAiqp+DDEiUubPmHp0qUEBbdi+/E4XlgSQbsZO/lo2ykuXE/B1UHDs621rAtvz7ZxDzP8oTq2ExhB4furApGRIxv29NNPk5GRwdKlS6lTpw5xcXHs3LmT69evF+p8Z2dnnJ2dc5R5eHhw6tQpjEYjR44cYejQocTExLBt27aSuASqVKlSIvUWlV6vN0+EvNuIESOYNm0a6enp/Prrr4wcOZJKlSoxevToEmtPRkYGDg4OJVa/g4MD3t7eJVa/EDatMKu08hstSU3A7pcpdFCMXP5gJl8nd2Xniev89ttvqNVqHNPi+bSzgarOzvR4wA61SoWyZxJzEhuz5Jie+KQ7+c1a1a5Mv9v5zVwcbPjr1lZWtdkQGTmyUQkJCfzxxx98+OGHdOnSBX9/f1q3bs3EiRN54oknchz34osv4uXlhZOTE40bN+bnn38G8h7VUalUeHt74+vrS2hoKC+//DK//PILqampPPLII4wdOzbH8deuXcPBwYGdO3cW6zo6d+7MuHHjzI9r167NBx98wLBhw3B3d6dWrVp8+eWXOc6Jjo6mX79+VKpUiWrVqjFgwIAcyXMjIiLo1q0b1apVw9PTk06dOnHw4MFc1zl//nyeeOIJXF1def/99/Nto4uLC97e3vj7+zN06FCaNm3Kjh07zM+np6fz+uuv4+fnh6urK23atGHXrl056li0aBFarRYXFxf69OnDp59+mqPvp06dSvPmzfnqq68ICAgwpwRISEhg+PDhVK9eHQ8PDx555BGOHDliPu/IkSN06dIFd3d3PDw8aNmyJZGRkQD8999/9OrVi8qVK+Pq6kqjRo3YvHkzYLqtplKpctxSXbt2LY0aNcLR0ZHatWvzySef5LiGwrw3opy4ddm0T86ty/c+tizKWqWlur3aK69VWvmMlig7JrHrfAZ9V6dQe7aOKQvXsXv3brZv324+77mmdoQG2qO+nQBWpRjY8/ffxCelU83NkRc71WHna51YPao9fYO1th0YQeH6q4Kx8XesZCUnJ+f7nEajMX+BZR2r0WhQq3PHk2q1OscITX71urq6Frptbm5uuLm5sX79etq2bYujY+4hWKPRSGhoKImJiXz33XfUrVuX48ePo9EUsPzzLs7OzhiNRjIzMxk+fDhjx47lk08+Mb/ed999h5+fH4888kih67yXTz75hPfee4+33nqLNWvWMHr0aDp16kT9+vXR6/X06NGDdu3a8ccff6BWq5k6dSo9e/bkn3/+wcHBgcTERAYPHswXX3yBoih88skn9OzZkzNnzuDufifZ4tSpU5k5cyazZ8/Gzu7eH3VFUdizZw8nT54kMDDQXD527FiOHz/OihUr8PX1Zd26dTz66KMcPXqUwMBA9u7dy6hRo/jwww954okn+OWXX5g0aVKu+s+ePcvatWv58ccfze9R3759cXZ2ZsuWLXh6erJw4UK6du3K6dOnqVKlCgMHDqRFixbMnz8fjUbD4cOHzSNgY8aMISMjg927d+Pq6srx48dxc3PL89oOHDhAv379mDp1KmFhYfz555+Eh4dTtWpVhgwZku97M2bMGFq2bEnLli0L9d6KMqCiTLy91yqtu0ZLbqUpLDuSybzIdE7G3wmaOtbSMPrVt+jSpQuKonAsrRqNUKPmzjGZihpt3UYMaxtElwY18s5vZutkS4aclCL6/ffflccff1zx8fFRAGXdunU5njcajcqkSZMUb29vxcnJSenataty+vTpAuvMzMxU3nnnHaV27dqKk5OTUqdOHWXatGmK0WgsdLtu3bqlAMqtW7dyPZeamqocP35cSU1NzVEO5PuvZ8+e5uMMBoPi4uKS77GdOnXKUW+1atXyPK6o1qxZo1SuXFlxcnJS2rdvr0ycOFE5cuSI+flt27YparVaOXXqVJ7nL168WPH09Mz38enTp5V69eopwcHB5n6qXLmysnLlSvMxTZs2VaZOnZpvG++u826dOnVSXnnlFfNjf39/5bnnnjM/NhqNSo0aNZT58+criqIo3377rVK/fn3ze28wGJS4uDjF2dlZ2bZtW56vYTAYFHd3d2Xjxo3mMkAZN25cvu3K3j57e3vF1dVVsbe3VwDFyclJ2bt3r6IoivLff/8pGo1GuXz5co7zunbtqkycOFFRFEUJCwtTHnvssRzPDxw4MEe/TJkyRbG3t1euXr1qLvvjjz8UDw8PJS0tLce5devWVRYuXKgoiqK4u7srS5YsybPtTZo0yfe9+e233xRAuXnzpqIoijJgwAClW7duOY753//+pzz44IPmx/m9N5988oliMBhyvUZ+P1fCMjIyMpT169crGRkZlqs04ZKiTK2kKFM87vybWtlUXhEdWGq6/ikeyh9D3c2/q13tUV5saa8cGeWqKFMrKzdiziuLdp9TQj7Z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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "res = sc.stats.linregress(x=x, y=y_noise) # result object\n", "a_fit = res.slope # fitted slope\n", "b_fit = res.intercept # fitted y-intercept\n", "\n", "# # add confidence interval\n", "# dof = len(x) - 2 # degrees of freedom\n", "# alpha = 0.05 # probability of confidence interval\n", "# tinv = abs(sc.stats.distributions.t.ppf(alpha/2.0, dof)) # Two-sided inverse Students t-distribution\n", "# a_fit_ci = tinv * res.stderr\n", "# b_fit_ci = tinv * res.intercept_stderr\n", "# lower_bound = (a_fit - a_fit_ci) * x + b_fit - b_fit_ci\n", "# upper_bound = (a_fit + a_fit_ci) * x + b_fit + b_fit_ci\n", "\n", "# visualize scipy result\n", "fig, ax = plt.subplots(figsize=(6.75, 3.0))\n", "ax.plot(x, y, label=\"True\")\n", "ax.plot(x, y_noise, marker=\".\", linestyle=\"\", label=\"Noisy\")\n", "ax.plot(\n", " x, a_fit * x + b_fit, color=\"k\", linestyle=\"--\", label=\"SciPy Linear Regression\"\n", ")\n", "# ax.fill_between(x, lower_bound, upper_bound, color=\"k\", alpha=0.2, label=f\"{1-alpha:0.0%} Confidence Interval\")\n", "ax.legend()\n", "ax.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pest Linear Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define run function\n", "\n", "This function will be called each iteration by PEST++ GLM to create new simulated values." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def run():\n", " from numpy import linspace\n", " from pandas import Index, Series, read_csv\n", "\n", " parameters = read_csv(\"parameters_sel.csv\", index_col=0)\n", " print(\"parameters view\\n\", parameters)\n", " # simulation = read_csv(\"simulation.csv\")\n", " # x = simulation.index\n", " x = linspace(0.0, 1.0, 101)\n", " y = parameters.at[\"a\", \"optimal\"] * x + parameters.at[\"b\", \"optimal\"]\n", " simulation_new = Series(y, index=Index(x, name=\"x\"), name=\"Simulation\")\n", " simulation_new.to_csv(\"simulation.csv\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup PEST++ GLM files with Pyemu" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "tags": [ "hide-output" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2025-01-15 09:45:26.270757 starting: opening PstFrom.log for logging\n", "2025-01-15 09:45:26.271376 starting PstFrom process\n", "2025-01-15 09:45:26.271476 starting: setting up dirs\n", "2025-01-15 09:45:26.271587 starting: removing existing new_d 'template'\n", "2025-01-15 09:45:26.275952 finished: removing existing new_d 'template' took: 0:00:00.004365\n", "2025-01-15 09:45:26.276048 starting: copying original_d 'model' to new_d 'template'\n", "2025-01-15 09:45:26.276991 finished: copying original_d 'model' to new_d 'template' took: 0:00:00.000943\n", "2025-01-15 09:45:26.277687 finished: setting up dirs took: 0:00:00.006211\n", "2025-01-15 09:45:26.277991 transform was not passed, setting default tranform to 'log'\n", "2025-01-15 09:45:26.278262 starting: adding grid type d style parameters for file(s) ['parameters_sel.csv']\n", "2025-01-15 09:45:26.278496 starting: loading list-style template/parameters_sel.csv\n", "2025-01-15 09:45:26.278616 starting: reading list-style file: template/parameters_sel.csv\n", "2025-01-15 09:45:26.281684 finished: reading list-style file: template/parameters_sel.csv took: 0:00:00.003068\n", "2025-01-15 09:45:26.281952 loaded list-style 'template/parameters_sel.csv' of shape (2, 2)\n", "2025-01-15 09:45:26.284094 finished: loading list-style template/parameters_sel.csv took: 0:00:00.005598\n", "2025-01-15 09:45:26.284356 starting: writing list-style template file 'template/parameters_sel.csv.tpl'\n", "2025-01-15 09:45:26.297160 finished: writing list-style template file 'template/parameters_sel.csv.tpl' took: 0:00:00.012804\n", "2025-01-15 09:45:26.303370 finished: adding grid type d style parameters for file(s) ['parameters_sel.csv'] took: 0:00:00.025108\n", "2025-01-15 09:45:26.303836 starting: adding observations from output file simulation.csv\n", "2025-01-15 09:45:26.303979 starting: adding observations from tabular output file '['simulation.csv']'\n", "2025-01-15 09:45:26.304115 starting: reading list-style file: template/simulation.csv\n", "2025-01-15 09:45:26.306200 finished: reading list-style file: template/simulation.csv took: 0:00:00.002085\n", "2025-01-15 09:45:26.307297 starting: building insfile for tabular output file simulation.csv\n", "2025-01-15 09:45:26.313321 finished: building insfile for tabular output file simulation.csv took: 0:00:00.006024\n", "2025-01-15 09:45:26.313557 starting: adding observation from instruction file 'template/simulation.csv.ins'\n", "2025-01-15 09:45:26.319997 finished: adding observation from instruction file 'template/simulation.csv.ins' took: 0:00:00.006440\n", "2025-01-15 09:45:26.321114 finished: adding observations from tabular output file '['simulation.csv']' took: 0:00:00.017135\n", "2025-01-15 09:45:26.321329 finished: adding observations from output file simulation.csv took: 0:00:00.017493\n", "2025-01-15 09:45:26.322414 WARNING: add_py_function() command: run() is not being called directly\n", "noptmax:0, npar_adj:2, nnz_obs:101\n", "noptmax:100, npar_adj:2, nnz_obs:101\n", "./pestpp-glm pest.pst\n", "\n", "\n", " pestpp-glm: a tool for GLM parameter estimation and FOSM uncertainty analysis\n", "\n", " by The PEST++ Development Team\n", "\n", "\n", "version: 5.2.16\n", "binary compiled on Dec 1 2024 at 10:51:08\n", "\n", "started at 01/15/25 09:45:26\n", "...processing command line: ' ./pestpp-glm pest.pst'\n", "...using serial run manager\n", "\n", "using control file: \"pest.pst\"\n", "\n", "in directory: \"/home/martin/repos/pastas-plugins/docs/examples/template\"\n", "on host: \"VonkXPS15\"\n", "\n", "processing control file pest.pst\n", "checking model IO files...done\n", " starting serial run manager ...\n", "\n", "\n", "\n", "\n", "\n", "OPTIMISATION ITERATION NUMBER: 1\n", "\n", " Iteration type: base parameter solution\n", " SVD Package: RedSVD\n", " Model calls so far : 0\n", "\n", " calculating jacobian... \n", "\n", "\n", "\n", " --- starting serial run manager for 3 runs --- \n", "\n", "\n", "01/15/25 09:45:26 processing template files with 1 threads...\n", "01/15/25 09:45:26 done, took 0 seconds\n", "01/15/25 09:45:26 calling forward run command(s)\n", "01/15/25 09:45:26 calling forward run command: 'python forward_run.py' \n", "...pid: 32057\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/logger.py:100: PyemuWarning: 2025-01-15 09:45:26.322414 WARNING: add_py_function() command: run() is not being called directly\n", "\n", "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:27.638401\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:27.661345\n", "starting arr mlt 2025-01-15 09:45:27.661388\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:27.661608\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.0\n", "b 10.0\n", "...exit_code: 32057\n", "...status: 0\n", "01/15/25 09:45:27 forward run command(s) finished, took 1.442 seconds\n", "01/15/25 09:45:27 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:27 done, took 0.001 seconds\n", "\n", "\n", "-->01/15/25 09:45:27 run complete, took: 1.445 seconds\n", "-->1 of 3 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:27 processing template files with 1 threads...\n", "01/15/25 09:45:27 done, took 0 seconds\n", "01/15/25 09:45:27 calling forward run command(s)\n", "01/15/25 09:45:27 calling forward run command: 'python forward_run.py' \n", "...pid: 32083\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:29.204613\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:29.223943\n", "starting arr mlt 2025-01-15 09:45:29.224014\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:29.224251\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.0\n", "b 10.1\n", "...exit_code: 32083\n", "...status: 0\n", "01/15/25 09:45:29 forward run command(s) finished, took 1.543 seconds\n", "01/15/25 09:45:29 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:29 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:29 run complete, took: 1.545 seconds\n", "-->2 of 3 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:29 processing template files with 1 threads...\n", "01/15/25 09:45:29 done, took 0 seconds\n", "01/15/25 09:45:29 calling forward run command(s)\n", "01/15/25 09:45:29 calling forward run command: 'python forward_run.py' \n", "...pid: 32113\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:30.527973\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:30.544766\n", "starting arr mlt 2025-01-15 09:45:30.544818\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:30.545048\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.01\n", "b 10.00\n", "...exit_code: 32113\n", "...status: 0\n", "01/15/25 09:45:30 forward run command(s) finished, took 1.314 seconds\n", "01/15/25 09:45:30 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:30 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:30 run complete, took: 1.315 seconds\n", "-->3 of 3 complete, 0 failed\n", "\n", "\n", "\n", "\n", "\n", " --- serial run manager runs summary: --- \n", " 3 of 3 complete, 0 failed\n", " process took : 4.307 seconds\n", "\n", "\n", "\n", "\n", " computing upgrade vectors... \n", " computing upgrade vector (lambda = 0.1) 1 / 5 \n", " computing upgrade vector (lambda = 1) 2 / 5 \n", " computing upgrade vector (lambda = 10) 3 / 5 \n", " computing upgrade vector (lambda = 100) 4 / 5 \n", " computing upgrade vector (lambda = 1000) 5 / 5 \n", "-->starting iteration FOSM process...\n", "-->finished iteration FOSM process...\n", "\n", " performing upgrade vector model runs... \n", "\n", "\n", " --- starting serial run manager for 10 runs --- \n", "\n", "\n", "01/15/25 09:45:30 processing template files with 1 threads...\n", "01/15/25 09:45:30 done, took 0 seconds\n", "01/15/25 09:45:30 calling forward run command(s)\n", "01/15/25 09:45:30 calling forward run command: 'python forward_run.py' \n", "...pid: 32133\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:31.886445\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:31.904588\n", "starting arr mlt 2025-01-15 09:45:31.904633\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:31.904810\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.067234\n", "b 9.966283\n", "...exit_code: 32133\n", "...status: 0\n", "01/15/25 09:45:32 forward run command(s) finished, took 1.385 seconds\n", "01/15/25 09:45:32 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:32 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:32 run complete, took: 1.387 seconds\n", "-->1 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:32 processing template files with 1 threads...\n", "01/15/25 09:45:32 done, took 0 seconds\n", "01/15/25 09:45:32 calling forward run command(s)\n", "01/15/25 09:45:32 calling forward run command: 'python forward_run.py' \n", "...pid: 32159\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:33.300338\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:33.319778\n", "starting arr mlt 2025-01-15 09:45:33.319837\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:33.320118\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.050426\n", "b 9.974712\n", "...exit_code: 32159\n", "...status: 0\n", "01/15/25 09:45:33 forward run command(s) finished, took 1.428 seconds\n", "01/15/25 09:45:33 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:33 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:33 run complete, took: 1.43 seconds\n", "-->2 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:33 processing template files with 1 threads...\n", "01/15/25 09:45:33 done, took 0 seconds\n", "01/15/25 09:45:33 calling forward run command(s)\n", "01/15/25 09:45:33 calling forward run command: 'python forward_run.py' \n", "...pid: 32186\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:34.760953\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:34.777946\n", "starting arr mlt 2025-01-15 09:45:34.777997\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:34.778219\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.059552\n", "b 9.970384\n", "...exit_code: 32186\n", "...status: 0\n", "01/15/25 09:45:34 forward run command(s) finished, took 1.403 seconds\n", "01/15/25 09:45:34 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:34 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:34 run complete, took: 1.405 seconds\n", "-->3 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:34 processing template files with 1 threads...\n", "01/15/25 09:45:34 done, took 0 seconds\n", "01/15/25 09:45:34 calling forward run command(s)\n", "01/15/25 09:45:34 calling forward run command: 'python forward_run.py' \n", "...pid: 32210\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:36.077050\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:36.094323\n", "starting arr mlt 2025-01-15 09:45:36.094365\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:36.094548\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.044664\n", "b 9.977788\n", "...exit_code: 32210\n", "...status: 0\n", "01/15/25 09:45:36 forward run command(s) finished, took 1.314 seconds\n", "01/15/25 09:45:36 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:36 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:36 run complete, took: 1.316 seconds\n", "-->4 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:36 processing template files with 1 threads...\n", "01/15/25 09:45:36 done, took 0 seconds\n", "01/15/25 09:45:36 calling forward run command(s)\n", "01/15/25 09:45:36 calling forward run command: 'python forward_run.py' \n", "...pid: 32236\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:37.489276\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:37.507173\n", "starting arr mlt 2025-01-15 09:45:37.507224\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:37.507483\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.028045\n", "b 9.987120\n", "...exit_code: 32236\n", "...status: 0\n", "01/15/25 09:45:37 forward run command(s) finished, took 1.427 seconds\n", "01/15/25 09:45:37 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:37 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:37 run complete, took: 1.429 seconds\n", "-->5 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:37 processing template files with 1 threads...\n", "01/15/25 09:45:37 done, took 0 seconds\n", "01/15/25 09:45:37 calling forward run command(s)\n", "01/15/25 09:45:37 calling forward run command: 'python forward_run.py' \n", "...pid: 32262\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:38.891012\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:38.915897\n", "starting arr mlt 2025-01-15 09:45:38.915954\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:38.916196\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.021034\n", "b 9.990340\n", "...exit_code: 32262\n", "...status: 0\n", "01/15/25 09:45:39 forward run command(s) finished, took 1.413 seconds\n", "01/15/25 09:45:39 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:39 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:39 run complete, took: 1.415 seconds\n", "-->6 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:39 processing template files with 1 threads...\n", "01/15/25 09:45:39 done, took 0 seconds\n", "01/15/25 09:45:39 calling forward run command(s)\n", "01/15/25 09:45:39 calling forward run command: 'python forward_run.py' \n", "...pid: 32286\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:40.323710\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:40.342450\n", "starting arr mlt 2025-01-15 09:45:40.342498\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:40.342736\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.004806\n", "b 9.998726\n", "...exit_code: 32286\n", "...status: 0\n", "01/15/25 09:45:40 forward run command(s) finished, took 1.463 seconds\n", "01/15/25 09:45:40 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:40 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:40 run complete, took: 1.465 seconds\n", "-->7 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:40 processing template files with 1 threads...\n", "01/15/25 09:45:40 done, took 0 seconds\n", "01/15/25 09:45:40 calling forward run command(s)\n", "01/15/25 09:45:40 calling forward run command: 'python forward_run.py' \n", "...pid: 32312\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:41.747489\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:41.764126\n", "starting arr mlt 2025-01-15 09:45:41.764176\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:41.764428\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.003605\n", "b 9.999044\n", "...exit_code: 32312\n", "...status: 0\n", "01/15/25 09:45:41 forward run command(s) finished, took 1.374 seconds\n", "01/15/25 09:45:41 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:41 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:41 run complete, took: 1.376 seconds\n", "-->8 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:41 processing template files with 1 threads...\n", "01/15/25 09:45:41 done, took 0 seconds\n", "01/15/25 09:45:41 calling forward run command(s)\n", "01/15/25 09:45:41 calling forward run command: 'python forward_run.py' \n", "...pid: 32338\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:43.103330\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:43.120733\n", "starting arr mlt 2025-01-15 09:45:43.120779\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:43.121027\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.000562\n", "b 9.999962\n", "...exit_code: 32338\n", "...status: 0\n", "01/15/25 09:45:43 forward run command(s) finished, took 1.335 seconds\n", "01/15/25 09:45:43 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:43 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:43 run complete, took: 1.337 seconds\n", "-->9 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:43 processing template files with 1 threads...\n", "01/15/25 09:45:43 done, took 0 seconds\n", "01/15/25 09:45:43 calling forward run command(s)\n", "01/15/25 09:45:43 calling forward run command: 'python forward_run.py' \n", "...pid: 32358\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:44.473629\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:44.492586\n", "starting arr mlt 2025-01-15 09:45:44.492636\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:44.492910\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.000421\n", "b 9.999972\n", "...exit_code: 32358\n", "...status: 0\n", "01/15/25 09:45:44 forward run command(s) finished, took 1.458 seconds\n", "01/15/25 09:45:44 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:44 done, took 0.001 seconds\n", "\n", "\n", "-->01/15/25 09:45:44 run complete, took: 1.46 seconds\n", "-->10 of 10 complete, 0 failed\n", "\n", "\n", "\n", "\n", "\n", " --- serial run manager runs summary: --- \n", " 10 of 10 complete, 0 failed\n", " process took : 14.027 seconds\n", "\n", "\n", "\n", "\n", " testing upgrade vectors... \n", "\n", " ...Lambda testing complete for iteration 1\n", " starting phi = 0.902513; ending phi = 0.862572 (95.5745% of starting phi)\n", "\n", "\n", "OPTIMISATION ITERATION NUMBER: 2\n", "\n", " Iteration type: base parameter solution\n", " SVD Package: RedSVD\n", " Model calls so far : 13\n", "\n", " calculating jacobian... \n", "\n", "\n", "\n", " --- starting serial run manager for 2 runs --- \n", "\n", "\n", "01/15/25 09:45:44 processing template files with 1 threads...\n", "01/15/25 09:45:44 done, took 0 seconds\n", "01/15/25 09:45:44 calling forward run command(s)\n", "01/15/25 09:45:44 calling forward run command: 'python forward_run.py' \n", "...pid: 32392\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:46.016586\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:46.034491\n", "starting arr mlt 2025-01-15 09:45:46.034577\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:46.034854\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.077907\n", "b 9.966283\n", "...exit_code: 32392\n", "...status: 0\n", "01/15/25 09:45:46 forward run command(s) finished, took 1.505 seconds\n", "01/15/25 09:45:46 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:46 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:46 run complete, took: 1.507 seconds\n", "-->1 of 2 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:46 processing template files with 1 threads...\n", "01/15/25 09:45:46 done, took 0 seconds\n", "01/15/25 09:45:46 calling forward run command(s)\n", "01/15/25 09:45:46 calling forward run command: 'python forward_run.py' \n", "...pid: 32461\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:47.449495\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:47.466795\n", "starting arr mlt 2025-01-15 09:45:47.466848\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:47.467103\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.067234\n", "b 10.065946\n", "...exit_code: 32461\n", "...status: 0\n", "01/15/25 09:45:47 forward run command(s) finished, took 1.387 seconds\n", "01/15/25 09:45:47 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:47 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:47 run complete, took: 1.389 seconds\n", "-->2 of 2 complete, 0 failed\n", "\n", "\n", "\n", "\n", "\n", " --- serial run manager runs summary: --- \n", " 2 of 2 complete, 0 failed\n", " process took : 2.896 seconds\n", "\n", "\n", "\n", "\n", " computing upgrade vectors... \n", " computing upgrade vector (lambda = 0.1) 1 / 5 \n", " computing upgrade vector (lambda = 1) 2 / 5 \n", " computing upgrade vector (lambda = 10) 3 / 5 \n", " computing upgrade vector (lambda = 100) 4 / 5 \n", " computing upgrade vector (lambda = 1000) 5 / 5 \n", "-->starting iteration FOSM process...\n", "-->finished iteration FOSM process...\n", "\n", " performing upgrade vector model runs... \n", "\n", "\n", " --- starting serial run manager for 10 runs --- \n", "\n", "\n", "01/15/25 09:45:47 processing template files with 1 threads...\n", "01/15/25 09:45:47 done, took 0 seconds\n", "01/15/25 09:45:47 calling forward run command(s)\n", "01/15/25 09:45:47 calling forward run command: 'python forward_run.py' \n", "...pid: 32481\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:48.926127\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:48.952572\n", "starting arr mlt 2025-01-15 09:45:48.952650\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:48.952971\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.068200\n", "b 9.965768\n", "...exit_code: 32481\n", "...status: 0\n", "01/15/25 09:45:49 forward run command(s) finished, took 1.498 seconds\n", "01/15/25 09:45:49 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:49 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:49 run complete, took: 1.5 seconds\n", "-->1 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:49 processing template files with 1 threads...\n", "01/15/25 09:45:49 done, took 0 seconds\n", "01/15/25 09:45:49 calling forward run command(s)\n", "01/15/25 09:45:49 calling forward run command: 'python forward_run.py' \n", "...pid: 32511\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:50.356345\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:50.373787\n", "starting arr mlt 2025-01-15 09:45:50.373834\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:50.374068\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.067958\n", "b 9.965896\n", "...exit_code: 32511\n", "...status: 0\n", "01/15/25 09:45:50 forward run command(s) finished, took 1.385 seconds\n", "01/15/25 09:45:50 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:50 done, took 0.001 seconds\n", "\n", "\n", "-->01/15/25 09:45:50 run complete, took: 1.388 seconds\n", "-->2 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:50 processing template files with 1 threads...\n", "01/15/25 09:45:50 done, took 0 seconds\n", "01/15/25 09:45:50 calling forward run command(s)\n", "01/15/25 09:45:50 calling forward run command: 'python forward_run.py' \n", "...pid: 32537\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:51.807405\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:51.829855\n", "starting arr mlt 2025-01-15 09:45:51.829912\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:51.830250\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.068088\n", "b 9.965827\n", "...exit_code: 32537\n", "...status: 0\n", "01/15/25 09:45:52 forward run command(s) finished, took 1.512 seconds\n", "01/15/25 09:45:52 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:52 done, took 0.001 seconds\n", "\n", "\n", "-->01/15/25 09:45:52 run complete, took: 1.514 seconds\n", "-->3 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:52 processing template files with 1 threads...\n", "01/15/25 09:45:52 done, took 0 seconds\n", "01/15/25 09:45:52 calling forward run command(s)\n", "01/15/25 09:45:52 calling forward run command: 'python forward_run.py' \n", "...pid: 32560\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:52.519191\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:52.539678\n", "starting arr mlt 2025-01-15 09:45:52.539735\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:52.539980\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.067874\n", "b 9.965941\n", "...exit_code: 32560\n", "...status: 0\n", "01/15/25 09:45:52 forward run command(s) finished, took 0.669 seconds\n", "01/15/25 09:45:52 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:52 done, took 0.001 seconds\n", "\n", "\n", "-->01/15/25 09:45:52 run complete, took: 0.672 seconds\n", "-->4 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:52 processing template files with 1 threads...\n", "01/15/25 09:45:52 done, took 0 seconds\n", "01/15/25 09:45:52 calling forward run command(s)\n", "01/15/25 09:45:52 calling forward run command: 'python forward_run.py' \n", "...pid: 32583\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:53.990760\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:54.012262\n", "starting arr mlt 2025-01-15 09:45:54.012346\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:54.012583\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.067630\n", "b 9.966073\n", "...exit_code: 32583\n", "...status: 0\n", "01/15/25 09:45:54 forward run command(s) finished, took 1.443 seconds\n", "01/15/25 09:45:54 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:54 done, took 0.001 seconds\n", "\n", "\n", "-->01/15/25 09:45:54 run complete, took: 1.446 seconds\n", "-->5 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:54 processing template files with 1 threads...\n", "01/15/25 09:45:54 done, took 0 seconds\n", "01/15/25 09:45:54 calling forward run command(s)\n", "01/15/25 09:45:54 calling forward run command: 'python forward_run.py' \n", "...pid: 32613\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:55.443452\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:55.461585\n", "starting arr mlt 2025-01-15 09:45:55.461624\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:55.461892\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.067531\n", "b 9.966125\n", "...exit_code: 32613\n", "...status: 0\n", "01/15/25 09:45:55 forward run command(s) finished, took 1.446 seconds\n", "01/15/25 09:45:55 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:55 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:55 run complete, took: 1.448 seconds\n", "-->6 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:55 processing template files with 1 threads...\n", "01/15/25 09:45:55 done, took 0 seconds\n", "01/15/25 09:45:55 calling forward run command(s)\n", "01/15/25 09:45:55 calling forward run command: 'python forward_run.py' \n", "...pid: 32639\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:56.875164\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:56.893490\n", "starting arr mlt 2025-01-15 09:45:56.893545\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:56.893753\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.067297\n", "b 9.966251\n", "...exit_code: 32639\n", "...status: 0\n", "01/15/25 09:45:57 forward run command(s) finished, took 1.442 seconds\n", "01/15/25 09:45:57 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:57 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:57 run complete, took: 1.444 seconds\n", "-->7 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:57 processing template files with 1 threads...\n", "01/15/25 09:45:57 done, took 0 seconds\n", "01/15/25 09:45:57 calling forward run command(s)\n", "01/15/25 09:45:57 calling forward run command: 'python forward_run.py' \n", "...pid: 32659\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:58.279420\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:58.298890\n", "starting arr mlt 2025-01-15 09:45:58.298964\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:58.299318\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.067281\n", "b 9.966259\n", "...exit_code: 32659\n", "...status: 0\n", "01/15/25 09:45:58 forward run command(s) finished, took 1.442 seconds\n", "01/15/25 09:45:58 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:58 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:58 run complete, took: 1.443 seconds\n", "-->8 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:58 processing template files with 1 threads...\n", "01/15/25 09:45:58 done, took 0 seconds\n", "01/15/25 09:45:58 calling forward run command(s)\n", "01/15/25 09:45:58 calling forward run command: 'python forward_run.py' \n", "...pid: 32689\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:45:59.689478\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:45:59.711241\n", "starting arr mlt 2025-01-15 09:45:59.711289\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:45:59.711518\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.067241\n", "b 9.966280\n", "...exit_code: 32689\n", "...status: 0\n", "01/15/25 09:45:59 forward run command(s) finished, took 1.388 seconds\n", "01/15/25 09:45:59 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:45:59 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:45:59 run complete, took: 1.39 seconds\n", "-->9 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:45:59 processing template files with 1 threads...\n", "01/15/25 09:45:59 done, took 0 seconds\n", "01/15/25 09:45:59 calling forward run command(s)\n", "01/15/25 09:45:59 calling forward run command: 'python forward_run.py' \n", "...pid: 32715\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:01.041017\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:01.057810\n", "starting arr mlt 2025-01-15 09:46:01.057849\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:01.058045\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.067239\n", "b 9.966281\n", "...exit_code: 32715\n", "...status: 0\n", "01/15/25 09:46:01 forward run command(s) finished, took 1.316 seconds\n", "01/15/25 09:46:01 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:01 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:46:01 run complete, took: 1.318 seconds\n", "-->10 of 10 complete, 0 failed\n", "\n", "\n", "\n", "\n", "\n", " --- serial run manager runs summary: --- \n", " 10 of 10 complete, 0 failed\n", " process took : 13.57 seconds\n", "\n", "\n", "\n", "\n", " testing upgrade vectors... \n", "\n", " ...Lambda testing complete for iteration 2\n", " starting phi = 0.862572; ending phi = 0.862564 (99.999% of starting phi)\n", "\n", " Switching to central derivatives:\n", "\n", "\n", "OPTIMISATION ITERATION NUMBER: 3\n", "\n", " Iteration type: base parameter solution\n", " SVD Package: RedSVD\n", " Model calls so far : 25\n", "\n", " calculating jacobian... \n", "\n", "\n", "\n", " --- starting serial run manager for 4 runs --- \n", "\n", "\n", "01/15/25 09:46:01 processing template files with 1 threads...\n", "01/15/25 09:46:01 done, took 0 seconds\n", "01/15/25 09:46:01 calling forward run command(s)\n", "01/15/25 09:46:01 calling forward run command: 'python forward_run.py' \n", "...pid: 32735\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:02.392115\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:02.409113\n", "starting arr mlt 2025-01-15 09:46:02.409162\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:02.409445\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.046836\n", "b 9.965768\n", "...exit_code: 32735\n", "...status: 0\n", "01/15/25 09:46:02 forward run command(s) finished, took 1.337 seconds\n", "01/15/25 09:46:02 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:02 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:46:02 run complete, took: 1.338 seconds\n", "-->1 of 4 complete, 0 failed\n", "\n", "\n", "01/15/25 09:46:02 processing template files with 1 threads...\n", "01/15/25 09:46:02 done, took 0 seconds\n", "01/15/25 09:46:02 calling forward run command(s)\n", "01/15/25 09:46:02 calling forward run command: 'python forward_run.py' \n", "...pid: 32761\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:03.881876\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:03.898378\n", "starting arr mlt 2025-01-15 09:46:03.898429\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:03.898672\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.089564\n", "b 9.965768\n", "...exit_code: 32761\n", "...status: 0\n", "01/15/25 09:46:04 forward run command(s) finished, took 1.482 seconds\n", "01/15/25 09:46:04 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:04 done, took 0.001 seconds\n", "\n", "\n", "-->01/15/25 09:46:04 run complete, took: 1.484 seconds\n", "-->2 of 4 complete, 0 failed\n", "\n", "\n", "01/15/25 09:46:04 processing template files with 1 threads...\n", "01/15/25 09:46:04 done, took 0 seconds\n", "01/15/25 09:46:04 calling forward run command(s)\n", "01/15/25 09:46:04 calling forward run command: 'python forward_run.py' \n", "...pid: 32791\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:05.178735\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:05.196141\n", "starting arr mlt 2025-01-15 09:46:05.196180\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:05.196374\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.068200\n", "b 9.766452\n", "...exit_code: 32791\n", "...status: 0\n", "01/15/25 09:46:05 forward run command(s) finished, took 1.285 seconds\n", "01/15/25 09:46:05 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:05 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:46:05 run complete, took: 1.287 seconds\n", "-->3 of 4 complete, 0 failed\n", "\n", "\n", "01/15/25 09:46:05 processing template files with 1 threads...\n", "01/15/25 09:46:05 done, took 0 seconds\n", "01/15/25 09:46:05 calling forward run command(s)\n", "01/15/25 09:46:05 calling forward run command: 'python forward_run.py' \n", "...pid: 32811\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:06.561187\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:06.585091\n", "starting arr mlt 2025-01-15 09:46:06.585157\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:06.585342\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.068200\n", "b 10.165083\n", "...exit_code: 32811\n", "...status: 0\n", "01/15/25 09:46:06 forward run command(s) finished, took 1.388 seconds\n", "01/15/25 09:46:06 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:06 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:46:06 run complete, took: 1.39 seconds\n", "-->4 of 4 complete, 0 failed\n", "\n", "\n", "\n", "\n", "\n", " --- serial run manager runs summary: --- \n", " 4 of 4 complete, 0 failed\n", " process took : 5.502 seconds\n", "\n", "\n", "\n", "\n", " computing upgrade vectors... \n", " computing upgrade vector (lambda = 0.1) 1 / 5 \n", " computing upgrade vector (lambda = 1) 2 / 5 \n", " computing upgrade vector (lambda = 10) 3 / 5 \n", " computing upgrade vector (lambda = 100) 4 / 5 \n", " computing upgrade vector (lambda = 1000) 5 / 5 \n", "-->starting iteration FOSM process...\n", "-->finished iteration FOSM process...\n", "\n", " performing upgrade vector model runs... \n", "\n", "\n", " --- starting serial run manager for 10 runs --- \n", "\n", "\n", "01/15/25 09:46:06 processing template files with 1 threads...\n", "01/15/25 09:46:06 done, took 0 seconds\n", "01/15/25 09:46:06 calling forward run command(s)\n", "01/15/25 09:46:06 calling forward run command: 'python forward_run.py' \n", "...pid: 32837\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:08.088740\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:08.105651\n", "starting arr mlt 2025-01-15 09:46:08.105694\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:08.105946\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.068213\n", "b 9.965760\n", "...exit_code: 32837\n", "...status: 0\n", "01/15/25 09:46:08 forward run command(s) finished, took 1.5 seconds\n", "01/15/25 09:46:08 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:08 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:46:08 run complete, took: 1.502 seconds\n", "-->1 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:46:08 processing template files with 1 threads...\n", "01/15/25 09:46:08 done, took 0 seconds\n", "01/15/25 09:46:08 calling forward run command(s)\n", "01/15/25 09:46:08 calling forward run command: 'python forward_run.py' \n", "...pid: 32863\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:09.474602\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:09.491795\n", "starting arr mlt 2025-01-15 09:46:09.491833\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:09.492054\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.068210\n", "b 9.965762\n", "...exit_code: 32863\n", "...status: 0\n", "01/15/25 09:46:09 forward run command(s) finished, took 1.381 seconds\n", "01/15/25 09:46:09 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:09 done, took 0.001 seconds\n", "\n", "\n", "-->01/15/25 09:46:09 run complete, took: 1.383 seconds\n", "-->2 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:46:09 processing template files with 1 threads...\n", "01/15/25 09:46:09 done, took 0 seconds\n", "01/15/25 09:46:09 calling forward run command(s)\n", "01/15/25 09:46:09 calling forward run command: 'python forward_run.py' \n", "...pid: 32887\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:10.753318\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:10.770252\n", "starting arr mlt 2025-01-15 09:46:10.770301\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:10.770569\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.068212\n", "b 9.965761\n", "...exit_code: 32887\n", "...status: 0\n", "01/15/25 09:46:10 forward run command(s) finished, took 1.281 seconds\n", "01/15/25 09:46:10 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:10 done, took 0.001 seconds\n", "\n", "\n", "-->01/15/25 09:46:10 run complete, took: 1.284 seconds\n", "-->3 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:46:10 processing template files with 1 threads...\n", "01/15/25 09:46:10 done, took 0 seconds\n", "01/15/25 09:46:10 calling forward run command(s)\n", "01/15/25 09:46:10 calling forward run command: 'python forward_run.py' \n", "...pid: 32913\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:12.045869\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:12.064579\n", "starting arr mlt 2025-01-15 09:46:12.064620\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:12.064807\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.068209\n", "b 9.965763\n", "...exit_code: 32913\n", "...status: 0\n", "01/15/25 09:46:12 forward run command(s) finished, took 1.297 seconds\n", "01/15/25 09:46:12 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:12 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:46:12 run complete, took: 1.3 seconds\n", "-->4 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:46:12 processing template files with 1 threads...\n", "01/15/25 09:46:12 done, took 0 seconds\n", "01/15/25 09:46:12 calling forward run command(s)\n", "01/15/25 09:46:12 calling forward run command: 'python forward_run.py' \n", "...pid: 32939\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:13.354441\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:13.372820\n", "starting arr mlt 2025-01-15 09:46:13.372872\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:13.373126\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.068205\n", "b 9.965764\n", "...exit_code: 32939\n", "...status: 0\n", "01/15/25 09:46:13 forward run command(s) finished, took 1.354 seconds\n", "01/15/25 09:46:13 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:13 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:46:13 run complete, took: 1.356 seconds\n", "-->5 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:46:13 processing template files with 1 threads...\n", "01/15/25 09:46:13 done, took 0 seconds\n", "01/15/25 09:46:13 calling forward run command(s)\n", "01/15/25 09:46:13 calling forward run command: 'python forward_run.py' \n", "...pid: 32966\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:14.732741\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:14.749824\n", "starting arr mlt 2025-01-15 09:46:14.749889\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:14.750179\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.068204\n", "b 9.965765\n", "...exit_code: 32966\n", "...status: 0\n", "01/15/25 09:46:14 forward run command(s) finished, took 1.355 seconds\n", "01/15/25 09:46:14 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:14 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:46:14 run complete, took: 1.357 seconds\n", "-->6 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:46:14 processing template files with 1 threads...\n", "01/15/25 09:46:14 done, took 0 seconds\n", "01/15/25 09:46:14 calling forward run command(s)\n", "01/15/25 09:46:14 calling forward run command: 'python forward_run.py' \n", "...pid: 32992\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:16.103902\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:16.120677\n", "starting arr mlt 2025-01-15 09:46:16.120730\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:16.120989\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.068200\n", "b 9.965767\n", "...exit_code: 32992\n", "...status: 0\n", "01/15/25 09:46:16 forward run command(s) finished, took 1.366 seconds\n", "01/15/25 09:46:16 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:16 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:46:16 run complete, took: 1.368 seconds\n", "-->7 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:46:16 processing template files with 1 threads...\n", "01/15/25 09:46:16 done, took 0 seconds\n", "01/15/25 09:46:16 calling forward run command(s)\n", "01/15/25 09:46:16 calling forward run command: 'python forward_run.py' \n", "...pid: 33015\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:17.451841\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:17.469301\n", "starting arr mlt 2025-01-15 09:46:17.469351\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:17.469602\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.068200\n", "b 9.965767\n", "...exit_code: 33015\n", "...status: 0\n", "01/15/25 09:46:17 forward run command(s) finished, took 1.323 seconds\n", "01/15/25 09:46:17 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:17 done, took 0.001 seconds\n", "\n", "\n", "-->01/15/25 09:46:17 run complete, took: 1.326 seconds\n", "-->8 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:46:17 processing template files with 1 threads...\n", "01/15/25 09:46:17 done, took 0 seconds\n", "01/15/25 09:46:17 calling forward run command(s)\n", "01/15/25 09:46:17 calling forward run command: 'python forward_run.py' \n", "...pid: 33038\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:19.021982\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:19.048679\n", "starting arr mlt 2025-01-15 09:46:19.048726\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:19.048999\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.068200\n", "b 9.965768\n", "...exit_code: 33038\n", "...status: 0\n", "01/15/25 09:46:19 forward run command(s) finished, took 1.648 seconds\n", "01/15/25 09:46:19 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:19 done, took 0 seconds\n", "\n", "\n", "-->01/15/25 09:46:19 run complete, took: 1.65 seconds\n", "-->9 of 10 complete, 0 failed\n", "\n", "\n", "01/15/25 09:46:19 processing template files with 1 threads...\n", "01/15/25 09:46:19 done, took 0 seconds\n", "01/15/25 09:46:19 calling forward run command(s)\n", "01/15/25 09:46:19 calling forward run command: 'python forward_run.py' \n", "...pid: 33071\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/martin/repos/pastas-plugins/.venv/lib/python3.12/site-packages/pyemu/__init__.py:29: UserWarning: Failed to import legacy module. May impact ability to access older methods.ModuleNotFoundError No module named 'flopy'\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "error removing tmp file:simulation.csv\n", "starting list mlt 2025-01-15 09:46:20.544539\n", "number of chunks to process: 1\n", "null mlt file for org_file 'org/parameters_sel.csv', continuing...\n", "process 0 processed 1 process_list_file calls\n", "finished list mlt 2025-01-15 09:46:20.562522\n", "starting arr mlt 2025-01-15 09:46:20.562566\n", "number of chunks to process: 1\n", "process 0 processed 0 process_array_file calls\n", "finished arr mlt 2025-01-15 09:46:20.562792\n", "parameters view\n", " optimal\n", "parnames \n", "a 1.068200\n", "b 9.965768\n", "...exit_code: 33071\n", "...status: 0\n", "01/15/25 09:46:20 forward run command(s) finished, took 1.437 seconds\n", "01/15/25 09:46:20 processing instruction files with 1 threads...\n", "thread 0 processed 1 instruction files\n", "01/15/25 09:46:20 done, took 0.001 seconds\n", "\n", "\n", "-->01/15/25 09:46:20 run complete, took: 1.439 seconds\n", "-->10 of 10 complete, 0 failed\n", "\n", "\n", "\n", "\n", "\n", " --- serial run manager runs summary: --- \n", " 10 of 10 complete, 0 failed\n", " process took : 13.972 seconds\n", "\n", "\n", "\n", "\n", " testing upgrade vectors... \n", "\n", " ...Lambda testing complete for iteration 3\n", " starting phi = 0.862564; ending phi = 0.862564 (100% of starting phi)\n", "\n", "-----------------------------------------\n", " --- OPTIMIZATION COMPLETE --- \n", " Reason for terminating PEST++ simulation: PHIREDSTP / NPHISTP criterion met\n", " Summary of termination criteria:\n", " NOPTMAX = 100 ; NOPT at termination = 3\n", " NPHINORED = 3 ; NPHINORED at termination = 0\n", " NRELPAR = 3; RELPARSTP = 0.01 ; NRELPAR at termination = 2\n", " PHIREDSTP = 0.01; NPHISTP = 3\n", " NPHISTP lowest PHI's:\n", " 0.862564\n", " 0.862564\n", " 0.862572\n", "\n", "FINAL OPTIMISATION RESULTS\n", "\n", " Final phi Total : 0.862564\n", " Contribution to phi from observation group \"oname:simulation.csv_otype:lst_usecol:observations\" : 0.862564\n", "\n", "\n", "...starting posterior FOSM calculations...\n", "\n", "\n", "pestpp-glm analysis complete...\n", "started at 01/15/25 09:45:26\n", "finished at 01/15/25 09:46:20\n", "took 0.916667 minutes\n" ] } ], "source": [ "# setup directories\n", "model_dir = Path(\"model\")\n", "model_dir.mkdir() if not model_dir.exists() else None\n", "temp_dir = Path(\"template\")\n", "temp_dir.mkdir() if not temp_dir.exists() else None\n", "bin_dir = Path(\"bin\")\n", "\n", "# parameter bounds\n", "bound = 10.0\n", "a_ini = 0.8\n", "b_ini = 0.2\n", "parameters = pd.DataFrame(\n", " {\n", " \"optimal\": [a, b],\n", " \"pmin\": [a - bound, b - bound],\n", " \"pmax\": [a + bound, b + bound],\n", " \"initial\": [a_ini, b_ini],\n", " },\n", " index=pd.Index([\"a\", \"b\"], name=\"parnames\"),\n", " dtype=float,\n", ")\n", "# setup files\n", "par_sel = parameters.loc[:, [\"optimal\"]]\n", "par_sel.to_csv(model_dir / \"parameters_sel.csv\")\n", "\n", "observations = pd.Series(y_noise, index=pd.Index(x, name=\"x\"), name=\"Observations\")\n", "observations.to_csv(model_dir / \"simulation.csv\")\n", "\n", "# create pest optimization with pyemu\n", "pf = pyemu.utils.PstFrom(original_d=model_dir, new_d=temp_dir, remove_existing=True)\n", "# parameters\n", "pf.add_parameters(\n", " \"parameters_sel.csv\",\n", " index_cols=[par_sel.index.name],\n", " use_cols=par_sel.columns.to_list(),\n", " par_type=\"grid\",\n", " par_style=\"d\",\n", ")\n", "# observations\n", "pf.add_observations(\n", " \"simulation.csv\", index_cols=[observations.index.name], use_cols=[observations.name]\n", ")\n", "# python scripts to run\n", "pf.add_py_function(file_name=run, call_str=\"run()\", is_pre_cmd=None)\n", "pf.mod_py_cmds.append(\"run()\")\n", "\n", "# create control file\n", "pst = pf.build_pst()\n", "pst.parameter_data.loc[:, [\"parlbnd\", \"parubnd\"]] = parameters.loc[\n", " :, [\"pmin\", \"pmax\"]\n", "].values # parameter bounds\n", "pst.parameter_data[\"partrans\"] = \"none\" # parameter transformation not logarithmic\n", "pst.control_data.noptmax = 100 # optimization runs\n", "pst.write(pf.new_d / \"pest.pst\", version=2)\n", "\n", "# execute\n", "executable = \"pestpp-glm\"\n", "shutil.copy(bin_dir / executable, temp_dir)\n", "pyemu.os_utils.run(f\"{executable} pest.pst\", cwd=pf.new_d)\n", "\n", "# get pets results\n", "ipar = pd.read_csv(temp_dir / \"pest.ipar\", index_col=0).transpose()\n", "a_pest, b_pest = ipar.iloc[:, -1].values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Compare result" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(6.75, 3))\n", "ax.plot(x, y, label=f\"True {a=}, {b=}\")\n", "ax.plot(x, y_noise, marker=\".\", linestyle=\"\", label=\"Noisy\")\n", "ax.plot(\n", " x,\n", " a_fit * x + b_fit,\n", " color=\"k\",\n", " linestyle=\"--\",\n", " label=f\"SciPy Linear Regression a={a_fit:0.3f}, b={b_fit:0.3f}\",\n", ")\n", "ax.plot(\n", " x,\n", " a_pest * x + b_pest,\n", " color=\"r\",\n", " linestyle=\"-.\",\n", " label=f\"{executable} a={a_pest:0.3f}, b={b_pest:0.3f}\",\n", ")\n", "ax.legend(handlelength=2.5)\n", "ax.grid(True)" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 2 }