{ "cells": [ { "cell_type": "markdown", "id": "bf739d70-3249-42b3-a352-8a41f8f8c667", "metadata": {}, "source": [ "# Ligand Networks by Hand" ] }, { "cell_type": "markdown", "id": "f9ad85a0-a3b2-4e95-9784-0a88ba790683", "metadata": {}, "source": [ "OpenFE provides utilities for ingesting networks from ordinary Python datastructures like `list[tuple[str, str]]` and `list[tuple[int, int]]`. Each string or integer respectively names or indexes a ligand, and tuples represent edges in the network. This allows specific networks to be written by hand, supports use cases where the desired edges are known, and may be helpful for loading networks from other tools." ] }, { "cell_type": "markdown", "id": "de32be93-e8d7-40dd-a043-4920a6e9c3ef", "metadata": {}, "source": [ "## Setup" ] }, { "cell_type": "code", "execution_count": 1, "id": "91423c48-1649-4fae-9f0c-bd6224d83009", "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "\n", "from rdkit import Chem\n", "\n", "import openfe\n", "from openfe.setup import ligand_network_planning" ] }, { "cell_type": "markdown", "id": "39e64f74-337e-4a88-b253-ab051820d5e3", "metadata": {}, "source": [ "This cookbook assumes you've already loaded a collection of `SmallMoleculeComponent` objects into an iterable called `ligands`. For more information, see [Loading Small Molecules]:\n", "\n", "[Loading Small Molecules]: https://docs.openfree.energy/en/stable/cookbook/loading_molecules.html#loading-small-molecules" ] }, { "cell_type": "code", "execution_count": 2, "id": "2ef27845-2a17-45fc-ac54-20e75055a7a2", "metadata": {}, "outputs": [], "source": [ "ligands = [\n", " openfe.SmallMoleculeComponent(mol) \n", " for mol in Chem.SDMolSupplier(\n", " \"assets/somebenzenes.sdf\", \n", " removeHs=False,\n", " )\n", "]" ] }, { "cell_type": "markdown", "id": "12cac638-06bd-456e-b82f-a88e016211fa", "metadata": {}, "source": [ "## Select an atom mapper" ] }, { "cell_type": "markdown", "id": "31872d6f-028f-4974-9724-2f4654a7b914", "metadata": {}, "source": [ "As we will only specify the topology of the network, OpenFE must generate atom mappings for us. For this, it needs an atom mapper; for more information, see [Choose an Atom Mapper]:\n", "\n", "[Choose an Atom Mapper]: https://docs.openfree.energy/en/stable/cookbook/generate_ligand_network.html#Choose-an-atom-mapper" ] }, { "cell_type": "code", "execution_count": 3, "id": "d2de6fcb-9a9b-44c4-8ad3-f98ec3de5638", "metadata": {}, "outputs": [], "source": [ "mapper = openfe.setup.LomapAtomMapper(\n", " threed=True, # Use atom positions to prune symmetric mappings\n", " max3d=1.0, # Forbid mapping between atoms more than 1.0 Å apart\n", " element_change=False, # Forbid mappings that change an atoms element\n", ")" ] }, { "cell_type": "markdown", "id": "d5ede560-0108-479d-9bc0-20d53fbd81af", "metadata": {}, "source": [ "## Define the network" ] }, { "cell_type": "markdown", "id": "36879503-f8ef-4743-9acd-b07910492613", "metadata": {}, "source": [ "We can inspect the ligands to identify what we're working with:" ] }, { "cell_type": "code", "execution_count": 4, "id": "b9372340-327f-4451-9399-21fd01afc967", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(0, SmallMoleculeComponent(name=benzene))\n", "(1, SmallMoleculeComponent(name=toluene))\n", "(2, SmallMoleculeComponent(name=phenol))\n", "(3, SmallMoleculeComponent(name=benzonitrile))\n", "(4, SmallMoleculeComponent(name=anisole))\n", "(5, SmallMoleculeComponent(name=benzaldehyde))\n", "(6, SmallMoleculeComponent(name=styrene))\n" ] } ], "source": [ "print(*enumerate(ligands), sep=\"\\n\")" ] }, { "cell_type": "markdown", "id": "300c7ebf-63e5-46f3-a53c-398dd75c0adb", "metadata": {}, "source": [ "Then, define the network topology by specifying transformations between ligands, either by name or index:" ] }, { "cell_type": "code", "execution_count": 5, "id": "aedd67c5-db74-48c1-afe4-bacfec0b2ca3", "metadata": {}, "outputs": [], "source": [ "topology_by_names = [\n", " (\"styrene\", \"toluene\"),\n", " (\"benzonitrile\", \"toluene\"),\n", " (\"toluene\", \"benzene\"),\n", " (\"benzene\", \"phenol\"),\n", " (\"phenol\", \"anisole\"),\n", " (\"phenol\", \"benzaldehyde\"),\n", "]\n", "\n", "# topology_by_indices = [\n", "# (6, 1),\n", "# (3, 1),\n", "# (1, 0),\n", "# (0, 2),\n", "# (2, 4),\n", "# (2, 5),\n", "# ]" ] }, { "cell_type": "markdown", "id": "3691c205-ce7d-4bc8-8b92-41f535b87249", "metadata": {}, "source": [ "## Create the network" ] }, { "cell_type": "markdown", "id": "9049e97f-0fdb-4196-808a-8c2fdd8e3576", "metadata": {}, "source": [ "Now create the `LigandNetwork` object from the specified edges:" ] }, { "cell_type": "code", "execution_count": 6, "id": "9c3e1d23-3333-4b2c-b687-561f63b3267e", "metadata": {}, "outputs": [], "source": [ "ligand_network = ligand_network_planning.generate_network_from_names(\n", " ligands=ligands,\n", " mapper=mapper,\n", " names=topology_by_names,\n", ")\n", "\n", "# ligand_network = ligand_network_planning.generate_network_from_indices(\n", "# ligands=ligands,\n", "# mapper=mapper,\n", "# indices=topology_by_indices,\n", "# )" ] }, { "cell_type": "markdown", "id": "a972611d-9784-4716-a2f3-fbe85cee9e94", "metadata": {}, "source": [ "## Visualise the network" ] }, { "cell_type": "markdown", "id": "43b339d9-e18a-4dab-9a44-395adbb25624", "metadata": {}, "source": [ "For more ways to visualize a `LigandNetwork`, see [Visualizing Ligand Networks].\n", "\n", "[Visualizing Ligand Networks]: https://docs.openfree.energy/en/stable/cookbook/ligandnetwork_vis.html" ] }, { "cell_type": "code", "execution_count": 7, "id": "c7d84328-f3b6-4330-a078-03ddccf60718", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAF7CAYAAABCcDpkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABEEUlEQVR4nO3dd3gU1eLG8e+mUFIIGFroCtKsFBWkKiGhSVMERBEQvfSOIFIVC9KLuRakCCoqCIK0SAQRBKUpXhUpivQuIUAgJDu/P84vhEhLQpLZ8n6eZx+zO7Ozbxaee1/OmZnjsCzLQkRERES8ho/dAUREREQke6kAioiIiHgZFUARERERL6MCKCIiIuJlVABFREREvIwKoIiIiIiXUQEUERER8TIqgCIiIiJexi8tOzmdTg4dOkRwcDAOhyOrM4mIiIhIOlmWRVxcHEWKFMHH58ZjfGkqgIcOHaJ48eKZEk5EREQkMxUvXpw//viD3Llz2x3FNvHx8ZQrV479+/ezf/9+ihUrdsP901QAg4ODAdi/fz958uS59ZQiIiIimcTHx8eryx9A7ty52bRpE4ULF77c224kTQUwedo3T548KoAiIiIiLigwMBAgTafr6SIQERERES+jAigiIiLiZVQARURERLyMCqCIiIh4rQ4doHlzu1NkPxVAERERkVuUkGB3gvRRARQRERGPN38+3HMP5M4NoaEQHg4DB8Ls2fDll+BwmMeaNfDoo9CjR+r3nzwJOXPCN9+Y56VKwejRZgQxJASef968/v33ULu2+ZzixaFXLzh3LuU4pUrB669Dp04QHAwlSsB776X+rIMHoXVryJfPZG3WDPbuzdzvQwVQREREPNrhw9C2rSldv/9uSl7LljBiBDz5JDRoYPY5fBgefhg6d4aPP4aLF1OO8dFHUKQIPPJIymtjx8Ldd8OWLTBsGPzyC0RGmmNv3w6ffgrr1l1dJsePh6pVYds26NYNunaFHTvMtvPnzWcEBcHateb9QUEmY2aOMjosy7JuttOZM2cICQkhNjZW9wEUERERt7J1K1SpYkbRSpZMva1DBzh9GhYtSnnt4kVT9v77X1MQASpVMucKjhhhnpcqZV5buDDlfe3bm5G/d99NeW3dOqhTx4wC5spl3lerFsyZY7ZbFhQuDKNGQZcuMGMGvPWWKarJt/NLSIC8eU3GiIjr/55nz54lODg4TX1NI4AiIiLi0e67D+rVM1PArVrB++/DP/9cf/+cOeHpp00ZA/jpJ/j5Z1MWr1S1aurnW7bArFlmxC75ERkJTif89VfKfvfem/Kzw2EK4LFjKcfYvdtMDycf47bb4MIF2LMng1/ANaRpJRARERERd+XrC19/bc7Pi46GqVPh5Zfhhx+u/57OneH+++HAAVME69W7evTw/xfeuMzphP/8x5z3928lSqT87O+fepvDYd6bfIwqVcyU878VKHD9vOmlAigiIiIez+GAGjXMY/hwU+YWLoQcOSAp6er977nHjPC9/745H3Dq1Jt/RuXK8OuvUKZMxnNWrmzOHSxYELLyrDtNAYuIiIhH++EHc+Xt5s2wbx988QUcPw4VKphz8rZvhz/+gBMn4NKllPd17gxvvmkKYosWN/+cQYNgwwbo3t1MG+/aBYsXQ8+eac/arh3kz2+u/P3uOzN1/O230Lu3GY3MLCqAIiIi4tHy5DFX1DZqBGXLwtCh5krchg3N7VvKlTOjfQUKwPr1Ke9r2xb8/OCpp8wFHDdz772mrO3aZS70qFTJXB0cFpb2rAEBJmuJEuZq4goVzNXL8fGZOyKoq4BFRERErmH/fjNCuGmTmZp1dem5CljnAIqIiIhc4dIlc0/AwYOhWjX3KH/ppSlgERERkSusX28uEtmyBd55x+40WUMjgCIiIiJXqFvX3KDZk2kEUERERMTLqACKiIiIeBkVQBEREREvowIoIiIi4mVUAEVERMStnTt3zu4IbkcFUERERNzalClTiI+PtzuG7dKwtsdlKoAiIiLitnbt2sWIESMoV64ca9eutTuOrVQARURExCv07duXS5cucdddd1GrVi2747gNFUARERFxS8uXL2fp0qX4+fkxceJEHA6H3ZHchgqgiIiIuJ2EhAT69OkDQO/evSlfvry9gdyMCqCIiIi4nSlTprBz504KFizIsGHD7I7jdlQARURExK0cOXKEV155BYA33niDkJAQmxO5HxVAERERcStDhgwhLi6OqlWr0qFDB7vjuCUVQBEREXEbP/74IzNnzgRg6tSp+PioymSEvjURERFxC06nk169egHwzDPPUK1aNZsTuS8VQBEREXELc+fO5YcffiAoKIg333zT7jhuTQVQREREXF5cXByDBg0CYOjQoRQpUsTmRO5NBVBERERc3ujRozly5Ahl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pD8lERERyRCt9+u+VABFREQkQ7Ter/tyywLodDoZPnw4lStXpnr16mzdutXuSCIiIl5F6/26N7csgD4+PgwbNoxixYqxceNGHnnkEX766Se7Y4mIiHgNrffr3tyyAAL4+/vz6aefUqtWLc6cOUNkZCS7du2yO5aIiIjH27VrFxMnTgRg4sSJ5MyZ0+ZEkl5uWwABcufOzZIlS7jvvvs4duwYERERHDp0yO5YIiIiHk3r/bo/ty6AACEhIaxcuZIyZcqwd+9eIiMjOXXqlN2xREREPJLW+/UMbl8AAQoVKkR0dDRhYWH873//o0mTJpw7d87uWCIiIh5F6/16Do8ogAC333470dHR5M2blw0bNvDEE0+QkJBgdywRERGPofV+PYfHFECAu+++m2XLlhEQEMCKFSvo0KEDTqfT7lgiIiJuT+v9ehaPKoAA1atXZ8GCBfj5+fHJJ5/Qu3dvLMuyO5aIiIhb03q/nsXjCiBAgwYN+PDDD3E4HEybNo1XXnnF7kgiIiJuS+v9eh6P/RNs27Yt06ZNA2DkyJGXfxYREZG003q/nsljCyBAt27dLp+v0LNnTz7++GObE4mIiLgXrffrmTy6AAIMGzaMnj17AvDss8+yfPlymxOJiIi4B63367k8vgA6HA4mTZrEU089RWJiIo8//jjff/+93bFERERcntb79VweXwABfHx8mDVrFg0bNiQ+Pp7GjRvzyy+/2B1LRETEZWm9X8/mFQUQwN/fn/nz51OjRg1Onz5NZGQkf/75p92xREREXJLW+/VsXlMAAQICAliyZAn33HMPhw8fJiIigiNHjtgdS0RExKVovV/P51UFECBfvnysXLmS22+/nT179tCgQQNOnz5tdywRERGXoPV+vYPXFUCAsLAwvv76awoVKsTPP//MY489xvnz5+2OJSIiYjut9+sdvLIAApQuXZqVK1cSEhLCunXraN26NZcuXbI7loiIiG203q/38NoCCHDfffexZMkScuXKxVdffUWnTp1wOp12xxIREbGF1vv1Hl5dAAFq1arF559/jq+vL3PnzqVfv35YlmV3LBERkWyl9X69i/50gSZNmlz+Sz958mRef/11mxOJiIhkH633631UAP/fM888w6RJkwCz3M0777xjbyAREZFsovV+vY8K4BV69+7N0KFDAejWrRufffaZzYlERESyltb79U4q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bt4cVq40Vxd//725ennz5ox8I+KOChcuTExMDCVLlmTXrl2Eh4dz4sQJu2OJC1MBlGuqUqUKixcvJkeOHCxcuJAuXbpg3fyOQSIuw+l08s8//9x0v/btIT4eHnzQFLKePeGFF8y2mTPN9v79oVw5aNoUfvgB0jq7tmMHHD0Ks2ebadrkxwMPmO1FisD69absRUaa28z07g0hIZDWu604HKaQ1q5timPZsqZw7t0LhQql7RjiGYoXL05MTAxFihTh119/JTIyktOnT9sdS1yU7gMoN7Rw4UKeeOIJnE4ngwYN4s0337Q7kni5hIQEjh49yuHDhy8/jhw5ctXzI0eOcM8997B161a7I4tkq99//506depw/PhxqlevTnR0NEFXnrgqHis9fU0FUG5qxowZPPfccwC89dZbDBw40OZE4oni4uKuWeb+/drJkyfTfMxKlSqpAIpX+vnnn6lbty6nT5/mkUceYenSpeROvvxcPJYKoGS6sWPH8uKLLwLwwQcf0KlTJ5sTiTtwOp2cPHnypqN1hw8f5ty5c2k+rp+fH4ULFyYsLOzy41rPCxcujP+/L6EV8RI//vgj4eHhxMXF0ahRIxYuXKil+jycCqBkiUGDBvHWW2/h4+PDggULaN68ud2RxCYJCQmXi9v1Ct3hw4c5evRoui4gCgoKumGhS/75tttu05JkImnw3XffERkZSXx8PI8//jjz5s3DL6OXnIvLUwGULGFZFs8//zwffPABOXPmZMWKFdRNXhRV3J5lWcTFxd2w0CU/T880LJjbVNxstC4sLEznKYlkga+//pomTZqQkJDA008/zezZs/UPKA+lAihZJjExkSeffJKFCxcSHBzMmjVrqFy58i0ft1Qp6NPHPOw0a5bJ4EkXzjmdTk6cOHHTKdjDhw9z/vz5NB/X39//cnG70WhdoUKFNA0rYrPFixfz+OOPk5iYyAsvvMA777yD48olcMQjpKevaRxY0sXPz4+PP/6YRo0asXr1aho0aMC6desoW7as3dG8zsWLF6+6GvZaBe/o0aMkpfWmckBwcHCazq/TNKyI+2jatClz587lqaee4r333iMgIIAJEyaoBHoxFUBJt1y5crFo0SIeffRRtmzZQv369fnxxx8ppJuO3bLkadi0jNadOnUqXccuUKDATadgCxcurGlYEQ/VunVr4uPj6dixI5MmTSIw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WZZF3bp1Wbt2Lc2aNWPRokV2RxIRERE343A40tTXNAXsIj766CPWrl1L7ty5mTx5st1xRERExIOpALqA06dP079/fwCGDRtGyZIlbU4kIiIinkwF0AUMGzaMY8eOUb58+ctFUERERCSrqADabOvWrURFRQHw9ttvkyNHDpsTiYiIiKdTAbSR0+mka9euOJ1O2rZty6OPPmp3JBEREfECKoA2mj59Oj/++CPBwcGMHz/e7jgiIiLiJVQAbXL8+HEGDx4MmJs/h4WF2ZxIREREvIUKoE0GDx7MP//8w3333Uf37t3tjiMiIiJeRAXQBuvXr2fGjBkAREVF4eenBVlEREQk+6gAZrPExES6desGQKdOnXj44YdtTiQiIiKe4OzZs2neVwUwm02bNo3t27dz2223MWbMGLvjiIiIiIdwOp1p3lcFMBsdOnSI4cOHA/Dmm2+SP39+mxOJiIiIN1IBzEb9+/cnLi6Ohx56iOeee87uOCIiIuKlVACzSUxMDPPmzcPHx4eoqCh8fPTVi4iIiD3UQrLBxYsXL9/qpVu3blSuXNnmRCIiIuLNVACzwfjx4/njjz8oVKgQr776qt1xRERExMupAGaxvXv3Mnr0aADGjRtH3rx57Q0kIiIiXk8FMIv17t2b+Ph46tSpQ7t27eyOIyIiIqICmJWWLFnC4sWL8fPzIyoqCofDYXckERERERXArHL+/Hl69eoFQL9+/ahYsaLNiUREREQMFcAs8sYbb7B3716KFy/OsGHD7I4jIiIicpkKYBb4448/eOuttwCYNGkSQUFBNicSERERSaECmMksy6JHjx4kJCTQsGFDWrRoYXckERERkVRUADPZ559/zqpVq8iZMydTp07VhR8iIiLiclQAM1FcXBx9+/YF4KWXXqJ06dI2JxIRERG5mgpgJho5ciSHDh2idOnSDBo0yO44IiIiItekAphJfvnlFyZPngzAtGnTyJUrl82JRERERK5NBTATOJ1OunbtSlJSEo8//jgNGjSwO5KIiIjIdakAZoIPP/yQ9evXExgYyMSJE+2OIyIiInJDKoC36NSpUwwcOBCAESNGULx4cZsTiYiIiNyYCuAtevnllzlx4gQVK1akT58+dscRERERuSkVwFuwadMm3n33XQCioqLw9/e3OZGIiIjIzakAZlBSUhJdu3bFsiyefvpp6tSpY3ckERERkTRRAcygd999ly1bthASEsLYsWPtjiMiIiKSZiqAGXD06FGGDBkCwGuvvUbhwoVtTiQiIiKSdiqAGfDiiy8SGxtL5cqV6dKli91xRERERNJFBTCd1q5dy4cffojD4SAqKgpfX1+7I4mIiIikiwpgOly6dIlu3boB8Pzzz/PQQw/ZnEhEREQk/VQA02Hy5Mn8+uuv5M+fn9dff93uOCIiIiIZogKYRgcOHGDkyJEAjBkzhtDQUHsDiYiIiGSQn90B3MWUKVMoW7Ys9913Hx06dLA7joiIiEiGOSzLsm6205kzZwgJCSE2NpY8efJkRy4RERERSYf09DVNAYuIiIh4GRVAERERES+jAigiIiLiZVQARURERLyMCqCIiIiIl1EBzESzZkHevJl3vFKlYNKkzDueiIiICKgAZqrWrWHnTrtTiIiIiNyYbgSdiXLnNg8RERERV6YRwCusWAE1a5pp3NBQaNIE9uwx2/buBYcDvvgCHnkEAgLgvvtgw4aU9/97Cvjnn82+wcGQJw9UqQKbN6dsX7AA7roLcuY0073jx984X2wsvPACFCxojvfoo+YzRERERNJDBfAK585Bv36waRPExICPD7RoAU5nyj4vvwwDBsBPP0HZstC2LSQmXvt47dpBsWLmeFu2wODB4O9vtm3ZAk8+CW3awC+/wMiRMGyYKZHXYlnQuDEcOQLLlpn3V64M9erBqVOZ+CWIiIiIx9MU8BUefzz18w8+MKNtv/0GQUHmtQEDTBEDGDXKjODt3g3ly199vH37YODAlG133pmybcIEU96GDTPPy5Y1nzN2LFxrqeHVq01RPHbMjBgCjBsHixbB/PlmZFBEREQkLTQCeIU9e+Cpp+COO8wU6+23m9f37UvZ5957U34OCzP/PXbs2sfr1w86d4bwcHjzzZTpZIDff4caNVLvX6MG7NoFSUlXH2vLFjh71kxNBwWlPP76K/VxRURERG5GI4BXeOwxKF4c3n8fihQxU7933w0JCSn7JE/hgjknEFJPEV9p5EhTKJcuheXLYcQImDfPTCtbVsr7k1nW9bM5naZwrllz9bbMvPWMiIiIeD4VwP938qQZlXv3XahVy7y2bt2tH7dsWfPo29ecLzhzpimAFSteffzvvzf7+vpefZzKlc35f35+5oIRERERkYzSFPD/y5fPTK++9545p++bb8wUbkbFx0OPHmbE7u+/Yf16czFIhQpme//+5kKTV1819w6cPRumTTPnGF5LeDhUrw7Nm8PKleaq5O+/h6FDU19ZLCIiInIzGgH8fz4+Znq2Vy8z7VuuHEyZAnXrZux4vr5mVLF9ezh6FPLnh5YtzYUjYEb0PvsMhg83JTAsDF555doXgICZLl62zFyF3KkTHD8OhQtD7dpQqFDGMoqIiIh3cljWjc48M86cOUNISAixsbHkyZMnO3KJiIiISDqkp69pClhERETEy6gAioiIiHgZFUARERERL6MCKCIiIuJlVABFREREvIwKoIiIiIiXUQEUERER8TIqgCIiIiJeRgVQRERExMuoAIqIiIh4GRVAERERES+jAigiIiLiZVQARURERLyMCqCIiIiIl/FLy06WZQFw5syZLA0jIiIiIhmT3NOSe9uNpKkAxsXFAVC8ePFbiCUiIiIiWS0uLo6QkJAb7uOw0lATnU4nhw4dIjg4GIfDkWkBRURERCRzWJZFXFwcRYoUwcfnxmf5pakAioiIiIjn0EUgIiIiIl5GBVBERETEy6gAioiIiHgZFUARERERL6MCKCIiIuJlVABFREREvIwKoIiIiIiX+T8qPjzpLL70nQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from openfe.utils.atommapping_network_plotting import plot_atommapping_network\n", "\n", "plot_atommapping_network(ligand_network)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.6" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }