{ "cells": [ { "cell_type": "markdown", "id": "24a21473-e270-430f-87d2-25f4f5bd7596", "metadata": {}, "source": [ "### Multiple Models and/or Tasks\n", "\n", "An important feature of Ledidi is that it can use multiple models in the design process to create edits that control multiple characteristics simultaneously. This capability is practically very useful because, usually, there actually are multiple characteristics that one cares about, even if for many of them the goal is to keep those characteristics the same as before editing. For example, if one wants to increase the binding of MYC in a promoter they usually do not want to do it at the expense of *everything else* including transcription. Rather, they want to increase MYC binding while keeping ~most other aspects the same.\n", "\n", "Broadly, these sorts of multi-characteristic designs fall into three related categories:\n", "\n", "1. cell type-specific characteristics, where each model or task predicts the same activity but in a different cellular context\n", "\n", "2. cross-modal characteristics, where each model or task predicts a different form of activity, usually within the same cellular context\n", "\n", "3. misc. design properties, where the models are not necessarily predicting genomic activity directly but rather are predicting something related to how easy the editing process will be for those edits, the likelihood of off-target effects, or whether the edits are still \"in-distribution\" to the target genome\n", "\n", "Using multiple models or tasks is conceptually straightforward: at each step, the edited sequences are passed through the provided model(s) and the loss is calculated for each model or target as specified by the user. These losses are then combined into a single output loss and the gradient is calculated by combining the input and output losses as before. This single gradient update is applied to the underlying weight matrix, and the process continues. Essentially, all that changes is that the output loss is now made up of multiple terms instead of being a single one. \n", "\n", "As a terminological note, we will use \"output\" to refer to either the predictions from multiple models and/or multiple tasks. Ledidi can use any number of outputs distributed across any number of models (though the number of models will probably be less than the number of outputs)." ] }, { "cell_type": "markdown", "id": "65f1a846-e1b3-43a8-bf0f-ea0a720fdcb9", "metadata": {}, "source": [ "#### Using All Tasks From One Model\n", "\n", "Potentially the simplest multi-output design process comes from when all tasks are used from a model. This usually only happens when a model is trained specifically to subsequently be used for design, but can also coincidentally arise in other situations. One such example is Malinois, which is a Basset-like model that was trained to predict cell type-specific MPRA activity in K562, HepG2, and SK-N-SH cell lines. After training this model, Gosai et al. use standard design methods like greedy substitution and FastSeqProp to design cell type-specific elements de novo." ] }, { "cell_type": "code", "execution_count": 1, "id": "50172333-14fe-4366-92bb-3d76a21d8ea9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import torch\n", "from boda.model import BassetBranched\n", "\n", "checkpoint = torch.load(\"../../../../models/malinois/torch_checkpoint.pt\", weights_only=False)\n", "malinois = BassetBranched(**vars(checkpoint['model_hparams']))\n", "malinois.load_state_dict(checkpoint['model_state_dict'])" ] }, { "cell_type": "markdown", "id": "b1567675-cd7f-45b3-9c22-c953e602f9b0", "metadata": {}, "source": [ "As our first demonstration of multi-output design, we can use Ledidi + Malinois to design elements with various properties. Gosai et al. introduce and use the idea of the \"min-gap\" loss to make elements as cell type-specific as possible. Here, we just show how to use multiple outputs. See the tutorial on alternate loss functions to see min-gap in action.\n", "\n", "First, we can generate a random sequence and see what Malinois predicts for it." ] }, { "cell_type": "code", "execution_count": 2, "id": "347586a8-2395-4ecb-b1b2-cfd0fa73f482", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([[ 0.0266, 0.1797, -0.1829]])" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from tangermeme.utils import random_one_hot\n", "from tangermeme.predict import predict\n", "\n", "X = random_one_hot((1, 4, 600), random_state=0).float()\n", "\n", "y_orig = predict(malinois, X)\n", "y_orig" ] }, { "cell_type": "markdown", "id": "c50f9938-e30c-44c3-88ae-e696ba3590c1", "metadata": {}, "source": [ "Looks like low values across the board.\n", "\n", "To specify a multi-output design all we need to do is create a tensor of desired outputs that is the same length as the number of outputs from the model. Here, Malinois makes three predictions so we need to specify three values. For shape reasons, the first dimension needs to remain 1, though, because internally Ledidi generates a batch of sequences and needs to calculate the loss for each one." ] }, { "cell_type": "code", "execution_count": 3, "id": "99b0cfdd-a3b8-46ff-b6e9-27469bb097c5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "torch.Size([1, 3])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_bar = torch.tensor([[0.0, 0.0, 5.0]])\n", "y_bar.shape" ] }, { "cell_type": "markdown", "id": "d1f5ab1f-5ecf-4a7e-a6ba-e3ba5b694766", "metadata": {}, "source": [ "Now, we can use Ledidi exactly as before. We pass in the model, the initial sequence `X`, and the desired outputs `y_bar`, where `y_bar` is now a tensor instead of a single number." ] }, { "cell_type": "code", "execution_count": 4, "id": "922794df-1250-4d0a-a96a-5de666f20a58", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iter=I\tinput_loss=0.0\toutput_loss=8.965\ttotal_loss=8.965\ttime=0.0\n", "iter=100\tinput_loss=34.12\toutput_loss=0.4832\ttotal_loss=3.896\ttime=1.767\n", "iter=200\tinput_loss=33.56\toutput_loss=0.2413\ttotal_loss=3.598\ttime=1.129\n", "iter=F\tinput_loss=29.75\toutput_loss=0.3809\ttotal_loss=3.356\ttime=3.728\n" ] } ], "source": [ "from ledidi import ledidi\n", "\n", "X_bar = ledidi(malinois, X, y_bar, verbose=True)[0:1]" ] }, { "cell_type": "markdown", "id": "1caeb19f-6233-4f68-8ff6-040e5d5c96fb", "metadata": {}, "source": [ "Looks like the output loss has significantly dropped, and not that many edits were necessary in order to achieve that because Ledidi is still using an input loss. \n", "\n", "Now, we can plot the predictions frm the Malinois model before and after editing the sequence." ] }, { "cell_type": "code", "execution_count": 5, "id": "94bd4f0a-fa0e-4439-b856-4b598939ab63", "metadata": {}, "outputs": [ { "data": { "image/png": "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R0emTp3Kvn37aNSoUY7bz833pTCTru98xM3NjaVLl7Jq1Sref/99WrZsyfXr15k2bRqdO3fONtrUy8uLqlWrsnXrViIiIvReUxSFjIwMvb+n7XPQoEFs3bqVkydP5riORqPR286T14FDQ0PZvXs306ZNo0+fPpQqVYp169bRu3dv5s+fn21bH3zwAatWrcr2l/VDkCWr5Z31p9FodK/5+/uzbds25s+fz9ChQwkICODAgQOMHTuWYcOGZWudt23bVpekIfO6XYsWLTh8+DAajYbU1FT++ecf2rRpg729vd5+mzZtSmpqKidOnABgz549lC9f/qk/9i/q+PHjula7IT/6xnqybow5bj8/Py5cuMCECRPYs2ePQQOeTpw4QVpaWrbPtmbNmpQuXTrH92RdEsiSdS39zp07z9xXYGAgN2/e5ObNm6SmpnL06FGaNGlC/fr12bdvH5DZyra1taV27drPjf1ZcooxNTWVmJgYg7fRtWtXoqOj2b17N+vXr8fGxob27ds/df1ly5YRHByMn58f1apVo3r16hw4cEDvcosxVCpVjsfxZD3/888/ODo6Zosrq3s+p8tHWXLzfSnMpEWdD/n5+eHn5wdknvlOnTqVhQsXMn/+fD766CPdek5OTvz+++/079+fUaNG8eOPP9K6dWsg82z4448/1tvuky2pJ/Xr148lS5bw/fffs2TJkmyvv/XWW3q3WgUHB+vdLubi4sJrr72mu13s8uXL9O/fnx9//JE33niDIkWK6NYtW7as7tie9N/uxZ9++olZs2bplkuXLs3OnTt1yzY2NjRp0kR3lh4bG8u7777LX3/9xe7du2nWrJlu3RIlSmTbX4kSJUhPTycpKYmkpCQyMjJ0PRk5iY2NBTKvF5YqVSrHdUwh62TsyRHjpnT37l3d5Ym4uDiDj3vIkCE4Ojqybt06li9fjlqtpk6dOnzwwQc5fp5Z2wcoXrx4ttdy+kwg81r6k7IuEaSkpDzzuLJOnA4cOECZMmXIyMigQYMGREdHM3v2bN1rtWrVwt7e/pnbep7cxvik0qVLExgYSFhYGLdv36ZTp044ODiQnJycbd0FCxYwZcoUevTowXvvvYebmxtWVlb8v//3/557/f5pHBwc9E5es44jNTVVtxwXF0eJEiWynTAWL14ca2tr3eebk9x8XwozSdT5nI2NDSNGjGDhwoU5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brB582ZmzpzJmjVrABg8eDAPHjxg3rx5hIeHU716dfr160dcXBwAmzZtYsaMGYwePZqwsDDc3d1ZunTpM/c7bdo05s+fz/Dhw9m0aRNTp06lRIkSAKxcuRKAhQsXsnfvXmbOnJnjNr777ju2bt3KlClTWL16NeXKlWPgwIG6uLJMnz6dcePGERYWhlqt5pNPPtG99sEHH+Dp6cmqVasIDw9n0KBBRvUi3L9/n127duHv768ru3jxIgMGDKBNmzasW7eO6dOnc/ToUb766isg84TojTfeICAgQO/4xo0bx5kzZ5gzZw4rVqxAURQGDx6s9/mkpKQwd+5cJk2axIYNGyhevDgff/wxx44dY/r06axbt4727dtnS/LGunv3LiNGjKBp06asWbOGbt26MW3atKeu37FjR95++22qVKnC3r172bt3Lx07dnzq+tOnT2fAgAGsWbOG8uXL8/7775ORkQHA0aNH+eKLL+jbty9r1qyhYcOG/Pzzz7k+FlEIKULkU2PHjlWGDRumWz558qRSr1495b333lMURVFmzJihVK9eXYmJidGts3//fqVWrVpKamqq3rZat26tLF++XFEURenevbvy+eef673erVs3pUuXLjnu+/Hjx4qvr6/y559/5hjnzZs3FW9vb+XcuXNPjT8xMVGpXr26sm7dOt3raWlpSuPGjZVffvlFURRF+eeffxRvb29l//79unV27dqleHt7KykpKYqiKEpAQIASHh7+tCrLpkWLFkr16tWVmjVrKn5+foq3t7fSrVs35dGjR7p1PvzwQ+Wzzz7Te9/hw4eVqlWr6vY7adIkpXfv3rrXr127pnh7eytHjx7VlT18+FDx9/dXNm3apCiKooSFhSne3t7K+fPndetERkYqPj4+yr179/T2169fP2XatGkGHceTf//884+iKIoybdo0pUOHDopWq9W95/vvv1e8vb11xxoWFqbUrl1b9/qMGTP0PvMs3t7eyvbt2xVF+d9n++Rnf/nyZcXb21u5cuWKoiiKMmrUKGXw4MF623j//ff19iXEs8g1apGv7dq1i4CAADIyMsjIyKBVq1Z89tlnute9vLwoVqyYbvns2bMkJSVRv359ve2kpKRw48YNAP7991969Oih93rNmjWf2v169epV0tLSaNCgQa6P48aNG6Snp1OrVi1dmY2NDf7+/vz777966/r4+Oj+nXW9NCYmBi8vL/r378+nn37K2rVradiwIe3bt+eVV1555r4HDBhA165dURSFu3fvMn36dAYPHswff/yBWq3m7NmzREZGsn79et17FEVBq9Vy69YtKlWqlG2b//77L9bW1tSoUUNX5ubmRoUKFfSOx8bGRu94zp49i6IotG/fXm97aWlpuLq6GnQcT/Lw8NDFU6NGDVQqle61mjVrPnN7xsjpM3n48CGVKlXi2rVrtG7dWm99f39/du3aZbL9i4JNErXI1+rXr8+ECROwtramZMmS2bp5HRwc9Ja1Wi3u7u4sXrw427ZyO7jLzs4uV+/LyZOJBDIT4n/LrK2ts62v1WoBGDlyJK+99hp///03u3fvZsaMGUyfPp02bdo8dZ9ubm6UK1cOgPLly+Pg4ED37t05ePAgDRs2RKvV0qNHD9215yeVKlUqx20qTxnN/t/jsbe311tWFAW1Wq3r1n/S80byP3kchsZjKk9+7/77meT0GeZ1PKJgkUQt8jUHB4en/jjnpHr16kRHR6NWqylTpkyO61SqVIkTJ04QFBSkKzt58uRTt1m+fHns7e35559/KFu2bLbXs37ENRrNU7fxyiuvYGNjw9GjR/Hy8gIyR6mfOXOGfv36GXJoOhUqVKBChQq89dZbjBkzhrCwsGcm6v/KGnWdkpICQLVq1bh8+bJR9Vy5cmUyMjI4efKkrpcgNjaW69ev59gCz/Lqq6+i0Wh4+PChSQdbVa5cOdu9z8/6TCHzc8tKti+iYsWK2Qb0nTlz5oW3KwoPGUwmCpWGDRtSs2ZN3nnnHfbs2cOtW7d0A5eyfkz79u1LWFgYq1at4tq1a8yYMYPLly8/dZt2dnYMGjSI77//njVr1nDjxg1OnDihG0RWvHhx7O3t2bNnD9HR0Tx+/DjbNhwdHenZsyffffcdu3fv5sqVK3z22WekpKQQGhpq0LGlpKTw5ZdfcvDgQW7fvs3Ro0c5ffr0MxMjQGJiIg8ePCAqKopTp07x/fff4+bmRkBAAACDBg3ixIkTTJw4kfPnz3P9+nV27NihG0yWk/Lly+suQxw5coQLFy7w4Ycf4uHhoRsFn5MKFSrQuXNnPvroI7Zt28bNmzc5deoU8+bN4++//zboOJ78S0hIAKBHjx7cuHGDyZMnc/XqVdavX6+7B/9pSpcuza1btzh//jwPHz4kLS3tmes/Te/evfn7779ZsGAB169fZ/ny5ezevTtbK1uIp5EWtShUVCoV8+bN48cff+STTz4hNjaWEiVKUKdOHd0o7Y4dO3Ljxg2mTp1Kamoq7dq1o2fPnuzdu/ep2x0+fDhqtZoZM2YQFRWFu7u77jq3tbU1n376KT/99BMzZsygTp06OXa9f/DBByiKwkcffURiYiK+vr7Mnz/f4Mk1rKysiIuLY+zYsURHR+Pm5kbbtm159913n/m+GTNmMGPGDACKFSuGn58fCxYswM3NDYCqVauyePFifvzxR3r16gVA2bJlnzkKGmDy5Ml8/fXXDB06lPT0dOrUqcO8efOeOwp98uTJzJkzhylTphAVFYWrqys1a9bUm4zkeceRpXv37nz55Zd4eXkxc+ZMJk+ezNKlS/H392f06NF6I+b/q127dmzfvp2+ffsSHx/P5MmTs10DN0Tt2rWZOHEis2bN4scff6Rx48a89dZb/PHHH0ZvSxROKkUulgghxEv16aefcvXq1efe9icESNe3EELkuV9//ZULFy4QGRnJ4sWLWbNmDcHBweYOS+QT0qIWQog89t5773Ho0CESExMpW7YsvXv3pmfPnuYOS+QTkqiFEEIICyZd30IIIYQFk0QthBBCWDBJ1EIIIYQFk0QthBBCWDBJ1EIIIYQFk0QthBBCWDBJ1EIIIYQFk0QthBBCWDBJ1EIIIYQF+/9nx8U89EAofAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "from matplotlib import pyplot as plt\n", "import seaborn; seaborn.set_style('whitegrid')\n", "\n", "y_hat = predict(malinois, X_bar)\n", "\n", "plt.figure(figsize=(5, 4))\n", "\n", "plt.title(\"SK-N-SH-Specific Design with Malinois\")\n", "plt.scatter(y_orig[0, 0], y_hat[0, 0], label=\"K562\")\n", "plt.scatter(y_orig[0, 1], y_hat[0, 1], label=\"HepG2\")\n", "plt.scatter(y_orig[0, 2], y_hat[0, 2], label=\"SK-N-SH\")\n", "plt.plot([0, 5], [0, 5], c='0.5', linestyle='--')\n", "\n", "plt.xlabel(\"Predictions Before Editing\")\n", "plt.ylabel(\"Predictions After Editing\")\n", "plt.legend()\n", "\n", "seaborn.despine(bottom=True, left=True)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "9870c8ae-9c84-4a36-9faa-8e3062979096", "metadata": {}, "source": [ "Ledidi decreased predictions in K562 and HepG2 and significantly increased them in SK-N-SH. The predictions are close to the desired values of 0, 0, and 5 respectively, but not exactly them because, again, Ledidi is balancing the desired output with the input loss. This balance between the input and output loss may become much more important when the output loss is a complicated mixture of terms. As a refresher, we can reduce the impact of the input loss by decreasing lambda." ] }, { "cell_type": "code", "execution_count": 6, "id": "e2e986f4-dbcf-4916-a2ac-92e7ef8b21ef", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iter=I\tinput_loss=0.0\toutput_loss=8.965\ttotal_loss=8.965\ttime=0.0\n", "iter=100\tinput_loss=144.9\toutput_loss=0.3198\ttotal_loss=0.4648\ttime=1.242\n", "iter=200\tinput_loss=109.2\toutput_loss=0.05467\ttotal_loss=0.1639\ttime=1.236\n", "iter=300\tinput_loss=97.88\toutput_loss=0.04219\ttotal_loss=0.1401\ttime=1.233\n", "iter=400\tinput_loss=106.8\toutput_loss=0.02486\ttotal_loss=0.1316\ttime=1.238\n", "iter=F\tinput_loss=98.25\toutput_loss=0.003906\ttotal_loss=0.1022\ttime=5.301\n" ] } ], "source": [ "X_bar = ledidi(malinois, X, y_bar, l=0.001, verbose=True)[0:1]" ] }, { "cell_type": "code", "execution_count": 7, "id": "60669e25-fea7-4dfa-9cf1-edd175ad766e", "metadata": {}, "outputs": [ { "data": { "image/png": "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zAeH/Pzzzxw6dEhn/x49esTHH39MvXr1qF27NoMGDdJ5hm9WU/Nff/1Fp06d8PHx4fbt26SlpfHdd9/RtGlT/Pz86NmzJwcOHHjmPjy5H0++nmxZ+fvvv2nfvj2+vr706dMn2xn4k03f4eHhzJ49m/Pnz+Pl5YWXlxfh4eGAbtP3rVu38PLyYsuWLfTp04fatWvTtWtXjh07prPu3377jebNm1O7dm3eeecdFi9erFczuxAgiVoUMjY2NqSnp2unb9y4wZ9//smsWbNYt24dAEOGDCE6OpoFCxYQHh5OrVq16NevH3FxcQBEREQwc+ZMRo0aRVhYGK6urqxateqZ2502bRqLFi1i+PDhREREMHXqVEqWLAnAmjVrAFiyZAm7d+9m1qxZOa7ju+++Y/PmzUyZMoW1a9dSoUIFBg0apI0ry/Tp0xk7dixhYWGYm5vz6aefat/78MMP8fDwIDQ0lPDwcAYPHmxQK8L9+/fZsWMHvr6+2nn//PMPAwcOpG3btqxfv57p06dz5MgRvv76ayDzgOjVV1/F399fZ//Gjh3L6dOnmTdvHr/++iuKojBkyBCdzyclJYX58+czceJENmzYgIuLC5988glHjx5l+vTprF+/ng4dOmRL8oa6e/cuI0aMoFmzZqxbt46ePXsybdq0p5bv1KkTb731FtWqVWP37t3s3r2bTp06PbX89OnTGThwIOvWraNixYp88MEHZGRkAHDkyBG+/PJL+vbty7p162jUqBE//vhjrvdFFEGKEAXUmDFjlGHDhmmnT5w4odSvX1957733FEVRlJkzZyq1atVSHj58qC2zd+9eJSAgQElNTdVZV5s2bZRffvlFURRFee2115QvvvhC5/2ePXsqXbt2zXHbCQkJire3t/Lbb7/lGOfNmzcVT09P5ezZs0+NPykpSalVq5ayfv167ftpaWlKkyZNlIULFyqKoij79+9XPD09lb1792rL7NixQ/H09FRSUlIURVEUf39/JTw8/GlVlk3Lli2VWrVqKX5+foqPj4/i6emp9OzZU3n06JG2zEcffaR8/vnnOssdOnRIqV69una7EydOVN58803t+1evXlU8PT2VI0eOaOfFxMQovr6+SkREhKIoihIWFqZ4enoq586d05a5fv264uXlpdy7d09ne/369VOmTZum1348+dq/f7+iKIoybdo0pWPHjopG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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "y_hat = predict(malinois, X_bar)\n", "\n", "plt.figure(figsize=(5, 4))\n", "\n", "plt.title(\"SK-N-SH-Specific Design with Malinois\")\n", "plt.scatter(y_orig[0, 0], y_hat[0, 0], label=\"K562\")\n", "plt.scatter(y_orig[0, 1], y_hat[0, 1], label=\"HepG2\")\n", "plt.scatter(y_orig[0, 2], y_hat[0, 2], label=\"SK-N-SH\")\n", "plt.plot([0, 5], [0, 5], c='0.5', linestyle='--')\n", "\n", "plt.xlabel(\"Predictions Before Editing\")\n", "plt.ylabel(\"Predictions After Editing\")\n", "plt.legend()\n", "\n", "seaborn.despine(bottom=True, left=True)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "8cbbdca4-789b-4581-a6f3-085e5be322d2", "metadata": {}, "source": [ "Although we end up using more edits, we get significantly closer to our desired goals. Even a small input loss can be very useful in keeping the edited sequence close to the initial one.\n", "\n", "Because our default loss is based on matching specific values, we can design cell type-specific elements as above by setting some of those to be low but we can also set them to any sort of combinatorial pattern we would like. We can design elements that exhibit transcription in every cell type!" ] }, { "cell_type": "code", "execution_count": 8, "id": "6f829b46-b736-41cd-a0fc-db6aad67ab04", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iter=I\tinput_loss=0.0\toutput_loss=24.94\ttotal_loss=24.94\ttime=0.0\n", "iter=100\tinput_loss=20.75\toutput_loss=0.1256\ttotal_loss=2.201\ttime=1.212\n", "iter=200\tinput_loss=15.31\toutput_loss=0.1126\ttotal_loss=1.644\ttime=1.235\n", "iter=300\tinput_loss=13.62\toutput_loss=0.09684\ttotal_loss=1.459\ttime=1.241\n", "iter=400\tinput_loss=12.12\toutput_loss=0.08817\ttotal_loss=1.301\ttime=1.211\n", "iter=F\tinput_loss=10.31\toutput_loss=0.0599\ttotal_loss=1.091\ttime=5.927\n" ] } ], "source": [ "y_bar = torch.tensor([[5.0, 5.0, 5.0]])\n", "X_bar1 = ledidi(malinois, X, y_bar, verbose=True)[0:1]" ] }, { "cell_type": "markdown", "id": "4c27076f-30e3-4c22-aaaa-12e5ae1d6266", "metadata": {}, "source": [ "Hooray! And it doesn't even take that many edits to do so. Probably because it is relying on features that are common across all three cell lines instead of editing in three distinct regulatory programs." ] }, { "cell_type": "code", "execution_count": 9, "id": "102e0acf-b315-449a-bfab-92277acd86bc", "metadata": {}, "outputs": [ { "data": { "image/png": "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+uor4uLi8PT0xNPTk4iICEC36/vq1at4enqyZcsWRowYQcuWLRk4cCBHjx7VWfYvv/xCly5daNmyJa+88grLli3Tq5tdCJCgFuWMra0tOTk52seXL19m06ZNLFy4kKioKADGjRtHfHw8S5YsISIighYtWjBq1CiSkpIA2LhxIwsWLGDKlCmEh4fj6urK6tWrH7reefPmsXTpUiZOnMjGjRv5/PPPqV69OgC//vorAD/++CO7du1i4cKFhS7j008/ZfPmzcydO5fIyEjq16/PmDFjtHXlmz9/PtOnTyc8PBxLS0veeecd7XNvvPEG7u7uhIWFERERwdixYw3qRbh16xY7duzAx8dHO+3MmTO89NJL9OrVi99++4358+dz+PBhPvzwQyDvC9EzzzyDn5+fzvZNnz6dEydO8M0337B27VoURWHcuHE6709mZiaLFy9mzpw5bNiwgWrVqvH2229z5MgR5s+fz2+//UafPn0KhLyhbty4waRJk+jcuTNRUVEMGTKEefPmFTl/v379ePHFF2natCm7du1i165d9OvXr8j558+fz0svvURUVBQNGjTg9ddfJzc3F4DDhw/z/vvvM3LkSKKioggMDOTbb78t9raICkgRooyaNm2aMmHCBO3j48ePK23btlX+85//KIqiKAsWLFBatGihJCQkaOfZs2eP4u/vr2RlZeksq2fPnsrPP/+sKIqiPPvss8p7772n8/yQIUOUgQMHFrrulJQUxcvLS/nll18KrfPKlSuKh4eHcurUqSLrT0tLU1q0aKH89ttv2uezs7OVjh07Kt99952iKIqyb98+xcPDQ9mzZ492nh07digeHh5KZmamoiiK4ufnp0RERBTVZAV069ZNadGiheLr66t4e3srHh4eypAhQ5R79+5p53nzzTeVd999V+d1Bw8eVJo1a6Zd75w5c5Thw4drn79w4YLi4eGhHD58WDstMTFR8fHxUTZu3KgoiqKEh4crHh4eyunTp7XzXLp0SfH09FRu3ryps75Ro0Yp8+bN02s77v/Zt2+foiiKMm/ePKVv376KRqPRvuazzz5TPDw8tNsaHh6utGrVSvv8ggULdN7zfB4eHsrWrVsVRfnfe3v/e3/27FnFw8ND+ffffxVFUZTXXntNGTdunM4yXn/9dZ11CfEwcoxalGk7duzAz8+P3NxccnNz6dGjB++++672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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "y_hat1 = predict(malinois, X_bar1)\n", "\n", "plt.figure(figsize=(5, 4))\n", "\n", "plt.title(\"All Activity Design with Malinois\")\n", "plt.scatter(y_orig[0, 0], y_hat1[0, 0], label=\"K562\")\n", "plt.scatter(y_orig[0, 1], y_hat1[0, 1], label=\"HepG2\")\n", "plt.scatter(y_orig[0, 2], y_hat1[0, 2], label=\"SK-N-SH\")\n", "plt.plot([0, 5], [0, 5], c='0.5', linestyle='--')\n", "\n", "plt.xlabel(\"Predictions Before Editing\")\n", "plt.ylabel(\"Predictions After Editing\")\n", "plt.legend()\n", "\n", "seaborn.despine(bottom=True, left=True)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "c181048c-3ce0-479d-a29e-ced1243c77fb", "metadata": {}, "source": [ "#### Using Some Tasks from One Model\n", "\n", "By now, several massively multi-task genomics models have been released that make accurate predictions for a breadth of outputs and have been rigorously validated. It makes sense that one may want to use these models in design, particularly when the alternative is having to train and validate your own models. At tis point the canonical mulit-task model in genomics is Enformer. However, trying to figure out appropriate values to set all 5,313 human outputs to -- particularly when many of these outputs are redundant -- can make using it infeasible.\n", "\n", "A way to circumvent this challenge is to use only a subset of outputs from these models. PyTorch makes this easy through the use of wrappers where one can alter inputs before they go into a model and alter outputs before they are returned to the user. See [this tutorial](https://tangermeme.readthedocs.io/en/latest/vignettes/Wrappers_are_Productivity_Hacks.html) for a detailed description of how one can use wrappers to improve productivity in genomics ML.\n", "\n", "Specifically, here we can write a wrapper that takes in a ML model and returns only a subset of the output predictions and discards the rest. Because the other outputs are discarded, you do not need to think about what appropriate values for them may be. See the tutorial above for what each part of this wrapper is doing, because it is also making Enformer an easier model to work with." ] }, { "cell_type": "code", "execution_count": 10, "id": "1e506e8f-91b8-4e63-9218-75bc952700d0", "metadata": {}, "outputs": [], "source": [ "class EnformerWrapper(torch.nn.Module):\n", " def __init__(self, model, targets):\n", " super(EnformerWrapper, self).__init__()\n", " self.model = model\n", " self.targets = targets\n", " \n", " def forward(self, X):\n", " y = self.model(X.permute(0, 2, 1))['human']\n", " return torch.log(y.sum(dim=1)[:, self.targets] + 1)" ] }, { "cell_type": "markdown", "id": "417c7377-853a-4abf-a53e-d2ed64c11664", "metadata": {}, "source": [ "Next, we can use the Enformer model hosted frm EleutherAI. An interesting aspect of the implementation is that it allows the model to run at any multiple of 128 that one would want. The models are not retrained at these other lengths and so weird artifact can (and do) creep it at small lengths. However, for demonstration purposes, using a small length can really speed things up. \n", "\n", "Let's start off by using DNase, GATA2, and MAX predictions in K562." ] }, { "cell_type": "code", "execution_count": 11, "id": "aef78863-7fc8-4432-a373-66ff3b534b88", "metadata": {}, "outputs": [], "source": [ "import os\n", "os.environ['POLARS_ALLOW_FORKING_THREAD'] = '1'\n", "\n", "from enformer_pytorch import from_pretrained\n", "enformer_base = from_pretrained('EleutherAI/enformer-official-rough', target_length=16, use_tf_gamma=False)\n", "enformer = EnformerWrapper(enformer_base, [625, 1066, 961]) " ] }, { "cell_type": "code", "execution_count": 12, "id": "c489ac41-88a3-49f6-bdff-62b622a23ab6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([[ 0.0266, 0.1797, -0.1829]])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_orig" ] }, { "cell_type": "markdown", "id": "af94fbea-d547-4839-ac49-eda5afca17c8", "metadata": {}, "source": [ "We will start with a randomly generated sequence again for simplicity and try to turn it into a region that has high accessibility and GATA2 binding but LOW binding of MAX." ] }, { "cell_type": "code", "execution_count": 13, "id": "693084c0-ddbe-4d2a-9dda-c0090ca89afd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iter=I\tinput_loss=0.0\toutput_loss=7.787\ttotal_loss=7.787\ttime=0.0\n", "iter=100\tinput_loss=371.7\toutput_loss=0.6519\ttotal_loss=1.024\ttime=7.337\n", "iter=200\tinput_loss=372.8\toutput_loss=0.3684\ttotal_loss=0.7412\ttime=7.24\n", "iter=300\tinput_loss=400.3\toutput_loss=0.3173\ttotal_loss=0.7176\ttime=7.272\n", "iter=F\tinput_loss=393.7\toutput_loss=0.1889\ttotal_loss=0.5826\ttime=28.07\n" ] } ], "source": [ "X = random_one_hot((1, 4, 2000), random_state=0).float()\n", "\n", "y_orig = predict(enformer, X)\n", "y_bar = torch.tensor([[4.0, 5.0, 0.0]])\n", "\n", "X_bar = ledidi(enformer, X, y_bar, l=0.001, verbose=True)\n", "y_hat = predict(enformer, X_bar)" ] }, { "cell_type": "code", "execution_count": 14, "id": "8ab15ea3-5557-4cc9-a349-22f1bd9e3a60", "metadata": {}, "outputs": [ { "data": { "image/png": "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rFu3jlKlSunrRkdH89FHHzFw4EBGjRrF9u3bmTlzJqVLl6Zbt27UrVuXoKAgJk2axIgRIwgICACgbNmyL22n7Hh5eeHq6sqRI0dMbp/Fixczd+5cRowYQf369UlPT+fatWsvTVCzZs1iwYIF9OzZk7Zt23Lv3j0mT55MWloa1apVy1T/+++/x8/Pj+nTp5OQkMB3333HiBEjCA8PR61WZ7mPmjVr4urqyoEDB3j99dcB2L9/P3Z2dly5coX79+9TpkwZ0tPT9QkpK6VLl2bx4sW8++67vPnmm7z11lsAmXoJRo8eTceOHXnzzTe5dOkSM2fOBCAoKOiFbZHB2Pfxy9pi7ty5rFy5kuDgYBYvXoyTk5P+/fHFF1+wZs0a+vTpQ0BAAHfv3uU///kPhw4dIjQ01OCYMt6L7777Lh988IFBHKtWrUKj0fDZZ58RHx/P119/zfDhw/H29sba2pqvvvqKiIgIvv76az755BODz4GffvqJH374gcDAQEaMGEFaWho///wz77zzDr///rtBb0ZaWhojRoygV69eDBkyBK1Wa1Rb5iuKeKXWrl2raDQaZfXq1YqiKEpCQoLi4+OjvP322wb1Jk2apNStW1e5cuVKttuaO3euotFolH379mVbZ+PGjYpGo1G2bt1qUH7q1ClFo9EoK1euVBRFUbZs2aJoNBrl/Pnz2W5r6tSpSv369V94fH///bei0WiUv//+W182YcIERaPRKP/9738N6s6fP1/RaDTKkSNH9GUtW7ZUJkyYoH+8YMECpVatWsqpU6cMXpsR786dO18YT8a+s/rp37+/vt7t27cVjUajhISE6MsGDRqkNG/eXHn8+HGmdvD09FTi4uIMjnnYsGEG9aZPn65oNBrlyy+/NCgfOXKk0rBhQ/3j48ePKxqNRvnll18M6kVGRipeXl7KN998oy/r06ePotFolJMnTxrU7dixozJo0CD944zf77PH8yIZx7B58+Zs67z11luKl5eX/rGx7TNs2DCla9euL9x/SEiIotFolNu3byuKoihxcXGKh4eH8v777xvUy2irPn36ZIp9yJAhBnXDw8MVjUajHD9+/IX7HjdunNK6dWv94wEDBiiTJ09WGjRooKxdu1ZRFEU5evSootFolL179+rr9enTxyCOhw8fKhqNRpk9e3amfcyePVvRaDTKokWLDMq/+OILxdPT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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5, 4))\n", "\n", "plt.title(\"Accessible Element Design with Enformer\")\n", "plt.scatter(y_orig[0, 0], y_hat[0, 0], label=\"DNase\")\n", "plt.scatter(y_orig[0, 1], y_hat[0, 1], label=\"GATA2\")\n", "plt.scatter(y_orig[0, 2], y_hat[0, 2], label=\"MAX\")\n", "plt.plot([0, 5], [0, 5], c='0.5', linestyle='--')\n", "\n", "plt.xlabel(\"Predictions Before Editing\")\n", "plt.ylabel(\"Predictions After Editing\")\n", "plt.legend()\n", "\n", "seaborn.despine(bottom=True, left=True)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "7a57db06-bfce-4ac3-a626-6eadef5f4857", "metadata": {}, "source": [ "A potential reason why someone may want to use many outputs from the same model is that they are trying to *keep some predictions the same as before editing*. For example, you may want to edit in the binding of certain proteins while keeping transcription levels the same; or vice versa, increase transcription without affecting the binding of certain proteins (including keeping them low). This is conceptually similar to the idea of masking out regions to prevent certain sequence features from being changed, but does not actually requiring knowing what motifs or spans should be left alone, and even allows for the possibility of motifs to be re-arranged so long as the output from the model remains the same. " ] }, { "cell_type": "code", "execution_count": 15, "id": "debd01d1-d17e-4d01-89ae-0d82421d982d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iter=I\tinput_loss=0.0\toutput_loss=3.973\ttotal_loss=3.973\ttime=0.0\n", "iter=100\tinput_loss=254.1\toutput_loss=0.01027\ttotal_loss=0.2643\ttime=7.294\n", "iter=200\tinput_loss=168.9\toutput_loss=0.006788\ttotal_loss=0.1757\ttime=7.237\n", "iter=F\tinput_loss=149.6\toutput_loss=0.004392\ttotal_loss=0.154\ttime=20.6\n" ] } ], "source": [ "y_orig = predict(enformer, X)\n", "y_bar = torch.tensor([[4.0, 5.0, y_orig[0, 2]]])\n", "\n", "X_bar = ledidi(enformer, X, y_bar, l=0.001, verbose=True)\n", "y_hat = predict(enformer, X_bar)" ] }, { "cell_type": "code", "execution_count": 16, "id": "213a3d90-a21c-4f47-80ab-ca964e849e44", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5, 4))\n", "\n", "plt.title(\"Accessible Element Design with Enformer\")\n", "plt.scatter(y_orig[0, 0], y_hat[0, 0], label=\"DNase\")\n", "plt.scatter(y_orig[0, 1], y_hat[0, 1], label=\"GATA2\")\n", "plt.scatter(y_orig[0, 2], y_hat[0, 2], label=\"MAX\")\n", "plt.plot([0, 5], [0, 5], c='0.5', linestyle='--')\n", "\n", "plt.xlabel(\"Predictions Before Editing\")\n", "plt.ylabel(\"Predictions After Editing\")\n", "plt.legend()\n", "\n", "seaborn.despine(bottom=True, left=True)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "830ba641-0760-4d68-be4b-04e516b0399f", "metadata": {}, "source": [ "Looks like our edits hit the target values, including keeping the green dot unchanged on the line.\n", "\n", "This approach works regardless of the number of outputs from the model you would like to use. For example, we can use all of the chromatin accessibility outputs from Enformer to try to design edits that induce weird patterns of accessibility. Here, we will set the first 50 cell types to a low level of accessibility, set the last 83 cell types to a high level of accessibility, and try to preserve the predictions for all other cell types." ] }, { "cell_type": "code", "execution_count": 17, "id": "5a286528-0489-4ee8-afea-f9d679d0a148", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([1, 684])\n", "iter=I\tinput_loss=0.0\toutput_loss=3.007\ttotal_loss=3.007\ttime=0.0\n", "iter=100\tinput_loss=350.0\toutput_loss=2.393\ttotal_loss=2.428\ttime=7.246\n", "iter=200\tinput_loss=327.0\toutput_loss=2.351\ttotal_loss=2.384\ttime=7.227\n", "iter=300\tinput_loss=370.4\toutput_loss=2.349\ttotal_loss=2.386\ttime=7.238\n", "iter=F\tinput_loss=343.6\toutput_loss=2.338\ttotal_loss=2.373\ttime=25.03\n" ] } ], "source": [ "enformer = EnformerWrapper(enformer_base, slice(0, 684, 1))\n", "\n", "y_orig = predict(enformer, X)\n", "print(y_orig.shape)\n", "\n", "y_bar = torch.clone(y_orig)\n", "y_bar[0, :50] = 1\n", "y_bar[0, 600:] = 6\n", "\n", "X_bar = ledidi(enformer, X, y_bar, l=0.0001, verbose=True)[0:1]\n", "y_hat = predict(enformer, X_bar)" ] }, { "cell_type": "code", "execution_count": 18, "id": "86aeeed3-34c6-4b5b-a54d-22362deadd86", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5, 4))\n", "\n", "plt.title(\"Cell Type-Specific Element Design with Enformer\")\n", "plt.scatter(y_orig[0, :50], y_hat[0, :50], s=5, label=\"Set to 0\")\n", "plt.scatter(y_orig[0, 50:600], y_hat[0, 50:600], s=5, label=\"Set to Original\")\n", "plt.scatter(y_orig[0, 600:], y_hat[0, 600:], s=5, label=\"Set to 6\")\n", "plt.plot([0, 6], [0, 6], c='0.5', linestyle='--')\n", "\n", "plt.xlabel(\"Predictions Before Editing\")\n", "plt.ylabel(\"Predictions After Editing\")\n", "plt.legend()\n", "\n", "seaborn.despine(bottom=True, left=True)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "0141a585-45dc-4aff-9fb7-61d43f7b7dc8", "metadata": {}, "source": [ "It does not seem like this design was particularly successful. In retrospect, this makes some amount of sense because there are a large number of redundant and related cell types being modeled by Enformer and they are not necessarily related by order in the list. Some of the cell types we set to high accessibility may have related cell lines we have set to low accessibility, yielding an inconsistent design goal.\n", "\n", "Regardless, the purpose of the example was to show how one could specify a design task over many outputs. By using a wrapper to slice out the outputs one wishes to design against and using a vector of desired outputs, one can easily do this. " ] }, { "cell_type": "markdown", "id": "442453b8-1f07-47d3-8eb3-a91b6224065a", "metadata": {}, "source": [ "#### Using Multiple Models with the Same Input Width\n", "\n", "Potentially, the more exciting multi-output scenario is when multiple separate models are being used simultaneously. Having multiple models is also the more likely scenario in practice because the state-of-the-art model for one form of activity may not be state-of-the-art in all of the aspects you care about, or even make predictions for the specific conditions or experiment you care about.\n", "\n", "As our first example, let's use a ChromBPNet model, which makes predictions for chromatin accessibility, and a BPNet model that makes predictions for MAX binding. We can load them up the same as before." ] }, { "cell_type": "code", "execution_count": 19, "id": "56e0d139-2300-4b4e-ae7a-b2b4a73063c1", "metadata": {}, "outputs": [], "source": [ "from bpnetlite import BPNet\n", "from bpnetlite.bpnet import ControlWrapper\n", "from bpnetlite.bpnet import CountWrapper\n", "\n", "X = random_one_hot((1, 4, 2114), random_state=0).float()\n", "\n", "chrombpnet = BPNet.from_chrombpnet(\"../../../../models/chrombpnet/fold_0/model.chrombpnet_nobias.fold_0.ENCSR868FGK.h5\")\n", "chrombpnet = CountWrapper(chrombpnet).cuda()\n", "\n", "bpnet_max = torch.load(\"../../../../models/bpnet/MAX.torch\", weights_only=False)\n", "bpnet_max = CountWrapper(ControlWrapper(bpnet_max))" ] }, { "cell_type": "markdown", "id": "cf352dde-0fb4-4f05-8452-64db77371a3e", "metadata": {}, "source": [ "The `ControlWraper` and `CountWrapper` objects are not related to use of Ledidi but, rather, automatically supply an all-zeroes control track to the BPNet model and slice out the count output from BPNet and ChromBPNet's predictions. Basically, these are wrappers I usually put around BPNet and ChromBPNet models in all scenarios, not just design.\n", "\n", "To combine these models into a single designer, we can import `DesignWrapper`. This class takes in a set of models, runs the input sequence through each one, and concatenates the outputs. Essentially, it takes in a set of models and turns them functionally into a multi-task model like Enformer." ] }, { "cell_type": "code", "execution_count": 20, "id": "0c500464-7c7b-4f74-90cc-960ee772c2c2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([[8.4317, 1.4087]])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from ledidi.wrappers import DesignWrapper\n", "\n", "designer = DesignWrapper([chrombpnet, bpnet_max])\n", "\n", "y_orig = predict(designer, X)\n", "y_orig" ] }, { "cell_type": "markdown", "id": "f3c0bb7f-d041-430b-bf50-a61f5681bc05", "metadata": {}, "source": [ "As you can see, the `designer` object can be used just like any other model and acts like a multi-task model in the sense that it returns a single tensor output with multiple dimensions.\n", "\n", "We can use this designer object the same way we used the earlier Enformer wrappers. Specifically, we specify desired outputs for the two tasks (ChromBPNet and BPNet) and then pass the designer object into `ledidi` as if it were a model." ] }, { "cell_type": "code", "execution_count": 21, "id": "1e1b6391-517c-40f2-8404-47bb01a65209", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iter=I\tinput_loss=0.0\toutput_loss=22.0\ttotal_loss=22.0\ttime=0.0\n", "iter=100\tinput_loss=98.69\toutput_loss=1.046\ttotal_loss=10.92\ttime=4.224\n", "iter=200\tinput_loss=95.88\toutput_loss=0.5499\ttotal_loss=10.14\ttime=3.413\n", "iter=F\tinput_loss=86.31\toutput_loss=0.6581\ttotal_loss=9.289\ttime=9.319\n" ] } ], "source": [ "y_bar = torch.tensor([[12.0, 7.0]])\n", "\n", "X_bar = ledidi(designer, X, y_bar, verbose=True)\n", "y_hat = predict(designer, X_bar)" ] }, { "cell_type": "markdown", "id": "f84101fe-79a9-4235-94f8-7428a919927c", "metadata": {}, "source": [ "Because the edited sequences have to be passed through multiple models you will notice that the time per tick increases with the number of models being used. This is a small downside to this approach and may limit, in practice, the number of models that can be used at the same time because multiple models may need to live in GPU memory." ] }, { "cell_type": "code", "execution_count": 22, "id": "916a65d0-a63c-40ea-bb61-7bc8508d00ad", "metadata": {}, "outputs": [ { "data": { "image/png": "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b/r27QtAbGws33zzDY0aNcLd3Z0WLVowc+ZMUlJS9LaR0TwbEhKie427dOnCyZMnURSFRYsW6WLo3bt3tn9kFC5cGAArq5efy2Ukups3b+qVN2jQgICAAObOnUtCQsJLt7N//3769OlDnTp1qF27Nt27d+fAgQO65bNnz2batGlA+g/bjNf56e+7AwcOEB8fn62z1sKFC2erRcDa2ppatWrx5MmTTN/bo0eP5s6dOyxZsuSl28nOd6mrqyuJiYmsXr1ad3yG/PDJt2feSUlJbNy4EQ8PD9RqNV27dmXChAn8/fffdO7cWbfenTt36Nq1K2lpaQwZMgRXV1diYmLYu3cvcXFxlCxZkoSEBN577z1u3LjBgAEDqF27NomJiRw5coR79+5RtWpVtFotw4YN49ixY/Tv3586depw48YNZs+erWsStbOz4/r16wwePBgfHx+mTJlCkSJFuHPnDnv27CE1NRV7e3s2btzIxIkT6dWrF2PGjMHCwoKrV69y4cKFlx53amoqgwYN4t1332XQoEGcOHGCefPmcfPmTX7++efnPu/Jkyf07NmT27dv6+rh/PnzzJo1i3///ZfFixejUqleuv+0tLRMZRYWFlhYPP934oULF+jevTtlypRhzJgxODs7s3fvXiZPnkxMTEymM6CZM2fi6+tLUFAQN27c4Pvvv2fUqFFYWVnh6urKjz/+yNmzZ5k5cyaFChViwoQJuud+9dVXrF69ml69ejF69Gji4uL46aef6N69O2vXrqVkyZK6dTOazvr168fw4cPZunUrM2bMwMXFhU6dOlGrVi2CgoIYN24cQ4cOpWnTpgCULl36pfX0PJ6enjg7O3P06FGD62fRokXMmTOHoUOH4uPjQ1paGpcuXXpp0po5cybz58/n3XffpVWrVty+fZsJEyaQmppK5cqVM63/448/UqdOHaZMmUJCQgI//PADQ4cOZdOmTVhaWma5j+rVq+Ps7MyBAwdo27YtkP4Fbmdnx4ULF7hz5w6lSpUiLS2NI0eO0L179yy34+LiwqJFixgwYABvv/22rgnz2daEESNG0K5dO95++23+/fdfZsyYAUBQUNBz6yEyMpLY2Fi6deuWrfd6hmXLllGlShW++OILAP773/8yaNAgtm3bpkuMkP7ZHDp0KN27d2fgwIFoNBqSk5Pp3bs30dHRjBgxAldXV44ePcqC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t99+48qVK6xYsYLdu3dnOhsX4nnkzFsUeCqVigULFvCf//yHL774gpiYGEqWLImPj4+ud3i7du24du0aP/zwA8nJybRu3ZoePXqwd+/e52532LBhWFpaMmvWLO7evYuzs7PuurmVlRUTJkzgp59+YtasWfj4+GTZbD969GgUReHzzz/n8ePHuLu7s2jRomwPCGJhYUFsbCxjxozh/v37FC9enMDAQEaOHPnC582aNYtZs2YB4OTkhIeHB7/99hvFixcHoEaNGixdupT//Oc/vPfeewBUqFDhhb2vAYKCgpgyZQpDhgwhNTUVHx8fFixY8NLe70FBQcybN4+pU6dy9+5dihUrhpeXl94AKi87jgzvvvsukyZNomzZssyePZugoCD+/PNPPD09+eSTT/R66j+rdevWbN26ld69e/Po0SOCgoIyXVPPjrp16zJx4kTmzJnDf/7zHwICAujbty/Lli0zeFuiYFIpcqFFCCHMbsKECVy6dOmltyAKAdJsLoQQZvHLL78QFRXF1atXWbp0KWvWrKFz587mDkvkEXLmLYQQZvDRRx9x+PBhHj9+TIUKFejZsyc9evQwd1gij5DkLYQQQuQx0mwuhBBC5DGSvIUQQog8RpK3EEIIkcdI8hZCCCHyGEneQgghRB4jyVsIIYTIYyR5CyGEEHmMJG8hhBAij5HkLYQQQuQx/weG1q8z8Jv8/gAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5, 4))\n", "\n", "plt.title(\"Accessible Element Design with ChromBPNet/BPNet\")\n", "plt.scatter(y_orig[0, 0], y_hat[0, 0], label=\"ATAC\")\n", "plt.scatter(y_orig[0, 1], y_hat[0, 1], label=\"MAX\")\n", "plt.plot([0, 9], [0, 9], c='0.5', linestyle='--')\n", "\n", "plt.xlabel(\"Predictions Before Editing\")\n", "plt.ylabel(\"Predictions After Editing\")\n", "plt.legend()\n", "\n", "seaborn.despine(bottom=True, left=True)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "404e091a-4c3c-4e68-bf0b-4a3ecbfec9af", "metadata": {}, "source": [ "We tasked Ledidi with designing edits that increased both accessibility (as predicted by ChromBPNet) and MAX binding (as predicted by BPNet). Looks like it was able to successfully do that without needing any code changes other than first wrapping the multiple models in a single `DesignWrapper` class. \n", "\n", "To demonstrate that this works with more than just two models, we can begin by loading up three more BPNet models and including them in the designer." ] }, { "cell_type": "code", "execution_count": 23, "id": "6a57a2e4-165b-43fe-bd9f-2604cb99a27a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iter=I\tinput_loss=0.0\toutput_loss=22.45\ttotal_loss=22.45\ttime=0.0\n", "iter=100\tinput_loss=138.6\toutput_loss=2.49\ttotal_loss=16.35\ttime=5.065\n", "iter=200\tinput_loss=140.1\toutput_loss=1.644\ttotal_loss=15.66\ttime=5.068\n", "iter=F\tinput_loss=128.8\toutput_loss=1.555\ttotal_loss=14.43\ttime=14.76\n" ] } ], "source": [ "bpnet_gata = torch.load(\"../../../../models/bpnet/GATA2.torch\", weights_only=False)\n", "bpnet_gata = CountWrapper(ControlWrapper(bpnet_gata))\n", "\n", "bpnet_ctcf = torch.load(\"../../../../models/bpnet/CTCF.torch\", weights_only=False)\n", "bpnet_ctcf = CountWrapper(ControlWrapper(bpnet_ctcf))\n", "\n", "bpnet_e2f6 = torch.load(\"../../../../models/bpnet/E2F6.torch\", weights_only=False)\n", "bpnet_e2f6 = CountWrapper(ControlWrapper(bpnet_e2f6))\n", "\n", "designer = DesignWrapper([chrombpnet, bpnet_max, bpnet_gata, bpnet_ctcf, bpnet_e2f6])\n", "\n", "y_orig = predict(designer, X)\n", "y_bar = torch.tensor([[14.0, 7.0, 4.0, 3.0, 8.0]])\n", "\n", "X_bar = ledidi(designer, X, y_bar, verbose=True)\n", "y_hat = predict(designer, X_bar)" ] }, { "cell_type": "code", "execution_count": 24, "id": "c3d47d18-dfbd-4051-8059-48c404931f8f", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAGGCAYAAAC0W8IbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB5mElEQVR4nO3deXxM1/vA8c9k35AgQexbYkkiEUSIfd8iaIvWUrUrWkqtbVEarba+X9TaVktVaUJssbfUVvu+1b4EkZAgss7M/f3hm/mZJmHCJJNknvfrlRdz5sy9z7mZzDP33HPOVSmKoiCEEEKIPMnC1AEIIYQQImuSqIUQQog8TBK1EEIIkYdJohZCCCHyMEnUQgghRB4miVoIIYTIwyRRCyGEEHmYJGohhBAiD5NELYQQQuRhkqiNaNmyZXh6etKxY0dTh2JUBw8exNPTk4MHD+rKxo8fj5+fn0Gvb968OePHjzdaPOPHj8fT0zPLn3S3b9/G09OTNWvWGG3fphQdHc3cuXM5f/68QfXTf2/pP15eXtSvX58ePXowe/ZsoqKicjTeNWvW4Onpye3bt3N0P8bUu3dvevfurXuclJTE3Llz9d776ebOnYunpycPHz58pX2lv4/9/Px4+vRphuejoqKoVq0anp6ezJ0795X2kRvSf8///oxIpygKrVq1wtPTU+/YGsOrHpv89tlgZeoACpLw8HAALl26xMmTJ6lVq5aJIzKOmjVrsmrVKqpUqWLqUHTs7Oz4+eefTR1Grrp//z7z5s2jdOnSVK9e3eDXjR49moCAADQaDfHx8Zw6dYrw8HB++uknPv/8c4KDg3Mk3qZNm7Jq1Src3NxyZPs54bPPPtN7nJSUxLx58xg+fDgBAQFG35+1tTUajYbIyEjefPNNvefWrFmDo6MjCQkJRt9vTnB0dCQsLCzDcTp06BA3b97E0dHRRJHlf3JGbSSnT5/mwoULNG3aFICwsDDTBmRETk5O+Pr64uTkZOpQdCwsLPD19c30R+grX748vr6++Pv706JFC0aNGsXGjRupVKkSEyZM4OLFizmy36JFi+Lr64uNjU2ObD8nVKlSJVe/kFpbW9OyZUvdl/x0iqKwdu1a2rdvn2uxvK727duzbdu2DF8swsLC8PPzw93d3USR5X+SqI0kPTF/9NFH+Pn5sWnTJpKSkjLUi46O5pNPPqFJkyZ4eXkRFBTEyJEjiY2N1dV5/PgxM2fOpEWLFnh5eREYGMjAgQO5cuWKrk5qairz58+nbdu2ui7NCRMmZOiGO3DgAL179yYgIAAfHx+aNm3KiBEj9GL79ddfCQ4Oxs/PDz8/P9q2bcu3336rez6zru90ly5dom/fvvj6+lK/fn2mTZuWabv/LSEhgS+//JLmzZvj5eVFo0aNmDFjBomJiS997eu6fv06H330EYGBgXh5edGuXTtWrFihVye9zRs2bGDWrFkEBQXh5+fHkCFDiI2NJSEhgU8++YSAgAACAgKYMGFChu5LRVFYsWIFnTt3xsfHh7p16zJy5Ehu3bqlV69379507NiRU6dO8fbbb1OrVi1atGjB4sWL0Wq1unjeeOMNACZMmKDranzVLlFnZ2emTp2KWq3mp59+yvbx0Wq1zJ8/nzZt2uDj40OdOnXo1KmTXi9HZl3fiqKwcOFCmjVrhre3N127dmXfvn0ZupzTj//GjRuZPXs2QUFB1K5dm3fffZerV6++sG2XLl3C09OTzZs368rOnDmDp6cnHTp00Ks7ZMgQunbtqnv8fBy3b98mMDAQgHnz5umO+b8v4zx48IDRo0fj7+9PgwYNmDBhAk+ePHlhjM/r1q0bx48f12vX/v37iYqK0ost3cOHD5kyZQrt27fHz8+PwMBA+vTpw5EjR/TqpXfv/vDDDyxdupTmzZvj5+dH9+7dOXHihK5eREQEnp6eHD9+PMO+5s2bR82aNYmOjn5pO9KP7caNG3VlT548Ydu2bXTr1i3T18THxzNlyhQaNWqEl5cXLVq0YPbs2aSmpurVS0hIYPLkyQQEBODn50f//v25du1apts05P2bmYcPH+p9NqdfJtq/f/9LX5vTpOvbCJKTk9m0aRPe3t54eHjQrVs3Jk+ezJYtW+jSpYuuXnR0NN26dUOtVjNkyBA8PT2Ji4tj7969PHr0iOLFi5OQkMDbb79NVFQUAwYMoFatWiQmJnL48GFiYmKoXLkyWq2WYcOGcfToUfr370/t2rWJiopi7ty5um5NOzs7bt++zeDBg6lTpw4zZsygcOHCREdHs2fPHtLS0rC3t2fTpk1MnTqV3r17M27cOCwsLLhx4waXL19+abvT0tIYNGgQ3bt3Z9CgQRw/fpwFCxZw584dFi5cmOXrkpKS6NWrF/fu3dMdh0uXLjFnzhz++ecffvrpJ1Qq1Uv3r1arM5RZWFhgYZH198/Lly/To0cPSpUqxbhx43B1dWXv3r1Mnz6duLg4hg8frld/9uzZBAQEEBoaSlRUFF9++SWjR4/GysoKT09Pvv32W86dO8fs2bNxdHRk8uTJutd++umnrF27lt69ezNmzBgePXrEd999R48ePVi3bh3FixfX1Y2JiWHs2LH069eP4cOHs337dr755hvc3NwICQmhZs2ahIaGMmHCBIYOHarruSlZsuRLj1NWfHx8cHV11fuAN/T4fP/998ybN4+hQ4dSp04d1Go1V69efWmCmj17NosWLaJ79+60atWKe/fuMXnyZNLS0qhYsWKG+t9++y21a9dmxowZJCQk8PXXXzN06FAiIyOxtLTMdB9Vq1bF1dWVAwcO0K5dO+BZ4rOzs+Py5ctER0dTokQJ1Go1hw8fpkePHplux83Nje+//54BAwbwxhtv6LqmixYtqldvxIgRtG/fnjfeeIN//vmHb775BoDQ0NAXHot0DRo0oHTp0oSHhzN27Fjg2Rf/unXrUr58+Qz14+PjARg+fDjFixcnMTGR7du307t3b3766acMXc8rVqygUqVKTJw4EYD//ve/DBo0iJ07d1KoUCHat2/P119/zYoVK/TGnajValatWkXLli0pUaLES9vh5OREmzZtCA8P1x3TjRs3YmFhQbt27TJcqkpJSaFPnz7cunWLESNG4OnpyZEjR1i8eDHnz59n8eLFwLMvd8OGDeP48eO8//77eHt7c+zYMQYOHJghhuz+fT9v7NixnDt3jlGjRlGhQgUeP37MuXPndMfbpBTx2tauXat4eHgoK1euVBRFURISEhRfX1/l7bff1qs3YcIEpWbNmsrly5ez3Na8efMUDw8PZd++fVnW2bhxo+Lh4aFs3bpVr/zUqVOKh4eHsmLFCkVRFGXLli2Kh4eHcv78+Sy3NW3aNKVOnTovbN/ff/+teHh4KH///beubNy4cYqHh4fy888/69VdsGCB4uHhoRw5ckRX1qxZM2XcuHG6x4sWLVKqVaumnDp1Su+16fHu2rXrhfGk7zuzn759++rq3bp1S/Hw8FDCw8N1Ze+9957SuHFj5cmTJxmOg7e3txIfH6/X5sGDB+vVmzFjhuLh4aF8/vnneuXDhg1T6tWrp3t8/PhxxcPDQ/nxxx/16t29e1fx8fFRvvrqK11Zr169FA8PD+XkyZN6ddu3b6+89957usfpv9/n2/Mi6W3YvHlzlnXefPNNxcfHR/fY0OMzePBgpXPnzi/cf3h4uOLh4aHcunVLURRFiY+PV7y8vJQPP/xQr176serVq1eG2AcOHKhXNzIyUvHw8FCOHz/+wn2PGTNGadGihe7xu+++q0yePFmpW7eusnbtWkVRFOXo0aOKh4eHsnfvXl29Xr166cXx4MEDxcPDQ5kzZ06GfcyZM0fx8PBQlixZolc+ZcoUxdvbW9FqtS+Mcdy4cYqvr69uWw0bNlTS0tKUuLg4xcvLS1mzZs0L959OrVYraWlpSt++fZX3339fV57+/u/YsaOiVqt15SdPnlQ8PDyUjRs36rWlZs2aSmxsrK5s06ZNioeHh3Lo0KEXtiP993zq1Cnd7+2ff/5RFEVRunXrpowfP15RFEXp0KGD3rFduXKl4uHhoURGRuptb/HixXq/l927d7/ws+b5Y2Po+zezzwZfX19lxowZL2yrqUjXtxGkn8Gmd/04OjrStm1bjhw5wvXr13X1/vrrLwICAqhcuXKW29qzZw8VKlSgQYMGWdb5888/KVy4MM2aNUOtVut+qlevjqurK4cOHQKgevXqWFtb88knn7B27doMXa4A3t7ePH78mNGjR7Njx45sj2Dt1KmT3uP0Ee+ZdZM/H3/VqlWpXr26XvxBQUGoVCpd/C9iZ2dHWFhYhp9/DwZ6XkpKCn///TetWrXCzs5Ob9+NGzcmJSVFr0sQoFmzZnqP03936We0z5fHx8frur///PNPVCoVwcHBevspXrw41apVy9BGV1dXfHx89Mo8PT25c+fOS4/F61Ceux19do6Pt7c3Fy5cYMqUKezZs8egAU8nTpwgNTVVd5abztfXl9KlS2f6mubNm+s9Th/V/7LjEhgYyK1bt7h16xYpKSkcPXqURo0aERAQwL59+4BnZ9k2Njb4+/u/NPYXySzGlJQUHjx4YPA2unbtSmxsLH/99RcbNmzA2tqatm3bZll/5cqVdOnSBW9vb2rUqEHNmjU5cOCA3uWxdE2bNtXrfahWrRqA3qj/nj17ArB69Wpd2YoVK/Dw8KBu3boGt6NevXqUK1eO8PBwLl68yOnTp7Ps9v77779xcHDI0M707v4DBw4A//9ZktVnTbpX+ft+no+PD2vXrmX+/PmcOHGCtLQ0g9ud06Tr+zXduHGDw4cP07p1axRF4fHjxwC0bduWNWvWEB4ezkcffQRAXFzcS7uQHj58SKlSpV5Y58GDBzx+/BgvL69Mn4+LiwOgXLly/PTTT3z//fdMmzaNxMREypYtS+/evenbty8AISEhaDQafv/9d0aOHIlWq8Xb25sPP/yQhg0bvjAOKysrXFxc9MpcXV0BXthd9ODBA27cuEHNmjVfGP+LWFhY4O3t/dJ6z4uPj0etVrN8+XKWL19u0L6LFCmi99ja2vqF5SkpKTg6OvLgwQMURcnyC1fZsmX1Hjs7O2eoY2NjQ0pKStYNMoK7d+/qRmVn5/gMHjwYBwcH1q9fz2+//YalpSV16tRhzJgxWf5e0t8TxYoVy/Dc85cBnvfv45I+MC05OfmF7Uo/7gcOHKBMmTKo1Wrq169PbGws8+fP1z1Xu3Zt7OzsXritl3nVGJ9XunRpAgMDCQ8PJyoqig4dOmBvb5/peI+lS5cyc+ZMevTowQcffICLiwsWFhb897//zfT6fVbxPf/eKl68OO3bt2fVqlUMGjSIS5cuceTIEaZNm2ZwGwBUKhVdu3Zl+fLlpKSkUKFCBerUqZNp3fj4eIoXL57hMlexYsWwsrLSvV/i4+Nf+Fnz/Pay+/f9vNmzZ7NgwQLCwsL473//i4ODA61atWLs2LEZ9pXbJFG/pvDwcBRFYevWrWzdujXD82vXruXDDz/E0tISFxeXlw7KKFq0KPfu3XthHRcXF5ydnfn+++8zff75aRB16tShTp06aDQazpw5w/Lly/niiy8oXry4rgegW7dudOvWTXctfO7cuQwePJitW7dmeaYDz65hxcXF6f0BxcTEAJknnufjt7W15Ysvvsjy+ZxQuHBhLC0t6dy5M2+//XamdcqUKWOUfbm4uKBSqVixYkWmo57zwkjoU6dOERMToxuklp3jY2VlRb9+/ejXrx+PHz9m//79zJ49mwEDBrBr1y7s7e0zvDb9PZHZmWZsbOwL32vZVbJkSSpUqMD+/fspXbo0Xl5eFC5cmMDAQKZOncrJkyc5efIkI0aMMNo+X1e3bt0YO3YsWq2WKVOmZFlv/fr11KtXj6lTp+qVZzYXOzv69OnDunXr2LlzJ3v27KFw4cIZzmIN0bVrV+bMmcNvv/3GqFGjsqzn7OzMyZMnURRFL1k/ePAAtVqt+xxwdnZ+4WdNutf9+y5atCiTJk1i0qRJ3Llzhz/++INvvvmGBw8e8MMPPxjU9pwiifo1aDQa1q5dS7ly5Zg+fXqG53ft2sWPP/7IX3/9RbNmzWjcuDHr16/n6tWrVKpUKdNtNmrUiDlz5nDgwAHdiNN/a9q0KZs2bUKr1Ro8V9vS0pJatWpRqVIlNmzYwNmzZzOMgHVwcKBJkyakpaXx/vvvc/ny5Zd+eG7YsIE+ffroHqeP+KxXr16Wr2natCmLFi3C2dk5w5llTrK3tycgIIBz587h6emZo8myadOmLF68mOjoaKNNsXmVM7WsxMfH89lnn2Ftbc27774LvPrxKVy4MG3btiU6OpovvviCqKioTKc41apVCxsbGyIjI2ndurWu/MSJE0RFRRk1UcOzs+rNmzdTqlQpmjRpAkDFihVxd3dnzpw5pKWlZfk3ls6Yx/xlWrVqRatWrXTTIbOiUqky/G4uXLjAiRMnXtob9yJeXl74+fmxZMkSLl26xFtvvYWDg0O2t1OiRAn69+/P1atXCQkJybJeYGAgmzdvZseOHbRq1UpXHhERoXseICAggO+//z7Lz5p0xvz7dnd3p1evXhw4cIBjx4698naMRRL1a/jrr7+4f/8+Y8aMyXQxhKpVq/LLL78QFhZGs2bN+OCDD/jrr7/o1asXgwcPxsPDgydPnrBnzx7effddKleuTN++fdm8eTPDhg1j0KBB+Pj4kJyczOHDh2natCn169enQ4cObNiwgUGDBtG7d298fHywtrbm3r17HDx4kBYtWtCqVStWrlzJ33//TdOmTSlVqhQpKSm6+ZrpXYOTJ0/Gzs6O2rVr4+rqSkxMDIsXL6ZQoUIv7Vq2trZm6dKlJCYm4u3trRv13bhx4yy7uwD69u3Ltm3b6NWrF++++y6enp5otVru3r3L3r17ee+99176BUSr1WZ5valGjRpZ/pFOmjSJt99+m3feeYeePXtSunRpnj59ys2bN/njjz9YtmzZC/drKH9/f7p3787EiRM5c+YMdevWxd7enpiYGI4ePYqHh0eW3/qzUq5cOezs7NiwYQOVK1fGwcEBNze3l15OuXHjBidOnECr1RIfH8/JkycJDw/XTZGrWrWqrq6hx2fIkCFUrVoVLy8vihYtSlRUFD///DOlS5fOdKQyPDsz6tevH4sWLaJw4cK6Ud/fffcdrq6uBo30z47AwEB+/fVX4uLidCOeAerXr8+aNWsoUqRIlpeP0jk5OVG6dGl27txJYGAgRYoUwcXFxWg9L8+ztbVlzpw5L63XtGlT5s+fz5w5c6hbty7Xrl1j/vz5lClTBo1G81ox9OnTh1GjRqFSqbL9/nzemDFjXlonJCSEFStWMG7cOKKiovDw8ODo0aMsWrSIJk2a6D6jgoKCqFu3LrNmzSIpKQkvLy+OHTvGunXrMmzzVf++nzx5Qp8+fejYsSOVKlXC0dGR06dPs2fPHr0vEaYiifo1hIWFYW1tneVgiaJFi9KqVSu2bt1KbGwsJUqUICwsjDlz5rBkyRLi4+NxcXHB399f1y3o5OTEr7/+yty5c1m9ejXfffcdhQsXxtvbm7feegt4dna8YMECli1bxrp161i8eDGWlpaULFmSunXr4uHhATwbTLZv3z7mzp1LTEwMDg4OeHh4sGDBAoKCgoBnXeNr1qxh8+bNPHr0SBfPl19+mWEayr9ZW1uzcOFCpk+fzoIFC7Czs+PNN9/k448/fuHrHBwcWLFiBYsXL2bVqlXcvn0bOzs7SpUqpZuq8jLJycl079490+e2bduWZbKoUqUKa9asYf78+fznP//h4cOHFCpUiPLly+vOuoxl2rRp1KpVi1WrVrFy5Uq0Wi1ubm7Url07w8AxQ9jb2/PFF18wb948+vfvT1paGsOHD39p9236nHgrKyucnJyoWLEi3bp146233spwrA09PgEBAWzdupXff/+dhIQEXF1dadCgAcOGDdNdr8/MqFGjsLe357fffmPNmjVUqlSJKVOmMHv2bAoXLpztY/Ii9evXx8LCAjs7O70z1AYNGrBmzRoCAgJeOJUv3YwZM/jqq68YOnQoqampdOnShZkzZxo11uwYMmQISUlJhIWF8f3331OlShWmTJnCjh07DBqI+SItW7bExsaGgIAAKlSoYJyAs2Bra8uyZcuYPXs233//vW4Mz3vvvac3jcrCwoIFCxYQGhrK999/T1paGrVr12bx4sUZBia+6t+3ra0tPj4+rFu3jqioKNRqNaVKlWLgwIEMGDAgx46BoVTK88M+hRAil926dYt27doxfPhwhgwZYupwzNoff/zB0KFDWbx4sdG/uIpXJ2fUQohcc+HCBTZu3Iifnx9OTk5cu3aN77//HicnJ92gNpH7Ll++rFvQp3r16jRu3NjUIYnnSKIWQuQae3t7zpw5Q1hYGE+ePMHJyYmAgAA+/PDDLKdoiZw3depUjh07Ro0aNZg5c6bRxwuI1yNd30IIIUQeJiuTCSGEEHmYJGohhBAiD5NELYQQQuRhkqiFEEKIPEwSdTZotVpOnTqFVqs1dSgmIe037/aDHANpv7TfFO2XRJ0NiqKQlpaGuQ6Ul/abd/tBjoG0X9pvivZLohZCCCHyMEnUQgghRB4miVoIIYTIwyRRCyGEEHmYrPX9PxqNhrS0tJfWgWe3WLS0tMyNsPIUQ9pvbW1tlsdGCCFyitknakVRuHfvHvHx8QbVtbKy4saNG2a5aL2h7Xd2dqZkyZJmeYyEEMLYzD5RpydpNzc3HBwcXphcFEUhKSkJe3t7s0xCL2u/oigkJiZy//59AEqVKpXbIQohRIFj1olao9HoknSxYsVeWl9RFLRaLXZ2dmabqF/Wfnt7ewDu37+Pm5ubdIMLs6bRKhy69pD7T5JxK2RHvYpFsbQwv88O8XrMOlGnX5N2cHAwcSQFS/rxTEtLk0QtzNaWM3eZuuEcdx8l68pKFbHjs041aOslvU3CcDLqG8zy7DgnyfEU5m7LmbsM/eWYXpIGuPcomaG/HGPLmbsmikzkR5KohRDCiDRahakbzpHZIpPpZVM3nEOjNc9lOEX2SaIWQggjOnTtYYYz6ecpwN1HyRy69jD3ghL5miTqfO7YsWNUr16d/v37AzB+/Hg8PT1f+JNuw4YNVK9enU8//TTTbSckJDB79mzatm2Lt7c3QUFBDBkyhG3btpntovxCvMz9J1kn6VepJ4RZDyYzFlOO7AwPD6dXr16EhYVx584dJk2axEcffaR7PigoiNDQUBo1apTpawcMGMDKlSuZMGGCbsQ2wOPHj3n77bd58uQJH374Id7e3lhYWLBv3z6+/vprAgMDKVy4cK60UYj8xK2QnVHrCSGJ+jWZcmRnYmIimzdvJiwsjNjYWNasWcPw4cMpVKiQXr3ChQvj6uqqV3b79m2OHz/O3LlzOXjwIFu3biUkJET3/LfffktUVBRbtmyhRIkSwLPpWSVKlKBLly7Y2cmHjBCZqVexKKWK2HHvUXKm16lVQMkiz77QC2EI6fp+DaYe2RkZGUnFihWpVKkSwcHBrFmzxuAu6fDwcJo0aUKhQoUIDg4mLCxM95xWqyUyMpJOnTrpkvTzHB0dsbKS73hCZMbSQsVnnWoAz5Ly89Iff9aphsynFgaTRP2K8sLIzrCwMIKDgwFo1KgRiYmJHDhw4KWv02q1rF27Vvfa9u3bc+LECW7cuAFAXFwcjx49olKlSjkWuxAFWVuvUizoVZuSRfR7nkoWsWNBr9oyj1pki5wWvaLsjOwMrPzyVc+y6+rVq5w+fZp58+YBYGVlRfv27QkPD6dBgwYvfO3evXtJSkqicePGABQtWpSGDRsSHh7O6NGjZaCYEEbQ1qsUrWqUlJXJxGuTRP2KTD2yMywsDLVarUu28P83zXj06BFFihTJ8rXh4eHEx8fj6+urK9NqtZw7d44PPviAokWLUqRIEa5evZojsQthLiwtVDnyRV2YF0nUr8iUIzvVajXr1q1j/PjxNGzYUO+5ESNGsGHDBnr16pXpa+Pi4ti5cyezZ8+mSpUqunKtVss777zDX3/9RbNmzWjXrh3r16/n/fffz3CdOjExEVtbW7lOLYQQuUCuUb+i9JGdWXViqXg2+jsnRnbu2rWLR48e8cYbb+Dh4aH307ZtW72BYf+2bt06nJ2dadu2rd7rqlWrRtOmTXWvHT16NCVLluStt94iIiKCy5cvc/36dSIiIujSpQuJiYlGb5cQQoiMJFG/IlOO7AwLC6NBgwYZpmEBtG7dmvPnz3P27NlMXxseHk6rVq2wsMj4q2/Tpg27du0iNjaWIkWKsHr1aoKDg1mwYAEhISH06tWLrVu3Mnbs2Ez3LYQQwvhUihmPHEpOTubatWtUrFjRoHnB6fdbfv6+1eZ0h5zM2p+Z7B7X/EKj0XDixAl8fX3N9q5g5n4MpP3SflO0Xy4yviYZ2SmEECInSaI2AhnZKYQQIqfINWohhBAiD5NELYQQQuRhkqiFEEKIPMykifrw4cMMGTKEoKAgPD092bFjh+65tLQ0Zs2aRadOnfD19SUoKIiPP/6Y6OhoE0YshBBC5C6TJurExEQ8PT359NNPMzyXnJzMuXPnGDp0KGvWrGHevHlcv36doUOHmiBSIYQQwjRMOuq7SZMmNGnSJNPnChUqxNKlS/XKJk+ezJtvvsmdO3dwd3fPjRCFEEIIk8pX16gTEhJQqVQULlzY1KEIIYQQuSLfzKNOSUnh66+/pmPHjjg5OWXrtVqtNtNbN2o0GhRF0f28THodc13MzdD2px9PjUaDRqPJjdByRXpbClKbssvcj4G0X9r//L+vy9DVzfLMEqKenp589913tGzZMsNzaWlpfPDBB9y9e5fly5dnO1GfOnWKtLS0TJ+zsrKibNmy2NravlLcpvLZZ5+xYcMGunXrxqRJk/SeCw0N5ffff6dTp05MnTpVV37y5En69+9PQEAA3333nd5r9u7dy+jRo/n555+pXr26rnzZsmX89NNPrF69muLFixsUW0pKCrdu3UKtVr9GC4UQwrS0Wi2XLl2ibNmyODg4GH37/v7+BtXL82fUaWlpfPjhh9y+fZuff/4520kawMvLK9OzwOTkZG7cuIG9vb3Ba30nJSVhb2+vv9a1VgM398OTaChUAso1AIucXQfW0tKSUqVKsW3bNj755BNd/CkpKWzduhV3d3csLS313lybNm2iV69ehIWFER8fr3edv3Xr1oSEhDBlyhTCw8OxsbHhypUrLFiwgNDQUMqVK5d1+//FwsICa2trqlSpUuDW+j59+jTe3t5muc4xyDGQ9ptP++/du8f69eu5f/8+aWlpvPPOO2i1WpO0P08n6vQkfePGDZYtW4aLi8srbSezO0XBs2SnUql0P4bSq39uPWwZB4/v/H+Fwu7Q9kuoEfxK8RoaQ40aNbh16xbbt28nOPjZvrZv307JkiUpW7asXpyJiYls3ryZsLAwYmNjWbt2LcOHD9fb5oQJEwgODmbu3Ll8+OGHjBs3jmbNmtGhQ4es259FbCqVCktLywL5x1xQ25Ud5n4MpP0Ft/0ajYa9e/fy119/odVqcXBwoE6dOlhZWem6vHO7/SYdTPb06VPOnz/P+fPnAbh9+zbnz5/nzp07qNVqRo4cyZkzZ/j666/RaDTExMQQExNDamqqKcP+f+fWw+o++kka4PHdZ+Xn1ud4CN26dWPNmjW6x+Hh4XTr1i1DvcjISCpWrEilSpUIDg5mzZo1GXoZnJycmDFjBkuXLmXMmDHcu3ePzz77LMfbIIQQeUF0dDTff/89u3btQqvVUr16dYYNG0bNmjVNGpdJz6jPnDlDnz59dI9DQ0MB6NKlC8OHD+ePP/4AoHPnznqvW7ZsGQEBAbkXaGa0mmdn0mR2iV8BVLBlPFTrkKPd4MHBwXzzzTfcvn0blUrFsWPH+Pbbbzl06JBevbCwMN1Zd6NGjUhMTOTAgQM0aNBAr15gYCBt2rRh06ZNzJ49m6JFi+ZY7EIIkVdcu3aNX375Ba1Wi729Pe3bt6dmzZrZ6m3NKSZN1AEBAVy8eDHL51/0nMnd2J/xTFqPAo+jntWr2CjHwihatChNmzYlIiICRVFo2rRphuR69epVTp8+zbx584BnA+jat29PeHh4hkQdHR3Nnj17sLe35+jRo7Rv3z7HYhdCiLyibNmyFCtWjKJFi77S7KKclKevUedpCQYuZWpovdfQrVs3pk2bBpBpV3VYWBhqtZrGjRvryhRFwcrKikePHlGkSBFd+eTJk6lWrRojRozg3XffpU2bNtSrVy/H2yCEELlJq9Vy8uRJatWqhYWFBVZWVrz77rsvHSxrCpKoX5VTCePWew2NGjXSTT8LCgrSe06tVrNu3TrGjx9Pw4YN9Z4bMWIEGzZsoFevXgD8/vvvHDlyhPXr11O2bFneeecdJk6cyPr163NkaoIQQphCbGwsERERREVF8fTpU93nZl79nMtXK5PlKeUbPBvdTVbfvFRQuPSzejnM0tKSzZs3s3nz5gwjEXft2sWjR49444038PDw0Ptp27YtYWFhANy5c4eZM2cybtw4ypYtC8Do0aOxsLDgm2++yfE2CCFETtNqtezfv5+FCxcSFRWFra0thQoVMnVYLyWJ+lVZWD6bggVkTNb/e9x2Zo7Pp07n5OSU6TWVsLAwGjRokOmbsXXr1pw/f54zZ84wceJEfH196dGjh+55e3t7vvjiC1auXJlhcJoQQuQnDx484KeffmL79u1oNBqqVKnCsGHDqFWrlqlDeynp+n4dNYLhrWVZzKOemaPzqGfOnPnC5+fPn//SbdSsWVM3YO+nn37KtE6dOnU4d+4cYL5Lpwoh8rezZ88SERGBWq3GxsaGNm3a4Ofnl+euRWdFEvXrqhH8bArWjf3PBo45lXjW3Z1LZ9JCCCFezM3NDUVRdOtIPD+ANj+QRG0MFpY5OgVLCCGE4RRF4fbt27rxNq6urgwYMIASJUrkm7Po58k1aiGEEAVGXFwcy5YtY+nSpdy+fVtXXrJkyXyZpEHOqIUQQhQAiqJw9OhRtm3bRlpaGtbW1sTFxVGmTBlTh/baJFELIYTI1+Lj49mwYQNXr14FoFy5cnTu3LnALIEsiVoIIUS+dfLkSSIjI0lNTcXKyoqWLVtSr169fNvNnRlJ1EIIIfKttLQ0UlNTKVu2LJ07d6ZYsWKmDsnoJFELIYTINxRFISEhQbeIk7+/P3Z2dtSoUQMLi4I5PrpgtkoIIUSB8+TJE1auXMkPP/xASkoKACqVCi8vrwKbpEHOqIUQQuRxiqJw6tQptmzZQnJyMpaWlty6dYsqVaqYOrRcIYk6H4uJiWHRokXs3r2be/fuUahQIcqXL09wcDAhISHY29vr6i5cuJD//ve/jBo1ikGDBgHQvHlzoqKistx+vXr1WL58OQCffPIJYWFhzJgxgy5duuRsw4QQ4n8SEhLYuHGjbrljd3d3QkJCcHV1NXFkuUcStRFotBqO3T9GTGIMrg6u1HarjWUOLyF669YtevbsSaFChRg1ahSenp6o1WquX79OeHg4bm5utGjRQld/zZo1DBgwgPDwcF2iDgsLQ6PRAHD8+HFGjBjBli1bdDf3sLa2BiApKYnIyEj69+9PRESEJGohRI5TFIWzZ88SGRlJUlISFhYWNG3alIYNGxbobu7MSKJ+TTtu7GDmoZlEJ0bryko4lGB8vfG0LN8yx/Y7ZcoULC0tCQ8P17uHqqenJ23atNG7gcahQ4dITk5m5MiRREREcPjwYerWras3xzB97dtixYpRuHBhvX1t2bKFKlWqMGjQIBo1aqS3NJ8QQuSUc+fOkZSURKlSpejcuTMlSpQwdUgmYV5fS4xsx40djN41Wi9JA9xPvM/oXaPZcWNHjuw3Li6Offv28c4772R5o/Pn5xCGhYXRoUMHrK2t6dixo+4e1IYKCwsjODiYQoUK0bBhQ9asWfNa8QshRFbSe/lUKhUdOnSgRYsW9O/f32yTNEiifmUarYaZh2aikPHWj+llXx76Eo1WY/R937x5E0VRqFixol55QEAAfn5++Pn5MWvWLODZ9Z1t27bRuXNnAIKDg9m6dSsJCQkG7ev69eucPHmSdu3aAdC+fXvWrl2LVqs1YouEEOYuMTGR33//nbVr1+rKHB0dCQoKwtLSvO9GKIn6FR27fyzDmfTzFBTuJd7j2P1jORbDv1feCQsLIyIigipVqpCamgrAhg0bKFu2LNWqVQOgevXqlC1blk2bNhm0j7CwMIKCgnTd5EFBQSQmJrJ//34jtkQIYc7Onz/P/PnzOXfuHOfOnSMmJsbUIeUpco36FcUkGvZGMrRedpQrVw6VSqVb1zZd+nVjOzs7XVl4eDiXLl2iRo0aujKtVktYWBjdu3d/4X40Gg0RERHExsbqvV6j0egSuBBCvKrExES2bNnC6dOngWe3ozS3Ed2GkET9ilwdDHsjGVovO1xcXGjYsCG//PILvXr1yvI69cWLFzlz5gzLly/Xu1H648eP6dWrF//88w8eHh5Z7mf37t08ffqUiIgILCwsUBSF5ORk7ty5w9ixY4mLi8PFxcXo7RNCFHwXL15k48aNJCQkoFKpaNiwIU2aNMHKStLSv0nX9yuq7VabEg4lUJH5wu8qVJR0KEltt9o5sv/PPvsMjUZDt27diIyM5MqVK1y9epV169Zx9epVLC0tCQsLw8fHh7p16+Lh4aH7qVOnDr6+vi8dVBYWFkbTpk2pVq2a7rVVqlShTZs2FC1alPXr1+dI24QQBVtaWhqRkZEkJCRQvHhx+vfvT4sWLSRJZ0ES9SuytLBkfL3xABmSdfrjcfXG5dh86nLlyrF27VoaNGjAN998Q+fOnenWrRu//PIL7733HsOHD2f9+vW0bt0609e3adOG9evX665l/1tsbCy7d+/O9PUqlYrWrVtne/S4EELAszUaOnXqRIMGDRg8eDClS5c2dUh5mkp5fsKtmUlOTubatWtUrFhR77puVhRFITExEQcHB91ArszmUZd0KMm4euNydB61KWTW/sxk97jmFxqNhhMnTuDr62u2o1DN/RhI+1+t/cnJyWzdupWyZctSu3bO9DLmBlP9/qWf4TW1LN+SZmWb5frKZEIIkR9cvnyZDRs28PjxYy5cuEDNmjWxtbU1dVj5iiRqI7C0sKRuybqmDkMIIfKMlJQUtm3bxrFjz6aoFi1alM6dO0uSfgWSqIUQQhjV1atXWb9+PY8ePQKe3eCnRYsW2NjYmDiy/EkStRBCCKOJj4/nl19+QVEUnJ2d6dy5MxUqVDB1WPmaJGohhBBG4+zsTGBgIGlpabRs2VLOoo0g24k6JCQk0xG/KpUKGxsbypcvT5cuXahfv75RAhRCCJF3paam8scff1CnTh2KFy8OQMuWLV84M0RkT7bnUTdq1Ihbt25hb29PQEAA9erVw8HBgZs3b+Lt7U1MTAz9+vVjx46X3znq8OHDDBkyhKCgIDw9PTO8RlEU5s6dS1BQED4+PvTu3ZtLly5lN2QhhBA54MaNGyxcuJCDBw+ybt063e11JUkbV7bPqOPi4ujXrx/vv/++Xvn8+fO5c+cOP/74I3PmzGH+/Pm0bPniecSJiYl4enrStWtXRowYkeH5JUuWsHTpUmbOnEmFChVYsGAB/fr1Y8uWLTg5OWU3dCGEEEaQlpbG9u3bOXjwIACFCxemadOmkqBzSLbPqDdv3kzHjh0zlHfo0IHNmzfr/n/t2rWXbqtJkyaMGjUq09WvFEVh2bJlDBkyhNatW+Ph4cGXX35JcnIyGzduzG7YQgghjODhw4csWbJEl6T9/PwYOnQolStXNnFkBVe2E7WtrS3Hjx/PUH78+HHd/DhFUV57AMHt27eJiYnRu0OTjY0NdevWzXT/QgghctbVq1fZv38/Dx8+pFChQrz99tsEBwcXqBUI86Jsd3336tWLzz77jDNnzuDt7Y1KpeLUqVOEhYUxePBgAPbu3at3W8RXkX4/0mLFiumVFy9enDt37mRrW1qtlsxWStVoNCiKovt5mfQ6eWXV1ZiYGBYuXMju3buJjo6mWLFiVKtWjb59+9KvX78XvvaLL76ga9eubN26lV9++YXz58+j1WopU6YMbdq04Z133sHZ2Zk1a9YwceLEDK///PPPefPNNzPddvrx1Gg0aDQao7Q1L0hvS0FqU3aZ+zEw9/aXKVOGIkWKUK5cOdq0aYOdnZ1ZHQtj//4NXYY024l62LBhlClThhUrVujunlSxYkU+//xzOnXqBECPHj3o2bNndjedqX9f83iVJHnmzBnS0tIyfc7KyoqkpCS0Wq3B20tKStKPSaMh5fhxNLGxWBYvjq2fH6ocXgf2zp079OvXj0KFCjFy5EiqVq2KWq3mwIEDTJ48mW3btunqzpo1i6dPnzJlyhRdmZOTE1999RU///wzb7/9NsOGDcPV1ZWbN28SFhZGWFgYb7/9NqmpqTg5ObFmzRq9/Ts5OZGYmJhpbCkpKaSlpXHhwoUcabuppd8715yZ+zEwl/ZrNBpu3LhBhQoVsLB41gEbGBiIlZVVgf37NoSxfv/+/v4G1XuledTBwcEEBwdn+bwxukHSbxweGxuLm5ubrvzBgwe6KQCG8vLyyjTBJycnc+PGDezt7Q2+KUdSUhL29va6LxBPtm0nOvQL1Pf+/6YcViVLUGLCRAq1bpWtOLPjq6++wsLCgrCwML37UXt7e9OjRw8KFy6sK3N0dESr1VKuXDld2alTp/jxxx+ZOHEiffr00ZVXqVKF5s2b8/jxYxwcHLCxsUGlUlGuXLlM258ZCwsLrK2tqVKlSoHqEtNoNJw+fRpvb2+zvCEDyDEwp/bfuXOHDRs2EBMTQ9GiRWnatKlZtT8zpmr/Ky94kpqaysOHDzOcibq7u792UPCsi8XV1ZV9+/bputFTU1M5fPgwY8aMyda20r8J/pulpSUqlUr3Y6j0+o+3bSPqww/hX18C1NH3ifrwQ0r/9z8UzuI2k68jPj6ePXv2MGrUKBwdHTM8X6RIkQzxPv8vwIYNG3BwcODtt9/OtO3p28jstS87XunPW1paFsg/5oLaruww92NQkNuv0WjYvXs3e/fuRVEUHB0dKV26tF57C3L7DZHb7c92or5+/ToTJ07MMKBLURRUKhXnz583eFtPnz7l5s2buse3b9/m/PnzFClSBHd3d/r06cOiRYuoUKEC5cuXZ9GiRdjZ2WU66jy3KRoN0V+EZkjSz55UQKUi+otQCrVoYfRu8Js3b6IoCpUqVXrlbdy4cYOyZctibW390rpPnjzBz88PQPeHu2/fvlfetxAib7p79y4RERHcv38feNYb2a5dO71eO5H7sp2ox48fj5WVFQsXLsTNze215s2dOXNGr9s1NDQUgC5dujBz5kwGDhxISkoKU6dO5dGjR9SqVYsff/wxT8yhTjxyFPW9e1lXUBTU9+6ReOQojgH1jLpvYywqkP7FyhCOjo6sXbtW1/Wd2Vm8ECJ/O3XqFOvWrUOr1eLg4ECHDh1ee1CwMI5sJ+oLFy4QHh5ulDlzAQEBXLx4McvnVSoVI0aMyHQxFFNT/29UurHqZUf58uVRqVRcuXLlpYvKZKVChQocPXqUtLS0l55VW1hYUL58eRRFITExUb5dC1EAlS1bFktLSzw9PenQoYN8Ic9Dsj2PunLlysTFxeVELPmK1f8GuxmrXnY4OzsTFBTEihUrMh15/fjx45duo1OnTiQmJvLrr79m+rwh2xBC5F8ajYbLly/rHru4uDBkyBDefPNNSdJ5TLYT9ZgxY/j66685ePAgcXFxJCQk6P2YC4c6/liVLAlZdR+rVFiVLIlDHcOG32fXZ599hlar5c0332Tr1q1cv36dK1eusGzZMrp37/7S19eqVYsBAwbw5Zdf8tVXX3H8+HGioqI4cOAAI0eOZO3atTkStxDC9O7fv88PP/zAihUruH79uq68aNGisgxoHpTtru/0hTTeffddvfJXGUyWn6ksLSkxcQJRH3z4LFk/P6jsf2/0EhMn5Nh86rJly7JmzRoWLlzIl19+yf379ylatCg1a9bUmy/9ImPHjqVmzZr8+uuv/PbbbyiKQtmyZWnTpg1dunTJkbiFEKaj1WrZv38/u3btQqPRYGdnR3JysqnDEi+hUrK5gsihQ4de+Hy9esYdOJWTkpOTuXbtGhUrVjR4HnX6Ndr0b52Pt20j+otQvYFlViVLUmLihByZmmVKmbU/M9k9rvmFRqPhxIkT+Pr6mu3UFHM/Bvm5/TExMaxbt46oqCgAPDw86NixI4UKFTJ4G/m5/cZgqvZn+4w6PyXi3FC4dWsKtWjxbBR4TAxWrq441PHP8ZXJhBDCUIcPH2br1q1oNBpsbW1p27YttWrVkm7ufMKgRH3hwgU8PDywsLB46bJx1apVM0pg+YnK0tLoU7CEEMJYbG1t0Wg0VKlShU6dOumtXCjyPoMSdUhICPv27aNYsWKEhISgUqkyXZLTnK5RCyFEXqUoCnFxcRQtWhR4trSwg4MDlStXlrPofMigRL1z507dL3znzp05GpAQQohX9/DhQ9atW8fDhw8ZNmyYbm3+KlWqmDo08YoMStSlS5fW/f/OnTv4+flhZaX/UrVazfHjx/XqCiGEyB2KonDo0CF27NiBWq3GxsaGu3fvvtZSwyJvyPY86j59+vDo0aMM5U+ePNFbDlQIIUTuiIuL4+eff2bLli2o1WoqVKjA0KFDJUkXENke9Z3VGtHx8fHY29sbJSghhBAvpygKR44cYfv27brlgFu1akWdOnXkWnQBYnCiHj58OPBswNj48eOxsbHRPafRaLh48aLuDktCCCFynkqlIioqirS0NMqXL09wcLBuPJEoOAxO1OmT4tNvc/j8QhbW1tb4+vry5ptvGj9CIYQQOoqikJaWpjtZatOmDWXKlMHf31/OogsogxN1+i0oS5cuzXvvvSd3UBJCiFz26NEjNmzYgKWlJT169EClUmFvb0+dOnVMHZrIQdm+Rp3eBS5Ma/z48ZneOCMoKIhvvvmGuXPnsnfvXu7du4eLiwstW7bkgw8+0Fsu0NPTM8Pra9euzcqVK3WPd+3axXfffcfFixext7fHz8+PBQsW5EyjhBCZUhSFEydOsHXrVlJSUrCysiI2NhbXHLg7n8h7DErUXbp04aeffqJIkSK6BU+yYo53XdJqFe5eiufp4xQcC9tSqqozFhY53wXVqFEjXU9HOhsbG6Kjo7l//z7jxo2jSpUqREVFMWXKFO7fv8+cOXP06oeGhtKoUSPd4+fvTb1161Y++eQTRo0aRf369dFqtZw5cyZnGyWE0PP48WM2btzIpUuXgGe9miEhIRQvXtzEkYncYlCibtGihe56SMuWLXM0oPzmyvH77Fl1iafxKboyR2dbGnWvSmU/txzdt42NTabfqIsUKcLcuXN1j8uVK8eHH37I2LFjUavVenPgCxcunOk21Go1M2bMYOzYsbqxB4qiULJkyRxoiRDi3xRF4dSpU2zZsoXk5GQsLS1p1qwZgYGBWFhke2atyMcMStTPd3dL1/f/u3L8PlsWZTzDfBqfwpZFZ2g72CvHk7WhEhIScHJyyrBQTVbOnTtHdHQ0FhYWhISEEBsbS7Vq1Rg5ciTe3t45HK0QQq1Ws3v3bpKTk3F3dyckJES6us1Utq9Ri2e0WoU9qy69sM7e1ZeoWMs1x7rBd+3alWFK3IABA3j//ff1yuLi4pg/fz7du3fPsI3Ro0fr3a5t1qxZtGzZklu3bgEwb948xo8fT+nSpfnxxx8ZOHAgW7ZswcXFJQdaJIR5S7+Hgkqlwtrams6dO3Pz5k0aNmwoZ9FmzKBEXbduXYOH/b/sftUFxd1L8Xrd3ZlJiEvh7qV4SnvmTFILCAhgypQpemVFihTRjyEhgcGDB1O5cuVMe0MmTJhAgwYNdI/Tv7FrtVoAhgwZQps2bYBn17MbN27Mli1b6NmzpzGbIoTZS0hIYNOmTVSoUIGAgAAAypcvT/ny5U0cmTA1gxL1xIkTdf+Pj49nwYIFBAUF4evrC8CJEyfYu3cvw4YNy5Eg86Knj1+cpLNb71XY29u/8I84ISGBAQMG4ODgwHfffac3UCydq6trpttIT9iVK1fWldnY2FCmTBnu3r1rhOiFEOnOnj3Lpk2bSEpK4tq1a/j6+mJra2vqsEQeYfCo73QjRoxg5MiR9OrVS1fWp08ffvnlF/bv38+7775r9CDzIsfChv0RGVrP2BISEujfvz82NjYsWLAg23/0Xl5e2NjYcO3aNd0czbS0NO7cuYO7u3tOhCyE2Xn69CmRkZGcO3cOgBIlShASEiJJWujJ9jXqvXv3MmbMmAzl6fN3zUWpqs44Otu+sPvbyeXZVK2ckpqaSkxMjF6ZpaUlNjY2vPfeeyQlJTFr1iwSEhJISEgAoGjRonrXpLPi5OREjx49mDt3LqVKlcLd3Z0ffvgBgLZt2xq/MUKYmXPnzrFp0yYSExNRqVQ0atSIxo0bG/T3KcxLthO1s7Mz27dvZ8CAAXrlO3bswNnZ2Vhx5XkWFioada+a6ajvdEFvVc3R+dR79uwhKChIr6xixYpMnTqVkydPAtCqVSu953fu3EmZMmUM2v7HH3+MlZUVH3/8McnJydSqVYtFixZluA4uhMieuLg4wsPD0Wq1uLm50blzZ+mpElnKdqIeMWIEkyZN4tChQ7pr1CdPnmTPnj1Mnz7d2PHlaZX93Gg72CvDPGonF1uC3srZedQzZ85k5syZWT5/8eLFl27jZXWsra0ZN24c48aNA56NSE1MTMxeoEKIDFxcXGjSpAlpaWk0adLE4GmTwjxl+93RtWtXKleuzLJly9i+fTuKolC5cmVWrlxJrVq1ciLGPK2ynxsVa7maZGUyIUT+kJSUxLZt2wgICNAtGtS4cWMTRyXyi1f6GlerVi2zuh79MhYWqhybgiWEyN/++ecfNmzYQEJCAtHR0QwcOFDuciWyxeAZ9JGRkaSmpuoe3759G41Go3uclJTEkiVLjBudEELkU8nJyaxbt46VK1eSkJBAsWLFaNeunSRpkW0GJ+qPPvqIJ0+e6B4HBwdz584d3eOnT5/y7bffGjc6IYTIhy5fvsyCBQs4ceIEAPXr12fw4MGULVvWtIGJfMngru/0pe2yepyfFaS25AVyPIU5u3LlCitWrACeTYfs3Lkz5cqVM3FUIj8z66GG6St1JSYmYm9vb+JoCo70keGZrYQmREFXsWJFypcvT8mSJWnRooX8HYjXZtaJ2tLSEmdnZ+7fvw+Ag4PDC68fKYpCSkoKFhYWZnmd6WXtT5++df/+fZydnWXhBmEWUlJS2L9/P0FBQVhbW2NhYUHv3r3l/S+MJluJes+ePRQqVAh49qF84MAB/vnnHwC969fGolarmTt3Lhs2bCA2NhZXV1e6dOnCsGHDjHYnmfSpEunJ+kUURSEtLQ1ra2uzTdSGtN/Z2VnuWy3MwrVr11i/fj3x8fGkpKToVu2TJC2MKVuJevz48XqPP/30U73Hxk5eS5Ys4bfffuPLL7+kSpUqnDlzhgkTJlCoUCH69u1rlH2oVCpKlSqFm5sbaWlpL6yr0Wi4cOECVapUMcs/REPab21tbZbHRpiX1NRU/vzzTw4fPgw8u2udp6eniaMSBZXBifrChQs5GUemTpw4QYsWLWjatCkAZcqUYdOmTZw5k/Wyna/K0tLypQkmfTqanZ2dWSYjc2+/EAAPHjxg8eLFxMfHA+Dv70+rVq3kRhoix+TpO5H7+/vz999/c+3aNeDZl4WjR4/SpEkTE0cmhDBHx48f58CBA8THx1O4cGF69epFx44dJUmLHJWnB5MNHDiQJ0+e0K5dOywtLdFoNIwaNYqOHTtmaztardYoU4bSzyifX+jFnEj7zbv9IMegYsWKWFtbU6NGDVq1aoWdnZ1ZHQtz//0bu/2G9kyqlDw86XXTpk189dVXfPzxx1SpUoXz588TGhrK+PHj9e6R/TKnTp166fVnIYT4N41GQ3R0tN6drZKTk7GzszNhVKKg8Pf3N6henk7UTZo0YdCgQbzzzju6svnz57N+/Xq2bNli8HaMeUZ9+vRpvL29zfIarbTfvNsP5nUMoqKiWL9+PQ8ePKBHjx5UqVLFrNqfGWm/cdtv6Day1fWt0Wg4evQonp6euXJP4uTk5AwjyS0tLbOddI01lev5GMzxTZpO2m/e7YeCfQzUajW7du1i//79KIqCk5NThvYW5PYbQtqfu+3PVqK2tLSkf//+REZG5kqibtasGQsXLsTd3V3X9b106VK6deuW4/sWQpifO3fuEBERQUxMDAA+Pj60bdtWVi4UJpXtwWQeHh7cvn07VxaXnzx5Mv/973+ZOnUqDx48wM3Nje7du/P+++/n+L6FEOZl//797NixA0VRcHR0pGPHjlSrVs3UYQmR/UQ9atQovvzySz744ANq1qyJg4OD3vNOTk5GC87JyYlJkyYxadIko21TCCEy4+LigqIoeHl50a5duwyfbUKYSrYT9YABAwAYOnSo3vVjRVFQqVScP3/eeNEJIUQO0Wg0xMbGUqJECQCqV69O//79KVOmjIkjE0JfthP1smXLciIOIYTINffu3WPdunU8evSIYcOG6XoCJUmLvCjbibpevXo5EYcQQuQ4jUbDvn372L17N1qtFnt7e2JjY416yU4IY3ullcmOHDnCb7/9xu3bt/nvf/9LiRIliIiIoEyZMtSpU8fYMQohxGu7f/8+ERER3L17FwBPT086duwoSVrkedmeYLx161b69++PnZ0dZ8+eJTU1FYCnT5+yaNEiowcohBCvQ1EU9u7dy+LFi7l79y52dnZ06dKF7t27S5IW+UK2E/WCBQuYOnUq06dPx8rq/0/Ia9euzblz54wanBBCvC6VSsWjR4/QaDR4eHgwbNgwfHx8zPKe8iJ/ynbX97Vr1zLt3nZycuLx48dGCUoIIV6HVqslJSVFt1BJq1atKF++PDVr1pQELfKdbJ9Ru7q6cvPmzQzlR48ezZVFUIQQ4kUePHjA0qVLWb16tW65YRsbG7y8vCRJi3wp24m6e/fuzJgxg5MnT6JSqYiOjmb9+vV8+eWXvP322zkRoxBCvJRWq+XAgQMsXLiQ27dvc+fOHWJjY00dlhCvLdtd3wMHDiQhIYE+ffqQkpJCr169sLGx4b333qNXr145EaMQQrzQw4cPWbduna63r1KlSgQHB+fKPQmEyGmvND1r1KhRDBkyhMuXL6MoCpUrV8bR0dHYsQkhxAspisKhQ4fYsWMHarUaGxsbWrduTe3ataWbWxQY2e76njBhAgkJCdjb2+Pt7Y2Pjw+Ojo4kJiYyYcKEnIhRCCEylX7rXbVaTcWKFRk6dCj+/v6SpEWBku1EHRERQUpKSoby5ORk1q1bZ5SghBAiK4qioNVqAbCysiIkJIT27dvTu3dvnJ2dTRucEDnA4K7vhIQEFEVBURSePn2Kra2t7jmNRsNff/1F0aJFcyRIIYQAiI+PZ/369VSsWJFGjRoB4O7ujru7u4kjEyLnGJyo69Spg0qlQqVS0aZNmwzPq1QqRowYYdTghBACnp1FHzt2jG3btpGamsrdu3epV6+e3gmDEAWVwYl62bJlKIpC3759mTt3rt5oSmtra9zd3XW3ixNCCGN59OgRGzZs4MqVKwCULVuWzp07S5IWZsOgRF2vXj22bNlC0aJF6dKlC4GBgbJGrhAiRymKwokTJ9i6dSspKSlYWVnRvHlzAgICsLDI9vAaIfItg97taWlpPH36FHg2mCz9RhxCCJFTHj16xKZNm0hJSaFMmTIMHjyYwMBASdLC7Bh0Ru3r68uwYcPw8vJCURSmT5+eZbdTaGioUQMUQpgnZ2dnWrZsiUajkQQtzJpBiXrWrFn89NNP3Lx5E5VKxZMnTzKdoiWEEK/qyZMnREZG0rBhQ8qUKQNA/fr1TRyVEKZnUKIuXrw4Y8aMAaB58+Z89dVXuLi4ZKinVquNG50QosBTFIUzZ84QGRlJcnIycXFxDB48WBYtEeJ/sr2E6B9//JGh7PLly4SFhbF+/Xr2799vlMCEEAVfQkICmzZt4sKFCwCUKlWKzp07S5IW4jmvtNY3wNOnT4mMjCQsLIzTp09Tq1YtBg0aZMzYhBAF2NmzZ9m0aRNJSUlYWFjQuHFjgoKCsLS0NHVoQuQp2U7UR44cISwsjK1bt1KmTBmuXLnC8uXL8ff3z4n4hBAF0JUrVwgLCwOgRIkShISEULJkSRNHJUTeZHCiXrJkCeHh4SQmJtKhQwdWrlxJtWrVqFmzptxKTgiRLZUqVaJq1aqUKlWKxo0by1m0EC9gcKKePXs2AwcOZOTIkfJHJYTIlsTERHbv3k3z5s2xtbVFpVLRs2dPuRYthAEMTtQjR45k7dq1rFu3jg4dOtC5c2c8PDxyMjaRz2m1CncvxfP0cQqOhW0pVdUZCwv5YDY3Fy5cYOPGjTx9+hS1Wk2nTp0AJEkLYSCDE/WQIUMYMmQIhw4dIjw8nO7du1O2bFkUReHRo0c5GaPIh64cv8+eVZd4Gv//8+0dnW1p1L0qlf3cTBiZyC1JSUls2bKFU6dOAeDq6krt2rVNHJUQ+U+2B5PVq1ePevXq8cknn7BhwwbWrFlD79698fHxoU2bNvTr1y8n4hT5yJXj99my6EyG8qfxKWxZdIa2g70kWRdw//zzDxs2bCAhIQGVSkWDBg1o2rQpVlavPNFECLP1ymvyOTk50bNnT37//XfWrl2Lt7c3ixcvNmZsIh/SahX2rLr0wjp7V19Cq1VyKSKR244cOcLKlStJSEigWLFivPfee7Rs2VKStBCvyCiL53p6ejJp0iT++usvY2xO5GN3L8XrdXdnJiEuhbuX4nMnIJHrqlevjqOjI4GBgQwePFi3HKgQ4tUY9SuutbW1MTcn8qGnjw1bA97QeiLvS0lJ4cyZM7q1FBwdHRk+fDh2dnYmjkyIgiHP90VFR0cza9Ys9uzZQ3JyMhUqVGDGjBl4eXmZOjSRCcfCmd9V7VXribzt6tWrrFu3jsePH2NnZ0fNmjUBJEkLYUR5OlE/evSInj17EhAQwJIlSyhatCi3bt2icOHCpg5NZKFUVWccnW1f2P3t5PJsqpbIv1JSUvjjjz84evQoAC4uLjg5OZk4KiEKpjydqJcsWULJkiX17nEt17vyNgsLFY26V8101He6oLeqynzqfCw2NpbFixfrpmXWrVuXli1bYmNjY+LIhCiYsj2Y7OzZs1y8eFH3eMeOHQwbNoxvv/2W1NRUowb3xx9/4OXlxciRIwkMDCQkJITVq1cbdR/C+Cr7udF2sBeOzvrd204utjI1K5/bs2cPf//9N48ePaJIkSL06dOH9u3bS5IWIgdl+4z6008/ZdCgQXh6enLr1i1Gjx5Nq1at2LJlC0lJSUyaNMlowd26dYuVK1fSr18/hgwZwqlTp5g+fTo2NjaEhIQYvB2tVouivP50II1Go/evuclO+yv4FKOcV1HuXn5E4uNUHArbUKpKESwsVPn2+Jn77x/Q3TjDz8+Pli1bYmtra1bHw9zfA9J+47bf0OW4VUo2M5i/vz9r166lXLlyLF68mIMHD/LDDz9w9OhRRo8eze7du18p4Mx4eXnh5eXFb7/9piubPn06p0+fZtWqVQZv59SpU6SlpRktLiHMhUaj4fHjx7i4uOjKnjx5QqFChUwYlRAFg6F3ncz2GbWiKGi1WgAOHDhA06ZNgWc3fI+Li8vu5l7I1dWVypUr65VVqlSJrVu3Zms7Xl5eRjujPn36NN7e3mZ5YxJpv3m1/9atW7rVxQYPHkyRIkXM7hj8m7Rf2m+K9mc7UXt5ebFgwQICAwM5fPgwU6ZMAeD27dsUL17cqMHVrl2ba9eu6ZVdv36d0qVLZ2s7FhZGWddFx9LS0izfpOmk/QW7/Wlpafz5558cOHAAgEKFCvH06VOKFi2qq1PQj8HLSPul/Xk6UU+cOJGxY8eyY8cOhgwZQvny5QHYunUrfn5+Rg2ub9++9OzZk4ULF9KuXTtOnTrF6tWrmTZtmlH3I4R45vbt20RERPDgwQMAfH19adOmjcyLFsKEsp2oq1WrxoYNGzKUf/zxx0Y/c/Xx8WHevHl8++23fPfdd5QpU4aJEycSHBxs1P0IIWDnzp3s27cPRVFwcnKiU6dOcitbIfKAV55HnZqaysOHD3XXq9O5u7u/dlDPa9asGc2aNTPqNoUQGaXPjvDx8aFt27bY29ubOiQhBK+QqK9du8akSZM4fvy4XrmiKKhUKs6fP2+04IQQOUetVpOUlKQbwd2sWTMqVKhA1apVTRyZEOJ52U7UEyZMwMrKioULF+Lm5oZKJStMCZHf3L17l4iICKytrXnvvfewsLDAyspKkrQQeVC2E/WFCxcIDw/PMG1KCJH3aTQa9uzZw549e9BqtTg4OPDw4UOjz9gQQhhPthN15cqVjT5fWuQQrQZu7IeEaHAqAeUbgIX5Tqkwd/fu3WPdunXcu3cPgBo1atC+fXscHR1NHJkQ4kWynajHjBnD119/zahRo/Dw8MhwD2q5g04ecW49bBkHj+/8f1lhd2j7JdSQUfPmRKvVsmfPHv766y+0Wi329vZ06NBBd0tKIUTelu1E3a9fPwDeffddvXIZTJaHnFsPq/sA/1qN7fHdZ+VvLZNkbWYuXryIVqulWrVqdOjQQb5QC5GPZDtRL1u2LCfiEMai1Tw7k/53kob/lalgy3io1kG6wQuw9KlWlpaWWFhYEBISQnR0NF5eXjIAVIh8JtuJul69ejkRhzCWG/v1u7szUOBx1LN6FRvlWlgi98TExBAREUGlSpVo0aIFAG5ubri5ye1FhciPXmnBk8ePHxMWFsaVK1dQqVRUqVKFbt26yR118oKEaOPWE/mGVqvlwIED/Pnnn2g0GuLj42nYsKEs/ylEPpftNT9Pnz5Nq1at+Omnn3j06BFxcXEsXbqUli1bcvbs2ZyIUWSHUwnj1hP5QmxsLEuXLmXHjh1oNBqqVKnC4MGDJUkLUQBk+4w6NDSU5s2b8/nnn2Nl9ezlarWayZMn88UXX7BixQqjBymyoXyDZ6O7H98l8+vUqmfPl2+Q25GJHKDVajl48CB//PEHarUaW1tb2rRpg6+vr1yLFqKAyPYZ9ZkzZxgwYIAuSQNYWVkxYMAAzpw5Y9TgxCuwsHw2BQuAf39Q/+9x25kykKyAePLkCX/++SdqtZpKlSoxdOhQ/Pz8JEkLUYBk+4zaycmJu3fvZliZ7O7du7JwQl5RI/jZFKxM51HPlKlZ+Vz6VEiAIkWK0K5dO7RaLbVr15YELUQBlO1E3b59eyZNmsS4ceN039yPHj3KV199RYcOHXIiRvEqagQ/m4IlK5MVKHFxcaxfv57GjRtTsWJFAKPfB14IkbdkO1F//PHHun81Gs2zjVhZ0bNnT8aMGWPc6MTrsbCUKVgFhKIoHDlyhO3bt5OWlkZiYiJDhgyRM2ghzEC2E7WNjQ2TJ0/mo48+4ubNmyiKQvny5eXetULkkPj4eNavX8+1a9cAqFChAsHBwZKkhTATrzSPGsDe3h5PT09jxiKEeI6iKBw7doxt27aRmpqKtbU1LVu2pG7dupKkhTAjBiXq4cOHM3PmTJycnBg+fPgL686bN88ogQlh7q5evcrGjRsBKFeuHJ07d6Zo0aImjkoIkdsMStTPrzjm5OQk3+aFyAWVKlXC29sbd3d36tWrh4VFtmdTCiEKAIMSdWhoqO7/M2fOzLFghDBnjx8/ZufOnbRp0wYHBwdUKhVdunSRL8ZCmLlsf0Xv06cPjx8/zlCekJBAnz59jBKUEOZEURROnjzJ/PnzOXXqFFu3btU9J0laCJHtwWSHDh0iLS0tQ3lKSgpHjx41SlBCmIsnT56wceNG/vnnHwDc3d0JCgoycVRCiLzE4ER94cIF3f8vX75MTEyM7rFWq2XPnj2UKCE3ehDCEIqicPr0aTZv3kxycjKWlpY0bdqUBg0ayLVoIYQegxN1SEgIKpUKlUpF3759MzxvZ2fH5MmTjRqcEAXV4cOH2bx5MwClSpUiJCRE7hcthMiUwYl6586dKIpCy5Yt+f333/WmiVhbW1OsWDEsLWV5SiEM4ePjw4EDB/Dz86Nhw4bytyOEyJLBibp06dKAfhe4EMIwT58+5cSJEzRo0ACVSoWdnR3vv/++3l3ohBAiM9n+lFi0aBHFihXjjTfe0CsPCwvj4cOHDBo0yGjBCVEQnDt3jk2bNpGYmIijoyO+vr4AkqSFEAbJ9qiVVatWUalSpQzlVatW5bfffjNKUEIUBImJiYSHh/P777+TmJiIm5ubDLgUQmRbtr/Sx8TE4OrqmqG8aNGieiPBhTBnFy5cYOPGjTx9+hSVSkVQUBBNmjSRa9FCiGzLdqIuVaoUx44do2zZsnrlR48elVGrQvBs4OXevXsBcHV1JSQkBHd3dxNHJYTIr7KdqN944w2++OIL1Go19evXB+DAgQPMmjWL9957z+gBCpHfVK1alf379xMYGEjTpk3lWrQQ4rVk+xNk4MCBPHr0iKlTp+pWKLO1tWXAgAEMHjzY6AEKkdclJycTFRVF5cqVgWd3uho5ciRFihQxcWRCiIIg24lapVIxduxYhg0bxpUrV7Czs6NChQrY2NjkRHx6Fi1axLfffkufPn2YNGlSju9PiJe5fPky69evJykpiSFDhlCsWDEASdJCCKN55T45R0dHfHx8jBnLC506dYpVq1bh6emZa/sUIivJycls27aN48ePA88GU6amppo4KiFEQWRQoh4+fDgzZ87EycmJ4cOHv7DuvHnzjBLY854+fcrYsWOZPn06CxYsMPr2hciOq1evsnHjRt1d5AICAmjRogXW1tYmjkwIURAZlKgLFSqU6f9zy7Rp02jSpAkNGjSQRC1M6syZM1y/fh0AFxcXOnfuTPny5U0blBCiQDMoUYeGhmb6/9ywadMmzp07R1hY2CtvQ6vVoijKa8ei0Wj0/jU30n6NbixGnTp1aN68OTY2NmZ1POQ9IO1//l9zY+z2G7qugkoxRgbLIXfv3qVbt278+OOPVKtWDYDevXtTrVq1bA0mO3XqVKb30BbiZdRqNampqTg4OADPvvTFx8fr3ZRGCCFehb+/v0H1DErU6be4NMTatWsNqmeIHTt28P777+t969BoNKhUKiwsLDh9+rRB30iMeUZ9+vRpvL29zXKFKXNr/40bN9iwYQO2tra6NQLMqf2ZMbf3wL9J+6X9xmy/odswqOu7ZcuWuv+npKTw66+/UqVKFd3NBU6ePMmlS5d4++23sx/pC9SvX58NGzbolU2YMIFKlSoxcOBAgxtpYZHtJc1fyNLS0izfpOkKevvT0tLYuXMnBw8eBJ5NtXry5AnOzs5AwW+/Icz9GEj7pf252X6DR32nmzRpEr179+bDDz/UqzNnzhzu3r1r1OCcnJzw8PDQK3NwcMDZ2TlDuRDGcPPmTdatW8fDhw8BqF27Nq1bt8bW1tZsr8sJIUwr26eaW7ZsISQkJEN5cHAw27ZtM0ZMQuQ6jUbDtm3bWLp0KQ8fPqRw4cK88847dOrUCVtbW1OHJ4QwY9le8MTOzo6jR49SoUIFvfKjR4/mygfa8uXLc3wfwvxYWFgQFRUFgK+vL23atMHOzs7EUQkhxCsk6r59+zJlyhTOnj1LrVq1gGfXqMPDw3n//feNHqAQOUWtVqMoCtbW1qhUKjp37kxsbKxcVhFC5CnZTtSDBg2iTJkyLFu2jI0bNwJQqVIlQkNDad++vdEDFCInREVFERERQeXKlWnbti3wbBlQmXYlhMhrXmmt7/bt20tSFvmSWq1m9+7d7Nu3D0VRSE5OpmnTptLNLYTIs14pUT9+/JitW7dy69Yt3nvvPZydnTl79izFixenRIkSxo5RCKO4e/cuERER3L9/HwBvb2/atm0rSVoIkadlO1FfuHCBfv36UahQIaKionjzzTdxdnZm+/bt3Llzh6+++ion4hTilWk0Gv766y/27NmDoig4ODjQsWNHqlevburQhBDipbI9PWvmzJl06dKFbdu26d2DunHjxhw5csSowQlhDImJiRw8eBBFUahZsybDhg2TJC2EyDeyfUZ9+vRppk2blqG8RIkSxMTEGCUoIV6XVqvVrUhXqFAhOnXqBEDNmjVNGZYQQmRbts+obW1tSUhIyFB+7do1GTEr8oT79+/z/fff888//+jKatasKUlaCJEvZTtRt2jRgu+++07vblR37tzhm2++oXXr1kYNTojs0Gq17Nmzh0WLFnH37l127txplJuxCCGEKWW763vcuHEMHDiQBg0akJKSQu/evYmNjcXX15dRo0blRIwFnkar4dj9Y8QkxuDq4Eptt9pYWpjvgvevIiYmhoiICO7cuQOAh4cHHTt2NPiub0IIkVdlO1E7OTmxcuVKDhw4wLlz59BqtdSsWZMGDRrkRHwF3o4bO5h5aCbRidG6shIOJRhfbzwty7d8wSsFPDuLPnDgAH/++ScajQY7Ozvatm2Lj4+PJGkhRIGQrUStVqvx8fEhIiKCwMBAAgMDcyous7Djxg5G7xqNgn737P3E+4zeNZpvm34ryfolbty4wY4dOwCoWrUqHTt2pHDhwiaOSgghjCdbidrKygp3d3e0Wm1OxWM2NFoNMw/NzJCkARQUVKj48tCXNCvbTLrBX6BixYrUrVuXUqVK4evrK2fRQogCJ9uDyYYOHco333xDfHx8DoRjPo7dP6bX3f1vCgr3Eu9x7P6xXIwq73vw4AErV67kyZMnurL27dvj5+cnSVoIUSBl+xr18uXLuXHjBo0aNcLd3R0HBwe959euXWu04AqymETD5pwbWq+gUxSFgwcPsnPnTtRqNdu2baNbt26mDksIIXJcthN1ixYt5MzlXxSNhsQjR1HHxGDl6opDHX9Uli/urnZ1cDVo24bWK8ji4uJYt24dN27cAJ51d7do0cLEUQkhRO7IdqIeMWJETsSRbz3eto3oL0JR37unK7MqWZISEydQ+AXzymu71aaEQwnuJ97P9Dq1ChUlHEpQ2612jsSdHyiKwpEjR9i+fTtpaWlYW1vTunVr/P395cuiEMJsGHyNOikpialTp9KoUSMCAwP56KOPePjwYU7Gluc93raNqA8+1EvSAOroaKI++JDH27Zl+VpLC0vG1xsPPEvKz0t/PK7eOLMeSHbo0CEiIyNJS0ujQoUKDB06lDp16kiSFkKYFYMT9Zw5c1i7di1NmzalQ4cO7Nu3jylTpuRgaHmbotEQ/UUoZLby1f/Kor8IRdFostxGy/It+bbpt7g5uOmVl3AoIVOzAD8/P9zc3GjXrh19+vTBxcXF1CEJIUSuM7jre/v27cyYMYMOHToAEBwcTM+ePdFoNFi+5HpsQZR45GiGM2k9ioL63j0SjxzFMaBeltValm9Js7LNZGUy4NGjRxw+fFg3DsLGxobBgwfrbq4hhBDmyOBEfe/ePerUqaN77OPjg6WlJffv36dUqVI5ElxepjbwTmGG1LO0sKRuybqvG1K+pSgKx48fZ+vWraSmplK4cGHq1Xv25UaStBDC3BmcqDUaDdbW1npllpaWqNVqoweVH1i5GjYa29B65urx48ds2LCBy5cvA1CmTBkqV65s4qiEECLvMDhRK4rC+PHjsbGx0ZWlpqYyZcoU7O3tdWXz5s0zboR5lEMdf6xKlkQdHZ35dWqVCqsSJXCo45/7weUDiqJw8uRJtmzZQkpKCpaWljRv3pz69evLWbQQQjzH4ETdpUuXDGXBwcFGDSY/UVlaUmLiBKI++BBUKv1k/b9RySUmTnjpfGpztW3bNv7++28ASpcuTefOnXGV3gchhMjA4EQdGhqak3HkS4Vbt4b//ifjPOoSJV46j9rceXt7c/ToURo3bkyDBg3kLFoIIbKQ7QVPhL7CrVtTqEWLbK9MZm4SEhK4efMmNWrUAMDd3Z1Ro0bpXTYRQgiRkSRqI1BZWr5wCpY5UxSFs2fPEhkZSUpKCsWKFaNEiRIAkqSFEMIAkqhFjnn69CmRkZGcO3cOgJIlS8qqYkIIkU2SqEWOOHfuHJs2bSIxMRELCwsaN25MUFCQWS6OI4QQr0MStTC6devWceLECQDc3NwICQkxy0VxhBDCGCRRC6NzdXVFpVIRFBREkyZN5CxaCCFegyRq8dqSkpJISEjQzYOuX78+lStX1g0aE0II8erydKJetGgR27Zt4+rVq9jZ2eHn58eYMWOoVKmSqUMT/3Px4kU2btyIra0tgwcPxtraGgsLC0nSQghhJHl6lYlDhw7xzjvvsHr1apYuXYpGo6F///4kJiaaOjSzl5ycTEREBL/99hsJCQmoVCqePHli6rCEEKLAydNn1D/88IPe49DQUAIDAzl79ix165rv3aZM7fLly2zatEmXmAMDA2nWrFmGm7YIIYR4fXk6Uf9bemIoUqSIiSMxT2q1mpMnT3Lr1i0AihYtSkhICGXLljVxZEIIUXDlm0StKAqhoaH4+/vj4eGRrddqtVqUzO5wlU0ajUbvX3OUnJwMQEBAAE2bNsXa2tpsjof8/uUYSPul/c//+7oMnRGjUoyRwXLB1KlT2b17N7/++islS5bM1mtPnTpFWlpaDkVWsKXfb9zK6tl3uqSkJBITEylWrJgpwxJCiHzP39+w2yDni0T9+eefs2PHDn755ZdX6mY15hn16dOn8fb2Nou5wdeuXWPjxo1UrFiRjh07ml37/83c2w9yDKT90n5jtt/QbeTprm9FUfj888/Zvn07y5cvf+Vroca+haKlpWWBfpOmpqayfft2jhw5AsD169dJS0vTDRYr6O1/GXNvP8gxkPZL+3Oz/Xk6UU+dOpWNGzcyf/58HB0diYmJAaBQoULY2dmZOLqC6fr166xbt474+HgA6tSpQ6tWrbCxsTHb61JCCGFKeTpRr1y5EoDevXvrlYeGhtK1a1dThFRgpaamsnPnTg4dOgQ8G1kfHBwsi8sIIYSJ5elEffHiRVOHYDbS0tI4c+YMALVr16Z169bY2tqaOCohhBB5OlGLnKVWq3WjuR0dHQkJCUGlUlGlShUTRyaEECJdnl5CVOScW7dusXDhQs6ePasrq1q1qiRpIYTIY+SM2syo1Wr+/PNPDhw4gKIo/PXXX9SoUQOVSmXq0IQQQmRCErUZiYqKIiIigtjYWABq1apFmzZtJEkLIUQeJonaDKjVanbv3s2+fftQFAUnJyc6duyIp6enqUMTQgjxEpKozUBUVBR79+4FwNvbm7Zt2+Lg4GDiqIQQQhhCErUZKF++PEFBQbi7u1O9enVThyOEECIbZNR3AXTv3j2WLl2qW10MoEWLFpKkhRAiH5JEXYBoNBp2797NkiVLuHnzJtu3bzd1SEIIIV6TdH0XENHR0URERHDv3j0AqlWrRrt27UwclRBCiNcliTqf02q17Nu3j127dqHVarG3t6ddu3Z4eXnJtCshhCgAJFHnc4cPH+aPP/4AwNPTk44dO+Lk5GTiqIQQQhiLJOp8zt/fn7Nnz1KnTh28vb3lLFoIIQoYGUyWz8TGxrJx40a0Wi0AVlZW9OvXDx8fH0nSQghRAMkZdT6h1Wr5+++/+eOPP9BoNLi4uNCwYUMASdBCCFGASaLOBx48eMC6deu4desWAJUrV8bLy8vEUQkhhMgNkqjzMEVROHjwIDt37kStVmNjY0ObNm3w8/OTs2ghhDATkqjzsM2bN3P48GEAKlasSHBwMM7OzqYNSgghRK6SRJ2H1a1blzNnztC8eXP8/f3lLFoIIcyQJOo8JD4+nmvXruHn5weAq6srH374ITY2NiaOTAghhKlIos4DFEXh6NGjbN++nbS0NNzc3ChdujSAJGkhhDBzkqhNLD4+ng0bNnD16lUAypUrh729vYmjEkIIkVdIojYRRVE4fvw4W7duJTU1FSsrK1q0aEFAQIBcixZCCKEjidpEwsLCOHfuHABly5alc+fOFCtWzMRRCSGEyGskUZtIxYoVuXjxIs2bN6d+/fpYWMhqrkIIITKSRJ1Lnjx5wpMnT3B3dwee3UyjcuXKuLi4mDgyIYQQeZkk6hymKAqnT59m8+bN2NraMnToUGxtbVGpVJKkhRBCvJQk6hyUkJDAxo0buXjxIgAuLi4kJSVha2tr4siEEELkF5Koc4CiKJw5c4bNmzeTlJSEhYUFTZs2pWHDhnItWgghRLZIojYytVrNmjVrOH/+PAAlS5YkJCSEEiVKmDgyIYQQ+ZEkaiOztLQEwMLCgsaNGxMUFKQrE0IIIbJLErURJCYmolKpsLe3R6VS0aFDBxo1akSpUqVMHZoQQoh8Ll9cMF2xYgXNmzfH29ubrl27cuTIEVOHpHP+/Hnmz59PZGSkrszR0VGStBBCCKPI84k6MjKS0NBQhg4dSkREBP7+/gwcOJA7d+6YNK7ExETWrFnD6tWrefr0KdHR0SQnJ5s0JiGEEAVPnk/US5cupVu3brz55ptUrlyZSZMmUbJkSVauXGmymP755x8WLFjA6dOnUalUNGzYkEGDBmFnZ2eymIQQQhRMefoadWpqKmfPnmXQoEF65Q0bNuT48eO5Hk9ycjInTpzg9u3bABQvXpzOnTtTpkyZXI9FCCGEecjTiTouLg6NRpPhZhXFixcnJibG4O1otVoURXnteDQaDbGxsQAEBgbSpEkTrKys0Gg0r73t/CC9nebS3n8z9/aDHANpv7T/+X9fl6EzgvJ0ok7379s+KoqSrVtBnjlzhrS0NKPE4ufnh0qlomjRopw5c8Yo28xvTp8+beoQTMrc2w9yDKT90n5j8Pf3N6henk7ULi4uWFpa6s5i0z148IDixYsbvB0vLy+jnVGfPn0ab29vs5wbLe037/aDHANpv7TfFO3P04naxsaGmjVrsm/fPlq1aqUr379/Py1atDB4O8ZettPS0tIs36TppP3m3X6QYyDtl/ZLon5Ov379+Pjjj/Hy8sLPz49Vq1Zx9+5devToYerQhBBCiByX5xN1+/btiYuLY/78+dy/fx8PDw8WL15M6dKlTR2aEEIIkePyfKIGeOedd3jnnXdMHYYQQgiR6/L8gidCCCGEOZNELYQQQuRhkqiFEEKIPEwStRBCCJGHSaIWQggh8jBJ1EIIIUQeJolaCCGEyMMkUQshhBB5mEoxxt0qhBBCCJEj5IxaCCGEyMMkUQshhBB5mCRqIYQQIg+TRC2EEELkYZKohRBCiDxMErUQQgiRh0miFkIIIfIwSdRCCCFEHiaJWgghhMjDJFFnw4oVK2jevDne3t507dqVI0eOmDqkXLFo0SK6deuGn58fgYGBDBs2jKtXr5o6LJNZtGgRnp6ezJgxw9Sh5Jro6GjGjBlDQEAAtWrVonPnzpw5c8bUYeUKtVrN7Nmzad68OT4+PrRo0YJ58+ah1WpNHVqOOHz4MEOGDCEoKAhPT0927Nih97yiKMydO5egoCB8fHzo3bs3ly5dMlG0xvei9qelpTFr1iw6deqEr68vQUFBfPzxx0RHR+doTJKoDRQZGUloaChDhw4lIiICf39/Bg4cyJ07d0wdWo47dOgQ77zzDqtXr2bp0qVoNBr69+9PYmKiqUPLdadOnWLVqlV4enqaOpRc8+jRI3r27Im1tTVLlixh06ZNjB8/nsKFC5s6tFyxZMkSfvvtNz799FMiIyMZO3YsP/zwA8uXLzd1aDkiMTERT09PPv3000yfX7JkCUuXLuXTTz8lLCyM4sWL069fPxISEnI50pzxovYnJydz7tw5hg4dypo1a5g3bx7Xr19n6NChORuUIgzyxhtvKJ9++qleWdu2bZWvv/7aRBGZzoMHDxQPDw/l0KFDpg4lVyUkJCitW7dW9u3bp/Tq1UuZPn26qUPKFbNmzVJ69uxp6jBMZtCgQcqECRP0yoYPH66MGTPGRBHlHg8PD2X79u26x1qtVmnYsKGyaNEiXVlKSori7++vrFy50hQh5qh/tz8zJ0+eVDw8PJSoqKgci0POqA2QmprK2bNnCQoK0itv2LAhx48fN1FUpvPkyRMAihQpYuJIcte0adNo0qQJDRo0MHUoueqPP/7Ay8uLkSNHEhgYSEhICKtXrzZ1WLnG39+fv//+m2vXrgFw4cIFjh49SpMmTUwcWe67ffs2MTExep+FNjY21K1b1yw/CwESEhJQqVQ52sNklWNbLkDi4uLQaDQUK1ZMr7x48eLExMSYKCrTUBSF0NBQ/P398fDwMHU4uWbTpk2cO3eOsLAwU4eS627dusXKlSvp168fQ4YM4dSpU0yfPh0bGxtCQkJMHV6OGzhwIE+ePKFdu3ZYWlqi0WgYNWoUHTt2NHVouS798y6zz0JzuAz4bykpKXz99dd07NgRJyenHNuPJOpsUKlUeo8VRclQVtBNmzaNf/75h19//dXUoeSau3fvMmPGDH788UdsbW1NHU6uUxQFLy8vRo8eDUCNGjW4fPkyK1euNItEHRkZyfr16/nmm2+oUqUK58+fJzQ0FDc3N7p06WLq8Ewis89Cc5OWlsaoUaNQFIUpU6bk6L4kURvAxcUFS0tLYmNj9cofPHhA8eLFTRRV7vv888/5448/+OWXXyhZsqSpw8k1Z8+e5cGDB3Tt2lVXptFoOHz4MCtWrOD06dNYWlqaMMKc5erqSuXKlfXKKlWqxNatW00UUe766quvGDRoEB06dADA09OTO3fusGjRIrNL1K6urgDExsbi5uamKze3z8K0tDQ+/PBDbt++zc8//5yjZ9Mgo74NYmNjQ82aNdm3b59e+f79+/Hz8zNRVLlHURSmTZvGtm3b+PnnnylbtqypQ8pV9evXZ8OGDUREROh+vLy86NSpExEREQU6SQPUrl1bd3023fXr1yldurSJIspdycnJGc4gLS0tzfIsskyZMri6uup9FqampnL48GGz+CyE/0/SN27c4KeffsLFxSXH9yln1Abq168fH3/8MV5eXvj5+bFq1Sru3r1Ljx49TB1ajps6dSobN25k/vz5ODo66q5TFSpUCDs7OxNHl/OcnJwyXI93cHDA2dnZLK7T9+3bl549e7Jw4ULatWvHqVOnWL16NdOmTTN1aLmiWbNmLFy4EHd3d13X99KlS+nWrZupQ8sRT58+5ebNm7rHt2/f5vz58xQpUgR3d3f69OnDokWLqFChAuXLl2fRokXY2dkVmGv2L2q/m5sbI0eO5Ny5cyxatAiNRqP7PCxSpAg2NjY5EpNKMcevha9oxYoV/PDDD9y/fx8PDw8mTJhA3bp1TR1WjstqznBoaKhed7A56d27N9WqVWPSpEmmDiVX/Pnnn3z77bdcv36dMmXK0K9fP9566y1Th5UrEhIS+O9//8uOHTt48OABbm5udOjQgffffz/HPphN6eDBg/Tp0ydDeZcuXZg5cyaKojBv3jxWrVrFo0ePqFWrFp9++mmB+dL6ovYPHz6cFi1aZPq6ZcuWERAQkCMxSaIWQggh8jC5Ri2EEELkYZKohRBCiDxMErUQQgiRh0miFkIIIfIwSdRCCCFEHiaJWgghhMjDJFELIYQQeZgkaiGEECIPk0QtxCuaO3cunTt31j0eP348w4YNe61tGmMbeUVSUhIjRoygdu3aeHp68vjxY1OH9FIHDx7Ui3XNmjXUqVPnpa/z9PRkx44dOR2eMFOy1rcoUMaPH8/atWsBsLKyomTJkrRu3ZoRI0bg4OCQo/ueNGmSwTdquH37Ni1atCAiIoLq1au/0jZySvPmzYmKigLAwsKCYsWK0bhxY8aNG0eRIkUM3s7atWs5cuQIv/32Gy4uLhQqVCinQs7U8+143kcffcSgQYMM2kb79u1p0qSJ7vHcuXPZsWMH69at06u3d+/ebB0bIbJDErUocBo1akRoaChqtZojR44wefJkEhMTmTp1aoa6aWlpWFtbG2W/xkhEuZ3MsjJy5EjeeusttFot165d49NPP2X69OnMmjXL4G3cunWLypUrv9Ya0BqNBpVKhYXFq3X+pbfjeY6Ojga/3s7OzqAbz6Tf/lGInCBd36LAsbGxwdXVlVKlStGpUyc6derEzp07gf/vrg4LC6NFixZ4e3ujKApPnjzhk08+ITAwkNq1a9OnTx8uXLigt93FixfToEED/Pz8mDhxIikpKXrP/7vbWqvVsnjxYlq1aoWXlxdNmzZlwYIFALqF/UNCQvD09KR3796ZbiM1NZXp06cTGBiIt7c3PXv25NSpU7rn07tqDxw4QNeuXalVqxY9evTg6tWrujoXLlygd+/e+Pn5Ubt2bbp27crp06dfeAwdHR1xdXWlRIkS1K9fn86dO3Pu3Dm9OseOHeOdd97Bx8eHJk2aMH36dBITE4FnNy358ccfOXz4sF77Hj16xMcff0zdunWpVasWAwYM4Pr167ptpnc1//nnn7Rv3x5vb2+ioqJITU3lq6++olGjRvj6+vLmm29y8ODBF7bh+XY8//N8z8ru3btp06YNPj4+9O7dO8MZ+PNd32vWrGHevHlcuHABT09PPD09WbNmDaDf9X379m08PT3Ztm0bvXv3platWgQHB3P8+HG9ba9evZomTZpQq1Yt3n//fZYuXWpQN7swP5KoRYFnZ2dHWlqa7vHNmzfZvHkzc+fOJSIiAoBBgwYRExPD4sWLWbNmDTVr1qRv377Ex8cDEBkZyZw5cxg1ahTh4eG4urry66+/vnC/33zzDd9//z3Dhg0jMjKSr7/+muLFiwPw+++/A/DTTz+xd+9e5s6dm+k2vvrqK7Zu3crMmTNZu3Yt5cuXZ8CAAbq40s2ePZvx48cTHh6OpaUlEydO1D03ZswYSpYsSVhYGGvWrGHgwIHZ6kWIjo5m165d+Pj46MouXrxI//79adWqFevXr2f27NkcPXqUzz//HHj2heitt97Cz89Pr33jx4/nzJkzLFiwgFWrVqEoCoMGDdL7/SQnJ7No0SKmT5/Oxo0bKVasGBMmTODYsWPMnj2b9evX07Zt2wxJPrvu3r3L8OHDady4MREREbz55pt88803WdZv37497733HlWrVmXv3r3s3buX9u3bZ1l/9uzZ9O/fn4iICCpUqMBHH32EWq0G4OjRo3z22Wf06dOHiIgIGjRowMKFC1+5LaKAU4QoQMaNG6cMHTpU9/jkyZNKvXr1lA8++EBRFEWZM2eOUrNmTeXBgwe6Ovv371dq166tpKSk6G2rZcuWym+//aYoiqJ0795d+fTTT/Wef/PNN5Xg4OBM9/3kyRPFy8tLWb16daZx3rp1S/Hw8FDOnTuXZfxPnz5Vatasqaxfv173fGpqqhIUFKQsWbJEURRF+fvvvxUPDw9l//79ujq7du1SPDw8lOTkZEVRFMXPz09Zs2ZNVocsg2bNmik1a9ZUfH19FW9vb8XDw0N58803lUePHunqjB07Vvnkk0/0Xnf48GGlWrVquv1Onz5d6dWrl+75a9euKR4eHsrRo0d1ZQ8fPlR8fHyUyMhIRVEUJTw8XPHw8FDOnz+vq3Pjxg3F09NTuXfvnt7++vbtq3zzzTcGteP5n7///ltRFEX55ptvlHbt2ilarVb3mlmzZikeHh66toaHhyv+/v665+fMmaP3O0/n4eGhbN++XVGU///dPv+7v3TpkuLh4aFcvnxZURRF+fDDD5VBgwbpbeOjjz7S25cQ6eQatShwdu3ahZ+fH2q1GrVaTYsWLfjkk090z7u7u1O0aFHd47Nnz5KYmJjhXrLJycm6G8hfuXKFHj166D3v6+ubZffr1atXSU1NpX79+q/cjps3b5KWlkbt2rV1ZdbW1vj4+HDlyhW9us/fMzz9eumDBw9wd3enX79+TJ48mXXr1tGgQQPatm1LuXLlXrjv/v3707VrVxRF4e7du8yePZtBgwaxYsUKLC0tOXv2LDdu3GDDhg261yiKglar5fbt21SuXDnDNq9cuYKVlRW1atXSlbm4uFCxYkW99lhbW+u15+zZsyiKQtu2bfW2l5qairOzs0HteF6JEiV08dSqVQuVSqV7ztfX94Xby47MficPHz6kcuXKXLt2jZYtW+rV9/HxYdeuXUbbvyg4JFGLAicgIIApU6ZgZWWFm5tbhm5ee3t7vcdarRZXV1eWL1+eYVuvOrjL1tb2lV6XmecTCTxLiP8us7KyylBfq9UCMGLECDp27Mju3bv566+/mDNnDrNnz6ZVq1ZZ7tPFxYXy5csDUKFCBezt7enevTsHDx6kQYMGaLVaevToobv2/LxSpUpluk0li9Hs/26PnZ2d3mNFUbC0tNR16z/vZSP5n2+HofEYy/Pvu3//TjL7HeZ0PCL/kkQtChx7e/ssP5wzU7NmTWJjY7G0tKRMmTKZ1qlcuTInTpwgJCREV3by5Mkst1mhQgXs7Oz4+++/KVu2bIbn0z/ENRpNltsoV64c1tbWHD16FHd3d+DZKPUzZ87Qt29fQ5qmU7FiRSpWrMi7777L6NGjCQ8Pf2Gi/rf0UdfJyckA1KhRg0uXLmXrOFepUgW1Ws3Jkyd1vQRxcXFcv3490zPwdNWrV0ej0fDw4UOjDraqUqVKhrnPL/qdwrPfW3qyfR2VKlXKMKDvzJkzr71dUTDJYDJh9ho0aICvry/vv/8+e/bs4fbt27qBS+kfpn369CE8PJywsDCuXbvGnDlzuHTpUpbbtLW1ZeDAgcyaNYuIiAhu3rzJiRMndIPIihUrhp2dHXv27CE2NpYnT55k2IaDgwM9e/bkq6++4q+//uLy5ct88sknJCcn88YbbxjUtuTkZKZNm8bBgweJiori6NGjnD59+oWJEeDp06fExMRw//59Tp06xaxZs3BxccHPzw+AgQMHcuLECaZOncr58+e5fv06O3fu1A0my0yFChV0lyGOHDnChQsXGDt2LCVKlNCNgs9MxYoV6dSpEx9//DHbtm3j1q1bnDp1isWLF7N7926D2vH8T0JCAgA9evTg5s2bhIaGcvXqVTZs2KCbg5+V0qVLc/v2bc6fP8/Dhw9JTU19Yf2s9OrVi927d7N06VKuX7/Ob7/9xl9//ZXhLFsIkDNqIVCpVCxevJj//Oc/TJw4kbi4OIoXL06dOnV0o7Tbt2/PzZs3+frrr0lJSaFNmzb07NmTvXv3ZrndYcOGYWlpyZw5c7h//z6urq6669xWVlZMnjyZ7777jjlz5lCnTp1Mu97HjBmDoih8/PHHPH36FC8vL77//nuDF9ewsLAgPj6ecePGERsbi4uLC61bt2bkyJEvfN2cOXOYM2cOAEWLFsXb25ulS5fi4uICQLVq1Vi+fDn/+c9/ePvttwEoW7bsC0dBA4SGhjJjxgyGDBlCWloaderUYfHixS8dhR4aGsqCBQuYOXMm9+/fx9nZGV9fX73FSF7WjnTdu3dn2rRpuLu7M3fuXEJDQ/n111/x8fFh1KhReiPm/61NmzZs376dPn368PjxY0JDQzNcAzeEv78/U6dOZd68efznP/8hKCiId999lxUrVmR7W6LgUylyYUQIIUxu8uTJXL169aXT/oT5ka5vIYQwgR9++IELFy5w48YNli9fTkREBF26dDF1WCIPkjNqIYQwgQ8++IBDhw7x9OlTypYtS69evejZs6epwxJ5kCRqIYQQIg+Trm8hhBAiD5NELYQQQuRhkqiFEEKIPEwStRBCCJGHSaIWQggh8jBJ1EIIIUQeJolaCCGEyMMkUQshhBB5mCRqIYQQIg/7P2yoLP7YFe1SAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5, 4))\n", "\n", "plt.title(\"Accessible Element Design with Many Models\")\n", "plt.scatter(y_orig[0, 0], y_hat[0, 0], label=\"ATAC\")\n", "plt.scatter(y_orig[0, 1], y_hat[0, 1], label=\"MAX\")\n", "plt.scatter(y_orig[0, 2], y_hat[0, 2], label=\"GATA\")\n", "plt.scatter(y_orig[0, 3], y_hat[0, 3], label=\"CTCF\")\n", "plt.scatter(y_orig[0, 4], y_hat[0, 4], label=\"E2F6\")\n", "plt.plot([0, 12], [0, 12], c='0.5', linestyle='--')\n", "\n", "plt.xlabel(\"Predictions Before Editing\")\n", "plt.ylabel(\"Predictions After Editing\")\n", "plt.legend()\n", "\n", "seaborn.despine(bottom=True, left=True)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "5c4da09b-a141-4aca-93aa-4cba6b58583a", "metadata": {}, "source": [ "Looks like Ledidi was able to edit the sequence to make each of the output models exhibit the desired output, even when there are now five models being used at the same time. As mentioned, the time per tick has increased a bit over using only two models. Here, the ChromBPNet model takes most of the time because it is 512 filters per layer while the BPNet models only have 64 filters." ] }, { "cell_type": "markdown", "id": "9383017a-70dd-469f-97cb-a885a7298b17", "metadata": {}, "source": [ "#### Mixing Multiple Models and Multiple Tasks with the Same Input Width\n", "\n", "In the previous example, each model provided only one output to the designer. However, this is not a hard restriction and, just to be explicit, each model can provide any number of outputs to the designer. Something to keep in mind, though, is that `DesignWrapper` is simply concatenating the outputs across models and so the user will have to keep track of the indexing of outputs when using many models that each provide a variable number of outputs.\n", "\n", "Let's see an example of this where we use three outputs from Enformer -- for accessibility, GATA binding, and MAX binding -- alongside an E2F6 BPNet model. Potentially, a situation like this would arise when one has performed a new experiment and wishes to use a specialist model making predictions for it along with a more established model like Enformer. Alternatively, it can arise when a massively multi-task model does not make accurate predictions for a specific output you care about and you want to \"patch\" that inaccurate output with a specialist model. Regardless of reason, all you need to do is pass your Enformer wrapper that has sliced out the outputs of interested along with your BPNet model(s), exactly as we did before." ] }, { "cell_type": "code", "execution_count": 25, "id": "c42b237a-d761-4a5a-b290-e7e3ea6bb9f5", "metadata": {}, "outputs": [], "source": [ "enformer = EnformerWrapper(enformer_base, [625, 1066, 961])\n", "\n", "designer = DesignWrapper([enformer, bpnet_e2f6])" ] }, { "cell_type": "markdown", "id": "1c24ce61-631d-43bb-9743-84d24f57adb3", "metadata": {}, "source": [ "Because we are using three outputs from Enformer and one output from BPNet we need to specify a desired target vector that has four values. These will always be ordered in the same way as the models that you have passed in and so will begin with the three outputs from Enformer and then have the BPNet output. \n", "\n", "For this example, let's choose to increase accessibility and GATA binding, decrease MAX binding, and increase E2F6. Just as before, we specify a `y_bar` accordingly and pass the design wrapper into the `ledidi` function." ] }, { "cell_type": "code", "execution_count": 26, "id": "78dee541-33e6-45ea-94c1-5948491ca344", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iter=I\tinput_loss=0.0\toutput_loss=17.02\ttotal_loss=17.02\ttime=0.0\n", "iter=100\tinput_loss=464.4\toutput_loss=1.867\ttotal_loss=1.914\ttime=10.13\n", "iter=200\tinput_loss=528.6\toutput_loss=1.09\ttotal_loss=1.143\ttime=8.179\n", "iter=300\tinput_loss=554.8\toutput_loss=1.206\ttotal_loss=1.262\ttime=8.159\n", "iter=F\tinput_loss=537.7\toutput_loss=0.9756\ttotal_loss=1.029\ttime=27.61\n" ] } ], "source": [ "y_orig = predict(designer, X)\n", "y_bar = torch.tensor([[5.0, 6.0, 0.0, 8.0]])\n", "\n", "X_bar = ledidi(designer, X, y_bar, l=0.0001, verbose=True)\n", "y_hat = predict(designer, X_bar)" ] }, { "cell_type": "code", "execution_count": 27, "id": "1d210198-b0c6-4e6f-bfc4-3adc715e45b7", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAGGCAYAAAC0W8IbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB4D0lEQVR4nO3dd1gU19fA8e+ygDRFVMDe0MVCtWuw94YFjZrYjTXGRGMs0Rg1GkyMMVGTWJKYpkYDiL3EJPaOFVvU2FAE7CJ9d94/fNmfK6isLiyw5/M8PLp3ZmfOnS1n5869d1SKoigIIYQQIleyMncAQgghhHg2SdRCCCFELiaJWgghhMjFJFELIYQQuZgkaiGEECIXk0QthBBC5GKSqIUQQohcTBK1EEIIkYtJohZCCCFyMUnU/++XX37B09OTDh06mDsUkzpw4ACenp4cOHBAXzZhwgT8/f2z9PxmzZoxYcIEk8UzYcIEPD09n/mXLioqCk9PT8LCwky2b3OKiYlh/vz5nDlzJkvrp79u6X9eXl7Uq1ePnj17MnfuXK5fv56t8YaFheHp6UlUVFS27seU+vTpQ58+ffSPExMTmT9/vsF7P938+fPx9PTkzp07L7WvrL6PjTV37lyaNGlCtWrVqFWr1ktvJz/p06ePwbGtXr06zZo148MPP8zwOUh/36b/VatWjUaNGjFx4kRiYmL06z35+Tp69GiGfRrzHfm0HTt2MH/+/Jd67rNYm3RreVhoaCgA58+f5/jx4/j6+po5ItOoXr06K1eupFKlSuYORc/Ozo6ff/7Z3GHkqNjYWBYsWECpUqWoWrVqlp83ZswY6tati1ar5d69e5w4cYLQ0FB++uknPvnkEwIDA7Ml3iZNmrBy5Urc3NyyZfvZ4eOPPzZ4nJiYyIIFCxg5ciR169Y1+f5M/T7etm0bCxcuZNiwYTRq1AhbW1uTbTuvK1OmDF988QUAqamp/Pvvv3zzzTfs3buXTZs2YW9vb7B+cHAwFStWJCkpicOHD7No0SIOHjzIunXrcHBwMFh39uzZLF++3GSx7tixg2XLlvHOO++YbJuSqIGTJ09y9uxZmjRpwvbt2wkJCck3idrJyQk/Pz9zh2HAysoq18WUW5UrV87gWDVv3pwBAwYwYMAAJk6c+MpncM9SpEgRihQpYvLtZqec/jFq6vfx+fPnAejbty9FixY1yTYTExMzJLGc9rwYPD09CQ4OpmvXrs/dhp2dncGxrl27NgUKFGDSpElEREQQEBBgsH7lypXx9vYGoF69emi1Wr799lu2bdtm8OO2YcOG7Nq1i7///ptmzZq9ZA2znzR9AyEhIQC8//77+Pv7s2HDBhITEzOsFxMTw0cffUTjxo3x8vIiICCAUaNGcevWLf06Dx48YNasWTRv3hwvLy/q16/P4MGDuXjxon6dlJQUvv32W9q0aaNv0pw4cWKGZrh9+/bRp08f6tati4+PD02aNOGdd94xiG358uUEBgbi7++Pv78/bdq04csvv9Qvz6zpO9358+fp168ffn5+1KtXj+nTp2da76fFx8fz2Wef0axZM7y8vGjYsCEzZ84kISHhhc99VZcvX+b999+nfv36eHl50bZtW5YtW2awTnqd161bx+zZswkICMDf359hw4Zx69Yt4uPj+eijj6hbty5169Zl4sSJPHr0yGAbiqKwbNkyOnXqhI+PD7Vr12bUqFFcu3bNYL0+ffrQoUMHTpw4wRtvvIGvry/Nmzdn8eLF6HQ6fTzdunUDMEiuL9s8VrhwYaZNm0ZaWho//fST0cdHp9Px7bff0rp1a3x8fKhVqxYdO3Y0ODvMrOlbURQWLlxI06ZN8fb2pmvXruzZsydDk3P68V+/fj1z584lICCAGjVq0L9/f/7777/n1u38+fN4enqyadMmfVlkZCSenp60b9/eYN1hw4YZfME/GUdUVBT169cHYMGCBfpj/vRlnNu3bzNmzBhq1qxJgwYNmDhxIg8fPnxujMbI6rFo1qwZX331FQANGjQweH/odDqWLFmi/76oX78+48aN4+bNmwb7Sn8vHjp0iJ49e+Lr68uHH36ov4z0/fffs3jxYpo1a4aPjw99+vTh0qVLpKam8sUXXxAQEEDNmjV5++23uX37doa6bNy4kR49euDn54e/vz+DBg3i9OnTBuukNxmfO3eOgQMH4u/vT//+/U12PJ9UsGBBAKytX3y+mZ7kb9y4YVDetWtXKlWqxJdffolWq33hdl50DCZMmKD/vD3ZBP+ql5As/ow6KSmJDRs24O3tjUajISgoiMmTJ7N582a6dOmiXy8mJoagoCDS0tIYNmwYnp6e3L17l927d3P//n2KFStGfHw8b7zxBtevX+ett97C19eXhIQEDh06RFxcHB4eHuh0OkaM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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5, 4))\n", "\n", "plt.title(\"Accessible Element Design with Enformer+BPNet\")\n", "plt.scatter(y_orig[0, 0], y_hat[0, 0], label=\"DNase\")\n", "plt.scatter(y_orig[0, 1], y_hat[0, 1], label=\"GATA\")\n", "plt.scatter(y_orig[0, 2], y_hat[0, 2], label=\"MAX\")\n", "plt.scatter(y_orig[0, 3], y_hat[0, 3], label=\"E2F6\")\n", "plt.plot([0, 12], [0, 12], c='0.5', linestyle='--')\n", "\n", "plt.xlabel(\"Predictions Before Editing\")\n", "plt.ylabel(\"Predictions After Editing\")\n", "plt.legend()\n", "\n", "seaborn.despine(bottom=True, left=True)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "b4f7da71-fdb3-4859-b680-fd7831e583f0", "metadata": {}, "source": [ "Seems like we were able to achieve our goal, with MAX predictions decreasing and everything else increasing. Just like in the other examples, there was no need to change code once the design wrapper has been created correctly." ] }, { "cell_type": "markdown", "id": "acd4d853-1c68-4c1c-aa54-645208d25534", "metadata": {}, "source": [ "#### Mixing Models with Different Input Widths\n", "\n", "A serious practical challenge when using multiple models is that they might not take inputs of the same length. In our first example, ChromBPNet and BPNet operate on the same sequence length and so using them together was simple. In the second example, Enformer (reduced down to 2kbp inputs) and BPNet do not operate on exactly the same sequence length but are both a litle bit flexible. However, most models will not be this flexible. In general, any model that has a dense layer in it (outside the transformer layer) will have a hard input sequence restriction. This is part of the reason that I try to avoid those sorts of layers, but many people do not.\n", "\n", "As an example, Beluga requires a fixed input sequence length of 2kbp. Let's try it out, using a wrapper similar to Enformer that slices out an output (this time for CTCF) and pairing it with a ChromBPNet model." ] }, { "cell_type": "code", "execution_count": 28, "id": "474ef09b-d92b-4d52-be22-b66a68d8c09c", "metadata": {}, "outputs": [], "source": [ "import sys\n", "\n", "class BelugaWrapper(torch.nn.Module):\n", " def __init__(self, model, targets):\n", " super(BelugaWrapper, self).__init__()\n", " self.model = model\n", " self.targets = targets\n", " \n", " def forward(self, X):\n", " return self.model(X)[:, self.targets]\n", "\n", "sys.path.append(\"/users/jacob.schreiber/models/deepsea\")\n", "from beluga import Beluga\n", "\n", "_beluga = Beluga()\n", "_beluga.load_state_dict(torch.load(\"../../../../models/deepsea/deepsea.beluga.pth\", weights_only=False))\n", "\n", "beluga = BelugaWrapper(_beluga, [338])" ] }, { "cell_type": "code", "execution_count": 29, "id": "4480a05c-5592-4dbb-815f-974c8e40f1b9", "metadata": {}, "outputs": [ { "ename": "RuntimeError", "evalue": "mat1 and mat2 shapes cannot be multiplied (1x72320 and 67840x2003)", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[29], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m designer \u001b[38;5;241m=\u001b[39m DesignWrapper([chrombpnet\u001b[38;5;241m.\u001b[39mcuda(), beluga\u001b[38;5;241m.\u001b[39mcuda()])\n\u001b[0;32m----> 3\u001b[0m y_orig \u001b[38;5;241m=\u001b[39m predict(designer, X)\n\u001b[1;32m 4\u001b[0m y_bar \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39mtensor([[\u001b[38;5;241m5.0\u001b[39m, \u001b[38;5;241m6.0\u001b[39m]])\n\u001b[1;32m 6\u001b[0m X_bar \u001b[38;5;241m=\u001b[39m ledidi(designer, X, y_bar, l\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.0001\u001b[39m, verbose\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n", "File \u001b[0;32m~/github/tangermeme/tangermeme/predict.py:107\u001b[0m, in \u001b[0;36mpredict\u001b[0;34m(model, X, args, batch_size, dtype, device, verbose)\u001b[0m\n\u001b[1;32m 105\u001b[0m \t\ty_ \u001b[38;5;241m=\u001b[39m model(X_, \u001b[38;5;241m*\u001b[39margs_)\n\u001b[1;32m 106\u001b[0m \t\u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 107\u001b[0m \t\ty_ \u001b[38;5;241m=\u001b[39m model(X_)\n\u001b[1;32m 109\u001b[0m \u001b[38;5;66;03m# Move to the CPU\u001b[39;00m\n\u001b[1;32m 110\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(y_, torch\u001b[38;5;241m.\u001b[39mTensor):\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/module.py:1736\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1734\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1735\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1736\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/module.py:1747\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1742\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1743\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1744\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1745\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1746\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1747\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m forward_call(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 1749\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1750\u001b[0m called_always_called_hooks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m()\n", "File \u001b[0;32m~/github/ledidi/ledidi/wrappers.py:35\u001b[0m, in \u001b[0;36mDesignWrapper.forward\u001b[0;34m(self, X)\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, X):\n\u001b[0;32m---> 35\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m torch\u001b[38;5;241m.\u001b[39mcat([model(X) \u001b[38;5;28;01mfor\u001b[39;00m model \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmodels], dim\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m)\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/module.py:1736\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1734\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1735\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1736\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/module.py:1747\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1742\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1743\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1744\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1745\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1746\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1747\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m forward_call(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 1749\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1750\u001b[0m called_always_called_hooks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m()\n", "Cell \u001b[0;32mIn[28], line 10\u001b[0m, in \u001b[0;36mBelugaWrapper.forward\u001b[0;34m(self, X)\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, X):\n\u001b[0;32m---> 10\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmodel(X)[:, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtargets]\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/module.py:1736\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1734\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1735\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1736\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/module.py:1747\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1742\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1743\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1744\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1745\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1746\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1747\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m forward_call(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 1749\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1750\u001b[0m called_always_called_hooks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m()\n", "File \u001b[0;32m~/models/deepsea/beluga.py:53\u001b[0m, in \u001b[0;36mBeluga.forward\u001b[0;34m(self, X)\u001b[0m\n\u001b[1;32m 52\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, X):\n\u001b[0;32m---> 53\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmodel(X[:, [\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m2\u001b[39m, \u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m3\u001b[39m], \u001b[38;5;28;01mNone\u001b[39;00m])\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/module.py:1736\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1734\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1735\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1736\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/module.py:1747\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1742\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1743\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1744\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1745\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1746\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1747\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m forward_call(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 1749\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1750\u001b[0m called_always_called_hooks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m()\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/container.py:250\u001b[0m, in \u001b[0;36mSequential.forward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 248\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;28minput\u001b[39m):\n\u001b[1;32m 249\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m module \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m:\n\u001b[0;32m--> 250\u001b[0m \u001b[38;5;28minput\u001b[39m \u001b[38;5;241m=\u001b[39m module(\u001b[38;5;28minput\u001b[39m)\n\u001b[1;32m 251\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28minput\u001b[39m\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/module.py:1736\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1734\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1735\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1736\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/module.py:1747\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1742\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1743\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1744\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1745\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1746\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1747\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m forward_call(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 1749\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1750\u001b[0m called_always_called_hooks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m()\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/container.py:250\u001b[0m, in \u001b[0;36mSequential.forward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 248\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;28minput\u001b[39m):\n\u001b[1;32m 249\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m module \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m:\n\u001b[0;32m--> 250\u001b[0m \u001b[38;5;28minput\u001b[39m \u001b[38;5;241m=\u001b[39m module(\u001b[38;5;28minput\u001b[39m)\n\u001b[1;32m 251\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28minput\u001b[39m\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/module.py:1736\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1734\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1735\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1736\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/module.py:1747\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1742\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1743\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1744\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1745\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1746\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1747\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m forward_call(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 1749\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1750\u001b[0m called_always_called_hooks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m()\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/container.py:250\u001b[0m, in \u001b[0;36mSequential.forward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 248\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;28minput\u001b[39m):\n\u001b[1;32m 249\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m module \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m:\n\u001b[0;32m--> 250\u001b[0m \u001b[38;5;28minput\u001b[39m \u001b[38;5;241m=\u001b[39m module(\u001b[38;5;28minput\u001b[39m)\n\u001b[1;32m 251\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28minput\u001b[39m\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/module.py:1736\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1734\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1735\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1736\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/module.py:1747\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1742\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1743\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1744\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1745\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1746\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1747\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m forward_call(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 1749\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1750\u001b[0m called_always_called_hooks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m()\n", "File \u001b[0;32m~/anaconda3/lib/python3.12/site-packages/torch/nn/modules/linear.py:125\u001b[0m, in \u001b[0;36mLinear.forward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;28minput\u001b[39m: Tensor) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Tensor:\n\u001b[0;32m--> 125\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m F\u001b[38;5;241m.\u001b[39mlinear(\u001b[38;5;28minput\u001b[39m, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mweight, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbias)\n", "\u001b[0;31mRuntimeError\u001b[0m: mat1 and mat2 shapes cannot be multiplied (1x72320 and 67840x2003)" ] } ], "source": [ "designer = DesignWrapper([chrombpnet.cuda(), beluga.cuda()])\n", "\n", "y_orig = predict(designer, X)\n", "y_bar = torch.tensor([[5.0, 6.0]])\n", "\n", "X_bar = ledidi(designer, X, y_bar, l=0.0001, verbose=True)\n", "y_hat = predict(designer, X_bar)" ] }, { "cell_type": "markdown", "id": "f88f51d8-5f5b-4f6b-9cc4-c5c328c0afd8", "metadata": {}, "source": [ "Looks like we get an error message on the `predict` function because the shapes are not correct. Basically, Beluga is expecting a sequence of length 2,000bp exactly. However, we generated a sequence of length 2114bp because that is the normal length for BPNet. Because the dense layer can only be applied to inputs of a specific length, an error is raised.\n", "\n", "For this specific example we could just generate a sequence of length 2kbp because BPNet is flexible enough to be applied to sequences of any length. However, as a more general-purpose solution, we can create a wrapper that trims the input sequence to the length expected by each of the models. This would mean passing in an input sequence whose length is equal to the longest one expected by any of the models and working from there.\n", "\n", "Accordingly, we will modify our Beluga wrapper to slice out 57bp on either side, bringing the 2,114bp long sequence for BPNet down to 2,000bp when being used by Beluga." ] }, { "cell_type": "code", "execution_count": 30, "id": "bff64e53-d016-48de-b898-15f2a0fa0fe4", "metadata": {}, "outputs": [], "source": [ "class BelugaWrapper2(torch.nn.Module):\n", " def __init__(self, model, targets):\n", " super(BelugaWrapper2, self).__init__()\n", " self.model = model\n", " self.targets = targets\n", " \n", " def forward(self, X):\n", " return self.model(X[:, :, 57:-57])[:, self.targets]\n", "\n", "beluga = BelugaWrapper2(_beluga, [338])" ] }, { "cell_type": "markdown", "id": "2d6e5319-8cb5-42d7-9f84-d19d649bdf2f", "metadata": {}, "source": [ "Now that we have wrapper Beluga in this new wrapper, everything else can proceed exactly the same as before! As mentioned before, wrappers truly are productivity hacks that make everything else work smoothly. Imagine the amount of code that would otherwise need to be written to account for inputs of variable lengths." ] }, { "cell_type": "code", "execution_count": 31, "id": "932d312f-0069-48b6-b160-c748003ee579", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iter=I\tinput_loss=0.0\toutput_loss=91.38\ttotal_loss=91.38\ttime=0.0\n", "iter=100\tinput_loss=653.4\toutput_loss=0.1663\ttotal_loss=0.2317\ttime=4.03\n", "iter=F\tinput_loss=859.8\toutput_loss=0.0389\ttotal_loss=0.1249\ttime=5.365\n" ] } ], "source": [ "designer = DesignWrapper([chrombpnet.cuda(), beluga.cuda()])\n", "\n", "y_orig = predict(designer, X)\n", "y_bar = torch.tensor([[12.0, 6.0]])\n", "\n", "X_bar = ledidi(designer, X, y_bar, l=0.0001, verbose=True)\n", "y_hat = predict(designer, X_bar)" ] }, { "cell_type": "code", "execution_count": 32, "id": "0d319c4a-8b02-40d0-8a08-d449c70b2e07", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5, 4))\n", "\n", "plt.title(\"Accessible Element Design with ChromBPNet + Beluga\")\n", "plt.scatter(y_orig[0, 0], y_hat[0, 0], label=\"ChromBPNet (ATAC)\")\n", "plt.scatter(y_orig[0, 1], y_hat[0, 1], label=\"Beluga (CTCF)\")\n", "plt.plot([-9, 12], [-9, 12], c='0.5', linestyle='--')\n", "\n", "plt.xlabel(\"Predictions Before Editing\")\n", "plt.ylabel(\"Predictions After Editing\")\n", "plt.legend()\n", "\n", "seaborn.despine(bottom=True, left=True)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "91b18d46-72b5-4ea9-b34c-792065cc6070", "metadata": {}, "source": [ "Looks like everything is working now! Using that wrapper solved the issue and allowed design to proceed exactly the same as the other examples.\n", "\n", "It is important to note that simply slicing out the flanks, as we did for Beluga, has some downsides.\n", "\n", "First, predictions are only made for the trimmed sequences that are actually passed into the underlying model and not the full sequences that are passed into the designer. As an extreme example, if you passed a 10kbp region into the designer but trimmed this down to 2kbp for Beluga, its predictions are only for that 2kbp region and not for the entire 10kbp region. In our example, going from 2,114bp to 2,000bp probably does not matter at all, but this is something to keep in mind when using models of vastly different sizes.\n", "\n", "Second, and relatedly, edits can only be induced in the trimmed sequences that are passed into the models. If you pass in a 10kbp region into the designer but 2kbp into Beluga, it cannot propose edits outside that 2kbp region. This has pros and cons. A benefit of this is that, potentially, you want to focus your edits using Beluga at a specific region in the sequence. A drawback is that the rest of the 10kbp region will be devoid of changes and so if there were better edits that could be made elsewhere, or if you simply need more space to achieve the desired value, you cannot use the rest of this sequence.\n", "\n", "Third, taking these two aspects together, when using models that have different receptive fields, Ledidi may try to be \"clever\" with where it positions edits. Basically, if you say you want a region that is accessible using a 3kbp model but use a 2kbp model to say \"but not using CTCF\" you may find that CTCF sites are added into the 500bp flanks outside the receptive field of model 2. Technically, this is still achieving the objective because the second model does not see these CTCF sites and will predict low CTCF binding *in the region it has access to*. Basically, Ledidi will try to hide the edits from the models with the smaller receptive field. A potential way to solve this issue is to mask out regions that are not observed by all the models, allowing some models the additional context so that they can actually be run, but disallowing those regions from being used." ] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:root]", "language": "python", "name": "conda-root-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.2" } }, "nbformat": 4, "nbformat_minor": 5 }