from typing import Any, ClassVar

from typing import overload

class AtomCompare:
    CompareAny: ClassVar[AtomCompare] = ...
    CompareAnyHeavyAtom: ClassVar[AtomCompare] = ...
    CompareElements: ClassVar[AtomCompare] = ...
    CompareIsotopes: ClassVar[AtomCompare] = ...
    names: ClassVar[dict] = ...
    values: ClassVar[dict] = ...
    __slots__: ClassVar[tuple] = ...

class BondCompare:
    CompareAny: ClassVar[BondCompare] = ...
    CompareOrder: ClassVar[BondCompare] = ...
    CompareOrderExact: ClassVar[BondCompare] = ...
    names: ClassVar[dict] = ...
    values: ClassVar[dict] = ...
    __slots__: ClassVar[tuple] = ...

class MCSAtomCompare:
    __instance_size__: ClassVar[int] = ...
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def CheckAtomCharge(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def CheckAtomChirality(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def CheckAtomRingMatch(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def compare(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def __call__(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

class MCSAtomCompareParameters:
    __instance_size__: ClassVar[int] = ...
    CompleteRingsOnly: Any
    MatchChiralTag: Any
    MatchFormalCharge: Any
    MatchIsotope: Any
    MatchValences: Any
    MaxDistance: Any
    RingMatchesRingOnly: Any
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

class MCSBondCompare:
    __instance_size__: ClassVar[int] = ...
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def CheckBondRingMatch(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def CheckBondStereo(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def compare(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def __call__(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

class MCSBondCompareParameters:
    __instance_size__: ClassVar[int] = ...
    CompleteRingsOnly: Any
    MatchFusedRings: Any
    MatchFusedRingsStrict: Any
    MatchStereo: Any
    RingMatchesRingOnly: Any
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

class MCSParameters:
    __instance_size__: ClassVar[int] = ...
    AtomCompareParameters: Any
    AtomTyper: Any
    BondCompareParameters: Any
    BondTyper: Any
    InitialSeed: Any
    MaximizeBonds: Any
    ProgressCallback: Any
    Threshold: Any
    Timeout: Any
    Verbose: Any
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def SetAtomTyper(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def SetBondTyper(cls, *args, **kwargs) -> Any: ...
    @classmethod
    def __reduce__(cls) -> Any: ...

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

class MCSProgressData:
    __instance_size__: ClassVar[int] = ...
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def __reduce__(cls) -> Any: ...
    @property
    def numAtoms(self) -> Any: ...
    @property
    def numBonds(self) -> Any: ...
    @property
    def seedProcessed(self) -> Any: ...

class MCSResult:
    @classmethod
    def __init__(cls, *args, **kwargs) -> None: ...
    @classmethod
    def __reduce__(cls) -> Any: ...
    @property
    def canceled(self) -> Any: ...
    @property
    def numAtoms(self) -> Any: ...
    @property
    def numBonds(self) -> Any: ...
    @property
    def queryMol(self) -> Any: ...
    @property
    def smartsString(self) -> Any: ...

class RingCompare:
    IgnoreRingFusion: ClassVar[RingCompare] = ...
    PermissiveRingFusion: ClassVar[RingCompare] = ...
    StrictRingFusion: ClassVar[RingCompare] = ...
    names: ClassVar[dict] = ...
    values: ClassVar[dict] = ...
    __slots__: ClassVar[tuple] = ...

@overload
def FindMCS(boost) -> Any: ...
@overload
def FindMCS(boost, RDKit) -> Any: ...
