Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.7.0] - 2026-08-27
Added
rgroupcommand: Perform R-Group Decomposition against a common core SMARTS.augmentcommand: Generate uncanonical/randomized SMILES strings for ML data augmentation.atommapcommand: Assign unique atom mapping numbers to all atoms in a molecule.- Exported new core API modules:
rgroup.py,augment.py, andatommap.py.
Tests
- Added
tests/test_rgroup.pywith 11 tests for R-Group decomposition. - Added
tests/test_augment.pywith 10 tests for SMILES augmentation. - Added
tests/test_atommap.pywith 10 tests for atom mapping.
[1.6.0] - 2026-08-24
Added
reactioncommand: Validate and analyze Reaction SMILES (SMIRKS) strings.conformerscommand: Generate multiple 3D conformers using RDKit's ETKDG algorithm and MMFF optimization, exported as multi-model.sdf.scaffoldcommand: Extract the Murcko Scaffold framework from a SMILES string (supports batch processing).stereocommand: Analyze a SMILES string for assigned and unassigned stereocenters, with optional--chiral-flagenforcement.- Exported new modules:
reaction.py,conformers.py,scaffold.py, andstereo.pyto the core API.
Tests
- Added
tests/test_reaction.pywith 10 tests for reaction validation. - Added
tests/test_conformers.pywith 14 tests for conformer generation. - Added
tests/test_scaffold.pywith 9 tests for scaffold extraction. - Added
tests/test_stereo.pywith 10 tests for stereocenter analysis. - Total: 151 offline tests passing (+ 10 integration tests).
[1.5.0] - 2026-08-24
Added
tautomerscommand: Enumerate all plausible tautomers for a given SMILES string.- Critical for protein-ligand docking preparation.
- Exposes RDKit's
MolStandardize.TautomerEnumerator. - Batch processing support with
--fileand--output(exports one row per tautomer, exploding the dataset). -
New Python API
enumerate_tautomers()returningTautomerResult. -
substructurecommand: Search a library for compounds containing a specific molecular fragment or functional group. - Uses RDKit's
HasSubstructMatchalgorithm. - Supports both SMARTS (default) and strict SMILES queries (
--smiles-query). - Batch processing support with
--fileand--outputto save matching compounds. - New Python API
substructure_search()returningSubstructureHit.
[1.4.0] - 2026-08-23
Added
standardizecommand - Full offline SMILES standardization pipeline using RDKitMolStandardize:- Salt stripping (
fragmentstep): Keeps the largest organic fragment, removes counterions/salts. - Neutralization (
neutralizestep): Neutralizes charged atoms (e.g., carboxylates -> carboxylic acids). - Tautomer canonicalization (
tautomerstep): Normalizes tautomers to a single canonical form. - Canonical SMILES (
canonicalstep): Outputs canonical RDKit SMILES. --steps: Choose individual steps (e.g.,--steps fragment,neutralize) orall(default).--show-diff: Step-by-step breakdown showing exactly what changed at each stage.--file/--output: Batch CSV/SMI processing with CSV output.iupacnamecommand - Systematic IUPAC identifier generation from SMILES:- Fully offline: InChI, InChIKey, Molecular Formula, Exact MW — always computed locally via RDKit.
- PubChem IUPAC name (
--online): Fetches the preferred IUPAC name from PubChem REST API. - Local SQLite caching: After a first
--onlinelookup, subsequent calls return the cached name offline. --file/--output: Batch CSV/SMI processing with CSV output.- New public API exports:
standardize_smiles,StandardizeResult,StepResult,STANDARDIZE_STEPS,get_iupac_name,IUPACResult
Tests
- Added
tests/test_standardize_iupac.pywith 33 tests (31 offline, 2 integration). - Total: 107 offline tests passing (+ 10 integration tests).
[1.3.0] - 2026-08-23
Added
fingerprintcommand — Generate ECFP4, ECFP6, FCFP4, MACCS, RDKit, AtomPair, and Topological Torsion fingerprints from SMILES (offline, RDKit-based). Supports single compounds and batch file processing with CSV export.similarcommand — Tanimoto-based similarity search: compare a query SMILES against a compound library file. Supports all fingerprint types, configurable threshold, and top-N ranking with optional CSV output.filtercommand — Drug-likeness and ADMET evaluation with six rules: Lipinski Ro5, Veber oral bioavailability, Ghose filter, Egan passive permeability, Rule of Three (lead-like), PAINS alert detection. Also computes QED score. Supports--failflag to invert selection and--qed-minthreshold for batch filtering.- New core module
smilesherlock/core/cheminfo.pywith three public functions: compute_fingerprint(smiles, fp_type, n_bits)— returnsFingerprintResultorList[FingerprintResult]apply_filters(smiles, rules)— returnsFilterResultwith per-ruleRuleResultobjectscompute_similarity(query_smiles, library, fp_type, n_bits, threshold, top_n)— returnsList[SimilarityResult]- New Pydantic models:
FingerprintResult,FilterResult,RuleResult,SimilarityResult— all exported from the top-level package - 49 new unit tests in
tests/test_cheminfo.py(77 total across the test suite, all passing) - Updated
docs/api_reference.md,docs/practical_guide.md(Sections 6–8),README.md, anddocs/index.md
Changed
- Version bumped to
1.3.0
[1.2.0] - 2026-08-23
Added
- Offline Molecular Structure Generation (--gen): Generate 2D and 3D conformations directly from SMILES using RDKit with forcefield energy minimization (MMFF94 / UFF).
- --gen all: Generate 2D/3D structures locally for all input compounds.
- --gen missing: Seamlessly download from PubChem when available, automatically generating structures locally when missing or not in database.
- Multi-Format Conformations: Support for .sdf, .mol, and .pdb output formats with --3d and --2d coordinate options.
- Python API: Exported generate_structure() at the package root for programmatic offline conformation generation.
Fixed
- Fixed PubChem compound SQLite caching attribute resolution for isomeric_smiles.
- Improved CLI table formatting and command registration.
[1.1.0] - 2026-08-02
Added
- Lookup by Name: Added explicit PubChem querying by chemical name.
- Smart Auto-Routing: The CLI
automode now seamlessly falls back to name-based lookup if an invalid SMILES string is provided. - Python API: Exposed
lookup_by_name()directly at the package root.
Fixed
- Silenced aggressive C++ terminal warnings from RDKit when auto-parsing non-SMILES inputs.
- Fixed a SQLite caching bug where
canonical_smileswas being referenced using an outdated attribute name. - Cleaned up redundant CLI warnings for a smoother user experience.
- Fixed a bug where the
--3dand--2dflags in thedownloadcommand incorrectly required additional string arguments.
[1.0.0] - 2026-08-02
Added
- Initial Release of SmileSherlock!
- Core Engine: RDKit-powered SMILES validation and canonicalization.
- PubChem Integration: Single and batch lookups via the PubChem PUG REST API.
- Multi-format Support: Auto-parsing for
.csv,.tsv,.xlsx,.smi, and.sdffiles with smart column detection. - Structure Downloads: Automated downloading of 2D/3D structures in
sdf,mol,pdb, andpngformats with built-in resume logic. - High Performance: Multithreading architecture using
concurrent.futuresfor lightning-fast batch processing. - Smart Rate Limiting: Thread-safe API limiter to respect PubChem server limits.
- Caching: Local SQLite database to permanently store results and eliminate redundant API calls.
- Reporting: Rich progress bars and auto-generated
.logfiles detailing the success or failure of batch queries. - CLI Commands:
init,status,lookup,batch,download,update, andreinstall. - Smart Updater: Seamlessly fetch and apply code updates directly from GitHub or PyPI via
smilesherlock update.