from typing import Any, ClassVar, Sequence

from typing import overload

from rdkit.Chem.rdchem import Mol

SANITIZE_ADJUST_REACTANTS: SanitizeFlags
SANITIZE_ALL: SanitizeFlags
SANITIZE_ATOM_MAPS: SanitizeFlags
SANITIZE_MERGEHS: SanitizeFlags
SANITIZE_NONE: SanitizeFlags
SANITIZE_RGROUP_NAMES: SanitizeFlags

class CartesianProductStrategy(EnumerationStrategyBase):
    __instance_size__: ClassVar[int] = ...
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def __copy__(cls, RDKit) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

class ChemicalReaction:
    __instance_size__: ClassVar[int] = ...
    __safe_for_unpickling__: ClassVar[bool] = ...
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def AddAgentTemplate(cls, RDKit, boost) -> Any: ...
    @classmethod
    def AddProductTemplate(cls, RDKit, boost) -> Any: ...
    @classmethod
    def AddReactantTemplate(cls, RDKit, boost) -> Any: ...
    @classmethod
    def AddRecursiveQueriesToReaction(cls, RDKit) -> Any: ...
    @classmethod
    def ClearComputedProps(cls, RDKit) -> Any: ...
    @classmethod
    def ClearProp(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def GetAgentTemplate(cls, RDKit, unsignedint) -> Any: ...
    @classmethod
    def GetAgents(cls, RDKit) -> Any: ...
    @classmethod
    def GetBoolProp(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def GetDoubleProp(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def GetIntProp(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def GetNumAgentTemplates(cls, RDKit) -> Any: ...
    @classmethod
    def GetNumProductTemplates(cls, RDKit) -> Any: ...
    @classmethod
    def GetNumReactantTemplates(cls, RDKit) -> Any: ...
    @classmethod
    def GetProductTemplate(cls, RDKit, unsignedint) -> Any: ...
    @classmethod
    def GetProducts(cls, RDKit) -> Any: ...
    @classmethod
    def GetProp(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def GetPropNames(cls, RDKit) -> Any: ...
    @classmethod
    def GetPropsAsDict(cls, RDKit) -> Any: ...
    @classmethod
    def GetReactantTemplate(cls, RDKit, unsignedint) -> Any: ...
    @classmethod
    def GetReactants(cls, RDKit) -> Any: ...
    @classmethod
    def GetReactingAtoms(cls, RDKit) -> Any: ...
    @classmethod
    def GetUnsignedProp(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def HasProp(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def Initialize(cls, RDKit) -> Any: ...
    @classmethod
    def IsInitialized(cls, RDKit) -> Any: ...
    @classmethod
    def IsMoleculeAgent(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def IsMoleculeProduct(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def IsMoleculeReactant(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def RemoveAgentTemplates(cls, RDKit) -> Any: ...
    @classmethod
    def RemoveUnmappedProductTemplates(cls, RDKit) -> Any: ...
    @classmethod
    def RemoveUnmappedReactantTemplates(cls, RDKit) -> Any: ...
    @classmethod
    def RunReactant(cls, RDKit, boost, unsignedint) -> Any: ...
    @classmethod
    def RunReactantInPlace(cls, *args, **kwargs) -> Any: ...
    def RunReactants(
        self, reactants: Sequence[Mol], max_products=1000
    ) -> tuple[tuple[Mol]]: ...
    @classmethod
    def SetBoolProp(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def SetDoubleProp(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def SetIntProp(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def SetProp(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def SetUnsignedProp(cls, *args, **kwargs) -> Any: ...
    @overload
    @classmethod
    def ToBinary(cls, RDKit) -> Any: ...
    @overload
    @classmethod
    def ToBinary(cls, RDKit, unsignedint) -> Any: ...
    @classmethod
    def Validate(cls, RDKit) -> Any: ...
    @classmethod
    def _getImplicitPropertiesFlag(cls, RDKit) -> Any: ...
    @classmethod
    def _setImplicitPropertiesFlag(cls, RDKit, bool) -> Any: ...
    @classmethod
    def __getinitargs__(cls, RDKit) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

class EnumerateLibrary(EnumerateLibraryBase):
    __instance_size__: ClassVar[int] = ...
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def GetReagents(cls, RDKit) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

class EnumerateLibraryBase:
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def GetEnumerator(cls, RDKit) -> Any: ...
    @classmethod
    def GetPosition(cls, RDKit) -> Any: ...
    @classmethod
    def GetReaction(cls, RDKit) -> Any: ...
    @classmethod
    def GetState(cls, RDKit) -> Any: ...
    @classmethod
    def InitFromString(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def ResetState(cls, RDKit) -> Any: ...
    @classmethod
    def Serialize(cls, RDKit) -> Any: ...
    @classmethod
    def SetState(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def next(cls, RDKit) -> Any: ...
    @classmethod
    def nextSmiles(cls, RDKit) -> Any: ...
    @classmethod
    def __bool__(cls, RDKit) -> Any: ...
    @classmethod
    def __iter__(cls, boost) -> Any: ...
    @classmethod
    def __next__(cls, RDKit) -> Any: ...
    @classmethod
    def __nonzero__(cls, RDKit) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

class EnumerationParams:
    __instance_size__: ClassVar[int] = ...
    reagentMaxMatchCount: Any
    sanePartialProducts: Any
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

class EnumerationStrategyBase:
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def GetNumPermutations(cls, RDKit) -> Any: ...
    @classmethod
    def GetPosition(cls, RDKit) -> Any: ...
    @classmethod
    def Initialize(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def Skip(cls, RDKit, unsignedlong) -> Any: ...
    @classmethod
    def Type(cls, RDKit) -> Any: ...
    @classmethod
    def next(cls, RDKit) -> Any: ...
    @classmethod
    def __bool__(cls, RDKit) -> Any: ...
    @classmethod
    def __copy__(cls, RDKit) -> Any: ...
    @classmethod
    def __next__(cls, RDKit) -> Any: ...
    @classmethod
    def __nonzero__(cls, RDKit) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

class EvenSamplePairsStrategy(EnumerationStrategyBase):
    __instance_size__: ClassVar[int] = ...
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def Stats(cls, RDKit) -> Any: ...
    @classmethod
    def __copy__(cls, RDKit) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

class FingerprintType:
    AtomPairFP: ClassVar[FingerprintType] = ...
    MorganFP: ClassVar[FingerprintType] = ...
    PatternFP: ClassVar[FingerprintType] = ...
    RDKitFP: ClassVar[FingerprintType] = ...
    TopologicalTorsion: ClassVar[FingerprintType] = ...
    names: ClassVar[dict] = ...
    values: ClassVar[dict] = ...
    __slots__: ClassVar[tuple] = ...

class MOL_SPTR_VECT:
    __instance_size__: ClassVar[int] = ...
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def append(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def extend(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def __contains__(cls, other) -> Any: ...
    @classmethod
    def __delitem__(cls, other) -> Any: ...
    @classmethod
    def __getitem__(cls, index) -> Any: ...
    @classmethod
    def __iter__(cls, boost, std) -> Any: ...
    @classmethod
    def __len__(cls) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...
    @classmethod
    def __setitem__(cls, index, object) -> Any: ...

class RandomSampleAllBBsStrategy(EnumerationStrategyBase):
    __instance_size__: ClassVar[int] = ...
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def __copy__(cls, RDKit) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

class RandomSampleStrategy(EnumerationStrategyBase):
    __instance_size__: ClassVar[int] = ...
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def __copy__(cls, RDKit) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

class ReactionFingerprintParams:
    __instance_size__: ClassVar[int] = ...
    agentWeight: Any
    bitRatioAgents: Any
    fpSize: Any
    fpType: Any
    includeAgents: Any
    nonAgentWeight: Any
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

class SanitizeFlags:
    SANITIZE_ADJUST_REACTANTS: ClassVar[SanitizeFlags] = ...
    SANITIZE_ALL: ClassVar[SanitizeFlags] = ...
    SANITIZE_ATOM_MAPS: ClassVar[SanitizeFlags] = ...
    SANITIZE_MERGEHS: ClassVar[SanitizeFlags] = ...
    SANITIZE_NONE: ClassVar[SanitizeFlags] = ...
    SANITIZE_RGROUP_NAMES: ClassVar[SanitizeFlags] = ...
    names: ClassVar[dict] = ...
    values: ClassVar[dict] = ...
    __slots__: ClassVar[tuple] = ...

class VectMolVect:
    __instance_size__: ClassVar[int] = ...
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def append(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def extend(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def __contains__(cls, other) -> Any: ...
    @classmethod
    def __delitem__(cls, other) -> Any: ...
    @classmethod
    def __getitem__(cls, index) -> Any: ...
    @classmethod
    def __iter__(cls) -> Any: ...
    @classmethod
    def __len__(cls) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...
    @classmethod
    def __setitem__(cls, index, object) -> Any: ...

class VectSizeT:
    __instance_size__: ClassVar[int] = ...
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def append(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def extend(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def __contains__(cls, other) -> Any: ...
    @classmethod
    def __delitem__(cls, other) -> Any: ...
    @classmethod
    def __getitem__(cls, index) -> Any: ...
    @classmethod
    def __iter__(cls, boost, std) -> Any: ...
    @classmethod
    def __len__(cls) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...
    @classmethod
    def __setitem__(cls, index, object) -> Any: ...

class VectorOfStringVectors:
    __instance_size__: ClassVar[int] = ...
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def append(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def extend(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def __contains__(cls, other) -> Any: ...
    @classmethod
    def __delitem__(cls, other) -> Any: ...
    @classmethod
    def __getitem__(cls, index) -> Any: ...
    @classmethod
    def __iter__(cls) -> Any: ...
    @classmethod
    def __len__(cls) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...
    @classmethod
    def __setitem__(cls, index, object) -> Any: ...

def Compute2DCoordsForReaction(RDKit) -> Any: ...
def CreateDifferenceFingerprintForReaction(RDKit) -> Any: ...
def CreateStructuralFingerprintForReaction(RDKit) -> Any: ...
def EnumerateLibraryCanSerialize(*args, **kwargs) -> Any: ...
def GetChemDrawRxnAdjustParams() -> Any: ...
def GetDefaultAdjustParams() -> Any: ...
def HasAgentTemplateSubstructMatch(*args, **kwargs) -> Any: ...
def HasProductTemplateSubstructMatch(*args, **kwargs) -> Any: ...
def HasReactantTemplateSubstructMatch(*args, **kwargs) -> Any: ...
def HasReactionAtomMapping(RDKit) -> Any: ...
def HasReactionSubstructMatch(*args, **kwargs) -> Any: ...
def IsReactionTemplateMoleculeAgent(RDKit, double) -> Any: ...
def MatchOnlyAtRgroupsAdjustParams() -> Any: ...
def PreprocessReaction(RDKit) -> Any: ...
def ReactionFromMolecule(RDKit) -> Any: ...
def ReactionFromPNGFile(*args, **kwargs) -> Any: ...
def ReactionFromPNGString(*args, **kwargs) -> Any: ...
def ReactionFromRxnBlock(*args, **kwargs) -> Any: ...
def ReactionFromRxnFile(*args, **kwargs) -> Any: ...
def ReactionFromSmarts(*args, **kwargs) -> Any: ...
def ReactionMetadataToPNGFile(RDKit, boost) -> Any: ...
def ReactionMetadataToPNGString(RDKit, boost) -> Any: ...
def ReactionToMolecule(RDKit) -> Any: ...
def ReactionToRxnBlock(RDKit) -> Any: ...
def ReactionToSmarts(RDKit) -> Any: ...
def ReactionToSmiles(RDKit) -> Any: ...
def ReactionToV3KRxnBlock(RDKit) -> Any: ...
def ReduceProductToSideChains(boost) -> Any: ...
def RemoveMappingNumbersFromReactions(RDKit) -> Any: ...
def SanitizeRxn(*args, **kwargs) -> Any: ...
def UpdateProductsStereochemistry(RDKit) -> Any: ...
