{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Acquisition functions\n", "PyALAF makes use of so-called acquisition functions. After a model is fitted, the acquisition function is calculated for all potential data points which are not evaluated yet. Then the maxima of the acquisition function tell the program which data points should be added to the data set within the Active Learning process.\n", "Basically, PyALAF uses a 5-step scheme:\n", "1. Fit a model\n", "2. Calculate the acquisition function based on the models prediction and find its maximum\n", "3. Calculate the true value for the data point with the (global) maximum\n", "4. Add the data point to the data set\n", "5. Repeat 1-4\n", "\n", "You repeat this until you are satisified with the accuracy of the model or until you have picked a maximum number of data points.\n", "Batch-wise learning is realized as the following:\n", "1. Fit a model\n", "2. Calculate the acquisition function based on the models prediction and find its maximum\n", "3. Assume that the true value of the data point with the (global) maximum is equal to the models prediction\n", "4. Add the data point to the data set and mark it as approximated\n", "5. Repeat 1-4 until you have added the desired number of data points in your batch\n", "6. Calculate the true value for all data points marked as approximated and change the values accordingly. \n", "7. Repeat 1-6\n", "\n", "Again, you repeat this scheme until you are satisfied with the accuracy of the model or until you have picked a maximum number of data points or batches. \n", "\n", "PyALAF provides a number of different acquisition functions mainly taken from [1](https://doi.org/10.1016/j.ins.2018.09.060) and [2](https://doi.org/10.1016/j.ins.2023.01.028) for optimizing the whole model. \n", "Furthermore, acquisition functions known from Bayesian Optimization are implemented which can be used to find the maximum of a function quickly.\n", "\n", "The following acquisition functions are implemented:\n", "\n", "1. GSx [[1](https://doi.org/10.1016/j.ins.2018.09.060)]\n", "2. GSy [[1](https://doi.org/10.1016/j.ins.2018.09.060)]\n", "3. iGS [[1](https://doi.org/10.1016/j.ins.2018.09.060)]\n", "4. IDEAL [[2](https://doi.org/10.1016/j.ins.2023.01.028)]\n", "5. UCB - Upper Confidence Bound [[3](https://ekamperi.github.io/machine%20learning/2021/06/11/acquisition-functions.html)]\n", "6. POI - Probability of Improvement [[3](https://ekamperi.github.io/machine%20learning/2021/06/11/acquisition-functions.html)]\n", "7. EI - Expected Improvement [[3](https://ekamperi.github.io/machine%20learning/2021/06/11/acquisition-functions.html)]\n", "8. QBC - Query by Commitee\n", "9. std - Standard deviation\n", "10. UIDAL - self-designed: Using parts of IDEAL + std\n", "11. SGSx - self-designed: Weighted GSx + std\n", "\n", "\n", "Note that there are different implementations of acquisition functions available, either desired for calculating the acquisition function for all data points in a pool (acfn_discrete module) or for finding the maximum of the acquisition function together with global optimization routines (acfn_continuous module).\n", "\n", "Not all acquisition functions can be used with all scikit-learn model types. All models requiring an uncertainty or standard deviation can only be used with Gaussian Process Regression models in this version of code. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Description of some acquisition functions\n", "For functions not described here or for further information please see the references.\n", "\n", "### UCB\n", "The Upper Confidence Bound is given as\n", "$$\n", "UCB = \\mu + \\lambda\\sigma\n", "$$\n", "where $\\mu$ is the predicted value for a data point and $\\sigma$ is the uncertainty. $\\alpha$ is a weighting factor.\n", "\n", "### POI\n", "The Probability of Improvement is given as\n", "$$\n", "POI = \\Phi\\left(\\frac{\\mu - f_\\mathrm{max} - \\alpha}{\\sigma}\\right)\n", "$$\n", "where $f_\\mathrm{max}$ is the maximum value of the function found so far, $\\alpha$ is an hyperparameter which can be used to adjust the maximum and enforce more exploration or exploitation in this way. $\\Phi$ is the cummulative distribution function given as $\\Phi(x) = P(X \\leqslant x)$.\n", "\n", "### EI\n", "The Expected Improvement is given as\n", "$$\n", "EI = (\\mu-f_\\mathrm{max}-\\alpha) \\Phi\\left(\\frac{\\mu - f_\\mathrm{max} - \\alpha}{\\sigma}\\right) + \\sigma\\Theta\\left(\\frac{\\mu - f_\\mathrm{max} - \\alpha}{\\sigma}\\right)\n", "$$\n", "where $\\Theta$ is the probability density function. If the hyperparameter $\\alpha>0$ the algorithm tends toward more exploration instead of exploitation by assuming a larger maximum than actually found.\n", "\n", "Note that POI and EI can also be formulated as a minimization problem instead of a maximization problem when searching for the minimum of a function.\n", "\n", "### QBC\n", "A number of $\\alpha$ models is trained. Data points where the models disagree most are selected for adding to the data set.\n", "\n", "### Standard deviation\n", "Uses the standard deviation $\\sigma$ predicted by GPR models.\n", "\n", "### UIDAL\n", "The UIDAL function is given as:\n", "$$\n", "UIDAL = \\sigma + \\alpha Z \n", "$$\n", "where Z is taken from the IDEAL algorithm.\n", "\n", "### SGSx\n", "The SGSx function is given as \n", "$$\n", "SGSx = \\sigma^\\alpha + GSx^{1-\\alpha}\n", "$$\n", "with a hyperparameter $0\\leqslant\\alpha\\leqslant1$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Custom acquisition functions\n", "Currently it is not possible to use custom acquisition functions for nearly all active learning routines. There is an experimental feature which allows custom acquisition functions in the `run_continuous_batch_learning` function. \n", "Just provide a callable as the acquisition function and provide the custom_acfn_list as a further parameter.\n", "\n", "This is a list of arguments which the custom acquisition function takes as input. It is important that the callable takes the arguments in the described order. The arguments must also be named as described here:\n", "\n", "- x0: First argument, does not need to appear in this list.\n", "- x: Values of the features of all evaluated samples\n", "- y: Objective values of all evaluated samples\n", "- max_y: Maximum observed value of all evaluated samples regression_model: sklearn model used for the fitting\n", "- lim: boundary \n", "- alpha: hyperparameter\n", "- poly_x: sklearn poly_transformer. Must be given if a linear regression model should be used with the acquisition function\n", "\n", "The callable must return the value of the acquisition function as a float or as a numpy_array of floats.\n", "In the example below, we show how a custom acquisition function can be used. We just take a similar example as in the Introduction notebook." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Disabled warnings\n", "Disabled warnings\n", "Disabled warnings\n" ] } ], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "from PyALAF.models import inv_sphere\n", "from PyALAF.multi_optimize import run_continuous_batch_learning_multi\n", "from PyALAF.aggregation_fn import identity_aggregation_fn as identity\n", "\n", "from sklearn.gaussian_process import GaussianProcessRegressor as GPR\n", "from sklearn.gaussian_process.kernels import RBF, WhiteKernel\n", "\n", "from scipy.stats import norm\n", "\n", "random_state=41" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "#Parameters for grid\n", "grid_size = 1000 #Number of data points per dimension\n", "dimensions = 1 #Number of dimensions\n", "lim = [[-2,],[2,]] #Bounds for each dimension. First lower bounds, than upper bounds\n", "\n", "#Create a grid for arbitrary number of dimensions\n", "x = []\n", "[x.append(np.linspace(lim[0][i],lim[1][i], grid_size )) for i in range(dimensions)]\n", "pool = np.meshgrid(*x)\n", "pool = np.array(pool).T\n", "test_pool = pool.reshape(grid_size**dimensions, dimensions)\n", "\n", "#Data model\n", "data_model = inv_sphere(d=dimensions, random_state=random_state)\n", "noise = np.sqrt(1e-6)\n", "\n", "#Regression model\n", "kernel = RBF(length_scale=0.1, length_scale_bounds=[0.05,10])+WhiteKernel()\n", "regression_model = GPR(kernel)\n", "\n", "#Active Learning parameters\n", "initial_samples=5 #Number of initial data points \n", "max_samples=9 #Number of data points that are maximally acquired \n", "batch_size=1 #Collect data points in batches of five before evaluating the model with a test data set\n", "n_repetitions=1 #Repeat the active learning only once\n", " \n", "initialization_method = 'random' #Algorithm to collect initial data\n", "optimization_method = 'PSO' #Algorithm to search for the maximum of the acquisition function. Choose from 'PSO' or 'lbfgs'AttributeError\n", "n_jobs = 1 #Number of jobs to start for parallel computing\n", "\n", "pso_options = {'c1': 0.5, 'c2': 0.3, 'w': 0.9, 'p':10*dimensions, 'i':50} #Options for particle swarm optimization\n", "\n", "active_learning_steps = int((max_samples-initial_samples)/batch_size) #Number of AL steps is calculated automatically" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can define our own acquisition function. Here, we just use the basic Expected Improvement function for illustration purposes.\n", "Since we use only a single objective, we can ignore the aggregation function, but we need to provide it as input. If we handle more than one objective, we would need to use the aggregation function." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "custom_acfn_input = ['regression_models', 'max_y', 'alpha'] #Here are all arguments listet that EI_con takes as input\n", "\n", "#This is the expected Improvement acquisition function\n", "def EI(x, regression_models, max_y, alpha, aggregation_function):\n", " regression_model = regression_models[0]\n", " if len(x.shape) == 1:\n", " x = x.reshape(1,-1)\n", " mean, uncertainty = regression_model.predict(x, return_std=True)\n", " f_max = max_y\n", " cdf = norm.cdf((mean-f_max-alpha)/uncertainty)\n", " pdf = norm.pdf((mean-f_max-alpha)/uncertainty)\n", " ei = (mean-f_max-alpha)*cdf + uncertainty*pdf\n", " return -ei" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then, we just run the Active Learning (or Bayesian Optimization in the case of EI) with our custom acquisition function." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-01-30 12:46:21,125 - basic_logger - INFO - Setting up Active Learning\n", "2026-01-30 12:46:21,130 - basic_logger - INFO - Noise converted: \n", "2026-01-30 12:46:21,131 - basic_logger - INFO - from 0.001 to [0.001]\n", "2026-01-30 12:46:21,131 - basic_logger - INFO - Test metrics will be calculated.\n", "2026-01-30 12:46:21,133 - basic_logger - INFO - Initialization method: random\n", "2026-01-30 12:46:21,133 - basic_logger - INFO - Initialization finished.\n", "2026-01-30 12:46:21,159 - basic_logger - INFO - Start Active Learning\n", "2026-01-30 12:46:21,161 - basic_logger - INFO - Optimization method: PSO\n", "2026-01-30 12:46:21,167 - basic_logger - INFO - Acquisition function: \n", "2026-01-30 12:46:21,168 - basic_logger - INFO - Step 1\n" ] } ], "source": [ "%%capture\n", "samples, values, result = run_continuous_batch_learning_multi(\n", " models = [data_model], \n", " aggregation_function=identity,\n", " regression_models = [regression_model],\n", " acquisition_function = EI,\n", " opt_method = optimization_method,\n", " pool = test_pool, \n", " batch_size=batch_size,\n", " noise=noise,\n", " initial_samples=initial_samples, \n", " active_learning_steps=active_learning_steps,\n", " lim_features=lim,\n", " alpha=0,\n", " n_jobs=n_jobs,\n", " random_state=random_state,\n", " calculate_test_metrics=True,\n", " initialization=initialization_method,\n", " pso_options=pso_options,\n", " custom_acfn_input=custom_acfn_input\n", " )\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And finally, we plot the results of our Bayesian Optimization." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'y')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABAgAAAGXCAYAAAA+kWIrAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAACdAUlEQVR4nOzdeVxU9f7H8dfMsKOAyq4o7rgvuGGuSWq7qZVmuWTaZuVyK+3XervlrW5ltpm3sk1bLDO1sty1xA3FLcFdEARFZBFkm5nfHyg3cskFOTPwfj4e54Gc+Z4z70HlzHzOdzHZ7XY7IiIiIiIiIlKlmY0OICIiIiIiIiLGU4FARERERERERFQgEBEREREREREVCEREREREREQEFQhEREREREREBBUIRERERERERAQVCEREREREREQEFQhEREREREREBBUIRERERERERAQVCEREREREREQEFQhERESkHL377ruEh4fj4eFB586d2bBhwwXbz507l4iICDw8PGjVqhU//fRTmcfnzZtH3759qVWrFiaTibi4uLPOkZ+fz8MPP0ytWrWoVq0agwYNIi0trTxfloiISJWgAoGIiIiUi6+//pqJEyfy3HPPsXnzZtq0aUO/fv04evToOduvXbuWoUOHMnr0aLZs2cKAAQMYMGAAO3bsKG2Tm5tLt27deOWVV877vBMmTGDhwoXMnTuXVatWkZKSwsCBA8v99YmIiFR2Jrvdbjc6hIiIiDi/zp0707FjR9555x0AbDYbYWFhPPLII0yePPms9nfeeSe5ubksWrSodF+XLl1o27YtM2bMKNP24MGD1K9fny1bttC2bdvS/VlZWQQEBDBnzhwGDx4MQHx8PM2aNSMmJoYuXbpchVcqIiJSObkYHcDR2Ww2UlJSqF69OiaTyeg4IiIi2O12cnJyCA0NxWx2jM6AhYWFxMbGMmXKlNJ9ZrOZ6OhoYmJiznlMTEwMEydOLLOvX79+zJ8//6KfNzY2lqKiIqKjo0v3RUREULdu3fMWCAoKCigoKCj93mazkZGRUTqMQURExGhGXetVIPgbKSkphIWFGR1DRETkLElJSdSpU8foGACkp6djtVoJCgoqsz8oKIj4+PhzHpOamnrO9qmpqRf9vKmpqbi5ueHn53fR55k6dSovvPDCRT+HiIiIUSr6Wq8Cwd+oXr06UPIX4+PjY3AaERERyM7OJiwsrPQaJZdmypQpZXouZGVlUbduXV3rRUTEYRh1rVeB4G+c6Wro4+OjNw0iIuJQHKk7vL+/PxaL5azVA9LS0ggODj7nMcHBwZfU/nznKCwsJDMzs0wvggudx93dHXd397P261ovIiKOpqKv9Y4xcFFEREScmpubG5GRkSxbtqx0n81mY9myZURFRZ3zmKioqDLtAZYsWXLe9ucSGRmJq6trmfMkJCSQmJh4SecRERER9SAQERGRcjJx4kRGjBhBhw4d6NSpE9OmTSM3N5dRo0YBMHz4cGrXrs3UqVMBeOyxx+jZsyevv/46N954I1999RWbNm1i5syZpefMyMggMTGRlJQUoOTDP5T0HAgODsbX15fRo0czceJEatasiY+PD4888ghRUVFawUBEROQSqUAgIiIi5eLOO+/k2LFjPPvss6SmptK2bVsWL15cOhFhYmJimZmYu3btypw5c3j66ad56qmnaNy4MfPnz6dly5albRYsWFBaYAAYMmQIAM899xzPP/88AG+++SZms5lBgwZRUFBAv379eO+99yrgFYuIiFQuJrvdbjc6hCPLzs7G19eXrKwsjUsUuUTh4eEcOnTorP01a9bkl19+oVGjRvTr14/Y2FisVivu7u6MHDmS999/36HGVos4Gl2bypd+niIi4miMujZpDgIRuWo2btzIrl27qFOnDnfccQdvv/02AJMnT6ZGjRr06NGD2NhYXnrpJVasWMEtt9zCBx98wIsvvmhwchERERGRqkcFAhG5agICAvjkk08IDw/n66+/Zu/evTRs2JB//OMfhIaGsmPHDq699lqefPJJevXqxTfffIOfnx/ffPON0dFFRERERKocFQhE5KpasGABHTp0YNCgQUyfPp28vDw+/PBDiouLsdvtbN26ld27dwOwdetWcnNzsVqtBqcWEREREal6NEmhiJQ/qxXWrIEjR9i/dy/v79/P9ddfj9lsZvyNN/LoQw/htnAhUc2bczgnh6ZNm2KxWLBarZhMJmw2m9GvQERERESkynG6HgTvvvsu4eHheHh40LlzZzZs2HDB9nPnziUiIgIPDw9atWrFTz/9VEFJRaqouXMhOBh694a77sJWVER7u528uDiuN5t54sMPGVNczIyFC7nzjz9IS0oqPbRBgwa4urqSk5Nj4AsQEREREamanKpA8PXXXzNx4kSee+45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YlE91jVr1oiXl5csX75ciouLZfLkyRIQECCVlZXN1t+1a5d06dJFXnvtNSkpKZFnn31WPD095eDBg6rH2hx741+xYoX4+/tbrWez2ezkqP/r888/l2eeeUbWr18vAOTvf/97q/W///578fX1laysLCkpKZFFixZJly5d5IsvvnBOwNexN/6vvvpKAEh5ebnVGFy+fNk5AV8jJSVFVqxYIUVFRbJ//34ZM2aMREREyPnz51tcxtW2/86mPcfO3NxcycnJkZycHAEgP/30k93tWiwWCQkJkYyMDCkqKpIPP/xQfHx8ZOnSpZr0qa35xIULF6z2nx9//FFSUlJk+PDhSh019zU1+iQiAkBWrFhhFe+153A1j39q9Ondd9+VJ554QvLy8qSiokJWrVolPj4+smjRIqWOo8ZJjXO5LfOq9qw3rfpUVVUlycnJsnbtWikrKxOTySTx8fEyaNAgq3YiIyPlxRdftBqP1s4LWvVHxLa5uzuNkYg0ObYtX75cdDqdVFRUKHXUGqP29GnPnj3y1FNPyYcffihGo1Fyc3Pb1aYjPkcyQeBkr732mkRFRbX4elVVlXh6esq6deuUstLSUgEgJpPJGSE2a8WKFXYlCNLS0lSNx162xn/lyhUxGo0yf/58payqqkr0er18+OGHKkbYVElJiQCQvXv3KmWbNm0SnU4nJ0+ebHG54cOHy5NPPumECK3Fx8dLZmam8vzy5csSFhYmOTk5zda///775c4777QqS0hIkEceeUTVOFtib/z27BPOZssH7KefflpuvfVWq7Lf/e53kpKSomJktrEnQdDchzitnT59WgDI119/3WIdV9v+O5P2HjsbtbRt2dLu4sWLpVu3blJbW6vUmTVrlkRHRzu9T+2ZT5w+fVo8PT3l/fffV8rU2tfU7FNbxxC1jn/OGicRkccee0xGjhypPHfUODn6XG7LvKqj+6yz+9ScPXv2CAD54YcflLLIyMhmP+R1lBr9aWvu3hnGKC0tTUaNGmVVptYYidjfJ1viaqtNR32O5E8MnMxisSAwMLDF1wsKClBfX4/k5GSlLCYmBhERETCZTM4I0SHy8vIQHByM6OhoPProozh79qzWIdnkyJEjMJvNVuvfYDAgISHB6evfZDIhICAAgwcPVsqSk5Ph4eGB3bt3t7rsBx98gB49eqBv377Izs7GhQsXVI21rq4O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8MADzb6vmvuaGn3atGmTxMXFiZ+fn9xwww3Sv39/eeutt+Ty5ctW763W8U+NPrW0bUZGRip1HDlOjj6X2zKvsmXf6ghH9qlxDFubXxYUFEhCQoIYDAbx9vaW2NhYefXVVx32zzJH9sfWubs7jVGjpUuXio+Pj1RVVTV5Te0xsrdPLW1X18/dWmtTxDGfI3Ui19z3hYiIiIiIiIj+J3loHQARERERERERaY8JAiIiIiIiIiJigoCIiIiIiIiImCAgIiIiIiIiIjBBQERERERERERggoCIiIiIiIiIwAQBEREREREREYEJAiIiIiIiIiICEwREREREREREBCYIiIiIiIiIiAhMEBARERERERERmCAgIpWdOXMGRqMRr776qlKWn58PLy8vbNu2TcPIiIiIyBF4rifqPHQiIloHQUSd2+eff4577rkH+fn5iI6ORlxcHNLS0rBw4UKtQyMiIiIH4LmeqHNggoCInCIzMxNbt27F4MGDcfDgQezduxd6vV7rsIiIiMhBeK4ncn9MEBCRU1y8eBF9+/bF8ePHUVBQgH79+mkdEhERETkQz/VE7o/XICAip6ioqMCpU6dw5coVHD16VOtwiIiIyMF4ridyf/wGARGprq6uDvHx8YiLi0N0dDRef/11HDx4EMHBwVqHRkRERA7Acz1R58AEARGpbubMmfj4449x4MAB+Pn5Yfjw4TAYDPjss8+0Do2IiIgcgOd6os6BPzEgIlXl5eXh9ddfx6pVq+Dv7w8PDw+sWrUK33zzDZYsWaJ1eERERNRBPNcTdR78BgERERERERER8RsERERERERERMQEARERERERERGBCQIiIiIiIiIiAhMERERERERERAQmCIiIiIiIiIgITBAQEREREREREZggICIiIiIiIiIwQUBEREREREREYIKAiIiIiIiIiMAEARERERERERGBCQIiIiIiIiIiAvB/hD/ohRm6KEUAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12,4.4))\n", "ax1.plot(test_pool, data_model.evaluate(test_pool))\n", "ax2.plot(test_pool, data_model.evaluate(test_pool))\n", "\n", "x_s = samples\n", "y_s = data_model.evaluate(samples)\n", "\n", "ax1.plot(x_s, y_s, 'ro')\n", "for txt in range(len(x_s)):\n", " ax1.annotate(txt+1, (x_s[txt], y_s[txt]))\n", "ax2.plot(x_s, y_s, 'ro')\n", "for txt in range(len(x_s)):\n", " ax2.annotate(txt+1, (x_s[txt], y_s[txt]))\n", "ax2.set_xlim(-0.1, 0.1)\n", "ax2.set_ylim(-0.02, 0.01)\n", "ax1.set_xlabel('x')\n", "ax1.set_ylabel('y')\n", "ax2.set_xlabel('x')\n", "ax2.set_ylabel('y')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Side note: If you want to use an already implemented acquisition function in PyALAF, just provide the corresponding string as the `acquisition_function` parameter." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[1] Wu, D.; Lin, C.-T.; Huang, J. Information Sciences 2019, 474, 90–105., doi: https://doi.org/10.1016/j.ins.2018.09.060.
\n", "[2] Bemporad, A. Information Sciences 2023, 626, 275–292.,doi: https://doi.org/10.1016/j.ins.2023.01.028.
\n", "[3] https://ekamperi.github.io/machine%20learning/2021/06/11/acquisition-functions.html" ] } ], "metadata": { "kernelspec": { "display_name": "LECA_dev", "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.9.0" } }, "nbformat": 4, "nbformat_minor": 2 }