from typing import Any, ClassVar

from typing import overload

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

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

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

class FPHolderBase:
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def AddFingerprint(cls, RDKit, ExplicitBitVect) -> Any: ...
    @classmethod
    def AddMol(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def GetFingerprint(cls, RDKit, unsignedint) -> Any: ...
    @classmethod
    def MakeFingerprint(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def PassesFilter(cls, RDKit, unsignedint, ExplicitBitVect) -> Any: ...
    @classmethod
    def __len__(cls, RDKit) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

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

class KeyHolderBase:
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def AddKey(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def AddMol(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def GetKey(cls, RDKit, unsignedint) -> Any: ...
    @classmethod
    def GetKeys(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def __len__(cls, RDKit) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

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

class MolHolderBase:
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def AddMol(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def GetMol(cls, RDKit, unsignedint) -> Any: ...
    @classmethod
    def __len__(cls, RDKit) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

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

class SubstructLibrary:
    __instance_size__: ClassVar[int] = ...
    __safe_for_unpickling__: ClassVar[bool] = ...
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def AddMol(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def CountMatches(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def GetFpHolder(cls, RDKit) -> Any: ...
    @classmethod
    def GetKeyHolder(cls, RDKit) -> Any: ...
    @classmethod
    def GetMatches(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def GetMol(cls, RDKit, unsignedint) -> Any: ...
    @classmethod
    def GetMolHolder(cls, RDKit) -> Any: ...
    @classmethod
    def GetSearchOrder(cls, RDKit) -> Any: ...
    @classmethod
    def HasMatch(cls, *args, **kwargs) -> Any: ...
    @overload
    @classmethod
    def InitFromStream(cls, stream) -> Any: ...
    @overload
    @classmethod
    def InitFromStream(cls, f) -> Any: ...
    @overload
    @classmethod
    def InitFromStream(cls, RDKit, boost) -> Any: ...
    @classmethod
    def Serialize(cls, RDKit) -> Any: ...
    @classmethod
    def SetSearchOrder(cls, RDKit, boost) -> Any: ...
    @overload
    @classmethod
    def ToStream(cls, stream) -> Any: ...
    @overload
    @classmethod
    def ToStream(cls, RDKit, boost) -> Any: ...
    @classmethod
    def __getinitargs__(cls, RDKit) -> Any: ...
    @classmethod
    def __len__(cls, RDKit) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

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

@overload
def AddPatterns(RDKit) -> Any: ...
@overload
def AddPatterns(RDKit, boost) -> Any: ...
def SubstructLibraryCanSerialize(*args, **kwargs) -> Any: ...
