diff --git a/.github/workflows/build_documentation.yaml b/.github/workflows/build_documentation.yaml index 30de342..13cf6bb 100644 --- a/.github/workflows/build_documentation.yaml +++ b/.github/workflows/build_documentation.yaml @@ -11,9 +11,17 @@ jobs: steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v3 + with: + python-version: "3.11" + + - name: Install Pandoc + run: | + sudo apt-get update + sudo apt-get install -y pandoc + - name: Install dependencies run: | - pip install sphinx furo myst_parser + pip install .[all,docs] - name: Sphinx build run: | sphinx-build docs/source _build diff --git a/.requirements/docs.in b/.requirements/docs.in index d6bd3be..7368fe6 100644 --- a/.requirements/docs.in +++ b/.requirements/docs.in @@ -1,2 +1,15 @@ +furo +nbsphinx +nbsphinx-link +sphinx-copybutton +m2r2 +nbstripout +pandoc +pydocstyle sphinx -furo \ No newline at end of file +sphinx-inline-tabs +sphinxext-opengraph +sphinxcontrib-gtagjs +ipython +watermark +sphinx_codeautolink \ No newline at end of file diff --git a/README.md b/README.md index 2053b4d..bcc66f0 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ The easiest way to get started with GAUCHE is to check out our tutorial notebook | [GP Regression on Molecules](https://leojklarner.github.io/gauche/notebooks/gp_regression_on_molecules.html) | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/leojklarner/gauche/blob/main/notebooks/GP%20Regression%20on%20Molecules.ipynb) | | [Bayesian Optimisation Over Molecules](https://leojklarner.github.io/gauche/notebooks/bayesian_optimisation_over_molecules.html) | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/leojklarner/gauche/blob/main/notebooks/Bayesian%20Optimisation%20Over%20Molecules.ipynb) | | [Multioutput Gaussian Processes for Multitask Learning](https://leojklarner.github.io/gauche/notebooks/multitask_gp_regression_on_molecules.html) | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/leojklarner/gauche/blob/main/notebooks/Multitask%20GP%20Regression%20on%20Molecules.ipynb) | -| [Training GPs on Graphs](https://leojklarner.github.io/gauche/notebooks/Training%20GPs%20on%20Graphs.html) | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/leojklarner/gauche/blob/main/notebooks/Training%20GPs%20on%20Graphs.ipynb) | +| [Training GPs on Graphs](https://leojklarner.github.io/gauche/notebooks/training_gps_on_graphs.html) | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/leojklarner/gauche/blob/main/notebooks/Training%20GPs%20on%20Graphs.ipynb) | | [Sparse GP Regression for Big Molecular Data](https://leojklarner.github.io/gauche/notebooks/sparse_gp_regression_for_big_molecular_data.html) | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/leojklarner/gauche/blob/main/notebooks/Sparse%20GP%20Regression%20for%20Big%20Molecular%20Data.ipynb) | |[Molecular Preference Learning](https://github.com/leojklarner/gauche/blob/main/notebooks/Molecular%20Preference%20Learning.ipynb)|[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/leojklarner/gauche/blob/main/notebooks/Molecular%20Preference%20Learning.ipynb) | |[Preferential Bayesian Optimisation](https://github.com/leojklarner/gauche/blob/main/notebooks/Preferential%20Bayesian%20Optimisation.ipynb)|[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/leojklarner/gauche/blob/main/notebooks/Preferential%20Bayesian%20Optimisation.ipynb) | diff --git a/docs/source/conf.py b/docs/source/conf.py index 67ee1c9..8127d37 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -10,10 +10,12 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # -# import os -# import sys -# sys.path.insert(0, os.path.abspath("../../../gauche")) +import os +import sys + +print(sys.executable) +sys.path.insert(0, os.path.abspath(".")) # -- Project information ----------------------------------------------------- @@ -23,7 +25,7 @@ author = "Ryan Rhys-Griffiths" # The full version, including alpha/beta/rc tags -release = "0.1.0" +# release = "1.0.0" # -- General configuration --------------------------------------------------- @@ -33,15 +35,19 @@ # ones. extensions = [ "sphinx.ext.autodoc", + "sphinx.ext.autosummary", "sphinx.ext.intersphinx", "sphinx.ext.viewcode", - # "sphinx_copybutton", - # "sphinx_inline_tabs", - # "sphinxcontrib.gtagjs", - # "sphinxext.opengraph", - # "m2r2", - # "nbsphinx", - # "nbsphinx_link", + "sphinx_copybutton", + "sphinx_inline_tabs", + "sphinxcontrib.gtagjs", + "sphinxext.opengraph", + "m2r2", + "nbsphinx", + "nbsphinx_link", + "sphinx.ext.napoleon", + "sphinx_codeautolink", + # "sphinx_autorun", ] # Add any paths that contain templates here, relative to this directory. diff --git a/docs/source/index.rst b/docs/source/index.rst index 973e1c6..e256e54 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -3,16 +3,63 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Welcome to GAUCHE's documentation! -================================== +Documentation +================== + +.. image:: ../../imgs/gauche_banner_1.png + :width: 100% + :alt: GAUCHE Logo + :align: left + +**GAUCHE** is a collaborative, open-source software library that aims to make state-of-the-art probabilistic modelling and black-box optimisation techniques more easily accessible to scientific experts in chemistry, materials science and beyond. We provide 30+ bespoke kernels for molecules, chemical reactions and proteins and illustrate how they can be used for Gaussian processes and Bayesian optimisation in 10+ easy-to-adapt tutorial notebooks. + +`Paper (NeurIPS 2023) `_ + +Overview +========== + +General-purpose Gaussian process (GP) and Bayesian optimisation (BO) libraries do not cater for molecular representations. Likewise, general-purpose molecular machine learning libraries do not consider GPs and BO. To bridge this gap, GAUCHE provides a modular, robust and easy-to-use framework of 30+ parallelisable and batch-GP-compatible implementations of string, fingerprint and graph kernels that operate on a range of widely-used molecular representations. + +.. image:: ../../imgs/gauche_overview.png + :width: 100 % + :alt: GAUCHE Overview + :align: left + +Kernels +--------- -.. include:: readme.rst +Standard GP packages typically assume continuous input spaces of low and fixed dimensionality. This makes it difficult to apply them to common molecular representations: molecular graphs are discrete objects, SMILES strings vary in length and topological fingerprints tend to be high-dimensional and sparse. To bridge this gap, GAUCHE provides: + +* **Fingerprint Kernels** that measure the similarity between bit/count vectors of descriptor by examining the degree to which their elements overlap. +* **String Kernels** that measure the similarity between strings by examining the degree to which their sub-strings overlap. +* **Graph Kernels** that measure between graphs by examining the degree to which certain substructural motifs overlap. + +Representations +----------------- + +GAUCHE supports any representation that is based on bit/count vectors, strings or graphs. For rapid prototyping and benchmarking, we also provide a range of standard featurisation techniques for molecules, chemical reactions and proteins: + +.. list-table:: + :header-rows: 1 + + * - Domain + - Representation + * - Molecules + - ECFP Fingerprints [1], rdkit Fragments, Fragprints, Graphs [2], SMILES [3], SELFIES [4] + * - Chemical Reactions + - One-Hot Encoding, Data-Driven Reaction Fingerprints [5], Differential Reaction Fingerprints [6], Reaction SMARTS + * - Proteins + - Sequences, Graphs [2] + +Getting Started +----------------- + +The easiest way to get started with GAUCHE is to check out our tutorial notebooks: .. toctree:: - :maxdepth: 2 - :caption: Tutorials + :maxdepth: 1 notebooks/gp_regression_on_molecules.nblink notebooks/bayesian_optimisation_over_molecules.nblink @@ -26,6 +73,16 @@ Welcome to GAUCHE's documentation! notebooks/external_graph_kernels.nblink + +Extensions +----------------- + +If there are any specific kernels or representations that you would like to see included in GAUCHE, please reach out or submit an issue/pull request. + + +Gauche's API +================ + .. toctree:: :maxdepth: 3 :caption: API Reference @@ -34,11 +91,26 @@ Welcome to GAUCHE's documentation! modules/representations modules/dataloader - - Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` + +References +================== + +.. _bibliography: + +[1] Rogers, D. and Hahn, M., 2010. `Extended-connectivity fingerprints. `_ Journal of Chemical Information and Modeling, 50(5), pp.742-754. + +[2] Jamasb, A., Viñas Torné, R., Ma, E., Du, Y., Harris, C., Huang, K., Hall, D., Lió, P. and Blundell, T., 2022. `Graphein-a Python library for geometric deep learning and network analysis on biomolecular structures and interaction networks `_. Advances in Neural Information Processing Systems, 35, pp.27153-27167. + +[3] Weininger, D., 1988. `SMILES, a chemical language and information system. 1. Introduction to methodology and encoding rules. `_ Journal of Chemical Information and Computer Sciences, 28(1), pp.31-36. + +[4] Krenn, M., Häse, F., Nigam, A., Friederich, P. and Aspuru-Guzik, A., 2020. `Self-referencing embedded strings (SELFIES): A 100% robust molecular string representation `_. Machine Learning: Science and Technology, 1(4), p.045024. + +[5] Probst, D., Schwaller, P. and Reymond, J.L., 2022. `Reaction classification and yield prediction using the differential reaction fingerprint DRFP `_. Digital Discovery, 1(2), pp.91-97. + +[6] Schwaller, P., Probst, D., Vaucher, A.C., Nair, V.H., Kreutter, D., Laino, T. and Reymond, J.L., 2021. `Mapping the space of chemical reactions using attention-based neural networks `_. Nature Machine Intelligence, 3(2), pp.144-152. \ No newline at end of file diff --git a/docs/source/modules/dataloader.rst b/docs/source/modules/dataloader.rst index 57d6452..0c6cfa1 100644 --- a/docs/source/modules/dataloader.rst +++ b/docs/source/modules/dataloader.rst @@ -8,7 +8,7 @@ Dataloader Molecular Properties ---------------------- -.. automodule:: gauche.dataloader.mol_prop_loader +.. automodule:: gauche.dataloader.molprop_loader :members: Reaction Loader diff --git a/docs/source/readme.rst b/docs/source/readme.rst index 57de865..e69de29 100644 --- a/docs/source/readme.rst +++ b/docs/source/readme.rst @@ -1 +0,0 @@ -.. mdinclude:: ../../README.md \ No newline at end of file diff --git a/gauche/dataloader/reaction_loader.py b/gauche/dataloader/reaction_loader.py index 82b75e3..40ea64d 100644 --- a/gauche/dataloader/reaction_loader.py +++ b/gauche/dataloader/reaction_loader.py @@ -19,6 +19,16 @@ class ReactionLoader(DataLoader): + """ + Data loader class for reaction yield prediction + datasets with a single regression target. + Expects input to be a csv file with either multiple SMILES + columns or a single reaction SMARTS column. + Contains methods to validate the dataset and to + transform the SMILES/SMARTS strings into different + molecular representations. + """ + def __init__(self): super(ReactionLoader, self).__init__() self.task = "reaction_yield_prediction" diff --git a/gauche/kernels/fingerprint_kernels/braun_blanquet_kernel.py b/gauche/kernels/fingerprint_kernels/braun_blanquet_kernel.py index d4a3f87..959a8f8 100644 --- a/gauche/kernels/fingerprint_kernels/braun_blanquet_kernel.py +++ b/gauche/kernels/fingerprint_kernels/braun_blanquet_kernel.py @@ -16,7 +16,7 @@ def batch_braun_blanquet_sim( Braun-Blanquet similarity between two batched tensors, across last 2 dimensions. eps argument ensures numerical stability if all zero tensors are added. - / max(|x1|, |x2|) + :math:` / max(|x1|, |x2|)` Where || is the L1 norm and <.> is the inner product diff --git a/gauche/kernels/fingerprint_kernels/dice_kernel.py b/gauche/kernels/fingerprint_kernels/dice_kernel.py index abbd9d2..6a56f87 100644 --- a/gauche/kernels/fingerprint_kernels/dice_kernel.py +++ b/gauche/kernels/fingerprint_kernels/dice_kernel.py @@ -14,7 +14,7 @@ def batch_dice_sim( Dice similarity between two batched tensors, across last 2 dimensions. eps argument ensures numerical stability if all zero tensors are added. - (2 * ) / (|x1| + |x2|) + :math:`(2 * ) / (|x1| + |x2|)` Where || is the L1 norm and <.> is the inner product @@ -50,10 +50,10 @@ class DiceKernel(Kernel): .. math:: - \begin{equation*} - k_{\text{Dice}}(\mathbf{x}, \mathbf{x'}) = \frac{2\langle\mathbf{x}, - \mathbf{x'}\rangle}{\left\lVert\mathbf{x}\right\rVert + \left\lVert\mathbf{x'}\right\rVert} - \end{equation*} + \begin{equation*} + k_{\text{Dice}}(\mathbf{x}, \mathbf{x'}) = \frac{2\langle\mathbf{x}, + \mathbf{x'}\rangle}{\left\lVert\mathbf{x}\right\rVert + \left\lVert\mathbf{x'}\right\rVert} + \end{equation*} .. note:: diff --git a/gauche/kernels/fingerprint_kernels/faith_kernel.py b/gauche/kernels/fingerprint_kernels/faith_kernel.py index 343bc4e..ee3ae99 100644 --- a/gauche/kernels/fingerprint_kernels/faith_kernel.py +++ b/gauche/kernels/fingerprint_kernels/faith_kernel.py @@ -16,7 +16,7 @@ def batch_faith_sim( Faith similarity between two batched tensors, across last 2 dimensions. eps argument ensures numerical stability if all zero tensors are added. - (2 * ) + d / 2n + :math:`(2 * ) + d / 2n` Where <.> is the inner product, d is the number of common zeros and n is the dimension of the input vectors diff --git a/gauche/kernels/fingerprint_kernels/forbes_kernel.py b/gauche/kernels/fingerprint_kernels/forbes_kernel.py index 431171a..c4b43d2 100644 --- a/gauche/kernels/fingerprint_kernels/forbes_kernel.py +++ b/gauche/kernels/fingerprint_kernels/forbes_kernel.py @@ -16,9 +16,9 @@ def batch_forbes_sim( Forbes similarity between two batched tensors, across last 2 dimensions. eps argument ensures numerical stability if all zero tensors are added. - n * / (|x1| + |x2|) + :math:`n * / (|x1| + |x2|)` - Where <.> is the inner product, || is the L1 norm, and n is the dimension of the input vectors + Where <.> is the inner product, :math:`||` is the L1 norm, and n is the dimension of the input vectors Args: x1: `[b x n x d]` Tensor where b is the batch dimension diff --git a/gauche/kernels/fingerprint_kernels/inner_product_kernel.py b/gauche/kernels/fingerprint_kernels/inner_product_kernel.py index db784df..8c71814 100644 --- a/gauche/kernels/fingerprint_kernels/inner_product_kernel.py +++ b/gauche/kernels/fingerprint_kernels/inner_product_kernel.py @@ -16,7 +16,7 @@ def batch_inner_product_sim( Inner product similarity between two batched tensors, across last 2 dimensions. eps argument ensures numerical stability if all zero tensors are added. - + :math:`` Where <.> is the inner product @@ -47,10 +47,10 @@ class InnerProductKernel(Kernel): .. math:: - \begin{equation*} - k_{\text{Inner Product}}(\mathbf{x}, \mathbf{x'}) = \langle\mathbf{x}, - \mathbf{x'}\rangle - \end{equation*} + \begin{equation*} + k_{\text{Inner Product}}(\mathbf{x}, \mathbf{x'}) = \langle\mathbf{x}, + \mathbf{x'}\rangle + \end{equation*} .. note:: diff --git a/gauche/kernels/fingerprint_kernels/intersection_kernel.py b/gauche/kernels/fingerprint_kernels/intersection_kernel.py index b4ea165..dc0a612 100644 --- a/gauche/kernels/fingerprint_kernels/intersection_kernel.py +++ b/gauche/kernels/fingerprint_kernels/intersection_kernel.py @@ -17,7 +17,7 @@ def batch_intersection_sim( eps argument ensures numerical stability if all zero tensors are added. Must be used with binary-valued vectors only - + + :math:` + ` Where <.> is the inner product and x1' and x2' denote the bit flipped vectors such that ones and zeros are interchanged diff --git a/gauche/kernels/fingerprint_kernels/minmax_kernel.py b/gauche/kernels/fingerprint_kernels/minmax_kernel.py index 290647b..8dd532b 100644 --- a/gauche/kernels/fingerprint_kernels/minmax_kernel.py +++ b/gauche/kernels/fingerprint_kernels/minmax_kernel.py @@ -14,9 +14,9 @@ def batch_minmax_sim( MinMax similarity between two batched tensors, across last 2 dimensions. eps argument ensures numerical stability if all zero tensors are added. - (|x1| + |x2| - |x1 - x2|) / (|x1| + |x2| + |x1 - x2|) + :math:`(|x1| + |x2| - |x1 - x2|) / (|x1| + |x2| + |x1 - x2|)` - Where || is the L1 norm + Where :math:`||` is the L1 norm Args: x1: `[b x n x d]` Tensor where b is the batch dimension @@ -51,9 +51,9 @@ class MinMaxKernel(Kernel): .. math:: - \begin{equation*} - k_{\text{MinMax}}(\mathbf{x}, \mathbf{x'}) = \frac{\sum_i \min(x_i, x'_i)} - \end{equation*} + \begin{equation*} + k_{\text{MinMax}}(\mathbf{x}, \mathbf{x'}) = \frac{\sum_i \min(x_i, x'_i)} + \end{equation*} .. note:: diff --git a/gauche/kernels/fingerprint_kernels/otsuka_kernel.py b/gauche/kernels/fingerprint_kernels/otsuka_kernel.py index 2c82d07..c4a868a 100644 --- a/gauche/kernels/fingerprint_kernels/otsuka_kernel.py +++ b/gauche/kernels/fingerprint_kernels/otsuka_kernel.py @@ -16,7 +16,7 @@ def batch_otsuka_sim( Otsuka similarity between two batched tensors, across last 2 dimensions. eps argument ensures numerical stability if all zero tensors are added. - / sqrt(|x1| + |x2|) + :math:` / sqrt(|x1| + |x2|)` Where || is the L1 norm and <.> is the inner product diff --git a/gauche/kernels/fingerprint_kernels/rand_kernel.py b/gauche/kernels/fingerprint_kernels/rand_kernel.py index ad5cd12..6561296 100644 --- a/gauche/kernels/fingerprint_kernels/rand_kernel.py +++ b/gauche/kernels/fingerprint_kernels/rand_kernel.py @@ -16,7 +16,7 @@ def batch_rand_sim( Rand similarity between two batched tensors, across last 2 dimensions. eps argument ensures numerical stability if all zero tensors are added. - + d / n + :math:` + d / n` Where <.> is the inner product, d is the number of common zeros and n is the dimensionality diff --git a/gauche/kernels/fingerprint_kernels/rogers_tanimoto_kernel.py b/gauche/kernels/fingerprint_kernels/rogers_tanimoto_kernel.py index 8707b3d..6c78e17 100644 --- a/gauche/kernels/fingerprint_kernels/rogers_tanimoto_kernel.py +++ b/gauche/kernels/fingerprint_kernels/rogers_tanimoto_kernel.py @@ -16,7 +16,7 @@ def batch_rogers_tanimoto_sim( Rogers-Tanimoto similarity between two batched tensors, across last 2 dimensions. eps argument ensures numerical stability if all zero tensors are added. - + d / 2|x1| + 2|x2| - 3* + d + :math:` + d / 2|x1| + 2|x2| - 3* + d` Where || is the L1 norm and <.> is the inner product and d is the number of common zeros diff --git a/gauche/kernels/fingerprint_kernels/russell_rao_kernel.py b/gauche/kernels/fingerprint_kernels/russell_rao_kernel.py index 0c9459e..820b4a3 100644 --- a/gauche/kernels/fingerprint_kernels/russell_rao_kernel.py +++ b/gauche/kernels/fingerprint_kernels/russell_rao_kernel.py @@ -16,7 +16,7 @@ def batch_russell_rao_sim( Russell-Rao similarity between two batched tensors, across last 2 dimensions. eps argument ensures numerical stability if all zero tensors are added. - / n + :math:` / n` Where <.> is the inner product and n is the dimension of the vectors x1/x2 diff --git a/gauche/kernels/fingerprint_kernels/sogenfrei_kernel.py b/gauche/kernels/fingerprint_kernels/sogenfrei_kernel.py index 02b506b..b6c6ef3 100644 --- a/gauche/kernels/fingerprint_kernels/sogenfrei_kernel.py +++ b/gauche/kernels/fingerprint_kernels/sogenfrei_kernel.py @@ -16,7 +16,7 @@ def batch_sogenfrei_sim( Sogenfrei similarity between two batched tensors, across last 2 dimensions. eps argument ensures numerical stability if all zero tensors are added. - **2 / (|x1| + |x2|) + :math:`**2 / (|x1| + |x2|)` Where <.> is the inner product and || is the L1 norm diff --git a/gauche/kernels/fingerprint_kernels/sokal_sneath_kernel.py b/gauche/kernels/fingerprint_kernels/sokal_sneath_kernel.py index da91e23..cb4bc57 100644 --- a/gauche/kernels/fingerprint_kernels/sokal_sneath_kernel.py +++ b/gauche/kernels/fingerprint_kernels/sokal_sneath_kernel.py @@ -16,7 +16,7 @@ def batch_sokal_sneath_sim( Sokal-Sneath similarity between two batched tensors, across last 2 dimensions. eps argument ensures numerical stability if all zero tensors are added. - / 2|x1| + 2|x2| - 3* + :math:` / 2|x1| + 2|x2| - 3*` Where <.> is the inner product and || is the L1 norm diff --git a/gauche/kernels/fingerprint_kernels/tanimoto_kernel.py b/gauche/kernels/fingerprint_kernels/tanimoto_kernel.py index 1dddf98..c289016 100644 --- a/gauche/kernels/fingerprint_kernels/tanimoto_kernel.py +++ b/gauche/kernels/fingerprint_kernels/tanimoto_kernel.py @@ -15,16 +15,17 @@ def batch_tanimoto_sim( Tanimoto similarity between two batched tensors, across last 2 dimensions. eps argument ensures numerical stability if all zero tensors are added. Tanimoto similarity is proportional to: - () / (||x||^2 + ||y||^2 - ) + :math:`() / (||x||^2 + ||y||^2 - )` where x and y may be bit or count vectors or in set notation: - |A \cap B | / |A| + |B| - |A \cap B | + :math:`|A \\cap B| / |A| + |B| - |A \\cap B|` Args: x1: `[b x n x d]` Tensor where b is the batch dimension x2: `[b x m x d]` Tensor eps: Float for numerical stability. Default value is 1e-6 + Returns: Tensor denoting the Tanimoto similarity. """ @@ -52,11 +53,11 @@ class TanimotoKernel(Kernel): .. math:: - \begin{equation*} - k_{\text{Tanimoto}}(\mathbf{x}, \mathbf{x'}) = \frac{\langle\mathbf{x}, - \mathbf{x'}\rangle}{\left\lVert\mathbf{x}\right\rVert^2 + \left\lVert\mathbf{x'}\right\rVert^2 - - \langle\mathbf{x}, \mathbf{x'}\rangle} - \end{equation*} + \begin{equation*} + k_{\text{Tanimoto}}(\mathbf{x}, \mathbf{x'}) = \frac{\langle\mathbf{x}, + \mathbf{x'}\rangle}{\left\lVert\mathbf{x}\right\rVert^2 + \left\lVert\mathbf{x'}\right\rVert^2 - + \langle\mathbf{x}, \mathbf{x'}\rangle} + \end{equation*} .. note:: diff --git a/gauche/representations/fingerprints.py b/gauche/representations/fingerprints.py index cb49443..7f5a142 100644 --- a/gauche/representations/fingerprints.py +++ b/gauche/representations/fingerprints.py @@ -17,11 +17,9 @@ def one_hot(df: pd.DataFrame) -> np.ndarray: Builds reaction representation as a bit vector which indicates whether a certain condition, reagent, reactant etc. is present in the reaction. - :param df: pandas DataFrame with columns representing different - parameters of the reaction (e.g. reactants, reagents, conditions). + :param df: pandas DataFrame with columns representing different parameters of the reaction (e.g. reactants, reagents, conditions). :type df: pandas DataFrame - :return: array of shape [len(reaction_smiles), sum(unique values for different columns in df)] - with one-hot encoding of reactions + :return: array of shape [len(reaction_smiles), sum(unique values for different columns in df)] with one-hot encoding of reactions """ df_ohe = pd.get_dummies(df) return df_ohe.to_numpy(dtype=np.float64) diff --git a/notebooks/Bayesian Optimisation Over Molecules.ipynb b/notebooks/Bayesian Optimisation Over Molecules.ipynb index 52ce88c..d85807d 100644 --- a/notebooks/Bayesian Optimisation Over Molecules.ipynb +++ b/notebooks/Bayesian Optimisation Over Molecules.ipynb @@ -23,11 +23,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Imports\n", - "\n", - "# To import from the gprotorch package\n", - "import sys\n", - "sys.path.append('..')\n", + "\"\"\"Imports.\"\"\"\n", "\n", "import time\n", "import warnings\n", @@ -190,7 +186,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 4, "id": "9a40511d", "metadata": {}, "outputs": [ @@ -225,7 +221,7 @@ }, { "data": { - "image/png": "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FIIgICQkxO347NmzER4ejk6dOuGtt96CzXblTR/NZjNMJpPbhXyMzQKczWLQISKiepM07Bw9ehQLFixAy5YtsWrVKjzxxBOYMGECli5detn7V1dX47nnnsPw4cNhMBhcxydMmIAvvvgC69atw2OPPYaZM2fi2WefveLzzpo1C0aj0XVJTEz0+mujeqg2AWcPAtYKqSshIqIAIIiiKNn8XZVKha5du+K3335zHZswYQK2bduGzZs3u93XarVi2LBhOHXqFNavX+8Wdi718ccf47HHHkN5eTnUanWN281mM8xms+u6yWRCYmIiSktLr9ouNQJTLlCeJ3UVRETkTdHXAXKl15s1mUwwGo3X/PyWtGcnNjYWbdu2dTvWpk0bZGdnux2zWq245557cOLECaxevfqagaR79+6w2Ww4fvz4ZW9Xq9UwGAxuF5KY3QYUHmHQISIir5N0gHLv3r1x8OBBt2OHDh1CcnKy6/r5oJOVlYV169YhPDz8mu3u3r0bMpkMUVFRXq+ZGoClAig+ztWQiYioQUgadiZNmoRevXph5syZuOeee7B161YsWrQIixYtAuAMOn/961+xc+dOrFixAna7HXl5zr/8w8LCoFKpsHnzZmRmZuKmm26CXq/H5s2bMWnSJIwcOdI1hZ18WPkZ54wrroZMREQNRNIxOwCwYsUKTJs2DVlZWUhNTcXkyZNd6+UcP37cbSr6xdatW4e+ffti586dePLJJ3HgwAGYzWakpqZi1KhRmDx58mXH61xObc/5kRdxNWQioqZD4jE7kocdX8Cw08is1c5NPG3VUldCRESNQeKww72xqHFVFgGlJ7kaMhERNRqGHWo8paeBigKpqyAioiaGYYcansPhPG1l5krVRETU+Bh2qGHZLM6gY62UuhIiImqiGHao4VgqgaKjgMMqdSVERNSEMexQw6gqAUpOcCAyERFJjmGHvK+84NxCgURERNJj2CHvEUXntPLKQqkrISIicmHYIe9w2IGiY4ClTOpKiIiI3DDsUP3ZzM6ByFwRmYiIfBDDDtWPudw5tdxhk7oSIiKiy2LYobqrLAJKssEdy4mIyJcx7FDdmHKB8jypqyAiIromhh3yjCg618+pKpa6EiIiolph2KHas9uc43Ms5VJXQkRSEUXnZARbNWCtuvCvtQqwW5wzMx1W5+8Lh9U5ns9hA+wXf33RbfYr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kwmJiYk4efIkDAaDz7fbkG2zZv9vmzU3TtusuXHa9seaG7LthqxZFEWUlZUhLi4OMtmVR+awZweATCZDQkKC1GXUicFg8Pp/noZstyHbZs3+3zZrbpy2WXPjtO2PNTdk2w3V7tV6dM7jAGUiIiIKaAw7REREFNAYdvyUWq3G9OnToVar/aLdhmybNft/26y5cdpmzY3Ttj/W3JBtN2TNtcUBykRERBTQ2LNDREREAY1hh4iIiAIaww4REREFNIYdIiIiCmgMO35m48aNGDJkCOLi4iAIAr7//nuvtDtr1ixcf/310Ov1iIqKwh133IGDBw96pe0FCxagffv2rgWlevbsiR9//NErbV9s9uzZEAQBEydOrHdbr7zyCgRBcLu0bt26/kUCOH36NEaOHInw8HBotVqkp6dj+/bt9W43JSWlRs2CIGDcuHH1atdut+Oll15CamoqtFotmjdvjhkzZlxzL5raKisrw8SJE5GcnAytVotevXph27ZtHrVxrfeFKIp4+eWXERsbC61WiwEDBiArK8srbX/77bcYOHAgwsPDIQgCdu/eXe92rVYrnnvuOaSnp0On0yEuLg4PPPAAcnJyvFLzK6+8gtatW0On0yE0NBQDBgxAZmamV9q+2OOPPw5BEDBv3rx6tztmzJga/7czMjK8VvP+/ftx++23w2g0QqfT4frrr0d2dna92r3c+1EQBLz11lv1rrm8vBzjx49HQkICtFot2rZti4ULF9a73fz8fIwZMwZxcXEICgpCRkZGrd4rtfkMqa6uxrhx4xAeHo7g4GAMGzYM+fn512zbGxh2/ExFRQU6dOiA+fPne7XdDRs2YNy4cdiyZQtWr14Nq9WKgQMHoqKiot5tJyQkYPbs2dixYwe2b9+Ofv36YejQofjzzz+9ULnTtm3b8M9//hPt27f3Wpvt2rVDbm6u6/Lrr7/Wu83i4mL07t0bSqUSP/74I/bt24e3334boaGh9W5727ZtbvWuXr0aAHD33XfXq905c+ZgwYIF+OCDD7B//37MmTMHb775Jt5///161wwADz/8MFavXo1PP/0Ue/bswcCBAzFgwACcPn261m1c633x5ptv4r333sPChQuRmZkJnU6HQYMGobq6ut5tV1RU4IYbbsCcOXNqXe+12q2srMTOnTvx0ksvYefOnfj2229x8OBB3H777fVuGwBatWqFDz74AHv27MGvv/6KlJQUDBw4EGfOnKl32+d999132LJlC+Li4rxSMwBkZGS4/R///PPPvdL2kSNHcMMNN6B169ZYv349/vjjD7z00kvQaDT1avfiWnNzc/Hxxx9DEAQMGzas3jVPnjwZK1euxL///W/s378fEydOxPjx47F8+fI6tyuKIu644w4cPXoU//nPf7Br1y4kJydjwIAB1/wsqM1nyKRJk/DDDz/g66+/xoYNG5CTk4O77rrrmt8LrxDJbwEQv/vuuwZpu6CgQAQgbtiwoUHaDw0NFf/1r395pa2ysjKxZcuW4urVq8Ubb7xRfPrpp+vd5vTp08UOHTrUu51LPffcc+INN9zg9XYv5+mnnxabN28uOhyOerVz6623ig899JDbsbvuukscMWJEvdoVRVGsrKwU5XK5uGLFCrfjnTt3Fl944YU6tXnp+8LhcIgxMTHiW2+95TpWUlIiqtVq8fPPP69X2xc7duyYCEDctWtXvWu+nK1bt4oAxBMnTni97dLSUhGAuGbNGq+0ferUKTE+Pl7cu3evmJycLL7zzjv1bnf06NHi0KFDPWqntm3fe++94siRI73e7qWGDh0q9uvXzyttt2vXTnzttdfcjnn6vrm03YMHD4oAxL1797qO2e12MTIyUvzwww89qvnSz5CSkhJRqVSKX3/9tes++/fvFwGImzdv9qjtumDPDl1WaWkpACAsLMyr7drtdnzxxReoqKhAz549vdLmuHHjcOutt2LAgAFeae+8rKwsxMXFoVmzZhgxYsQ1u7RrY/ny5ejatSvuvvtuREVFoVOnTvjwww+9UK07i8WCf//733jooYfqvbltr1698PPPP+PQoUMAgN9//x2//vorBg8eXO86bTYb7HZ7jb+gtVqtV3rSAODYsWPIy8tz+/9hNBrRvXt3bN682SvP0RhKS0shCAJCQkK82q7FYsGiRYtgNBrRoUOHerfncDgwatQoTJ06Fe3atfNChResX78eUVFRSEtLwxNPPIHCwsJ6t+lwOPDf//4XrVq1wqBBgxAVFYXu3bt7bYjAefn5+fjvf/+LsWPHeqW9Xr16Yfny5Th9+jREUcS6detw6NAhDBw4sM5tms1mAHB7P8pkMqjVao/fj5d+huzYsQNWq9Xtfdi6dWskJSU1yvuQYYdqcDgcmDhxInr37o3rrrvOK23u2bMHwcHBUKvVePzxx/Hdd9+hbdu29W73iy++wM6dOzFr1iwvVHlB9+7dsWTJEqxcuRILFizAsWPH8Je//AVlZWX1avfo0aNYsGABWrZsiVWrVuGJJ57AhAkTsHTpUi9V7vT999+jpKQEY8aMqXdbf/vb33DfffehdevWUCqV6NSpEyZOnIgRI0bUu229Xo+ePXtixowZyMnJgd1ux7///W9s3rwZubm59W4fAPLy8gAA0dHRbsejo6Ndt/m66upqPPfccxg+fLjXNlJcsWIFgoODodFo8M4772D16tWIiIiod7tz5syBQqHAhAkTvFDlBRkZGfjkk0/w888/Y86cOdiwYQMGDx4Mu91er3YLCgpQXl6O2bNnIyMjAz/99BPuvPNO3HXXXdiwYYOXqgeWLl0KvV7vtdM277//Ptq2bYuEhASoVCpkZGRg/vz56NOnT53bPB8+pk2bhuLiYlgsFsyZMwenTp3y6P14uc+QvLw8qFSqGmG9sd6H3PWcahg3bhz27t3rtb+sASAtLQ27d+9GaWkpvvnmG4wePRobNmyoV+A5efIknn76aaxevfqa59Y9dXGvRfv27dG9e3ckJyfjq6++qtdfZg6HA127dsXMmTMBAJ06dcLevXuxcOFCjB49ut51n/fRRx9h8ODBtR4vcTVfffUVPvvsMyxbtgzt2rXD7t27MXHiRMTFxXml5k8//RQPPfQQ4uPjIZfL0blzZwwfPhw7duyod9uBwGq14p577oEoiliwYIHX2r3pppuwe/dunD17Fh9++CHuueceZGZmIioqqs5t7tixA++++y527txZ7x7FS913332ur9PT09G+fXs0b94c69evR//+/evcrsPhAAAMHToUkyZNAgB07NgRv/32GxYuXIgbb7yxfoWf8/HHH2PEiBFe+131/vvvY8uWLVi+fDmSk5OxceNGjBs3DnFxcXXu5VYqlfj2228xduxYhIWFQS6XY8CAARg8eLBHExIa4jOkvtizQ27Gjx+PFStWYN26dUhISPBauyqVCi1atECXLl0wa9YsdOjQAe+++2692tyxYwcKCgrQuXNnKBQKKBQKbNiwAe+99x4UCkW9/+K7WEhICFq1aoXDhw/Xq53Y2NgaAa9NmzZeOUV23okTJ7BmzRo8/PDDXmlv6tSprt6d9PR0jBo1CpMmTfJab1rz5s2xYcMGlJeX4+TJk9i6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7mrtcDjw2muvISEhAWq1Gh07dsTKlStdtwuCgB07duC1116DIAh45ZVXrvKdu/C6N2zYgHfffReCIEAQBBw/frxedc+dOxfp6enQ6XRITEzEk08+ifLycgDA+vXr8eCDD6K0tNT1fOfrvPQ0VnZ2NoYOHYrg4GAYDAbcc889yM/Pd91+/uf66aefIiUlBUajEffddx/Kyspc9/nmm2+Qnp4OrVaL8PBwDBgwABUVFdf8vhD5O4YdogAil8sxc+ZMvP/++zh16lS92lq7di1ycnKwceNGzJ07F9OnT8dtt92G0NBQZGZm4vHHH8djjz1W43mmTp2KZ555Brt27ULPnj0xZMgQFBYWAgBKSkrQr18/dOrUCdu3b8fKlSuRn5+Pe+65x62NpUuXQqVSYdOmTVi4cOFl63v33Xfx9ttv4+9//zv++OMPDBo0CLfffjuysrIAALm5uWjXrh2eeeYZ5ObmYsqUKdd8ze+++y569uyJRx55BLm5ucjNzUViYmK96pbJZHjvvffw559/YunSpVi7di2effZZAECvXr0wb948GAwG1/Ndrk6Hw4GhQ4eiqKgIGzZswOrVq3H06FHce++9bvc7cuQIvv/+e6xYsQIrVqzAhg0bXKc1c3NzMXz4cDz00EPYv38/1q9fj7vuugvcC5qahEbZW52IGtzo0aPFoUOHiqIoij169BAfeughURRF8bvvvhMvfqtPnz5d7NChg9tj33nnHTE5OdmtreTkZNFut7uOpaWliX/5y19c1202m6jT6cTPP/9cFEVRPHbsmAhAnD17tus+VqtVTEhIEOfMmSOKoijOmDFDHDhwoNtznzx5UgQgHjx4UBRFUbzxxhvFTp06XfP1xsXFiW+88Ybbseuvv1588sknXdc7dOggTp8+/artXPx9O//8Tz/9tNt9vFn3119/LYaHh7uuL168WDQajTXul5ycLL7zzjuiKIriTz/9JMrlcjE7O9t1+59//ikCELdu3SqKovPnGhQUJJpMJtd9pk6dKnbv3l0URVHcsWOHCEA8fvz4NWskCjTs2SEKQHPmzMHSpUuxf//+OrfRrl07yGQXfkVER0cjPT3ddV0ulyM8PBwFBQVuj+vZs6fra4VCga5du7rq+P3337Fu3ToEBwe7Lq1btwbg7JU4r0uXLletzWQyIScnB71793Y73rt373q95iupT91r1qxB//79ER8fD71ej1GjRqGwsBCVlZW1fv79+/cjMTERiYmJrmNt27ZFSEiI2+tNSUmBXq93XY+NjXX9fDp06ID+/fsjPT0dd999Nz788MOAGttFdDUMO0QBqE+fPhg0aBCmTZtW4zaZTFbj1IXVaq1xP6VS6XZdEITLHnM4HLWuq7y8HEOGDMHu3bvdLllZWejTp4/rfjqdrtZtNoa61n38+HHcdtttaN++Pf7v//4PO3bswPz58wHUfwDz5Vzt5yOXy7F69Wr8+OOPaNu2Ld5//32kpaXh2LFjXq+DyNcw7BAFqNmzZ+OHH37A5s2b3Y5HRkYiLy/PLfB4c22cLVu2uL622WzYsWMH2rRpAwDo3Lkz/vzzT6SkpKBFixZuF08CjsFgQFxcHDZt2uR2fNOmTWjbtm296lepVLDb7W7H6lr3jh074HA48Pbbb6NHjx5o1aoVcnJyrvl8l2rTpg1OnjyJkydPuo7t27cPJSUlHr1eQRDQu3dvvPrqq9i1axdUKhW+++67Wj+eyF8x7BAFqPT0dIwYMQLvvfee2/G+ffvizJkzePPNN3HkyBHMnz8fP/74o9eed/78+fjuu+9w4MABjBs3DsXFxXjooYcAAOPGjUNRURGGDx+Obdu24ciRI1i1ahUefPDBa37gX2rq1KmYM2cOvvzySxw8eBB/+9vfsHv3bjz99NP1qj8lJQWZmZk4fvw4zp49C4fDUee6W7RoAavVivfffx9Hjx7Fp59+WmPAdUpKCsrLy/Hzzz/j7Nmzlz29NWDAANfPc+fOndi6dSseeOAB3HjjjejatWutXldmZiZmzpyJ7du3Izs7G99++y3OnDnjCqJEgYxhhyiAvfbaazVOM7Vp0wb/+Mc/MH/+fHTo0AFbt26t1Uyl2po9ezZmz56NDh064Ndff8Xy5csREREBAK7eGLvdjoEDByI9PR0TJ05ESEiI2/ig2pgwYQImT56MZ555Bunp6Vi5ciWWL1+Oli1b1qv+KVOmQC6Xo23btoiMjER2dnad6+7QoQPmzp2LOXPm4LrrrsNnn31WY1mAXr164fHHH8e9996LyMhIvPnmmzXaEQQB//nPfxAaGoo+ffpgwIABaNasGb788stavy6DwYCNGzfilltuQatWrfDiiy/i7bffxuDBg2v/zSHyU4J46cl7IiIiogDCnh0iIiIKaAw7REREFNAYdoiIiCigMewQERFRQGPYISIiooDGsENEREQBjWGHiIiIAhrDDhEREQU0hh0iIiIKaAw7REREFNAYdoiIiCig/T9Rmztubj82GQAAAABJRU5ErkJggg==", + "image/png": "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O0REROTXGHaIiIjIrzHs+JitW7fizjvvRGxsLARBwHfffeeRdufNm4frr78eBoMBkZGRGD58OI4ePeqRtpcsWYLOnTs7J5Tq3bs3fvjhB4+0Xd38+fMhCAImT57c4LZmz54NQRBcbh06dGh4kQDOnTuH0aNHIywsDHq9HikpKdi9e3eD201MTKxRsyAImDBhQoPatdvteOWVV5CUlAS9Xo/WrVtjzpw511yLpq6KioowefJkJCQkQK/X48Ybb8SuXbvcauNarwtJkvDqq68iJiYGer0eAwcORFpamkfa/te//oVBgwYhLCwMgiBg//79DW7XarVixowZSElJQWBgIGJjY/Hwww8jMzPTIzXPnj0bHTp0QGBgIEJCQjBw4EDs2LHDI21X99RTT0EQBCxatKjB7Y4bN67G7/aQIUM8VvPhw4dx1113ITg4GIGBgbj++uuRkZHRoHZrez0KgoC33367wTUXFxdj4sSJiIuLg16vR3JyMpYuXdrgdnNycjBu3DjExsYiICAAQ4YMqdNrpS7vIeXl5ZgwYQLCwsIQFBSEESNGICcn55ptewLDjo8pKSlBly5dsHjxYo+2u2XLFkyYMAHbt2/HunXrYLVaMWjQIJSUlDS47bi4OMyfPx979uzB7t270b9/fwwbNgx//PGHByp32LVrF/72t7+hc+fOHmuzU6dOyMrKct7+97//NbjN/Px89OnTB2q1Gj/88AMOHTqEd955ByEhIQ1ue9euXS71rlu3DgBw3333NajdBQsWYMmSJfjwww9x+PBhLFiwAG+99RY++OCDBtcMAI899hjWrVuHzz//HAcOHMCgQYMwcOBAnDt3rs5tXOt18dZbb+H999/H0qVLsWPHDgQGBmLw4MEoLy9vcNslJSW46aabsGDBgjrXe612S0tLsXfvXrzyyivYu3cv/vWvf+Ho0aO46667Gtw2ALRr1w4ffvghDhw4gP/9739ITEzEoEGDcP78+Qa3XWXVqlXYvn07YmNjPVIzAAwZMsTld/yLL77wSNvp6em46aab0KFDB2zevBm///47XnnlFeh0uga1W73WrKwsfPLJJxAEASNGjGhwzVOnTsXatWvx97//HYcPH8bkyZMxceJErF69ut7tSpKE4cOH48SJE/j3v/+Nffv2ISEhAQMHDrzme0Fd3kOmTJmC77//Ht988w22bNmCzMxM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hcjXMewQ+RGlUom5c+figw8+wNmzZxvU1saNG5GZmYmtW7di4cKFmDVrFv70pz8hJCQEO3bswFNPPYUnn3yyxuNMnz4dzz//PPbt24fevXvjzjvvxMWLFwEABQUF6N+/P7p164bdu3dj7dq1yMnJwf333+/SxooVK6DRaPDLL79g6dKltdb33nvv4Z133sFf/vIX/P777xg8eDDuuusupKWlAQCysrLQqVMnPP/888jKysK0adOu+Zzfe+899O7dG48//jiysrKQlZWF+Pj4BtWtUCjw/vvv448//sCKFSuwceNGvPDCCwCAG2+8EYsWLYLRaHQ+Xm11iqKIYcOGIS8vD1u2bMG6detw4sQJPPDAAy7Hpaen47vvvsOaNWuwZs0abNmyxXlaMysrCyNHjsSjjz6Kw4cPY/PmzbjnnnvAtaCpWWiStdWJqNGNHTtWGjZsmCRJktSrVy/p0UcflSRJklatWiVVf6nPmjVL6tKli8vXvvvuu1JCQoJLWwkJCZLdbndua9++vXTzzTc779tsNikwMFD64osvJEmSpJMnT0oApPnz5zuPsVqtUlxcnLRgwQJJkiRpzpw50qBBg1we+8yZMxIA6ejRo5IkSdItt9widevW7ZrPNzY2VnrzzTddtl1//fXSM88847zfpUsXadasWVdtp/r3rerxn3vuOZdjPFn3N998I4WFhTnvL1++XAoODq5xXEJCgvTuu+9KkiRJP/30k6RUKqWMjAzn/j/++EMCIO3cuVOSJMfPNSAgQDKbzc5jpk+fLvXs2VOSJEnas2ePBEA6derUNWsk8jfs2SHyQwsWLMCKFStw+PDherfRqVMnKBSX/ouIiopCSkqK875SqURYWBhyc3Ndvq53797Oz1UqFVJTU511/Pbbb9i0aROCgoKctw4dOgBw9EpU6dGjx1VrM5vNyMzMRJ8+fVy29+nTp0HP+UoaUvf69esxYMAAtGjRAgaDAWPGjMHFixdRWlpa58c/fPgw4uPjER8f79yWnJwMk8nk8nwTExNhMBic92NiYpw/ny5dumDAgAFISUnBfffdh48++sivxnYRXQ3DDpEf6tu3LwYPHoyZM2fW2KdQKGqcurBarTWOU6vVLvcFQah1myiKda6ruLgYd955J/bv3+9yS0tLQ9++fZ3HBQYG1rnNplDfuk+dOoU//elP6Ny5M/75z39iz549WLx4MYCGD2CuzdV+PkqlEuvWrcMPP/yA5ORkfPDBB2jfvj1Onjzp8TqIvA3DDpGfmj9/Pr7//nts27bNZXtERASys7NdAo8n58bZvn2783ObzYY9e/agY8eOAIDu3bvjjz/+QGJiItq0aeNycyfgGI1GxMbG4pdffnHZ/ssvvyA5OblB9Ws0Gtjtdpdt9a17z549EEUR77zzDnr16oV27dohMzPzmo93uY4dO+LMmTM4c+aMc9uhQ4dQUFDg1vMVBAF9+vTBa6+9hn379kGj0WDVqlV1/noiX8WwQ+SnUlJSMGrUKLz//vsu2/v164fz58/jrbfeQnp6OhYvXowffvjBY4+7ePFirFq1CkeOHMGECROQn5+PRx99FAAwYcIE5OXlYeTIkdi1axfS09Px448/4pFHHrnmG/7lpk+fjgULFuCrr77C0aNH8ec//xn79+/Hc88916D6ExMTsWPHDpw6dQoXLlyAKIr1rrtNmzawWq344IMPcOLECXz++ec1BlwnJiaiuLgYGzZswIULF2o9vTVw4EDnz3Pv3r3YuXMnHn74Ydxyyy1ITU2t0/PasWMH5s6di927dyMjIwP/+te/cP78eWcQJfJnDDtEfuz111+vcZqpY8eO+Otf/4rFixejS5cu2LlzZ52uVKqr+fPnY/78+ejSpQv+97//YfXq1QgPDwcAZ2+M3W7HoEGDkJKSgsmTJ8NkMrmMD6qLSZMmYerUqXj++eeRkpKCtWvXYvXq1Wjbtm2D6p82bRqUSiWSk5MRERGBjIyMetfdpUsXLFy4EAsWLMB1112Hf/zjHzWmBbjxxhvx1FNP4YEHHkBERATeeuutGu0IgoB///vfCAkJQd++fTFw4EC0atUKX331VZ2fl9FoxNatW3H77bejXbt2ePnll/HOO+9g6NChdf/mEPkoQbr85D0RERGRH2HPDhEREfk1hh0iIiLyaww7RERE5NcYdoiIiMivMewQERGRX2PYISIiIr/GsENERER+jWGHiIiI/BrDDhEREfk1hh0iIiLyaww7RERE5Nf+H7ji+sTl4Ro/AAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -370,9 +366,9 @@ ], "metadata": { "kernelspec": { - "display_name": "gauche_pip", + "display_name": "Python 3 (ipykernel)", "language": "python", - "name": "gauche_pip" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -384,7 +380,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.10.0" } }, "nbformat": 4, diff --git a/notebooks/external_graph_kernels.ipynb b/notebooks/external_graph_kernels.ipynb index 3f8a366..0d384f7 100644 --- a/notebooks/external_graph_kernels.ipynb +++ b/notebooks/external_graph_kernels.ipynb @@ -17,10 +17,24 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 5, "id": "26eb6e5a", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'pandas'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[5], line 13\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msklearn\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmetrics\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m r2_score, mean_squared_error, mean_absolute_error\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mtorch\u001b[39;00m\n\u001b[0;32m---> 13\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mgauche\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdataloader\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m DataLoaderMP\n\u001b[1;32m 14\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mgauche\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdataloader\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdata_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m transform_data\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mgpytorch_metrics\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m negative_log_predictive_density, mean_standardized_log_loss, quantile_coverage_error\n", + "File \u001b[0;32m~/gauche/notebooks/../gauche/dataloader/__init__.py:2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdataloader\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m DataLoader\n\u001b[0;32m----> 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmolprop_loader\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m MolPropLoader\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mreaction_loader\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ReactionLoader\n\u001b[1;32m 5\u001b[0m __all__ \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDataLoader\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMolPropLoader\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mReactionLoader\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n", + "File \u001b[0;32m~/gauche/notebooks/../gauche/dataloader/molprop_loader.py:10\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtyping\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Callable, Optional, Union\n\u001b[1;32m 9\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[0;32m---> 10\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mpd\u001b[39;00m\n\u001b[1;32m 11\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mrdkit\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mChem\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m MolFromSmiles, MolToSmiles\n\u001b[1;32m 13\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mgauche\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdataloader\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m DataLoader\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'pandas'" + ] + } + ], "source": [ "%%capture\n", "# Imports\n", @@ -380,7 +394,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.15" + "version": "3.11.5" } }, "nbformat": 4,