From dc35437b0ebdcf1726c3d13bf9361ba563eaa169 Mon Sep 17 00:00:00 2001 From: "Peter St. John" Date: Tue, 25 Jan 2022 18:31:52 -0700 Subject: [PATCH] adding analysis notebook --- examples/code_ocean/analyze_results.ipynb | 4317 +++++++++++++++++++++ 1 file changed, 4317 insertions(+) create mode 100644 examples/code_ocean/analyze_results.ipynb diff --git a/examples/code_ocean/analyze_results.ipynb b/examples/code_ocean/analyze_results.ipynb new file mode 100644 index 00000000..7e882199 --- /dev/null +++ b/examples/code_ocean/analyze_results.ipynb @@ -0,0 +1,4317 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 48, + "id": "3d559fa3-70b8-4f76-adc7-1b4be4162df1", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import pandas as pd\n", + "import rdkit.Chem\n", + "\n", + "from rlmolecule.sql.run_config import RunConfig\n", + "from stable_radical_problem import construct_problem\n", + "from rlmolecule.sql.tables import GameStore, RewardStore\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "sns.set(\n", + " context='paper',\n", + " font_scale=8/8.8,\n", + " style='ticks',\n", + " color_codes=True,\n", + " rc={'legend.frameon': False}\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "82d104dc-f0f6-4161-93fb-42063a4c2275", + "metadata": {}, + "outputs": [], + "source": [ + "config = RunConfig('config_local.yaml')\n", + "problem = construct_problem(config)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "1ae17713-e8b5-47c9-bc5a-b1a784ad6ccb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1124, 8)" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_games = pd.read_sql(\n", + " problem.session\n", + " .query(GameStore)\n", + " .filter_by(run_id=config.run_id)\n", + " .statement, problem.session.bind)\n", + "\n", + "\n", + "df_games['time_hours'] = (\n", + " (df_games.time - df_games.time.min())\n", + " .apply(lambda x: x.total_seconds() / 3600)\n", + ")\n", + "df_games = df_games.sort_values('time_hours')\n", + "df_games.reset_index(drop=True, inplace=True)\n", + "df_games.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "2fbfd826-a399-4983-9ce1-6e3c4fe55baa", + "metadata": {}, + "outputs": [], + "source": [ + "policy_dir = os.path.join(\n", + " config.train_config.get('policy_checkpoint_dir'),\n", + " config.run_id)\n", + "\n", + "log = pd.read_csv(os.path.join(policy_dir, \"log.csv\"))\n", + "log['time'] = pd.to_datetime(log.time) - df.time.min()\n", + "log['time_hours'] = (log.time).apply(lambda x: x.total_seconds() / 3600)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "2eb05657-96a6-4d08-94ca-08c225b2413b", + "metadata": {}, + "outputs": [], + "source": [ + "all_final_molecules = (\n", + " problem.session\n", + " .query(RewardStore)\n", + " .filter_by(run_id=problem.run_id)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "d12b3e6c-6fe7-4d4e-aac4-1cd459871639", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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F198EUVR/JbAVqxYweeff87ChQvrLXdMTAz9+vVj5cqVzJ8/3yv0Kisr+frrr71lvummm3C5XDzxxBPExcVx+umno9fruf766ykoKOCzzz7jlVdeYdWqVRgMBkaPHk2/fv347LPPOHbsWL3laM1IkkT8kKm1gsftAq2uxfrZN998g8Ph8G4bfPHFF7hcLkaPHh12GsOHD+eVV14hLy/Pb3nuo48+Ii0tLawJTChGjBjB888/z8qVK/0mY55bAoYOHUpubi7XX389zzzzDAMGDKB379707t2bdevWkZ+fT3V1NWeffTazZs3iqquuon379lxyySUcPHiwVV1902wufnJyclRNaKFWJW4Nyw2C2oFCr9PWHzGKzJgxgwceeIBPP/3UzygBajdiP/74Y/r27UtmZia5ubk8++yzSJKE3W5XTW/ixIk88MAD3H333fzpT38iPz+fJ554wuvWyRPHYyY9f/58unXrxk8//cTjjz/OuHHjwp4l33LLLVx99dVcc801XHrppTidTpYtW4bD4eCGG24AaveI7rnnHhYtWsSECROoqKjgiSeeoHPnzvTq1Qu9Xs/DDz/M9ddfz6WXXopWq+XNN9/EYDBwyimnNLJVWxeSJIGuZSee+fn5zJs3j8svv5xjx47xn//8h3HjxjFy5Miw05gzZw4fffQRc+bM4YYbbiApKYkPPviATZs2sXDhwiaNaxMmTGDkyJHcc889FBQU0KdPH77//nuee+45zj33XLp3705NTQ0mk4nbb7+dP//5z6SmprJx40Z27tzJ5Zdfjslkom/fvjzxxBPo9XpycnLYv38/77//PtOmTWt02SJN1AXRV199xccff0xhYaHqjFWSpDrPgAhOPhITE5k4cSLr1q0LWoZ68MEH+de//sW//vUvoNZ57X333cdHH33Eli1bVNPr0qULixYt4umnn2bu3Ll069bNLw2onQwtW7aMRx99lGeffZbi4mIyMjK48sorG7RvOXr0aJYvX85jjz3GX//6VwwGA8OGDWPRokX06FFrYnzRRRfhdDp58803ef311zGZTIwePZrbbrsNvV5Pr169eOaZZ3jyySf561//itvtpl+/frz44ot+xj2CpjFjxgzi4+O56aabiImJ4dxzz+Xmm29uUBppaWm88cYbPPLII9x///04nU569erFU089xZQpU5pUPkmSePbZ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tKoRURraJg6Hg2effZbp06czaNAgpk2bxhNPPBFU37Fjx5KTkxP0V1hYGO0qRYSGtsvevXtV6zt9+nS/eCdLX1mxYoVqe3j+3n//fW/ctt5XAI4dO8awYcPYvHlzvXFbckwRN7S2MNu2bWP+/Pmcfvrp3HTTTWzdupUlS5YgyzLz5s1Tfeezzz7jjjvu4PLLL2f8+PGsXbuWv//97xiNRs466ywADh06xJw5cxg8eDBLly5l7969LFmyhMrKSv797383ZxUbTGPaZOHChXzwwQfMnz+f/v37s337dp544gmOHj3KwoULASgqKqKoqIg777yTQYMG+b2fmJgY5Vo1nca0y6+//grAK6+8gtFo9D73vQ76ZOorkyZN4q233vJ7pigKd999N1arlYkTJwJtv68AHDlyhKuvvprKysp647b4mKIIWpSrrrpKOf/88/2eLV68WBk0aJBit9tV35k6daryl7/8xe/ZjTfeqJx66qnez3fffbcyfvx4paamxvvsv//9r9KrVy/l8OHDEaxB5Glom5SWlio5OTnKc8895/f8ueeeU3r27KkUFxcriqIo69atU3r27Nnq6x+KxvSVhx56SDnllFPqTPdk6itqvPTSS0qvXr2UH3/80fusLfcVt9utvPvuu8qIESOUESNGKD179lQ2bdpU5zstPaaIpbkWxOFwsHnzZqZOner3fNq0adhsNrZs2RL0zuHDhzlw4IDqO4cOHWL//v0AbNiwgUmTJmEwGLxxpk+fjizLbNiwIQq1iQyNaZPKykouuugiJk+e7Pe8c+fOAOTl5QG12kF8fDwdOnSITuGjSGPaBWDnzp307t27zrRPpr4SSGFhIUuXLuXiiy9m4MCB3udtua/s2rWLe++9l3POOYfFixfXG781jClCELUgeXl5OJ1O74DpoVOnTgAcOHAg6J29e/cC1PlOdXU1R44coUuXLn5xkpOTiY2NVU23tdCYNsnKyuLee++la9eufs/XrFmDXq/3prVz507i4+O54YYbGDp0KIMHD+bmm2+moKAgGlWJKI1pF6gdUCsrK5k1axb9+/dn7NixPPzwwzidToCTrq8E8thjj6HVarnpppv8nrflvtKuXTvWrFnDnXfe6bcEG4rWMKYIQdSCVFRUABAbG+v33GKxAGC1WoPe8az31vVOqHQ98dTSbS00pk3UWL16NR9++CGz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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axs = plt.subplots(sharex=True, nrows=2, figsize=(2.75, 2.5), dpi=150)\n", + "\n", + "axs[0].plot(df_games.time_hours, df_games.raw_reward, '.', ms=1, label='games', rasterized=True, alpha=0.25)\n", + "axs[0].plot(df_games.time_hours, df_games.raw_reward.rolling(250, min_periods=50).quantile(.75), label='$r_{75}$')\n", + "\n", + "if log is not None:\n", + " axs[1].plot(log.time_hours, log.policy_wrapper_loss, '.-', label='value loss')\n", + " axs[1].plot(log.time_hours, log.policy_wrapper_1_loss, '.-', label='prior loss')\n", + "\n", + "leg = axs[0].legend(loc='upper right', ncol=2, borderpad=0, borderaxespad=0.3, bbox_to_anchor=(1., 1.1), markerscale=3)\n", + "# for lh in leg.legendHandles: \n", + "# lh._legmarker.set_alpha(1)\n", + " \n", + "axs[1].legend(loc='upper right', ncol=2, borderpad=None, borderaxespad=0.3, bbox_to_anchor=(1., 1.1))\n", + "\n", + "\n", + "axs[0].set_ylabel('Reward')\n", + "axs[1].set_ylabel('Policy Training')\n", + "axs[1].set_xlabel('Time (hours)')\n", + "\n", + "axs[0].set_ylim([0, 250])\n", + "axs[1].set_ylim([0, 1.])\n", + "# axs[1].set_xlim([-.01, 4])\n", + "\n", + "plt.tight_layout()\n", + "sns.despine(offset=5, trim=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "651f858f-d251-4281-beba-491254cf086c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(43, 6)" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_rewards = pd.read_sql(\n", + " problem.session.query(RewardStore)\n", + " .filter_by(run_id=run_config.run_id)\n", + " .filter(RewardStore.reward >= 195)\n", + " .statement, problem.session.bind)\n", + "\n", + "df_rewards.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "192e9d9b-df3d-401d-86e7-b464e2e18eae", + "metadata": {}, + "outputs": [], + "source": [ + "def process(x):\n", + " mol = rdkit.Chem.MolFromSmiles(x)\n", + " for atom in mol.GetAtoms():\n", + " if atom.GetNumRadicalElectrons() == 1:\n", + " radical_idx = atom.GetIdx()\n", + " symbol = atom.GetSymbol()\n", + " break \n", + " else:\n", + " radical_idx = None\n", + " symbol = None\n", + " \n", + " return pd.Series({'radical_idx': radical_idx,\n", + " 'symbol': symbol,\n", + " 'num_atoms': mol.GetNumAtoms()})\n", + "\n", + "\n", + "df_data = pd.DataFrame(df_rewards.data.tolist())\n", + "df_data['ionization_energy'] = df_data.ionization_energy.astype(float)\n", + "df_data['electron_affinity'] = df_data.electron_affinity.astype(float)\n", + "df_data['max_spin'] = df_data.max_spin.astype(float)\n", + "df_data['spin_buried_vol'] = df_data.spin_buried_vol.astype(float)\n", + "df_rewards = df_rewards.join(df_data)\n", + "\n", + "annotated_rewards = df_rewards.join(df_rewards.smiles.apply(process))\n", + "annotated_rewards = annotated_rewards.sort_values(\n", + " ['num_atoms', 'reward'], ascending=[True, False])" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "202ce6d3-487a-4c88-891d-d83011a536d3", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "\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", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from rdkit.Chem.Draw import MolsToGridImage, rdMolDraw2D\n", + "from rdkit.Chem.Draw import IPythonConsole\n", + "IPythonConsole.drawOptions.legendFontSize = 60\n", + "IPythonConsole.drawOptions.addAtomIndices = False\n", + "\n", + "img = IPythonConsole.ShowMols(\n", + " annotated_rewards.smiles.apply(\n", + " rdkit.Chem.MolFromSmiles), molsPerRow=4, subImgSize=(200, 200),\n", + " legends=annotated_rewards.apply(\n", + " lambda x: f'{x.smiles} ({x.num_atoms})\\n'\n", + " f'IE: {x.ionization_energy:.2f}, EA: {x.electron_affinity:.2f}\\n'\n", + " f'spin: {x.max_spin:.2f}, bv: {x.spin_buried_vol:.0f}', 1).values.tolist(),\n", + " highlightAtomLists=[[i] for i in annotated_rewards.radical_idx],\n", + " useSVG=True)\n", + "\n", + "img" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.8.10 64-bit ('rlmol': conda)", + "language": "python", + "name": "python3810jvsc74a57bd0114d3f206ebe7f7a204130250ab8ab1dce9760d08c8e557a7a3306f441e54354" + }, + "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.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}