{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# GoF from binned cost functions\n", "\n", "The builtin cost functions for binned data, `BinnedNLL` and `ExtendedBinnedNLL` have a minimum value which is asymptotically chi2-distributed and thus can be used as a goodness-of-fit statistic. This example shows, that one still needs a large number of entries in each bin to reach the asymptotic regime." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from iminuit import Minuit\n", "from iminuit.cost import BinnedNLL, ExtendedBinnedNLL, LeastSquares\n", "import numpy as np\n", "from numba_stats import norm, expon\n", "import matplotlib.pyplot as plt\n", "import joblib\n", "from scipy.stats import chi2" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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MWOGnnrqKb838OY8J1pToDVu375do0aN0gcffKCysjI98MADGjt2rHbv3u3Xb+DAgX5z+Mknn7TG8K8o0PouqKio8Bt/TEyMvc2kOQy0vtdee82vrmPHjik6Ovqi16Ap81dSUqKcnBzt3LlTmzdv1rlz55SWlqba2tpL7mPMe6EVxO68804rJyfHXm9oaLDi4+OtgoKCJvv//Oc/tzIzM/3aUlJSrH//93+3LMuyGhsbLbfbbf3ud7+zt586dcpyOBzWqlWrWqGCKwu0xh87f/68FRkZaa1YscJuy87OtsaNG9fSQ22WQOtbvny55XK5Lnk80+bwWudv0aJFVmRkpHX69Gm7zaT5+yFJ1tq1ay/b5/nnn7cGDhzo1/bII49Y6enp9vq1/jtrTVdTY1MSExOt/Px8e33evHnW4MGDW25gLeRq6vv4448tSdb//d//XbKPqXPYnPlbu3atFRISYn3zzTd2m6nzZ1mWVVVVZUmySkpKLtnHlPfCoD2DUl9fr7KyMqWmptptoaGhSk1NVWlpaZP7lJaW+vWXpPT0dLv/kSNH5PV6/fq4XC6lpKRc8pitqTk1/tiZM2d07tw5RUdH+7UXFxcrJiZG/fr107Rp0/T999+36NivRnPrO336tHr37q2EhASNGzdO+/fvt7eZNIctMX/Lli3ThAkT1KVLF792E+avOa70GmyJf2emaWxsVE1NzUWvwYMHDyo+Pl433XSTJk6cqKNHj7bRCJtnyJAhiouL06hRo/Tpp5/a7cE2h8uWLVNqaqp69+7t127q/FVXV0vSRc+3HzLlvTBoA8rf//53NTQ0XHRn2tjY2Is+C73A6/Vetv+FfwZyzNbUnBp/bPbs2YqPj/d7oo0ePVp/+tOftHXrVv32t79VSUmJMjIy1NDQ0KLjv5Lm1NevXz+99dZbWrdunf785z+rsbFRd911l7799ltJZs3htc7fZ599pn379umpp57yazdl/prjUq9Bn8+nf/zjHy3ynDfNwoULdfr0af385z+321JSUlRYWKiNGzdqyZIlOnLkiO69917V1NS04UivTlxcnJYuXaq//vWv+utf/6qEhASNGDFCX375paSW+e+WKY4fP64PP/zwotegqfPX2NioGTNm6O6779agQYMu2c+U98I2u9U92t78+fO1evVqFRcX+11IOmHCBPvvpKQkJScnq2/fviouLtbIkSPbYqhXzePx+P3g5F133aUBAwbo97//vV5++eU2HFnLW7ZsmZKSknTnnXf6tbfn+fupKSoqUn5+vtatW+d3jUZGRob9d3JyslJSUtS7d2+98847mjx5clsM9ar169dP/fr1s9fvuusuHT58WIsWLdJ//dd/teHIWt6KFSsUFRWl8ePH+7WbOn85OTnat29fm10PE6igPYPSvXt3hYWFqbKy0q+9srJSbre7yX3cbvdl+1/4ZyDHbE3NqfGChQsXav78+froo4+UnJx82b433XSTunfvrkOHDl3zmANxLfVd0KFDB91222322E2aw2upr7a2VqtXr76q/9i11fw1x6Veg06nU506dWqR54QpVq9eraeeekrvvPPORafTfywqKkq33npru5jDptx555322INlDi3L0ltvvaVJkyYpIiLisn1NmL/p06drw4YN+vjjj9WzZ8/L9jXlvTBoA0pERISGDh2qrVu32m2NjY3aunWr3/9h/5DH4/HrL0mbN2+2+/fp00dut9uvj8/n065duy55zNbUnBqlf159/fLLL2vjxo0aNmzYFR/n22+/1ffff6+4uLgWGffVam59P9TQ0KDy8nJ77CbN4bXUt2bNGtXV1emxxx674uO01fw1x5Vegy3xnDDBqlWr9OSTT2rVqlV+XxG/lNOnT+vw4cPtYg6bsmfPHnvswTKHJSUlOnTo0FX9T0Jbzp9lWZo+fbrWrl2rbdu2qU+fPlfcx5j3wha73NZAq1evthwOh1VYWGgdOHDAmjp1qhUVFWV5vV7Lsixr0qRJ1gsvvGD3//TTT63w8HBr4cKF1ldffWXNmzfP6tChg1VeXm73mT9/vhUVFWWtW7fO2rt3rzVu3DirT58+1j/+8Y/rXp9lBV7j/PnzrYiICOsvf/mLdeLECXupqamxLMuyampqrF/+8pdWaWmpdeTIEWvLli3W7bffbt1yyy3W2bNnja8vPz/f2rRpk3X48GGrrKzMmjBhgtWxY0dr//79dh+T5jDQ+i645557rEceeeSidtPmr6amxtq9e7e1e/duS5L1yiuvWLt377b+9re/WZZlWS+88II1adIku////M//WJ07d7ZmzZplffXVV9bixYutsLAwa+PGjXafK/07u94CrXHlypVWeHi4tXjxYr/X4KlTp+w+zz33nFVcXGwdOXLE+vTTT63U1FSre/fuVlVVlfH1LVq0yHrvvfesgwcPWuXl5dazzz5rhYaGWlu2bLH7mDSHgdZ3wWOPPWalpKQ0eUyT5m/atGmWy+WyiouL/Z5vZ86csfuY+l4Y1AHFsizrjTfesHr16mVFRERYd955p7Vz50572/33329lZ2f79X/nnXesW2+91YqIiLAGDhxovf/++37bGxsbrV//+tdWbGys5XA4rJEjR1oVFRXXo5RLCqTG3r17W5IuWubNm2dZlmWdOXPGSktLs3r06GF16NDB6t27tzVlypQ2+4+/ZQVW34wZM+y+sbGx1pgxY6wvv/zS73imzWGgz9Gvv/7akmR99NFHFx3LtPm78JXTHy8XasrOzrbuv//+i/YZMmSIFRERYd10003W8uXLLzru5f6dXW+B1nj//fdftr9l/fOr1XFxcVZERIT1L//yL9YjjzxiHTp06PoW9v8FWt9vf/tbq2/fvlbHjh2t6Ohoa8SIEda2bdsuOq4pc9ic5+ipU6esTp06WX/4wx+aPKZJ89dUbZL8XlemvheG/P8CAAAAjBG016AAAID2i4ACAACMQ0ABAADGIaAAAADjEFAAAIBxCCgAAMA4BBQAAGAcAgoAADAOAQUAABiHgAIAAIxDQAEAAMYhoAAAAOP8PyTj8qOs+KBdAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def generate(n, seed):\n", " rng = np.random.default_rng(seed)\n", " s = rng.normal(1, 0.1, size=rng.poisson(n))\n", " b = rng.exponential(size=rng.poisson(n))\n", " x = np.append(s, b)\n", " return x[(x > 0) & (x < 2)]\n", "\n", "x = generate(1000, 1)\n", "plt.hist(x, bins=20, range=(0, 2));" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "@joblib.delayed\n", "def run(n, seed):\n", " x = generate(n, seed)\n", " xrange = (0, 2)\n", " w, xe = np.histogram(x, bins=20, range=xrange)\n", "\n", " def model1(x, z, mu, sigma, tau):\n", " return z * norm.cdf(x, mu, sigma) / np.diff(norm.cdf(xrange, mu, sigma)) + (1 - z) * expon.cdf(x, 0, tau) / np.diff(expon.cdf(xrange, 0, tau))\n", "\n", " def model2(x, s, b, mu, sigma, tau):\n", " return s * n * norm.cdf(x, mu, sigma) + b * n * expon.cdf(x, 0, tau)\n", "\n", " m = [\n", " Minuit(BinnedNLL(w, xe, model1), z=0.5, mu=0.5, sigma=0.5, tau=0.5),\n", " Minuit(ExtendedBinnedNLL(w, xe, model2), s=1, b=1, mu=0.5, sigma=0.5, tau=0.5),\n", " ]\n", " for mi in m:\n", " mi.limits[\"mu\"] = (0, 2)\n", " mi.limits[\"sigma\", \"tau\"] = (0.1, None)\n", " m[0].limits[\"z\"] = (0, 1)\n", " m[1].limits[\"s\", \"b\"] = (0, None)\n", " r = []\n", " for mi in m:\n", " mi.migrad()\n", " if mi.valid:\n", " pvalue = 1 - chi2(mi.fcn._fcn.ndata - mi.nfit).cdf(mi.fval)\n", " r.append(pvalue)\n", " else:\n", " r.append(np.nan)\n", " return r\n", "\n", "pvalues = {}\n", "for n in (20, 100, 1000, 10000):\n", " pvalues[n] = np.array(joblib.Parallel(-1)(run(n, i) for i in range(500)))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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ixYt0ty5c/Xpp5/qT3/6kySpW7dukqTZs2erffv2+uUvfyk/Pz999NFHeuKJJ1RUVKTk5GSnrvPll1+qe/fuatKkiZ5//nnVqVNH77//vu699179/e9/13333SdJysnJ0Z133qkLFy7Y682dO1fBwcFXvcYLL7yg1q1ba+7cuZoyZYqio6N14403lqjXsGFDzZ49W6NHj9Z9992nQYMGSZI6duwoSUpMTNSXX36pMWPGqHnz5jp27JjWrVungwcPlvtQFJvNppMnT1bo53H577U0O3bsUKtWrRQSEuJQftttt0mSdu7cqcjIyApdC/B21TWPl8aZPO7qPDBo0CCFhoZq3LhxeuCBB9SvXz/VrVtXkrRt2zZt2bJFQ4cOVdOmTXXgwAHNnj1bvXr10u7du3Xdddc5dZ+PP/64FixYoBEjRuipp57S/v379cc//lE7duzQ5s2b5e/vL0l66aWXNHXqVPXr10/9+vXT559/rj59+ujcuXPltt+2bVstWrRI48aNU9OmTfXMM89IupTfjx8/XiKWI0eOaN26dVq0aJHDuXXr1umBBx7QXXfdZf972bNnjzZv3qynn3663BhOnDihixcvXvVncd1115X786uKz3agJvH1HE7/vnz074HqjzxO/57+vSP69y7m6W8HUHWKv2F85JFHHMrvu+8+06BBgwq//2pHZZcCvfzyy0aSyczMtJcVfwP88ccfl6g/ePBgEx4eXqlrJSUllbrs9cyZMyXKEhISTIsWLRzKKjKz5q677jIdOnRw2BeyqKjIdOvWzbRs2dJeNnbsWCPJbN261V527NgxY7VaK7TstXh57JXLXq/85resZa8nTpyo9JKw4mtX5Lia9u3bm969e5co//LLL40kM2fOHKfjA7xNdc3j5c3WcSaPV0UeKM7PV+a40vJ9VlaWkWTeffdde1lFZtb8+9//NpLMe++959DemjVrHMqPHTtmAgICTP/+/U1RUZG93u9+9zuHmZHliYqKKrHstbTPoLKWvT799NMmJCTEYf/KioqKiqrQ38/Vtleoqs92oLojh89xuk1n0L//Gf17oGqQx53P4/Tvk656P/TvcSVmzvuA3/zmNw6vb7/9di1btkwFBQUlvs283PDhw9WjR4+rtl+RGSFX+vjjjzV58mQNGTJEvXv3tpefPXtWkhQYGFjiPUFBQfbzrnJ57Pn5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/PnzXXINwNe5ep/LqVOnSpK+/PJLSZc6X5988okk6cUXX7TXq2gedyYPTJo0SZMnT9aGDRvUq1cvp2MfMGCAFi1aJKvVqnbt2ikrK0vr16936NhWVM+ePfX4448rLS1NO3fuVJ8+feTv7699+/Zp6dKl+sMf/qD7779fDRs21LPPPqu0tDQNGDBA/fr1044dO7R69WrdcMMNTl+3PDExMZKkp556SgkJCapdu7aGDh2qRx99VD/99JN69+6tpk2b6vvvv9fbb7+tTp06qW3btuW26ao9KSXnPtsBXOJNOZz+vWvQvwdqFl/M4/TvXYf+vQ8x8FoTJ040kszx48cdyjMyMowks3//frfFEhUVZSSVekRFRZWo/+9//9t069bNBAUFmYYNG5rk5GRTUFDgUOfkyZNGkhk6dOhVr5+UlGTq1KlTonzFihWmY8eOJigoyDRv3ty8+uqr5s9//nOJn0/Pnj1Nz5497a/3799vJJmMjAyH9r799lszfPhwEx4ebvz9/U2TJk3MgAEDzAcffOBQ77///a/p2bOnCQoKMk2aNDEvv/yymT9/foV+L8W/v23btpW4xyt/llu2bDExMTEmICDASDITJ040//vf/0xycrJp06aNqVOnjrFarSY2Nta8//775V63Kpw9e9Y8++yzJjw83AQGBppbb73VrFmzxu1xANVVdcrjxpgy83hp3YmK5HFjKp4HnnnmGWOxWMyePXvKjbE4P7/++usO5SdOnDAjRowwN9xwg6lbt65JSEgwX331lYmKijJJSUn2ehs2bDCSzIYNG+xlpeVXY4yZO3euiYmJMcHBwaZevXqmQ4cOZvz48ebIkSP2OhcvXjSTJ082ERERJjg42PTq1ct88cUXJa5blqioKNO/f/9S7/Hyz6ALFy6YMWPGmIYNGxqLxWL/nXzwwQemT58+plGjRiYgIMA0a9bMPP744+bo0aNXvbarVfRvAvAW5HDn26R/T/8eqE7I41XbJv37kvdI/943WYy5ysZxQDW1atUqDRgwQP/5z3/UoUMHT4cDAKhCt912m6KiorR06VJPhwIAqCL07wHAd9C/By5hWxvUWBs2bNDQoUPpuAOAlysoKNB//vMfLVy40NOhAACqEP17APAN9O+BnzFzHgAAAAAAAAAAN6vl6QAAAAAAAAAAAPA1DM4DAAAAAAAAAOBmDM4DAAAA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9etrz5499rKCggKtW7dODz74oEJCQuzlw4cPV926dfX+++87fW2LxaKMjAydPn1aFovFYfuUjIwM9e7dW40aNVJgYKDatWun2bNnl2jjyj0py/LVV1/p/vvvV/369RUUFKQuXbpoxYoVJep9+eWX6t27t4KDg9W0aVNNnTpVRUVFV22/V69eSkpKkiTdeuutslgs9j3NLt8z7cCBA2rYsKEkafLkyfb7Ll4SlZOToxEjRqhp06YKDAxURESE7rnnngrth+kqgYGBCg8Pd9v1gJqmOuXwevXqqX79+let50wO/+CDD1S7dm2NGjXKXhYUFKSRI0cqKytLhw4dcirGSZMmKSoqSpL029/+VhaLxZ4Tv//+ez3xxBNq3bq1goOD1aBBAw0ePLhEzittP8rSFBUVaebMmWrfvr2CgoIUFhamxx9/XCdOnHCoZ4zR1KlT1bRpU1133XW688479eWXX171Xorj2L9/v1auXGnP4QcOHCixH+XDDz+s9PR0SbLXs1gs9raWLFmimJgY1atXTyEhIerQoYP+8Ic/XDUGV7nhhhvUvn37EuX33XefJDn0AQBvQx4/5HSbFUX/vnr277t166aAgACHspYtW6p9+/bke9RI5HHn8zh9/LLRx0dZ/DwdAKrekCFDFB0drbS0NH3++ef605/+pEaNGunVV18t931nzpyp0AdO7dq1df311zsd16lTp3Tq1CndcMMN9rJdu3bpwoULJfYPCwgIUKdOnbRjxw6nr7No0SLNnTtXn376qf70pz9JutRxlKTZs2erffv2+uUvfyk/Pz999NFHeuKJJ1RUVKTk5GSnrvPll1+qe/fuatKkiZ5//nnVqVNH77//vu699179/e9/tyepnJwc3Xnnnbpw4YK93ty5cxUcHHzVa7zwwgtq3bq15s6dqylTpig6Olo33nhjiXoNGzbU7NmzNXr0aN13330aNGiQJKljx46SpMTERH355ZcaM2aMmjdvrmPHjmndunU6ePBguQ9FsdlsOnnyZIV+Hpf/XgFUXnXN4aVxJofv2LFDrVq1cujgS9Jtt90mSdq5c6ciIyMrfO1BgwYpNDRU48aN0wMPPKB+/fqpbt26ki7tgbtlyxYNHTpUTZs21YEDBzR79mz16tVLu3fv1nXXXefUfT7++ONasGCBRowYoaeeekr79+/XH//4R+3YsUObN2+W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nzF1/PhxnThxwunrlqe8fB8QEKCBAwdq4MCBKioq0hNPPKF33nlHEyZMKHdQ6dZbb7XPDCrPxIkTNWnSpKvW+8c//qFHH31UgwYNUnp6+lXrA/CePE7/3nVqQv++sLBQAwcO1Ndff63169erXbt2FWob8Ea+mMfp47sOfXzfweA8yuTK/dFOnz6tfv366fDhw9qwYUOJJUDFrFar4uPj9Ze//EUTJkywz6xftGiRTp06pcGDBzt3E+Uo/vb7yqVPGRkZTrfVqFEj9erVS++8847GjBlT4ouH48eP279p7devn2bOnKlPP/3Uvi/l8ePHy/yGtrKKn6x95QfTmTNnVKtWLfueb9KlD6J69eqVuvzscuw5D9Qcntjj0pkcfv/99+v3v/+95s6dq2effVbSpaWyGRkZio2NVWRkpMviql27dokBhbfffrtCs0auNGTIEM2aNUsvv/xyiX0lL1y4oFOnTik0NFTx8fHy9/fX22+/rT59+tg71zNnzqz0fZSlTp06ki7l+9DQUHv5jz/+qAYNGthf16pVSx07dpRU+rLky7lyP8qPP/5YQ4cO1R133KH33ntPtWrVuup7AHhPHqd/7zrVvX9/8eJF/epXv1JWVpb+8Y9/KC4uziXtAjWVL+Zx+viuQx/fdzA4jzK5cn+0YcOG6dNPP9UjjzyiPXv2aM+ePfZzdevW1b333mt//corr6hbt27q2bOnRo0apR9++EFvvPGG+vTpU2IPLYvFop49e2rjxo1Ox9SnTx/7t42PP/64Tp06pXnz5qlRo0alLte6mvT0dPXo0UMdOnTQY489phYtWig3N1dZWVn64Ycf9J///EeSNH78eC1atEi/+MUv9PTTT6tOnTqaO3euoqKi9N///tfp65YlODhY7dq109/+9je1atVK9evX180336wLFy7orrvu0pAhQ9SuXTv5+flp2bJlys3N1dChQ8tt09V7Uv7xj39UXl6ejhw5IunSbKcffvhB0qUlahXdExRASa7e43Lq1KmSpC+//FLSpc74J598IkkOyxcrmsNjY2M1ePBgpaam6tixY7rpppu0cOFCHThwQPPnz3e49qRJkzR58mRt2LBBvXr1cjr2AQMGaNGiRbJarWrXrp2ysrK0fv16h05tRfXs2VOPP/640tLStHPnTvXp00f+/v7at2+fli5dqj/84Q+6//771bBh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xiorK6vUNm02mwoKChwOAAAAANdm3759aty4sVq0aKFhw4bp4MGDkqTt27fr/PnzDn32Nm3aqFmzZmX22SX67QAAAICrOTVz/rvvvtPs2bOVkpKi3/3ud9q2bZueeuopBQQEKCkpSTk5OZKksLAwh/eFhYXZz10pLS1NkydPrmT4pfPkUjYAqIkOHz6s5557TqtXr9aZM2d00003KSMjQ126dJF0aWXUxIkTNW/ePOXl5al79+6aPXu2WrZs6eHIAQCliY2N1YIFC9S6dWsdPXpUkydP1u23364vvvhCOTk5CggIUGhoqMN7yuuzS1XTbwcAAAB8mVMz54uKinTLLbdo2rRp6ty5s0aNGqXHHntMc+bMqXQAqampys/Ptx+HDh2qdFsAAOcVP0/E399fq1ev1u7du/XGG2+U+jyROXPmaOvWrapTp44SEhJUWFjowcgBAGXp27evBg8erI4dOyohIUGrVq1SXl6e3n///Uq3Sb8dAAAAcC2nZs5HRESoXbt2DmVt27bV3//+d0my72mZm5uriIgIe53c3Fx16tSp1DYDAwMVGBjoTBgAABfieSIA4P1CQ0PVqlUrffPNN7r77rt17tw55eXlOcyez83NLXWP+mL02wEAAADXcmpwvnv37tq7d69D2ddff62oqChJlwZzwsPDlZmZaR+MLygo0NatWzV69GjXRAwAcKkVK1YoISFBgwcP1qZNm9SkSRM98cQTeuyxxyRd/XkipQ3O22w22Ww2+2v2JQYAzzp16pS+/fZbPfTQQ4qJiZG/v78yMzOVmJgoSdq7d68OHjyouLg4D0cKAABQvXlyO+0D0/t77NqoGk5tazNu3DhlZ2dr2rRp+uabb7R48WLNnTtXycnJkiSLxaKxY8dq6tSpWrFihXbt2qXhw4ercePGuvfee6sifgDANSp+nkjLli21du1ajR49Wk899ZQWLlwoSZV+nojVarUfkZGRVXsTAAAHzz77rDZt2qQDBw5oy5Ytuu+++1S7dm098MADslqtGjlypFJSUrRhwwZt375dI0aMUFxcnLp27erp0AEAAACf4dTM+VtvvVXLli1TamqqpkyZoujoaM2cOVPDhg2z1xk/frxOnz6tUaNGKS8vTz169NCaNWsUFBTk8uABANeuqKhIXbp00bRp0yRJnTt31hdffKE5c+YoKSmpUm2mpqYqJSXF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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(2, 4, figsize=(15, 6), constrained_layout=True)\n", "for i, (ni, vi) in enumerate(pvalues.items()):\n", " ax[0, i].hist(vi[:, 0])\n", " ax[1, i].hist(vi[:, 1])\n", " ax[0, i].set_title(f\"n = {ni}, failed fits = {np.sum(np.isnan(vi[:, 0]))}\")\n", " ax[1, i].set_title(f\"n = {ni}, failed fits = {np.sum(np.isnan(vi[:, 1]))}\")\n", "fig.supxlabel(\"pvalue\");" ] } ], "metadata": { "interpreter": { "hash": "bdbf20ff2e92a3ae3002db8b02bd1dd1b287e934c884beb29a73dced9dbd0fa3" }, "kernelspec": { "display_name": "Python 3.8.12 ('venv': 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.10.8 (main, Oct 13 2022, 09:48:40) [Clang 14.0.0 (clang-1400.0.29.102)]" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }