Source code for schemist.cleaning

"""Chemical structure cleaning routines."""

from carabiner.decorators import return_none_on_error, vectorize
from rdkit.Chem import (
    Mol,
    MolFromSmiles,
    MolToSmiles,
)
import selfies as sf

from .sanifix5 import sanifix

# @return_none_on_error
[docs] def sanitize_smiles_to_mol(s: str) -> Mol: """Apply sanifix5. """ m = MolFromSmiles(s, sanitize=False) return sanifix(m)
[docs] @vectorize @return_none_on_error def clean_smiles(smiles: str, *args, **kwargs) -> str: """Sanitize a SMILES string or list of SMILES strings. """ return MolToSmiles(sanitize_smiles_to_mol(smiles), *args, **kwargs)
[docs] @vectorize def clean_selfies(selfies: str, *args, **kwargs) -> str: """Sanitize a SELFIES string or list of SELFIES strings. """ return sf.encode(MolToSmiles(sanitize_smiles_to_mol(sf.decode(selfies), *args, **kwargs)))