Skip to main content

Toolkit for harmonizing SMILES strings to canonical + isomeric + Kekulized convention (RDKit / COCONUT 2.0)

Project description

HARMONSMILE: Harmonize SMILES Strings for Cheminformatics and Machine Learning

License: LGPL v3 Version PyPI Python


HARMONSMILE solves a common problem in cheminformatics: SMILES strings for the same molecule look different depending on the source (PubChem, ChEMBL, COCONUT, in-house databases). This inconsistency breaks comparisons, deduplication, and machine learning pipelines that expect a uniform molecular representation.

HARMONSMILE converts any SMILES to a single canonical form — canonical + isomeric + Kekulized — following the convention used by RDKit and COCONUT 2.0, making your datasets consistent and reproducible across sources.


Installation

pip install harmonsmile

RDKit is required and installed automatically (rdkit>=2022.09).


Quick Start

Python API

Standardize a single SMILES string:

from harmonsmile import RDKitStandardizer

std = RDKitStandardizer()
print(std.to_iso_kek("c1ccccc1"))    # canonical + isomeric + Kekulized
print(std.to_conn_kek("c1ccccc1"))   # canonical + connectivity-only + Kekulized

Fetch properties from PubChem and harmonize:

from harmonsmile import PubChemIngest, Config

cfg = Config(
    input_path="data/database_pubchem.csv",   # requires: id, PubChem CID
    output_path="results/pubchem_harmonized.csv",
)
PubChemIngest(cfg).run()

Fetch properties from ChEMBL and harmonize:

from harmonsmile import ChEMBLIngest

ChEMBLIngest(
    input_path="data/database_chembl.csv",    # requires: id, ChEMBL ID
    output_path="results/chembl_harmonized.csv",
).run()

Harmonize any file with a SMILES column (COCONUT, in-house, etc.):

from harmonsmile import SMILESPrep

SMILESPrep(
    input_path="data/database.csv",
    smiles_col="canonical_smiles",            # any column name
    output_path="results/harmonized.csv",
).run()

Command-Line Interface

# PubChem pipeline
harmonsmile --pubchem-in data/database1.csv --pubchem-out results/database1_harmonized.csv

# SMILES pipeline (COCONUT, independent, etc.)
harmonsmile --coconut-in data/database2.csv --coconut-smiles canonical_smiles \
            --coconut-out results/database2_harmonized.csv

# Both pipelines in one run
harmonsmile \
  --pubchem-in  data/database1.csv --pubchem-out  results/database1_harmonized.csv \
  --coconut-in  data/database2.csv --coconut-smiles canonical_smiles \
  --coconut-out results/database2_harmonized.csv

# Check version
harmonsmile --version

Also available as a Python module:

python -m harmonsmile --pubchem-in data/database1.csv --pubchem-out results/out.csv

Pipelines

Pipeline Source Input API
PubChemIngest PubChem CSV with PubChem CID column REST (public)
ChEMBLIngest ChEMBL CSV with ChEMBL ID column REST (public)
SMILESPrep Any CSV/Excel with any SMILES column — (local file)

All pipelines append a SMILES_RDKit column with the harmonized SMILES.


Input Format

Pipeline Required columns
PubChemIngest id (optional), PubChem CID
ChEMBLIngest id (optional), ChEMBL ID
SMILESPrep id (optional), <smiles_col> (any name)

Supported file formats: CSV, TSV, XLSX, XLS.


Roadmap

  • v0.2.0CoconutIngest: knows COCONUT 2.0 schema automatically (canonical_smiles, identifier, molecular properties).
  • v0.3.0 — ML-ready features: ECFP fingerprints (with/without chirality), InChI/InChIKey for deduplication and robust cross-database matching.

Development

Project Structure

HARMONSMILE/
├── harmonsmile/
│   ├── __init__.py        # Public API
│   ├── __main__.py        # python -m harmonsmile entry point
│   ├── _cli.py            # CLI implementation
│   ├── chembl.py          # ChEMBL REST client
│   ├── config.py          # Config dataclass
│   ├── io.py              # Table I/O utilities
│   ├── pipelines.py       # PubChemIngest, ChEMBLIngest, SMILESPrep
│   ├── pubchem.py         # PubChem REST client
│   ├── standardize.py     # RDKitStandardizer
│   └── version.py         # Package version metadata
├── tests/                 # Unit test suite (pytest) — 71 tests
├── data/                  # Input data (not installed)
├── results/               # Output data (not installed)
├── logs/                  # Error logs (not installed)
├── pyproject.toml
├── environment.yml
├── requirements-dev.txt
├── CHANGELOG.md
├── CITATION.cff
├── COPYING
├── COPYING.LESSER
├── LICENSE
└── README.md

Running Tests

pip install pytest
pytest -v

Contributing

Contributions are welcome. Please open an issue before submitting a pull request. Follow the existing code style: NumPy-style docstrings, type hints, and SPDX license headers in all source files.


Citation

If you use HARMONSMILE in your research, please cite it using the metadata in CITATION.cff or the format below:

Contreras-Torres, F. F. (2026). HARMONSMILE: Harmonize SMILES Strings for
Cheminformatics and Machine Learning (v0.1.0). Tecnologico de Monterrey.
https://github.com/NanoBiostructuresRG/harmonsmile

Author

Developed by Flavio F. Contreras-Torres (Tecnológico de Monterrey) Monterrey, Mexico – May 2026


License

This project is licensed under the terms of the GNU Lesser General Public License v3.0 or later. SPDX identifier: LGPL-3.0-or-later.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

harmonsmile-0.1.1.tar.gz (33.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

harmonsmile-0.1.1-py3-none-any.whl (32.9 kB view details)

Uploaded Python 3

File details

Details for the file harmonsmile-0.1.1.tar.gz.

File metadata

  • Download URL: harmonsmile-0.1.1.tar.gz
  • Upload date:
  • Size: 33.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for harmonsmile-0.1.1.tar.gz
Algorithm Hash digest
SHA256 7f4b395a347d443275e390590e1ef7ce1e26d4ebefcb7240903ccd7369dbe14c
MD5 dbf43356e58102bf68cd1c66d5d0a29b
BLAKE2b-256 89c0afe35ed82581836af7b645a73c4b6b57aa0a19f5c0c4979c3ee0ce921762

See more details on using hashes here.

Provenance

The following attestation bundles were made for harmonsmile-0.1.1.tar.gz:

Publisher: publish-to-pypi.yml on NanoBiostructuresRG/harmonsmile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file harmonsmile-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: harmonsmile-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 32.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for harmonsmile-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 02f8e6f2441ea0025d1958526f1edd1caf9a45bd3eb780f4c7776f272035952b
MD5 6ea95c5df54d5ab616e726ad2a298286
BLAKE2b-256 ab0271b8fd0a1d34d3c8a21938ee1488657ec8cdaf4ae09cce0c2b6ca55b7a1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for harmonsmile-0.1.1-py3-none-any.whl:

Publisher: publish-to-pypi.yml on NanoBiostructuresRG/harmonsmile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page