from typing import Optional
from rdkit.Chem.rdchem import Mol
from rdkit.Chem.rdmolfiles import MolToSmiles
[docs]class InvalidSmiles(ValueError):
def __init__(self, smiles: str, msg: Optional[str] = None):
if msg is None:
msg = f'"{smiles}" is not a valid SMILES string'
super().__init__(msg)
self.smiles = smiles
[docs]class InvalidInchi(ValueError):
"""
Exception raised when converting invalid InChI strings.
"""
def __init__(self, inchi: str):
super().__init__(f"The following InChI string cannot be converted: {inchi}")
self.inchi = inchi
[docs]class InvalidReactionSmiles(InvalidSmiles):
def __init__(self, reaction_smiles: str, msg: Optional[str] = None):
if msg is None:
msg = f'"{reaction_smiles}" is not a valid reaction SMILES string'
super().__init__(smiles=reaction_smiles, msg=msg)
[docs]class InvalidMdl(ValueError):
"""
Exception raised when converting invalid MDL Mol strings.
"""
def __init__(self, mdl: str):
super().__init__(f"The following MDL string cannot be converted: {mdl}")
self.mdl = mdl
[docs]class SanitizationError(ValueError):
def __init__(self, mol: Mol):
message = "Error when sanitizing RDKit Mol"
try:
smiles = MolToSmiles(mol)
message += ": " + smiles
except Exception:
pass
super().__init__(message)
[docs]class UnclearWhetherTokenized(ValueError):
"""Exception raised when unclear if something was tokenized or not."""
def __init__(self, string: str):
super().__init__(f'Cannot determine if "{string}" is tokenized.')