Skip to content

Instantly share code, notes, and snippets.

@madgpap
Created January 30, 2014 18:50
Show Gist options
  • Save madgpap/8715974 to your computer and use it in GitHub Desktop.
Save madgpap/8715974 to your computer and use it in GitHub Desktop.
{
"metadata": {
"name": "inchi"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": "import requests\n\nimport pandas as pd\n\nfrom rdkit.Chem.Draw import IPythonConsole\nfrom rdkit.Chem import PandasTools\nfrom rdkit.Chem import AllChem as Chem\nfrom rdkit.Chem import DataStructs\nfrom rdkit.Chem import Draw",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 117
},
{
"cell_type": "code",
"collapsed": false,
"input": "from rdkit import rdBase",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 118
},
{
"cell_type": "code",
"collapsed": false,
"input": "rdBase.rdkitVersion",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 119,
"text": "'2013.09.1'"
}
],
"prompt_number": 119
},
{
"cell_type": "markdown",
"metadata": {},
"source": "The strategy is: \n1) mol block to mol to inchi key \n2) inchi to mol to inchi key"
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": "Case 1: The 2 inchi keys agree but the inchi round trip fails"
},
{
"cell_type": "code",
"collapsed": false,
"input": "CHEMBL287254 = \"\"\"\n 11280714522D 1 1.00000 0.00000 0\n\n 22 23 0 1 0 999 V2000\n 5.0250 -3.3875 0.0000 C 0 0 0 0 0 0 0 0 0\n 5.3125 -2.8625 0.0000 N 0 0 0 0 0 0 0 0 0\n 5.9125 -2.8542 0.0000 C 0 0 1 0 0 0 0 0 0\n 6.2250 -3.3667 0.0000 C 0 0 0 0 0 0 0 0 0\n 4.4250 -3.4000 0.0000 C 0 0 3 0 0 0 0 0 0\n 5.3375 -3.9042 0.0000 O 0 0 0 0 0 0 0 0 0\n 6.2042 -2.3292 0.0000 C 0 0 0 0 0 0 0 0 0\n 5.9375 -3.8917 0.0000 O 0 0 0 0 0 0 0 0 0\n 4.1125 -2.8875 0.0000 C 0 0 0 0 0 0 0 0 0\n 4.1292 -3.9250 0.0000 C 0 0 0 0 0 0 0 0 0\n 6.8250 -3.3625 0.0000 O 0 0 0 0 0 0 0 0 0\n 6.8042 -2.3167 0.0000 C 0 0 0 0 0 0 0 0 0\n 3.5292 -3.9375 0.0000 C 0 0 0 0 0 0 0 0 0\n 3.5125 -2.9000 0.0000 C 0 0 0 0 0 0 0 0 0\n 3.2250 -3.4250 0.0000 C 0 0 1 0 0 0 0 0 0\n 7.1000 -1.7917 0.0000 C 0 0 0 0 0 0 0 0 0\n 7.1125 -2.8375 0.0000 C 0 0 0 0 0 0 0 0 0\n 2.6375 -3.5750 0.0000 C 0 0 0 0 0 0 0 0 0\n 2.2125 -3.1500 0.0000 C 0 0 0 0 0 0 0 0 0\n 7.7000 -1.7875 0.0000 C 0 0 0 0 0 0 0 0 0\n 7.7250 -2.8167 0.0000 C 0 0 0 0 0 0 0 0 0\n 8.0125 -2.2917 0.0000 C 0 0 0 0 0 0 0 0 0\n 2 1 1 0 0 0\n 3 2 1 0 0 0\n 4 3 1 0 0 0\n 1 5 1 0 0 0\n 6 1 2 0 0 0\n 3 7 1 6 0 0\n 8 4 2 0 0 0\n 9 5 1 0 0 0\n 10 5 1 0 0 0\n 11 4 1 0 0 0\n 12 7 1 0 0 0\n 13 10 1 0 0 0\n 14 9 1 0 0 0\n 15 13 1 0 0 0\n 16 12 1 0 0 0\n 17 12 2 0 0 0\n 15 18 1 6 0 0\n 19 18 1 0 0 0\n 20 16 2 0 0 0\n 21 17 1 0 0 0\n 22 21 2 0 0 0\n 14 15 1 0 0 0\n 22 20 1 0 0 0\nM END\n\"\"\"",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 120
},
{
"cell_type": "code",
"collapsed": false,
"input": "mol_mol= Chem.MolFromMolBlock(CHEMBL287254)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 122
},
{
"cell_type": "code",
"collapsed": false,
"input": "mol_inchi = Chem.MolFromInchi('InChI=1S/C18H25NO3/c1-2-13-8-10-15(11-9-13)17(20)19-16(18(21)22)12-14-6-4-3-5-7-14/h3-7,13,15-16H,2,8-12H2,1H3,(H,19,20)(H,21,22)/t13-,15?,16-/m1/s1')",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 123
},
{
"cell_type": "code",
"collapsed": false,
"input": "#Chem.Compute2DCoords(mol_mol)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 124
},
{
"cell_type": "code",
"collapsed": false,
"input": "Draw.MolsToGridImage([mol_mol,mol_inchi], subImgSize=(400,400))",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAABLAAAAGQCAIAAAAx1w4JAABGOUlEQVR4nO3de1zO9//H8XdHuq5K\nORsZis6Yw8qcM2zDjM15G4YQMZRDhRwqLKcaki3DkDVsDtuMKQuZ5RQqUWa+zqxWOuh0/f5oP9us\ndKmr6+q6Po/7zW23fD7v9+fz6qbb6tn7pKdQKAQAAAAAQHr0NV0AAAAAAEAzCIQAAAAAIFEEQgAA\nAACQKAIhAAAAAEgUgRAAAAAAJIpACAAAAAASRSAEAAAAAIkiEAIAAACARBEIAQAAAECiCIQAAAAA\nIFEEQgAAAACQKAIhAAAAAEgUgRAAAAAAJIpACAAAAAASRSAEAAAAAIkiEAIAAACARBEIAQAAAECi\nCIQAAAAAIFEEQgAAAACQKAIhAAAAAEgUgRAAAAAAJIpACAAAAAASRSAEAAAAAIkiEAIAAACARBEI\nAQAAAECiCIQAAAAAIFEEQgAAAACQKAIhAAAAAEgUgRAAAAAAJIpACAAAAAASRSAEAAAAAIkiEAIA\nAACARBEIAQAAAECiCIQAAAAAIFEEQgAAAACQKAIhAAAAAEgUgRAAAAAAJIpACAAAAAASRSAEAAAA\nAIkiEAIAAACARBEIAQAAAECiCIQAAAAAIFEEQgAAAACQKAIhAAAAAEgUgRAAAAAAJIpACAAAAAAS\nRSAEAAAAAIkiEAIAAACARBEIAQAAAECiCIQAAAAAIFEEQgAAAACQKAIhAAAAAEgUgRAAAAAAJIpA\nCAAAAAASRSAEAAAAAIkiEAIAAACARBEIAQAAAECiCIQAAAAAIFEEQgAAAACQKAIhAAAAAEgUgRAA\nAAAAJIpACAAAAAASRSAEAAAAAIkiEAIAAACARBEIAQAAAECiCIQAAAAAIFEEQgAAAACQKAIhAAAA\nAEgUgRAAAAAAJIpACAAAAAASRSAEAAAAAIkiEAIAAACARBEIAQAAAECiCIQAAAAAIFEEQgAAAACQ\nKAIhAAAAAEgUgRAAAAAAJIpACAAAAAASRSAEAAAAAIkiEAIAAACARBEIAQAAAECiCIQAAAAAIFEE\nQgAAAACQKAIhAAAAAEgUgRAAAAAAJIpACAAAAAASRSAEAAAAAIkiEAIAAACARBEIAQAAAECiCIQA\nAAAAIFEEQgAAAACQKAIhAAAAAEgUgRAAAAAAJIpACAAAAAASRSAEAAAAAIkiEAIAAACARBEIAQAA\n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\njBkzRsk0KIQYNWpU69at586dW/kCVq5caWho6OnpqWT75s2b+/j4TJs2LS8vr/QWS5eK27fF+vXl\nPOh//xNbtoiVK0tNg8XFxd27d58/f76SVQHSJJPJMjMzNV0FSlevXr3Vq1enpKTY29u7ubm99dZb\nZ86c0VQxWVlZnp6e3bp1c3Nzu3z5coXToBCiVatWO3bsOHv2bF5enrOz89ixY3/77TfVVQoAqEIE\nQt2hp6cXEhKyffv2U6dOVeY5d+/eXb58+fLly2vUqKF8L29vb0NDw8jIyNJvW1iI8+eFs7N4/rnG\nTZqIO3dE796l3tTX18/IyJg5c6byVQFSk5CQEB8fHx0dvWvXrgqc+AL1aNKkSVhYWHJyct26dV1c\nXIYMGZKYmKjmGvbv3+/g4HDs2LHjx4+vXbvW1NS08s90dnb+9ttvjx8//r///c/W1tbT0/POnTuV\nfywAoEoRCHVK27ZtJ0yY4OnpWZkfBP38/Nq2bfvee++9UK+aNWuGhITExMSU2aJRI9GjhzA2rnBh\nQgjPqVMtLS0r8wRAV+Xm5vr4+HTo0KFNmzbvvPPOpEmT2rVrt3//fk3XhTK1aNFi69atFy5cUCgU\nrVu3/vDDD9PS0tTw3rt37w4bNmzo0KGTJk06c+aMi4uLap//6quvHj58+NChQ+fOnbO2tp4zZ87D\nhw9V+woAgAoRCHVNQEDAjRs3Nm7cWLHuFy5c2LJly6pVqyrQ94033hjr5vbs1dhY0aOHMDcXlpZi\n0CCRklLOU57bfvzo0RUoDNB50dHRbdq0iYqK+uGHH7Zu3RoUFJSamvrmm2+OGDGiU6dOP/30k6YL\nRJkcHR2//vrrX3755eHDh3Z2dpMmTfrf//5XRe9SKBQREREODg537969cOGCr6+vkZFRFb2rR48e\nx48fj4qKOnLkiLW1tb+/PzOZAaCa0vCmNqgCJUf/PXz4sAJ9e/Xq9f7771f83c+8NDpaUbu24quv\nFAUFiuxsxcqVinr1FDdulNn9RdsDkvfHH3+MGzfOyMhozpw5OTk5z9y9e/futGnTatSo4ebmduLE\nCY1UCOXFxsZ27drVxMRkxowZSm7yrLyUlJSePXtaWFiEh4er8+iL4uLiqKgoe3v7OnXqLF++/MWO\nFAIAVD0CoQ4qKirq0KHD5MmTX7Tjvn37ZDLZ77//rrJSOnRQrFv3ryvu7ooJE1TWHpC2Xbt2NWzY\n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\nCAEAAABAogiEAAAAACBRBEIAAAAAkCgCIQAAAABIFIEQAAAAACSKQAgAAAAAEkUgBAAAAACJIhAC\nAAAAgEQRCAEAAABAogiEAAAAACBRBEIAAAAAkCgCIQAAAABIFIEQAAAAACSKQAgAAAAAEkUgBAAA\nAACJIhACAAAAgEQRCAEAAABAogiEAAAAACBRBEIAAAAAkCgCIQAAAABIFIEQAAAAACSKQAgAAAAA\nEkUgBAAAAACJIhACAAAAgEQRCAEAAABAogiEAAAAACBRBEIAAAAAkCgCIQAAAABIFIEQAAAAACSK\nQAgAAAAAEkUgBAAAAACJIhACAAAAgEQRCAEAAABAogiEAAAAACBRBEIAAAAAkCgCIQAAAABIFIEQ\nAAAAACSKQAgAAAAAEkUgBAAAAACJIhACAAAAgEQRCAEAAABAogiEAAAAACBRBEIAAAAAkCgCIQAA\nAABIFIEQAAAAACSKQAgAAAAAEkUgBAAAAACJIhACAAAAgEQRCAEAAABAogiEAAAAACBRBEIAAAAA\nkCgCIQAAAABIFIEQAAAAACSKQAgAAAAAEkUgBAAAAACJIhACAAAAgEQRCAEAAABAogiEAAAAACBR\nBEIAAAAAkCgCIQAAAABIFIEQAAAAACSKQAgAAAAAEkUgBAAAAACJIhACAAAAgEQRCAEAAABAogiE\nAAAAACBRBEIAAAAAkCgCIQAAAABIFIEQAAAAACSKQAgAAAAAEkUgBAAAAACJIhACAAAAgEQRCAEA\nAABAogiEAAAAACBRBEIAAAAAkCgCIQAAAABIFIEQAAAAACSKQAgAAAAAEkUgBAAAAACJIhACAAAA\ngEQRCAEAAABAogiEAAAAACBRBEIAAAAAkCgCIQAAAABIFIEQAAAAACSKQAgAAAAAEkUgBAAAAACJ\n+j+IzSJPhEGWFAAAAABJRU5ErkJggg==\n",
"prompt_number": 125,
"text": "<PIL.Image.Image image mode=RGB size=1200x400 at 0x37E0B48>"
}
],
"prompt_number": 125
},
{
"cell_type": "code",
"collapsed": false,
"input": "a = (Chem.InchiToInchiKey(Chem.MolToInchi(mol_mol)),Chem.InchiToInchiKey(Chem.MolToInchi(mol_inchi)))",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 126
},
{
"cell_type": "code",
"collapsed": false,
"input": "a",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 127,
"text": "('LLSFDDAYCLFQJP-AVVWSFFYSA-N', 'LLSFDDAYCLFQJP-AVVWSFFYSA-N')"
}
],
"prompt_number": 127
},
{
"cell_type": "code",
"collapsed": false,
"input": "a[0] == a[1]",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 128,
"text": "True"
}
],
"prompt_number": 128
},
{
"cell_type": "code",
"collapsed": false,
"input": "a[0] == requests.get('https://www.ebi.ac.uk/chemblws/compounds/CHEMBL287254.json').json()['compound']['stdInChiKey']",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 129,
"text": "False"
}
],
"prompt_number": 129
},
{
"cell_type": "code",
"collapsed": false,
"input": "Chem.MolToInchi(mol_mol) == Chem.MolToInchi(mol_inchi)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 130,
"text": "True"
}
],
"prompt_number": 130
},
{
"cell_type": "code",
"collapsed": false,
"input": "Chem.MolToInchi(mol_inchi) == 'InChI=1S/C18H25NO3/c1-2-13-8-10-15(11-9-13)17(20)19-16(18(21)22)12-14-6-4-3-5-7-14/h3-7,13,15-16H,2,8-12H2,1H3,(H,19,20)(H,21,22)/t13-,15?,16-/m1/s1'",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 131,
"text": "False"
}
],
"prompt_number": 131
},
{
"cell_type": "code",
"collapsed": false,
"input": "Chem.MolToSmiles(mol_mol, isomericSmiles=True) == Chem.MolToSmiles(mol_inchi, isomericSmiles=True)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 132,
"text": "False"
}
],
"prompt_number": 132
},
{
"cell_type": "code",
"collapsed": false,
"input": "Chem.MolToSmiles(mol_mol, isomericSmiles=True), Chem.MolToSmiles(mol_inchi, isomericSmiles=True)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 133,
"text": "('CCC1CCC(C(=O)N[C@H](Cc2ccccc2)C(=O)O)CC1',\n 'CCC1CCC(C(O)=N[C@H](Cc2ccccc2)C(=O)O)CC1')"
}
],
"prompt_number": 133
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": "Case 2: The 2 inchi keys do not agree and the inchi round trip fails"
},
{
"cell_type": "code",
"collapsed": false,
"input": "CHEMBL38872 = \"\"\"\n 11280714542D 1 1.00000 0.00000 0\n\n 12 12 0 0 0 999 V2000\n 1.7042 -0.5792 0.0000 C 0 0 0 0 0 0 0 0 0\n 1.7000 -1.4042 0.0000 C 0 0 0 0 0 0 0 0 0\n 2.4167 -0.1750 0.0000 C 0 0 0 0 0 0 0 0 0\n 2.4292 0.6500 0.0000 O 0 0 0 0 0 0 0 0 0\n 0.9792 -1.8042 0.0000 C 0 0 0 0 0 0 0 0 0\n 2.4042 -1.8167 0.0000 C 0 0 0 0 0 0 0 0 0\n 3.1292 -0.5917 0.0000 O 0 0 0 0 0 0 0 0 0\n 2.4042 -2.6417 0.0000 C 0 0 0 0 0 0 0 0 0\n 0.9667 -2.6292 0.0000 C 0 0 0 0 0 0 0 0 0\n 0.9917 -0.1542 0.0000 C 0 0 0 0 0 0 0 0 0\n 1.6792 -3.0542 0.0000 C 0 0 3 0 0 0 0 0 0\n 1.6792 -3.8792 0.0000 C 0 0 0 0 0 0 0 0 0\n 2 1 2 0 0 0\n 3 1 1 0 0 0\n 4 3 2 0 0 0\n 5 2 1 0 0 0\n 6 2 1 0 0 0\n 7 3 1 0 0 0\n 8 6 1 0 0 0\n 9 5 1 0 0 0\n 10 1 1 0 0 0\n 11 8 1 0 0 0\n 12 11 1 0 0 0\n 9 11 1 0 0 0\nM END\n\"\"\"",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 134
},
{
"cell_type": "code",
"collapsed": false,
"input": "mol_mol_2= Chem.MolFromMolBlock(CHEMBL38872)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 135
},
{
"cell_type": "code",
"collapsed": false,
"input": "mol_inchi_2 = Chem.MolFromInchi('InChI=1S/C10H16O2/c1-7-3-5-9(6-4-7)8(2)10(11)12/h7H,3-6H2,1-2H3,(H,11,12)/b9-8-')",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 136
},
{
"cell_type": "code",
"collapsed": false,
"input": "Draw.MolsToGridImage([mol_mol_2,mol_inchi_2], subImgSize=(400,400))",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAABLAAAAGQCAIAAAAx1w4JAAAq+ElEQVR4nO3deXRW9Z348S9EkEVR\nNhUEq0BFgQRQQHFAaehUh0H2goZEa6dqFVGBKthSqxU1hyJW6lZGHCxEVCxURMSqSGFQKrSWhE1E\nqYBiZRGURYPJ8/sj80PRBDAmz01yX6/T01PufXLvJy2n5p27fKslEokAAABA/FSPegAAAACiIQgB\nAABiShACAADElCAEAACIKUEIAAAQU4IQAAAgpgQhAABATAlCAACAmBKEAAAAMSUIAQAAYkoQAgAA\nxJQgBAAAiClBCAAAEFOCEAAAIKYEIQAAQEwJQgAAgJgShAAAADElCAEAAGJKEAIAAMSUIAQAAIgp\nQQgAABBTghAAACCmBCEAAEBMCUIAAICYEoQAAAAxJQgBAABiShACAADElCAEAACIKUEIAAAQU4IQ\nAAAgpgQhAABATAlCAACAmBKEAAAAMSUIAQAAYkoQAgAAxJQgBAAAiClBCAAAEFOCEAAAIKYEIQAA\nQEwJQgAAgJgShAAAADElCAEAAGJKEAIAAMSUIAQAAIgpQQgAABBTghAAACCmBCEAAEBMCUIAAICY\nEoQAAAAxJQgBAABiShACAADElCAEAACIKUEIAAAQU4IQAAAgpgQhAABATAlCAACAmBKEAAAAMSUI\nAQAAYkoQAgAAxJQgBAAAiClBCAAAEFOCEAAAIKYEIQAAQEwJQgAAgJgShAAAADElCAEAAGJKEAIA\nAMSUIAQAAIgpQQgAABBTghAAACCmBCEAAEBMCUIAAICYEoQAAAAxJQgBAABiShACAADElCAEAACI\nKUEIAAAQU4IQAAAgpgQhAABATAlCAACAmBKEAAAAMSUIAQAAYkoQAgAAxJQgBAAAiClBCAAAEFOC\nEAAAIKYEIQAAQEwJQgAAgJgShAAAADElCAEAAGJKEAIAAMSUIAQAAIgpQQgAABBTghAAACCmBCEA\nAEBMCUIAAICYEoQAAAAxJQgBAABiShACAADElCAEAACIKUEIAAAQU4IQAAAgpgQhAABATAlCAACA\nmBKEAAAAMSUIAQAAYkoQAgAAxJQgBAAAiClBCAAAEFOCEAAAIKYEIQAAQEwJQgAAgJgShAAAADEl\nCAEAAGJKEAIAAMSUIAQAAIgpQQgAABBTghAAACCmBCEAAEBMCUIAAICYEoQAAAAxJQgBAABiShAC\nAADElCAEAACIKUEIAAAQU4IQAAAgpgQhAABATAlCAACAmBKEAAAAMSUIAQAAYkoQAgAAxJQgBAAA\niClBCAAAEFOCEAAAIKYEIQAAQEwJQgAAgJgShAAAADElCEmixYtDjx6hXr1Qv37o3z+sWxf1QAAA\nEGuCkGRZuDD06xeGDQs7doT33gvdu4du3cLGjVGPBQAA8VUtkUhEPQPx0LlzuOKKcO21X2y5+uqQ\nSITJk6ObCQAAYk0QkhQffRQaNAgffhgaN/5i44IF4b/+K2zYEN1YAAAQa24ZJSm2bw/Vqh1UgyGE\nE04I27ZFNBAAACAISY6GDUMiEbZuPWjjhx+GRo0iGggAABCEJEf9+uHss8PMmQdtfPLJ0LNnRAMB\nAADhqKgHIDbGjw+DBoUTTgj9+oX9+8PDD4dZs8KyZVGPBQAA8eUKIcmSnh5mzw6TJoUGDUKTJmHh\nwrB4cTj11KjHAgCA+PKWUQAAgJhyhZDyt3RpePrpEnd95cFCAAAgWQQh5W/hwjB1aom7HnssqcMA\n5e+JJ5548MEHo54CADg8QUj5++STEnft2ZPEOYAk+fjjjydMmOCRBACo+AQh5a+wMFQv4W/a558n\ndxQgGQYPHvz+++8vWbIk6kEAgMMQhJS71ccdt7JFi2J3batd+8OmTZM8D1Dejj/++N69e0+bNi3q\nQQCAwxCElLtpu3bdvXVrsbvu2bdvhLtGoSrKysp6+umnP/vss6gHAQAORRBS7nbt2lXSrk8O8Xgh\nUJn9x3/8Rwjhueeei3oQAOBQBCHJcNRRRxW7vbCwsHpJjxcClVnNmjWHDBkyffr0qAcBAA7Fz+Ik\nQ926dUvadeyxxyZzEiBpMjMzn3vuuR07dkQ9CABQIkFIuSssLIx6BCACXbt2bd68+cyZM6MeBAAo\nkSCk3B3iQcFDPF4IVHbVqlUbOnSou0YBoCIThCRDzZo1S9pV0uOFQBWQlZW1ZMmSd955J+pBAIDi\nCUKSoXbt2iXtOsTjhUBl16pVq3POOScnJyfqQQCA4glCyt3nn39e0i6PF0KV565RAKjIBCEhkUjc\ncsstGzduLKfj7/nS0vP5+fn/+te/EolE0R+tQwhV3iWXXLJhw4bXX3896kHK0pIlS2688cZbb731\n6aefXrduXUFBQdQTAUApVTvwozmxtXPnzksvvfQvf/nLz3/+85/97Ge1atUq2+OvX7++du3aJ598\n8uzZs2+++eaaNWs2aNBg0qRJHTt2/N///d969eqlpaWV7RmBCqVv376nnHLK7373u6gHKRt//etf\n09PTe/fuvXv37ry8vE2bNtWpU6dNmzbt27dPTU1t165d+/btGzVqFPWYAHBEBCH/Z/bs2SNGjKhR\no8Zvf/vb//zP/yzbg7/xxhsjR45cvnz5mDFjMjIyfv3rX0+bNu0nP/nJuHHj/NgEVd5TTz113XXX\nvffeezVq1Ih6lm9r8+bN55577iWXXDJhwoSiLR999FFubm5eXl7Rv69cuXL37t1NmjRJTU0tSsTU\n1NQ2bdoc4t1aABAhQcgX9u3bd/fdd0+YMOH73//+vffe27Jly29/zC1btowdO/YPf/jDZZddNm7c\nuCZNmhRtX7p06Q033LBu3bo77rjjpz/9qXeNQhX26aefnnjiiTk5Ob179456lm9l7969Xbt2PfXU\nU2fNmpWSklLsZxKJxDvvvFMUh3l5eStWrHj77bdTUlJat26dmpqalpaWlpbWrl27U045JcnDA0Cx\nBCFftX79+hEjRrz88ss33XTTmDFjDvGC0EPbt2/fxIkTs7OzO3XqNHHixI4dO37lA4WFhVOnTv3F\nL37RoEGDBx54oEePHt92dKCi+slPfrJ79+4nnngi6kFKr6CgYMCAARs2bFiyZMmxxx575F+4d+/e\nVatWrVixoigRc3Nzt2/ffvzxx6elpX05EY855pjyGx4ASiIIKd7cuXNHjBjx+eef33vvvf369ftG\nX5tIJJ544okxY8bUrFlz/Pjx/fv3P8SH9+7dO2/evFdeeSU1NXXw4MENGjT4VnMDFdLChQt79er1\nwQcf1KtXL+pZSmnMmDFTp05dvnx5s2bNvuWh3n///aKLh0WJuGbNmv3797do0aIoEYvuNW3RokVJ\nFyEBoAwJQkq0b9++CRMm3H333RdccMHvfve7Vq1aHclXLV26dMSIEWvXrh07duzw4cM9NgOEEAoL\nC0877bTbbrvtiiuuiHqW0pgyZcr111+/YMGCc845p8wPvn///rVr1xZdPCy613Tz5s1fflFNUSI2\nbNiwzE8NAJadoES1a9f+5S9/uWbNmtq1a7dt2/YXv/jFlxeQ+LqNGzdmZGR07979rLPOeuutt0aN\nGlX6Gly8OPToEerVC/Xrh/79w7p1/7d97drwlacN164NZf1aVKDMVa9ePSMjY9q0aVEPUhoLFiwY\n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\nPnzs2LHHH3/8Yb9k06ZNo0ePfvrpp6+66qpx48YdyZcAVc/evXsvuOCCE0888ZlnninXRWj279+/\ndu3aLyfi5s2b69Sp07Zt2/bt26empmZkZDRq1OgrXzV+/PgZM2a88cYb5TdYkn388cdNmjSZO3fu\n9773vahnAaCSEYQUY8uWLb/+9a+nTJnSv3//O++8s1WrVt/oyxctWnTjjTdu2rRp3LhxV155pd9Y\nQ6wkEokBAwa8/fbbixcvPu6445J89h07dhSVYdEtpn/84x+bNWv2lc9UyYfuLrnkkrp1606ZMiXq\nQQCoZAQhByn2zTGlUFhY+PDDD//qV79q3rz5pEmTunXrVrZzAhXWLbfcMmXKlNdff/3UU0+NepYS\nVb2H7p577rmMjIx//etftWrVinoWACoTl274P4WFhY8++mirVq2mTp362GOPvfrqq6WuwRBC9erV\nr7322nXr1nXt2jU9PT0jI+P9998vw2mBimnatGn33nvvs88+W5FrMISQlZWVk5NTWFgY9SBl5sIL\nL6xVq9YzzzwT9SAAVDKCkBBCePHFFzt16jR69OiRI0euWrVqwIABX3mPaOnUr1//gQceWL58+ZYt\nW1q3bn3XXXeV7ZJiEC9r14ajjvrqli9fDlq8OPToEerVC/Xrh/79w7p1SR5w0aJFV1555ZQpU845\n55wkn/qbGjBgwPbt2xctWhT1IGXmqKOOGjJkSE5OTtSDAFDJCELCpEmTevfunZ6e/tZbb40aNaqk\n94iWWlpa2iuvvDJlypTf//73bdu2ffPNN8v2+EAIISxcGPr1C8OGhR07wnvvhe7dQ7duYePGpJ1/\n/fr1gwYNuummm4YOHZq0k5ZavXr1Lr744iq2nntmZub8+fO3bt0a9SAAVCaeISSccsopI0eOvPHG\nG8v7RPv27fvhD3/YuHHj//mf/ynvc0EVtHZtaNcufP75QVs6dAiffhpCCJ07hyuuCNde+8Xeq68O\niUSYPDkJo+3ateu8885LS0t7/PHHy+T+giSoeg/dbd++vWvXrh9++OFZZ511YBGOtm3b1qlTJ+rR\nAKi4jjr8R6jqqlWrdsoppyThRLVr105NTc3Ly0vCuSBePvooLF8e5s07aOOQIeG//isJJy8oKBg4\ncOCxxx47ZcqUylKDIYQf/OAHRQ/dDRkyJOpZykB+fv7gwYPr168/YcKE1atX5+bm3nfffW+++WZB\nQUHLli3bt2/frl27okQ87bTTvPwZgAMEISGEcPTRR0c9AnAECgrCl5f3PPBOlO3bQ7VqoXHjgz58\nwglh27YkDDV8+PA333xz2bJlletKVI0aNQYPHpyTk1M1gnDYsGH//Oc/ly5d2rhx4z59+hRtzM/P\nX716ddEiHK+99trkyZPff//9Y445pm3btmlpaWlpaampqWlpafXr1492eAAiJAgJXvQClUZKSti5\n84s/Ft0yGkJo2DAkEmHr1oOa8MMPw9fWZC9z999//7Rp01599dWTTjqpvM9V5rKysrp167Zt27av\nL15fufzmN7+ZOXPm4sWLGx/8S4GaNWt26NChQ9FfkhBCCNu3b1+xYkVRIj722GOrV6/eu3dv8+bN\ni8qwKBFbt25do0aNZH8PAEREEBL27dsX9QjAt1O/fjj77DBz5kHPED75ZOjZs1xPO2/evFGjRs2c\nOTM1NbVcT1ROunTp0qJFiyeeeOK6666LepbSmzNnztixY5955pkj+V+hYcOG6enp6enpRX8sKCh4\n++23c3Nzc3Nz8/LynnrqqQ0bNtSoUaNNmzYHnkJs165d06ZNy/mbACAygpAQQqhcN3oBxRg/Pgwa\nFE44IfTrF/bvDw8/HGbNCsuWFfPJ5cvDXXeF1NR3OnUqOOOMli1blu6Jsry8vIyMjDvvvPPADYqV\nUWZmZk5OTuUNwry8vEsvvXTixIkXXXRRKb48JSXl9NNPP/300wcNGlS05ZNPPlm5cmVRIs6dO/eu\nu+7auXNnw4YN27dvfyAR27Rp458aAFWGICSEENwdBJVeenqYPTv88pfhxz8O1auHCy4IixeHYleH\n/853wumnh2XLnn399Rvnz69Tp07RE2UHftxv2LDhYc+2devWvn37Dhky5Gc/+1mZfyvJlJGRceut\nt7711lvf/e53o57lG9uyZUuvXr0uv/zyYcOGldUxjz322K5du3bt2vXAlo0bNxbdYrpixYqXXnrp\nzTffTCQSLVu2LLrFtHfv3h07diyrswOQfJadINSqVeull17q1q1bEs51yy235OXlzZ07NwnnAg5r\nx44dubm5B64IrVq1avfu3U2bNi0qw6JEPPPMM7+yPGl+fv75559ft27d559/vlq1apX9N0rdu3dP\nT0+//fbbox7km9m7d296enq9evWef/75lJSUpJ03Pz9/1apVBxIxMzPzsssuS9rZAShzrhASPvvs\ns6hHAKLRoEGDHj169OjRo+iPhYWFGzZsOPDSkVmzZr3zzjspKSlnnHFG0UtHUlNT27Vr9/Of/3z7\n9u3PP/98IpFo0aLF7NmzO3fuHOn38a1kZmaOHz/+tttuq0RrZiQSiSuuuGL37t0vvPBCMmswhFCz\nZs2OHTu6KghQZQhCQgihbt26UY8ARK969eotW7Zs2bLlgAEDirbs2bNn1apVK1asWLly5QsvvDB+\n/PgdO3Z07Njx+eefL1qroGPHjtOmTavUQfjDH/7whhtueO21184777yoZzlSv/zlL1955ZVXX331\nuOOOi3oWACo3QUgIIRx1lL8JQDHq1q3bpUuXLl26JBKJogto7733XuPGjQ/cRJqZmXn99ddPnDix\n8v7fSIMGDXr16jV9+vTKEoQ5OTkTJkx46aWXWrVqFfUsAFR6pXmzHFWJNSeAw5o6dWq/fv2K/vPJ\nJ5/85UcK+/Tp8+mnn77wwgvRTFZGsrKynnzyyUqxKOvSpUt//OMfP/LII8l58BuAKk8Qxl2l+AEI\niFaHDh2ee+65Dz744Ou7ateuPWjQoOnTpyd/qjLUq1evEMK8efOiHuQwNmzY0KdPn5EjR2ZmZkY9\nCwBVhCAkhBCOOeaYqEcAKq4OHTqceeaZjz/+eLF7MzMz58yZ88knnyR5qjJ09NFHV/ys3bVrV9++\nfbt3737XXXdFPQsAVYcgJIQQkvySOqDSycrKKqmXLrjggoYNG/7xj39M8khlKysra+7cuTt37ox6\nkOIVFBRceumltWrVmjZtWiV6GyoAFZ8gjLu9e/dGPQJQCVx66aUrVqxYvXr113dVr149IyNj2rRp\nyZ+qDP3bv/1b06ZNn3rqqagHKd6NN95YtBBInTp1op4FgCpFEMbd/v37ox4BqASaN2/eo0ePkqov\nMzNz4cKFmzdvTvJUZahatWpDhw7NycmJepBiPPTQQ48++uicOXOaNWsW9SwAVDWCkBBCqFevXtQj\nABVdZmZmTk5OYWHh13e1a9cuLS1txowZyZ+qDGVmZi5evPjdd9+NepCDvPTSS9dff/2MGTOsBQ9A\neRCEhBCCJ1KAwxo4cOC2bdsWLVpU7N7MzMzKftdo69atO3fuXKFeLbN69epBgwbdcccdffr0iXoW\nAKomQRh3u3fvjnoEoHKoV69enz59SuqljIyM1atXr1ixIslTla3MzMyKE4Rbt27t27dvv379xowZ\nE/UsAFRZgjDuUlJSmjRpkpeXl5zTVdg3+AFHIisra+bMmZ9++unXdzVp0qRnz54Vp6ZKZ8iQIevX\nr1++fHnUg4T8/PyBAwc2a9Zs8uTJUc8CQFUmCOOudevWP/rRj773ve9dc80127dvL78Tbdu2bdiw\nYY888si1115bfmcBytUPfvCDWrVqzZkzp9i9mZmZjz/+eLEPGVYWJ5xwwoUXXlgRsvYnP/nJli1b\nnnrqqZo1a0Y9CwBVmSAk3HXXXYsXL162bNkZZ5wxefLkMv9hLj8//5577vnud7/797//ffHixb16\n9Srb4wNJU6NGjcGDB5fUS/3799+1a9fLL7+c5KnKVtG7cx5//PGVK1dG9R7m7OzsOXPmPPvss40b\nN45kAADio1oikYh6BiqEwsLC//7v/x47duypp556//33n3POOWVy2NmzZ9988835+fnZ2dmXXHKJ\nt9dAZff6669369bt/fffb9So0df3ZmZmpqSkPPbYY8kfrKx8+umnDzzwwIMPPrhhw4YaNWqceeaZ\nqampqamp7du3T01Nbdq0aXkP8Kc//Wnw4MHz589PT08v73MBgCDkINu2bRs7duyUKVMuv/zy7Ozs\nYn/gO0JvvPHGyJEjly9fPmbMmJEjR9auXbsM5wQi1Lp16+HDh1933XVf3zV//vzBgwd/8MEHVWD9\n9E8++WTVqlW5ubm5ubl5eXm5ubk7d+5s2LBhURkWJWKbNm3K9jtdvnz5BRdcMGHChGuuuaYMDwsA\nJRGEFONvf/vbddddt3bt2jvvvPPqq69OSUn5Rl++ZcuWsWPH/uEPf7jsssvGjRvXpEmTcpoTiMS4\nceOee+6511577eu7CgoKmjVr9sC99w645JLkD1beNm7cmJeXl5eXt2LFiry8vDfffDORSLRo0eJA\nIqalpbVo0aLUt0Js3ry5a9euAwYMuO+++8p2cgAoiSCkeIWFhVOnTh09enTz5s3vv//+884770i+\nat++fRMnTszOzm7Xrt2kSZM6d+5c3nMCyffOO++0atVq3bp1rVq1+vreHb/6VYNly8K8eckfLMny\n8/NXrVq1cuXKA4m4ZcuWY445pl27dmlpaWlpaUWJePzxxx/J0fbu3Xv++ec3adLkT3/60zf9NRwA\nlJog5FB27tw5duzYyZMnZ2RkZGdnn3TSSSV9MpFIPPHEE0WLZXlcEKq87t27p6en33777cXs+/vf\nwznnhM2bw4knJn2uiG3btq2oDItuMV21atW+fftOOeWULydi69ata9So8ZUvTCQS/fv3f+eddxYv\nXnzcccdFMjwA8SQIObw33nhj+PDhq1atuu2224YNG3bUUUd95QNLly4dMWLEypUrPS4IMfH73/9+\nwm9+89Zbb4Vif/XTtm246qpwww1Jn6tiKSgoWL9+fdEjiEWJWPSimjZt2nz5RTVNmjS55ZZbpkyZ\nsmzZsu985ztRTw1AvAhCjkgikZg2bdqYMWMaNWp0//33n3/++UXbt2zZcsstt0yfPv3yyy/3uCDE\nx8c7dtTu1KnG9Omh2PvJ7747/PGPoQIs717RfPLJJytXrjzwopq8vLydO3c2aNCgevXqc+fOLavX\nOwPAkROEfAM7d+68/fbbH3jggcGDB99xxx2PP/54dnZ2p06dJk6c2LFjx6inA5JrwIBw0knhwQeL\n2bVxYzjttLByZTjzzKSPVcm8++67eXl55513XoMGDaKeBYA4EoR8YytXrhw+fPiGDRtSUlImTJjQ\nv3//qCcCojBrVrjyyrBlS6hZs5i9PXqEbt3CuHFJHwsA+AYEIaWRSCSqV6/+t7/97ayzzop6FiAi\nn30WmjYNjz4a+vYtZu+UKeGOO8KGDcU/ZAgAVAzVox6ASqnoDaJff1EeECNHHx0GDQrTpxe/d9Cg\n8K9/hUWLkjsTAPDNCEIASisrKzz7bNi5s5hdxx0XLr445OQkeyQA4JsQhACU1r/9W2jaNDz1VPF7\nMzPDzJnhs8+SOxMA8A0IQgBKq1q1kJFR4mXAiy4KRx0Vnn02uTMBAN+AIATgW8jKCosXh3ffLWZX\nzZphyJASHzIEACoAQQjAt9C6dejUqcTqGzo0PP982LEjuTMBAEfqqKgHAKCSmz49bN9e/K6uXcMr\nr4S9e4NV1wGgQhKEAHw7LVuG008vce955yVxFADgm3HLKADfTkrKV7csXhx69Aj16oX69UP//mHd\nuijGAgAOTxACUKYWLgz9+oVhw8KOHeG990L37qFbt7BxY9RjAQDFqJZIJKKegUqpWrVqubm5qamp\nUQ8CVDCdO4crrgjXXvvFlquvDolEmDw5upkAgOK5QghA2fnoo7B8efjhDw/aOGRIePHFiAYCAA5F\nEAJQdrZvD9WqhcaND9p4wglh27aIBgIADkUQAlB2GjYMiUTYuvWgjR9+GBo1imggAOBQBCEAZad+\n/XD22WHmzIM2Pvlk6NkzooEAgEOxDiEAZWr8+DBoUDjhhNCvX9i/Pzz8cJg1KyxbFvVYAEAxXCEE\noEylp4fZs8OkSaFBg9CkSVi4MCxeHE49NeqxAIBiuEIIQFm74IKwaFHUQwAAh+cKIQAAQEwJQkrp\n+9///jHHHBP1FAAAQOlVSyQSUc8AAABABFwhBAAAiClBCAAAEFOCEAAAIKYEIQAAQEwJQgAAgJgS\nhAAAADElCAEAAGJKEAIAAMSUIAQAAIgpQQgAABBTghAAACCmBCEAAEBMCUIAAICYEoQAAAAxJQgB\nAABiShACAADElCAEAACIKUEIAAAQU4IQAAAgpgQhAABATAlCAACAmBKEAAAAMSUIAQAAYkoQAgAA\nxJQgBAAAiClBCAAAEFOCEAAAIKYEIQAAQEwJQgAAgJgShAAAADElCAEAAGJKEAIAAMSUIAQAAIgp\nQQgAABBTghAAACCmBCEAAEBMCUIAAICYEoQAAAAxJQgBAABiShACAADElCAEAACIKUEIAAAQU4IQ\nAAAgpgQhAABATAlCAACAmBKEAAAAMSUIAQAAYkoQAgAAxJQgBAAAiClBCAAAEFOCEAAAIKYEIQAA\nQEwJQgAAgJgShAAAADElCAEAAGJKEAIAAMSUIAQAAIgpQQgAABBTghAAACCmBCEAAEBMCUIAAICY\nEoQAAAAxJQgBAABiShACAADElCAEAACIKUEIAAAQU4IQAAAgpgQhAABATAlCAACAmBKEAAAAMSUI\nAQAAYkoQAgAAxJQgBAAAiClBCAAAEFOCEAAAIKYEIQAAQEwJQgAAgJgShAAAADElCAEAAGJKEAIA\nAMSUIAQAAIgpQQgAABBTghAAACCmBCEAAEBMCUIAAICYEoQAAAAxJQgBAABiShACAADElCAEAACI\nKUEIAAAQU4IQAAAgpgQhAABATAlCAACAmBKEAAAAMSUIAQAAYkoQAgAAxJQgBAAAiClBCAAAEFOC\nEAAAIKYEIQAAQEwJQgAAgJgShAAAADElCAEAAGJKEAIAAMSUIAQAAIgpQQgAABBTghAAACCmBCEA\nAEBMCUIAAICYEoQAAAAxJQgBAABiShACAADElCAEAACIKUEIAAAQU4IQAAAgpgQhAABATAlCAACA\nmBKEAAAAMSUIAQAAYkoQAgAAxJQgBAAAiClBCAAAEFOCEAAAIKYEIQAAQEwJQgAAgJgShAAAADEl\nCAEAAGJKEAIAAMSUIAQAAIgpQQgAABBTghAAACCmBCEAAEBMCUIAAICYEoQAAAAxJQgBAABiShAC\nAADElCAEAACIKUEIAAAQU4IQAAAgpgQhAABATAlCAACAmPp/c7Cm7b9JprcAAAAASUVORK5CYII=\n",
"prompt_number": 137,
"text": "<PIL.Image.Image image mode=RGB size=1200x400 at 0x38D9680>"
}
],
"prompt_number": 137
},
{
"cell_type": "code",
"collapsed": false,
"input": "b = (Chem.InchiToInchiKey(Chem.MolToInchi(mol_mol_2)),Chem.InchiToInchiKey(Chem.MolToInchi(mol_inchi_2)))",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 138
},
{
"cell_type": "code",
"collapsed": false,
"input": "b",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 139,
"text": "('MXWJPXCKNKCCCC-HJWRWDBZSA-N', 'MXWJPXCKNKCCCC-UHFFFAOYSA-N')"
}
],
"prompt_number": 139
},
{
"cell_type": "code",
"collapsed": false,
"input": "b[0]==b[1]",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 140,
"text": "False"
}
],
"prompt_number": 140
},
{
"cell_type": "code",
"collapsed": false,
"input": "requests.get('https://www.ebi.ac.uk/chemblws/compounds/CHEMBL38872.json').json()['compound']['stdInChiKey'] == b[0]",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 145,
"text": "True"
}
],
"prompt_number": 145
},
{
"cell_type": "code",
"collapsed": false,
"input": "Chem.MolToSmiles(mol_mol_2, isomericSmiles=True) == Chem.MolToSmiles(mol_inchi_2, isomericSmiles=True)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 143,
"text": "True"
}
],
"prompt_number": 143
},
{
"cell_type": "code",
"collapsed": false,
"input": "Chem.MolToSmiles(mol_inchi, isomericSmiles=True)",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 144,
"text": "'CCC1CCC(C(O)=N[C@H](Cc2ccccc2)C(=O)O)CC1'"
}
],
"prompt_number": 144
},
{
"cell_type": "code",
"collapsed": false,
"input": "",
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment