diff --git a/experiments/multitask/figures/baumgartner_catalyst_base_distribution.png b/experiments/multitask/figures/baumgartner_catalyst_base_distribution.png new file mode 100644 index 00000000..a4f3bd78 Binary files /dev/null and b/experiments/multitask/figures/baumgartner_catalyst_base_distribution.png differ diff --git a/experiments/multitask/figures/baumgartner_catalyst_base_yields.png b/experiments/multitask/figures/baumgartner_catalyst_base_yields.png new file mode 100644 index 00000000..0e835ffb Binary files /dev/null and b/experiments/multitask/figures/baumgartner_catalyst_base_yields.png differ diff --git a/experiments/multitask/figures/data_distribution_similar_catalyst_base.png b/experiments/multitask/figures/data_distribution_similar_catalyst_base.png new file mode 100644 index 00000000..fefce0d4 Binary files /dev/null and b/experiments/multitask/figures/data_distribution_similar_catalyst_base.png differ diff --git a/experiments/multitask/figures/yield_distribution_different_catalyst_base.png b/experiments/multitask/figures/yield_distribution_different_catalyst_base.png new file mode 100644 index 00000000..b5ca5938 Binary files /dev/null and b/experiments/multitask/figures/yield_distribution_different_catalyst_base.png differ diff --git a/experiments/multitask/figures/yield_distribution_similar_equiv_time_temp.png b/experiments/multitask/figures/yield_distribution_similar_equiv_time_temp.png new file mode 100644 index 00000000..13c571fd Binary files /dev/null and b/experiments/multitask/figures/yield_distribution_similar_equiv_time_temp.png differ diff --git a/experiments/multitask/multitask_paper_results.ipynb b/experiments/multitask/multitask_paper_results.ipynb index 1bb50468..f4be8149 100644 --- a/experiments/multitask/multitask_paper_results.ipynb +++ b/experiments/multitask/multitask_paper_results.ipynb @@ -1,1038 +1,1456 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "%load_ext autoreload\n", - "%autoreload 2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Multi-Task BO NIPS Paper\n", - "\n", - "This is a paper for the [ML4Molecules workshop](https://ml4molecules.github.io/) at NIPS 2020." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "from summit.strategies import STBO, MTBO, Transform, LHS, Chimera\n", - "from summit.benchmarks import (\n", - " MIT_case1,\n", - " MIT_case2,MIT_case3,\n", - " MIT_case4,\n", - " MIT_case5,\n", - " BaumgartnerCrossCouplingEmulator,\n", - " get_pretrained_baumgartner_cc_emulator,\n", - " ExperimentalEmulator\n", - ")\n", - "from summit.utils.dataset import DataSet\n", - "from summit.domain import *\n", - "import summit\n", - "import pathlib\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from typing import List\n", - "from IPython.display import clear_output\n", - "from copy import deepcopy\n", - "import pathlib" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "def run_stbo(exp, max_iterations=10, categorical_method=\"one-hot\"):\n", - " exp.reset()\n", - " strategy = STBO(exp.domain, \n", - " categorical_method=categorical_method)\n", - " r = summit.Runner(strategy=strategy, \n", - " experiment=exp, \n", - " max_iterations=max_iterations)\n", - " r.run()\n", - " return r\n", - "\n", - "def run_mtbo(exp, pt_data, max_iterations=10):\n", - " strategy = MTBO(exp.domain, \n", - " pretraining_data=pt_data,\n", - " categorical_method=\"one-hot\", \n", - " task=1)\n", - " r = summit.Runner(strategy=strategy,\n", - " experiment=exp, \n", - " max_iterations=max_iterations)\n", - " r.run()\n", - " return r\n", - "\n", - "def make_average_plot(results: List[summit.Runner], ax, label=None, color=None):\n", - " objective = results[0].experiment.domain.output_variables[0].name\n", - " yields = [r.experiment.data[objective] for r in results]\n", - " yields = np.array(yields)\n", - " mean_yield = np.mean(yields, axis=0)\n", - " std_yield = np.std(yields, axis=0)\n", - " x = np.arange(0, len(mean_yield), 1).astype(int)\n", - " ax.plot(x, mean_yield, label=label, linewidth=2)\n", - " ax.fill_between(x, mean_yield-std_yield, mean_yield+std_yield, alpha=0.1)\n", - "\n", - "def make_comparison_plot(*args):\n", - " fig, ax = plt.subplots(1)\n", - " for arg in args:\n", - " make_average_plot(arg['results'], ax, label=arg[\"label\"], color=arg.get(\"color\"))\n", - " fontdict = fontdict={\"size\":12}\n", - " ax.legend(loc = \"lower right\", prop=fontdict)\n", - " ax.set_xlim(0,20)\n", - " ax.set_xticks(np.arange(0, 20, 2).astype(int))\n", - " ax.set_ylabel('Yield', fontdict=fontdict)\n", - " ax.set_xlabel('Reactions', fontdict=fontdict)\n", - " ax.tick_params(direction='in')\n", - " return fig, ax" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "N_REPEATS = 10\n", - "MAX_ITERATIONS = 20" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Kinetic Models" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![](figures/baumgartner_mechanisms.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We will use MIT case 1 as the auxiliary task for pretraining." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "exp_pt = MIT_case1(noise_level=1)\n", - "exp_pt.domain" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We first generate different amounts of data using latin hypercube sampling." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, we can run single-task and multi-task Bayesian optimization." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def generate_mit_case_1_data(n_points):\n", - " exp_pt = MIT_case1(noise_level=1)\n", - " rs = np.random.RandomState(100)\n", - " lhs = LHS(exp_pt.domain, random_state=rs)\n", - " conditions = lhs.suggest_experiments(n_points)\n", - " exp_pt.run_experiments(conditions)\n", - " pt_data = exp_pt.data\n", - " pt_data['task', 'METADATA'] = 0\n", - " return pt_data\n", - "\n", - "n_aux = [5, 10, 50]\n", - "aux_datasets = [generate_mit_case_1_data(n) for n in n_aux]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Same Mechanism" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Single-Task Bayesian Optimization\n", - "for i in range(N_REPEATS):\n", - " print(f\"Repeat {i}\")\n", - " exp = MIT_case2(noise_level=1)\n", - " result = run_stbo(exp, max_iterations=MAX_ITERATIONS)\n", - " result.save(f\"data/kinetics_similar/stbo_case1-2_noise_repeat_{i}.json\")\n", - " clear_output(wait=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Multi-Task Bayesian Optimization\n", - "for n, dataset in zip(n_aux, aux_datasets):\n", - " for i in range(N_REPEATS):\n", - " print(f\"Repeat {i}\")\n", - " exp = MIT_case2(noise_level=1)\n", - " result = run_mtbo(exp, dataset, max_iterations=MAX_ITERATIONS)\n", - " result.save(f\"data/kinetics_similar/mtbo_case1-2_noise_{n}-pre-train_repeat_{i}.json\")\n", - " clear_output(wait=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, we can make a plot for the paper." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "stbo_results = [summit.Runner.load(f\"data/kinetics_similar/stbo_case1-2_noise_repeat_{i}.json\") for i in range(10)]\n", - "mtbo_results_lists = [[summit.Runner.load(f\"data/kinetics_similar/mtbo_case1-2_noise_{n}-pre-train_repeat_{i}.json\") \n", - " for i in range(10)]\n", - " for n in n_aux]\n", - "fig, ax = make_comparison_plot(\n", - " dict(results=stbo_results, label=\"STBO\"),\n", - "# dict(results=mtbo_results_lists[0],label=\"MTBO, n=5\"),\n", - " dict(results=mtbo_results_lists[1],label=\"MTBO, n=10\"),\n", - " dict(results=mtbo_results_lists[2],label=\"MTBO, n=50\")\n", - ")\n", - "fig.savefig(\"figures/stbo_mtbo_kinetics_case1-2_noise_comparison.png\", bbox_inches='tight', dpi=300)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Different Mechanisms" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This adds an extra wrinkle because there is a competing reaction which consumes B (see Case 3 from figure above)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Single-Task Bayesian Optimization\n", - "for i in range(N_REPEATS):\n", - " print(f\"Repeat {i}\")\n", - " exp = MIT_case3(noise_level=1)\n", - " result = run_stbo(exp, max_iterations=MAX_ITERATIONS)\n", - " result.save(f\"data/kinetics_different/stbo_case1-3_noise_repeat_{i}.json\")\n", - " clear_output(wait=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Multi-Task Bayesian Optimization\n", - "for n, dataset in zip(n_aux, aux_datasets):\n", - " for i in range(N_REPEATS):\n", - " print(f\"Repeat {i}\")\n", - " exp = MIT_case3(noise_level=1)\n", - " result = run_mtbo(exp, dataset, max_iterations=MAX_ITERATIONS)\n", - " result.save(f\"data/kinetics_different/mtbo_case1-3_noise_{n}-pre-train_repeat_{i}.json\")\n", - " clear_output(wait=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "stbo_results = [summit.Runner.load(f\"data/kinetics_different/stbo_case1-3_noise_repeat_{i}.json\") \n", - " for i in range(10)]\n", - "mtbo_results_lists = [[summit.Runner.load(f\"data/kinetics_similar/mtbo_case1-2_noise_{n}-pre-train_repeat_{i}.json\") \n", - " for i in range(10)]\n", - " for n in [10,50]]\n", - "fig, ax = make_comparison_plot(\n", - " dict(results=stbo_results, label=\"STBO\"),\n", - " dict(results=mtbo_results_lists[0],label=\"MTBO, n=10\"),\n", - " dict(results=mtbo_results_lists[1],label=\"MTBO, n=50\")\n", - ")\n", - "fig.savefig(\"figures/stbo_mtbo_kinetics_case1-3_noise_comparison.png\", bbox_inches='tight', dpi=300)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## C-N Cross Couplings" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "First we need to get the data from the Baumgartner paper and do some manipulation to get it in the form we want" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ + "cells": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/ipykernel_launcher.py:1: FutureWarning: Your version of xlrd is 1.2.0. In xlrd >= 2.0, only the xls format is supported. As a result, the openpyxl engine will be used if it is installed and the engine argument is not specified. Install openpyxl instead.\n", - " \"\"\"Entry point for launching an IPython kernel.\n" - ] - } - ], - "source": [ - "b_df = pd.read_excel(\"data/baumgartner_data.xlsx\", sheet_name=\"Reaction data\")\n", - "# Just the columns we want\n", - "b_df = b_df[[\n", - " \"Optimization\", \n", - " \"Base\",\n", - " \"Base equivalents\",\n", - " \"Temperature (degC)\",\n", - " \"Residence Time Actual (s)\",\n", - " \"Reaction Yield\"\n", - "]]\n", - "# Rename columns\n", - "columns = {\"Optimization\": \"catalyst\", \n", - " \"Base\": \"base\",\n", - " \"Base equivalents\": \"base_equivalents\",\n", - " \"Temperature (degC)\": \"temperature\",\n", - " \"Residence Time Actual (s)\": \"t_res\",\n", - " \"Reaction Yield\": \"yield\"\n", - "}\n", - "b_df = b_df.rename(columns=columns)\n", - "\n", - "# Drop preliminary reactions\n", - "b_df = b_df.iloc[:363,:] \n", - "#Split catalyst column into nucleophile and catlyst\n", - "new = b_df[\"catalyst\"].str.split(\" - \", n=1, expand=True)\n", - "# Create new columns\n", - "b_df[\"nucleophile\"] = new[0]\n", - "b_df[\"catalyst\"] = new[1]\n", - "# Create a dtaset for each nucleophile\n", - "nucleophiles = pd.unique(b_df[\"nucleophile\"])\n", - "dfs = {nucleophile: b_df[b_df[\"nucleophile\"]==nucleophile]\n", - " for nucleophile in nucleophiles}\n", - "datasets = {nucleophile: DataSet.from_df(dfs[nucleophile], metadata_columns=\"nucleophile\")\n", - " for nucleophile in nucleophiles}" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false, - "inputHidden": false, - "jupyter": { - "outputs_hidden": false + "cell_type": "code", + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "execution_count": 2, + "metadata": {} }, - "outputHidden": false - }, - "outputs": [ { - "data": { - "image/png": "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d911V43jeImISIxUdm3nrrvuijuEjGo8iVfMPv30Uzp27JhYvvHGG3nkkUf46quvOP7447nmmmsoKyvjyCOPZMiQIbzyyivssccePPHEE3z00UccddRRidcuWbKElStXsnjxYq699lq+/vprOnXqxAMPPMCuu+7KhAkTePfdd1m5ciX/+c9/uOWWW5g3bx7PPvsse+yxB0899RQtWrRg6NChnH/leHr37cfjDz/A3X++hXY7tWff/frQomVLANauXcsFF1zAf/7zHwD++Mc/Mnjw4Gg/vAzK9CCiOa2mC34tLuAiktuytey66aabKCoq4t577+W6666jQ4cO9O3bNzEnZC6XXbrV2ACbNm2isLCQnj17MnbsWK6++moAZsyYwYoVK5g/fz4lJSUUFxfz8ssvA7BixQouvPBCli1bRocOHZg+fTq77747JSUllJSUcO6553LiiSfyne98hyFDhjBv3jwWLlzIKaecwu9///vEsd955x1eeOEFnnzySU477TQOO+wwlixZQps2bXjmmW2TjbVr/sdtN1/HlMf+yZS/P8vKFd/cfrz00ku5/PLLef3115k+fTpjx46N4JMTEZG45ErZtXr1asaPH8/cuXOZM2fONrcfc7nsUo1XAyRX17766qucfvrpLF26lBkzZjBjxgz69esHwMaNG1mxYgVdu3ale/fuFBYWAtC/f3/KysoS+5s7dy533nknc+bMAWDVqlWcfPLJrF69mq+//pru3bsnnnvkkUfSokUL8vPz2bJlCyNGjAAgPz9/m30CLFlYTNGgIezcaRcAhv/gBN5b+TYAs2bN2ubL/Omnn7Jx40batm2bts9JRESyR66UXa+99hpDhw6lc+fOAJx88sm89dZbQG6XXUq80mTQoEGsW7eOtWvX4u5cddVVnH/++ds8p6ysLFFNCkEDx02bNgFBZn/OOefw5JNPJr44F198MT/5yU849thjmT17NhMmTEi8tmI/zZo1o0WLFphZYrm8vLzWcW/dupV58+bRunXrer1vERHJXSq7oqdbjWmyfPlytmzZQqdOnTjiiCO455572LhxIwDvv/8+H374YZWv3bx5M6NGjeKGG25gn332Saz/5JNP2GOPPQCYMmVKvWPL79ef4nlz+fijDWzevJmZTz+e2DZ8+HAmTZqUWK74FSQiIo1fNpddBx54IC+99BLr169n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jBn06xf0aN+4cSMrVqyga9eu28UyYMAAunTpAkBhYSFlZWUMGTKEY074Ic/8/RGO++FoFr3xOtf+cfu5rCZOnMhjjz0GwH//+19WrFhBp06daNmyJSNGjAAgPz+fVq1a0aJFC/Lz86uci+voo4+mVatWtGrVim9961usWbOG559/nuLiYg444IDE5/atb32rth+ziIikUS6UXWPGjOH+++/nrLPO4tVXX+W+++7b7rXVlV2Dh34fgL177kfLli1p0aIFe/fsnRVllxKvBki+T56sVatWicd5eXls2rSJrVu30qFDhypnUE9+TcX8me7OVVddxfnnn7/Nc1N9cSofs7w8mEfwuB+O5pKzT6VVq1YMP/o4mjff9pTPnj2bWbNm8eqrr7LDDjswdOhQvvzySwBatGiBmQHQrFmzxDGaNWuW2H9t4nB3zjjjDK677rqUrxERkejkQtl11lln8YMf/IDWrVszatSoBpVdLVtmV9mlW40R2WmnnejevTuPPvooEHwxFy1aVO1rjjjiCO655x42btwIwPvvv8+HH35Iu3bt+Oyzz2p13G99ezc67/pt7pj4B4774fa3GT/55BM6duzIDjvswPLly5k3b14d31nNvve97zFt2jQ+/PBDADZs2EBtJw0WEZH4xFV27b777uy+++5ce+21nHXWWdttz+WyS4lXhB544AHuvvtu+vbtS+/evXniieqneBs+fDg/+tGPGDRoEPn5+Zx00kl89tlndOrUicGDB9OnT59EA8XqHDVyFN/efQ967L3vdttGjBhBeXk5vXr1Yty4cQwcOLDe768q++23H9deey3Dhw+noKCAYcOGsXr16rQfR0RE0i+usmv06NHsueee9Oq1fc/PXC67rKJqMJsVFRX5ggULtllXWlqa8mSksnjVx9VuL+jSoZ6RZb/Fqz7md7+8kp59CjjhlDHbbc+m916Xc1pb3cY9U+32stY/qnJbfvft2yMke+S61FXWFWrTrTuTGvLeAZjwSbWba+oG39D3b2bF7p7zY5Wkun5VJdU5K7v+6HSHFLtU351M/H+p6v9AnJ9pJq5zjdVFF11Ev379OOecc+r82qrK/UyUeanOaXXXL7XxauROOWoobdrswBVXXxt3KCIiIrXSv39/dtxxR/7whz/EHUraKfFq5B76x+y4QxAREamT4uLiuEPIGLXxEhEREYlI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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, axes = plt.subplots(1,2, figsize=(10,5))\n", - "fig.subplots_adjust(wspace=0.2)\n", - "# Counts of different catalysts grouped by nucleophile\n", - "(b_df.\n", - " groupby(\"nucleophile\").\n", - " catalyst.\n", - " value_counts().\n", - " unstack(0).\n", - " plot.bar(ax=axes[0])\n", - ")\n", - "# Counts of different bases grouped by nucleophile\n", - "(b_df.\n", - " groupby(\"nucleophile\").\n", - " base.\n", - " value_counts().\n", - " unstack(0).\n", - " plot.bar(ax=axes[1])\n", - ")\n", - "for ax in axes:\n", - " ax.set_ylabel(\"Counts\")" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false, - "inputHidden": false, - "jupyter": { - "outputs_hidden": false + "cell_type": "markdown", + "source": [ + "# Multi-Task BO NIPS Paper\n", + "\nThis is a paper for the [ML4Molecules workshop](https://ml4molecules.github.io/) at NIPS 2020." + ], + "metadata": {} }, - "outputHidden": false - }, - "outputs": [ { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAF0CAYAAABrBu7+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABD80lEQVR4nO3daZhU1bn28f9Ni6CCYBTfoyKCBpWpBWlQnIJGETXBkRM8zopootGYqMGTqGhM4pCYRENi1DgkRhzwxIPRKE7EgBoBQZBBQW0j6lEEJxSVhuf9UNVt0VR3F01V7erq+3ddfVF7qF1P1S7WemrttddSRGBmZmZmxdUm6QDMzMzMWiMnYWZmZmYJcBJmZmZmlgAnYWZmZmYJcBJmZmZmlgAnYWZmZmYJ2CjpANbXVlttFd27d086DDMropkzZ74XEV2SjmNDufwya30aK79aXBLWvXt3ZsyYkXQYZlZEkl5POoZ8cPll1vo0Vn75cqSZmZlZApyEmZmZmSXASZiZmZlZAlpcn7BsVq1axZIlS/jss8+SDsXyoH379nTt2pW2bdsmHYqZWcG47iovzam7yiIJW7JkCR07dqR79+5ISjoc2wARwbJly1iyZAk9evRIOhwzs4Jx3VU+mlt3lcXlyM8++4wtt9zSX+IyIIktt9zSvwzNrOy57iofza27yiIJA/wlLiM+l2bWWri8Kx/NOZdlk4S1dEOHDs37+EEnn3wyEydOXGf9W2+9xTHHHAPAlClT+MY3vpHX1zUzs9bBddeGcRLWCm277bZZv+BmZmalqhzrLidhG6i6uppevXpx+umn06dPH4YNG8bKlSvX+nXw3nvvUTtVyerVqzn//PPp27cvlZWVXH/99escc/LkyQwZMoTdd9+dkSNHsmLFCgAef/xxBgwYQL9+/Tj11FP5/PPPgdQo3BdeeCH9+vVj8ODBLF68uO5YTz31FHvttRc77rhj3Ze3urqavn37rvO6n3zyCaeeeiqDBw9mwIAB/O///m9ePyszMysNrrtKg5OwPFi0aBFnnXUW8+bNo3Pnztx3330N7nvjjTdSXV3N7NmzmTNnDscdd9xa29977z2uuOIKHnvsMZ5//nmqqqq49tpr+eyzzzj55JO5++67mTt3LjU1Nfz+97+ve16nTp2YO3cuZ599Nt/73vfq1r/99ttMnTqVv/3tb4wdO7bR9/HTn/6UAw44gOeee44nn3ySCy64gE8++aR5H4qZmZU0113JK4shKtbHnCUfNLq9smvn9T5mjx496N+/PwADBw6kurq6wX0fe+wxzjzzTDbaKPXRf+UrX1lr+7PPPsv8+fPZe++9Afjiiy8YMmQIL730Ej169GDnnXcG4KSTTmL8+PF1X9pjjz227t/zzjuv7nhHHHEEbdq0oXfv3rzzzjuNvo/JkyczadIkfvGLXwCpO3f+/e9/06tXr9w+CDPLm+5jH1xnXfWVhyUQiZUr113Ja3VJWCG0a9eu7nFFRQUrV65ko402Ys2aNQDrdctqRHDQQQcxYcKEtda/8MILjT4v866MzMeZsUVEk6993333scsuu+Qcr5mZtUyuu5Lny5EF0r17d2bOnAmwVkfCgw46iD/84Q/U1NQAsHz58rWet+eeezJt2rS6a+OffPIJL7/8MrvssgvV1dV16//85z/zta99re55d999d92/Q4YMaVbMBx98MNdff33dF37WrFnNOo6ZmbVMrruKy0lYgZx//vn8/ve/Z8CAAbz33nt160ePHk23bt2orKxkt912484771zreV26dOG2227j2GOPpbKykiFDhrBw4ULat2/PrbfeysiRI+nXrx9t2rThzDPPrHve+++/T2VlJb/5zW/41a9+1ayYL774YlatWkVlZSV9+vTh4osvbt6bNzOzFsl1V3GpqWa+UlNVVRX1xyRZsGBBztd+C9EnLGndu3dnxowZbLXVVkmHkjfrc06t/EmaGRFVScexobKVXw1xn7Dy19rLudZSdzVWfrklzMzMzCwB7phfBhq7o8XMzKwUue5yS5iZmZlZItwSZmZmiVmw67p9onotXJBAJGbF55YwMzMzswQ4CTMzMzNLgJOwPLr//vuRxMKFC5vcd/To0cyfPx9I3aZbOx7LXnvtVdAYzczMMrnuSk5Z9gnLNr7Ohsh1bJ4JEyawzz77MGHCBC677LJG97355puzrn/66afXOz4zyz9Jw4HfABXAzRFxZb3t3YDbgc7pfcZGxEPFjtPKh+uu1sctYXmyYsUKpk6dyh//+EfuuusuAKZMmcLQoUM55phj2HXXXTnuuOPqplUYOnQo2QZt7NChQ5PPnTlzJl/72tcYOHAgBx98MG+//XaR3qVZ6yCpAhgPHAL0Bo6V1Lvebj8G7omIAcAo4HfFjdJsw7nuSpaTsDz53//9X4YPH87OO+/MlltuWTf31qxZs/j1r3/N/PnzefXVV5k2bVrOx8z23FWrVvHd736XiRMnMnPmTE499VR+9KMfFeptmbVWg4HFEfFqRHwB3AUcXm+fADZPP+4EvFXE+MzywnVXssrycmQSJkyYwLnnngvAqFGjmDBhAt/4xjcYPHgwXbt2BaB///5UV1ezzz775HTMbM/t3LkzL774IgcddBAAq1evZptttinAO7Jy0tRlDk+Hs47tgDcylpcAe9TbZxwwWdJ3gc2AA7MdSNIYYAxAt27d8h6o2YZw3ZUsJ2F5sHz5cp544gnmzp2LJFavXo0kDjvsMNq1a1e3X0VFRd0M9LnI9tyIoE+fPjzzzDN5fQ9mtt6OBW6LiF9KGgL8WVLfiFiTuVNE3AjcCKm5IxOI0ywr113JK+jlSEnDJb0kabGksQ3s85+S5kuaJ+nObPuUuokTJ3LCCSfw+uuvU11dzRtvvEGPHj345z//mffX2mWXXVi6dGndF3nVqlXMmzcv769j1sq9CWyfsdw1vS7TacA9ABHxDNAeKJ+ZiK3sue5KXsGSsFw6tkrqCVwE7B0RfYDvFSqeQpowYQJHHnnkWuuOPvpoJkyYkPfX2njjjZk4cSI//OEP2W233ejfv7/vSjHLv+lAT0k9JG1MquP9pHr7/Bv4OoCkXqSSsKVFjdJsA7juSp5q71rI+4FTzfPjIuLg9PJFABHx84x9rgZejojs97xmUVVVFfXvzFiwYAG9eq079UU2c5Z80Oj2yq6dcw3FCmh9zqk1raX3CZM0MyKqivyahwK/JjX8xC0R8VNJlwMzImJS+kflTUAHUp30L4yIyY0dM1v51ZBs56zUz1NztOZpi1zOlZ9s57Sx8quQfcJy6di6M4CkaaQKunER8XD9A7ljq+VDS09ErLjSY349VG/dJRmP5wN7FzsuMysfSQ9RsRHQExhKqpPrTZI6198pIm6MiKqIqOrSpUtxIzQzMzMrgEImYbl0bF0CTIqIVRHxGvAyqaTMzMzMrKwVMgnLpWPr/aRawZC0FanLk68WMCYzMzOzklCwJCwiaoCzgUeABaSm95gn6XJJI9K7PQIskzQfeBK4ICKWFSomMzMzs1JR0MFac+jYGsD3039mZmZmrUbSHfPLRkVFBf3792e33XZj9913L7nxT0aPHs38+fPXWX/bbbdx9tlnJxCRmZklzXVXsspz2qJxnRrcVNms433Y5C6bbLIJs2fPBuCRRx7hoosu4h//+EdzXq0gbr4556HYzMwsCY3UXc07nuuuUueWsAL46KOP2GKLLeqWr7nmGgYNGkRlZSWXXnopANXV1fTq1YvTTz+dPn36MGzYMFauXMlbb71F//796/4qKip4/fXXeeCBB9hjjz0YMGAABx54IO+88w4A48aN46STTmLfffdlhx124H/+53+48MIL6devH8OHD2fVqlUADB06lNpBIm+99VZ23nlnBg8ezLRp0+riXLp0KUcffTSDBg1i0KBBa20zM7Py5rqr+JyE5cnKlSvp378/u+66K6NHj+biiy8GYPLkySxatIjnnnuO2bNnM3PmTJ566ikAFi1axFlnncW8efPo3Lkz9913H9tuuy2zZ89m9uzZnH766Rx99NHssMMO7LPPPjz77LPMmjWLUaNGcfXVV9e99iuvvMITTzzBpEmTOP7449l///2ZO3cum2yyCQ8+uPYApW+//TaXXnop06ZNY+rUqWs185577rmcd955TJ8+nfvuu4/Ro0cX4ZMzM7OkuO5KVnlejkxAZpPuM888w4knnsiLL77I5MmTmTx5MgMGDABgxYoVLFq0iG7dutGjRw/69+8PwMCBA6murq473rRp07jpppuYOnUqAEuWLOFb3/oWb7/9Nl988QU9evSo2/eQQw6hbdu29OvXj9WrVzN8+HAA+vXrt9YxAf71r38xdOhQage9/da3vsXLL78MwGOPPbbWF/ujjz5ixYoVdOjQIW+fk5mZlQ7XXclyElYAQ4YM4b333mPp0qVEBBdddBFnnHHGWvtUV1fTrl27uuWKigpWrlwJpDL+0047jUmTJtV9ib773e/y/e9/nxEjRjBlyhTGjRtX99za47Rp04a2bdsiqW65pqYm57jXrFnDs88+S/v27Zv1vs3MrOVy3VV8vhxZAAsXLmT16tVsueWWHHzwwdxyyy2sWLECgDfffJN33323weeuWrWKkSNHctVVV7HzzjvXrf/www/ZbrvtALj99tubHdsee+zBP/7xD5YtW8aqVau4995767YNGzaM66+/vm659teRmZmVP9ddxeeWsDypva4OEBHcfvvtVFRUMGzYMBYsWMCQIUMA6NChA3fccQcVFRVZj/P0008zY8YMLr300rqO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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, axes = plt.subplots(1,2, figsize=(10,5))\n", - "fig.subplots_adjust(wspace=0.2)\n", - "# Counts of different catalysts grouped by nucleophile\n", - "(b_df.replace(\"≥90%\", 0.9).\n", - " groupby([\"nucleophile\", \"catalyst\"])\n", - " [\"yield\"].\n", - " mean().\n", - " unstack(0).\n", - " plot.bar(ax=axes[0])\n", - ")\n", - "# Counts of different bases grouped by nucleophile\n", - "(b_df.replace(\"≥90%\", 0.9).\n", - " groupby([\"nucleophile\", \"base\"])\n", - " [\"yield\"].\n", - " mean().\n", - " unstack(0).\n", - " plot.bar(ax=axes[1])\n", - ")\n", - "for ax in axes:\n", - " ax.set_ylabel(\"average yield\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Differing Substrates" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Optimize aniline case with auxiliary data from benzamide case." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Single-Task Bayesian Optimization\n", - "for i in range(N_REPEATS):\n", - " print(f\"Repeat {i}\")\n", - " exp = get_pretrained_baumgartner_cc_emulator()\n", - " result = run_stbo(exp, max_iterations=MAX_ITERATIONS)\n", - " result.save(f\"data/cross_coupling_different/stbo_cn_noise_repeat_{i}.json\")\n", - " clear_output(wait=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Multi-Task Bayesian Optimization\n", - "pt_data = datasets[\"Benzamide\"]\n", - "pt_data[\"task\", \"METADATA\"] = 0\n", - "# Drop base=MTBD because not in other dataset\n", - "pt_data = pt_data[pt_data[\"base\"] != \"MTBD\"]\n", - "# Clean data\n", - "pt_data = pt_data.replace(\"≥90%\", 0.9)\n", - "for i in range(N_REPEATS):\n", - " print(f\"Repeat {i}\")\n", - " exp = get_pretrained_baumgartner_cc_emulator()\n", - " result = run_mtbo(exp, pt_data, max_iterations=MAX_ITERATIONS)\n", - " result.save(f\"data/cross_coupling_different/mtbo_cn_repeat_{i}.json\")\n", - " clear_output(wait=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": { - "scrolled": true - }, - "outputs": [ + "cell_type": "code", + "source": [ + "from summit.strategies import STBO, MTBO, Transform, LHS, Chimera\n", + "from summit.benchmarks import (\n", + " MIT_case1,\n", + " MIT_case2,MIT_case3,\n", + " MIT_case4,\n", + " MIT_case5,\n", + " BaumgartnerCrossCouplingEmulator,\n", + " get_pretrained_baumgartner_cc_emulator,\n", + " ExperimentalEmulator\n", + ")\n", + "from summit.utils.dataset import DataSet\n", + "from summit.domain import *\n", + "import summit\n", + "import pathlib\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from typing import List\n", + "from IPython.display import clear_output\n", + "from copy import deepcopy\n", + "import pathlib" + ], + "outputs": [], + "execution_count": 3, + "metadata": {} + }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n" - ] + "cell_type": "code", + "source": [ + "def run_stbo(exp, max_iterations=10, categorical_method=\"one-hot\"):\n", + " exp.reset()\n", + " strategy = STBO(exp.domain, \n", + " categorical_method=categorical_method)\n", + " r = summit.Runner(strategy=strategy, \n", + " experiment=exp, \n", + " max_iterations=max_iterations)\n", + " r.run()\n", + " return r\n", + "\n", + "def run_mtbo(exp, pt_data, max_iterations=10):\n", + " strategy = MTBO(exp.domain, \n", + " pretraining_data=pt_data,\n", + " categorical_method=\"one-hot\", \n", + " task=1)\n", + " r = summit.Runner(strategy=strategy,\n", + " experiment=exp, \n", + " max_iterations=max_iterations)\n", + " r.run()\n", + " return r\n", + "\n", + "def make_average_plot(results: List[summit.Runner], ax, label=None, color=None):\n", + " objective = results[0].experiment.domain.output_variables[0].name\n", + " yields = [r.experiment.data[objective] for r in results]\n", + " yields = np.array(yields)\n", + " mean_yield = np.mean(yields, axis=0)\n", + " std_yield = np.std(yields, axis=0)\n", + " x = np.arange(0, len(mean_yield), 1).astype(int)\n", + " ax.plot(x, mean_yield, label=label, linewidth=2)\n", + " ax.fill_between(x, mean_yield-std_yield, mean_yield+std_yield, alpha=0.1)\n", + "\n", + "def make_comparison_plot(*args):\n", + " fig, ax = plt.subplots(1)\n", + " for arg in args:\n", + " make_average_plot(arg['results'], ax, label=arg[\"label\"], color=arg.get(\"color\"))\n", + " fontdict = fontdict={\"size\":12}\n", + " ax.legend(loc = \"lower right\", prop=fontdict)\n", + " ax.set_xlim(0,20)\n", + " ax.set_xticks(np.arange(0, 20, 2).astype(int))\n", + " ax.set_ylabel('Yield', fontdict=fontdict)\n", + " ax.set_xlabel('Reactions', fontdict=fontdict)\n", + " ax.tick_params(direction='in')\n", + " return fig, ax" + ], + "outputs": [], + "execution_count": 4, + "metadata": {} }, { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAEGCAYAAACD7ClEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABIeElEQVR4nO29eZxcZZXw/z331tZVvSXd2RcSIIGwB4EEkEVABEcBdzaFeUVEB9DRd3zFcRBnRl8dh/mNis7oKIgbjMrAMAoCwgvIEvawJSwhCdmXTnrvru3e8/vj3qqu3qt6qfX5fj71qbs8997T1VXnPM85z3OOqCoGg8FgqE2sUgtgMBgMhtJhjIDBYDDUMMYIGAwGQw1jjIDBYDDUMMYIGAwGQw1jjIDBYDDUMIFSC1Aora2tumTJklKLYTAYDBXDc88916aqs0Y6V3FGYMmSJTz77LOlFsNgMBgqBhF5e7Rzxh1kMBgMNYwxAgaDwVDDGCNgMBgMNYwxAgaDwVDDGCNgMBgMNYwxAgaDwVDDGCNgMBgMNYwxAoaJ4zrey2AwVCwVt1jMUEJcF5wEpBPgJAcMgBWAQHjgVVR5kuCmwAqCHQLL9GsMhkIwRsAwOhkl6yQgnQQ3PUq7NCTTkOwFEU8ZByKeQbDsKZbHN0CjyWMFIBDyZLBDU/t8g6EKMUbAMIDqQC/fSYKTmvg90glv3w56xsAOe8q5EPJR+sOu8Q0Sfd6+ZQ8YhKk2SgZDFWCMQClI9nnKbRAyvJ2McCy3rYi3nWkn1sD5QeeGvGfaqw4o/LT/PtU4Kd+Y9HjyBfxRgh0e7rpxncHy5KP0x8N1wO2HVL+3b9meYbJDngy2+QlUG8m0SzztkEy7gPdrEREsAUGyPwNLxD/nbeNvC35bGXivZswvoNjEOz0jUGpyDUGxUBdSce8Ffu885Cv/1NQo/fHIBLMzMojlGYVQfeEjFUPZkHJc4imHeMrFHfE7PbHvuW0JjZEgoUD1xpqMESgWqtDfPuAmKTXFVP6j4UzT6KMQ1B1wgdXNKG5ge5pR/3+c+Vfr0OPZ/cx5b0MQApZgWeXdA047LvG0p/wdd3q+z46rtPcliYZs6sOBqhwVGCNQDFwH+vYXp6drmBgZI11GhsB1FVcVV8n2bnP31fUUd2bfVQWdaJ93OJYIQVuwLSFoW9iWZxxKqQiLofhHoi/pkEi7VTkqMEZgukknPeWibqklMYxHxhBEmiEYmZJb5ipyRVEdUOSa8z70eBmM03BVSaQzknjTgQWwLCFoWQSGGIjpwnHVd/U4pIuo+EeSo70vSV3IpqGKRgXGCEwnyT5IdJWH66VMcVRRVWxLvKBdqVGFeAfQPMgQqA7ucWeUtuMOV+jlpMinGsVTho7rQM7AVgQCvmEIWJINtOaez27n/J8HHx9M0nGJp1xSTnl1oPqTDomUS2NdgHCg8mebGSMwXcS7vHnzZYiiJNIuqlAXLM2XWFH6kg79SSerLC3xepa2RdYnHbAs7GnocWXcKI47WKln3Cxu3x6ccBOuHalahT6VqHrB2VSNLCB3VenoSxEJujRGKntUYIzAVFNuAWCfjOJPplySrpsdnPSnHGJhm7BdPGOQcBx6E8N9uq4qrqPDFEnGBREQwbYzhsL3Tw/pPyoDvXPXH2UM7A/uyY9LXwdupMmb0mowjEA85U1FreRRgTECU4nreAZgIouspoFBit9xR+zNOq7S1Z8mZLvURwLT0uvO4KrSE0+TKHB4n3VBoBnXdBYRsC3Lc8O4U91jV6x4B264CYJ1U3pnQ/WQOypoCAfKflbVUIwRmCqclGcASpxQLaP4E74vNV+lmHRc2nuTRIIWsXBgyv3z/SmH3mR6ysMjqt6MkenESnTigjEEhjHJjAoaIgEiJXKzTgRjBKaCVNwLJpYoAOzN4nBJpgtT/ENRoD/lkkiniIbsKYkXpFyXnoQz7Yp6ujGGwJAPriqd/SkSKc8YVMKowBiBCaC5yj7RjUxDAHgkx0buYxVveXwi7ZKehOIfCVeVnkSaeNolFrIJ2YXPi1aU3kSa/lRlK/9cPEOgEIyWWhRDmRNPOyR6HRojQcIBq6wDx8YIFEDacemOp0k6LqgiiU4kHR/zmnz+9eU68yTtuHT2u4Rti1gB8YJ42gv8jrx8v7KxEl3+iMAYAsPYqEJn/0B8MJPDyMtPVFg+I1u8abfTMbIwRiAPXFfpSabpT/r+fnWReDuSRwC4GtRgwnFJ9nqLZKIhe9R4gaNK7wQCv5WGMQSGiaD4XgTNPVIYmZlytm8QbMszJNnp1RMwFEUxAiJyM/A+YI+qHjHCeQG+C7wXLwfw5ar6fDFkG4++ZJqeRE5AUxWrr63mVgAr3tL5eMolFraJDJkO159K05twqsLo5YNnCBSCsVKLYqghxpoplyEzyhgwCmPfs1hJMH4GnDPG+XOBZf7rSuDfiiDTmCTSDvt6EnTHB89okVRfzRmAXFxVuuNp2vtTpFyXlOuyvy9JTw0ZgAxWohtS5bkg0FC7KN7vNOV4KbX7kmPPWCzKSEBVHxWRJWM0OR/4uXoR1zUi0iwi81R1ZzHky8Vxle54ikR6BEWvipgfPeDFCzr6atcYZrAS3b5ryIwIDJVJucQEFgBbc/a3+ceGGYG9e/dy3HHHZfevvPJKrrzyykkLoP6MmNw0BsNIx2t6FGAYGWMIJomql2FXHcR1stsF+8xHmogwaDLDKNujtRlWc0NH3h903E/HPcakCB02wSIPWbIFoayBbcS/18jnEGuMwlQDlIsRyJtZs2bx7LPPTuk9+5MOPYn0uLNZzCjAMBpWohsSPYN+dIN+oNkf9NBqb4zQRsdWPHkooQyjKqNhx4fsi4WKBWL7ysRCLQuwvOps2XN5BiHV9ZS76yDqF/bRtKf0a6xjJVPoN83v0x+7VbkYge3Aopz9hf6xaSWZdumOp/JLT5tOIKYegGFMdJByncofe9FRF1GX3FShI6sS8YzDIINhA37v3k1796kxRV9ejP1FLBcjcDdwtYjcDqwCOqczHuC4Xg6beDr/FA9mFGAwjIR6vXkcoDxyZhkKo1hTRG8DTgdaRWQb8DUgCKCq/w7cgzc9dAPeFNG/HP1uk+te9SXT9MTThd3FSSGlLoNoMBjKF3VzXFxpv5a17+4CEPHda5IzYhLA8tyGuccG+fann2LNDrponPMK/FVeN5tEgrbMCKBQM2JGAYaqZZDy8n31Imio3ldG04ske7B6dmH17sbu3T2w3bfXL8fqK0JfQSqZeApARpFm9gcUaCb4mnVF5bwGjjnejD//3dsfoU1GmQ+KaWSUvR/QngZ3l4qV/Rs1EPFewToI1KGBuuy+BnJe/j5Dzo1FubiD8kfVS9g2gfJ/fcnCDQBuetzUEAaD1bmFwP43Rjk7So9uhJ6eOClwkt7I00kgThJxEv5oNIGkE/75hN82t41/3VClro6nsPyArPjncR1klF+EioWGm3DDTWgk896MG25Ew824kSbvfKR5UBsCdQN/V6ovq9htX7lbvbsHtnt2Y6V6JvBplycqAbACqGWDFQDLRjPBc9URDJICLuK6wMAxUb+Up2aOgyRTkOyeFrkrzwgAJLoLNgKuqwNpHwpAUn0FX2OoLcJv/oGGR66v2IkDagVAMsrLBjeNlepD4u1Y8XboLOBedgg33ISk41h5KC21Izj1s3Fjc3Hr5+LE5uDG5uDGZqN2iNxgu6cUM/uZ9AvukH0d1E6tgdlN2VlOGcWcO/NpSJtB7ayg9xlZNojtbwf8z81X+HlOx8z/g1Q/mO6N1MRJIql+JO29SPcP7Kf6kXQ8e05S/ZDZ99vA70d9VGUaATft1e8N5Z+7pT81gRWt6nofqMEwEqrUvXgL9U9/F4Dk/BM8N8rgRqNcO8pBK4jaITQQBjvkbduZ7TBqB8EOD2uTPWaHfKVkD1FcNojfO83ZHtXl46SQRBdWogMr3okkOrHiHdljEu/ESnQi8Q7vPdHptXMSnisHzyA4sbm4sdm+gp+LW+8peSc2B7d+LhpuKprvu6LwjZTjWnQlhZRr42odailuENyA4obJKYvKQI1rvE6vq+CSyXpcbUYAINnj5XbP4wukqvQmC++leaOASp7nZ5g2XIf6J/+JuldvRxF6T/zf9B95aamlmjrsIBptwYm2jJaiZmTScax4J2oH0cgMo+BHIJl22d/v0N6fZn9fmn193nt7n8M+/5i3n6Yj7pDPDPbJULlGwHU8QxBuGLdpf8opvN6LqnEFGUYmHafxoesIb34ItYJ0nfFNkgeeXWqpyoNABLfe1GQGbyLKbWv38cqufk+x+wq+O5F/EFmApohNyJZsSulMmmkrJ/20l0kUBH/bEiwGzr89xjMq1wgAJHu9pfrjpMkbL4HSiKRrO1GcYWQk3kHTfZ8juHstbqiBrrP/ldT848a/0FCBjDxNcyDtw0jpHrz3tKN87f63eeCN9mHX2wIzogFmRoPMjAaYEQ3Q4m/PjAaYGfPP1QVojgYIWJKNe2RXgI+wOnwsZn9+9HOVbQRUvYh5pGnUJvGUgzOB8ZQ1DdXCDJWN1b2dpns+S6BzM05sLp3n/gBn5sGlFmsSZKZfjuKyKVDRFP74kQKytj9vfkjHbtBQfvSUFyOt0tbM9NHxUnbkpu6YhBsrkXb429+/wp/fbCcasvn8WctY0FzHzFiImbEQjXXBbMGYfBjrLx/0P8oGyEd6H53KNgLgBYiDMbBH/lMmNApI9ZtRgGEQgbb1NN57NXZ/G+mZy+g89we4sTmTvOvgnubwXEMjKKhs4jDGaZM5zxj7eZCrSHJn52S2M73TbDt/tk5GkcvQxVA5r2mg1BG8vmSaL/3uJZ7Z3E5jXYDvfmwlh81vnL4HDjJcE7tF5RsBgEQXRGcOP5x2SE2gypVZHGbIJbjtCRof+CJWqo/k/BPoOvtf0NCQWJRYuOFGBivaMZLEVUrAdNBiLHvEJqVWvOVCdzzFF37zIi9t62RmLMRNF63koNlDZ4uVH9VhBNIJSCchEBp0uC8xkViASRRnGCD8xt00PPJ1RNPED34v3af9PdjBYe0yqzQNtUl7b5LP3b6W13d3M6cxzE0XH8vimZVRfrQ6jAB4o4FAa3Y35bheQfgCMaMAAwCqRNf+lNgz3weg7+jL6T3hc6O6MdQYgJplT3eca379Apv39bFwRh0/uPhY5jZVzveheoyAk/J8+UEvT8aERgEmUZwBwE1T//i3qFv/WxSh56QvET/i4lGbq2WPODowVD87Ovq5+tcvsL2jn4Nmxfj+RStpqQ+XWqyCqB4jAF46iUAERykoTXQGMwowkO6n8U//h/CWR1A7RNe7/i/JA88a+5pAZQz7DVPL5rZerr7tBfZ2J1gxr4HvfmwlTdHK6wxUlxFwHUj20qsTsMSuYxLF1TjSv5+m+64luOdl3HAjne/5Lum5x457nXEF1R5v7O7m2tteoL0vxTGLmrnxo0dTH65MdVqZUo+Bm+ghroVPQTOjgNrG6tpK072fJdC5Bad+Hp3n/hBnxoHjXufl6hl51oyhOnl5eyd//Z9r6Y6nWbV0Jv/04aOIBCv3O1B1RqA/mQLtzSudRBaTKK42URe7ayuBPS9Tv+ZGrP79pFsOofOcm3Bjs/O7hRkF1BTPbt7P//7tS/SnHE5fPot/uOAIQoHpr7swnVSVEVCU/pSDaB8ajObdQzOJ4moA18Hu2kJg7zoCbesItL1GoO21QfnskwtW0/XuG0fIBDoa4uXPN9QEj29o47r/eplE2uWcI+byd+9bQWCclDXFQgDbEmxLsCzBFsnu2+OsSakqIxDPJopTJNmNRprHv8gkiqs+3DR2xyZf0a8j2LaeQNtrfl71wTjRWaRbV5Cadxz9R1xc0CwfDYQrZ9GXYVI8uH431//3q6Rd5YMrF/A35xxSUOqHySJ4SeECoyh5y5q4LFVlBPpTA+sCJB1HndT4P2qTKK40pOMEdz5HaMczkI57qYutkPduB8EK+bnzQ6gV9M8HB/LnW147tYKIutj73yC4dx2Bfa8RaHsdcYYH+Z3YXNKtK0jPWuEp/tbD0GjrCMLlh3EF1Qa/f2kH3/jDelyFS1Yt5pozDkam0QAIELAtgrYQtC2CtoU9CSU/HlVjBOLp4YniJNmN1g1PJzGojRkFFAdV7PYNhLY9QWjrEwR3PT+tazKchvmkW1aQnnUYqdYVpFsPRetapu4BYpkVwjXAb5/dyj/f75UN/dQpS/nkO5dOuQEQgZCv7IO+8p9OIzOUqjECIyWKEyeJpuOj/1jTca/eqmFakHgHoe1rCG59gtD2J7F79ww6n2o9jNTCE3GjLeCk/fq4Sb92bgpx/Xq7mXcnBa63oG/gXBrUJd281Ovltx7mKfx8XIGTwIwCyhNV5a29vfz5zb28vL0Td7xB/hi6NpV2efZtLxX0589axkUnLJ4SGQOWEAxYhGyLgCUE7NLGFarCCCSc0dNFS7J71B9sTU8LTfVh9bWh4UYvGdpUTHN00wT2vJzt7Qf2vjqokLlT10pq4YkkF51EcsHqcUdp5YyagHDZkHZc1m7t4NE32/jzm3vZ0TF1630E+PK5h3LBygUTvj5oWwQDXg8/ZFtF7eXnQ1UYgf7k6OZeXAdN9UFwyKrOTM+yBpB4p+8rf81/X4/d+bZfkBsUQcMNaLgJN9yEG2lGw43+u3dMI8244Ub/vQmNNKHBeqyenQMunh1PDyourlaQ5NyVJBeeRHLRSTgzl1dFINWkiSg9PYk0a97ax5/fbOPxt9rojg8kfZwRDfLOZa2sWtpCNDS5zs3CGXUc0BKb8PXhgF32q4gr3gikXHfcdNFWsgc3MLgesVRj0RhVrL69BNrWZ5V9oO117J4dw5tKAKd+LpLqwUp0IYkuSHRhszX/x4mN6GB3WrrpAJILTyK16CSS844bbnyrgQodBagqibRLX9KhL5n23/3thLfdm0wjwPzmOhbOqGN+c13ZLITa3RXn0Tf28uc323ju7XbSOaP/JS1RTlk2i1OXt3L4/KZpDaQWQiRUHlNIx6LijUB/Poni1EVSvQPzv9004iSmV7DpRl2srm0E9r1GsO21rOK3+vcPb2pHSLcsJ916KOmWQz3f+YyDIOCn13AdJNmFFe9EEp1Y8Q4k0eW/d2IlOpF4h2csMu+JDqxUH26wntSCE7K9fbdhYsPmSqLUrqBk2qW9L8n+3uTAe2+K/b1JOvqT9CYGlHxvwnvvTzn0JRycgottQ0ssxALfICzIMQ4LmutoqQ9N21RJVeWN3T38+c29PPpGG6/vHhhlWgLHLGrmlGWtnLpsFotbyq+zYVtCOFAeBnQsKtoIOKok8kwXLclebwGZWJU9CnDT1L30C6Iv3oyV6Bp+OtQwWNm3HorTtGRsn79lo5EZOJEZhcniJL2KUTWUNsGbvjr1f2885bC3OzFIsWde7X0pX9En2d+XHOT6KJSQbREN2dSFbGKhANGwTTRkEw0F/Hcbx1V2dMTZ3tHPjo5+9vUm2deb5KVtncPuFw5YzGuKsGCGZxQWNNexYEYd0VCAtOuSdtR7uS5p19tOOZltl5SrOP75VKado/Qm0zy9aT+7uwY6a5GgxeqlLZy6fBYnHdTCjFhomDzlRF2ZjKDGo2hGQETOAb6LV57oJ6r6rSHnFwO3As1+my+r6j1j3bMvWciPQZFkDxqMVWyiOLvtNRoevYFg23rAX+jUcqin9H3F7zYsKJ7f3S7vH+F0UOgoIKPc23oStPUk/fcEbd052z1JehL5f5dtEZqjwWzN2hn++8xoiOZokPqwr9yDvmIPe0o+FrILnoniuEpbT4Lt7f1s6+hnR3s/2zv6swaivS/F5n19bN43PVOtW2IhTlnWyinLZ3H8khkV0bPOYIxADiJiAz8A3g1sA54RkbtVdV1Os68Cv1HVfxORw4B7gCWj3dNVJZEqbJGXpPq8TKOVliIinSD6/I+JvngLog5O/Ty6T/k7UotOLrVkNYYMmm7cHU+xszPOzs44uzrj7OmOT1i5B22htT6cVewzYyFmRHO3gxMuVD4ZbEuY0xhhTmOEYw8YPlLsSaTZ4RuE7R39bPeNRCLlErC96Y8Bf6Vr0La8Y5Y3U8b2p0cG/WPedEm/nSUcNr+RFfMai7oyd6oIB6xJreItJsUaCZwAbFDVjQAicjtwPpBrBBTIVGRuAoZHM3PoTzkTUuWVFgsI7Hqehke+TqBzM4rQd/hF9B1/DRqa+IwFw/ioKu39Dju7U+zqSrKjO8XOHpddvbvY2RFnZ1c/vXnEozLK3XuFvPeGge1Z/rnGukDZTR3Mh/pwgOVzGlg+p4CEjTVAuQTT86FYRmABDJp2sg1YNaTNDcD9InINEANGreSRSRRXzUiyh9jT36Nu3X8CkG5eSvepN5Cee0xpBasy4mmXF3f0sW53P7u6U+zoSrGrO8nO7hSJ9NjdjLqgzdymCHObIsxvijC7IUJrQ3Uod8PEsUSMEZggFwE/U9UbReRE4BcicoTq4MQ+e/ft4x2nnkNmdtjHL7mQT1w6eum/SiS05c/U//kfsXt3oRKgb+X/om/lp2rSBz/VqCob9iVYs6WHp97uYe2OPhLOyMq+IWwxtyHE/MYgcxtDzG2ZwbymOuY2RZjXFKGpLmgUvGEYdZNcm1BsimUEtgOLcvYX+sdy+SRwDoCqPikiEaAVGJRrYFZLC/fdczfuBKa6lTsSb6f+iX8issGLh6dmHU73qTfgtCwvsWRTj6vK/W908usX9hGwhGWtEQ5ujbCsNczBLRHqw1P3Q2rrTfH0ll7WbOnh6a297Osb7Kc/ZFaElQuiLGoKMbchxLzGIPMagoNk0GAUDTcOvbXBMIxKCQhnKJYReAZYJiJL8ZT/hcDQ7vsW4EzgZyKyAogAe4feSFWrzwCoEn7rj9Q/8W2seDtqR+g9/rP0H3EJWOU0WJsa1rzdw/cf380bbQOztF7eNTjN87yGoG8YwlkDsagplNcioHjK5YUdfTy1pYentvSwYd/gONCsWIBVi+tZvbie4xfFmBkd/zM2uYIM+RCa5oyf00FRNIyqpkXkauA+vOmfN6vqqyLy98Czqno38EXgP0Tkr/GCxJerDtf2o4zcKxarZxf1j/0j4S1/BiA5/3i6T/0abuOica6cOLu7Uzy/vZeOuMO7DmpgbkNx3Ezr9/Rz0+O7eXqrt05jdizAlatnM78xyJttCTbsi/Pm3jgb9yfY2Z1iZ3eKRzcNLBAK28KBLQNGYXlrhINawjRGbN5si/PUll6e2uK5eJI5X5RIQDh2QcxX/DGWzgwX5Mbx0kQYV5xhfCrNFQQgI+jZsuaYo4/SB+69u9RiTB51iaz/HbGn/hUr1YsbaqB39ReIH/KBKZ/nv6MryfPb+3h+ey/Pb+tle9dAziRL4KQD6rng8BmcvLSBwDT0YrZ1JPm3Nbu5/w1vcVtD2OLy42bx0aNnEhmhNF/aVbZ2JHmzLc6Gtrj3vi/Bru6Rcz1FAkI8J4grwKGzI5ywyOvtHzWvblIlADVUX0C1MUOtIgKz6gvrYBQLEXlOVY8b6Vz1+RoqALtjM/WPfp3QrucBSCx5Fz0nfyXvurZjoaps68xR+tv7hinPWMjimPlRIgGLRzd289jmHh7b3MOsWID3H9bM+YfPYH7j5Hu++/vS/PTpvdzxyn4cF0K28LGjZ3LZca00RUb/6gUsYenMMEtnhjl7eVP2eFfcYcO+jGFIsKEtzoZ9ceJpZXZ9gNWL61m1uJ7jF8aYkYeLJ1+MK8iQD5GgXZYGYDzMSKCISLyT6NqfUPfKbYibwq1rofvk60guPWvCvX9V5e32ZFbhP7+9l729gwOfjWGbY+ZHOXZBlGMXxljeGsn6Ldv70vzhtQ7ufKWdLR1ekRcBVvujg1OXNhCwC5OtN+nw6xf28cvn99GXchHgL1Y08+nVs6bc9eSq0tHvMKNuen6AagenthiNoWppiYVKXhtgNMYaCRgjUAzSCepevZ3oC/+RTbXcv/x8eld/EY00jXPxAMm0y66eFDs6U7zdkWDt9j6e39HH/iGzXZojNisXRDl2QYxjF8Q4uDU87qpLVeWFHX3c+Uo7D23oyvrUZ0YDnOePDhY2ja3A045y56vt/OSpPezv99ZxvHNJPX910hwObq3M3rQbboCgWZhnGJugbTGzjHMZGSNQKtQlvOFeYs/clE3nnJx/Ar2rv0C6dcWw5o6r7O1Nsb0zxY6uJDu6Br/v7UmPuEq6JRrwevkLYhy7IFpw4HMoHf1p7nmtk7teaWdT+8DMmlWLYnzgiBmcemADwZwej6vKg2928W9P7mFrpzeaOHJuHVefPIdjF1SyAhXc2CyvlKTBMAaNkWBZB4WNEZgiehIOt7+4jw1tCb8ItBCyvbwoIX8/Uz1oac8LnLL1R8zqexOAjtiBvLzss+yftYpAwKK9z2FHV5LtvpLf2ZViV3dqUI70oVgCc+qDzG8MsqApxBFz6zh2QYzFzaHpcYWo8tLOfu58ZT9/erMru6hqRp2djR3s7k7x/cd3s36PN91zcXOIvzppDu86qKEi/aO5qB1G6wrMrGqoOQSY1VCeAeEMxghMkmTa5Xcv7+fmZ9rojI+druIQ2cJ1gds43X4RgJ06kxvTH+G/nFNwGb9H2RINML8xyPzG0MB7k/c+tz5YsH9+quiKO9z7uhc7eGvf8PxLLdEAV66exXmHzZiWGUalwI00m2LyhnGJBG2a6sq7epiZHTRBHFf54+ud/GjNHnb6M2xWzo9yweFe7zDlKkk/P3q4fw8nbv8ZR7Xfj6DErSgPNn+UPzWcR5+GOd1Rkn4e9aSjNEXsrKJf0BRifmOIeQ1BIsHydD00Rmw+dnQLHz1qJq/s6ufOV9u5/41OApZw2TtaufCYFurKVPYJIRbY4VJLYagAKm2F8FCMERgBVeWJt3u46fHd2dWmB7WEufqkOZy8pH7QsE+S3UTX3kLd+l8iTsLL9XP4R+lb+SlOqJvJCaX6I6YJEeHIeVGOnBfl/5w+D0sYFB+oFtQOV0U9ZMP0ErBkUmtQygFjBIbw8s4+vv/4bl7Y4RXJmNsQ5KrVsznnkCF1S50UkfW/Jfb8j7Hi7QDEDzyb3uOvwW1aXArRi064wr/8Y6HByqwjbCgu5RwMzhdjBHw270/wgyd38/Bb3hTOpojNXx7XyoePmjlY2akS2vQA9U9/D7vLy46dmruSntVfID37qFKIbphqxDJpIgzjIkCkgiqdjUbNG4E9PSn+46m93L2uHVchHBAuPqaFT7yjdcRMlg0PfonIxvsBL8d/7wmfJ3nAacZ1UEVosPyKlhvKj3DArpjqYWNRs0agK+5w63Nt/OfafSQcxRb44BEzuOKEWcyqHznSb3dsIrLxfjRQR8/qLxI/9ANVmeWz1jFpIgz5EAlVhzu05jRYIu3ym5f287Nn2ujyywOeeXAjnzlxNgfMGHs2SPit+wDP9x8/7CPTLquh+KgVMIbdMC62JRVV9H4saurb/uLOPr5y71b29HhpFt6xIMo1J8/h8Ll5DP9Vs0YgcdB7plNMQwkxAWFDPlT6tNBcasoI3PjITvb0pFnWGuHqk2Zz4gH1ea/ys9s3EOjYiBtuJrWg2iZ+GrIEjBEwjE8l1RAej5oxAru7U6zfEyccEG7+yNKCF2VlRwFLzwSrvFcHGiaGtzagOvy8hukjHKi86mFjUTPf+EyFqhMX1xe+Kte4gmoCExA25EM1jQKghozAI295Va1OO6jwYuGBfa8R6NqCW9dCat6I6TcMFY+YPEGGcbFEjBGoRLoTDs9u78USL799oYTf+iMAiaVngVVdXwCDhwYiZq2HYVzKNbfXZKi+v2gEntjcg+PCMfOjNNcVGAZRJewvDkscdM40SGcoOWKZBWKGvKimWUEZaiIw/MhG3xV04ARcQXtfxu7egRObTWruMVMsmaHUaCCChhtNQNgwLiHbKtvykZOh6o1AMu3yxOYeAE47sKHg68MbMrOCzjaKopoQCzfcaOIAhryphmRxI1H1RuDZbb30plyWtYZZME6N3GGoS3hTxhVkZgVVCxqMoqEGEwMw5I1I9WbNrXojkJkaOhFXUHDXWuzePTj180nPPnKqRTMUGbVsNNxkMoQaCiYStMu6fORkqGoj4KryyMaMEZiAKygzK+igs02vsaIRNBRDgzHzfzRMiGoMCGeoaiOwbnc/bb1p5tQHOWRWgb5f1yG86U+AmRU0nWioHhBw4oiTmvr720Gv92+SwhkmSNC2qrJ6XoZRfxki8gtg3Cr0qvqJKZVoCskdBRQ6lAvufBarfx/pxsWkWw6dDvFqHMGNNOUEZmOoupBOIE4CSSfI4+s39v3D9RCMTYGshlqmmkcBMPY6gQ3AW/6rE7gAsIFt/nXnAx35PkhEzhGR10Vkg4h8eZQ2HxWRdSLyqoj8esQbuel8H8kjfpWw0w6aiCsoJ02EcSFMLWLh1s0cPjNHLAjWoZFm3Nhs3MgML4hb4AI9tcO40VZjAAyTRqjOBWK5jDoSUNWvZ7ZF5D7gL1T1zznH3gn8XT4PEREb+AHwbjwj8oyI3K2q63LaLAOuA05W1XYRmT3Svay+tnweydvtCTa1J2gIWxw7v0Bl4KYIb3oQMLOCphq1Amhkxvgrr0UgEEYDXo0HddPe6GAst5FYuKEGMOmgDVNEuIoDwhnydZSuBtYMOfYUcGKe158AbFDVjQAicjveSGJdTptPAT9Q1XYAVd0z0o2s+H6s7u24DQvGfOCjvivo5CUNBOwCXUHbn8ZKdJBuPhBnxsEFXWsYHW9hVtPERlZWAA0FGOY2cpKgLhqoQ8MNZi2HYUIIICKIDGxbAtEqXRuQS75G4AXgmyJyvar2i0gd8HVgbZ7XLwC25uxvA1YNabMcQEQex3M73aCqfxx2J1We+PZH+LvnWgH4+CUX8olLLx7W7GF/lfDpE5oVZFxBU42G6v0g8BSQcRsF67yogeuYnE6GLIIfzA1YWAKCr9xzti0RX9lT9T398cjXCFwO/BroFJF2YAbwLDBc+05OlmXA6cBC4FEROVJVOwa1EuF9i/s4+Qs34sxcNuKN9vWleXlnPyFbWH1AgYrHSRLe/BBgXEFTg3grc6fTRWMMQM0TsIRQwPJetlXzir0Q8jICqroZOElEFgPzgJ2quqWA52wHFuXsL/SP5bINeEpVU8AmEXkDzyg8k9vIjcxASBJ75ia63vPdER/2543dKHD8ohixAodzoW1PYCW7Sc9cjtO8tKBrKwqxUCvguVOm8RlupNkszjJMOZYI4aCn8EO2hVVFRV6KzVhTREdyrm7zX9nzqurm8ZxngGUishRP+V/I8FHEXcBFwC0i0ornHto49EZudBYa2E/47YcJ7FpLeoSkbgMJ4ybpCqpC1Ap4GTMDdSCCug6S7kdSfZDXvzLf59hoZKbppRumBBEI23a2t19Nlb1KzVgjgTRjT9QW//y4v3JVTYvI1cB9fvubVfVVEfl74FlVvds/d7aIrAMc4G9Udd+wm1kB+o68lNgL/0Hs6e/S+f6bB/nt+5IOT2/tRYBTlhZoBNJxQm8/DEC8qoyAeEHZYBTsIaUxLXvAX5+OI6m+SY8O1A6hkWYTpC1TcgOflojnH7cy257f3FXFUUVdstuuKjqZpRsFyhi0razSr+bFWqVmLCMwpb4QVb0HuGfIsetzthX4gv8ak/6jL6Nu3W8I7Xqe0NbHSS5+Z/bcmi29JB3lyLl1tMYKqwUc2voYVqqP1KzDcRsXjX9BuSMWGoyhwbr8FHIg4hkLN42k+pF0f8GjAw1GvdTMhqIiArav0C1riIKXAQWfOT9RVBVXPcPgquLmGIlcgwHDg69DA7KW33mzRjhnfPrFY6x1Am8PPea7gOao6s5plWocNNRA38pPUr/mX4g98z2Si07KKrmH/TKSp0+gjGTWFXRgZY8C1A75Lp8Jpkm2Ami4YWB0kO7Pa3TghhvMAq1pwBLBzih2S7Cz+94x25KiKU0RwRawMUq6WsgrMCwizcAPgQ8DKSAmIucBJ6jqV6dPvNHpP+xj1L38KwL7Xif81n0kDj6XtKM87tcOOLXQeECqj/CWRwE/YVzFId6UyWB06vLkiAxMxRxzdCBeANhf2GXIH8FT4rmvTA8+s28wTCf5Otr+HS91xAFApkv4JPCx6RAqLwIR+t5xFQCxZ24CJ8ULO3rpSjgsmRFiyYzCFFJ4y6NIOk5qztG49fOmQ+JpQS0bN9yAG5vtuWGmK1GaPzpwo7Nww01oJrYgFm60xRiAMbBECNkWkaBNLBygqS7IjGiIWfVhZjdGaKkP0xwN0RAJEg0FiARtE/w0FI18NcaZwHxVTYmIAqjq3tFSOxSL+PLzqHvxVgKdm4m8fieP7D0FmFjtgEpzBakdRIP1xVe+Q0YHiFXzAWDBc9MEhvToM24b4982lDP5GoFOoBXIxgL8NQMljQ1gBeg9/hqa/vRFos/9iKdShwJ2wVNDJdlDaOtjKELiwHdPj6xTSHb6ZamVS42lZ84o+6BlYdue0s8ofqPoDZVKvl24nwB3iMi7AEtETgRuxXMTlZTk0jNJzTocu7+N9/b/npZogMPnFrY6NfT2w4iTJDXvWNxYSQc3eSBeAjajdKYNwVuBGgkMuG9aYiFmN0ZorQ/TFA1SH/bcNgGzOtVQ4eTblfs20I+XCTQI3Az8CBh5yW4xEaH3hM/R/IcruSrwP3Qd8KHs1LN8qSRXkDudfv8axbbEU+h+zz5g5qQbaoh800YonsIvvdIfgdSCVTxnH807nBf5hN4F/J+8r5VEF6FtT6BikVh61rTJOBVoMGrSJE8hIduiLmQTqfKiIQbDWIyVNuJUVX3U3z5jtHaq+tB0CFYI2zuT3ND3Ef4n/CLLtt7B/t7LcWNz8ro2vOlBxE2TXLAKjbZMs6QTR60AGio8DYZhMAKEAzbRsG1WoRoMjD0S+KGInOHn9f/pKG0UOHDqxSqMRzd187IeyDN17+T4/seIPvcjek69fvwLgfDGCnAFiWXiAJNExCsTGA0FzNRLgyGHsVYMHyEibSLy16pa1uk0H/FXCe844tPos08Sef0u+o/6BE7zkjGvk/79BLc/jUqAxNIziyDpxPDiANXnssj0ygGSjos7DYlpbEuIhmzqaqBClMEwEcYbD38I+KqI/F5E5hdDoELp6E/zwo4+bAuOPOxw4odcgKhD9NkfjHtteNODiDokF672Ep6VIRqqn3j6hzJF/IpNLf5Mm6ZokFkNYWbVh2mOBomFA4QD1qQGPkHboqkuSGt9mGgoYAyAwTAKYwaGVfURETkKuAF4UUS+zuCSkCWPCTy+uQdX4YSFMRrCNn3HfprIm78nsvF++vdeTnrW4aNem3UFlWnGULVDU1eNqwywxOuVR0Mj98otSwhbNuGcb6XjKinH9V9K2nHHTG0bCdjUhbwVtwaDYXzGnR2kqgkR+QfgMOD/ArmV3kseE3h4SO0At34O/YdfRPSlnxF7+nt0/sWPRrxO+toI7nwOtYIkl7yraPLmjVhlOzoplIAlOb37wnrk3urbwTN40r5BSLkuqbSLo2r8/QbDBBnXCIjImcCPgeeBg0YrAF8K4mmXNW9nEsYNpIroO+Z/EXntDkLb1xDc/hSpBUPLGUN44wOIuiQWn1qGs278hGzTkI4hk7AsYFmIBek8etcTJWRbRMN21u8/VQRsi4ANdeOXsjAYDOMwphEQkZuBc4BrVfV3xREpf57e0ks8rayYHWFuw0DtAI000X/05cSe+T6xp79LxwW/GjazJlLGriA3XD/pkoy5yj5ge6kNgvbISclU1XO1uC6ptE46SBsxUzANhophvJFAEDhCVfcXQ5hCGSgjOTxhXN8RF1P3yq8J7n2V0OYHSeYsBLN6dhPc9QJqh0kuPq1o8uaDBiIF5eTPKnvbyuaxGU3Zj3oPEUIBIYQFvu1xXc8YpByXtOP55ccrMxcJ2cSMS8ZgqCjGCwx/vFiCFIrjKn/e1A3AaQeN4M4JRuk99tM0PP5NYs/cRPKA07PpFsIb7wcgufgUNFQ+RVDUstFw05htApZky+0VquwLwbKEyBBffG6ANuW4OK76M30CRIO2KfZtMFQgFZuE5uVdfbT3OyxoDHLQzJHTKccP/SDRl35OoGMTkTf+h/ihHwAg/NYfvfNl5QoaOTFcrtKfSGB1KskYngyubwTM9EuDoXKpWKftw29lRgGNoyshO0jv8X8FQPS5f4N0AqtrG8G9r6CBOpKLTymWuOOSSQwXtC2iIZumuiCzG8K01IdpiASJlOFiJ8ukUDYYKp6KHAmoKo9s9I3AOLUDEgedQ3rtLQT2v0Hduv8EN+0dP+A0CBSejE0EgpaF68vhyQOKMpFYasC2CIRjhOobCZm0xAaDochUpBHYuD/Bts4kzRGbo+ZFx24sFr0nXEvTH68m+sJPvFKIFD4rSASiQW8hkoxRZDtjDBTPSLhDDIT3rliWV3JQ7BBEy6BAjMFgqEkq0ghkRgGnHNhAII9gZHLRO0nOPZbQruexEp24wXqSC0/O61n5Kv9se2RAn4+n2MWCOpMYzmAwlI6KjAlkXUFL81zk5ReeyZBccvq4tXlFIBayaYmFvNwzeRiAgok0VWViOIPBUDlUnBFIOcq63f2EA8Kqxfnn1UnPPYbEUq9+cPyQ80dtVxTlDxCuh2B1JYYzGAyVR8W5g3qSDgKcuLieSLAwG9Z1xjexu/8Kp3l4ZuyM8o8E83P7TAgRsIIQCEG43FJVGAyGWqRoIwEROUdEXheRDSLy5THafUhEVESOG+l8d8IB4NRxZgWNiB0aZgAsEerDXs+/LjgNPX87BKGYF/ytnwOxFmMADAZD2VCUkYCI2HhF6t8NbAOeEZG7VXXdkHYNwOeAp0a7V1/SpVnglHzjAaPgpTW2pr7nbwc9xR8Ie+8m6GswGMqYYrmDTgA2qOpGABG5HTifIbUJgH8Avg38zWg3UuDoeVGa6yYm+pQrfzvov3ylb1VcmMVgMNQwxdJYC4CtOfvb/GNZRORYYJGq/mG8m50+Uq6gPGmsC0ze7ROKelM76+dArNWb5ROMGANgMBgqjrIIDIuIBfwLcHk+7X/yD1/klv52AD5+yYV84tKL83sO3mrfSWEFPKVvMBgMVUCxjMB2YFHO/kL/WIYG4AjgYT9twlzgbhE5T1Wfzb1R2BYe+q9bJyREYCry2wcml+ffYDAYyoli+S+eAZaJyFIRCQEXAndnTqpqp6q2quoSVV0CrAGGGQCAhsjEF1cF7amIAYy9yMxgMBgqiaIYAVVNA1cD9wHrgd+o6qsi8vcicl4h92qOTHzwEpisERAZd6WxwWAwVBJFiwmo6j3APUOOXT9K29NHu89kevOhybqDrKCZ8mkwGKqKmpnOYlsy+SmhJh5gMBiqjJoxAiYeYDAYDMOpISMwyT9VLDMSMBgMVUfNGIFJxwPs4NQIYjAYDGVETRgB2xKsyQZ0zawgg8FQhdSEEcin+ti4mHiAwWCoQmrCCEw6HmDZYJdFhg2DwWCYUmrECBhXkMFgMIxE1RsBEQhMNmmccQUZDIYqpeqNwKSzhoJXJ8BgMBiqkOo3ApN1BZlCMQaDoYqpeu026fTRZoGYwWCoYqraCAhTMRIw8QCDwVC9VLURCNjW5JLGiZiVwgaDoaqpaiMwJfEAkzraYDBUMVVtBCZdRMasDzAYDFVOVRuBySeNM0bAYDBUN1VrBCZdRMakijAYDDVA1RqBKYkHGAwGQ5VTxUZgsusDjCvIYDBUP8YIjIaJBxgMhhqgKo2AJYI9mamddtCkijAYDDVBVWq64GSLyJh4gMFgqBGq0wgEzPoAg8FgyIfqNAKTiQeImJGAwWCoGSrQCIzdy590ERmTKsJgMNQQFWcEdBwFP+kiMmYUYDAYaoiiGQEROUdEXheRDSLy5RHOf0FE1onISyLyoIgcMPKdLHSM6ZumnrDBYDDkT1HyIoiIDfwAeDewDXhGRO5W1XU5zV4AjlPVPhH5DPBPwMdGup+G6pH+xIjPmlQRGbFM6mhDTZBKpdi2bRvxeLzUohimiEgkwsKFCwkGC9NhxUqOcwKwQVU3AojI7cD5QNYIqOr/y2m/Brh01LvZQdQOI85gQzDpIjKmipihRti2bRsNDQ0sWbIEMTGwikdV2bdvH9u2bWPp0qUFXVssd9ACYGvO/jb/2Gh8Erh3rBtquGHYMXuyRWTMKmFDjRCPx2lpaTEGoEoQEVpaWiY0siu7NJkicilwHHDaSOf379vL2aed7LXVNB+/+GN84tKLAQhO1qSZeIChhjAGoLqY6P+zWEZgO7AoZ3+hf2wQInIW8LfAaao6otN/Zsss7n/kcW/HTWP1tWXPTSoeYAW89NEGg8FQQxTLHfQMsExElopICLgQuDu3gYisBH4EnKeqe/K6qxVAA3XZ3UkVkTHxAIPBUIMUxQioahq4GrgPWA/8RlVfFZG/F5Hz/GbfAeqB34rIWhG5e5TbDb53qB4QbEuwJpU0zriCDIZy4bHHHuOkk06iqamJmTNncvLJJ/P1r3+d+vp66uvriUQi2Lad3T/88MMBzyUSi8Wor6+ntbWViy66iI6Ojux9VZXvfOc7LFu2jLq6OhYvXsx1111HIjHybMNaoGjrBFT1HlVdrqoHqeo3/GPXq+rd/vZZqjpHVY/xX+eNfUcfy0aDdWZ9gMFQJXR1dfG+972Pa665hv3797N9+3a+9rWv8YEPfICenh56enr493//d0488cTs/quvvpq9/sUXX6Snp4eNGzfS3t7ODTfckD137bXX8uMf/5if//zndHd3c++99/Lggw/y0Y9+tAR/aXlQdoHhiaDBGEE3NfEbmFQRBkPZ8MYbbwBw0UUXAVBXV8fZZ59d8H0aGxs577zzuOuuuwB48803+eEPf8iTTz7JCSecAMDhhx/OHXfcwcEHH8xDDz3EGWecMTV/RAVRFUYAyyYYikG6f2LXm3iAocZZ8uU/FOU5m7/1F+O2Wb58ObZtc9lll3HhhReyevVqZsyYUfCz2tvbueuuu1i9ejUADz74IAsXLswagAyLFi1i9erVPPDAAzVpBCoud9BIWCLYkcaJ9+ZNPMBgKBsaGxt57LHHEBE+9alPMWvWLM477zx2796d1/XHHnsszc3NtLa2smXLFj796U8D0NbWxrx580a8Zt68ebS1tY14rtqpipFAyLa8SmDBKCR7C7tYxIwEDDVPPj30YrJixQp+9rOfAfDaa69x6aWX8vnPf57bbrtt3Guff/55Dj74YFKpFD/84Q855ZRTWLduHa2trezcuXPEa3bu3FnwSttqoSpGAtkiMqH6wkcDJmuowVDWHHrooVx++eW88sorBV0XDAa54oor2LRpE6+88gpnnHEGW7du5emnnx7UbuvWraxZs4YzzzxzKsWuGKrDCGTWB1gWhGKFXWxmBRkMZcVrr73GjTfeyLZt2wBPSd92221Z336+OI7DLbfcQl1dHQceeCDLly/nqquu4pJLLmHNmjU4jsOrr77Khz70Ic466yzOOuus6fhzyp6KNwIiQyqJBWNeNtB8MfEAg6GsaGho4KmnnmLVqlXEYjFWr17NEUccwY033pjX9UcffTT19fXMmDGDW2+9lTvvvJOZM2cCcNNNN3HFFVdw6aWXUl9fzznnnMPpp5/OHXfcMZ1/UlkjqlpqGQri6JXv0GzaCLx4wIzYEJdOohsSPePfzLKhfvYUS2gwlD/r169nxYoVpRbDMMWM9n8VkedU9biRrqn4kUAoMMKfEKrPbzRg4gEGg6HGqXgjMGJReZH8YgMmHmAwGGqcijYCYxaRCcXGzwpq4gEGg6HGqWgjELCt0XNojzcasIPebCKDwWCoYSpaC46bNC4YHX00YOIBBoPBUOlGYBzxRbwg8UiYeIDBYDBUthHIq4hMKOpVDctFxIwEDAaDgQo2ArYlWFaeKSKGxgZM6miDwWAAKtgIjOsKymXoaMCMAgwGgwGoYCNQcD3hcE5swMQDDIayZcmSJYRCoWGpnVeuXImIsHnzZs4999xsaclgMEgoFMruX3XVVTz88MNYlpU9tmDBAr72ta8Nul9HRwef+cxnmDt3LtFolCOPPJJbbrmlmH/qIJLJJCtWrGDhwoXZY21tbZx88sm0tLTQ3NzMiSeeyOOPPz7GXQqnYlNJj7hSeCyCdV6aadfxpocaDIayZenSpdx2221cc801ALz88sv09fVlz997773Z7csvv5yFCxfyj//4j9ljDz/8MPPnz88modu0aROnnHIKK1eu5IILLiCZTHLWWWcxe/ZsnnzySRYuXMiDDz7IZZddRnt7O1/4wheK9JcO8J3vfIdZs2bR3d2dPVZfX8/NN9/MsmXLEBH++7//m/e///3s2bOHQGBq1HdFjgQs8QrLF0yo3tQOMBgqgI9//OP8/Oc/z+7feuutfOITn5jw/ZYuXcpJJ53EunXrAPjFL37Bli1b+O1vf8vSpUsJBoOcc845fO973+P666+nq6tr3Hs+/PDDLFy4kBtvvJHZs2czb968CY8kNm3axC9/+Uuuu+66QccjkQiHHHIIlmWhqti2TXt7O/v375/Qc0aiIkcCBbuCMgQj468iNhhqkRuaivSczryarV69ml/84hesX7+e5cuXc/vtt/P444/z1a9+dUKPffPNN3n88ce56qqrAHjggQc499xzicUGTxr50Ic+xCWXXMKTTz7Je97znnHvu2vXLjo7O9m+fTsPPPAAH/7wh7nggguYMWMG3/rWt/jWt7416rUdHR3Z7WuuuYZvfvOb1NXVjdj2qKOO4rXXXiOVSnHFFVcwe/bUJb6syJFAtojMRDCuIIOhIsiMBh544AFWrFjBggULCrp+x44dNDc309jYyPLly1m1ahXvfOc7gdFLTQYCAVpbW/MuNRkMBrn++usJBoO8973vpb6+ntdffx2AL3/5y3R0dIz6ynDnnXfiOA4f+MAHRn3OSy+9RFdXF7/+9a+zf8NUUZEjgYJmBhkMhvHJs4deTD7+8Y9z6qmnsmnTpgm5gnJjAp2dnXz2s5/lsssu47bbbhu11GQ6naatrY3W1ta8ntHS0jLINx+NRunpySONvU9vby9f+tKXuOeee8ZtG4lEuOiii1ixYgXHHHMMRx99dN7PGYuK06Ze0riKE9tgMBTIAQccwNKlS7nnnnv44Ac/OKl7NTU1cfHFF/M///M/AJx11lnce++99PYOrkl+xx13EA6HC65iNhLf/OY3s7OTRnqB56bavHkzp5xyCnPnzuWDH/wgO3fuZO7cuWzevHnE+6ZSKTZu3Dhp+TJUnDY1a7wMhtrhpz/9KQ899NAw332h9PT0cPvtt3P44YcD3ihj4cKFfOQjH2Hz5s2kUinuu+8+rr32Wm644QaamrwYyeWXX87ll18+oWd+5StfoaenZ9QXwBFHHMHWrVtZu3Yta9eu5Sc/+Qlz5sxh7dq1LFq0iDVr1vDYY4+RTCbp7+/n29/+Nrt372bVqlWT+jxyqTh3kDECBkPtcNBBB0342h07dmR73Jne/a9+9avs/p/+9Ceuu+46Vq1aRVdXFwceeCDf+MY3uOKKK7L32Lp1KxdeeOHk/ogxCAQCzJ07N7s/c+ZMLMvKHkskElx77bVs3LiRYDDIkUceyR/+8Afmz58/ZTIUrbykiJwDfBewgZ+o6reGnA8DPwfeAewDPqaqm4fe5x3vOE6fe+7Z6RfYYKhiTHnJ8Ukmkxx99NG89NJLBIOVMaGkbMtLiogN/AA4FzgMuEhEDhvS7JNAu6oeDPx/wLdHvtd0SmowGAweoVCI9evXV4wBmCjFigmcAGxQ1Y2qmgRuB84f0uZ84FZ/+3fAmTJqxRiDwWAwTAXFMgILgK05+9v8YyO2UdU00Am0FEU6g8FgqFEqLjC8d+9ejjtuwLV15ZVXcuWVV5ZQIoPBYKhcimUEtgOLcvYX+sdGarNNRAJAE16AeBCzZs3i2WdNYNhgmCyqOnqNbkPFMdFJPsVyBz0DLBORpSISAi4E7h7S5m7gMn/7w8BDWqypSwZDjRGJRNi3b9+EFYehvFBV9u3bRyQSKfjaoowEVDUtIlcD9+FNEb1ZVV8Vkb8HnlXVu4GfAr8QkQ3AfjxDYTAYpoGFCxeybds29u7dW2pRDFNEJBIZVIsgX4q2TmCqOO6449S4gwwGgyF/Sr5OwGAwGAzlScUZgXIYvv74xz8utQhAechhZBigHOQoBxmgPOQoBxmgfOQYjYozAvnm+Z5OyuWfWg5yGBkGKAc5ykEGKA85ykEGKB85RqPijIDBYDAYpo6KCwyLSDfweonFaAVKPyQpDzmMDAOUgxzlIAOUhxzlIAOUhxwHqOqskU5UnBEwGAwGw9Rh3EEGg8FQwxgjYDAYDDVMxRgBETlHRF4XkQ0i8uUSybBIRP6fiKwTkVdF5HOlkMOXxRaRF0Tk9yWUoVlEficir4nIehE5sQQy/LX/v3hFRG4TkcLXzU/suTeLyB4ReSXn2EwReUBE3vTfZ5RAhu/4/4+XROROEWmeThlGkyPn3BdFREUkv8rtUyyDiFzjfx6visg/TacMo8khIseIyBoRWSsiz4rICdMtRyFUhBHIsyhNMUgDX1TVw4DVwF+VSA6AzwHrS/TsDN8F/qiqhwJHF1seEVkAXAscp6pH4KUkKVa6kZ8B5ww59mXgQVVdBjzo7xdbhgeAI1T1KOAN4LpplmE0ORCRRcDZwJZSyCAi78KrU3K0qh4O/HMp5AD+Cfi6qh4DXO/vlw0VYQTIryjNtKOqO1X1eX+7G0/pDa2LMO2IyELgL4CfFPvZOTI0Aafi5XxCVZOq2lECUQJAnZ95NgrsKMZDVfVRvBxXueQWRroVuKDYMqjq/X49DoA1eBl7p5VRPgvwKgR+CZj22SejyPAZ4FuqmvDb7CmRHAo0+ttNFOk7mi+VYgTyKUpTVERkCbASeKoEj/9XvB+XW4JnZ1gK7AVu8d1SPxGRWDEFUNXteL27LcBOoFNV7y+mDEOYo6o7/e1dwJwSygLwv4B7S/FgETkf2K6qL5bi+T7LgVNE5CkReUREji+RHJ8HviMiW/G+r8UYneVNpRiBskJE6oE7gM+raleRn/0+YI+qPlfM545AADgW+DdVXQn0Mv3uj0H4Pvfz8QzSfCAmIpcWU4bR8NOgl2z+tYj8LZ778lcleHYU+Aqe66OUBICZeK7bvwF+U6KStZ8B/lpVFwF/jT96LhcqxQjkU5SmKIhIEM8A/EpV/6sEIpwMnCcim/HcYmeIyC9LIMc2YJuqZkZCv8MzCsXkLGCTqu5V1RTwX8BJRZYhl90iMg/Af59298NIiMjlwPuAS0pUk+MgPMP8ov89XQg8LyJziyzHNuC/1ONpvJHztAaoR+EyvO8mwG/x3NtlQ6UYgXyK0kw7fi/ip8B6Vf2XYj8fQFWvU9WFqroE73N4SFWL3vtV1V3AVhE5xD90JrCuyGJsAVaLSNT/35xJaYPluYWRLgP+u9gCiMg5eK7C81S1r9jPB1DVl1V1tqou8b+n24Bj/e9MMbkLeBeAiCwHQpRm5e4O4DR/+wzgzRLIMDqqWhEv4L14sx3eAv62RDK8E2+I/xKw1n+9t4SfyenA70v4/GOAZ/3P4y5gRglk+DrwGvAK8AsgXKTn3oYXh0jhKblPAi14s4LeBP4EzCyBDBvw4meZ7+e/l+KzGHJ+M9Bags8iBPzS/248D5xRou/FO4HngBfxYojvKMZ3NN+XSRthMBgMNUyluIMMBoPBMA0YI2AwGAw1jDECBoPBUMMYI2AwGAw1jDECBoPBUMMYI2AwTCMi0iMiB5ZaDoNhNIwRMFQtIrJZRPp9RbxLRH7mp/yYruc9LCJX5B5T1XpV3ThdzzQYJosxAoZq5/2qWo+3sG0lZZa8y2AoNcYIGGoC9VIW3IdnDBCR1SLyhIh0iMiLInJ6pq2I/KVfJKdbRDaKyKdz7yUi5/sFQrpE5C3xCh59AzgFuMkfedzkt1UROdjfbhKRn4vIXhF5W0S+KiKWf+5yEXlMRP5ZRNpFZJOInJvzzMt9Wbr9c5dM6wdmqBkCpRbAYCgGfg2Gc4GH/GI0fwA+DvwRL+fQHSJyqKruxUv89j5gI17NhHtF5BlVfd6vCvVz4MN4KSLmAQ2q+kcRORn4paqOVufh+3j55A/ESzFxP16KgUxWyVV4dQhagSuBn/qyRoHvAcer6ut+crqZU/XZGGobMxIwVDt3iUg3Xj6dPcDXgEuBe1T1HlV1VfUBvBxI7wVQ1T+o6lvq8Qiesj7Fv98ngZtV9QH/2u2q+tp4QvjV8S4ErlPVblXdDNyIZ4gyvK2q/6GqDp4xmMdATQIXOEJE6tQrbvTqZD4UgyGDMQKGaucCVW3AS7Z3KF4v+wDgI74rqENEOvCSfGXSQJ/r14Td7597LwMpiBfhJTEslFYgCLydc+xtBhdHymbZ1IEMoPWq2gt8DLgK2CkifxCRQycgg8EwDGMEDDWB36P/GV5lp63AL1S1OecVU9VviUgYr17EP+NVCmsG7gEyxUi24uXLH/ExY4jQhpdZ8oCcY4vJsy6Gqt6nqu/GM1SvAf+Rz3UGw3gYI2CoJf4VeDfwBPB+EXmPiNgiEhGR0/24QQgI45XOTPvB2bNz7vFT4C9F5EwRsURkQU6vfDeev38YvovnN8A3RKRBRA4AvoCX6nhMRGSOH4yOAQmgh9KWFjVUEcYIGGoGP+j7c+BavLKUX8FT9lvxyg9aqtrtn/8N0A5cTE4BI/UqVP0lXhH1TuARBnr33wU+7M/u+d4IIlyDV4ZzI/AY8Gvg5jxEt/AMxg68Iuan4ZUsNBgmjaknYDAYDDWMGQkYDAZDDWOMgMFgMNQwxggYDAZDDWOMgMFgMNQwxggYDAZDDWOMgMFgMNQwxggYDAZDDWOMgMFgMNQwxggYDAZDDfP/AzR2e1d0U4zKAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "stbo_results = [summit.Runner.load(f\"data/cross_coupling_different/stbo_cn_noise_repeat_{i}.json\") \n", - " for i in range(10)]\n", - "mtbo_results = [summit.Runner.load(f\"data/cross_coupling_different/mtbo_cn_repeat_{i}.json\") \n", - " for i in range(10)]\n", - "fig, ax = make_comparison_plot(\n", - " dict(results=stbo_results, label=\"STBO\"),\n", - " dict(results=mtbo_results,label=\"MTBO, n=43\"),\n", - ")\n", - "fig.savefig(\"figures/stbo_mtbo_cn_different.png\", bbox_inches='tight', dpi=300)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ + "cell_type": "code", + "source": [ + "N_REPEATS = 10\n", + "MAX_ITERATIONS = 20" + ], + "outputs": [], + "execution_count": 39, + "metadata": {} + }, { - "data": { - "text/plain": [ - "tBuXPhos 20\n", - "tBuBrettPhos 1\n", - "Name: (catalyst, DATA), dtype: int64" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mtbo_results[0].experiment.data.catalyst.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "stbo_results" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ + "cell_type": "markdown", + "source": [ + "## Kinetic Models" + ], + "metadata": {} + }, { - "data": { - "text/plain": [ - "BTMG 11\n", - "TEA 8\n", - "TMG 2\n", - "Name: (base, DATA), dtype: int64" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mtbo_results[6].experiment.data.base.value_counts()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Similar Substrates" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What if our auxiliary data is similar to the task being optimized? In this case primary amine to secondary amine.\n", - "\n", - "Since we don't have a benchmark for this, we first need to train a model." - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ + "cell_type": "markdown", + "source": [ + "![](figures/baumgartner_mechanisms.png)" + ], + "metadata": {} + }, { - "data": { - "text/html": [ - "
NameTypeDescriptionValues
catalystcategorical, inputCatalyst type3 levels
basecategorical, inputBase4 levels
base_equivalentscontinuous, inputBase equivalents[1.0,2.5]
temperaturecontinuous, inputTemperature in degrees Celsius (ºC)[30,100]
t_rescontinuous, inputresidence time in seconds (s)[60,1800]
yieldcontinuous, maximize objectiveYield[0.0,1.0]
" + "cell_type": "markdown", + "source": [ + "We will use MIT case 1 as the auxiliary task for pretraining." ], - "text/plain": [ - "" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#Create the domain based on Baumgartner, but with different bases\n", - "bases_primary = pd.unique(datasets[\"Phenethylamine\"][\"base\"])\n", - "bases_secondary = pd.unique(datasets[\"Morpholine\"][\"base\"])\n", - "assert bases_primary.all() == bases_secondary.all()\n", - "domain = BaumgartnerCrossCouplingEmulator.setup_domain()\n", - "new_domain = deepcopy(domain)\n", - "bases = list(pd.unique(datasets[\"Morpholine\"][\"base\"]))\n", - "new_domain[\"base\"] = CategoricalVariable(name=\"base\", description=\"Base\", levels=bases)\n", - "new_domain" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ + "metadata": {} + }, { - "data": { - "text/plain": [ - "(
,\n", - " array([],\n", - " dtype=object))" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" + "cell_type": "code", + "source": [ + "exp_pt = MIT_case1(noise_level=1)\n", + "exp_pt.domain" + ], + "outputs": [], + "execution_count": null, + "metadata": {} }, { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmUAAAFJCAYAAADaCVr3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABKuElEQVR4nO3dd3Sc133n//dFH/ROkAC72DsFiZ2okqhCUY1qlCXLjmXHVs46iZ145azXJSdx4nVynJ+dYnsVyVnZWmddIieSLQEzKOwEexc7CbCAJACizKAM5v7+AECDFSCIwcwAn9c5OMA8c+d5vsNh+fA+txhrLSIiIiISWGGBLkBEREREFMpEREREgoJCmYiIiEgQUCgTERERCQIKZSIiIiJBQKFMREREJAgolInIsGWM+cAY80o/21pjzD23eO6Txpj1g1udiMi1IgJdgIiIv1hrHw50DSIi/aWeMhEREZEgoFAmIiHNGPNlY8wvrjv2D8aY7xljyowxf9Dr+KeMMQeNMfXGmN8ZY8bf4pxpxpj3jDGNxpitwGQ/vw0REYUyEQl5/wdYZYxJBjDGRADPAz/p3cgYswZ4A3gKyAAqgZ/d4pw/AFqB0cCnur9ERPxKoUxEQpq19hxQAaztPrQKuGSt3X5d088Bf22tPWit9QJ/Bcy/vrfMGBMOPA18zVrbYq3dB7zt1zchIoJCmYgMD28DL3X//BLwbzdpMx74njGmwRjTANQBBsi+rl0GXZOgzvQ6dmpQqxURuQmFMhEZDn4NzDXGzAYeA965SZszwGettcm9vhzW2o3XtbsIeIGxvY6N80fRIiK9KZSJSMiz1rYC/w/4KbDVWnv6Js3+GfjvxphZAMaYJGPM2usbWWs7gV8CXzfGxBpjZgL9WutMRORuKJSJyHDxNjCHm9+6xFr7K+BvgHeNMY3APuBW65i9DsQD54G3gH8d7GJFRK5nrLWBrkFE5K4ZY8YBh4Asa21joOsREblT6ikTkZBnjAkD/gR4V4FMREKV30KZMeZNY0ytMWbfLZ433Qs8HjXG7DHGLPRXLSIyfBlj4oBG4AHgfwa4HBGRAfNnT9lbdK0XdCsPA1O6v14D/smPtYjIMNW9lli8tXaWtfZM368QEQlOfgtl1toKutYBupU1wE9sl81AsjFmtL/qEREREQlmgRxTls21izNWc+MijiIiIiIjQkSgC+iP+Ph423uWaHp6OhkZGQGsSERERPzlyqUr+Dp9hIX/vu+o53FSepJfrll37jLhEeFgzO8PWkunt5PU0Wm3fJ3b7aah/go+6yPMGKIioqg5W+Pu6OyIu9MaAhnKarh2xeyc7mM3mD59OlVVVUNSlIiIiATWT7/1FsmZqZiw3wck67M01Nbx4v/4pF+u+cGPfoO7yU1sQuzVYz2PH/7M6mvadnZ2smP7TpzOMi5dukxMWBSTMsczKjEdYwzPvv7ClYHUEMhQ9h7wujHmXWARcKV7Y2EREREZwVKy0m4ISJ4WDylZt+6xultz8xfgeudDABxxDjwtHjyNLSxevQyAmiPV7HJu59iZE1z0NtDqbSM7ewwvv7KOM5uO42n2YHr3sg2AP5fE+BmwCZhmjKk2xnzaGPM5Y8znupu8DxwHjgI/Aj7vr1pEREQkdMzNX4CnsQV3kxvrs7ib3HgaW5ibv8Bv18yekkPBugeJTYilobaO2IRYCtY9SPaUHE4eOMHP//XnbDy2nTOtF4gw4UyMGcMzjz7BnDmzmVew8Jp6DSZ8IDWExIr+ubm5VrcvRURERo6aI9XsKdtJ/fnLpGSlMTd/AdlTcoa0hra2Nn773u/YuGkzvjBLdGcE41NyyM4ajafZc82tzd71fvYvXz/b1NZ8x5MXQ2Kg/634fD6qq6tpaWkJdCkSRCIjI8nMzCQxMTHQpYiIyABlT8kZ8hDWw+NpZeOGTZSVVdDa2kpEuyGtM4GINkNd7QWSouKJT0mg/vzlm9a77muvDmg4VkiHskuXLmGMYdq0aYSFaccoAWstHo+HmpquOSMKZiIi0l9ut5vKig2sX7+R1tZW0uJSmJw+lqaTdXS0dRAZHQnAhZPnCI+KGPQxbiEdyhoaGpgwYYICmVxljCE2Npbs7GzOnj2rUCYiIn1qbmqmvLySTZs209bWzuzZsygqLqDiXz8iOSUVB1Gc2nscgPDICJrqm66ZBDBYQjqUdXZ2EhkZGegyJAg5HA46OjoCXYaIiASxK1euUF5WyebNW/F6vcybN4eiogKyRmcBv58FChAWEU79+Tp8nZ2kZKVenQQwmEI6lAF3Pf1Uhif9vhARkVupr6vH5Spn69YqrLUsWDifwsJ8MjOvXZh+bv4C/uuffsWl6otExzpIzkqhtaWVxPRkv9QV8qFMREREpD8uXbqE01nO9qodGGPIzV1IQWE+aWmpV9tcP+szMjqKmDgH3g4vjngHY6eNJzwqgj1lO9VTNtI8/PDDPP/887zyyiuBLkVERCQkXbhQi7PUxc6duwkPD2fJkkXkF6wkOTn5mnY1R6pxvfMhjsQ4kjNTcTe5qT58mqn3zSCx1/ZO1mevmXk5WIZVKPsfD3+ZprpGv50/ITWRb33wnT7bxcfHX/3Z7XYTHR1NeHjXOnL/8i//wrp16/p9zQ8++ODOC+02YcIELly4QHh4OPHx8axatYrvf//7V+v7zne+w9tvv82pU6dIT0/n85//PF/+8pcHfL1bKS0t5Qtf+AKnT59m0aJFvPXWW4wfP/6mbTdu3MgXv/hFDh48yMSJE/nHf/xHli9fDsBf/dVf8Vd/9VdX23Z2dtLW1kZtbS3p6emDXreIiIS2s2fPUVriYu/efURERLBi5XLy8pbfchLYnrKdOBLjru4kEJsQS1xyPDUfn7kmlPlrd4FhNW3Rn4HsTs7f3Nx89WvcuHH85je/ufq4dyDzer3+KvWqnmvv2rWLnTt38td//ddXn7PW8pOf/IT6+np++9vf8v3vf5933313UK9/6dIlnnrqKb71rW9RV1dHbm4uzz333E3b1tXVsXr1ar785S/T0NDAn/3Zn7F69Wrq6+sBeOONN675tf3zP/9z8vPzFchEREaQmiPVfPCj3/DTb73FBz/6DTVHqm9oc+ZMNW/967/x93/3Dxw+/DEFBXm88dU/Y/XqR247K7/+/GUccY5rjo25J4eWK81DsrvAsAplwa6srIycnBz+5m/+hqysLF599VXq6+t57LHHyMjIICUlhccee4zq6t//BsvPz+fHP/4xAG+99RbLly/nS1/6EikpKUycOLHfPWlZWVk89NBD7Nq16+qxP/uzP2PhwoVEREQwbdo01qxZw4YNGwb1Pf/yl79k1qxZrF27lpiYGL7+9a+ze/duDh06dEPbjRs3kpWVxdq1awkPD+ell14iIyODX/7ylze07QmUuq0rIjJy9NxedDe5r95edL3z4dVgdvLkKX78o3/lH773A44fP84DDxbxxlf/nIcfeeiau1i3kpKVhqfFc82xyJgopt4/46bbLw22YXX7MhScP3+euro6Tp06hc/nw+128+qrr/Lzn/+czs5OPvWpT/H666/z61//+qav37JlC6+88gqXLl3ihz/8IZ/+9Kepqanpc7ZhdXU1H3zwAYWFhTd93lpLZWUln/3sZ295juvvvff2la98ha985Ss3HN+/fz/z5s27+jguLo7Jkyezf/9+pk+fftM6rn+8b9++G9pVVlZSW1vL008/fcuaRERkeLnZ7UVrLeXvl9EY5eHYsePExcXx8CMPsXTpYmJiYu7o/D2zLU81NONt9xIRFUF8cjyP/uGTQ7K7gELZEAsLC+Mb3/gG0dHRQNd6Wr2DxVe/+lUKCgpu+frx48fzmc98BoBXXnmFz3/+81y4cIGsrKybtn/iiScwxtDc3ExhYSHf+MY3btru61//Oj6fj1dfffWW125oaOjr7d2gubmZjIxrpxgnJSXR1NR0Q9slS5Zw9uxZfvazn/HMM8/w05/+lGPHjuF2u29o+/bbb/PMM8/0638+IiIyPNSfv0xyZtdMSWstde4GTtZXc6W1iYSEBB5b/QhLFi8iKjrqLq5iwHZ3Etjux0NEoWyIZWRkXJPc3W43f/zHf8xvf/vbq2Onmpqa6OzsvDo5oLfe4Ss2tut/Cs3Nzbe83q9//WuKi4spLy/nxRdf5NKlSzf0eH3/+9/nJz/5CZWVlVfD4mCJj4+nsfHasXiNjY0kJCTc0DYtLY3/+I//4Etf+hJf+MIXeOihhyguLiYn59r/nbjdbv793/+d//iP/xjUWkVEJLilZKXR0tiCO6yNk5eraWptJio8kqmZE/nkH7961wvK7ynbSVpOBmNn/H4ymrvJ7ZflL25GoWyIXX+b8bvf/S6HDx9my5YtZGVlsWvXLhYsWHDDbby7lZeXxyc/+Um+9KUvXXNr9M033+Tb3/42FRUVN4Sf692uV+qNN97gjTfeuOH4rFmzePvtt68+bmlp4dixY8yaNeuWdW7btg3omggxadIk/vRP//SaNr/61a9ITU0lPz//tvWKiMjw4fP5iBmbwEZnFa2+dmIiopmYNJZ4bzRFTz40KDv89O6J6+GIc/S5/MX1a5tFhEU4bvuCW1AoC7CmpiYcDgfJycnU1dXd8vbiYPjiF7/IhAkT2L17N/PmzeOdd97hjTfewOVyMWnSpD5ff7seuVt58skn+fKXv8wvfvELHn30Ub75zW8yd+7cm44nA9i5cyezZ8/G4/Hwta99jbFjx/LQQw9d0+btt9/m5Zdf1qr9IiIjQGdnJ7t376G0pIza2lpSkpKZ6BhHtDuM1Kx05uYvGLRerJ5tlXrGrEHfy1/cbG2zuMjYUQO5/rCafZmQ6t/Np/1x/i9+8Yt4PB7S09NZvHgxq1atGvRr9MjIyODll1/mm9/8JgB/8Rd/weXLl7nvvvuIj48nPj6ez33uc4N+zV/84hd89atfJSUlhS1btlyz7MbnPve5a675t3/7t6SnpzN27FjOnTvHr371q2vOV1NTg9Pp5OWXXx7UOkVEJLh0dnaydWsV/+s7f8/PfvpzwsIM6156ga989ct86kufZt3XXuXhz6we1NuKc/MX4Glswd3k5srFBg5u2seB9Xtoutx406U34NrJBybMEJsQi8/6OgdyfTPYt8n8ITc311ZVVd1w/ODBg8yYMSMAFUko0O8PEZHQ4/V62bZ1Oy5XGfX1DWRnj6GouJBZs2YQFub/vqSaI9Ws/0UZH289SGR0FOGR4XS0dRAREc4Dn3qUBUX3XtP+p996i+TMVEzY7+/ePPv6C+ea2prH3Om1dftSREREAq69vZ0tW7ZR5qqgsbGRcePH8uRTa5g+fVq/h6tcP7ZrILc2s6fkkJiWxPhZEzl3/CzhEeFEO2JobXHz4Zv/Rea4Udec82a3PA3mxpl6/aBQJiIiIgHT2trGpk2bqShfT3NzM5MmTeS559cyZcrkOxo7fLOxXa53PhzQQq/15y/TUFtPZHQkkVFdEwhi4hy0NDTfMBNzbv4CXO98CHRNCvC0eAgzYQplIiIiEho8Hg8bNmyismI9breHKVPvobiokEmTJw7ofDdbWLbn+O1C2c1611Ky0ji57wTxyb9fvsnb7iUuOeGGmZjZU3IoWPfgNedo6XBfGMh7UCgTERGRIdPS0kJl5QY2rN9Ia2sbM2ZMp7i4gHHjx93VeQeynMWtetdmrZhHREQ4rS1uYuIceNu9eNs7SMvJuOlMzOwpOdcEP+9rXs8Njfoh5EOZtVZLI8gNfD5foEsQEZFempqaKC9fz6aNm2lvb2f2nFkUFxeSnX3H4+FvaiDLWdyqd+388bM88KlH+fDN/6KloZm45ATScjIIDw/zy0bkPUI6lMXExHD58mXS0tIUzAToCukdHR1cuHCBuLi4QJcjIjLiXblyhbKyCrZs3obX62Xe/LkUFRWQlTWgpbxu6WZjuzyNLSxeveyWr7ld79rDn1lN5rhRdz1x4E6EdCjLycmhurqaixcvBroUCSIREREkJSWRnp4e6FJEREas+rp6nK5ytm2twlrLwoULKCzKu2E/5IG41SzL68d2LV697LYhqq/etetvS/pbSIeyyMhIJk4c2IBAERERGXyXLl3C6Sxne9UOjDHk3ncvhQV5pKal9v3ifuhrluWdhKiB9K75U0iHMhEREQkOFy7UUlrqYtfO3YSHh7Nk6SLy8/NITk4a1OsMdJblzQykd82fFMpERERkwM6ePUdpiZO9e/cTERHBypXLWZm3gsTEhL5fPAAD3TT8Vob6FuXtKJSJiIjIHTtz+gwlpS4O7D9IdHQ0BYV5rFy53O+TrAYyyzJUKJSJiIhIv504cZKSEicfHz6Cw+HgwQeLWbZ8KbGxjiG5frCNAxtMCmUiIiJyW9Zajh09TkmJk2PHjhMXF8fDjzzE0qWLiYmJGdJagm0c2GBSKBMREQlRg7EB9+1Yazl8+GNKSlycOnmKxMQEVj/+KIsX3U9UdNSgXedOBdM4sMGkUCYiIhKCBnMD7utZa9m//yClJU6qq2tITk7iyScf5777c4mMjBykdyDXUygTEREJQYO5NEQPn8/H3r37KS1xcu7ceVLTUnlm7VPce+8CIiJCNzL4u0dxsITur7CIiMgINphLQ3R2drJr1x6cpS5qay+SkZHB8y+sZf78eYSHhw9WyQHhzx7FwaZQJiIiEoIGY2kIr9fLju07cTrLuHy5jqysUax76QXmzp1NWFiYP8oecv7oUfQXhTIREZEQdDdLQ3R0dLBt23ZcznIaGhrIzh7DK598iZkzZwybMNZjsBeb9SeFMhERkRA0kKUh2tvb2bJ5K2VllTQ2NjJ+/DiefvoJpk2fijFmCKsfOqG02KxCmYiISIjq79IQra1tbNq4mfLySlpaWpg0aSLPv7CWe+6ZPGzDWI9QWmxWoUxERGSY8ng8rF+/kfWVG3C7PUydOoWi4gImTZoY6NKGTCgtNqtQJiIiMsy0tLRQWbGBDRs20traxsyZMygqLmDcuLGBLi0gQmWxWYUyERGRYaKpqYny8vVs2riZ9vZ25syZTVFxAdnZY6g5Us0HP/pN0K/VNZIplImIiIS4K1euUOaqYPPmrXR2djJ//lwKiwrIyhoFBOdaXaGyoOtQUigTEREJUXV19bicZWzbth1rLffeu4CCwjwyMjKuabenbCe+Th9nPz6Dp9mDI95BUkZywNbqCsaQGAwUykRERELMvqp9fPj+R5xrrMUYw+zpM3nsyUdJTU25afuaj89wqeYiUTFRxMQ56Gjv4OyxGtpb24e48i6htKDrUFIoExERCREXzl/gN7/+Lw4fPYLBkJOcRUZ0Kr4z7Xgut8AtQpmnyU1YmCEyqmsz8cioSLztHXia3ENZ/lWhtKDrUFIoExERCXI1NWcpLXGxb99+wjCMjstgUtZ4oiOiAHCHu2/byxQT78Dd6KajrYOIqAi87V6sr+t4IITSgq5Dya+hzBizCvgeEA782Fr77eueHwe8DSR3t/mKtfZ9f9YkIiISKk6fPkNpiYsDBw4SExNNYWE+tVtPk56ViQn7/aKvffUy5UwbR5QjmsaLDVfHlKXlZJA5btRQvI0bhNKCrr35e3KC30KZMSYc+AHwAFANbDPGvGetPdCr2V8AP7fW/pMxZibwPjDBXzWJiIiEghMnTlLykZOPPz6Cw+HgwYeKWb58KQ6Hgw+qf3PHvUw9IWjM1LHXhKC5+QuG4u3cIJQWdO0xFJMT/NlTdj9w1Fp7HMAY8y6wBugdyiyQ2P1zEnDWj/WIiIgELWstx44ep6TEybFjx4mLi+ORR1axZOliYmKir7YbSC9TMIagUFnQtcdQTE7wZyjLBs70elwNLLquzdeBD40xfwTEAcU3O9HFixfJzc29+vi1117jtddeG9RiRUREAsFay+FDH1NS4uTUqdMkJibw+OOPsmjR/URFR93QfqABK9RCULAZiskJgR7o/wLwlrX2u8aYJcC/GWNmW2t9vRtlZGRQVVUVmApFRET8wOfzceDAQUpLXFRX15CcnMyTT63hvvvuJTIy8ravvT5gabV+/xuKyQn+DGU1QO9NtnK6j/X2aWAVgLV2kzEmBkgHav1Yl4iISMD4fD727tlHSamL8+fOk5qWytq1T7Hw3gVERNz5P8taiHVoDMXkBH+Gsm3AFGPMRLrC2PPAi9e1OQ0UAW8ZY2YAMcBFP9YkIiISEJ2dnezatRtnaRm1tRfJzMzg+ReeZf78uYSHhw/4vFqIdWgMxbg8v4Uya63XGPM68Du6lrt401q73xjzTaDKWvse8KfAj4wxf0zXoP9PWmutv2oSEREZal6vl+3bd+J0llF3uY6s0Vm89NILzJk7m7CwsLs+vxZiHTr+Hpfn1zFl3WuOvX/dsa/1+vkAENyLkoiIiAxAR0cH27ZW4XJV0NDQQE5ONqs/+Qlmzpw+KGGshxZiHT4CPdBfRERkWGlvb2fz5q2Ul1XQ2NjE+PHjePrpJ5g2fSrGmL5PcIdCdSFWuZFCmYiIyCBobW1j48ZNVJSvp6WlhcmTJ/HCC88x+Z5JfgljPYJxDbJb8feK+KFOoUxEROQueDwe1ldupLJyAx6Ph6nTplBcXMjEiROGrIZQWINMs0T7plAmIiIyAC0tLVRUrGfjhk20trYxc9YMiooKGDdubN8vHoE0S7RvCmUiIiJ3oLGxiYrySjZt2kJHRwdz5syisKiA7OwxgS4tqGmWaN8UykRERPqhoeEKZWXlbNm8jc7OTuYvmEdRYT6jskYFurSQoFmifVMoExERuY26y3U4XeVUbduOtZZ7cxdSUJBHRkZ6oEsLKZol2jeFMhERkZu4ePESztIyduzYiTGG++7PpaAgj9TUlECXFpJCaZZooCiUiYiI9HL+/AVKS13s3rWH8PBwli5bTF7eSpKTkwJdWsgLhVmigaRQJiIiAtTUnKW0xMXevfuIiopiZd4K8vKWk5CQEOjSZIRQKBMRkRHt9OkzlHzk5ODBQ8TERFNUXMCKFcuIi4sLdGkywiiUiYjIiHT8+AlKSpwc+fgosbEOHlr1AMuWLcHhcAS6NBmhFMpERGTEsNZy9OgxSj5ycvz4CeLj43nk0VUsWbKYmJjoQJcnI5xCmYiIDHvWWg4dOkxJiZPTp86QmJjI42seY9Gi+4iKigp0eSKAQpmIiAxjPp+P/fsPUlripKbmLMnJyTz51Bruu+9eIiMjA11eyNGG4v6lUCYiIsOOz+djz559lJY4OX/+Amlpqax99mkWLpxPRIT+6RsIbSjuf/qdKSIiw0LNkWp2uXZw/MwJLnVewd3uITMzg+dfeJb58+cSHh4e6BJDmjYU9z+FMhERCXmnD53iV//2Sy56G2jrbCc2IobxMVmsWfMkY6eNC3R5w4I2FPc/hTIREQlZHR0dbN1axQe/+S1t3nYSYuKYmjWJ9LgUPM0e9lXsVigbJNpQ3P8UykREJOS0t7WzafMWyssqaWpqIi48hmljppMWn4IxBlAvzmDThuL+p1AmIiIho7W1lY0bN1NRvp6WlhYmT57Ei+ue42PnfjzNnquBDNSLM9i0obj/KZSJiEjQc7s9rF+/gfWVG/F4PEybNpWi4gImTpwAgMNGqxdnCGhDcf9SKBMRkaDV0tJCRfl6NmzYRFtbG7NmzaSoKJ+x48Ze0069ODIcKJSJiEjQaWxsory8kk0bN+P1epkzZzZFxQWMGTP6lq9RL46EOoUyEREJGg0NDZS5KtiyZRudnZ0sWDCPwsJ8RmWNCnRpIn6nUCYiIgFXd7kOp7OMqqodWGu5N3chhYV5pKenB7o0bS0kQ0ahTEREAubixYuUlpaxY/tOANIik5iSM4lFCxYFTSDT1kIyVBTKRERkyJ0/d57SUhe7d+8lPDyctIgkxqWOISkxCU+LJ2iCj7YWkqGkUCYi0otuVflXTc1ZSkqc7Nu7n6ioKPLyVuA948br8QZl8NHWQjKUFMpERLrpVpX/nD51mpISJwcPHiYmJobi4kKWr1hKXFwcP/3WW0EbfLS1kAwlhTIRkW66VXX3ru9pTJ06it2H93Lk46PExjp4aNUDLFu2BIfDcfU1wRx8tLWQDCWFMhGRbrpVdXd6ehpjEmLxxYex7cRumg63EOtw8OijD7Nk6SKio6NveF0wBx8tSitDSaFMRKRbMPfYhILdrh20Rnk5UX+MxtZmoiOiGJ+YzYRROeQXrLzl64I9+GhRWhkqCmUiIt2CuccmmPl8PvbvP8Dmozvw+NqIiYhm2qhJjE7MxGBoqK3r8xwKPiIKZSIiVwV7j02w8fl87Nm9l9JSF+fPX8ARGcOkxLGMy8wmzIQB4G5yq6dRpJ8UykREelGPTd86OzvZuWMXTmcZFy9eIjMzkxdefJaMuDTKf1ZCa3OrehpFBkChTERE+sXr9bK9agdOZxl1dfWMHjOaT3ziRWbPmUVYWFfPmHoaRQZOoUxERG6ro6ODrVu24XJVcOXKFcaOzWHNmtXMmDkdY8w1bdXTKDJwCmUiInJT7W3tbNq0hfLySpqampgwYTxrn32KqVOn3BDGROTuKZSJiMg1Wltb2bhhMxUV62lpaeGeeyazbt3zTJo8UWFMxI8UykREBAC328P6yg2sX78Bj6eV6dOnUlRcyIQJ4wNdmsiIoFAmIjLCNTc3U1Gxno0bNtPW1sas2TMpKipg7FiNDRMZSgplIiIjVGNjI+VllWzatAWv18vcubMpLCpgzJjRgS5NZERSKBMRGWEaGhpwOcvZurUKn8/H/AXzKCzMZ9SozECXJjKiKZSJiIwQly/X4XKWUVW1A2stubkLKSjMJz19YCvu1xypvmZNsrn5C7Qchshd8GsoM8asAr4HhAM/ttZ++yZtngW+Dlhgt7X2RX/WJCIy0tTWXsRZ6mLnzt0YY7h/0X0U5K8kJTVlwOesOVKN650PcSTGkZyZirvJjeudDylY96CCmcgA+S2UGWPCgR8ADwDVwDZjzHvW2gO92kwB/juwzFpbb4xR37mIyCA5f+48paUudu/eS0REBMuWLSEvfyVJSYl3fe49ZTtxJMYRmxALcPX7nrKdCmUiA+TPnrL7gaPW2uMAxph3gTXAgV5tPgP8wFpbD2CtrfVjPSIiI0J1dQ2lJS727dtPdHQU+fkrWblyOfEJ8YN2jfrzl0nOTL3mmCPOQf35y4N2DZGRxp+hLBs40+txNbDoujZTAYwxG+i6xfl1a+1vrz/RxYsXyc3Nvfr4tdde47XXXhv0gkVEQtmpU6cp+cjJoUOHiYmJofiBQpYvX0pcXNygXyslKw13k/tqDxmAp8VDStbAxqeJSOAH+kcAU4B8IAeoMMbMsdY29G6UkZFBVVXV0FcnIhICjh07TmmJiyNHjhIbG8uqVQ+ydNkSHI4Yv11zbv4CXO98CHT1kHlaPHgaW1i8epnfriky3PkzlNUAY3s9zuk+1ls1sMVa2wGcMMZ8TFdI2+bHukREQp61liNHjlLykZMTJ04SnxDPo489zJIli4iOjvb79bOn5FCw7sFrZl8uXr1M48lE7oI/Q9k2YIoxZiJdYex54PqZlb8GXgD+1RiTTtftzON+rElEJKRZazl48BClJS5Onz5DUlIia9Y8xqLF9xMZGTmktWRPyVEIExlEfgtl1lqvMeZ14Hd0jRd701q73xjzTaDKWvte93MPGmMOAJ3Al621GiUqInIdn8/H/v0HKC1xUVNzlpSUFJ56+gnuu+9eIiICPRJFRAaDsdYGuoY+5ebmWo0pE5GRyOfzsXv3HkpLyrhw4QLp6WkUFhWwcOF8wsPDA12eiNyEMWa7tTa375bX0n+vRESCUGdnJzt27MJZ6uLSpcuMGpXJiy8+x9x5c+46jGklfpHgdNtQZoxJvd3z1tq6wS1HRGToBGM48Xq9VFXtwOUso66unjFjRvOJl9cxe/ZMwsLC7vr8WolfJHj11VO2na7tjwwwDqjv/jkZOA1M9GdxIiL+EmzhpKOjgy1btlHmquDKlSuMHZvDmidWM2PGdIwxg3YdrcQvErxuG8qstRMBjDE/An5lrX2/+/HDwBN+r05ExE+CJZy0tbWxadMWyssraW5qZuLECax99immTp0yqGGsh1biFwle/R1Tttha+5meB9baD4wxf+unmkRE/C7Q4aS1tZUNGzZRUb4et9vNPVMmU/zSC0yePMmv19VK/CLBq7+h7Kwx5i+A/9P9eB1w1j8liYj4X6DCidvtprJyAxvWb8TjaWX69GkUFRcwYcJ4v163h1biFwle/Q1lLwD/E/gVXWPMKrqPiYiEpKEOJ81NzVRUrmfjhs20tbUxa/ZMiosLycnJ9sv1bkUr8YsErztap8wYE2etbfFjPTeldcpExB+GYvZlY2MjZWUVbN60Fa/Xy9x5cygszGfMmNGDeh0RCR5+XafMGLMU+DEQD4wzxswDPmut/fydXlBEJFj4c5ug+voGylzlbN1ahc/nY8GCeRQW5ZOZmemX64lI6Ovv7cu/Bx4C3gOw1u42xqz0W1UiIiHq8uU6nM4ytlftAODe3IUUFOSRnq6B9CJye/1e0d9ae+a66dmdg1+OiEhoqq2tpbS0jF07dxMWFsaiRfeRX5BHSkpyoEsTkRDR31B2pvsWpjXGRAL/DTjov7JERELDuXPnKS11sWf3XiIiIli2fAl5eStJSkoMdGkiEmL6G8o+B3wPyAZqgA8BjScTkRGrurqGkhIn+/cdIDo6ivyClaxcsZz4hPhAlyYiIaq/oWyatXZd7wPGmGXAhsEvSUQkeJ08eYrSEheHDh0mJiaG4gcKWbFiGbGxsX2/WETkNvobyv4/YGE/jomIDEvHjh2npMTJ0SPHiI2NZdXDD7J06RIcjphAlyYiw8RtQ5kxZgmwFMgwxvxJr6cSgXB/FiYiEmjWWj7++AilJS5OnDhJfEI8jz32CIuX3E90dHSgyxORYaavnrIoutYmiwASeh1vBJ7xV1EiIoFkreXgwUOUfOTkzJlqkpISWfPEahYtuo/IyMhAlyciw9RtQ5m1thwoN8a8Za09NUQ1iYgEhM/nY9++A5SWODl79hwpKSk8/cyT5OYuJCKi3ysIiYgMSH//lvmxMWattbYBwBiTArxrrX3Ib5WJiAwRn8/H7l17KC11ceFCLenpaTz33DMsWDif8HCN1BCRodHfUJbeE8gArLX1xhjtFSIiIa2zs5MdO3bhLHVx6dJlRo0axYvrnmPevLmEhYUFujwRGWH6G8p8xphx1trTAMaY8UD/dzIXEQkiXq+Xbdu243KWU19fz5gxo3n5lXXMmjVTYUxEAqa/oeyrwHpjTDlggBXAa36rSkTEDzo6OtiyeStlZRVcudLI2LE5PPHkambMmM5128iJiAy5foUya+1vjTELgcXdh75orb3kv7JERAZPW1sbmzZtoby8kuamZiZOnMCzzz3DlCn3KIyJSNDoa52y6dbaQ92BDOBs9/dx3bczd/i3PBGRgfN4Wtm4YRMVFetxu91MmXIPRS8VMHnypECXJiJyg756yv4U+Azw3Zs8Z4HCQa9IROQuud1uKis3sGH9RjyeVmbMmEZhUQETJowPdGkiIrfU1zpln+n+XjA05YiIDFxzUzMVFevZuHETbW3tzJ49i6LiAnJysgNdmohIn/q6ffnU7Z631v5ycMsREblzV640Ul5WwebNW/F6vcybN4fCogJGj84KdGkiIv3W1+3L1d3fM+naA9PZ/bgA2AgolImEkJoj1ewp20n9+cukZKUxN38B2VNyAl3WgNXX1eMqq2Db1ip8Ph8LFsyjsKiAzMyMQJcmInLH+rp9+SqAMeZDYKa19lz349HAW36vTkQGTc2RalzvfIgjMY7kzFTcTW5c73xIwboHQy6YXbp0GZezjKqqHRhjyM1dSEFhPmlpqYEuTURkwPq7TtnYnkDW7QIwzg/1iIif7CnbiSMxjtiEWICr3/eU7QyZUFZbW0tpaRm7du4mLCyMxYvvJ78gj5SU5ECXJiJy1/obykqNMb8Dftb9+DmgxD8liYg/1J+/THLmtT1JjjgH9ecvB6ii/jt37jylJU727NlHREQEy5cvJS9/BYmJiYEuTURk0PR38djXjTFPAiu7D/3QWvsr/5UlIoMtJSsNd5P7ag8ZgKfFQ0pWWgCrur3q6hpKPnKyf/8BoqOjKSjIY8XKZcTHxwe6NBGRQdffnjKAHUCTtbbEGBNrjEmw1jb5qzARGVxz8xfgeudDoKuHzNPiwdPYwuLVywJc2Y1OnjxFaYmTQ4c+xuGI4YEHili+YimxsbF9v1hEJET1K5QZYz5D116XqcBkIBv4Z6DIf6WJyGDKnpJDwboHr5l9uXj1sqAZT2at5fixE5SUODl69BhxcXE8/PBDLF22mJiYmECXJyLid/3tKfsCcD+wBcBae8QYk+m3qkTEL7Kn5ARNCOthreXjj49QWuLixImTxCfE89hjj7BkySKioqMCXZ6IyJDpbyhrs9a292zca4yJoGubJRGRAbHWcvDAIUpKnJw5U01SUhJPPLGa+xfdR2RkZKDLExEZcv0NZeXGmDcAhzHmAeDzwG/8V5aIDFc+n499e/dTUuri3NlzpKam8MwzT3Jv7kIiIu5kmKuIyPDS378B/xz4A2Av8FngfeDH/ipKRIafzs5Odu/eQ2lJGbW1tWRkpPPcc8+wYOF8wsPDA12eiEjA9RnKjDHhwH5r7XTgR/4vSUSGk87OTnZs34nTWcalS5cZNWoU69Y9z9x5cwgLCwt0eSIiQaPPUGat7TTGHDbGjLPWnh6KokQk9Hm9XrZt3Y7LVUZ9fQPZ2WN4+ZWXmDVrhsKYiMhN9Pf2ZQqw3xizFWjpOWitfdwvVYlIyGpvb2frlm2UlVVw5Uoj48aN5ckn1zB9xjR6JguJiMiN+hvK/odfqxAJcTVHqq9Z/2tu/oKgW3rC39ra2ti0cQvl5ZU0NzczadJEnn1uLVOmTFYYExHph9uGMmNMDPA54B66Bvn/b2utdygKEwkVNUeqcb3zIY7EOJIzU3E3uXG98yEF6x4cEcHM42llw4aNVFasx+32MGXqPRQXFTJp8sRAlyYiElL66il7G+gAKoGHgZnAf/N3USKhZE/ZThyJcVf3lOz5vqds57AOZS0tLayv3Mj69RtpbW1lxoxpFBUXMn78uECXJiISkvoKZTOttXMAjDH/G9jq/5JEQkv9+cskZ6Zec8wR56D+/OUAVeRfzU3NlJdXsmnTZtra2pk9ZxbFxYVkZ48JdGkiIiGtr1DW0fODtdZ7p+NCjDGrgO8B4cCPrbXfvkW7p4H/B9xnra26o4uIBFhKVhruJvfVHjIAT4uHlKy0AFY1+K5cuUJ5WSWbN2/F6/Uyb/5cigrzyRqdFejSRESGhb5C2TxjTGP3z4auFf0bu3+21trEW72we32zHwAPANXANmPMe9baA9e1S6DrluiWAb4HkYCam78A1zsfAl09ZJ4WD57GFhavXhbgygZHfV09Llc5W7dWYa1lwcL5FBXlk5GREejSRESGlduGMmvt3SyzfT9w1Fp7HMAY8y6wBjhwXbtvAX8DfPkuriUSMNlTcihY9+A1sy8Xr14W8uPJLl26hNNZzvaqHRhjyL3vXgoK8khLS72hrWafiojcPX9uNJcNnOn1uBpY1LuBMWYhMNZa+1/GGIUyCVnZU3KGTQi5cKEWZ6mLnTt3Ex4ezpIli8gvWElycvJN24/02aciIoMlYLv/GmPCgL8DPtlX24sXL5Kbm3v18WuvvcZrr73mv+JERqCzZ89RWuJi7959REREsGLlcvLylpOYeMtRCsDInX0qIjLY/BnKaoCxvR7ndB/rkQDMBsq6JxBkAe8ZYx6/frB/RkYGVVUa/y/iD2fOVFNa4mL//gNER0dTUJDHipXLiI+P79frR9rsUxERf/FnKNsGTDHGTKQrjD0PvNjzpLX2CpDe89gYUwZ8SbMvRYbGyZOnKPnIyeHDH+NwxPDAg0UsX76M2FjHHZ1npMw+FRHxN7+Fsu4lNF4HfkfXkhhvWmv3G2O+CVRZa9/z17VF5OastRw7dpySj5wcO3acuLg4Hn7kIZYuXUxMTMyAzjncZ5+KiAwVY60NdA19ys3Ntbp9KYEyHGYWWms5fPhjSktcnDx5ioSEBPLyV7Bk8SKioqPu+vzD4ddIRGSwGGO2W2tz+2553esUykRurffMwt69QKEys9Bay4EDByktcXHmTDXJyUnkF+Rx//25REZGBro8EZFhaaChLGCzL0VCQajOLPT5fOzdu5/SEifnzp0nNS2VZ9Y+xb33LiAiQn/sRUSCkf52FrmNUJtZ2NnZya5de3CWllFbW0tGRgbPPb+WBQvmER5+N2tBi4iIvymUidxGqMws9Hq97NixC5ezjEuXLpOVNYp1L73A3LmzCQsLC3R5IiLSDwplIrcR7DMLvV4vW7dW4XKW09DQQHb2GF5+5SVmzZqhMCYiEmIUykRuI1j3tWxvb2fLlm2UuSpobGxk3PixPPX0GqZPn0b3YswiIhJiFMpE+hBM+1q2traxadNmKsrX09zczKRJE3n+hbXcc89khTERkRCnUCYSAjweDxs2bKKyYj1ut4epU6dQVFzApEkTA12aiIgMEoUykSDW0tJCZeUGNqzfSGtrGzNmTKe4uIBx48cFujQRERlkCmUiQaipqYny8vVs2riZ9vZ25syZTVFxAdnZYwJdmoiI+IlCmUgQuXLlCmVlFWzZvA2v18u8+XMpKiogK2tUoEsTERE/UyiTESuY9musr6vH6Spn29YqrLUsXLiAwqI8MjIyAlKPiIgMPYUyGZF672mZnJmKu8mN650Ph3xPy0uXLuEsLWP79p0YY8i9714KC/JITUvt+8UiIjKsKJTJiBToPS0vXKiltNTFrp27CQ8PZ8nSReTn55GcnOT3a4uISHBSKJMRKVB7Wp49e47SEid79+4nMjKSlSuXszJvBYmJCX69roiIBD+FMhmRhnpPyzOnz1BS6uLA/oNER0dTUJjHypXLiYuL88v1REQk9CiUyYg0VHtanjhxkpISJx8fPoLD4eDBB4tZtnwpsbGOQb2OiIiEPoUyGZH8uaeltZZjR49TUuLk2LHjxMXF8cgjq1iydBExMTGDUL2IiAxHCmUyYg32npbWWg4f+piSUhenTp4iMTGB1Y8/yuJF9xMVHTVo1xERkeFJoUzkLvl8Pg4cOERpiZPq6hqSk5N48snHue/+XCIjIwNdnoiIhAiFMpEB8vl87N2zj9JSF+fOnSc1LZVn1j7FvfcuICJCf7REROTO6F8OkTvU2dnJrl17cJa6qK29SEZGBs+/sJb58+cRHh4e6PJERCREKZSJ9JPX62XH9p04nWVcvlxH1ugsXnrpBebMnU1YWFigyxMRkRCnUCYBE0x7T95OR0cH27Ztx+Usp6GhgZycbF755EvMnDlDYUxERAaNQpkExGDsPenvUNfe3s6WzVspK6uksbGR8ePH8fTTTzBt+lSMMYN2HREREVAokwC5270n7zTU3UmAa21tY9PGzZSXV9LS0sLkyZN44YVnmXzPJIUxERHxG4UyCYi73XvyTkJdfwOcx+Nh/fqNrK/cgNvtYerUKRQ/UMjEiRPu4p2KiIj0j0KZBMTd7j15J6GurwDX0tJCZcUGNmzYSGtrGzNnzqCouIBx48YO9O2JiIjcMYUyCYi73XvyTkLdrQJc7dkL/Odv3mfTpi10dHQwZ84sCosKyM4ecxfvTEREZGAUyiQg7nbvyTsJddcHuLaONo5dOEWtuw5bcZz58+dSVFTAqKxRg/cGRURE7pCx1ga6hj7l5ubaqqqqQJchQaa/g/d7xpSZ2AhqW+s411iLxTJz2nQee+JRMjLSA1C9iIgMV8aY7dba3Dt9nXrKJGT1d0PxqOQYOrLDOXj4EACjkzJ56NEHmblwpr9LFBER6TeFsgALlQVUQ9GF8xcoLXWxa9cewsPDWbZ8CXn5K0lOTgp0aSIiIjdQKAugwVhANVT5M4zW1JyltMTFvn37iYyMZGXeClauXE5iYsKgnF9ERMQfFMoC6G4XUA01PUGs+vBp6s9dJmvSGNJzMgctjJ4+fYbSEhcHDhwkJiaawsJ8VqxcRlxc3CC+CxEREf9QKAugu11ANZT07hX0NHnAwLnjZ4mJc5CQlggMPIyeOHGSko+cfPzxERwOBw8+VMzy5UtxOByD/TZERET8RqEsgO52AdVQ0rtXsLXFQ0ycA2+Hlwsnz5GQlnjHYdRay9Gjxyj5yMnx4yeIi4vjkUdWsWTpYmJiov34TkRERPxDoSyA7nYB1VDSu1fQEe+go62DiKhIPM0eoP9h1FrL4UMfU1Li5NSp0yQmJvD444+yaPH9REVF+fU9iIiI+JNCWQDd7QKqoaR3r2DmhCxO7T2Ot6ODmDgH7iZ3n2HU5/Nx4MBBSktcVFfXkJyczJNPreG+++4lMjJyCN+JiIiIfyiUBVh/19oKdb17BRNSEhk1aQznj58ltvuW5q3CqM/nY++efZSUujh/7jxpaamsXfsUC+9dQESEfvuKiMjwoX/VZEhc3yuYOW4UxS+vumUg7ezsZNeu3ThLy6itvUhmZgbPv/As8+fPJTw8fIirFxER8T+FMhky/ekV9Hq9bN++E6ezjLrLdYwencVLn3iROXNmERYWNkSVioiIDD2FMgkKHR0dbNtahctVQUNDAzk52az+5CeYOXO6wpiIiIwICmUSUO3t7WzevJXysgoaG5sYP2E8Tz/zBNOmTcUYE+jyREREhoxCmQREa2sbGzduoqJ8PS0tLUyePIkXXniOyfdMUhgTEZERSaFsiGjj8S4ej4f1lRuprNyAx+Nh6rQpFBcXMnHihECXJiIiElB+DWXGmFXA94Bw4MfW2m9f9/yfAH8AeIGLwKestaf8WVMgDOXG48Ea/lpaWqioWM/GDZtobW1j5qwZFBcVMHbc2ECXJiIiEhT8FsqMMeHAD4AHgGpgmzHmPWvtgV7NdgK51lq3MeYPgb8FnvNXTYEyVBuPD2X466/GxibKyyvZtHEzXq+XOXNmUVRcyJgxowNSj4iISLDyZ0/Z/cBRa+1xAGPMu8Aa4Goos9a6erXfDLzkx3oCZqg2Hh+q8NcfDQ1XKCsrZ8vmbXR2djJ/wTyKCvMZlTVqSOsQEREJFf4MZdnAmV6Pq4FFt2n/aeCDmz1x8eJFcnNzrz5+7bXXeO211wajxiExVBuPD1X4u526y3U4XeVUbduOtZZ7cxdSUJBHRkb6kNUgIiISioJioL8x5iUgF8i72fMZGRlUVVUNbVGDaKg2Hu8d/hovX6H25Hma65uIT0mg5ki1X3vLLl68iLO0nB07dmKM4b77cykoyCM1NcVv1xQRERlO/BnKaoDeo7hzuo9dwxhTDHwVyLPWtvmxnoAZqo3He8Jfc30T54+dxYSBCQ8jKSPZb2PLzp+/QGmpi9279hAeHs7SZYvJz19JUlLSoF5HRERkuPNnKNsGTDHGTKQrjD0PvNi7gTFmAfAvwCprba0fawm4odh4vCf8/fK779LZ2UlCYgKjJowmIS0Rd5N7UMeW1dScpaTEyb69+4mKiiIvbwUr85aTkJAwKOcXEREZafwWyqy1XmPM68Dv6FoS401r7X5jzDeBKmvte8B3gHjg37sXDD1trX3cXzWNBNlTckjLTmfygqmYsN8vwjpYY8tOnz5DyUdODh48RExMNEXFBaxYsYy4uLi7PreIiMhI5tcxZdba94H3rzv2tV4/F/vz+iOVPyYWHD9+gpISJ0c+PkpsrIOHVj3AsmVLcDgcg1GyiIjIiBcUA/3vRrAulhpIgzWxwFrL0aPHKPnIyfHjJ4iPj+eRR1exZMliYmKi/VG6iIjIiBXSoSwYF0sNBj1jyzb8opx9O3YDMH72xH6/3lrLoUOHKSlxcvrUGRITE3l8zWMsWnQfUVFR/ipbRERkRAvpUBZMi6UGo/bWNiYvnHq1t6yvwOrz+di//yClJU5qas6SkpLMU089Qe59C4mMjBzi6kVEREaWkA5lwbBYarC6k8Dq8/nYs2cfpSVOzp+/QFpaKmuffZp7711AeHj4kNcuIiIyEoV0KBuqlfJDUX8Ca2dnJzt37sZZWsbFixfJzMzkhRefZd68uQpjIiIiQyykQ9lQrZQfim4XWL1eL9urduB0lVN3uY7RY0bziU+8yOw5swgLCwtg1SIiIiOXsdYGuoY+5ebm2ltts6TZlzfXexJET2BtudJE+vxsdu7fTUPDFXJysil+oJCZM2fQvU6ciIiI3CVjzHZrbW7fLa97XaiHMrm1nsB66dxF3NEdnG2pxe12M2HCeIofKCTOONhbvkuBVkREZBANNJTpXtUwljY2nehJCRzrPMvRiycZPTqLz37uD/j8Fz5LfFgsZT/9CHeT+5rlRGqOVAe6bBERkREppMeUyc253R7Wr9/A+sqNeDwepk2bSlFxARMnTrjaRsuJiIiIBBeFsrsQbOPZmpubqazYwIYNm2hra2PWrJkUFRcwduyNNWk5ERERkeCiUDZAwbSbQGNjI+Xl69m0cTNer5c5c2ZTVFzAmDGjb/kaLSciIiISXBTKBigYbv81NDRQ5qpgy5ZtdHZ2smDBPAqLChg1KrPP12o5ERERkeCiUDZAgbz9V3e5DqezjKqqHVhryc1dSEFhHunp6f0+R8/+mL1vvy5evUzjyURERAJEoWyAAnH77+LFi5SWlrFzxy6MMdx/fy4FBXmkpKYM6HzZU3IUwkRERIKEQtkADeXtv/PnzlNa6mL37r1ERESwbNkS8vJXkpSUOOjXEhERkcBQKBugobj9V1NzlpISJ/v27ic6Ooq8vBWszFtOQkLCoF1DREREgoNC2V0YzNt/vZfXCEuKoo5GTpw+RUxMDMXFhSxfsZS4uLhBuZaIiIgEH4WyINCzvEZHtOVc+0XqT18hnDCW3reIVY8/hMPhCHSJIiIi4mcKZQFmraXsv1wcbz9LU3MLkeGRTM4YT2p4IjGN4QpkIiIiI4RCWYBYazl08DAlJU5OV58hOiKKKZkTGZOUSXhYONZntbq+iIjICKJQdgv+2kLJ5/Oxf/8BSktc1NScJSUlmWmjJpEUFk98YvzVdlpdX0REZGRRKLsJf2yh5PP52LN7L6WlLs6fv0B6ehrPPvs0C+9dwPnj53C98yFhJkyr64uIiIxQCmXXqTlSzS+/+y7N9U3EpySQOSGLxLQkYGBbKHV2drJzxy6czjIuXrzEqFGZvPjic8ydN4fw8HBAq+uLiIiIQtk1enrImuqbiEuKp6Otg1N7jzN+ziQSUhLvaIyX1+ulqmoHLmcZdXX1jB4zmk984kVmz5lFWFjYDe21ur6IiMjIplDWS88m4wkpCXS0dxAZHQlA7cnzRERF9muMV0dHB1u3bMPlquDKlSuMHZvDmjWrmTFzOsYYf78FERERCVEKZb30bDI+asJoTuw9BkB4ZATN9U19jvFqb2tn06YtlJdX0tTUxMSJE1j77FNMnTpFYUxERET6NGxC2WDMluzZZDwhLZHMcaM4feAk7iY3jvhYZq2Yd9Pztba28sF7v2Pb9io6Or2kxCbx9OonWLTyfoUxERER6bcbBzeFoJ6xYO4m9zWzJWuOVN/ReebmL8DT2MLF0xe4cOo8jgQHqVlpTJw3mf2Vu685n9vt4cPflfCX3/w2G7duJi7CwcKc2UxLnshR137OHq0Z7LcpIiIiw9iw6CnrGQsWmxALcPX7nc6W7JkF+cvvvovt9OFI/P3sy9rTF/jld98lcXQyTZGtnGuqpb2jg/T4VKYkjiczLf2GmjRwX0RERPprWISynrFgvTniHANaET97Sg5p2elMXjAVE9Z1+7Hx8hXOnqihJa6d6uZ6fNZHUkQ8a595igMf7SI5ZXCuLSIiIiPXsAhlPWPBenrI4O5WxO99vtaONg6dPUrzqDYAshIyGJ+ajWmHc3vPDPq1RUREZGQaFmPKesaCuZvcWJ/F3eTG09jC3PwFAz5fQ0MD+84cYtPxHTRHthHtDmdO6hRmjp5CXHTs1d6wwb62iIiIjEzDIpT1jAWLTYilobaO2ITYAW+JVFt7kcqqjRz2nOKSp560qCTGuJOZmj6BjMyMq+16esMG89oiIiIycg2L25dw9yvinz93npJSF3t27yUiIoLlK5aSl7eSpKTEa2Z33mxvSq3GLyIiIndr2ISym+nP2mXV1TWUlrjYt28/0dFR5OevZOXK5cQnxF9to70pRURExN+MtTbQNfQpNzfXVlVV3dFrenq3HIlx1/Ru9dxaPHXqNCUfOTl06DAxMTEsX7GUFSuWERsb2/fJRURERG7BGLPdWpt7p68btj1lt1q7rPz9Mppj2jhy5CixsbGsevhBli5dgsMRE8hyRUREZIQbtqGs99pl1lrq3Vc4UXeGK61NxCfE8+hjD7NkySKio6MDXKmIiIhICIWyO93bMiUrjZbGFjxhbZy8XE1jazNRYZFMyZzIq3/8KpGRkUNYvYiIiMjthcSSGB1t7Xe0t6XP58MxLpHdFw6xp+YQ7d4OJiblMM0xjkeffESBTERERIJOSPSUuZs8/drb0ufzsXv3HkpLyrhw4QLJSUlMdIwl2h1GalZ6n71rIiIiIoESEqGs6XIje8t2Mm7mREZPHgNcu79kZ2cnO3bswlnq4tKly6SmpDBz9BSiWgypSenMXaMwJiIiIsEtJJbEGJ2UZdfNewbb6SMtJ4PJC6YQERVJTFwMafNG4ywto76+njFjRrNg1jzObDxKbFL8TZfCEBEREfGnYb0khrUWb3sHWKg9eZ4rl6+QOC0Nb3oYzUc2M3ZsDk88uZoZM6bz2x//J7FJ8X3e6hQREREJJn4d6G+MWWWMOWyMOWqM+cpNno82xvzf7ue3GGMm3Ow87nY3xhgIh7DsGDpnRtPgcEObj2zS4aCbjf/q4rc//k9qPj6DI85xzet73+qsOVLNBz/6DT/91lt88KPf3HKygAyOH/7wh4EuQe6CPr/Qpc8utOnzC3npA3mR30KZMSYc+AHwMDATeMEYM/O6Zp8G6q219wB/D/zNzc7V6m0jbKyDiPuSCZ8US1gb+Pa3EHWyk7azLbQ2e7hUc5GLpy9w+ewlLlXXXvP6ns3De+9h2Z9ZnHL39BdLaNPnF7r02YU2fX4hL2MgL/JnT9n9wFFr7XFrbTvwLrDmujZrgLe7f/5/QJExxlx/opTUFMLGxWCbOgk/2g6H3ZhmHy1XmomMjsQRH0tUTBRXLjaQNWkM54+fxd3kxvos7iY3nsYW5uYvuGaVfxNmiE2IxZEYx56ynX78ZRARERHpm98G+htjngFWWWv/oPvxJ4BF1trXe7XZ192muvvxse42l3qfKzws3IaZMGx3sY7IGGIiYjoB2+nrbOt1vvD2zvaGiLAIh9fndYebsOhO62tr9bY1eH1eT1J0woRO62u/vtZwExZ1pa3p5OD/KghdXbiX+mwlwUqfX+jSZxfa9PmFtmnW2oQ7fVFIDPTv9HXe0HsmIiIiMpz48/ZlDTC21+Oc7mM3bWOMiQCSgMt+rElEREQkKPkzlG0DphhjJhpjooDngfeua/Me8Er3z88AThsKC6eJiIiIDDK/hTJrrRd4HfgdcBD4ubV2vzHmm8aYx7ub/W8gzRhzFPgGkHu3y2dIYPRj+ZM/McYcMMbsMcaUGmPGB6JOubm+Pr9e7Z42xlhjzB0viij+0Z/PzhjzbPefv/3GmJ8OdY1ya/34u3OcMcZljNnZ/ffnI4GoU25kjHnTGFPbPT7+Zs8bY8w/dH+2e4wxC/s8qbU24F9AOHAMmAREAbuBmde1+Tzwz90/Pw/830DXra87+vwKgNjun/9Qn1/wfPXn8+tulwBUAJuB3EDXra9+/9mbAuwEUrofZwa6bn3d0ef3Q+APu3+eCZwMdN36uvrZrAQWAvtu8fwjwAeAARYDW/o6p18Xj70Dg7Z8hgREn5+ftdZlrXV3P9xM1xhDCQ79+fMH8C261hJsHcri5Lb689l9BviBtbYewFpbiwSL/nx+Fkjs/jkJODuE9cltWGsrgLrbNFkD/MR22QwkG2NG3+6cwRLKsoEzvR5Xdx+7aRvbdWv0CpA2JNVJX/rz+fX2abr+9yDBoc/Pr7vbfay19r+GsjDpU3/+7E0FphpjNhhjNhtjVg1ZddKX/nx+XwdeMsZUA+8DfzQ0pckguNN/G0NjSQwZPowxLwG5QF6ga5H+McaEAX8HfDLApcjARNB1CzOfrh7qCmPMHGttQyCLkn57AXjLWvtdY8wS4N+MMbOttb5AFyaDL1h6yrR8Rmjrz+eHMaYY+CrwuLW27frnJWD6+vwSgNlAmTHmJF1jI97TYP+g0J8/e9XAe9baDmvtCeBjukKaBF5/Pr9PAz8HsNZuAmIY4L6KMuT69W9jb8ESyrR8Rmjr8/MzxiwA/oWuQKYxLcHltp+ftfaKtTbdWjvBWjuBrjGBj1trqwJTrvTSn787f01XLxnGmHS6bmceH8Ia5db68/mdBooAjDEz6AplF4e0Shmo94CXu2dhLgauWGvP3e4FQXH70lrrNcb0LJ8RDrxpu5fPAKqste/RtXzGv3Uvn1FH129eCQL9/Py+A8QD/949P+O0tfbxW55Uhkw/Pz8JQv387H4HPGiMOQB0Al+21uouQxDo5+f3p8CPjDF/TNeg/0+qQyI4GGN+Rtd/eNK7x/z9TyASwFr7z3SNAXwEOAq4gVf7PKc+WxEREZHAC5bblyIiIiIjmkKZiIiISBBQKBMREREJAgplIiIiIkFAoUxEREQkCCiUiUjQMsZYY8z/6fU4whhz0Rjzn4Gsqy/GmOZA1yAioUehTESCWQsw2xjj6H78AH2siO0v3TuJiIj4jUKZiAS794FHu39+AfhZzxPGmDhjzJvGmK3GmJ3GmDXdxycYYyqNMTu6v5Z2Hx9tjKkwxuwyxuwzxqzoPt7c65zPGGPe6v75LWPMPxtjtgB/a4yZbIz5rTFme/f5p3e3m2iM2WSM2WuM+csh+DURkWFIoUxEgt27wPPGmBhgLrCl13NfpWvLtfuBAuA7xpg4oBZ4wFq7EHgO+Ifu9i8Cv7PWzgfmAbv6cf0cYKm19k+AHwJ/ZK29F/gS8I/dbb4H/JO1dg5w221URERuRd3xIhLUrLV7jDET6Oole/+6px8EHjfGfKn7cQwwDjgLfN8YM5+urYWmdj+/DXjTGBMJ/Npau6sfJfy7tbbTGBMPLOX3W4UBRHd/XwY83f3zvwF/0+83KCLSTaFMRELBe8D/omufubRexw3wtLX2cO/GxpivAxfo6g0LA1oBrLUVxpiVdN0OfcsY83fW2p/Qtadgj5jrrt3S/T0MaOjuZbsZ7VknIndFty9FJBS8CXzDWrv3uuO/A/7IdHddGWMWdB9PAs5Za33AJ+ja7BljzHjggrX2R8CPgYXd7S8YY2YYY8KAJ29WgLW2EThhjFnbfS5jjJnX/fQG4Pnun9fd3VsVkZFKoUxEgp61ttpa+w83eepbQCSwxxizv/sxdI31esUYsxuYzu97u/KB3caYnXSNNfte9/GvAP8JbOT2Y8LWAZ/uPu9+YE338f8GfMEYsxfIvvN3KCICxlr1uIuIiIgEmnrKRERERIKAQpmIiIhIEFAoExEREQkCCmUiIiIiQUChTERERCQIKJSJiIiIBAGFMhEREZEgoFAmIiIiEgT+f5vJLJ64wW9GAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Load or train primary amine benchmark model\n", - "save_dir = pathlib.Path(\"baumgartner_phenethylamine_emulator/\")\n", - "if save_dir.exists():\n", - " exp_amine = ExperimentalEmulator.load(\"baumgartner_primary_amine\", save_dir)\n", - "else:\n", - " exp_amine = ExperimentalEmulator(\n", - " domain=new_domain,\n", - " model_name=\"baumgartner_primary_amine\",\n", - " dataset=datasets[\"Phenethylamine\"].replace(\"≥90%\", 0.9)\n", - " )\n", - " exp_amine.train(max_epochs=1000, cv_fold=2, test_size=0.25, verbose=False)\n", - " exp_amine.save(\"baumgartner_phenethylamine_emulator\")\n", - "exp_amine.parity_plot()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Single-Task Bayesian Optimization\n", - "for i in range(N_REPEATS):\n", - " print(f\"Repeat {i}\")\n", - " result = run_stbo(exp_amine, max_iterations=MAX_ITERATIONS)\n", - " result.save(f\"data/cross_coupling_similar/stbo_cn_noise_repeat_{i}.json\")\n", - " clear_output(wait=True) " - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "scrolled": true - }, - "outputs": [ + "cell_type": "markdown", + "source": [ + "We first generate different amounts of data using latin hypercube sampling." + ], + "metadata": {} + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Repeat 9\n" - ] + "cell_type": "markdown", + "source": [ + "Now, we can run single-task and multi-task Bayesian optimization." + ], + "metadata": {} }, { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " \n", - " 100.00% [20/20 01:36<00:00]\n", - "
\n", - " " + "cell_type": "code", + "source": [ + "def generate_mit_case_1_data(n_points):\n", + " exp_pt = MIT_case1(noise_level=1)\n", + " rs = np.random.RandomState(100)\n", + " lhs = LHS(exp_pt.domain, random_state=rs)\n", + " conditions = lhs.suggest_experiments(n_points)\n", + " exp_pt.run_experiments(conditions)\n", + " pt_data = exp_pt.data\n", + " pt_data['task', 'METADATA'] = 0\n", + " return pt_data\n", + "\n", + "n_aux = [5, 10, 50]\n", + "aux_datasets = [generate_mit_case_1_data(n) for n in n_aux]" ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "outputs": [], + "execution_count": null, + "metadata": {} }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", - " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n" - ] - } - ], - "source": [ - "#Multi-Task Bayesian Optimization\n", - "pt_data = datasets[\"Morpholine\"].copy()\n", - "pt_data[(\"task\", \"METADATA\")] = 0\n", - "pt_data = pt_data.replace(\"≥90%\", 0.9)\n", - "for i in range(N_REPEATS):\n", - " print(f\"Repeat {i}\") \n", - " exp_amine.reset()\n", - " result = run_mtbo(exp_amine, pt_data, max_iterations=MAX_ITERATIONS)\n", - " result.save(f\"data/cross_coupling_similar/mtbo_pre-train_repeat_{i}.json\")\n", - " clear_output(wait=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "scrolled": true - }, - "outputs": [ + "cell_type": "markdown", + "source": [ + "### Same Mechanism" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#Single-Task Bayesian Optimization\n", + "for i in range(N_REPEATS):\n", + " print(f\"Repeat {i}\")\n", + " exp = MIT_case2(noise_level=1)\n", + " result = run_stbo(exp, max_iterations=MAX_ITERATIONS)\n", + " result.save(f\"data/kinetics_similar/stbo_case1-2_noise_repeat_{i}.json\")\n", + " clear_output(wait=True)" + ], + "outputs": [], + "execution_count": null, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#Multi-Task Bayesian Optimization\n", + "for n, dataset in zip(n_aux, aux_datasets):\n", + " for i in range(N_REPEATS):\n", + " print(f\"Repeat {i}\")\n", + " exp = MIT_case2(noise_level=1)\n", + " result = run_mtbo(exp, dataset, max_iterations=MAX_ITERATIONS)\n", + " result.save(f\"data/kinetics_similar/mtbo_case1-2_noise_{n}-pre-train_repeat_{i}.json\")\n", + " clear_output(wait=True)" + ], + "outputs": [], + "execution_count": null, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Finally, we can make a plot for the paper." + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "stbo_results = [summit.Runner.load(f\"data/kinetics_similar/stbo_case1-2_noise_repeat_{i}.json\") for i in range(10)]\n", + "mtbo_results_lists = [[summit.Runner.load(f\"data/kinetics_similar/mtbo_case1-2_noise_{n}-pre-train_repeat_{i}.json\") \n", + " for i in range(10)]\n", + " for n in n_aux]\n", + "fig, ax = make_comparison_plot(\n", + " dict(results=stbo_results, label=\"STBO\"),\n", + "# dict(results=mtbo_results_lists[0],label=\"MTBO, n=5\"),\n", + " dict(results=mtbo_results_lists[1],label=\"MTBO, n=10\"),\n", + " dict(results=mtbo_results_lists[2],label=\"MTBO, n=50\")\n", + ")\n", + "fig.savefig(\"figures/stbo_mtbo_kinetics_case1-2_noise_comparison.png\", bbox_inches='tight', dpi=300)" + ], + "outputs": [], + "execution_count": null, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Different Mechanisms" + ], + "metadata": {} + }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n", - "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", - " warnings.warn(msg, UndefinedMetricWarning)\n" - ] + "cell_type": "markdown", + "source": [ + "This adds an extra wrinkle because there is a competing reaction which consumes B (see Case 3 from figure above)." + ], + "metadata": {} }, { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" + "cell_type": "code", + "source": [ + "#Single-Task Bayesian Optimization\n", + "for i in range(N_REPEATS):\n", + " print(f\"Repeat {i}\")\n", + " exp = MIT_case3(noise_level=1)\n", + " result = run_stbo(exp, max_iterations=MAX_ITERATIONS)\n", + " result.save(f\"data/kinetics_different/stbo_case1-3_noise_repeat_{i}.json\")\n", + " clear_output(wait=True)" + ], + "outputs": [], + "execution_count": null, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#Multi-Task Bayesian Optimization\n", + "for n, dataset in zip(n_aux, aux_datasets):\n", + " for i in range(N_REPEATS):\n", + " print(f\"Repeat {i}\")\n", + " exp = MIT_case3(noise_level=1)\n", + " result = run_mtbo(exp, dataset, max_iterations=MAX_ITERATIONS)\n", + " result.save(f\"data/kinetics_different/mtbo_case1-3_noise_{n}-pre-train_repeat_{i}.json\")\n", + " clear_output(wait=True)" + ], + "outputs": [], + "execution_count": null, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "stbo_results = [summit.Runner.load(f\"data/kinetics_different/stbo_case1-3_noise_repeat_{i}.json\") \n", + " for i in range(10)]\n", + "mtbo_results_lists = [[summit.Runner.load(f\"data/kinetics_similar/mtbo_case1-2_noise_{n}-pre-train_repeat_{i}.json\") \n", + " for i in range(10)]\n", + " for n in [10,50]]\n", + "fig, ax = make_comparison_plot(\n", + " dict(results=stbo_results, label=\"STBO\"),\n", + " dict(results=mtbo_results_lists[0],label=\"MTBO, n=10\"),\n", + " dict(results=mtbo_results_lists[1],label=\"MTBO, n=50\")\n", + ")\n", + "fig.savefig(\"figures/stbo_mtbo_kinetics_case1-3_noise_comparison.png\", bbox_inches='tight', dpi=300)" + ], + "outputs": [], + "execution_count": null, + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## C-N Cross Couplings" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "First we need to get the data from the Baumgartner paper and do some manipulation to get it in the form we want" + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "b_df = pd.read_excel(\"data/baumgartner_data.xlsx\", sheet_name=\"Reaction data\")\n", + "# Just the columns we want\n", + "b_df = b_df[[\n", + " \"Optimization\", \n", + " \"Base\",\n", + " \"Base equivalents\",\n", + " \"Temperature (degC)\",\n", + " \"Residence Time Actual (s)\",\n", + " \"Reaction Yield\"\n", + "]]\n", + "# Rename columns\n", + "columns = {\"Optimization\": \"catalyst\", \n", + " \"Base\": \"base\",\n", + " \"Base equivalents\": \"base_equivalents\",\n", + " \"Temperature (degC)\": \"temperature\",\n", + " \"Residence Time Actual (s)\": \"t_res\",\n", + " \"Reaction Yield\": \"yield\"\n", + "}\n", + "b_df = b_df.rename(columns=columns)\n", + "\n", + "# Drop preliminary reactions\n", + "b_df = b_df.iloc[:363,:] \n", + "#Split catalyst column into nucleophile and catlyst\n", + "new = b_df[\"catalyst\"].str.split(\" - \", n=1, expand=True)\n", + "# Create new columns\n", + "b_df[\"nucleophile\"] = new[0]\n", + "b_df[\"catalyst\"] = new[1]\n", + "# Create a dtaset for each nucleophile\n", + "nucleophiles = pd.unique(b_df[\"nucleophile\"])\n", + "dfs = {nucleophile: b_df[b_df[\"nucleophile\"]==nucleophile]\n", + " for nucleophile in nucleophiles}\n", + "datasets = {nucleophile: DataSet.from_df(dfs[nucleophile], metadata_columns=\"nucleophile\")\n", + " for nucleophile in nucleophiles}" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/ipykernel_launcher.py:1: FutureWarning: Your version of xlrd is 1.2.0. In xlrd >= 2.0, only the xls format is supported. As a result, the openpyxl engine will be used if it is installed and the engine argument is not specified. Install openpyxl instead.\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + } + ], + "execution_count": 5, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "fig, axes = plt.subplots(1,2, figsize=(10,5))\n", + "fig.subplots_adjust(wspace=0.2)\n", + "# Counts of different catalysts grouped by nucleophile\n", + "(b_df.\n", + " groupby(\"nucleophile\").\n", + " catalyst.\n", + " value_counts().\n", + " unstack(0).\n", + " plot.bar(ax=axes[0])\n", + ")\n", + "# Counts of different bases grouped by nucleophile\n", + "(b_df.\n", + " groupby(\"nucleophile\").\n", + " base.\n", + " value_counts().\n", + " unstack(0).\n", + " plot.bar(ax=axes[1])\n", + ")\n", + "for ax in axes:\n", + " ax.set_ylabel(\"Counts\")\n", + "fig.tight_layout()\n", + "fig.savefig(\"figures/baumgartner_catalyst_base_distribution.png\", dpi=300)" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": [ + "iVBORw0KGgoAAAANSUhEUgAAAsgAAAFgCAYAAACmDI9oAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA/WUlEQVR4nO3deXhU5fn/8fdNWBUEROpPSxFwYzExSEBwRVoRlVosUrciiKhtsW5Vi99+LdjaqrV2EVstWgU3XKBuaCuiIgVRJBLZQsUlfItSZBEVBEvg/v1xJvEQJslMkpkzM/m8risXc5Y5554zhzP3PHOf5zF3R0REREREAk2iDkBEREREJJMoQRYRERERCVGCLCIiIiISogRZRERERCRECbKIiIiISEjTqANIxH777eddunSJOgwRkQZTXFy8wd07Rh1HMnQtFpFcU921OCsS5C5durBo0aKowxARaTBmtjrqGJKla7GI5JrqrsUqsRARERERCVGCLCIiIiISogRZRERERCQkK2qQ49mxYwdr1qxh+/btUYciDaBly5Z06tSJZs2aRR2KiIg0csoxck+yeUbWJshr1qyhTZs2dOnSBTOLOhypB3dn48aNrFmzhq5du0YdjoiINHLKMXJLXfKMrC2x2L59Ox06dNCJmwPMjA4dOuibuoiIZATlGLmlLnlG1ibIgE7cHKL3UkREMok+l3JLsu9nVifIIiIiIiINTQlyhAYOHNjgne6PHj2a6dOn7zH/o48+4qyzzgJgzpw5DB06tEH3KyIiIplDOUb9KEFuJA488MC4J7WIiIhIfeRijqEEuQ7Kysro0aMHF198Mb169WLw4MFs27Ztt29rGzZsoEuXLgDs3LmTa665hiOOOIKCggImTZq0xzZnzZrFgAEDOOqooxgxYgRbtmwB4KWXXqJ3797k5+czZswYvvzySyAY8vW6664jPz+ffv368e6771Zua+7cuRxzzDF069at8oQtKyvjiCOO2GO/W7duZcyYMfTr14/evXvz9NNPN+ixEklWl/HPJfQnmU/vn0jylGNkBiXIdbRq1SrGjRvH8uXLadeuHTNmzKh23cmTJ1NWVkZJSQlLlizh/PPP3235hg0buOmmm5g9ezZvvfUWRUVF/O53v2P79u2MHj2axx57jKVLl1JeXs5dd91V+by2bduydOlSLrvsMq688srK+WvX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IddzjNxJkCPQqlUrSkpKAHjhhRe4/vrrefXVV6MNKuTee++NOgQRERGpA+UY0VINcgP57LPPaN++feX0bbfdRt++fSkoKGDChAkAlJWV0aNHDy6++GJ69erF4MGD2bZtGx999BGFhYWVf3l5eaxevZpnn32Wo48+mt69e/Otb32LdevWATBx4kRGjRrF8ccfz0EHHcTf/vY3rrvuOvLz8xkyZAg7duwAYODAgVR06n///fdz2GGH0a9fP+bPn18Z5/r16xk+fDh9+/alb9++uy0TERGR6GV7jnHe6YM47/RBLH7z9XQdsnpTglwP27Zto7CwkO7duzN27FhuuOEGAGbNmsWqVatYuHAhJSUlFBcXM3fuXABWrVrFuHHjWL58Oe3atWPGjBkceOCBlJSUUFJSwsUXX8zw4cM56KCDOO6443j99ddZvHgx55xzDr/5zW8q9/3ee+/x8ssv88wzz/D973+fk046iaVLl9KqVSuee2732te1a9cyYcIE5s+fz7x581ixYkXlsiuuuIKrrrqKN998kxkzZjB27Ng0HDkRERGpSS7lGI889zK3T57KjdddkYYj1zBUYlEP4Z8/FixYwAUXXMCyZcuYNWsWs2bNonfv3gBs2bKFVatW0blzZ7p27UphYSEAffr0oaysrHJ78+fP55577mHevHkArFmzhrPPPpu1a9fy3//+l65du1aue+qpp9KsWTPy8/PZuXMnQ4YMASA/P3+3bQK88cYbDBw4kI4dOwJw9tln88477wAwe/bs3U7mzz77jC1bttC6desGO04iIiKSnFzKMbbv2BnE+vnnfLF1C3vtnfk5hhLkBjJgwAA2bNjA+vXrcXeuv/56Lr300t3WKSsro0WLFpXTeXl5bNu2DQi+gV100UU888wzlcnpj3/8Y66++mrOOOMM5syZw8SJEyufW7GdJk2a0KxZM8yscrq8vDzhuHft2sXrr79Oy5Yt6/S6RUREJLWyPcd4Z8P2Or3uKKnEooGsXLmSnTt30qFDB0455RTuu+8+tmzZAsCHH37Ixx9/XO1zd+zYwYgRI7j11ls57LDDKud/+umnfP3rXwdg6tSpdY7t6KOP5tVXX2Xjxo3s2LGDJ554onLZ4MGDmTRpUuV0xbdVERERyQy5kmOsXL60zvtJt9xpQY6gv9OK+iAAd2fq1Knk5eUxePBgSktLGTBg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\n" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ], + "execution_count": 14, + "metadata": { + "collapsed": false, + "inputHidden": false, + "jupyter": { + "outputs_hidden": false + }, + "outputHidden": false + } + }, + { + "cell_type": "code", + "source": [ + "fig, axes = plt.subplots(1,2, figsize=(10,5))\n", + "fig.subplots_adjust(wspace=0.2)\n", + "# Counts of different catalysts grouped by nucleophile\n", + "(b_df.replace(\"≥90%\", 0.9).\n", + " groupby([\"nucleophile\", \"catalyst\"])\n", + " [\"yield\"].\n", + " mean().\n", + " unstack(0).\n", + " plot.bar(ax=axes[0])\n", + ")\n", + "# Counts of different bases grouped by nucleophile\n", + "(b_df.replace(\"≥90%\", 0.9).\n", + " groupby([\"nucleophile\", \"base\"])\n", + " [\"yield\"].\n", + " mean().\n", + " unstack(0).\n", + " plot.bar(ax=axes[1])\n", + ")\n", + "for ax in axes:\n", + " ax.set_ylabel(\"average yield\")\n", + "fig.tight_layout()\n", + "fig.savefig(\"figures/baumgartner_catalyst_base_yields.png\", dpi=300)" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": [ + "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eOKJzJw5sy4pfv/73+ess85i/PjxPP7440yZMqXuvl26pM7TqVMnNtmkM5LqttfV1GQd9/r163n66afp1q1bq563mVmhyHcerj1Pp06d6Nx5wzxc00HysIdY5FnVgIFZ/ZgViiVLlrBu3Tq22morDjroIG666SZWr14NwOuvv87bb7/d6H3Xrl3LhAkTuOyyy9h5553r9r///vtst912AEydOrXVse2xxx78/e9/Z+XKlaxdu5a777677tiYMWO46qqr6rZre2LMzIqN83D+uQfZrNBlMR1Qe6sd+wYQEUydOpWysjLGjBlDVVUVo0aNAqB79+7ceuutlJWVNXieJ598ksrKSi666KK6C0keeOABpkyZwoQJE9hyyy3Zf//9eeWVV1oV5zbbbMOUKVMYNWoUPXv2rIsZ4Morr+TUU09lyJAh1NTUsN9++3Hddde16nHMrINzHm5UqeZhRUTSMbRIRUVF1F412VZ9J9/ffCOg+tJD2uXxgKx7hwcuqWq3x7RkZfM+y3yPVVVVMXBgx/0WYf7yVVm1G1JE07w19DuVNDciKhIKqc1amoub+jtozxxbjBr7XPDnQHI6eh4uVS3JxR5iYWZmZmaWwQWymZmZmVkGF8hmZmZmZhlcIJuZlTBJYyW9KGmZpMkNHP+NpHnpn39KWpVAmGZmBcWzWJiZlShJZcA1wIHAcmCOpJkRUTdzf0ScmdH++8CwvAdqZlZg3INsZla6RgLLIuLliPgUuAM4tIn2RwLT8hKZmVkBcw+yWYErn1rerudbcNyCZttI4qijjuLWW28FoKamhm222YY99tiD++67r80xVFdXM27cOBYuXJj1fS4483vsd8BBHHjIoUw553QuuWAygwYNanMsJW474LWM7eXAHg01lLQD0A/4W2Mnk3QycDJAnz592i9KswLnPJxy/PHHM27cOI444ggmTZrEWWedVbJ52AWymW1ks802Y+HChaxZs4ZNN92Uhx9+uG7FpWzV1NSwySa5STFTrriSQUU0D3KRmAhMj4h1jTWIiOuB6yE1D3K+AjPriAo9D9944405OW+h8BALM2vQV7/6Ve6/P7W4w7Rp0zjyyCPrjr377rscdthhDBkyhD333JP58+cDMGXKFI455hj23ntvjjnmGG655RYOPfRQRo8eTf/+/fnJT35Sd45169Zx0kknMXjwYMaMGcOaNWsAWLJoAUePP5AjDtybH0w6mg9WrdoothMnjKN2kYru3bvz4x//mN12240999yTt956C4AVK1Zw+OGHM2LECEaMGMHs2bNz8joVuNeB7TO2e6f3NWQiHl5hVlCSysPz5s1jzz33ZMiQIXz961/nvffe2yi20aNHl3QedoFsZg2aOHEid9xxBx9//DHz589njz0++2b+oosuYtiwYcyfP5+f//znHHvssXXHFi9ezCOPPMK0aala69lnn2XGjBnMnz+fu+++uy6hLl26lFNPPZVFixbRs2dPZsyYAcD5P/gOPzhvCtMfnk3/AYO47reXNRnnhx9+yJ577skLL7zAfvvtxw033ADAGWecwZlnnsmcOXOYMWMGkyZNatfXp0jMAfpL6iepC6kieGb9RpIGAFsCT+U5PjNrQlJ5+Nhjj+Wyyy5j/vz5lJeXb1BUN6QU87CHWJhZg4YMGUJ1dTXTpk3jq1/96gbHZs2aVZdI999/f1auXMkHH3wAwPjx49l0003r2h544IFstdVWAHzjG99g1qxZHHbYYfTr14+hQ4cCMHz4cKqrq3n//ff59wfvUzFq79S5jjiSs797fJNxdunShXHjxtWd5+GHHwbgkUceYfHiuska+OCDD1i9ejXdu3dv5StSfCKiRtJpwINAGXBTRCySdDFQGRG1xfJE4I6I8LAJswKSVB5etWoVX/rSlwA47rjjmDBhQpNxlmIedoFsZo0aP348Z599No8//jgrV67M6j6bbbbZBtuSGtzu2rVr3b6ysrK6r/ZaqnPnznXnLCsro6amBoD169fz9NNP061bt1adt1RExAPAA/X2XVhve0o+YzKz7DkPJ8NDLMysUSeccAIXXXQR5eUbXsG97777cttttwHw+OOPs/XWW7PFFls0eI6HH36Yd999lzVr1nDPPfew9957N/p4PXr0YIsePXnumScBuO9/7qRij8bbN2XMmDFcddVVddvz5s1r1XnMzJKURB7ecsst+cc//gHAn/70p7re5JYq5jzsHmSzApfNdEC50rt3b04//fSN9k+ZMoUTTjiBIUOG8LnPfY6pU6c2eo6RI0dy+OGHs3z5co4++mgqKiqorq5utP1Pf3Mtl5x3Fh+v+Yjeffpy8a+uaVXsV155JaeeeipDhgyhpqaG/fbbj+uuu65V5zKzjq2j5eGpU6fyne98h48++ogdd9yRm2++uVWxF3MeVrENOauoqIjaweVt1Xfy/Vm1q770kHZ5PICqAQOzajdwSVW7PaYlK5v3WeZ7rKqqioEDs3ufFLpbbrmFyspKrr766qzvM3/5qqzaDSmiad4a+p1KmhsRFQmF1GYtzcVN/R20Z44tRo19LvhzIDkdPQ+XqpbkYg+xMDMzMzPLkNMCWdJYSS9KWiZpcgPHj5e0QtK89E/xzP9hZs06/vjj3WthZpYg5+HWydkYZEllwDXAgaSWN50jaWZELK7X9M6IOC1XcZiZmZmZtUQue5BHAssi4uWI+BS4Azg0h49nZmZmZtZmuSyQtwNey9hent5X3+GS5kuaLmn7Bo4j6WRJlZIqV6xYkYtYzczMzMyA5C/SuxfoGxFDgIeBBucoiYjrI6IiIip69eqV1wDNzMzMrGPJ5TzIrwOZPcK90/vqRETmkjA3ApfnMB6zopTt1IDZymbqqLKyMsrLy6mpqWHgwIFMnTqVt99+m3HjxrFw4cJ2jSfTqlWruHPqjXzzuNT1unOemsXU31/F1bfcmfU5+vbtS2VlJVtvvXWbYqmsrOSPf/wjV155ZZvOY2bFr6Pl4dtvv53vfe97QGoRkl/+8pfcd999WZ+jFPJwLnuQ5wD9JfWT1AWYCMzMbCBpm4zN8YAnfTQrAJtuuinz5s1j4cKFdOnSJW8Tu69atYo7//iHvDxWcyoqKlwcm1likszD//3f/52Xx2pOknk4ZwVyRNQApwEPkip874qIRZIuljQ+3ex0SYskvQCcDhyfq3jMrHX23Xdfli1bBsC6des46aSTGDx4MGPGjGHNmjUAvPTSS4wdO5bhw4ez7777smTJEiA1vdDpp5/OXnvtxY477sj06dPrznvFFVcwYsQIhgwZwkUXXQTA5MmTWf5qNf950L78+pILAFjz4Yf88JTjOHT0SM77/klEBM/MfoLDDjus7lwPP/wwX//61zeK/bDDDmP48OEMHjyY66+/vm5/9+7dOeeccxg8eDAHHHAAzz77LKNHj2bHHXdk5szU/+Mff/xxxo0bB3y2YlVtm8yEfeuttzJy5EiGDh3KKaecwrp169r8mpvlU9/J9zf4Y4Uj33n4pZdeYujQoZxzzjkArF69miOOOIIBAwZw1FFHERH87W9/K+k8nNMxyBHxQETsHBE7RcTP0vsujIiZ6dvnRcTgiNgtIr4cEUtyGY+ZtUxNTQ1/+ctfKC8vB2Dp0qWceuqpLFq0iJ49ezJjxgwATj75ZK666irmzp3LL3/5y7qv5gDefPNNZs2axX333cfkyanp0B966CGWLl3Ks88+y7x585g7dy5PPPEEl156Kb136MtdD/6Ds87/KQBLFs3n3Ck/589/e5rl/3qV5+c8zci9Usm/9qLdm2++mRNOOGGj+G+66Sbmzp1LZWUlV155JStXpkZ1ffjhh+y///4sWrSIzTffnPPPP5+HH36YP//5z1x44YUNvhZLlizhwQcf5Nlnn+UnP/kJa9eupaqqijvvvJPZs2czb948ysrKuO2229rp1TczSyYP77TTTsybN48rrrgCgOeff57f/va3LF68mJdffpnZs2fz5S9/uaTzcC7HIJtZkVqzZg1Dhw4FUj0XJ554Im+88Qb9+vWr2z98+HCqq6tZvXo1Tz75JBMmTKi7/yeffFJ3+7DDDqNTp04MGjSIt956C0gl5oceeohhw4YBqd6JpUuX0qdPn41i2XXocP5jm9QEOLsM2pU3lv+L3UeO4phjjuHWW2/l29/+Nk899RR//OMfN7rvlVdeyZ///GcAXnvtNZYuXcpWW21Fly5dGDt2LADl5eV07dqVzp07U15eTnV1dYOvySGHHELXrl3p2rUrX/jCF3jrrbd49NFHmTt3LiNGjKh73b7whS9k+zKbmTWqkPLwyJEj6d27NwBDhw6lurqaffbZp6TzsAtksw5mTfrijk133bXRNrVj3+rr2rVr3e2ysjLWrFnD+vXr6dmzZ4Pt698nIur+Pe+88zjllFM2aNtQUuzcpUvd7U5lZayrSX119u1vf5uvfe1rdOvWjQkTJrDJJhums8cff5xHHnmEp556is997nOMHj2ajz/+OHXOzp2RlDpnp051MXbq1Imamppmn0dZWRk1NTVEBMcddxy/+MUvGryPmVlrFVIebij/QWnn4aSneTOzIrfFFlvQr18/7r77biCVdF944YUm73PQQQdx0003sXr1agBef/113n77bTbffHM++nB1Vo+77bbbsu2223LJJZfw7W9/e6Pj77//PltuuSWf+9znWLJkCU8//XQLn1nzvvKVrzB9+nTefvttAN59911effXVdn8cM7OmtHce/ve//53V45ZyHnYPslmBy2Y6oExrcjj9T2Nuu+02vvvd73LJJZew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\n" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ], + "execution_count": 13, + "metadata": { + "collapsed": false, + "inputHidden": false, + "jupyter": { + "outputs_hidden": false + }, + "outputHidden": false + } + }, + { + "cell_type": "markdown", + "source": [ + "### Differing Substrates" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Optimize aniline case with auxiliary data from benzamide case." + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#Single-Task Bayesian Optimization\n", + "for i in range(N_REPEATS):\n", + " print(f\"Repeat {i}\")\n", + " exp = get_pretrained_baumgartner_cc_emulator()\n", + " result = run_stbo(exp, max_iterations=MAX_ITERATIONS)\n", + " result.save(f\"data/cross_coupling_different/stbo_cn_noise_repeat_{i}.json\")\n", + " clear_output(wait=True)" + ], + "outputs": [], + "execution_count": null, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#Multi-Task Bayesian Optimization\n", + "pt_data = datasets[\"Benzamide\"]\n", + "pt_data[\"task\", \"METADATA\"] = 0\n", + "# Drop base=MTBD because not in other dataset\n", + "pt_data = pt_data[pt_data[\"base\"] != \"MTBD\"]\n", + "# Clean data\n", + "pt_data = pt_data.replace(\"≥90%\", 0.9)\n", + "for i in range(N_REPEATS):\n", + " print(f\"Repeat {i}\")\n", + " exp = get_pretrained_baumgartner_cc_emulator()\n", + " result = run_mtbo(exp, pt_data, max_iterations=MAX_ITERATIONS)\n", + " result.save(f\"data/cross_coupling_different/mtbo_cn_repeat_{i}.json\")\n", + " clear_output(wait=True)" + ], + "outputs": [], + "execution_count": null, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "stbo_results = [summit.Runner.load(f\"data/cross_coupling_different/stbo_cn_noise_repeat_{i}.json\") \n", + " for i in range(10)]\n", + "mtbo_results = [summit.Runner.load(f\"data/cross_coupling_different/mtbo_cn_repeat_{i}.json\") \n", + " for i in range(10)]\n", + "fig, ax = make_comparison_plot(\n", + " dict(results=stbo_results, label=\"STBO\"),\n", + " dict(results=mtbo_results,label=\"MTBO, n=43\"),\n", + ")\n", + "fig.savefig(\"figures/stbo_mtbo_cn_different.png\", bbox_inches='tight', dpi=300)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": [ + "iVBORw0KGgoAAAANSUhEUgAAAYEAAAEGCAYAAACD7ClEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABIeElEQVR4nO29eZxcZZXw/z331tZVvSXd2RcSIIGwB4EEkEVABEcBdzaFeUVEB9DRd3zFcRBnRl8dh/mNis7oKIgbjMrAMAoCwgvIEvawJSwhCdmXTnrvru3e8/vj3qqu3qt6qfX5fj71qbs8997T1VXnPM85z3OOqCoGg8FgqE2sUgtgMBgMhtJhjIDBYDDUMMYIGAwGQw1jjIDBYDDUMMYIGAwGQw1jjIDBYDDUMIFSC1Aora2tumTJklKLYTAYDBXDc88916aqs0Y6V3FGYMmSJTz77LOlFsNgMBgqBhF5e7Rzxh1kMBgMNYwxAgaDwVDDGCNgMBgMNYwxAgaDwVDDGCNgMBgMNYwxAgaDwVDDGCNgMBgMNYwxAoaJ4zrey2AwVCwVt1jMUEJcF5wEpBPgJAcMgBWAQHjgVVR5kuCmwAqCHQLL9GsMhkIwRsAwOhkl6yQgnQQ3PUq7NCTTkOwFEU8ZByKeQbDsKZbHN0CjyWMFIBDyZLBDU/t8g6EKMUbAMIDqQC/fSYKTmvg90glv3w56xsAOe8q5EPJR+sOu8Q0Sfd6+ZQ8YhKk2SgZDFWCMQClI9nnKbRAyvJ2McCy3rYi3nWkn1sD5QeeGvGfaqw4o/LT/PtU4Kd+Y9HjyBfxRgh0e7rpxncHy5KP0x8N1wO2HVL+3b9meYbJDngy2+QlUG8m0SzztkEy7gPdrEREsAUGyPwNLxD/nbeNvC35bGXivZswvoNjEOz0jUGpyDUGxUBdSce8Ffu885Cv/1NQo/fHIBLMzMojlGYVQfeEjFUPZkHJc4imHeMrFHfE7PbHvuW0JjZEgoUD1xpqMESgWqtDfPuAmKTXFVP6j4UzT6KMQ1B1wgdXNKG5ge5pR/3+c+Vfr0OPZ/cx5b0MQApZgWeXdA047LvG0p/wdd3q+z46rtPcliYZs6sOBqhwVGCNQDFwH+vYXp6drmBgZI11GhsB1FVcVV8n2bnP31fUUd2bfVQWdaJ93OJYIQVuwLSFoW9iWZxxKqQiLofhHoi/pkEi7VTkqMEZgukknPeWibqklMYxHxhBEmiEYmZJb5ipyRVEdUOSa8z70eBmM03BVSaQzknjTgQWwLCFoWQSGGIjpwnHVd/U4pIuo+EeSo70vSV3IpqGKRgXGCEwnyT5IdJWH66VMcVRRVWxLvKBdqVGFeAfQPMgQqA7ucWeUtuMOV+jlpMinGsVTho7rQM7AVgQCvmEIWJINtOaez27n/J8HHx9M0nGJp1xSTnl1oPqTDomUS2NdgHCg8mebGSMwXcS7vHnzZYiiJNIuqlAXLM2XWFH6kg79SSerLC3xepa2RdYnHbAs7GnocWXcKI47WKln3Cxu3x6ccBOuHalahT6VqHrB2VSNLCB3VenoSxEJujRGKntUYIzAVFNuAWCfjOJPplySrpsdnPSnHGJhm7BdPGOQcBx6E8N9uq4qrqPDFEnGBREQwbYzhsL3Tw/pPyoDvXPXH2UM7A/uyY9LXwdupMmb0mowjEA85U1FreRRgTECU4nreAZgIouspoFBit9xR+zNOq7S1Z8mZLvURwLT0uvO4KrSE0+TKHB4n3VBoBnXdBYRsC3Lc8O4U91jV6x4B264CYJ1U3pnQ/WQOypoCAfKflbVUIwRmCqclGcASpxQLaP4E74vNV+lmHRc2nuTRIIWsXBgyv3z/SmH3mR6ysMjqt6MkenESnTigjEEhjHJjAoaIgEiJXKzTgRjBKaCVNwLJpYoAOzN4nBJpgtT/ENRoD/lkkiniIbsKYkXpFyXnoQz7Yp6ujGGwJAPriqd/SkSKc8YVMKowBiBCaC5yj7RjUxDAHgkx0buYxVveXwi7ZKehOIfCVeVnkSaeNolFrIJ2YXPi1aU3kSa/lRlK/9cPEOgEIyWWhRDmRNPOyR6HRojQcIBq6wDx8YIFEDacemOp0k6LqgiiU4kHR/zmnz+9eU68yTtuHT2u4Rti1gB8YJ42gv8jrx8v7KxEl3+iMAYAsPYqEJn/0B8MJPDyMtPVFg+I1u8abfTMbIwRiAPXFfpSabpT/r+fnWReDuSRwC4GtRgwnFJ9nqLZKIhe9R4gaNK7wQCv5WGMQSGiaD4XgTNPVIYmZlytm8QbMszJNnp1RMwFEUxAiJyM/A+YI+qHjHCeQG+C7wXLwfw5ar6fDFkG4++ZJqeRE5AUxWrr63mVgAr3tL5eMolFraJDJkO159K05twqsLo5YNnCBSCsVKLYqghxpoplyEzyhgwCmPfs1hJMH4GnDPG+XOBZf7rSuDfiiDTmCTSDvt6EnTHB89okVRfzRmAXFxVuuNp2vtTpFyXlOuyvy9JTw0ZgAxWohtS5bkg0FC7KN7vNOV4KbX7kmPPWCzKSEBVHxWRJWM0OR/4uXoR1zUi0iwi81R1ZzHky8Vxle54ikR6BEWvipgfPeDFCzr6atcYZrAS3b5ryIwIDJVJucQEFgBbc/a3+ceGGYG9e/dy3HHHZfevvPJKrrzyykkLoP6MmNw0BsNIx2t6FGAYGWMIJomql2FXHcR1stsF+8xHmogwaDLDKNujtRlWc0NH3h903E/HPcakCB02wSIPWbIFoayBbcS/18jnEGuMwlQDlIsRyJtZs2bx7LPPTuk9+5MOPYn0uLNZzCjAMBpWohsSPYN+dIN+oNkf9NBqb4zQRsdWPHkooQyjKqNhx4fsi4WKBWL7ysRCLQuwvOps2XN5BiHV9ZS76yDqF/bRtKf0a6xjJVPoN83v0x+7VbkYge3Aopz9hf6xaSWZdumOp/JLT5tOIKYegGFMdJByncofe9FRF1GX3FShI6sS8YzDIINhA37v3k1796kxRV9ejP1FLBcjcDdwtYjcDqwCOqczHuC4Xg6beDr/FA9mFGAwjIR6vXkcoDxyZhkKo1hTRG8DTgdaRWQb8DUgCKCq/w7cgzc9dAPeFNG/HP1uk+te9SXT9MTThd3FSSGlLoNoMBjKF3VzXFxpv5a17+4CEPHda5IzYhLA8tyGuccG+fann2LNDrponPMK/FVeN5tEgrbMCKBQM2JGAYaqZZDy8n31Imio3ldG04ske7B6dmH17sbu3T2w3bfXL8fqK0JfQSqZeApARpFm9gcUaCb4mnVF5bwGjjnejD//3dsfoU1GmQ+KaWSUvR/QngZ3l4qV/Rs1EPFewToI1KGBuuy+BnJe/j5Dzo1FubiD8kfVS9g2gfJ/fcnCDQBuetzUEAaD1bmFwP43Rjk7So9uhJ6eOClwkt7I00kgThJxEv5oNIGkE/75hN82t41/3VClro6nsPyArPjncR1klF+EioWGm3DDTWgk896MG25Ew824kSbvfKR5UBsCdQN/V6ovq9htX7lbvbsHtnt2Y6V6JvBplycqAbACqGWDFQDLRjPBc9URDJICLuK6wMAxUb+Up2aOgyRTkOyeFrkrzwgAJLoLNgKuqwNpHwpAUn0FX2OoLcJv/oGGR66v2IkDagVAMsrLBjeNlepD4u1Y8XboLOBedgg33ISk41h5KC21Izj1s3Fjc3Hr5+LE5uDG5uDGZqN2iNxgu6cUM/uZ9AvukH0d1E6tgdlN2VlOGcWcO/NpSJtB7ayg9xlZNojtbwf8z81X+HlOx8z/g1Q/mO6N1MRJIql+JO29SPcP7Kf6kXQ8e05S/ZDZ99vA70d9VGUaATft1e8N5Z+7pT81gRWt6nofqMEwEqrUvXgL9U9/F4Dk/BM8N8rgRqNcO8pBK4jaITQQBjvkbduZ7TBqB8EOD2uTPWaHfKVkD1FcNojfO83ZHtXl46SQRBdWogMr3okkOrHiHdljEu/ESnQi8Q7vPdHptXMSnisHzyA4sbm4sdm+gp+LW+8peSc2B7d+LhpuKprvu6LwjZTjWnQlhZRr42odailuENyA4obJKYvKQI1rvE6vq+CSyXpcbUYAINnj5XbP4wukqvQmC++leaOASp7nZ5g2XIf6J/+JuldvRxF6T/zf9B95aamlmjrsIBptwYm2jJaiZmTScax4J2oH0cgMo+BHIJl22d/v0N6fZn9fmn193nt7n8M+/5i3n6Yj7pDPDPbJULlGwHU8QxBuGLdpf8opvN6LqnEFGUYmHafxoesIb34ItYJ0nfFNkgeeXWqpyoNABLfe1GQGbyLKbWv38cqufk+x+wq+O5F/EFmApohNyJZsSulMmmkrJ/20l0kUBH/bEiwGzr89xjMq1wgAJHu9pfrjpMkbL4HSiKRrO1GcYWQk3kHTfZ8juHstbqiBrrP/ldT848a/0FCBjDxNcyDtw0jpHrz3tKN87f63eeCN9mHX2wIzogFmRoPMjAaYEQ3Q4m/PjAaYGfPP1QVojgYIWJKNe2RXgI+wOnwsZn9+9HOVbQRUvYh5pGnUJvGUgzOB8ZQ1DdXCDJWN1b2dpns+S6BzM05sLp3n/gBn5sGlFmsSZKZfjuKyKVDRFP74kQKytj9vfkjHbtBQfvSUFyOt0tbM9NHxUnbkpu6YhBsrkXb429+/wp/fbCcasvn8WctY0FzHzFiImbEQjXXBbMGYfBjrLx/0P8oGyEd6H53KNgLgBYiDMbBH/lMmNApI9ZtRgGEQgbb1NN57NXZ/G+mZy+g89we4sTmTvOvgnubwXEMjKKhs4jDGaZM5zxj7eZCrSHJn52S2M73TbDt/tk5GkcvQxVA5r2mg1BG8vmSaL/3uJZ7Z3E5jXYDvfmwlh81vnL4HDjJcE7tF5RsBgEQXRGcOP5x2SE2gypVZHGbIJbjtCRof+CJWqo/k/BPoOvtf0NCQWJRYuOFGBivaMZLEVUrAdNBiLHvEJqVWvOVCdzzFF37zIi9t62RmLMRNF63koNlDZ4uVH9VhBNIJSCchEBp0uC8xkViASRRnGCD8xt00PPJ1RNPED34v3af9PdjBYe0yqzQNtUl7b5LP3b6W13d3M6cxzE0XH8vimZVRfrQ6jAB4o4FAa3Y35bheQfgCMaMAAwCqRNf+lNgz3weg7+jL6T3hc6O6MdQYgJplT3eca379Apv39bFwRh0/uPhY5jZVzveheoyAk/J8+UEvT8aERgEmUZwBwE1T//i3qFv/WxSh56QvET/i4lGbq2WPODowVD87Ovq5+tcvsL2jn4Nmxfj+RStpqQ+XWqyCqB4jAF46iUAERykoTXQGMwowkO6n8U//h/CWR1A7RNe7/i/JA88a+5pAZQz7DVPL5rZerr7tBfZ2J1gxr4HvfmwlTdHK6wxUlxFwHUj20qsTsMSuYxLF1TjSv5+m+64luOdl3HAjne/5Lum5x457nXEF1R5v7O7m2tteoL0vxTGLmrnxo0dTH65MdVqZUo+Bm+ghroVPQTOjgNrG6tpK072fJdC5Bad+Hp3n/hBnxoHjXufl6hl51oyhOnl5eyd//Z9r6Y6nWbV0Jv/04aOIBCv3O1B1RqA/mQLtzSudRBaTKK42URe7ayuBPS9Tv+ZGrP79pFsOofOcm3Bjs/O7hRkF1BTPbt7P//7tS/SnHE5fPot/uOAIQoHpr7swnVSVEVCU/pSDaB8ajObdQzOJ4moA18Hu2kJg7zoCbesItL1GoO21QfnskwtW0/XuG0fIBDoa4uXPN9QEj29o47r/eplE2uWcI+byd+9bQWCclDXFQgDbEmxLsCzBFsnu2+OsSakqIxDPJopTJNmNRprHv8gkiqs+3DR2xyZf0a8j2LaeQNtrfl71wTjRWaRbV5Cadxz9R1xc0CwfDYQrZ9GXYVI8uH431//3q6Rd5YMrF/A35xxSUOqHySJ4SeECoyh5y5q4LFVlBPpTA+sCJB1HndT4P2qTKK40pOMEdz5HaMczkI57qYutkPduB8EK+bnzQ6gV9M8HB/LnW147tYKIutj73yC4dx2Bfa8RaHsdcYYH+Z3YXNKtK0jPWuEp/tbD0GjrCMLlh3EF1Qa/f2kH3/jDelyFS1Yt5pozDkam0QAIELAtgrYQtC2CtoU9CSU/HlVjBOLp4YniJNmN1g1PJzGojRkFFAdV7PYNhLY9QWjrEwR3PT+tazKchvmkW1aQnnUYqdYVpFsPRetapu4BYpkVwjXAb5/dyj/f75UN/dQpS/nkO5dOuQEQgZCv7IO+8p9OIzOUqjECIyWKEyeJpuOj/1jTca/eqmFakHgHoe1rCG59gtD2J7F79ww6n2o9jNTCE3GjLeCk/fq4Sb92bgpx/Xq7mXcnBa63oG/gXBrUJd281Ovltx7mKfx8XIGTwIwCyhNV5a29vfz5zb28vL0Td7xB/hi6NpV2efZtLxX0589axkUnLJ4SGQOWEAxYhGyLgCUE7NLGFarCCCSc0dNFS7J71B9sTU8LTfVh9bWh4UYvGdpUTHN00wT2vJzt7Qf2vjqokLlT10pq4YkkF51EcsHqcUdp5YyagHDZkHZc1m7t4NE32/jzm3vZ0TF1630E+PK5h3LBygUTvj5oWwQDXg8/ZFtF7eXnQ1UYgf7k6OZeXAdN9UFwyKrOTM+yBpB4p+8rf81/X4/d+bZfkBsUQcMNaLgJN9yEG2lGw43+u3dMI8244Ub/vQmNNKHBeqyenQMunh1PDyourlaQ5NyVJBeeRHLRSTgzl1dFINWkiSg9PYk0a97ax5/fbOPxt9rojg8kfZwRDfLOZa2sWtpCNDS5zs3CGXUc0BKb8PXhgF32q4gr3gikXHfcdNFWsgc3MLgesVRj0RhVrL69BNrWZ5V9oO117J4dw5tKAKd+LpLqwUp0IYkuSHRhszX/x4mN6GB3WrrpAJILTyK16CSS844bbnyrgQodBagqibRLX9KhL5n23/3thLfdm0wjwPzmOhbOqGN+c13ZLITa3RXn0Tf28uc323ju7XbSOaP/JS1RTlk2i1OXt3L4/KZpDaQWQiRUHlNIx6LijUB/Poni1EVSvQPzv9004iSmV7DpRl2srm0E9r1GsO21rOK3+vcPb2pHSLcsJ916KOmWQz3f+YyDIOCn13AdJNmFFe9EEp1Y8Q4k0eW/d2IlOpF4h2csMu+JDqxUH26wntSCE7K9fbdhYsPmSqLUrqBk2qW9L8n+3uTAe2+K/b1JOvqT9CYGlHxvwnvvTzn0JRycgottQ0ssxALfICzIMQ4LmutoqQ9N21RJVeWN3T38+c29PPpGG6/vHhhlWgLHLGrmlGWtnLpsFotbyq+zYVtCOFAeBnQsKtoIOKok8kwXLclebwGZWJU9CnDT1L30C6Iv3oyV6Bp+OtQwWNm3HorTtGRsn79lo5EZOJEZhcniJL2KUTWUNsGbvjr1f2885bC3OzFIsWde7X0pX9En2d+XHOT6KJSQbREN2dSFbGKhANGwTTRkEw0F/Hcbx1V2dMTZ3tHPjo5+9vUm2deb5KVtncPuFw5YzGuKsGCGZxQWNNexYEYd0VCAtOuSdtR7uS5p19tOOZltl5SrOP75VKado/Qm0zy9aT+7uwY6a5GgxeqlLZy6fBYnHdTCjFhomDzlRF2ZjKDGo2hGQETOAb6LV57oJ6r6rSHnFwO3As1+my+r6j1j3bMvWciPQZFkDxqMVWyiOLvtNRoevYFg23rAX+jUcqin9H3F7zYsKJ7f3S7vH+F0UOgoIKPc23oStPUk/fcEbd052z1JehL5f5dtEZqjwWzN2hn++8xoiOZokPqwr9yDvmIPe0o+FrILnoniuEpbT4Lt7f1s6+hnR3s/2zv6swaivS/F5n19bN43PVOtW2IhTlnWyinLZ3H8khkV0bPOYIxADiJiAz8A3g1sA54RkbtVdV1Os68Cv1HVfxORw4B7gCWj3dNVJZEqbJGXpPq8TKOVliIinSD6/I+JvngLog5O/Ty6T/k7UotOLrVkNYYMmm7cHU+xszPOzs44uzrj7OmOT1i5B22htT6cVewzYyFmRHO3gxMuVD4ZbEuY0xhhTmOEYw8YPlLsSaTZ4RuE7R39bPeNRCLlErC96Y8Bf6Vr0La8Y5Y3U8b2p0cG/WPedEm/nSUcNr+RFfMai7oyd6oIB6xJreItJsUaCZwAbFDVjQAicjtwPpBrBBTIVGRuAoZHM3PoTzkTUuWVFgsI7Hqehke+TqBzM4rQd/hF9B1/DRqa+IwFw/ioKu39Dju7U+zqSrKjO8XOHpddvbvY2RFnZ1c/vXnEozLK3XuFvPeGge1Z/rnGukDZTR3Mh/pwgOVzGlg+p4CEjTVAuQTT86FYRmABDJp2sg1YNaTNDcD9InINEANGreSRSRRXzUiyh9jT36Nu3X8CkG5eSvepN5Cee0xpBasy4mmXF3f0sW53P7u6U+zoSrGrO8nO7hSJ9NjdjLqgzdymCHObIsxvijC7IUJrQ3Uod8PEsUSMEZggFwE/U9UbReRE4BcicoTq4MQ+e/ft4x2nnkNmdtjHL7mQT1w6eum/SiS05c/U//kfsXt3oRKgb+X/om/lp2rSBz/VqCob9iVYs6WHp97uYe2OPhLOyMq+IWwxtyHE/MYgcxtDzG2ZwbymOuY2RZjXFKGpLmgUvGEYdZNcm1BsimUEtgOLcvYX+sdy+SRwDoCqPikiEaAVGJRrYFZLC/fdczfuBKa6lTsSb6f+iX8issGLh6dmHU73qTfgtCwvsWRTj6vK/W908usX9hGwhGWtEQ5ujbCsNczBLRHqw1P3Q2rrTfH0ll7WbOnh6a297Osb7Kc/ZFaElQuiLGoKMbchxLzGIPMagoNk0GAUDTcOvbXBMIxKCQhnKJYReAZYJiJL8ZT/hcDQ7vsW4EzgZyKyAogAe4feSFWrzwCoEn7rj9Q/8W2seDtqR+g9/rP0H3EJWOU0WJsa1rzdw/cf380bbQOztF7eNTjN87yGoG8YwlkDsagplNcioHjK5YUdfTy1pYentvSwYd/gONCsWIBVi+tZvbie4xfFmBkd/zM2uYIM+RCa5oyf00FRNIyqpkXkauA+vOmfN6vqqyLy98Czqno38EXgP0Tkr/GCxJerDtf2o4zcKxarZxf1j/0j4S1/BiA5/3i6T/0abuOica6cOLu7Uzy/vZeOuMO7DmpgbkNx3Ezr9/Rz0+O7eXqrt05jdizAlatnM78xyJttCTbsi/Pm3jgb9yfY2Z1iZ3eKRzcNLBAK28KBLQNGYXlrhINawjRGbN5si/PUll6e2uK5eJI5X5RIQDh2QcxX/DGWzgwX5Mbx0kQYV5xhfCrNFQQgI+jZsuaYo4/SB+69u9RiTB51iaz/HbGn/hUr1YsbaqB39ReIH/KBKZ/nv6MryfPb+3h+ey/Pb+tle9dAziRL4KQD6rng8BmcvLSBwDT0YrZ1JPm3Nbu5/w1vcVtD2OLy42bx0aNnEhmhNF/aVbZ2JHmzLc6Gtrj3vi/Bru6Rcz1FAkI8J4grwKGzI5ywyOvtHzWvblIlADVUX0C1MUOtIgKz6gvrYBQLEXlOVY8b6Vz1+RoqALtjM/WPfp3QrucBSCx5Fz0nfyXvurZjoaps68xR+tv7hinPWMjimPlRIgGLRzd289jmHh7b3MOsWID3H9bM+YfPYH7j5Hu++/vS/PTpvdzxyn4cF0K28LGjZ3LZca00RUb/6gUsYenMMEtnhjl7eVP2eFfcYcO+jGFIsKEtzoZ9ceJpZXZ9gNWL61m1uJ7jF8aYkYeLJ1+MK8iQD5GgXZYGYDzMSKCISLyT6NqfUPfKbYibwq1rofvk60guPWvCvX9V5e32ZFbhP7+9l729gwOfjWGbY+ZHOXZBlGMXxljeGsn6Ldv70vzhtQ7ufKWdLR1ekRcBVvujg1OXNhCwC5OtN+nw6xf28cvn99GXchHgL1Y08+nVs6bc9eSq0tHvMKNuen6AagenthiNoWppiYVKXhtgNMYaCRgjUAzSCepevZ3oC/+RTbXcv/x8eld/EY00jXPxAMm0y66eFDs6U7zdkWDt9j6e39HH/iGzXZojNisXRDl2QYxjF8Q4uDU87qpLVeWFHX3c+Uo7D23oyvrUZ0YDnOePDhY2ja3A045y56vt/OSpPezv99ZxvHNJPX910hwObq3M3rQbboCgWZhnGJugbTGzjHMZGSNQKtQlvOFeYs/clE3nnJx/Ar2rv0C6dcWw5o6r7O1Nsb0zxY6uJDu6Br/v7UmPuEq6JRrwevkLYhy7IFpw4HMoHf1p7nmtk7teaWdT+8DMmlWLYnzgiBmcemADwZwej6vKg2928W9P7mFrpzeaOHJuHVefPIdjF1SyAhXc2CyvlKTBMAaNkWBZB4WNEZgiehIOt7+4jw1tCb8ItBCyvbwoIX8/Uz1oac8LnLL1R8zqexOAjtiBvLzss+yftYpAwKK9z2FHV5LtvpLf2ZViV3dqUI70oVgCc+qDzG8MsqApxBFz6zh2QYzFzaHpcYWo8tLOfu58ZT9/erMru6hqRp2djR3s7k7x/cd3s36PN91zcXOIvzppDu86qKEi/aO5qB1G6wrMrGqoOQSY1VCeAeEMxghMkmTa5Xcv7+fmZ9rojI+druIQ2cJ1gds43X4RgJ06kxvTH+G/nFNwGb9H2RINML8xyPzG0MB7k/c+tz5YsH9+quiKO9z7uhc7eGvf8PxLLdEAV66exXmHzZiWGUalwI00m2LyhnGJBG2a6sq7epiZHTRBHFf54+ud/GjNHnb6M2xWzo9yweFe7zDlKkk/P3q4fw8nbv8ZR7Xfj6DErSgPNn+UPzWcR5+GOd1Rkn4e9aSjNEXsrKJf0BRifmOIeQ1BIsHydD00Rmw+dnQLHz1qJq/s6ufOV9u5/41OApZw2TtaufCYFurKVPYJIRbY4VJLYagAKm2F8FCMERgBVeWJt3u46fHd2dWmB7WEufqkOZy8pH7QsE+S3UTX3kLd+l8iTsLL9XP4R+lb+SlOqJvJCaX6I6YJEeHIeVGOnBfl/5w+D0sYFB+oFtQOV0U9ZMP0ErBkUmtQygFjBIbw8s4+vv/4bl7Y4RXJmNsQ5KrVsznnkCF1S50UkfW/Jfb8j7Hi7QDEDzyb3uOvwW1aXArRi064wr/8Y6HByqwjbCgu5RwMzhdjBHw270/wgyd38/Bb3hTOpojNXx7XyoePmjlY2akS2vQA9U9/D7vLy46dmruSntVfID37qFKIbphqxDJpIgzjIkCkgiqdjUbNG4E9PSn+46m93L2uHVchHBAuPqaFT7yjdcRMlg0PfonIxvsBL8d/7wmfJ3nAacZ1UEVosPyKlhvKj3DArpjqYWNRs0agK+5w63Nt/OfafSQcxRb44BEzuOKEWcyqHznSb3dsIrLxfjRQR8/qLxI/9ANVmeWz1jFpIgz5EAlVhzu05jRYIu3ym5f287Nn2ujyywOeeXAjnzlxNgfMGHs2SPit+wDP9x8/7CPTLquh+KgVMIbdMC62JRVV9H4saurb/uLOPr5y71b29HhpFt6xIMo1J8/h8Ll5DP9Vs0YgcdB7plNMQwkxAWFDPlT6tNBcasoI3PjITvb0pFnWGuHqk2Zz4gH1ea/ys9s3EOjYiBtuJrWg2iZ+GrIEjBEwjE8l1RAej5oxAru7U6zfEyccEG7+yNKCF2VlRwFLzwSrvFcHGiaGtzagOvy8hukjHKi86mFjUTPf+EyFqhMX1xe+Kte4gmoCExA25EM1jQKghozAI295Va1OO6jwYuGBfa8R6NqCW9dCat6I6TcMFY+YPEGGcbFEjBGoRLoTDs9u78USL799oYTf+iMAiaVngVVdXwCDhwYiZq2HYVzKNbfXZKi+v2gEntjcg+PCMfOjNNcVGAZRJewvDkscdM40SGcoOWKZBWKGvKimWUEZaiIw/MhG3xV04ARcQXtfxu7egRObTWruMVMsmaHUaCCChhtNQNgwLiHbKtvykZOh6o1AMu3yxOYeAE47sKHg68MbMrOCzjaKopoQCzfcaOIAhryphmRxI1H1RuDZbb30plyWtYZZME6N3GGoS3hTxhVkZgVVCxqMoqEGEwMw5I1I9WbNrXojkJkaOhFXUHDXWuzePTj180nPPnKqRTMUGbVsNNxkMoQaCiYStMu6fORkqGoj4KryyMaMEZiAKygzK+igs02vsaIRNBRDgzHzfzRMiGoMCGeoaiOwbnc/bb1p5tQHOWRWgb5f1yG86U+AmRU0nWioHhBw4oiTmvr720Gv92+SwhkmSNC2qrJ6XoZRfxki8gtg3Cr0qvqJKZVoCskdBRQ6lAvufBarfx/pxsWkWw6dDvFqHMGNNOUEZmOoupBOIE4CSSfI4+s39v3D9RCMTYGshlqmmkcBMPY6gQ3AW/6rE7gAsIFt/nXnAx35PkhEzhGR10Vkg4h8eZQ2HxWRdSLyqoj8esQbuel8H8kjfpWw0w6aiCsoJ02EcSFMLWLh1s0cPjNHLAjWoZFm3Nhs3MgML4hb4AI9tcO40VZjAAyTRqjOBWK5jDoSUNWvZ7ZF5D7gL1T1zznH3gn8XT4PEREb+AHwbjwj8oyI3K2q63LaLAOuA05W1XYRmT3Svay+tnweydvtCTa1J2gIWxw7v0Bl4KYIb3oQMLOCphq1Amhkxvgrr0UgEEYDXo0HddPe6GAst5FYuKEGMOmgDVNEuIoDwhnydZSuBtYMOfYUcGKe158AbFDVjQAicjveSGJdTptPAT9Q1XYAVd0z0o2s+H6s7u24DQvGfOCjvivo5CUNBOwCXUHbn8ZKdJBuPhBnxsEFXWsYHW9hVtPERlZWAA0FGOY2cpKgLhqoQ8MNZi2HYUIIICKIDGxbAtEqXRuQS75G4AXgmyJyvar2i0gd8HVgbZ7XLwC25uxvA1YNabMcQEQex3M73aCqfxx2J1We+PZH+LvnWgH4+CUX8olLLx7W7GF/lfDpE5oVZFxBU42G6v0g8BSQcRsF67yogeuYnE6GLIIfzA1YWAKCr9xzti0RX9lT9T398cjXCFwO/BroFJF2YAbwLDBc+05OlmXA6cBC4FEROVJVOwa1EuF9i/s4+Qs34sxcNuKN9vWleXlnPyFbWH1AgYrHSRLe/BBgXEFTg3grc6fTRWMMQM0TsIRQwPJetlXzir0Q8jICqroZOElEFgPzgJ2quqWA52wHFuXsL/SP5bINeEpVU8AmEXkDzyg8k9vIjcxASBJ75ia63vPdER/2543dKHD8ohixAodzoW1PYCW7Sc9cjtO8tKBrKwqxUCvguVOm8RlupNkszjJMOZYI4aCn8EO2hVVFRV6KzVhTREdyrm7zX9nzqurm8ZxngGUishRP+V/I8FHEXcBFwC0i0ornHto49EZudBYa2E/47YcJ7FpLeoSkbgMJ4ybpCqpC1Ap4GTMDdSCCug6S7kdSfZDXvzLf59hoZKbppRumBBEI23a2t19Nlb1KzVgjgTRjT9QW//y4v3JVTYvI1cB9fvubVfVVEfl74FlVvds/d7aIrAMc4G9Udd+wm1kB+o68lNgL/0Hs6e/S+f6bB/nt+5IOT2/tRYBTlhZoBNJxQm8/DEC8qoyAeEHZYBTsIaUxLXvAX5+OI6m+SY8O1A6hkWYTpC1TcgOflojnH7cy257f3FXFUUVdstuuKjqZpRsFyhi0razSr+bFWqVmLCMwpb4QVb0HuGfIsetzthX4gv8ak/6jL6Nu3W8I7Xqe0NbHSS5+Z/bcmi29JB3lyLl1tMYKqwUc2voYVqqP1KzDcRsXjX9BuSMWGoyhwbr8FHIg4hkLN42k+pF0f8GjAw1GvdTMhqIiArav0C1riIKXAQWfOT9RVBVXPcPgquLmGIlcgwHDg69DA7KW33mzRjhnfPrFY6x1Am8PPea7gOao6s5plWocNNRA38pPUr/mX4g98z2Si07KKrmH/TKSp0+gjGTWFXRgZY8C1A75Lp8Jpkm2Ami4YWB0kO7Pa3TghhvMAq1pwBLBzih2S7Cz+94x25KiKU0RwRawMUq6WsgrMCwizcAPgQ8DKSAmIucBJ6jqV6dPvNHpP+xj1L38KwL7Xif81n0kDj6XtKM87tcOOLXQeECqj/CWRwE/YVzFId6UyWB06vLkiAxMxRxzdCBeANhf2GXIH8FT4rmvTA8+s28wTCf5Otr+HS91xAFApkv4JPCx6RAqLwIR+t5xFQCxZ24CJ8ULO3rpSjgsmRFiyYzCFFJ4y6NIOk5qztG49fOmQ+JpQS0bN9yAG5vtuWGmK1GaPzpwo7Nww01oJrYgFm60xRiAMbBECNkWkaBNLBygqS7IjGiIWfVhZjdGaKkP0xwN0RAJEg0FiARtE/w0FI18NcaZwHxVTYmIAqjq3tFSOxSL+PLzqHvxVgKdm4m8fieP7D0FmFjtgEpzBakdRIP1xVe+Q0YHiFXzAWDBc9MEhvToM24b4982lDP5GoFOoBXIxgL8NQMljQ1gBeg9/hqa/vRFos/9iKdShwJ2wVNDJdlDaOtjKELiwHdPj6xTSHb6ZamVS42lZ84o+6BlYdue0s8ofqPoDZVKvl24nwB3iMi7AEtETgRuxXMTlZTk0jNJzTocu7+N9/b/npZogMPnFrY6NfT2w4iTJDXvWNxYSQc3eSBeAjajdKYNwVuBGgkMuG9aYiFmN0ZorQ/TFA1SH/bcNgGzOtVQ4eTblfs20I+XCTQI3Az8CBh5yW4xEaH3hM/R/IcruSrwP3Qd8KHs1LN8qSRXkDudfv8axbbEU+h+zz5g5qQbaoh800YonsIvvdIfgdSCVTxnH807nBf5hN4F/J+8r5VEF6FtT6BikVh61rTJOBVoMGrSJE8hIduiLmQTqfKiIQbDWIyVNuJUVX3U3z5jtHaq+tB0CFYI2zuT3ND3Ef4n/CLLtt7B/t7LcWNz8ro2vOlBxE2TXLAKjbZMs6QTR60AGio8DYZhMAKEAzbRsG1WoRoMjD0S+KGInOHn9f/pKG0UOHDqxSqMRzd187IeyDN17+T4/seIPvcjek69fvwLgfDGCnAFiWXiAJNExCsTGA0FzNRLgyGHsVYMHyEibSLy16pa1uk0H/FXCe844tPos08Sef0u+o/6BE7zkjGvk/79BLc/jUqAxNIziyDpxPDiANXnssj0ygGSjos7DYlpbEuIhmzqaqBClMEwEcYbD38I+KqI/F5E5hdDoELp6E/zwo4+bAuOPOxw4odcgKhD9NkfjHtteNODiDokF672Ep6VIRqqn3j6hzJF/IpNLf5Mm6ZokFkNYWbVh2mOBomFA4QD1qQGPkHboqkuSGt9mGgoYAyAwTAKYwaGVfURETkKuAF4UUS+zuCSkCWPCTy+uQdX4YSFMRrCNn3HfprIm78nsvF++vdeTnrW4aNem3UFlWnGULVDU1eNqwywxOuVR0Mj98otSwhbNuGcb6XjKinH9V9K2nHHTG0bCdjUhbwVtwaDYXzGnR2kqgkR+QfgMOD/ArmV3kseE3h4SO0At34O/YdfRPSlnxF7+nt0/sWPRrxO+toI7nwOtYIkl7yraPLmjVhlOzoplIAlOb37wnrk3urbwTN40r5BSLkuqbSLo2r8/QbDBBnXCIjImcCPgeeBg0YrAF8K4mmXNW9nEsYNpIroO+Z/EXntDkLb1xDc/hSpBUPLGUN44wOIuiQWn1qGs278hGzTkI4hk7AsYFmIBek8etcTJWRbRMN21u8/VQRsi4ANdeOXsjAYDOMwphEQkZuBc4BrVfV3xREpf57e0ks8rayYHWFuw0DtAI000X/05cSe+T6xp79LxwW/GjazJlLGriA3XD/pkoy5yj5ge6kNgvbISclU1XO1uC6ptE46SBsxUzANhophvJFAEDhCVfcXQ5hCGSgjOTxhXN8RF1P3yq8J7n2V0OYHSeYsBLN6dhPc9QJqh0kuPq1o8uaDBiIF5eTPKnvbyuaxGU3Zj3oPEUIBIYQFvu1xXc8YpByXtOP55ccrMxcJ2cSMS8ZgqCjGCwx/vFiCFIrjKn/e1A3AaQeN4M4JRuk99tM0PP5NYs/cRPKA07PpFsIb7wcgufgUNFQ+RVDUstFw05htApZky+0VquwLwbKEyBBffG6ANuW4OK76M30CRIO2KfZtMFQgFZuE5uVdfbT3OyxoDHLQzJHTKccP/SDRl35OoGMTkTf+h/ihHwAg/NYfvfNl5QoaOTFcrtKfSGB1KskYngyubwTM9EuDoXKpWKftw29lRgGNoyshO0jv8X8FQPS5f4N0AqtrG8G9r6CBOpKLTymWuOOSSQwXtC2iIZumuiCzG8K01IdpiASJlOFiJ8ukUDYYKp6KHAmoKo9s9I3AOLUDEgedQ3rtLQT2v0Hduv8EN+0dP+A0CBSejE0EgpaF68vhyQOKMpFYasC2CIRjhOobCZm0xAaDochUpBHYuD/Bts4kzRGbo+ZFx24sFr0nXEvTH68m+sJPvFKIFD4rSASiQW8hkoxRZDtjDBTPSLhDDIT3rliWV3JQ7BBEy6BAjMFgqEkq0ghkRgGnHNhAII9gZHLRO0nOPZbQruexEp24wXqSC0/O61n5Kv9se2RAn4+n2MWCOpMYzmAwlI6KjAlkXUFL81zk5ReeyZBccvq4tXlFIBayaYmFvNwzeRiAgok0VWViOIPBUDlUnBFIOcq63f2EA8Kqxfnn1UnPPYbEUq9+cPyQ80dtVxTlDxCuh2B1JYYzGAyVR8W5g3qSDgKcuLieSLAwG9Z1xjexu/8Kp3l4ZuyM8o8E83P7TAgRsIIQCEG43FJVGAyGWqRoIwEROUdEXheRDSLy5THafUhEVESOG+l8d8IB4NRxZgWNiB0aZgAsEerDXs+/LjgNPX87BKGYF/ytnwOxFmMADAZD2VCUkYCI2HhF6t8NbAOeEZG7VXXdkHYNwOeAp0a7V1/SpVnglHzjAaPgpTW2pr7nbwc9xR8Ie+8m6GswGMqYYrmDTgA2qOpGABG5HTifIbUJgH8Avg38zWg3UuDoeVGa6yYm+pQrfzvov3ylb1VcmMVgMNQwxdJYC4CtOfvb/GNZRORYYJGq/mG8m50+Uq6gPGmsC0ze7ROKelM76+dArNWb5ROMGANgMBgqjrIIDIuIBfwLcHk+7X/yD1/klv52AD5+yYV84tKL83sO3mrfSWEFPKVvMBgMVUCxjMB2YFHO/kL/WIYG4AjgYT9twlzgbhE5T1Wfzb1R2BYe+q9bJyREYCry2wcml+ffYDAYyoli+S+eAZaJyFIRCQEXAndnTqpqp6q2quoSVV0CrAGGGQCAhsjEF1cF7amIAYy9yMxgMBgqiaIYAVVNA1cD9wHrgd+o6qsi8vcicl4h92qOTHzwEpisERAZd6WxwWAwVBJFiwmo6j3APUOOXT9K29NHu89kevOhybqDrKCZ8mkwGKqKmpnOYlsy+SmhJh5gMBiqjJoxAiYeYDAYDMOpISMwyT9VLDMSMBgMVUfNGIFJxwPs4NQIYjAYDGVETRgB2xKsyQZ0zawgg8FQhdSEEcin+ti4mHiAwWCoQmrCCEw6HmDZYJdFhg2DwWCYUmrECBhXkMFgMIxE1RsBEQhMNmmccQUZDIYqpeqNwKSzhoJXJ8BgMBiqkOo3ApN1BZlCMQaDoYqpeu026fTRZoGYwWCoYqraCAhTMRIw8QCDwVC9VLURCNjW5JLGiZiVwgaDoaqpaiMwJfEAkzraYDBUMVVtBCZdRMasDzAYDFVOVRuBySeNM0bAYDBUN1VrBCZdRMakijAYDDVA1RqBKYkHGAwGQ5VTxUZgsusDjCvIYDBUP8YIjIaJBxgMhhqgKo2AJYI9mamddtCkijAYDDVBVWq64GSLyJh4gMFgqBGq0wgEzPoAg8FgyIfqNAKTiQeImJGAwWCoGSrQCIzdy590ERmTKsJgMNQQFWcEdBwFP+kiMmYUYDAYaoiiGQEROUdEXheRDSLy5RHOf0FE1onISyLyoIgcMPKdLHSM6ZumnrDBYDDkT1HyIoiIDfwAeDewDXhGRO5W1XU5zV4AjlPVPhH5DPBPwMdGup+G6pH+xIjPmlQRGbFM6mhDTZBKpdi2bRvxeLzUohimiEgkwsKFCwkGC9NhxUqOcwKwQVU3AojI7cD5QNYIqOr/y2m/Brh01LvZQdQOI85gQzDpIjKmipihRti2bRsNDQ0sWbIEMTGwikdV2bdvH9u2bWPp0qUFXVssd9ACYGvO/jb/2Gh8Erh3rBtquGHYMXuyRWTMKmFDjRCPx2lpaTEGoEoQEVpaWiY0siu7NJkicilwHHDaSOf379vL2aed7LXVNB+/+GN84tKLAQhO1qSZeIChhjAGoLqY6P+zWEZgO7AoZ3+hf2wQInIW8LfAaao6otN/Zsss7n/kcW/HTWP1tWXPTSoeYAW89NEGg8FQQxTLHfQMsExElopICLgQuDu3gYisBH4EnKeqe/K6qxVAA3XZ3UkVkTHxAIPBUIMUxQioahq4GrgPWA/8RlVfFZG/F5Hz/GbfAeqB34rIWhG5e5TbDb53qB4QbEuwJpU0zriCDIZy4bHHHuOkk06iqamJmTNncvLJJ/P1r3+d+vp66uvriUQi2Lad3T/88MMBzyUSi8Wor6+ntbWViy66iI6Ojux9VZXvfOc7LFu2jLq6OhYvXsx1111HIjHybMNaoGjrBFT1HlVdrqoHqeo3/GPXq+rd/vZZqjpHVY/xX+eNfUcfy0aDdWZ9gMFQJXR1dfG+972Pa665hv3797N9+3a+9rWv8YEPfICenh56enr493//d0488cTs/quvvpq9/sUXX6Snp4eNGzfS3t7ODTfckD137bXX8uMf/5if//zndHd3c++99/Lggw/y0Y9+tAR/aXlQdoHhiaDBGEE3NfEbmFQRBkPZ8MYbbwBw0UUXAVBXV8fZZ59d8H0aGxs577zzuOuuuwB48803+eEPf8iTTz7JCSecAMDhhx/OHXfcwcEHH8xDDz3EGWecMTV/RAVRFUYAyyYYikG6f2LXm3iAocZZ8uU/FOU5m7/1F+O2Wb58ObZtc9lll3HhhReyevVqZsyYUfCz2tvbueuuu1i9ejUADz74IAsXLswagAyLFi1i9erVPPDAAzVpBCoud9BIWCLYkcaJ9+ZNPMBgKBsaGxt57LHHEBE+9alPMWvWLM477zx2796d1/XHHnsszc3NtLa2smXLFj796U8D0NbWxrx580a8Zt68ebS1tY14rtqpipFAyLa8SmDBKCR7C7tYxIwEDDVPPj30YrJixQp+9rOfAfDaa69x6aWX8vnPf57bbrtt3Guff/55Dj74YFKpFD/84Q855ZRTWLduHa2trezcuXPEa3bu3FnwSttqoSpGAtkiMqH6wkcDJmuowVDWHHrooVx++eW88sorBV0XDAa54oor2LRpE6+88gpnnHEGW7du5emnnx7UbuvWraxZs4YzzzxzKsWuGKrDCGTWB1gWhGKFXWxmBRkMZcVrr73GjTfeyLZt2wBPSd92221Z336+OI7DLbfcQl1dHQceeCDLly/nqquu4pJLLmHNmjU4jsOrr77Khz70Ic466yzOOuus6fhzyp6KNwIiQyqJBWNeNtB8MfEAg6GsaGho4KmnnmLVqlXEYjFWr17NEUccwY033pjX9UcffTT19fXMmDGDW2+9lTvvvJOZM2cCcNNNN3HFFVdw6aWXUl9fzznnnMPpp5/OHXfcMZ1/UlkjqlpqGQri6JXv0GzaCLx4wIzYEJdOohsSPePfzLKhfvYUS2gwlD/r169nxYoVpRbDMMWM9n8VkedU9biRrqn4kUAoMMKfEKrPbzRg4gEGg6HGqXgjMGJReZH8YgMmHmAwGGqcijYCYxaRCcXGzwpq4gEGg6HGqWgjELCt0XNojzcasIPebCKDwWCoYSpaC46bNC4YHX00YOIBBoPBUOlGYBzxRbwg8UiYeIDBYDBUthHIq4hMKOpVDctFxIwEDAaDgQo2ArYlWFaeKSKGxgZM6miDwWAAKtgIjOsKymXoaMCMAgwGgwGoYCNQcD3hcE5swMQDDIayZcmSJYRCoWGpnVeuXImIsHnzZs4999xsaclgMEgoFMruX3XVVTz88MNYlpU9tmDBAr72ta8Nul9HRwef+cxnmDt3LtFolCOPPJJbbrmlmH/qIJLJJCtWrGDhwoXZY21tbZx88sm0tLTQ3NzMiSeeyOOPPz7GXQqnYlNJj7hSeCyCdV6aadfxpocaDIayZenSpdx2221cc801ALz88sv09fVlz997773Z7csvv5yFCxfyj//4j9ljDz/8MPPnz88modu0aROnnHIKK1eu5IILLiCZTHLWWWcxe/ZsnnzySRYuXMiDDz7IZZddRnt7O1/4wheK9JcO8J3vfIdZs2bR3d2dPVZfX8/NN9/MsmXLEBH++7//m/e///3s2bOHQGBq1HdFjgQs8QrLF0yo3tQOMBgqgI9//OP8/Oc/z+7feuutfOITn5jw/ZYuXcpJJ53EunXrAPjFL37Bli1b+O1vf8vSpUsJBoOcc845fO973+P666+nq6tr3Hs+/PDDLFy4kBtvvJHZs2czb968CY8kNm3axC9/+Uuuu+66QccjkQiHHHIIlmWhqti2TXt7O/v375/Qc0aiIkcCBbuCMgQj468iNhhqkRuaivSczryarV69ml/84hesX7+e5cuXc/vtt/P444/z1a9+dUKPffPNN3n88ce56qqrAHjggQc499xzicUGTxr50Ic+xCWXXMKTTz7Je97znnHvu2vXLjo7O9m+fTsPPPAAH/7wh7nggguYMWMG3/rWt/jWt7416rUdHR3Z7WuuuYZvfvOb1NXVjdj2qKOO4rXXXiOVSnHFFVcwe/bUJb6syJFAtojMRDCuIIOhIsiMBh544AFWrFjBggULCrp+x44dNDc309jYyPLly1m1ahXvfOc7gdFLTQYCAVpbW/MuNRkMBrn++usJBoO8973vpb6+ntdffx2AL3/5y3R0dIz6ynDnnXfiOA4f+MAHRn3OSy+9RFdXF7/+9a+zf8NUUZEjgYJmBhkMhvHJs4deTD7+8Y9z6qmnsmnTpgm5gnJjAp2dnXz2s5/lsssu47bbbhu11GQ6naatrY3W1ta8ntHS0jLINx+NRunpySONvU9vby9f+tKXuOeee8ZtG4lEuOiii1ixYgXHHHMMRx99dN7PGYuK06Ze0riKE9tgMBTIAQccwNKlS7nnnnv44Ac/OKl7NTU1cfHFF/M///M/AJx11lnce++99PYOrkl+xx13EA6HC65iNhLf/OY3s7OTRnqB56bavHkzp5xyCnPnzuWDH/wgO3fuZO7cuWzevHnE+6ZSKTZu3Dhp+TJUnDY1a7wMhtrhpz/9KQ899NAw332h9PT0cPvtt3P44YcD3ihj4cKFfOQjH2Hz5s2kUinuu+8+rr32Wm644QaamrwYyeWXX87ll18+oWd+5StfoaenZ9QXwBFHHMHWrVtZu3Yta9eu5Sc/+Qlz5sxh7dq1LFq0iDVr1vDYY4+RTCbp7+/n29/+Nrt372bVqlWT+jxyqTh3kDECBkPtcNBBB0342h07dmR73Jne/a9+9avs/p/+9Ceuu+46Vq1aRVdXFwceeCDf+MY3uOKKK7L32Lp1KxdeeOHk/ogxCAQCzJ07N7s/c+ZMLMvKHkskElx77bVs3LiRYDDIkUceyR/+8Afmz58/ZTIUrbykiJwDfBewgZ+o6reGnA8DPwfeAewDPqaqm4fe5x3vOE6fe+7Z6RfYYKhiTHnJ8Ukmkxx99NG89NJLBIOVMaGkbMtLiogN/AA4FzgMuEhEDhvS7JNAu6oeDPx/wLdHvtd0SmowGAweoVCI9evXV4wBmCjFigmcAGxQ1Y2qmgRuB84f0uZ84FZ/+3fAmTJqxRiDwWAwTAXFMgILgK05+9v8YyO2UdU00Am0FEU6g8FgqFEqLjC8d+9ejjtuwLV15ZVXcuWVV5ZQIoPBYKhcimUEtgOLcvYX+sdGarNNRAJAE16AeBCzZs3i2WdNYNhgmCyqOnqNbkPFMdFJPsVyBz0DLBORpSISAi4E7h7S5m7gMn/7w8BDWqypSwZDjRGJRNi3b9+EFYehvFBV9u3bRyQSKfjaoowEVDUtIlcD9+FNEb1ZVV8Vkb8HnlXVu4GfAr8QkQ3AfjxDYTAYpoGFCxeybds29u7dW2pRDFNEJBIZVIsgX4q2TmCqOO6449S4gwwGgyF/Sr5OwGAwGAzlScUZgXIYvv74xz8utQhAechhZBigHOQoBxmgPOQoBxmgfOQYjYozAvnm+Z5OyuWfWg5yGBkGKAc5ykEGKA85ykEGKB85RqPijIDBYDAYpo6KCwyLSDfweonFaAVKPyQpDzmMDAOUgxzlIAOUhxzlIAOUhxwHqOqskU5UnBEwGAwGw9Rh3EEGg8FQwxgjYDAYDDVMxRgBETlHRF4XkQ0i8uUSybBIRP6fiKwTkVdF5HOlkMOXxRaRF0Tk9yWUoVlEficir4nIehE5sQQy/LX/v3hFRG4TkcLXzU/suTeLyB4ReSXn2EwReUBE3vTfZ5RAhu/4/4+XROROEWmeThlGkyPn3BdFREUkv8rtUyyDiFzjfx6visg/TacMo8khIseIyBoRWSsiz4rICdMtRyFUhBHIsyhNMUgDX1TVw4DVwF+VSA6AzwHrS/TsDN8F/qiqhwJHF1seEVkAXAscp6pH4KUkKVa6kZ8B5ww59mXgQVVdBjzo7xdbhgeAI1T1KOAN4LpplmE0ORCRRcDZwJZSyCAi78KrU3K0qh4O/HMp5AD+Cfi6qh4DXO/vlw0VYQTIryjNtKOqO1X1eX+7G0/pDa2LMO2IyELgL4CfFPvZOTI0Aafi5XxCVZOq2lECUQJAnZ95NgrsKMZDVfVRvBxXueQWRroVuKDYMqjq/X49DoA1eBl7p5VRPgvwKgR+CZj22SejyPAZ4FuqmvDb7CmRHAo0+ttNFOk7mi+VYgTyKUpTVERkCbASeKoEj/9XvB+XW4JnZ1gK7AVu8d1SPxGRWDEFUNXteL27LcBOoFNV7y+mDEOYo6o7/e1dwJwSygLwv4B7S/FgETkf2K6qL5bi+T7LgVNE5CkReUREji+RHJ8HviMiW/G+r8UYneVNpRiBskJE6oE7gM+raleRn/0+YI+qPlfM545AADgW+DdVXQn0Mv3uj0H4Pvfz8QzSfCAmIpcWU4bR8NOgl2z+tYj8LZ778lcleHYU+Aqe66OUBICZeK7bvwF+U6KStZ8B/lpVFwF/jT96LhcqxQjkU5SmKIhIEM8A/EpV/6sEIpwMnCcim/HcYmeIyC9LIMc2YJuqZkZCv8MzCsXkLGCTqu5V1RTwX8BJRZYhl90iMg/Af59298NIiMjlwPuAS0pUk+MgPMP8ov89XQg8LyJziyzHNuC/1ONpvJHztAaoR+EyvO8mwG/x3NtlQ6UYgXyK0kw7fi/ip8B6Vf2XYj8fQFWvU9WFqroE73N4SFWL3vtV1V3AVhE5xD90JrCuyGJsAVaLSNT/35xJaYPluYWRLgP+u9gCiMg5eK7C81S1r9jPB1DVl1V1tqou8b+n24Bj/e9MMbkLeBeAiCwHQpRm5e4O4DR/+wzgzRLIMDqqWhEv4L14sx3eAv62RDK8E2+I/xKw1n+9t4SfyenA70v4/GOAZ/3P4y5gRglk+DrwGvAK8AsgXKTn3oYXh0jhKblPAi14s4LeBP4EzCyBDBvw4meZ7+e/l+KzGHJ+M9Bags8iBPzS/248D5xRou/FO4HngBfxYojvKMZ3NN+XSRthMBgMNUyluIMMBoPBMA0YI2AwGAw1jDECBoPBUMMYI2AwGAw1jDECBoPBUMMYI2AwTCMi0iMiB5ZaDoNhNIwRMFQtIrJZRPp9RbxLRH7mp/yYruc9LCJX5B5T1XpV3ThdzzQYJosxAoZq5/2qWo+3sG0lZZa8y2AoNcYIGGoC9VIW3IdnDBCR1SLyhIh0iMiLInJ6pq2I/KVfJKdbRDaKyKdz7yUi5/sFQrpE5C3xCh59AzgFuMkfedzkt1UROdjfbhKRn4vIXhF5W0S+KiKWf+5yEXlMRP5ZRNpFZJOInJvzzMt9Wbr9c5dM6wdmqBkCpRbAYCgGfg2Gc4GH/GI0fwA+DvwRL+fQHSJyqKruxUv89j5gI17NhHtF5BlVfd6vCvVz4MN4KSLmAQ2q+kcRORn4paqOVufh+3j55A/ESzFxP16KgUxWyVV4dQhagSuBn/qyRoHvAcer6ut+crqZU/XZGGobMxIwVDt3iUg3Xj6dPcDXgEuBe1T1HlV1VfUBvBxI7wVQ1T+o6lvq8Qiesj7Fv98ngZtV9QH/2u2q+tp4QvjV8S4ErlPVblXdDNyIZ4gyvK2q/6GqDp4xmMdATQIXOEJE6tQrbvTqZD4UgyGDMQKGaucCVW3AS7Z3KF4v+wDgI74rqENEOvCSfGXSQJ/r14Td7597LwMpiBfhJTEslFYgCLydc+xtBhdHymbZ1IEMoPWq2gt8DLgK2CkifxCRQycgg8EwDGMEDDWB36P/GV5lp63AL1S1OecVU9VviUgYr17EP+NVCmsG7gEyxUi24uXLH/ExY4jQhpdZ8oCcY4vJsy6Gqt6nqu/GM1SvAf+Rz3UGw3gYI2CoJf4VeDfwBPB+EXmPiNgiEhGR0/24QQgI45XOTPvB2bNz7vFT4C9F5EwRsURkQU6vfDeev38YvovnN8A3RKRBRA4AvoCX6nhMRGSOH4yOAQmgh9KWFjVUEcYIGGoGP+j7c+BavLKUX8FT9lvxyg9aqtrtn/8N0A5cTE4BI/UqVP0lXhH1TuARBnr33wU+7M/u+d4IIlyDV4ZzI/AY8Gvg5jxEt/AMxg68Iuan4ZUsNBgmjaknYDAYDDWMGQkYDAZDDWOMgMFgMNQwxggYDAZDDWOMgMFgMNQwxggYDAZDDWOMgMFgMNQwxggYDAZDDWOMgMFgMNQwxggYDAZDDfP/AzR2e1d0U4zKAAAAAElFTkSuQmCC\n" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ], + "execution_count": 15, + "metadata": { + "scrolled": true + } + }, + { + "cell_type": "code", + "source": [], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 18, + "data": { + "text/plain": [ + "NAME catalyst base base_equivalents temperature t_res yield \\\n", + "TYPE DATA DATA DATA DATA DATA DATA \n", + "0 tBuXPhos DBU 1.375000 82.500000 1365.000000 0.888505 \n", + "1 tBuBrettPhos TMG 2.125000 47.500000 495.000000 0.086979 \n", + "2 tBuXPhos DBU 1.380267 82.829384 1395.393066 0.895618 \n", + "3 tBuXPhos DBU 1.541958 83.641937 1363.182617 0.906691 \n", + "4 tBuXPhos DBU 1.549197 71.723419 1789.764160 0.865854 \n", + ".. ... ... ... ... ... ... \n", + "16 tBuXPhos TMG 2.024388 100.000000 1159.117065 0.883003 \n", + "17 tBuXPhos TMG 1.948155 100.000000 1188.951904 0.882904 \n", + "18 tBuXPhos TMG 1.870981 100.000000 1158.173096 0.883244 \n", + "19 tBuXPhos TMG 1.913444 100.000000 1100.192871 0.883185 \n", + "20 tBuXPhos TMG 1.945152 100.000000 1147.914551 0.883768 \n", + "\n", + "NAME computation_t experiment_t strategy task \n", + "TYPE METADATA METADATA METADATA METADATA \n", + "0 0.000000 0.048193 LHS 1.0 \n", + "1 0.000000 0.052553 LHS 1.0 \n", + "2 2.136502 0.035443 MTBO 1.0 \n", + "3 2.521018 0.034423 MTBO 1.0 \n", + "4 2.032697 0.033817 MTBO 1.0 \n", + ".. ... ... ... ... \n", + "16 1.829988 0.030292 MTBO 1.0 \n", + "17 1.378010 0.027179 MTBO 1.0 \n", + "18 1.666886 0.028165 MTBO 1.0 \n", + "19 2.182215 0.032504 MTBO 1.0 \n", + "20 1.214195 0.030377 MTBO 1.0 \n", + "\n[210 rows x 10 columns]" + ], + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
catalystbasebase_equivalentstemperaturet_resyieldcomputation_texperiment_tstrategytask
0tBuXPhosDBU1.37500082.5000001365.0000000.8885050.0000000.048193LHS1.0
1tBuBrettPhosTMG2.12500047.500000495.0000000.0869790.0000000.052553LHS1.0
2tBuXPhosDBU1.38026782.8293841395.3930660.8956182.1365020.035443MTBO1.0
3tBuXPhosDBU1.54195883.6419371363.1826170.9066912.5210180.034423MTBO1.0
4tBuXPhosDBU1.54919771.7234191789.7641600.8658542.0326970.033817MTBO1.0
.................................
16tBuXPhosTMG2.024388100.0000001159.1170650.8830031.8299880.030292MTBO1.0
17tBuXPhosTMG1.948155100.0000001188.9519040.8829041.3780100.027179MTBO1.0
18tBuXPhosTMG1.870981100.0000001158.1730960.8832441.6668860.028165MTBO1.0
19tBuXPhosTMG1.913444100.0000001100.1928710.8831852.1822150.032504MTBO1.0
20tBuXPhosTMG1.945152100.0000001147.9145510.8837681.2141950.030377MTBO1.0
\n", + "

210 rows × 10 columns

\n", + "
" + ] + }, + "metadata": {} + } + ], + "execution_count": 18, + "metadata": { + "collapsed": false, + "outputHidden": false, + "inputHidden": false + } + }, + { + "cell_type": "code", + "source": [ + "fig, axes = plt.subplots(1,2, figsize=(10,5))\n", + "fig.subplots_adjust(wspace=0.2)\n", + "data = [r.experiment.data for r in mtbo_results]\n", + "big_data= pd.concat(data)\n", + "big_data[\"nucleophile\", \"METADATA\"] = \"Aniline (optimization)\"\n", + "pt_data = datasets[\"Benzamide\"]\n", + "pt_data[\"task\", \"METADATA\"] = 0\n", + "# Drop base=MTBD because not in other dataset\n", + "pt_data = pt_data[pt_data[\"base\"] != \"MTBD\"]\n", + "# Clean data\n", + "pt_data = pt_data.replace(\"≥90%\", 0.9)\n", + "pt_data[\"nucleophile\", \"METADATA\"] = \"Benzamide (pretraining)\"\n", + "big_data = big_data.append(pt_data)\n", + "# Counts of different catalysts grouped by nucleophile\n", + "(big_data.\n", + " groupby([\"nucleophile\", \"catalyst\"])\n", + " [\"yield\"].\n", + " mean().\n", + " unstack(0).\n", + " plot.bar(ax=axes[0])\n", + ")\n", + "# Counts of different bases grouped by nucleophile\n", + "(big_data.\n", + " groupby([\"nucleophile\", \"base\"])\n", + " [\"yield\"].\n", + " mean().\n", + " unstack(0).\n", + " plot.bar(ax=axes[1])\n", + ")\n", + "for ax in axes:\n", + " ax.set_ylabel(\"average yield\")\n", + "fig.tight_layout()\n", + "fig.savefig(\"figures/yield_distribution_different_catalyst_base.png\", dpi=300)" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": [ + "iVBORw0KGgoAAAANSUhEUgAAAsgAAAFhCAYAAABtUFzNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA8wElEQVR4nO3de5xVddX48c/ioqAQmGKZqOAjKCo4IpKXVNK8ZaJmlpe8ZGr2yx7T1IfKlKxMrUdNs4v3S4qVlpeyNFMkTRMQRAUvpJiojyEKgoqCrt8f5zBuhgFmYM45c/m8X695cfbe37PPmrOHNWv2+V4iM5EkSZJU0qnWAUiSJEmtiQWyJEmSVGCBLEmSJBVYIEuSJEkFFsiSJElSgQWyJEmSVGCBLEntWERcGRH/iYjHl3E8IuKiiJgeEVMiYmi1Y5Sk1qZLrQNornXWWSf79etX6zAkaZVMnDjx1czsU4WXuhr4GXDtMo7vDQwof30c+EX53+UyF0tqD5aVi9tcgdyvXz8mTJhQ6zAkaZVExPPVeJ3MHBcR/ZbTZD/g2iytGvVQRPSOiPUy8+XlnddcLKk9WFYutouFJHVs6wMvFLZnlvdJUodlgSxJapKIOC4iJkTEhFmzZtU6HEmqGAtkSerYXgQ2KGz3Le9bSmZempnDMnNYnz7V6D4tSbXR5vogS6ti4cKFzJw5kwULFtQ6FHUQ3bp1o2/fvnTt2rXWoSzLbcAJEXEjpcF5c1fU/1haVeZiVVtzc7EFsjqUmTNn0rNnT/r160dE1DoctXOZyezZs5k5cyb9+/evSQwRMQYYAawTETOBM4Gu5fh+CdwBfBqYDrwFfKkmgapDMRermlYmF1sgq0NZsGCBCVlVExGsvfba1LK/bmYesoLjCXytSuFIgLlY1bUyudg+yOpwTMiqJn/epMb5f0PV1NyfNwtkqYMbMWJEi89ne9RRR3HTTTcttf+ll17ic5/7HABjx47lM5/5TIu+riS1Vebi1sUCWVLVfOxjH2s0WUuSqsdcvGIWyFIbNWPGDAYNGsSxxx7LFltswR577MHbb7+9xF2IV199lcXLAb/33nuccsopbLnllgwZMoSLL754qXPeddddbL/99gwdOpSDDjqI+fPnA/C3v/2NrbfemsGDB3P00UfzzjvvAKXV1E477TQGDx7M8OHDmT59ev25xo0bxw477MDGG29cn4hnzJjBlltuudTrvvnmmxx99NEMHz6crbfemltvvbVF3ytJqhRzcfvkID21Kf1G/WmVnn/ZyPVYOHPOCtsN6dt7lV6nWp555hnGjBnDZZddxuc//3luvvnmZba99NJLmTFjBpMnT6ZLly689tprSxx/9dVX+cEPfsDdd9/Nmmuuybnnnsv555/PaaedxlFHHcXf/vY3Bg4cyBFHHMEvfvELvvGNbwDQq1cvHnvsMa699lq+8Y1v8Mc//hGAl19+mfvvv58nn3ySkSNH1n+c15gf/vCH7Lrrrlx55ZXMmTOH4cOH86lPfYo111xz1d8ktXqr+v+6aMY5+7TYuaSmMhe3P95Bltqw/v37U1dXB8A222zDjBkzltn27rvv5itf+QpdupT+Lv7whz+8xPGHHnqIqVOnsuOOO1JXV8c111zD888/z1NPPUX//v0ZOHAgAEceeSTjxo2rf94hhxxS/++DDz5Yv3///fenU6dObL755rzyyivL/T7uuusuzjnnHOrq6hgxYgQLFizg3//+d5PfB0mqJXNx++MdZKkNW3311esfd+7cmbfffpsuXbrw/vvvAzRrEv7MZPfdd2fMmDFL7H/00UeX+7ziyODi42JspZnElv/aN998M5tuummT45Wk1sJc3P54B1lqZ/r168fEiRMBlhiEsfvuu/OrX/2KRYsWASz1sd52223HAw88UN937c033+Tpp59m0003ZcaMGfX7r7vuOnbZZZf65/3mN7+p/3f77bdfqZj33HNPLr744vrkPWnSpJU6jyS1Fubits07yFI7c8opp/D5z3+eSy+9lH32+aA/5jHHHMPTTz/NkCFD6Nq1K8ceeywnnHBC/fE+ffpw9dVXc8ghh9QP/PjBD37AwIEDueqqqzjooINYtGgR2267Lccff3z9815//XWGDBnC6quvvtQdj6b67ne/yze+8Q2GDBnC+++/T//+/ev7z0lamv22Wz9zcdsWK7rd3toMGzYsW3qeQLUdLTFI7yMbbrzCdm1lkF6t9evXjwkTJrDOOuvUOpRWbdq0aQwaNGiJfRExMTOH1SikVdaSudhir/na+nvW2P8JrTxzcdM0JxfbxUKSJEkqsIuFpJW2vJHakqTqMBe3PAvkZWjJj6+WpaN8FChJktSW2MVCkiRJKrBAliRJkgoskCVJkqQCC2SpBm655RYigieffLJJ7Y855himTp0KlKbzefXVVwHYYYcdWiymCy+8kGuvvXalnjt27Fj+8Y9/1G//8pe/bPa5VvZ7Ofvss1vkPAAHH3wwzzzzzEo/X1LbYi5emrm4xEF66tBG/uyBFj1fUwdejhkzhk984hOMGTOG733veytsf/nllze6v5gIV8WiRYu48soreeSRR1bq+WPHjqVHjx71CbE4eX1Trez3cvbZZ/Ptb397lc8D8NWvfpXzzjuPyy67bKXPIan5WnpgvLnYXLyqvIMsVdn8+fO5//77ueKKK7jxxhvr948dO5YRI0bwuc99js0224zDDjusfrnPESNG0NiiDD169FjhcydOnMguu+zCNttsw5577snLL7+81Hnuuecehg4dSpcupb+ZJ0+ezHbbbceQIUM44IADeP311+vjOPHEE6mrq2PLLbfk4YcfZsaMGfzyl7/kggsuoK6ujr///e+MHj2an/zkJ/XPOemkkxg2bBiDBg1i/PjxfPazn2XAgAGcfvrpS30vZ5xxBnV1ddTV1bH++uvzpS99CYD999+fbbbZhi222IJLL70UgFGjRvH2229TV1fHYYcdtsR5MpNTTz2VLbfcksGDB9cvw7q892qnnXbi7rvvrl8CVlL7ZS42Fy+PBbJUZbfeeit77bUXAwcOZO2112bixIn1xyZNmsSFF17I1KlTefbZZ3nggabf4W7suQsXLuTrX/86N910ExMnTuToo4/mO9/5zlLPfeCBB9hmm23qt4844gjOPfdcpkyZwuDBg5e4s/LWW28xefJkfv7zn3P00UfTr18/jj/+eE466SQmT57MTjvttNT5V1ttNSZMmMDxxx/PfvvtxyWXXMLjjz/O1VdfzezZs5doe9ZZZzF58mTGjh3Lhz/84folWK+88komTpzIhAkTuOiii5g9ezbnnHMO3bt3Z/LkyVx//fVLnOf3v/89kydP5tFHH+Xuu+/m1FNPrf+FtKz3uVOnTmyyySY8+uijTX7fJbVN5mJz8fJYIEtVNmbMGA4++GCg1M9qzJgx9ceGDx9O37596dSpE3V1dc2a/L2x5z711FM8/vjj7L777tTV1fGDH/yAmTNnLvXcl19+mT59+gAwd+5c5syZwy677ALAkUceybhx4+rbHnLIIQDsvPPOvPHGG8yZM2eFsY0cORKAwYMHs8UWW7Deeuux+uqrs/HGG/PCCy8s1T4z+eIXv8jJJ59c/8vioosuYquttmK77bbjhRdeWGH/tPvvv59DDjmEzp0785GPfIRddtmF8ePHL/O9WmzdddflpZdeWuH3JKltMxebi5fHPshSFb322mvcc889PPbYY0QE7733HhHBj3/8YwBWX331+radO3du1sdLjT03M9liiy148MEHl/vc7t27s2DBgia9TkQstf3KGwuYt6gzU2bOAVhi+813FvHvOe/Sc+Ycnpv9Fu9kp/p2by98n2kvvk6ndebwflK//+f/+yO6r9WHbXY/gCkz5zD+wfu59Y6/8OCDD7LGGmswYsSIJsfbmOW9zwsWLKB79+4rfW5JrV97zcVNja1Tp05LxNmpU6dGv8fRo0fTt2/f+u4VY8eO5e677+4Qudg7yFIV3XTTTRx++OE8//zzzJgxgxdeeIH+/fvz97//vSKvt+mmmzJr1qz6pLxw4UKeeOKJpdoNGjSI6dOnA9CrVy/WWmut+piuu+66+jsYQH3/sfvvv59evXrRq1cv1lizB2++Ob9FYh771z/zz/vHMup759bvm//GG3yoV2/WWGMNnnzySR566KH6Y127dmXhwoVLnWennXbiN7/5De+99x6zZs1i3LhxDB8+fIWv//TTT7Plllu2yPciqXVqr7m4Z8+ezJs3r0Vivv3227n77ru56KKL6vfNnTuXtdZaq0PkYgtkqYrGjBnDAQccsMS+Aw88cImP9lrSaqutxk033cT//M//sNVWW1FXV9foyOK99957iY/urrnmGk499VSGDBnC5MmTOeOMM+qPdevWja233prjjz+eK664AoBddt+Le/7yRz6/50488s9VG8193WU/5z//9zKH7bsbn99zJy75ydnsOGI33lu0iEGDBjFq1Ci22267+vbHHXccQ4YMqR8YstgBBxzAkCFD2Gqrrdh1110577zz+OhHP7rc137llVfo3r37CttJatvaay7ed999+cMf/lA/SG9VnH/++bz44osMHz6curo6zjjjDPbaay8WdZBcHItHDLYVw4YNy8ZGkLa0lp5ypjFNnYZGH1jV63LZyPX4yIYbr7DdkL69V+l12qIDDjiA8847jwEDBiyzzYgRI/jJT37CsGHDlti/uGtEpVX6ulxwwQV86EMf4stf/nKLnnfatGkMGjRoiX0RMTEzhy3jKa1eS+bilsy3HSWvtvX3rLH/EypZlVzcXrSGXOwdZEkAnHPOOY1OO9SR9O7dmyOPPLLWYUjqwMzFrSMXV3SQXkTsBfwU6AxcnpnnNDi+IXAN0LvcZlRm3lHJmCQ1btNNN2XTTTddbpuxY8dWJ5gaWTwQRZJqxVzcOnJxxe4gR0Rn4BJgb2Bz4JCI2LxBs9OB32bm1sDBwM8rFY8kSZLUFJXsYjEcmJ6Zz2bmu8CNwH4N2iTwofLjXoCTj0qSJKmmKtnFYn2gOOv0TODjDdqMBu6KiK8DawKfqmA8kiRJ0grVepDeIcDVmdkX+DRwXUQsFVNEHBcREyJiwqxZs6oepCRJkjqOShbILwIbFLb7lvcVfRn4LUBmPgh0A9ZpeKLMvDQzh2XmsMVLMEptVefOnamrq2OrrbZi6NChjc6FWUvHHHMMU6dOXWr/1VdfzQknnNCsc017fApnnvL1FonrxRf+zQ033LBSz91hhx1W2GZZ33dTzJo1i7322mulniupNjpSLp40aVKLTZk2Y8aMDpGLK9nFYjwwICL6UyqMDwYObdDm38BuwNURMYhSgewtYlXNkMs3atkTjp67wibdu3dn8uTJANx5551861vf4r777mvZOFbB5Zdf3mLnuuJn53Psf3+zye0XLVpEly6Np6WXZv6bP9xwA4ce2jCNLP95QJN+8a3K992nTx/WW289HnjgAXbccceVPo/UYY3u1cLnMxcXnX322Zx++ulNbr+8nLq4QG7vubhid5AzcxFwAnAnMI3SbBVPRMRZETGy3OybwLER8SgwBjgq29rKJdIqeOONN1hrrbXqt3/84x+z7bbbMmTIEM4880yglIwGDRrEscceyxZbbMEee+zB22+/zUsvvURdXV39V+fOnXn++ee5/fbb+fjHP87WW2/Npz71KV555RUARo8ezZFHHslOO+3ERhttxO9//3tOO+00Bg8ezF577VW/ROiIESNYvADEVVddxcCBAxk+fDgPPPBAfZyzZs3iwAMPZNttt2Xbbbdl0vgPlhtd7M3583h62hNsuvlgAH5x/jl8+8SvcPh+e7DvTttw8w3XADD+wfs56rN7899fOoQDdt2O9957j/N/8F0O3WdXPrf7jvzu11cB8NMffY+///3v1NXVccEFF3D11VczcuRIdt11V3bbbTfmz5/PbrvtxtChQxk8eDC33nprfSw9evQASlMjjRgxgs997nNsttlmHHbYYSxOOcXvu0ePHnznO99hq622Yrvttqt/D//1r3+x3XbbMXjwYE4//fT68wLsv//+XH/99Sv3gyCpptpLLi4eW2zevHlMmTKFrbbaqv71Dz/8cLbffnsGDBjAZZddBpTy40477cTIkSPZfPPNee+99zj11FPr34df/epXAIwaNapD5OKK9kHOzDsyc2Bm/ldm/rC874zMvK38eGpm7piZW2VmXWbeVcl4pNbg7bffpq6ujs0224xjjjmG7373uwDcddddPPPMMzz88MNMnjyZiRMn1i85+swzz/C1r32NJ554gt69e3PzzTfzsY99jMmTJzN58mSOPfZYDjzwQDbaaCM+8YlP8NBDDzFp0iQOPvhgzjvvvPrX/te//sU999zDbbfdxhe/+EU++clP8thjj9G9e3f+9KclV+Z6+eWXOfPMM3nggQe4//77l/jI68QTT+Skk05i/Pjx3HzzzXzvtBOX+j6fmDKZTTZdcsWiZ6Y9wWU33sq1t97Fry48j//8X2ky/GmPT+G0753D7eMm8Icbr6NHz17c8Kd7uOGP9/D7G65l5r+f58RvnclOO+3E5MmTOemkkwB45JFHuOmmm7jvvvvo1q0bf/jDH3jkkUe49957+eY3v0ljf29PmjSJCy+8kKlTp/Lss882+gvlzTffZLvttuPRRx9l5513rv8FcuKJJ3LiiSfy2GOP0bdv3yWeM2zYsFVe2lVS9bTHXHzMMccs9X1OmDCBLbfccol9U6ZM4Z577uHBBx/krLPO4qWXSpOIPfLII/z0pz/l6aef5oorrqBXr16MHz+e8ePHc9lll/Hcc89xzjnndIhcXNGFQiQtrfix3oMPPsgRRxzB448/zl133cVdd93F1ltvDcD8+fN55pln2HDDDenfvz91dXUAbLPNNsyYMaP+fA888ACXXXYZ999/PwAzZ87kC1/4Ai+//DLvvvsu/fv3r2+7995707VrVwYPHsx7771X31dr8ODBS5wT4J///CcjRoxgcb//L3zhCzz99NMA3H333Usk6fnz5vHWm/NZY80P/op/9ZX/Y621117inCP2+DTdunenW/fubLvDTjw++RF69urFlnVD6bthqbvLg+Pu5elpT3D3HaW7DvPmvcG/n/sXXVdbban3cvfdd+fDH/4wAJnJt7/9bcaNG0enTp148cUXeeWVV/joRz+6xHOGDx9en1Dr6uqYMWMGn/jEJ5Zos9pqq/GZz3ym/v3+61//Wn+9brnlFgAOPfRQTjnllPrnrLvuuvW/ZCS1fu0xF7/xxhvMnz9/iTuqL7/8Mg3Hb+233350796d7t2788lPfpKHH36Y3r17M3z48Po477rrLqZMmcJNN90EwNy5c3nmmWdYrYPkYgtkqYa23357Xn31VWbNmkVm8q1vfYuvfOUrS7SZMWMGq6++ev12586defvtt4FS4vvyl7/MbbfdVp8Qv/71r3PyySczcuRIxo4dy+jRo+ufu/g8nTp1omvXrkRE/faiRYuaHPf777/PQw89RLdu3QCYMnPOUm1W79addxe8s8S+xa/XcLv7GmvU78tMRp11LjuO2G2JtuMfvH+p11hzzTXrH19//fXMmjWLiRMn0rVrV/r168eCBQuWjqvBe9nY9118b5bVpqEFCxbQvXv3FbaT1Pq0l1zcmO7duy+VC5eVi4s5NTO5+OKL2XPPPZdo29gqfu0xF9d6mjepQ3vyySd57733WHvttdlzzz258sormT9/PgAvvvgi//nPf5b53IULF3LQQQdx7rnnMnDgwPr9c+fOZf311wfgmmuuWenYPv7xj3Pfffcxe/ZsFi5cyO9+97v6Y3vssQcXX3zxB9/HE48t9fyNBwzk388/u8S+sXfdwTsLFjDn9deY8OD9bLHV1ks9b4ddduV3111Z3w9vxrPTeeutN1lzzR7MmzdvmfHOnTuXddddl65du3Lvvffy/PPPN/t7XpHtttuOm2++GYAbb7xxiWNPP/30Uh9jSmob2ksuXnxHvGjQoEFMnz59iX233norCxYsYPbs2YwdO5Ztt912qeftueee/OIXv6jPxU8//TRvvvkmPXv27BC52DvIUpUt7vcGpb/Qr7nmGjp37swee+zBtGnT2H777YHS4IRf//rXdO7cudHz/OMf/2DChAmceeaZ9YNI7rjjDkaPHs1BBx3EWmutxa677spzzz23UnGut956jB49mu23357evXvXxwxw0UUX8bWvfY0hQ4awaNEittjm43z3Rxcs8fz+mwxk/htv8Ob8eazZoycAAwZtwTFfGMmc12Zz3Imnsu5H1+P55/61xPM+e8gRvPTCvzl4713ITNZaex0uvPzXDBi0BZ07d2arrbbiqKOOWmJADcBhhx3Gvvvuy+DBgxk2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\n" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ], + "execution_count": 84, + "metadata": { + "collapsed": false, + "outputHidden": false, + "inputHidden": false + } + }, + { + "cell_type": "markdown", + "source": [ + "### Similar Substrates" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "What if our auxiliary data is similar to the task being optimized? In this case primary amine to secondary amine.\n", + "\nSince we don't have a benchmark for this, we first need to train a model." + ], + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#Create the domain based on Baumgartner, but with different bases\n", + "bases_primary = pd.unique(datasets[\"Phenethylamine\"][\"base\"])\n", + "bases_secondary = pd.unique(datasets[\"Morpholine\"][\"base\"])\n", + "assert bases_primary.all() == bases_secondary.all()\n", + "domain = BaumgartnerCrossCouplingEmulator.setup_domain()\n", + "new_domain = deepcopy(domain)\n", + "bases = list(pd.unique(datasets[\"Morpholine\"][\"base\"]))\n", + "new_domain[\"base\"] = CategoricalVariable(name=\"base\", description=\"Base\", levels=bases)\n", + "new_domain" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 23, + "data": { + "text/html": [ + "
NameTypeDescriptionValues
catalystcategorical, inputCatalyst type3 levels
basecategorical, inputBase4 levels
base_equivalentscontinuous, inputBase equivalents[1.0,2.5]
temperaturecontinuous, inputTemperature in degrees Celsius (ºC)[30,100]
t_rescontinuous, inputresidence time in seconds (s)[60,1800]
yieldcontinuous, maximize objectiveYield[0.0,1.0]
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {} + } + ], + "execution_count": 23, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "# Load or train primary amine benchmark model\n", + "save_dir = pathlib.Path(\"baumgartner_phenethylamine_emulator/\")\n", + "if save_dir.exists():\n", + " exp_amine = ExperimentalEmulator.load(\"baumgartner_primary_amine\", save_dir)\n", + "else:\n", + " exp_amine = ExperimentalEmulator(\n", + " domain=new_domain,\n", + " model_name=\"baumgartner_primary_amine\",\n", + " dataset=datasets[\"Phenethylamine\"].replace(\"≥90%\", 0.9)\n", + " )\n", + " exp_amine.train(max_epochs=1000, cv_fold=2, test_size=0.25, verbose=False)\n", + " exp_amine.save(\"baumgartner_phenethylamine_emulator\")\n", + "exp_amine.parity_plot()" + ], + "outputs": [ + { + "output_type": "execute_result", + "execution_count": 24, + "data": { + "text/plain": [ + "(
,\n", + " array([],\n", + " dtype=object))" + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "image/png": [ + "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\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ], + "execution_count": 24, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#Single-Task Bayesian Optimization\n", + "for i in range(N_REPEATS):\n", + " print(f\"Repeat {i}\")\n", + " result = run_stbo(exp_amine, max_iterations=MAX_ITERATIONS)\n", + " result.save(f\"data/cross_coupling_similar/stbo_cn_noise_repeat_{i}.json\")\n", + " clear_output(wait=True) " + ], + "outputs": [], + "execution_count": null, + "metadata": {} + }, + { + "cell_type": "code", + "source": [ + "#Multi-Task Bayesian Optimization\n", + "pt_data = datasets[\"Morpholine\"].copy()\n", + "pt_data[(\"task\", \"METADATA\")] = 0\n", + "pt_data = pt_data.replace(\"≥90%\", 0.9)\n", + "for i in range(N_REPEATS):\n", + " print(f\"Repeat {i}\") \n", + " exp_amine.reset()\n", + " result = run_mtbo(exp_amine, pt_data, max_iterations=MAX_ITERATIONS)\n", + " result.save(f\"data/cross_coupling_similar/mtbo_pre-train_repeat_{i}.json\")\n", + " clear_output(wait=True)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Repeat 9\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/html": [ + "\n", + "
\n", + " \n", + " \n", + " 100.00% [20/20 01:36<00:00]\n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py:4152: PerformanceWarning: dropping on a non-lexsorted multi-index without a level parameter may impact performance.\n", + " obj = obj._drop_axis(labels, axis, level=level, errors=errors)\n" + ] + } + ], + "execution_count": 25, + "metadata": { + "scrolled": true + } + }, + { + "cell_type": "code", + "source": [ + "stbo_results = [summit.Runner.load(f\"data/cross_coupling_similar/stbo_cn_noise_repeat_{i}.json\") \n", + " for i in range(N_REPEATS)]\n", + "mtbo_results_list = [summit.Runner.load(f\"data/cross_coupling_similar/mtbo_pre-train_repeat_{i}.json\") \n", + " for i in range(N_REPEATS)]\n", + "fig, ax = make_comparison_plot(\n", + " dict(results=stbo_results, label=\"STBO\"),\n", + " dict(results=mtbo_results_list,label=f\"\"\"MTBO, n={datasets[\"Morpholine\"].shape[0]}\"\"\")\n", + ")\n", + "fig.savefig(\"figures/stbo_mtbo_cn_similar.png\", bbox_inches='tight', dpi=300)" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n", + "/Users/Kobi/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/sklearn/metrics/_regression.py:682: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.\n", + " warnings.warn(msg, UndefinedMetricWarning)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": [ + "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\n" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ], + "execution_count": 40, + "metadata": { + "scrolled": true + } + }, + { + "cell_type": "code", + "source": [ + "fig, axes = plt.subplots(1,2, figsize=(10,5))\n", + "fig.subplots_adjust(wspace=0.2)\n", + "data = [r.experiment.data for r in mtbo_results_list]\n", + "big_data= pd.concat(data)\n", + "big_data[\"nucleophile\", \"METADATA\"] = \"Phenylethylamine (optimization)\"\n", + "pt_data = datasets[\"Morpholine\"].copy()\n", + "pt_data[(\"task\", \"METADATA\")] = 0\n", + "pt_data = pt_data.replace(\"≥90%\", 0.9)\n", + "pt_data[\"nucleophile\", \"METADATA\"] = \"Morpholine (pretraining)\"\n", + "big_data = big_data.append(pt_data)\n", + "big_data[\"yield\"] = big_data[\"yield\"].astype(float)\n", + "# Counts of different catalysts grouped by nucleophile\n", + "(big_data.\n", + " groupby([\"nucleophile\", \"catalyst\"])\n", + " [\"yield\"].\n", + " mean().\n", + " unstack(0).\n", + " plot.bar(ax=axes[0])\n", + ")\n", + "# Counts of different bases grouped by nucleophile\n", + "(big_data.\n", + " groupby([\"nucleophile\", \"base\"])\n", + " [\"yield\"].\n", + " mean().\n", + " unstack(0).\n", + " plot.bar(ax=axes[1])\n", + ")\n", + "for ax in axes:\n", + " ax.set_ylabel(\"average yield\")\n", + "fig.tight_layout()\n", + "fig.savefig(\"figures/yield_distribution_similar_catalyst_base.png\", dpi=300)" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": [ + "iVBORw0KGgoAAAANSUhEUgAAAsgAAAFgCAYAAACmDI9oAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA7CklEQVR4nO3deZzVddn4/9cFLpALmEu3SgWUCyojIOAWbrmVivsvzSVvw7K0bNHirlTyzm7trrSwr1u5Zu7damZlFmSkJjsqGqKORZrhRm4oy/X74xymzwwDzMCcZWZez8eDB+ezX+cc5uKa9+f9eb8jM5EkSZJU0qPWAUiSJEn1xAJZkiRJKrBAliRJkgoskCVJkqQCC2RJkiSpYK1aB9Bem2yySfbv37/WYUjSGpk6deqLmblpreNYXeZiSV3BinJxpyuQ+/fvz5QpU2odhiStkYh4ttYxrAlzsaSuYEW52C4WkiRJUoEFsiRJklRggSxJkiQVdLo+yKpfixYtYt68eSxcuLDWoUh1o1evXvTr14+111671qGomzAXS8trby62QFaHmTdvHhtssAH9+/cnImodjlRzmclLL73EvHnzGDBgQK3DUTdhLpaaW51cbBcLdZiFCxey8cYbm5Clsohg4403tiVPVWUulppbnVxsgawOZUKWmvNnQrXgvzupufb+TFggS5IkSQUWyFIns9dee3X4BA0nnXQSt91223Lrn3vuOY466igAJk6cyMEHH9yh15Wkzsg83PVZIEtaoS222KLVhC1Jqg7zcG1YINfSuD7V+aO60NjYyKBBgzjllFPYfvvt2X///XnrrbeatUS8+OKL9O/fH4AlS5Zw5plnssMOO9DQ0MD48eOXO+e9997LrrvuyrBhwzj66KN5/fXXAfjd737H0KFDGTx4MCeffDJvv/02UJoe+Ctf+QqDBw9m5MiRzJ07t+lc999/P7vtthsDBw5sSsaNjY3ssMMOy133jTfe4OSTT2bkyJEMHTqUO++8s0M/K0lV9Nz0jvtT58zDaisLZKmKnnzySU477TQee+wx+vbty+23377Cfa+44goaGxuZMWMGs2bN4rjjjmu2/cUXX+Rb3/oW9913H9OmTWP48OF8//vfZ+HChZx00kncfPPNPPLIIyxevJhLL7206bg+ffrwyCOPcPrpp/OFL3yhaf3zzz/PpEmTuPvuuxk7duxK38f555/PPvvsw8MPP8yECRM466yzeOONN1bvQ5GkKjIPqy0skKUqGjBgAEOGDAFgp512orGxcYX73nfffXz6059mrbVKw5W/+93vbrb9oYceYvbs2ey+++4MGTKEa6+9lmeffZa//OUvDBgwgK233hqAT3ziE9x///1Nxx177LFNfz/44INN6w877DB69OjBdtttxwsvvLDS93HvvfdywQUXMGTIEPbaay8WLlzIX//61zZ/DpJUK+ZhtYUThUhVtO666za97tmzJ2+99RZrrbUWS5cuBWjXGI2ZyX777ceNN97YbP3MmTNXelxxqJvi62JsmbnKa99+++1ss802bY5XkuqBeVhtYQuyVGP9+/dn6tSpAM0exNhvv/24/PLLWbx4MQAvv/xys+N22WUX/vSnPzX1X3vjjTeYM2cO22yzDY2NjU3rr7/+evbcc8+m426++eamv3fdddfVivmAAw5g/PjxTQl8+vT673soSStiHlZLFshSjZ155plceumlDB06lBdffLFp/ZgxY3jf+95HQ0MDO+64Iz/72c+aHbfppptyzTXXcOyxx9LQ0MCuu+7KE088Qa9evbj66qs5+uijGTx4MD169ODUU09tOu6VV16hoaGBH/zgB1x00UWrFfPZZ5/NokWLaGhoYPvtt+fss89evTcvSXXAPKyWYlVN+PVm+PDh2dFjD9ZMtUaYGLegKpd5/PHHGTRoUFWupdXTv39/pkyZwiabbFLrULqV1n42ImJqZg6vUUhrrEvl4i6m3bm4I0ef2GJox52rizIP1057crEtyJIkSVKBD+lJ3cjKntaWJFWeebhzsAVZkiRJKrBAliRJkgoskCVJkqQCC2RJkiSpwIf0VDH9x/6yQ8/XeMFBq9wnIjjuuOP46U9/CsDixYvZfPPN2Xnnnbn77rvXPIbGRg4++GAeffTRNh9z0kkncfDBB3PUUUcxZswYvvSlL7HddtutcSzTp0/nkksu4Sc/+ckan6uxsZEHHniAj3/84+0+drfdduOBBx5Y6T5r8r7nz5/PCSecwK9//et2HyupArn481usch9z8eoxF9cPW5DVpay33no8+uijvPXWWwD89re/Zcstt2zXOZbNmFQJP/7xjzskIQN8+9vf5vOf/3yb91/Z+2psbFxuAPy2HAesMiHDmr3vTTfdlM0335w//elPq3W8pOozF6+YubhzsEBWl/PRj36UX/6y1GJy4403cuyxxzZte/nllznssMNoaGhgl112YdasWQCMGzeOE044gd13350TTjiBa665hkMPPZS99tqLrbbaim9+85tN51iyZAmnnHIK22+/Pfvvv3/TfwAzZsxgl112oaGhgcMPP5xXXnlludj22msvlk2usP766/P1r3+dHXfckV122YUXXngBKP2WfuSRRzJixAhGjBjRajJ67bXXmDVrFjvuuGOz+HfddVe22morrrzySgAmTpzIqFGjGD16NNtttx1LlizhrLPOYsSIETQ0NHD55ZcDMHbsWP74xz8yZMgQLrroIq655hpGjx7NPvvsw4c//GFef/11PvzhDzNs2DAGDx7MnXfe2RTL+uuv33Stvfbai6OOOoptt92W4447rmkK1La876eeeopddtmFwYMH841vfKPpvACHHXYYN9xwQ1u+fkl1wlxsLu7MLJDV5RxzzDHcdNNNLFy4kFmzZrHzzjs3bTv33HMZOnQos2bN4tvf/jYnnnhi07bZs2dz3333ceONNwLw8MMPc/vttzNr1ixuvfXWpqTy5JNPctppp/HYY4/Rt29fbr/9dgBOPPFELrzwQmbNmsXgwYObJfLWvPHGG+yyyy7MnDmTPfbYoymRnnHGGXzxi19k8uTJ3H777YwZM2a5Y6dMmcIOO+zQbN2sWbP4/e9/z4MPPsh5553Hc889B8C0adP4wQ9+wJw5c/jJT35Cnz59mDx5MpMnT+bKK6/kmWee4YILLmDUqFHMmDGDL37xi03H3XbbbfzhD3+gV69e/N///R/Tpk1jwoQJfPnLX6a1WTinT5/OxRdfzOzZs3n66adb/Q9lZe/7jDPO4JFHHqFfv37Njhk+fDh//OMfV/p5Sqov5mJzcWdmgawup6GhgcbGRm688UY++tGPNts2adIkTjjhBAD22WcfXnrpJf71r38BMHr0aHr37t2073777cfGG29M7969OeKII5g0aRIAAwYMYMiQIQDstNNONDY2smDBAl599VX23HNPAD7xiU9w//33rzTOddZZh4MPPrjZeQDuu+8+Tj/9dIYMGcLo0aP517/+xeuvv97s2Oeff55NN9202bpDDz2U3r17s8kmm7D33nvz8MMPAzBy5EgGDBgAwL333st1113HkCFD2HnnnXnppZd48sknW41vv/32493vfjcAmcnXvvY1Ghoa2Hffffn73//e1NpQNHLkSPr160ePHj0YMmRIqwPir+h9P/jggxx99NEAy/W/22yzzZr+k5HUOZiLzcWdmQ/pqUsaPXo0Z555JhMnTuSll15q0zHrrbdes+WIaHV53XXXbVrXs2fPptt67bX22ms3nbNnz55N/cuWLl3KQw89RK9evVZ4bO/evVm4cGGb4i2+r8xk/PjxHHDAAc32nThx4nLXKB53ww03MH/+fKZOncraa69N//79l7s+LP/ZtNZnbkXve2UWLlzY7D9MSZ2Dudhc3FnZgqwu6eSTT+bcc89l8ODBzdaPGjWqqf/UxIkT2WSTTdhwww1bPcdvf/tbXn75Zd566y3uuOMOdt999xVer0+fPmy00UZNt56uv/76phaM9tp///0ZP3580/KMGTOW22fQoEHMnTu32bo777yThQsX8tJLLzFx4kRGjBix3HEHHHAAl156KYsWLQJgzpw5vPHGG2ywwQa89tprK4xpwYIFbLbZZqy99tpMmDCBZ599drXe28rssssuTbdIb7rppmbb5syZs9xtTEn1z1xsLu6sbEFWxbRlWLZK6devX6tPFY8bN46TTz6ZhoYG3vWud3Httdeu8BwjR47kyCOPZN68eRx//PEMHz681dtUy1x77bWceuqpvPnmmwwcOJCrr756tWL/4Q9/yGmnnUZDQwOLFy9mjz324LLLLmu2z7bbbsuCBQt47bXX2GCDDYDS7cy9996bF198kbPPPpstttiCOXPmNDtuzJgxNDY2MmzYMDKTTTfdlDvuuIOGhgZ69uzJjjvuyEknncRGG23U7LjjjjuOQw45hMGDBzN8+HC23Xbb1XpvK3PxxRdz/PHHc/7553PggQfSp0+fpm0TJkzgoINq9+9J6sxWmYufm16xa5uLzcWdVbTWubueDR8+PJd10O/0xvVZ9T4dcp0FVbnM448/zqBBg6pyrUq75pprmDJlCpdcckmtQ1mhiy66iA022IAxY8Ywbtw41l9/fc4888xah7Xa3nzzTXr37k1EcNNNN3HjjTc2PaG9xx57cOeddy73n0Vn0drPRkRMzczhNQppjXWpXNzFtDsXd2SBvMXQjjsX5uJaMBeX2IIsdVKf+cxnuPXWW2sdRoeZOnUqp59+OplJ3759ueqqq4DSUEtf+tKXOm1CltS1mYu7JluQa8kWZKlbsAVZ1dSVWpCljtSeXFzRh/Qi4sCI+EtEzI2Isa1sf19ETIiI6RExKyI+2tp5JEmSpGqpWIEcET2BHwEfAbYDjo2IlvMbfgO4JTOHAscA/69S8UiSJEltUckW5JHA3Mx8OjPfAW4CDm2xTwLLxnXpA3SP0aclSZJUtyr5kN6WwN8Ky/OAnVvsMw64NyI+B6wH7FvBeCRJkqRVqvUoFscC12Tm9yJiV+D6iNghM5cWd4qITwGfAnjf+95XgzC1Wjr6IcQ2PGzYs2dPBg8ezOLFixk0aBDXXnst//znPzn44IN59NFHOzaegokTJ/Ld736Xu+++e4X7zJgxg+eee65pytX2DgfU2NjYYe/jsssu413vehcnnnjiGp/rrbfe4sADD+T3v/89PXv2bPfx3/72t/na177WtLzbbrvxwAMPtPn41X0vEydOZJ111mG33XZbo/MAPPLII3zve9/jmmuuafexUsV1dC7+1MRV7mIubhtzcf3m4kp2sfg78N7Ccr/yuqJPArcAZOaDQC9gk5YnyswrMnN4Zg5vOee5VNS7d29mzJjBo48+yjrrrLPcoO61NGPGDO65555ahwHAqaee2iEJGeCqq67iiCOOWK2EDKWkXNSehAyr/14mTpzY7Fpr8pkMHjyYefPm8de//nW1jq80H5hWtZmL28ZcXL+5uJIF8mRgq4gYEBHrUHoI764W+/wV+DBARAyiVCDPr2BM6kZGjRrVNAXokiVLOOWUU9h+++3Zf//9eeuttwB46qmnOPDAA9lpp50YNWoUTzzxBAAnnXQSn//859ltt90YOHAgt912GwAnnngid9xxR9M1jjvuuKYB1Jd54403OPnkkxk5ciRDhw7lzjvv5J133uGcc87h5ptvZsiQIdx8880AzJ49m7322ouBAwfywx/+EIBzzjmHiy++uOl8X//61/nBD37Q7BqNjY2MGjWKYcOGMWzYsKbkMnHiRPbcc08OPfRQBg4cyNixY7nhhhsYOXIkgwcP5qmnngJKLSbf/e53Adhrr7346le/ysiRI9l6662bpmhdsmQJZ511FiNGjKChoYHLL7+81c/5hhtu4NBDS48XZCZnnXUWO+ywA4MHD256nxMnTmSPPfbgoIMOYptttuHUU09l6dKljB07lrfeeoshQ4Zw3HHHAbD++uuv1nt57rnnGDJkSNOfnj178uyzz/KLX/yCnXfemaFDh7Lvvvvywgsv0NjYyGWXXcZFF13EkCFD+OMf/9jsM5kxYwa77LILDQ0NHH744bzyyisr/awADjnkkOWmZa0HPjCtWjMXm4s7Yy6uWIGcmYuB04HfAI9TSr6PRcR5ETG6vNuXgVMiYiZwI3BSdraBmVWXFi9ezK9+9SsGDx4MwJNPPslpp53GY489Rt++fZvmmf/Upz7F+PHjmTp1Kt/97nf57Gc/23SO559/nkmTJnH33Xczdmyp0e2Tn/xk062bBQsW8MADDyw37eb555/PPvvsw8MPP8yECRM466yzWLRoEeeddx4f+9jHmDFjBh/72McAeOKJJ/jNb37Dww8/zDe/+U0WLVrEySefzHXXXQfA0qVLuemmmzj++OObXWOzzTbjt7/9LdOmTePmm29uNpXrzJkzueyyy3j88ce5/vrrmTNnDg8//DBjxoxh/PjxK/y8Hn74YS6++GK++c1vAvCTn/yEPn36MHnyZCZPnsyVV17JM8880+y4d955h6effpr+/fsD8POf/5wZM2Ywc+ZM7rvvPs466yyef/55AB5++GHGjx/P7Nmzeeqpp/j5z3/OBRdc0NTSdMMNNywXV3veyxZbbMGMGTOYMWMGp5xyCkceeSTvf//7+dCHPsRDDz3E9OnTOeaYY/jOd75D//79OfXUU/niF7/IjBkzGDVqVLNznXjiiVx44YXMmjWLwYMHN30mK/qsAIYPH94sSdcRH5hWzZiLzcWdNRdXtA9yZt4D3NNi3TmF17OB3SsZg7qXZb8BQ6nV4pOf/CTPPfccAwYMaFq/00470djYyOuvv84DDzzA0Ucf3XT822+/3fT6sMMOo0ePHmy33Xa88MILAOy555589rOfZf78+dx+++0ceeSRrLVW8x+je++9l7vuuqvpN+CFCxeu8HbPQQcdxLrrrsu6667LZpttxgsvvED//v3ZeOONmT59Oi+88AJDhw5l44035rXXXms6btGiRZx++unMmDGDnj17MmfOnKZtI0aMYPPNNwfgAx/4APvvvz9QuvU0YcKEVuM44ogjmn02y97HrFmzmlpsFixYwJNPPsmAAQOajnvxxRfp27dv0/KkSZM49thj6dmzJ+95z3vYc889mTx5MhtuuCEjR45k4MCBABx77LFMmjSJo446qtV41uS9/OlPf+LKK69k0qRJAMybN4+PfexjPP/887zzzjvN4m/NggULePXVV9lzzz0B+MQnPtHs30hrnxWU/qN87rm6rCs77IFpnwdRW5mLzcWdPRfX+iE9qUMt+w24pXXXXbfpdc+ePXnrrbdYunQpffv2bXX/lscUb2yceOKJ/PSnP+Wmm27i6quvXu64zOT2229nm222abb+z3/+8yrjWrx4MQBjxozhmmuu4R//+Acnn3zycsdddNFFvOc972HmzJksXbqUXr16tXrOHj16NC336NGj6fwriqMYQ2Yyfvx4DjjggFaPgdLnvXDhwhVuL4qIlS6vLC5o23t5/vnn+eQnP8ldd93VdHvwc5/7HF/60pcYPXo0EydOZNy4cW2Kd1UxFT8rKP3n27t37zU6dw216YHpzLwCuAJKM+nVIE51EuZic3Fnz8UVnUlPqmcbbrghAwYM4NZbbwVKSWjmzJmrPO6kk05q6pe23XYtu3LCAQccwPjx45sS+fTppWlcN9hgg2YtDytz+OGH8+tf/5rJkye3mhQXLFjA5ptvTo8ePbj++utZsmRJm87bHgcccACXXnopixYtAmDOnDm88cYbzfbZaKONWLJkSVNiHjVqFDfffDNLlixh/vz53H///YwcORIo3dZ75plnWLp0KTfffDMf+tCHAFh77bWbrrEmFi1axNFHH82FF17I1ltv3bR+wYIFbLnllgBce+21TetX9H306dOHjTbaqOkW3fXXX9/UgrEyc+bMYYcddljTt1EJHfbAtFQJ5uKVMxfXJhfbgqzKacOwbLV2ww038JnPfIZvfetbLFq0iGOOOYYdd9xxpce85z3vYdCgQRx22GGtbj/77LP5whe+QENDA0uXLmXAgAHcfffd7L333lxwwQUMGTKE//qv/1rpNdZZZx323ntv+vbt2+oTyZ/97Gc58sgjue666zjwwANZb7312vye22rMmDE0NjYybNgwMpNNN9202UMxy+y///5MmjSJfffdl8MPP5wHH3yQHXfckYjgO9/5Dv/xH//BE088wYgRIzj99NOZO3cue++9N4cffjhQ6nvY0NDAsGHDWu371lYPPPAAU6ZM4dxzz+Xcc88F4J577mHcuHEcffTRbLTRRuyzzz5NffcOOeQQjjrqKO68887l+tBde+21nHrqqbz55psMHDiw1dapliZMmLBcH8g60fTANKXC+Bjg4y32WfbA9DU+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\n" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ], + "execution_count": 72, + "metadata": { + "collapsed": false, + "outputHidden": false, + "inputHidden": false + } + }, + { + "cell_type": "code", + "source": [ + "fig, axes = plt.subplots(1,3, figsize=(10,5))\n", + "fig.subplots_adjust(wspace=0.2)\n", + "data = [r.experiment.data for r in mtbo_results_list]\n", + "big_data= pd.concat(data)\n", + "big_data[\"nucleophile\", \"METADATA\"] = \"Phenylethylamine (optimization)\"\n", + "pt_data = datasets[\"Morpholine\"].copy()\n", + "pt_data[(\"task\", \"METADATA\")] = 0\n", + "pt_data = pt_data.replace(\"≥90%\", 0.9)\n", + "pt_data[\"nucleophile\", \"METADATA\"] = \"Morpholine (pretraining)\"\n", + "big_data = big_data.append(pt_data)\n", + "plots = [\"base_equivalents\", \"temperature\", \"t_res\"]\n", + "for col in plots:\n", + " big_data[col, \"DATA\"] = big_data[col].astype(float)\n", + "# Counts of different catalysts grouped by nucleophile\n", + "(big_data.\n", + " groupby([\"nucleophile\",])\n", + " [\"base_equivalents\"].\n", + " mean().\n", + "# unstack(0).\n", + " plot.bar(ax=axes[0])\n", + ")\n", + "# Counts of different bases grouped by nucleophile\n", + "(big_data.\n", + " groupby([\"nucleophile\"])\n", + " [\"temperature\"].\n", + " mean().\n", + "# unstack(0).\n", + " plot.bar(ax=axes[1])\n", + ")\n", + "(big_data.\n", + " groupby([\"nucleophile\"])\n", + " [\"t_res\"].\n", + " mean().\n", + "# unstack(0).\n", + " plot.bar(ax=axes[2])\n", + ")\n", + "for plot, ax in zip(plots, axes):\n", + " ax.set_ylabel(f\"average {plot}\")\n", + "fig.tight_layout()\n", + "fig.savefig(\"figures/yield_distribution_similar_equiv_time_temp.png\", dpi=300)" + ], + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": [ + "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\n" + ] + }, + "metadata": { + "needs_background": "light" + } + } + ], + "execution_count": 83, + "metadata": { + "collapsed": false, + "outputHidden": false, + "inputHidden": false + } + }, + { + "cell_type": "code", + "source": [ + "big_data.data_columsn" + ], + "outputs": [ + { + "output_type": "error", + "ename": "AttributeError", + "evalue": "'DataSet' object has no attribute 'data_columsn'", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mbig_data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata_columsn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/Library/Caches/pypoetry/virtualenvs/summit-TfmmV07p-py3.7/lib/python3.7/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m__getattr__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 5460\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_info_axis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_can_hold_identifiers_and_holds_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5461\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 5462\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__getattribute__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5463\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5464\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__setattr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mAttributeError\u001b[0m: 'DataSet' object has no attribute 'data_columsn'" + ] + } + ], + "execution_count": 78, + "metadata": { + "collapsed": false, + "outputHidden": false, + "inputHidden": false + } + }, + { + "cell_type": "code", + "source": [], + "outputs": [], + "execution_count": null, + "metadata": { + "collapsed": false, + "outputHidden": false, + "inputHidden": false + } } - ], - "source": [ - "stbo_results = [summit.Runner.load(f\"data/cross_coupling_similar/stbo_cn_noise_repeat_{i}.json\") \n", - " for i in range(N_REPEATS)]\n", - "mtbo_results_list = [summit.Runner.load(f\"data/cross_coupling_similar/mtbo_pre-train_repeat_{i}.json\") \n", - " for i in range(N_REPEATS)]\n", - "fig, ax = make_comparison_plot(\n", - " dict(results=stbo_results, label=\"STBO\"),\n", - " dict(results=mtbo_results_list,label=f\"\"\"MTBO, n={datasets[\"Morpholine\"].shape[0]}\"\"\")\n", - ")\n", - "fig.savefig(\"figures/stbo_mtbo_cn_similar.png\", bbox_inches='tight', dpi=300)" - ] - } - ], - "metadata": { - "kernel_info": { - "name": "python37364bitsummittfmmv07ppy37venv6fc212842bc44e839a51e6623a646abd" - }, - "kernelspec": { - "display_name": "Python 3.7.3 64-bit ('summit-TfmmV07p-py3.7': venv)", - "language": "python", - "name": "python37364bitsummittfmmv07ppy37venv6fc212842bc44e839a51e6623a646abd" - }, - "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.7.3" - }, - "nteract": { - "version": "0.12.3" + ], + "metadata": { + "kernel_info": { + "name": "python37364bitsummittfmmv07ppy37venv6fc212842bc44e839a51e6623a646abd" + }, + "kernelspec": { + "name": "python37364bitsummittfmmv07ppy37venv6fc212842bc44e839a51e6623a646abd", + "language": "python", + "display_name": "Python 3.7.3 64-bit ('summit-TfmmV07p-py3.7': venv)" + }, + "language_info": { + "name": "python", + "version": "3.7.3", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "nbconvert_exporter": "python", + "file_extension": ".py" + }, + "nteract": { + "version": "0.12.3" + }, + "toc-autonumbering": true }, - "toc-autonumbering": true - }, - "nbformat": 4, - "nbformat_minor": 4 -} + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file