{ "cells": [ { "metadata": {}, "cell_type": "markdown", "source": "# Jupyter Notebooks in Chemistry - Package Installation\n\nThis notebook installs several Python packages that provide information lookup services as well as visualisation tools that may be particularly relevant to chemistry teaching.\n\nThe sorts of functionality provided fall into two main types:\n\n- tools for looking up material properties of compounds and metadata associated with them\n- tools for visualising molecular structure.\n\n(Packages also exist for exploring things like orbital structure.)\n\n\nTypically, we would preinstall these required drawing component packages into a custom environment to be used by module team members, students, or researchers so that they could be used directly and without any further installation requirements." }, { "metadata": {}, "cell_type": "markdown", "source": "## Open Babel: The Open Source Chemistry Toolbox\n\n[*Open Babel*](http://openbabel.org/wiki/Main_Page) provides a wide range of tools for working with chemical data. In the python context, its functionality can be accessed using the `pybel` package ([src](https://github.com/openbabel/openbabel/blob/master/scripts/python/pybel.py)). *Note - there is a separate pip package called `pybel` that does something completely different!*" }, { "metadata": {}, "cell_type": "markdown", "source": "*The following cell may take some time to run whilst the required software is installed. Remove or comment out the `%%capture` line before running the cell to track installation progress. Installation continues whilst the * is displayed, and is replaced by a number when execution is complete.*" }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "%%capture\ntry:\n import pybel\nexcept:\n !conda install -y -c openbabel openbabel\n\n#SVG to png, pdf etc\n!pip install cairosvg", "execution_count": 1, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "import pybel", "execution_count": 2, "outputs": [] }, { "metadata": {}, "cell_type": "markdown", "source": "A *lingua franca* across many packages for describing molecules and reactions is [SMILES](http://www.daylight.com/dayhtml/doc/theory/theory.smiles.html), the *Simplified Molecular Input Line Entry System*.\n\nThe `pybel` package is capable of reading a SMILES string and then rendering a 2D structural model of the molecule specified.\n\n*(SMILES can also represent reactions but `pybel` seems not to render these?)*" }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "mol = pybel.readstring( \"smi\",\"C1=NC2=C(N1)C(=NC=N2)N\" )\n\n#Add hydrogens\nmol.addh()\n\n#By default, we preview a small SVG output graphic\nmol", "execution_count": 3, "outputs": [ { "data": { "image/svg+xml": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nN\nN\nN\nN\nN\nH\nH\nH\nH\nH\n\n", "text/plain": "" }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "#This is a hack - exploring for now... creating a PNG (can be saved); also supports pdf export\nimport cairosvg\nfrom IPython.display import Image\n\ntry:\n cairosvg.svg2pdf(mol._repr_svg_(), write_to='./images/test/pybelmol.pdf')\nexcept:\n pass\n\n#Convert the SVG to PNG\nImage(cairosvg.svg2png(mol._repr_svg_()))", "execution_count": 4, "outputs": [ { "data": { "image/png": "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\n", "text/plain": "" }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "from IPython.display import IFrame\nIFrame(\"./images/test/pybelmol.pdf\", width=100, height=200)", "execution_count": 5, "outputs": [ { "data": { "text/html": "\n \n ", "text/plain": "" }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": {}, "cell_type": "markdown", "source": "We can write out the original *SMILES* description string by specifying the `.write()` output type:" }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "mol.write(\"smi\")\n#Seems to add whitespace at end of line?\n#Could strip with .strip()", "execution_count": 6, "outputs": [ { "data": { "text/plain": "'c1nc2c([nH]1)c(ncn2)N\\t\\n'" }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": {}, "cell_type": "markdown", "source": "We can also write the molecule out as a flat, 2D rendering of the structure in SVG format, which could also be saved to a file (this actually previews better than the default preview?):" }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "from IPython.display import SVG\nSVG(mol.write(\"svg\"))\n#Write to a file: mol.write(\"svg\", \"outfile.svg\")", "execution_count": 7, "outputs": [ { "data": { "image/svg+xml": "\n - Open Babel Depiction\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nN\nN\nN\nN\nN\nH\nH\nH\nH\nH\n\n\n\n", "text/plain": "" }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "#Can we disable the colour?\npybel.readstring( \"smi\",\"O\" )", "execution_count": 8, "outputs": [ { "data": { "image/svg+xml": "\nOH\n2\n\n", "text/plain": "" }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": {}, "cell_type": "markdown", "source": "We can create a simple SVG viewer to render a 2D molecule from a *SMILES* as follows:" }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "from IPython.display import display\n\ndef smilesSVG(smi, addH=False, bw=False):\n ''' Render molecule structure from SMILES string as SVG. '''\n \n mol = pybel.readstring( \"smi\",smi )\n if addH: mol.addh()\n conv = pybel.ob.OBConversion()\n conv.SetOutFormat(\"svg\")\n #Optonally, set black and white output\n #The openbabel SVG export formatter has an -xu option which we can pass\n #Via: https://github.com/openbabel/openbabel/issues/1879#issuecomment-411830813\n if bw:\n conv.SetOptions('u', conv.OUTOPTIONS)\n display(SVG(conv.WriteString(mol.OBMol)))\n #display(SVG(mol.write(\"svg\")))\n \n#More command line options: https://openbabel.org/docs/dev/FileFormats/SVG_2D_depiction.html\n#Would perhaps make sense to be able to pass these too?", "execution_count": 15, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "smilesSVG( \"C1=NC2=C(N1)C(=NC=N2)N\" )", "execution_count": 16, "outputs": [ { "data": { "image/svg+xml": "\n - Open Babel Depiction\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nN\nN\nH\nN\nN\nNH\n2\n\n\n\n", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "smilesSVG( \"C1=NC2=C(N1)C(=NC=N2)N\", True )", "execution_count": 17, "outputs": [ { "data": { "image/svg+xml": "\n - Open Babel Depiction\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nN\nN\nN\nN\nN\nH\nH\nH\nH\nH\n\n\n\n", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "smilesSVG( \"C1=NC2=C(N1)C(=NC=N2)N\", addH=False, bw=True );", "execution_count": 25, "outputs": [ { "data": { "image/svg+xml": "\n - Open Babel Depiction\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nN\nN\nH\nN\nN\nNH\n2\n\n\n\n", "text/plain": "" }, "metadata": {}, "output_type": "display_data" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "##Generate 3D co-ordinates\n#!mkdir -p demos/files\n#mol.make3D()\n##Write sdf file\n#mol", "execution_count": 10, "outputs": [] }, { "metadata": {}, "cell_type": "markdown", "source": "## `py3Dmol`\n\nThe `py3Dmol` package provides a Python wrapper around the powerful [`3Dmol.js`](http://3dmol.csb.pitt.edu/doc/index.html) Javascript package and provides a convenient way of rendering three dimensional models of a wide variety of chemical structures, although it looks to be no longer maintained in favour of `nbmolviz`, which also looks to have installed and which raises errors doesn't work when trying to install it on Azure Notebooks. *There also looks to be a [Jupyterlab 3dmol extension](https://github.com/3dmol/jupyterlab_3Dmol), but I haven't tested it yet...*\n\nCompunds can be identified by various identifier schemes (`pdb` and `cid`/PubChem) and geometry schemes, including `sdf`, `mol2`, `xyz`, and `cube`." }, { "metadata": { "trusted": true }, "cell_type": "code", "source": "%%capture\ntry: \n import py3Dmol\nexcept:\n !pip install py3Dmol", "execution_count": 1, "outputs": [] }, { "metadata": { "trusted": true }, "cell_type": "code", "source": "import py3Dmol", "execution_count": 2, "outputs": [] }, { "metadata": {}, "cell_type": "markdown", "source": "Let's have a look at the structure of something simple, such as [*ethanol*, (PubChem cid 702](https://pubchem.ncbi.nlm.nih.gov/compound/ethanol)):" }, { "metadata": { "trusted": true }, "cell_type": "code", "source": "p=py3Dmol.view(query='cid:702')\np.setStyle({'stick': {'radius': .1}, 'sphere': {'scale': 0.25}})\np.show();", "execution_count": 3, "outputs": [ { "output_type": "display_data", "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n" }, "metadata": {} } ] }, { "metadata": { "trusted": true }, "cell_type": "code", "source": "p=py3Dmol.view(query='cid:702')\np.setStyle({'stick': {'radius': .4}, 'sphere': {'scale': 0.25}})\np.show();", "execution_count": 4, "outputs": [ { "output_type": "display_data", "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n" }, "metadata": {} } ] }, { "metadata": { "trusted": true }, "cell_type": "code", "source": "#Raw view\npy3Dmol.view(query='pdb:1ycr')", "execution_count": 5, "outputs": [ { "output_type": "display_data", "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n" }, "metadata": {} }, { "output_type": "execute_result", "execution_count": 5, "data": { "text/plain": "" }, "metadata": {} } ] }, { "metadata": { "trusted": true }, "cell_type": "code", "source": "#Prettified \"cartoon\" view\np=py3Dmol.view(query='pdb:1ycr')\np.setStyle({'stick': {'radius': .1}, 'sphere': {'scale': 0.25}})\np.show();", "execution_count": 6, "outputs": [ { "output_type": "display_data", "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n" }, "metadata": {} } ] }, { "metadata": { "trusted": true }, "cell_type": "code", "source": "p.setStyle({'cartoon':{'color':'spectrum'}})\np.show();", "execution_count": 7, "outputs": [ { "output_type": "display_data", "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": "
\n

You appear to be running in JupyterLab (or JavaScript failed to load for some other reason). You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n" }, "metadata": {} } ] }, { "metadata": {}, "cell_type": "markdown", "source": "## `pubchempy`\n\nProvides python interface to [PubChem](https://pubchem.ncbi.nlm.nih.gov/), for example to support the lookup of the structure of chemical compounds by chemical name and then report on various properties and descriptive attributes, such as the SMILES representation. (Molecules can also be looked up via their SMILES string.)\n\n`pubchempy` can be used in conjunction with `py3Dmol` to look up a molecule by name (using `pubchempy`) and then display its structure as an interactive 3D model (using `py3Dmol`)." }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "%%capture\ntry:\n import pubchempy as pcp\nexcept:\n !pip install pubchempy", "execution_count": 17, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "import pubchempy as pcp", "execution_count": 18, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "ethanol = pcp.get_compounds('ethanol', 'name')[0]\nethanol.canonical_smiles, ethanol.isomeric_smiles", "execution_count": 19, "outputs": [ { "data": { "text/plain": "('CCO', 'CCO')" }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "#Look up by SMILES string\ncompound = pcp.get_compounds('CCO', 'smiles')[0]\ncompound.iupac_name", "execution_count": 20, "outputs": [ { "data": { "text/plain": "'ethanol'" }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "compound.elements, compound.atoms", "execution_count": 21, "outputs": [ { "data": { "text/plain": "(['O', 'C', 'C', 'H', 'H', 'H', 'H', 'H', 'H'],\n [Atom(1, O),\n Atom(2, C),\n Atom(3, C),\n Atom(4, H),\n Atom(5, H),\n Atom(6, H),\n Atom(7, H),\n Atom(8, H),\n Atom(9, H)])" }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "##For a full list of attributes, see:\n#compound.record", "execution_count": 22, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "compound.molecular_formula", "execution_count": 23, "outputs": [ { "data": { "text/plain": "'C2H6O'" }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "compound.molecular_weight", "execution_count": 24, "outputs": [ { "data": { "text/plain": "46.069" }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "compound.synonyms[:5]", "execution_count": 25, "outputs": [ { "data": { "text/plain": "['ethanol', 'ethyl alcohol', 'alcohol', 'Methylcarbinol', 'grain alcohol']" }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "# pcp.get_compounds seems to return a list, so get the first (only, in many cases?) item\npentanol = pcp.get_compounds('pentanol', 'name')[0]", "execution_count": 26, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "p = pybel.readstring( \"smi\", pentanol.canonical_smiles )\np", "execution_count": 27, "outputs": [ { "data": { "image/svg+xml": "\n\n\n\n\n\nCH\n3\nHO\n\n", "text/plain": "" }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "#Add hydrogens\np.addh()\np", "execution_count": 28, "outputs": [ { "data": { "image/svg+xml": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nH\nH\nH\nH\nH\nH\nH\nH\nH\nH\nH\nH\nO\n\n", "text/plain": "" }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": {}, "cell_type": "markdown", "source": "We can render a compund retrieved from \n\nUse the `cid:` selector with `py3Dmol` to specify a PubChem id." }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "#http://3dmol.csb.pitt.edu/doc/types.html#ColorschemeSpec\np=py3Dmol.view(query='cid:{}'.format(pentanol.cid), width=500,height=400)\np.setStyle({'stick': {'radius': .1}, 'sphere': {'scale': 0.25}})\np.show();", "execution_count": 29, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab. You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": "
\n

You appear to be running in JupyterLab. You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n" }, "metadata": {}, "output_type": "display_data" } ] }, { "metadata": {}, "cell_type": "markdown", "source": "## `chembl_webresource_client`\n\nProvides a Python interface to [ChEMBL](https://www.ebi.ac.uk/chembl/) to support the lookup of chemical compounds by common name." }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "%%capture\ntry:\n import chembl_webresource_client\nexcept:\n !pip install --upgrade --user chembl_webresource_client", "execution_count": 30, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "from chembl_webresource_client.new_client import new_client\nmolecule = new_client.molecule\nres = molecule.search('aspirin')\n\nfor r in res:\n pref_name = r['pref_name']\n if pref_name is not None:\n print(pref_name)", "execution_count": 31, "outputs": [ { "name": "stdout", "output_type": "stream", "text": "ASPIRIN\nASPIRIN EUGENOL ESTER\nLYSINE ACETYLSALICYLATE\n" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "aspirin = [r for r in res if r['pref_name']=='ASPIRIN'][0]\naspirin['molecule_synonyms'][:5]", "execution_count": 32, "outputs": [ { "data": { "text/plain": "[{'molecule_synonym': '8-Hour Bayer',\n 'syn_type': 'TRADE_NAME',\n 'synonyms': '8-HOUR BAYER'},\n {'molecule_synonym': 'Acetylsalic Acid',\n 'syn_type': 'TRADE_NAME',\n 'synonyms': 'ACETYLSALIC ACID'},\n {'molecule_synonym': 'Acetylsalicylic Acid',\n 'syn_type': 'ATC',\n 'synonyms': 'ACETYLSALICYLIC ACID'},\n {'molecule_synonym': 'Acetylsalicylic Acid',\n 'syn_type': 'OTHER',\n 'synonyms': 'ACETYLSALICYLIC ACID'},\n {'molecule_synonym': 'Alka Rapid',\n 'syn_type': 'TRADE_NAME',\n 'synonyms': 'ALKA RAPID'}]" }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": {}, "cell_type": "markdown", "source": "## `pypdb`\n\n`pydb` is a Python API for the [RCSB Protein Data Bank (PDB)](https://www.rcsb.org/pdb/home/home.do)." }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "%%capture\ntry:\n import pypdb\nexcept:\n !pip install pypdb", "execution_count": 3, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "#https://github.com/williamgilpin/pypdb/blob/master/demos/demos.ipynb\nimport pypdb\n\nsearch_dict = pypdb.make_query('nitroglycerin')\nfound_pdbs = pypdb.do_search(search_dict)\nprint(found_pdbs)", "execution_count": 18, "outputs": [ { "name": "stdout", "output_type": "stream", "text": "['4FQF', '4FR8']\n" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "#pypdb.get_info('4FQF')['molDescription']", "execution_count": 19, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "#Not sure where to find the chemicalID?\n#Or how to look up by chemical name?\nchem_desc = pypdb.describe_chemical('NAG')\nchem_desc", "execution_count": 8, "outputs": [ { "data": { "text/plain": "{'describeHet': {'ligandInfo': {'ligand': {'@chemicalID': 'NAG',\n '@molecularWeight': '221.208',\n '@type': 'D-saccharide',\n 'InChI': 'InChI=1S/C8H15NO6/c1-3(11)9-5-7(13)6(12)4(2-10)15-8(5)14/h4-8,10,12-14H,2H2,1H3,(H,9,11)/t4-,5-,6-,7-,8-/m1/s1',\n 'InChIKey': 'OVRNDRQMDRJTHS-FMDGEEDCSA-N',\n 'chemicalName': 'N-ACETYL-D-GLUCOSAMINE',\n 'formula': 'C8 H15 N O6',\n 'smiles': 'CC(=O)N[C@@H]1[C@H]([C@@H]([C@H](O[C@H]1O)CO)O)O'}}}}" }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": {}, "cell_type": "markdown", "source": "## Material Properties\n\nThe [`pymatgen`](http://pymatgen.org/) package provides a range of utilities that support materials analysis." }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "%%capture\n#Building python wheels can take a chunk of time - opt out by disabling the cache\n# (This might still take an age to install as it is...)\ntry:\n import pymatgen\nexcept:\n !pip install --no-cache-dir pymatgen", "execution_count": 43, "outputs": [] }, { "metadata": {}, "cell_type": "markdown", "source": "For example, we can specify an element and then lookup a range of material properties." }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "import pymatgen as mg", "execution_count": 42, "outputs": [ { "ename": "ImportError", "evalue": "No module named 'pymatgen'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mpymatgen\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mmg\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mImportError\u001b[0m: No module named 'pymatgen'" ] } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "si = mg.Element('Si')\n\nsi.atomic_mass, si.melting_point, si.boiling_point", "execution_count": 35, "outputs": [ { "data": { "text/plain": "(28.0855, 1687.0, 3173.0)" }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "si.is_alkali, si.is_halogen, si.is_lanthanoid, si.is_metalloid, si.is_noble_gas, si.is_quadrupolar, \\\n si.is_rare_earth_metal, si.is_transition_metal\n", "execution_count": 59, "outputs": [ { "data": { "text/plain": "(False, False, False, True, False, False, False, False)" }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "si.print_periodic_table()", "execution_count": 50, "outputs": [ { "name": "stdout", "output_type": "stream", "text": "H He \nLi Be B C N O F Ne \nNa Mg Al Si P S Cl Ar \nK Ca Sc Ti V Cr Mn Fe Co Ni Cu Zn Ga Ge As Se Br Kr \nRb Sr Y Zr Nb Mo Tc Ru Rh Pd Ag Cd In Sn Sb Te I Xe \nCs Ba Hf Ta W Re Os Ir Pt Au Hg Tl Pb Bi Po At Rn \nFr Ra \n La Ce Pr Nd Pm Sm Eu Gd Tb Dy Ho Er Tm Yb Lu \n Ac Th Pa U Np Pu Am Cm Bk Cf Es Fm Md No Lr \n" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "si.value, si.row, si.number, si.group", "execution_count": 54, "outputs": [ { "data": { "text/plain": "('Si', 3, 14, 14)" }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "si.full_electronic_structure", "execution_count": 57, "outputs": [ { "data": { "text/plain": "[(1, 's', 2), (2, 's', 2), (2, 'p', 6), (3, 's', 2), (3, 'p', 2)]" }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": {}, "cell_type": "markdown", "source": "We can also look up properties of compounds:" }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "comp = mg.Composition('Fe2O3')\ncomp.is_element, comp.weight, comp.num_atoms, comp.elements", "execution_count": 80, "outputs": [ { "data": { "text/plain": "(False, 159.6882, 5.0, [Element O, Element Fe])" }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "comp.formula, comp.alphabetical_formula, comp.reduced_formula, comp.hill_formula, \\\ncomp.element_composition, comp.reduced_composition", "execution_count": 79, "outputs": [ { "data": { "text/plain": "('Fe2 O3', 'Fe2 O3', 'Fe2O3', 'Fe2 O3', Comp: Fe2 O3, Comp: Fe2 O3)" }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "comp.fractional_composition, comp.get_atomic_fraction('Fe'), comp.get_atomic_fraction('O')", "execution_count": 78, "outputs": [ { "data": { "text/plain": "(Comp: Fe0.4 O0.6, 0.4, 0.6)" }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "comp.total_electrons, comp.weight", "execution_count": 68, "outputs": [ { "data": { "text/plain": "(76.0, 159.6882)" }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": {}, "cell_type": "markdown", "source": "Spatial / geometric information is also available. Check out the documentation for more details." }, { "metadata": {}, "cell_type": "markdown", "source": "## `chempy`\n\n`chempy` provides a range of utilities that can be used to support the production of examples associated physical, inorganic and analytical chemistry." }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "%%capture\ntry:\n import chempy\nexcept:\n !conda install -y -c bjodah chempy\n", "execution_count": null, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "from chempy import Substance\nferricyanide = Substance.from_formula('Fe(CN)6-3')\nferricyanide.composition == {0: -3, 26: 1, 6: 6, 7: 6} # 0 for charge\nferricyanide.unicode_name", "execution_count": null, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "ferricyanide.latex_name", "execution_count": null, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "ferricyanide.html_name", "execution_count": null, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "ferricyanide.mass", "execution_count": null, "outputs": [] }, { "metadata": {}, "cell_type": "markdown", "source": "## `RDKit`" }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "%%capture\ntry:\n import rdkit\nexcept:\n !conda install -y -c rdkit rdkit", "execution_count": 22, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "%matplotlib inline", "execution_count": 44, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "from rdkit import Chem\n#Following is needed to render molecule structure views in Jupyter notebook\nfrom rdkit.Chem.Draw import IPythonConsole ", "execution_count": 45, "outputs": [] }, { "metadata": { "trusted": true }, "cell_type": "code", "source": "from rdkit.Chem import Draw\nmol_str = 'COc1ccc2c(c1)[nH]c(n2)[S@@](=O)Cc1ncc(c(c1C)OC)C'\n\nm = Chem.MolFromSmiles( mol_str )\n\ntry:\n #We can write out the structure to different flavours of image file\n Draw.MolToFile(m,'images/test/cdk2_mol1.o.png')\n Draw.MolToFile(m,'images/test/cdk2_mol1.o.svg')\nexcept:\n pass", "execution_count": null, "outputs": [] }, { "metadata": {}, "cell_type": "markdown", "source": "png:\n![](images/test/cdk2_mol1.o.png)\n\nsvg:\n![](images/test/cdk2_mol1.o.svg)" }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "from rdkit.Chem import AllChem\n\ndef smilesH(m):\n return AllChem.AddHs(Chem.MolFromSmiles(m))\n\nbromomethane = smilesH('CBr')\nbromoethane = smilesH('CCBr')\n_2_bromopropane = smilesH('CC(Br)C')\n_2_bromo_2_methylpropane = smilesH('CC(Br)(C)C')\n\nmy_molecules = [bromomethane, \n bromoethane,\n _2_bromopropane,\n _2_bromo_2_methylpropane,\n ]\n\nDraw.MolsToGridImage(my_molecules, useSVG=False)", "execution_count": 35, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAVJklEQVR4nO3df2xddf348fe567qtbOIcpV0pdEOHOhPmjwjfEFSCrYhmiywhWWIixl+RpBnIElFSjQhxGcvHyVIRo+gfJh81UWlQjHVf8LtEsNVEPyFOshm7dSWsuiYwZVvX9vZ+/rh+ln7ufpV9yz2nfT0eWcy5Zx3nxblv75Nzdm+bVSqVBABRlfIeAADyJIQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQX0NPT09DQULOzu7u7tbU1l3nIXUGWREHGIBXpuSjIJAUZY/aEEIDQhBCA0IQQgNBqb+NyVmNjYzMfjo+P5zUJBVGQJVGQMUhFei4KMklBxpgNIbywcrnc3Nxcs7OlpSWXYSiCgiyJgoxBKtJzUZBJCjLGLAnhhZVKpf7+/pl7ent7BwYG8pqH3BVkSRRkDFKRnouCTFKQMWZJCC8sy7LOzs6Ze/r6+nKahUIoyJIoyBikIj0XBZmkIGPMkjfLABCaEAIQmhACEJoQztbg4ODg4GDeU1Ag+/fvHxwcPHbsWL5jHDt2bHBwcP/+/fmOQUppdHR0cHDw8OHDeQ9SlNerw4cPDw4Ojo6O5j3IhVSYHaeLGl1dXSml/v7+fMeovjevq6sr3zGoVCo7d+5MKW3bti3vQYryerVt27aU0s6dO/Me5AJcEQIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEJoQAhCaEAIQmhACEFpBQ9jT09PQ0FCzs7u7u7W1NZd58vL0D3bcv7Gt+uvBzWu+eed7n338W5XKdN5z5cCSKJoiLE6rgvOY/fKo/SKKJstKW770/ZTS5KmTf/vj3j3feyCldMNtd+Y9F1icLBBCWHhZds27u6qbb7tx09GRA88/+8szX2sqlelKuVxqWFz3+QjM4mRBEMJ5ZtmKlcdfHqtu933j7pf/PnLtTZuf+dkjL40e/sSOvva3vCvf8YjM4mSeKnQIx8bGZj4cHx+vblx++eWvvPJKHhOlpqamV/tHNnde/9bFwxdxrM477qtuTIwfTylNnRo/+NwzQ3/ae/PHvnD6a0aH/jxdntq8rbdpxcqly19/EUeZX861JLZs2fLEE0/UeZhTp06llDZt2lQq5fl37dPT0ymlp5566iIW55c/+cHyi/91EQf99H88Wd0owuI866r47ne/u3Xr1tfuoGc1NTWVUnr44YcfeeSROh/6rC5iScytycnJlNJ999335S9/uc6H3r17d3XjXC8aMxU3hOVyubm5uWZnS0tLSunEiRMnT57MY6h0EcedmDg1VTnLqb+gcnkypVSZLm+/fd3pne/o2nLDRz57+uHkxPjt9357xaoQbw04z5I4depULkuiVCpVc5ivUqk0PT19EWdgujw1NXExi7NSqaRiLM5zrYrJycm8lsTU1FS1iLnL63VyplKpNDk5WS1iPVWPeJ4XjZmKG8JSqdTf3z9zT29v78DAQErp6NGj1f8f1tMll1ySUjp+/Pir/YOlUrYou5gjLmpY/P/+8z+y0qKPb/9pSqk8NTE6tG/vj3Y1Lr3kg595oPo1q1avDVLBdN4l8eMf/7j+Lz0bN258+umnn3jiife///11PvRMTz311KZNm26++eaf//znr/bPNpSy7KIWZ0Pj0n2//XkRFue5VsWnP/3pO+6447U+eo2HH374vvvu27p16/bt2+t86BoX/Xo1t774xS/u3r37a1/72l133VXnQzc2Nn7lK185z4vGTMUNYZZlnZ2dM/f09fVVN5YtW5bDQCmlnG41XLX+uurG2mtvzLKs/7H7r9/0qZWtHSmlpktX1X+evJxnSTQ2NjY2NtZ5nkWLFqWUlixZku8NqCVLllSHibk4z7UqGhoaznzr/Gtt8eLF1f/N/Z5kVe5j5H5CzvOiMVNBP0fIuVzW/qZUqYyN/DXvQaCWxck8JYTzzOjQvhTsQpD5wuJknirurVH+rVI58Ic9KaXy5OTowX2/e/zRtnUb2tZtyHsssDhZIISw6CqV6R9+9Y6UUmlRw6XNV7zzlo++b8s9WeZSnvxZnCwQFWbH6aJGV1dXSqm/vz/fMapviuvq6sp3DCqVys6dO1NK27Zty3uQorxebdu2LaW0c+fOvAe5AP/tBkBoQghAaEIIQGhCCEBoQghAaEIIQGhCCEBoQghAaEIIQGhCCEBoQghAaL7pNsBC8/VP/J+8R5hPhBBgofnnP4bzHmE+cWsUgNCEEIDQhBCA0IQQgNCEEIDQhBCA0IQQgNCEEIDQhBCA0IQQgNCEEIDQhBCA0IQQgNCEEIDQhBCA0IQQgNCEEIDQskqlkvcM88OTTz6ZUvrwhz+c9yAUxe9///ujR49ef/31l112WY5jjI2NDQ4ONjc3X3fddTmOQUrp4MGDf/nLX66++uq3vvWt+U7y1z/835TSund35jvG888/PzQ0tH79+rVr1+Y7yfkJIQChuTUKQGhCeAE9PT0NDQ01O7u7u1tbW3OZh9wVZEkUZAxSAZ6Lp3+w4/6NbdVfD25e88073/vs49+qVKbrc/Qz5X5CXq3aWQGYd7KstOVL308pTZ46+bc/7t3zvQdSSjfcdmfec80PQggw/2XZNe/uqm6+7cZNR0cOPP/sL88MYaUyXSmXSw2L6z5foQkhwEKzbMXK4y+PVbf7vnH3y38fufamzc/87JGXRg9/Ykdf+1vele94RSOEszI2Njbz4fj4eF6TUBAFWRIFGYNUgOdiYvx4Smnq1PjB554Z+tPemz/2hdO/NTr05+ny1OZtvU0rVi5d/vr6zJP7CZk9Ibywcrnc3Nxcs7OlpSWXYSiCgiyJgoxBKsBzUZkub7993emH7+jacsNHPnv64eTE+O33fnvFqvq9VyX3E/KqCOGFlUql/v7+mXt6e3sHBgbymofcFWRJFGQMUgGei6y06OPbf5pSKk9NjA7t2/ujXY1LL/ngZx6o/u6q1WvrWcFUgBPyqgjhhWVZ1tn5v75BQ19fX06zUAgFWRIFGYNUjOfiqvX//tZCa6+9Mcuy/sfuv37Tp1a2dqSUmi5dVedhinBCZs/nCAEWmsva35QqlbGRv+Y9yPwghAALzejQvpTHheA85dYowPxXqRz4w56UUnlycvTgvt89/mjbug1t6zbkPdb8IIQA816lMv3Dr96RUiotari0+Yp33vLR9225J8vc85sVP30CgND89wIAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoRU0hD09PQ0NDTU7u7u7W1tb6zPA0z/Ycf/GtuqvBzev+ead73328W9VKtP1OfqZcj8hAAtV7Wsrp2VZacuXvp9Smjx18m9/3Lvnew+klG647c685wJgLgnhuWXZNe/uqm6+7cZNR0cOPP/sL88MYaUyXSmXSw2L6z4fAHNACGdr2YqVx18eq273fePul/8+cu1Nm5/52SMvjR7+xI6+9re8K9/xALg4hQ7h2NjYzIfj4+N1HmBi/HhKaerU+MHnnhn6096bP/aF0781OvTn6fLU5m29TStWLl3++vrMk/sJAVh4ihvCcrnc3Nxcs7OlpaVuA1Smy9tvX3f64Tu6ttzwkc+efjg5MX77vd9esap+71XJ/YQALEjFDWGpVOrv75+5p7e3d2BgoG4DZKVFH9/+05RSeWpidGjf3h/talx6yQc/80D1d1etXlvPCqYCnBCABam4IcyyrLOzc+aevr6+Os9w1frrqhtrr70xy7L+x+6/ftOnVrZ2pJSaLl1V52GKcEIAFp6Cfo6wgC5rf1OqVMZG/pr3IADMJSGcrdGhfSmPC0EAXlPFvTWav0rlwB/2pJTKk5OjB/f97vFH29ZtaFu3Ie+xAJhLQnhOlcr0D796R0qptKjh0uYr3nnLR9+35Z4scw0NsKBklUol7xnOZ9euXZ///OfvueeeHTt25DvJAx+5KqX0pb7D+Y5x7733fv3rX3/ooYc+97nP5TsJwMJQ9CvCcrk8NTVVLpfzHiRNl6fyHiGlIp0QgIXBjT4AQhNCAEITQgBCE0IAQhNCAEITQgBCE0IAQhNCAEITQgBCE0IAQhNCAEITQgBCE0IAQhNCAEITQgBCE0IAQhNCAEITwtl6YqjpiaGmvKcAYI415D3AvPHHv/wt7xEAmHuuCAEITQgBCE0IAQhNCAEITQgBCE0IAQhNCAEITQgBCE0IAQhNCAEITQgBCE0IAQitNoQ9PT0NDbXfibu7u7u1tbVeI1Fclgew8LgiBCA0IQQgNCEEILSz/2DesbGxmQ/Hx8dTSr/4xS92795dj6FmGB4eTin95Cc/ee655+p86LP6wAc+kO8ABw4cSCl95zvf+fWvf13nQ2/durW6cdblATBPnSWE5XK5ubm5ZmdLS8vIyMiePXvqMtX/snz58uHh4WoRc5fLGaixfPnyAwcOVItYT7fddls69/Ko8zAAc+UsISyVSv39/TP39Pb2DgwMbNy48Y1vfGO9Bvu3Xbt2/epXv7rrrrs+9KEP1fnQNW655ZaUUs2Zqb8nn3xy9+7dt9566913313nQ69fv/7RRx891/Ko8zAAc+UsIcyyrLOzc+aevr6+lFJ7e3t7e3t9xjrtoYceSindeuutud+TrMp9jOnp6d27d09OTuY1ybmWB8A8VfQ3y1TviK5ZsybvQYqieioKcqMYYAEodAinp6dHRkayLLvyyivznqUoOjo6siwbHh6enp7OexaAhaDQITxy5MipU6cuv/zypqamvGcpimXLljU3N09MTIyOjuY9C8BCUOgQVm8AdnR05D1IsVRPiLujAHOiNoQPPvjg1NRUzc7e3t5crj8OHTqU/AXhGaonpHpy6qxQywNgTrginH9cEQLMISGcf4QQYA7NgxC6NVrDJygA5lChQ1j9azBXhDWqJySXvyMEWHiySqWS9wxnV6lUli9ffuLEiX/+858rVqzIe5yUZVl1qrwHSf/6179e97rXLVu27Pjx49WpALhoxb0iPHr06IkTJ1atWlWEChbKihUr3vCGN5w8ebLmp0AAcBGKG0L3Rc/D3VGAuVLcEHqnzHl4vwzAXCluCF0RnocrQoC5UtwQ+hDhefgoIcBcKXoI3Ro9K7dGAebKWX4wb0G8/e1vP3bs2Lp16/IepIiuueaa97znPRs2bMh7EIB5r7ifIyya4nyOEIA5VNxbowBQB8UKYU9PT0ND7d3a7u7u1tbWXOYpIKcIYG4VK4QAUGdCCEBoQghAaEX8+ETN95IeHx/Pa5LCcooA5krhQlgul5ubm2t2trS05DJMMTlFAHOocCEslUr9/f0z9/T29g4MDOQ1TwE5RQBzqHAhzLKss7Nz5p6+vr6cZikopwhgDnmzDAChCSEAoQkhAKEJIQCh+ekTs+WnTwAsSK4IAQhNCAEITQgBCE0IAQhNCAEITQgBCE0IAQhNCAEITQgBCG2hhbCnp6ehofZnS3V3d7e2tv7//GOPHDlSs3FxXqPxALhohft5hPl66aWXhv7Hiy++eOTIkaGhof3797/yyiulUiml1NbW1tjY2N7efvXVV69evbqtre3q/3HVVVedGTkACi7iC/fk5OQLL7wwPDw8PDx86NChQ4cOVbdHRkYmJyfP+keam5uPHj16eqNaypqvWbx48ZVXXtnR0dHR0bFmzZo1a9ZUt9vb2xcvXvya/1sBcFEChfDAgQOf/OQnh4eHX3zxxXK5fOYXZFm2evXq0wGbmbSmpqbqN93+xz/+ceLEiZn5PB3U0dHRswZy0aJFbW1tHR0djz32WD3+PQF4NRZmCMfGxmY+HB8fTyktWbLkt7/9bXXPypUrr56hepPzzW9+8/Llyy/4D29qalq/fv369etr9k9MTLzwwgunb6iedvjw4ZGRkZGRkaVLl55nPABysQBDWC6Xm5uba3a2tLS0t7f/5je/ee3uVTY2NlazWrP/9J3YK6644jzjzfk8AMzGAgxhqVTq7++fuae3t3dgYGDRokU33XRT/edZvHjx2rVr165de/7x6j8YAGlBhjDLss7Ozpl7+vr6cprlLAo+HkA0C+1zhADwqgghAKEJIQChCSEAoWWVSiXvGeaH6gfqnS6ABcYVIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoQkhAKEJIQChCSEAoTXkPcC80dDgXAEsQFmlUsl7BgDIjVujAIQmhBfQ09Nz5k3R7u7u1tbWXOYBYG4JIQChCSEAoQkhAKH5SMCsjI2NzXw4Pj6e1yQAzC0hvLByudzc3Fyzs6WlJZdhAJhbQnhhpVKpv79/5p7e3t6BgYG85gFgDgnhhWVZ1tnZOXNPX19fTrMAMMe8WQaA0IQQgNCEEIDQhBCA0Pz0CQBCc0UIQGhCCEBoQghAaEIIQGhCCEBoQghAaEIIQGhCCEBoQghAaEIIQGhCCEBoQghAaEIIQGhCCEBoQghAaEIIQGhCCEBoQghAaEIIQGhCCEBoQghAaEIIQGhCCEBoQghAaP8NiKdn+zCY2iUAAAAASUVORK5CYII=\n", "text/plain": "" }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "from rdkit.Chem import RemoveHs\n\nRemoveHs(_2_bromo_2_methylpropane)", "execution_count": 67, "outputs": [ { "data": { "image/png": "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\n", "text/plain": "" }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "#Index in to periodic table\nperiodic_table = AllChem.GetPeriodicTable()\nperiodic_table.GetElementSymbol(1)", "execution_count": 54, "outputs": [ { "data": { "text/plain": "'H'" }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "periodic_table.GetAtomicNumber('Si')", "execution_count": 56, "outputs": [ { "data": { "text/plain": "14" }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "periodic_table.GetNOuterElecs('Ar')", "execution_count": 66, "outputs": [ { "data": { "text/plain": "8" }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "scrolled": true, "trusted": false }, "cell_type": "code", "source": "m = Chem.MolFromSmiles(\"C1=NC2=C(N1)C(=NC=N2)N\")\nm", "execution_count": 63, "outputs": [ { "data": { "image/png": "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\n", "text/plain": "" }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": {}, "cell_type": "markdown", "source": "[SMARTS](http://www.daylight.com/dayhtml/doc/theory/theory.smarts.html) is an extension of SMILES, with SMILES strings forming a subset of SMARTS strings (?).\n\nAlthough SMILES strings can represent reactions, these are not handled directly by RDKit, although they are when treated as SMARTS strings." }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "AllChem.ReactionFromSmarts(\"C=CCBr>>C=CCI\")", "execution_count": 77, "outputs": [ { "data": { "image/png": "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\n", "text/plain": "" }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "AllChem.ReactionFromSmarts(\"C=CCBr.[Na+].[I-]>CC(=O)C>C=CCI.[Na+].[Br-]\")", "execution_count": 75, "outputs": [ { "data": { "image/png": "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\n", "text/plain": "" }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": {}, "cell_type": "markdown", "source": "An interesting question, pedagogically, is whether the availability of notations for describing reactions, and tools capable of rendering them, can drive the way educational materials are presented. That is, would authors *come to use* a particular diagrammatic convention *if* the tools for automatically creating such diagrams are readily available?" }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "m = AllChem.AddHs(m)\nm", "execution_count": 64, "outputs": [ { "data": { "image/png": "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\n", "text/plain": "" }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "#Simplified from: http://rdkit.blogspot.com/2016/07/using-ipywidgets-and-py3dmol-to-browse.html\nimport py3Dmol\ndef drawitbase(m,p=None):\n if p is None:\n p = py3Dmol.view(width=400,height=400)\n #p.removeAllModels()\n p.addModel(Chem.MolToMolBlock(m),'sdf')\n p.setStyle({'stick':{}})\n p.setBackgroundColor('0xeeeeee')\n p.zoomTo()\n return p.show()\n\nAllChem.EmbedMultipleConfs(m,useExpTorsionAnglePrefs=True,useBasicKnowledge=True)\ndrawitbase(m)", "execution_count": 67, "outputs": [ { "data": { "application/3dmoljs_load.v0": "
\n

You appear to be running in JupyterLab. You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n", "text/html": "
\n

You appear to be running in JupyterLab. You need to install the 3dmol extension:
\n jupyter labextension install jupyterlab_3dmol

\n
\n" }, "metadata": {}, "output_type": "display_data" } ] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "#http://nbviewer.jupyter.org/github/greglandrum/rdkit_blog/blob/master/notebooks/Trying%20py3Dmol.ipynb", "execution_count": null, "outputs": [] }, { "metadata": { "trusted": false }, "cell_type": "code", "source": "#Highlight a substructure\nm.GetSubstructMatch(Chem.MolFromSmiles('C(N)'))\nm", "execution_count": 70, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAfQElEQVR4nO3de1hU1f4/8PcwAwwIyFVARVRCDPAKmsYpNVGz0K9fkayUzOBHaooes/DSI/Y85yjeOnSOnm+Q9A31lOLJC3TSRINSSf2CeOEm1wgURuQOAgMz6/fHECjMjAIzs+fyeT09PbH3nr0/1Phu7bXXWpvHGAMhhJD+MuK6AEII0W0Uo4QQMiAUo0S9QkNDfX19H99SWVnJ4/FOnz7NVUmEqBbFKCGEDAjFKCGEDAjFKCGEDIiA6wKI/svIyBAI6JtG9BZ9uYnaeXl5HTt2rOvH6urqmTNnclcOISpGMUrUTigUent7d/1YWVnJYTGEqBz1jRIu0XAoogcoRgkhZEAoRonmlJWVpaSkcF0FISpGfaNEvQ4dOgTG8NtvuH170ttvVzc3V27axD79FPn5OHwY1dWgxXGIjqMYJWpWVIT//AfNzWhvf87Gprq5uaCmxtHCAi0tKClBeXnGjRsCPh88HteFEtJPFKNEbaRSJCUhOxvt7bINng5O1Y8k5fWmjx/jNWTIsaVLYWaGgADY2NBwKKJzKEaJekgkOHIE9+93ZSiAEYP3FdbMyKq6BPzUtVEoEHjb2QHA5ctYsaLS3l7zxRIyEPSIiajHqVM9MhSAu201gMIaW/kfEYtx5AgaGzVQHSEqRDFK1CArCwUFPTIUgLtdjcOgR+bGndvvNXTkVtnh8SdMYjGSkjRVJSGqQTf1RNUkEpw9C7G4956pw+49+Ghv14/1bbXlDXek7ImuUjx8qIEaCVEhHr2LiajYnTv4/nu5MdpbS3t7S0eHrZnZE1udnPD++2qpjRA1oJt6omoZGb0zNDRxIW9H5MYf53VtKW+w4u2IvHbPvWeGAnj4kHpIiQ6hGCUqxRju3ZO7RyjoOHh9SnGtzdNPYmSE0lIVF0aI2lCMEpVqbFQ0kN5naMXUYfe2Xpz99JO0t6OqSsWFEaI2FKNEpVpaYKTwS7Vv7vmEbK/r94Y95SSM0U090SEUo0SllM7pfGH4vSWeOZvOzx3geQjRKhSjRKUsLdHRoWT/rtkXrpUPO5PnoewkRkawtlZxYYSoDcUoUSkzM5iYKNnvZlu7yjc94sKcDqni756xMZycVF8bIepBMUpUzc1N+f7tM36ubLKIzfBReERHB1xdVVwVIWpDMUpUzddXeYPUzrxly58uRV+dJn83jwd3d+VnIESrUIwSVXN1ha38xUdKaq0Lqm0Zw/pp1xzMm+V/XCDArFlqLI8QVaPJoEQNRCLExkIq7bF53Q/zD1yfundu8qYX0+R8ijEYG2PiRLz+uiaKJERFqDVK1MDRUe5deWalM4AJjgpesMznw9YW8+bJ30uItqIVnogatLSgtbXHNinj3RY5ApjgJJLzET4fNjZ4910I6DtJdAx9ZYkaVFT03lZYY9vYZjLcqmHIoCd7RRkDj4exY/Ff/wVjYw1VSIjqUIwSNaiUc9t+s9IJwESnXrt4PNjYYMkSDdRFiDpQ3yhRgz7FKAAXF3VXRIj6UIwSNehrjNKcJaLLKEaJqnV0oLq69+bMCicAk5zlxaizs7qLIkR9KEaJqolEvUeMPmgeVNlkYWXaNsq6Vs5HHB01URgh6kExSlRN3h39jQpnABOdKuUsgDd4MHq/R4QQ3UExSlRNXozSHT3RYxSjRNXkDRqVPV+SP3+J7uiJjqMYJSrFGB486L1ZFqPUGiV6iWKUqFR1Ndrbe2xrFhsX1tia8CWeDvJeVEejnYiOoxglKiXvjv6WyEnKeJ4OVSZ8Sc99QiGsrDRRGCFqQzFKVEokZ9mRpzxforfXER1Hc+qJSslrjVY0/TxjZOu04Q1yjqc7eqL7qDVKVEpea/THwqM//xY41v4XOcdTjBLdRzFKVKexEc09Xw3SIZVmPXjAAybIHdhEMUp0H8UoUR15d/S5VVWtHR2jbGwGC4U99/H5sLfXRGGEqBPFKFEd+Qs7VQKYJHdwqKMjjPThGxgaGurr6/v4lsrKSh6Pd/r0aa5KIpqkD19ioi0Ux+hEuTfvdEdP9ALFKFGde/e6//mPN85SjBK9RwOeiCpIJEhKQsNjQ5r+GA16WyQCMIlilOgvilEyYK2t+PprPHzYe09pXd3DR4/szM2H9Z6qxOPp06IkGRkZAnqnqaGi//BkYCQSxMejuhodHb3nI8nu6CfLfb5kYSH3XfY6ysvL69ixY10/VldXz5w5k7tyiEZRjJKBOXeuczkSeXM6M2WP6eXevDc3o74egweru0DNEAqF3t7eXT9WynvaRvQVPWIiAyAS4dYtRRkK5c+XGMP336u1OkI0g2KUDMBPP6GjQ8n+p8RoaSmq5C2dR4hOoRgl/dXaiuLiroFNvdW2tPxeV2dmbDzGzk7+ERIJMjLUVZ4GMcaqq6tbW1u5LoRwg2KU9FdJCfh8JfszKysZMN7Rka9oqpJUirw8tdSmWfPnz//tt99eeeWVri1OTk6MsUWLFnFYFdEYilHSXxUVEIuV7L+p5PlSl8ZGSHqt5axr9u/fD2D58uVcF0K4QTFK+qu2Vskdfd7Dh3E3bgBwtrRUdhKBAE1NKi9Nk1JSUq5evWpnZ7dixQquayHcoAFPpL/ktSLFEsmZvLzYjIyLxcUMsDQ13XvlipeDQ6Cnp8LzSKVqLFL99u7dCyA8PHzQoEFc10K4wWOKGxSEKPOf/yA9veun0rq62IyMuMxMUVMTAAsTkze8vO43Np4rLOQBH//pT3995RU5naR8Pj78EGZmmixchbKyssaPH29mZlZaWmpPi/4ZKmqNkv5ydISxsVQs/qmkJDYj41RubodUCmCsvf27EyeG+fjYmJkBiM3IWPvDD7svX75WXn5syRJHC4snTsLn626GAti7dy9jLDQ0lDLUkFFrlPSTKCfn640bY65dK6mrA2AqECz08Ajz8fEfPbrHkb+Uli49caKyqWm4ldW/33jjheHDu/e5uUFnn8yUl4tGj3ZhjOXn548aNYrrcghnKEZJn2VkZHz++efHjx8Xi8UAnrO1DZ08+b1JkxwUdw7ea2gIOnHi17IyU4Hg7/Pnh/n4AICpKRYsgJeXxipXrQ8/xPnzV/39r/7tbxu4roVwiWKUPKu6OsTH44cfPjp/fh8AgUCw4KWXVo0cOWfECN4zvCS5Qyr95Kefdl++DCB4woSYgAAza2ts3KijC+DX18PVFfX1yMjA5MlcV0M4pZPfYKJhGRl4/30MH44NG9DS8v+cnZ0jIiIKCwtPXrgwd+JE3rPloMDIKMrf/+jixebGxkdu3fL73/8tGT9eRzMUwMGDqK/HnDmUoYRao0Sx5mZ8+y2++KJzxqaREfz9sXp1R0AAutfWfPAAcXHKx+H3cLOyMjAhobimxs7O7ptvvpk7d64aalevtjaMGoWKCpw/jzlzuK6GcI1ilMiRn4+vvsKXX6KmBgCsrfHGG1i/HvJHfxYWIiEB7e3PenZj44bBg1ckJ58+c4bP53/yySfbt2830qlmaWws3n8fEyYgM1PR4lbEgFCMkm5iMc6cQWwsLl7snKDk44OwMCxfDnNzpZ8sLcWxY2hvh0Ryv7HxyK1biXfv/rJypZyBoiYmcHfHf/83MzLas2fP1q1bpVJpQEDAkSNHrK2t1fR7qZZUCm9v5Obim2/w1ltcV0O0AMUoAYB793D0KA4cQHk5AFha4q23sHo1Jk581jNIm5rORkV98d13Z/PzJVIpgOR33vEfPRqMdTbYTE1hbIzXX8fYsV2f+uGHH5YvX15bW+vu7n7y5MnHVz7WWidPIjAQI0eioAD03hACGn5vOEJDEReHP/8Zn33WuaW8HC4uSElBfj5Wr+6ckzlhAlatwrJlUD4V/nEikejrr7+OiYkpKSkBYCIQLJ44MWz8+NmjR4PHg1QKoRAjR2LCBIwZ0+Me+LXXXrt582ZgYGB6evr06dMPHTq0dOlS1f3SaiEUwtMTq1ZRhpI/MGIYQkKYUMhMTFhRUeeWsjIGsJQUVlDAhEIWFMSSk/t2zvT09LCwMLM/piG5ublFRUU9ePCgc3dLC2tpYe3tTz1PS0vLe++9JztJWFiYWCzuWx0aJ5Uyra+RaA7d1BuK0FDk5YHHw7BhkL17ras1OnMmGhv70Pysq8Phw7hy5VxCwnwAfD5/wYIFq1atmjNnzkCeFMXGxq5bt04sFr/00kvHjx93lvsiPEK0jy49HiUDt28fEhJw/XrP7c+YoV0DSNevx+XL/sOGjYiIiCgqKjp16tS8efMG+LQ9LCzsypUrI0aMuHTpkq+vb1pa2kDOpiqhoeDxsHFj95bycvB4SE3lrCSibShGDcsLL2DJEmza1LdPPXqEuDhMmQJfX8TG4tEjzJmDf/xD8NtvJVFRUa6urqoqz9fXNz09ffbs2ffv358xY8bu3btVdeaBEApx8CCKi7mug2grilGDs2sXrl3DmTPPdHB+PjZvxogRCA1FejqsrREWhjt3cP48Fi+GQKD674+Dg8O5c+ciIiIkEsnmzZuXLVvW3Nys8qv0iY8Ppk7F1q3cVkG0F8WowXFzw6pViIhQ/k5PAAgKgocHdu9GdTWmT8fhw6ioQEyM2tcSEQgEUVFRJ0+etLKy+uabb/z8/IqKitR7yV5qanDzZvePijpDCAHFqGHavh2VlYiNfcphbm6wtERYGDIzkZaG4GAIhRqpDwCwaNGi69eve3p63rp1a/LkyadOnVLftdrbkZ2NEyewYwcWLICbG+ztMXt29wH96wwhBoJGvhkiOzts2YJPP33KYRER2LatD0/wVc7Dw+Pq1asrV6787rvvAgMDP/744507dw582qhUipIS3LnT/VdhYc+2uaUlxoxBY2P3ll274OmJM2cgW+SPkC4Uo4Zl1y6YmmLlSqxfj3/+E7//ruxgGxtNlaWYpaXliRMn9uzZs23btt27d9++ffvo0aO2trZ9OsnDhw9v375dUjL66tWRt28jOxs9ulsFAnh6wtsb48fD2xvjxmHUqJ6T5bs6Q86dG/BvRfQLjRs1LDY2qKuDSIQhQ7gupY9SU1PffPNNkUg0YsSIf//731OmTFF0ZHt7e35+fk5OTnZ2dkZGRk5OTnFxMYAZM777+efFsmNsbODpCR8feHnB0xOTJytcNEA23vbyZQCoroabG9aswa5dneNtCQG1Rg1KeTnq6mBvr3sZCmDmzJnp6elLliy5du3ayy+/fODAgZCQEABSqbS4uPj27dtZWVl37ty5fft2UVGR5Mm3llpZWXl7e7/4YlNQEMaNw7hx/WxoP2NnCDE01Bo1ID/+iFdfxcyZSEnhupT+am1tXbt2bVxcHIBp06ZJJJKcnJweI6KMjY09PDy8vb3Hjx/v7e09bty4kSNH9vuKj7dGAbS2YswYlJVh3z58+GH/fxGiTyhGDchnn+HDD7F2Lf7xD65LGZjDhw+///77lpaWVVVVAJydnb28vDw9PWV/9/HxMVPn20bj4hAaCl9f/N//qe8iRJdQjBqQkBB89RX+53+wahXXpQyMRCIZNGiQWCw+d+7c1KlTNbxQaWsrRo+mpe9JNxo3akCysgDo7os4uxUVFbW1tY0YMWLu3LmaX+xZKER4OADs2qXhKxMtRTFqKBhDbi6gFzGak5MD4Pnnn+eqgDVrYGODlBRcucJVCUSLUIwaitJSNDbC2Rl9HHOpjXJzcwF4yn8zlCZYWeGDDwBAO9ZOIRyjGDUU2dkAoAsv6Xg6WYxy2BoFsGEDLCzw/ffIzOSwCqIVKEYNhd50jEILbuoB2NkhJASMYd8+DqsgWoFi1FDIWqN6EKOMsbt370JejGZkZOzcufNy1yBPNdu0CSYmOH4cBQWauSDRUhSjhkJvYvT3339vampycnLqPbP+woUL27Zt++677zRTyfDhCA6GREINUkNHMWoQpFLcvQseD9w9lVEZ2R293OdLmu8z3bIFfD7i43HvnsauSbQOxahBKC5GczNcXDB4MNelDJiSrFSSsGri5oYlS9DWhr/9TWPXJFqHYtQg6M0dPRTHKGMsLy8PwNixYzVZz5Yt4PHwxRd4+FCTlyVahGLUIOTl7XN3H/+nPx3luhAVUNTkLCsra2xsHDJkiL29vSbrmTAB8+ejuRkHDmjyskSLUIwahFu3bhQU3Bk69GlvX9IFilqjHI7J37oVZma4di298fHl8onBoBg1CNnZ2QC8dX/wfUVFRW1trbW1tZOTU49dHA4m9fPDrFnB585N+eKLLzR/dcI5ilH919HRcffuXSMjI27Hq6uErMnpJa+Xl9upTevWLQPw2WeftbS0cFIA4RDFqP4rLCxsa2tzdXUdNGgQ17UMlJImJ7cT7V999VUfH5/Kysr4+HhOCiAcohjVf3pzRw+lTU7O1yuJiIgAsGfPno4OfeiDJs+OYlT/ZWVlQcGNsM5RlJUikai6utra2trZ2ZmLugAgMDDQ09OzpKTk2LFjXNVAOEExqv9krVH9iFFFo520YbESIyOjTZs2Adi5c6dUKuWwEqJhFKP6T29itLa2ViQSWVhYuLi49NjF+R29zPLly11dXXNzc5OSkrithGgSxaiea29vLyws5PP5Gp7bow6y/x+MHTuWx+P12KUNK5ACMDY23rhxI4CdO3dyWwnRJIpRPXf37l2xWDx69Gi1vixTM5Q0ObXhpl4mLCzMycnp+vXrFy9e5LoWoiEUo3pOyR29VCrdtm1bZWWlxovqJ21+TN9FKBSuW7cOwC56453BoBjVc0pGO+3fv3/nzp0+Pj4aW+d4gBQ1Oevq6ioqKszNzUeMGKHhkjIzM8VicY+Na9eutba2vnjx4q+//qrheggnKEb1nJLW6MqVK+fMmXP//v1Zs2bt3r2bMabx6vpGUZOzK16NjDT6fU5LS3v55ZcXLVrU1tb2+HYrK6vVq1cD2LNnjybrIVyhGNVzSgaN2tvbnz17NjIyUiqVbt68efHixfX19Rov8Fk1NTWVlZWZmpqOGjWqxy5Oni/dunUrICCgqanJwcHB2Ni4x96NGzcOGjTozJkzt27d0mRVhBMUo/pJIpFcuHAhODi4oqLC2NhY0cpDfD5/x44dp0+ftra2Pn369AsvvCBrvWqh3NxcxpiHh4dAIOi9C5qN0bt3786bN6+2tnbx4sVxcXG9W8H29vazZs0yNTX18fHx8vJ64403duzYkZSUVFxcrP2tftJnjOiXtLS0NWvW2NnZyf77yv6EC4XCL7/8Usmn8vPzx40bB8DCwuL48eMaq/bZyeaqL126tPeu+fPnAzh16pRmKikoKBg6dCiAefPmtba2yj0mOTnZ1NTUyMio99gsW1vbmTNnrlu3LiYm5tdff21oaNBM2UR9KEb1RGlpaVRU1JgxY7r+uHp6ekZGRhYUFMjmegMIDg5ubm5WdIampqa33noLAI/H27RpU3t7hybrf6rNmzcD2LFjR+9drq6uAPLy8jRQRllZ2ciRIwG88sorLS0tco9JS0uzsLAAsHbt2oaGhvT09Pj4+IiIiICAAEdHx95NGWdnZ39///Dw8Pj4+PT0dEXRzBgLCQnx8fF5fEtFRYUm/xdC5KIY1W21tbXx8fH+/v5drZ6hQ4eGh4dfunTp8cP+9a9/yZZ3mjhxYlFRkZITxsTEmJiYTJ36l5dfZvfvq7n6vli4cCGAhISEHtubm5uNjIxMTEza29vVXYNIJJLNYpg2bVpjY6PcYzIzM21sbACsWLFCIpH0PqCmpubSpUvR0dFhYWF+fn7m5uY9UtXY2NjT0zMoKCgyMjIxMbGoqEgqlco+SzGqnShGdVJra2tiYmJQUJCJiYnsz56ZmVlQUFBiYqKiNMnNzZX1HlpZWZ08eVLJya9cuerhIQHY0KHs8mX1/AJ95+7uDuDOnTs9tqenpwPw9vZWdwFVVVWycWMTJ06sqamRe8ydO3dk3SmBgYHPGOvt7e05OTnHjx//5JNPFi1aNHr06N79ADY2NjNmzGhsbKQY1U4UozomPT09PDy863VDRkZGfn5+MTExihpHj2toaAgMDJTdtkdERHR0KLxtf/CA+fszgAkELCpKpb9Av7S0tPD5fIFA0PuG9/DhwwCCgoLUWkBdHXv11WYXlxne3t5VVVVyjykoKJCtL7Vw4UKxWNzva7W1tWVlZXX1A8jW+be1tWXUGtVWFKO6IS8vLzIy8rnnnnu86zMqKqqioqJP55FKpdHR0bKH3bNmzRKJRIqO7OhgkZGMx2MAW7SI1dcP+HcYANmwIQ8Pj967tmzZAiAyMlJ9V29qYn5+DGDTp7feV9DT8fvvv8v6TGfPnq2oz7Tf7t+/f/36dcZYSEgIAP6TKEY5RzGq1aqrq2NiYvz8/Lpu9IYNGxYeHn7jxo2BnDY1NVXWxnFxcbl69aqSI8+cYdbWDGAeHiwrayDXHJBvv/0WwKJFi3rvKi8vP336dE5Ojpou3dbG5s9nAHNxYSUl8o8RiUQeHh4Apk+f/iy3Bf0WEhLi5eV15zGpqakUo5yjGOWSknu08vLy119/vWuM5ODBg997772UlBS5Ty36oby8fPr06QBMTU2jo6OVHJmfz8aNYwCztGS9HvBoyPbt2wFs3bpVw9cVi9mCBQxgQ4aw3Fz5x1RVVclmNyjpM1UVuqnXTjT8Xks5ODjI2on+/v7x8fH37t2Li4ubOXOmquY7Dhs2LDU1dc2aNW1tbRs2bAgP/7S1Vf6R7u5IS8Obb6KxEUuX4vPPVXL9vuFknpJEghUrkJQEe3v89BPkLjRYX18/f/787Oxsb2/vCxcuyJ7RE0NDMaqlTExMTpw4UVFRkZyc/M4776jjbXQmJiYHDx48evSopaX1lStrX3wRxcXyj7SwwLffIiYGNjaYO1flhTwFY+zmzZvQ7AJOjGH1anz7LayscPYs5K553dTU9Nprr6Wnp48ZMyY5OblrygMxNBSj2mvWrFkODg7qvsqyZcvS0n5raLDLzMSUKTh7VuGRYWEoKYEmW4TZ2dk7duxwd3eXzab/4IMPkpKSmEYmU370Eb78EubmSEqCr6+cA8RivPmmuVS62MXF5ccff5T1NRMDxXGngmHTngev9fUsMJABjMdjERFMRR2w/VRaWrpr1y7Z5FQZZ2dnKysr2T9PmTLl5MmTquojlis+ngFMKGTJyfIPaGtjr7/e+dypsPCe+iohOoFilEta9eBVKmXR0UwgYACbNYspHgqlLjU1NT1mZNnY2AQHBycnJ0ul0sbGxujoaNlkdgDPPfdcTEyMmmYuicXs7bdZYqL8vR0d7M03GcDs7bkcvUC0B8Uol7TwwWtqKnN07GxnKR0KpTItLS09ZmQJhcKAgICEhIS2trYeB7e2tsbHx3eNn3V1dY2Ojn706JEmCmWMMSaVstBQBrDBg1l6usYuS7QaxSiXtDBGGWNlZWz6dAYwU1OmdCjUgHR0dFy6dCksLMzS0lKWiXw+XzYj66mLHonF4vj4+K4H90OGDImMjKytrVVXrX+QStmaNQxg5ubsl1/UfTWiMyhGuaSdMcoYa29nEREMYAALDmaKl4XqM6mUpaWxtWvZa6/dkYUgj8d78cUXDxw48ODBgz6dSiKRJCYmTp06VXYeKyuriIiIhw8fqqzWXmT/TkxN2blz6rsI0T0Uo1zS2hiVOXqUDRrEADZpElO6LNQzyc5mn3zCRo/uTOfBg6WTJk37y1/+IlvJeCDOnj370ksvycLUwsLio48+VsfaVDt2MIAZG7OkJNWfnOg0ilGiTE4Oe/75zq7A/mV7eTmLju6cky77a9gwFh7OnlzJTwUuX74cEBDA4/H8/JaZmLDgYHb3rspOHh3NAMbns2PHVHZOojcoRslT1NayhQsZwBwdWVNTHz4VH88CAjof/QPM2poFB7PERKZ4YSkVuHHjxqpVBUZGnctTLVvGei2t12dxcYzHYzweO3RIFSUSvUMxSp5OKmV//WvnIMqQEAawP/+5e29ZGQNYSgpjjLW0sMREFhzMzM0701MoZAEBLCGB9XrqrkZFRSw8nAmFnSNhAwLYr7/281RHjjAjI8bjsX/+U6UlEj1CMUr6JiSECYXMxKS7t7QrRvfvZ1ZWnenJ57N581h8POPwVUMVFSwiojvQ/fwUDgVVJDW1szW9d696SiR6gcfoPYWkL0JDkZcHHg/DhuHYMQAoL4eLC1JSUFqKd9+FpyfeeQcrVkBLpkc+fIgDB/D3v6O2FgAmTcKGDVi+HM+yxotYjLffxrhxiIxUd5lEh1GMkr6Rxej+/Zg+HVevYurU7hj19YVIBDc3rkuUp7ERX32F3btRUQEA3t746CO8/TZ6va25J4kEfL4GCiQ6jJYmIf3xwgtYsgSbNj2x0cJCSzMUgKUl1q9HYSE+/xwuLsjKwooVGDsWP/6I0FDweNi4sfvg8nLweEhNBUAZSp6OYpT0065duHYNZ85wXUdfmJsjPBxFRYiPx9ixKCqChQUACIU4eFDhOoGEKEcxSvrJzQ2rViEiAh0dXJfSR8bGeOcdZGfj/Hn4+QGAjw+mTsXWrVxXRnQTxSjpv+3bUVmJ2Fiu6+gXIyPMmdP94759SEjA9evcFUR0FsUo6T87O2zZguhorutQBbm9vYQ8C4pRMiDr10P9K/RriC729hJt8LThHoQ86dChJ34UClFaylEpqtbV23vuHNelEJ1CrVFCuul0by/hCsUoId30qbeXaAzFKCFP0KfeXqIZNBmUEEIG5P8DGMBke/d1iCoAAAAASUVORK5CYII=\n", "text/plain": "" }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ] } ], "metadata": { "kernelspec": { "name": "python3", "display_name": "Python 3", "language": "python" }, "language_info": { "mimetype": "text/x-python", "nbconvert_exporter": "python", "name": "python", "file_extension": ".py", "version": "3.5.4", "pygments_lexer": "ipython3", "codemirror_mode": { "version": 3, "name": "ipython" } } }, "nbformat": 4, "nbformat_minor": 2 }