Simple Python interface to OPSIN: Open Parser for Systematic IUPAC nomenclature
Project description
py2opsin
Simple Python interface to OPSIN: Open Parser for Systematic IUPAC nomenclature
Installation
py2opsin
can be installed with pip install py2opsin
. It has zero dependencies (OPSIN v2.7.0
is included in the PyPI package) and should work inside any environment running modern Python.
Try a demo of py2opsin
live on your browser (no installation required!):
Usage
Command-line arguments available in OPSIN
can be passed through to py2opsin
:
from py2opsin import py2opsin
>> smiles_string = py2opsin(
chemical_name = "ethane",
output_format = "SMILES",
)
smiles_str = "CC"
>> py2opsin(
chemical_name: str or list of strings,
output_format: str = "SMILES",
allow_acid = False,
allow_radicals = True,
allow_bad_stereo = False,
wildcard_radicals = False,
jar_fpath = "/path/to/opsin.jar",
)
The result is returned as a Python string, or False if an unexpected error occurs when calling OPSIN. If a list of IUPAC names is provided, a list is returned. It is highly reccomended to use py2opsin
in this manner if you need to resolve any more than a couple names -- the performance cost of running OPSIN
from Python one name at a time is significant (~5 seconds/molecule individually, milliseconds otherwise).
Arguments:
- chemical_name (str): IUPAC name of chemical as a Python string, or a list of strings.
- output_format (str, optional): One of "SMILES", "CML", "InChI", "StdInChI", or "StdInChIKey". Defaults to "SMILES".
- allow_acid (bool, optional): Allow interpretation of acids. Defaults to False.
- allow_radicals (bool, optional): Enable radical interpretation. Defaults to False.
- allow_bad_stereo (bool, optional): Allow OPSIN to ignore uninterpreatable stereochem. Defaults to False.
- wildcard_radicals (bool, optional): Output radicals as wildcards. Defaults to False.
- jar_fpath (str, optional): Filepath to OPSIN jar file. Defaults to "opsin-cli.jar" which is distributed with py2opsin.
Speedup 50x from pubchempy
py2opsin
runs locally and is smaller in scope in what it provides, which makes it dramatically faster at resolving identifiers. In the code block below, the call to py2opsin
will execute ~58x faster than an equivalent call to puchempy
:
import time
from pubchempy import PubChemHTTPError, get_compounds
from py2opsin import py2opsin
compound_list = [
"dienochlor",
"kepone",
...
"ditechnetium decacarbonyl",
]
for compound in compound_list:
result = get_compounds(compound, "name")
smiles_strings = py2opsin(compound_list)
Examples
- Jeremy Monat's (@bertiewooster) fantastic blog post using
py2opsin
to help explore the Wiener Index by enabling translation from IUPAC names into molecules directly from the original paper.
Online Documentation
Click here to read the documentation
Contributing & Developer Notes
Pull Requests, Bug Reports, and all Contributions are welcome! Please use the appropriate issue or pull request template when making a contribution.
When submitting a PR, please mark your PR with the "PR Ready for Review" label when you are finished making changes so that the GitHub actions bots can work their magic!
Developer Install
To contribute to the py2opsin
source code, start by cloning the repository (i.e. git clone git@github.com:JacksonBurns/py2opsin.git
) and then inside the repository run pip install -e .[dev]
. This will set you up with all the required dependencies to run astartes
and conform to our formatting standards (black
and isort
), which you can configure to run automatically in vscode like this.
Note for Windows Powershell or MacOS Catalina or newer: On these systems the command line will complain about square brackets, so you will need to double quote the molecules
command (i.e. `pip install -e ".
License
OPSIN
and py2opsin
are both distributed under the MIT license.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.