# CONFIDENTIAL. (C) 2017 OpenEye Scientific Software Inc.
# All rights reserved.
# 
# ALL SOFTWARE BELOW IS PROPRIETARY AND CONFIDENTIAL TO OPENEYE
# SCIENTIFIC SOFTWARE INC., AND IS SUBJECT TO THE FULL PROTECTION OF
# COPYRIGHT AND TRADESECRET LAW.
# Copying or modifying this software is strictly prohibited and illegal.
# Using this software without a valid license from OpenEye is strictly
# prohibited and illegal.  De-obfuscating, de-minimizing, or any other
# attempt to reverse engineer or discover the workings of this software,
# is strictly prohibited. Even if software is exposed or visible, it is
# still proprietary and confidential and the above prohibitions apply.
# This software is NOT "Sample Code". For purposes of customization or
# interoperation with other software you must use Sample Code
# specifically labeled as such.
# Please contact OpenEye at eyesopen.com/legal if you have any questions
# about this warning.


# This file was automatically generated by SWIG (http://www.swig.org).
# Version 4.0.2
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.

from sys import version_info as _swig_python_version_info
if _swig_python_version_info < (2, 7, 0):
    raise RuntimeError("Python 2.7 or later required")


def swig_import_helper():
    from os.path import dirname
    import importlib.util

    spec = importlib.machinery.PathFinder().find_spec("_oechem", [dirname(__file__)])

    if spec is None:
        # OpenEye Import Statements
        spec = importlib.machinery.PathFinder().find_spec("libs",[dirname(__file__)])
    libs = importlib.util.module_from_spec(spec)

    import sys
    sys.modules[spec.name] = libs
    spec.loader.exec_module(libs)

    assert not sys.platform.startswith('win')

    _oemedchem = libs.OEGetModule('_oemedchem1141')
    return _oemedchem

_oemedchem = swig_import_helper()
del swig_import_helper

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

def _swig_repr(self):
    try:
        strthis = "proxy of " + self.this.__repr__()
    except __builtin__.Exception:
        strthis = ""
    return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)


def _swig_setattr_nondynamic_instance_variable(set):
    def set_instance_attr(self, name, value):
        if name == "thisown":
            self.this.own(value)
        elif name == "this":
            set(self, name, value)
        elif hasattr(self, name) and isinstance(getattr(type(self), name), property):
            set(self, name, value)
        else:
            raise AttributeError("You cannot add instance attributes to %s" % self)
    return set_instance_attr


def _swig_setattr_nondynamic_class_variable(set):
    def set_class_attr(cls, name, value):
        if hasattr(cls, name) and not isinstance(getattr(cls, name), property):
            set(cls, name, value)
        else:
            raise AttributeError("You cannot add class attributes to %s" % cls)
    return set_class_attr


def _swig_add_metaclass(metaclass):
    """Class decorator for adding a metaclass to a SWIG wrapped class - a slimmed down version of six.add_metaclass"""
    def wrapper(cls):
        return metaclass(cls.__name__, cls.__bases__, cls.__dict__.copy())
    return wrapper


class _SwigNonDynamicMeta(type):
    """Meta class to enforce nondynamic attributes (no new attributes) for a class"""
    __setattr__ = _swig_setattr_nondynamic_class_variable(type.__setattr__)


import weakref


def GetMainDict() -> "PyObject *":
    return _oemedchem.GetMainDict()

def TypeToPyString(type: "void const *") -> "PyObject *":
    return _oemedchem.TypeToPyString(type)
class OEInternalFunctionPointer(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _oemedchem.OEInternalFunctionPointer_swiginit(self, _oemedchem.new_OEInternalFunctionPointer(*args))

    def Add(self, b: "OEBase", tag: "unsigned int", data: "PyObject *") -> "bool":
        return _oemedchem.OEInternalFunctionPointer_Add(self, b, tag, data)
    __swig_destroy__ = _oemedchem.delete_OEInternalFunctionPointer

# Register OEInternalFunctionPointer in _oemedchem:
_oemedchem.OEInternalFunctionPointer_swigregister(OEInternalFunctionPointer)


def OEInternalGetGenericData(type: "void const *") -> "OEInternalFunctionPointer *":
    return _oemedchem.OEInternalGetGenericData(type)

def __no_op(*args) -> "void":
    return _oemedchem.__no_op(*args)
OEMatchedPairContext_Undefined = _oemedchem.OEMatchedPairContext_Undefined
OEMatchedPairContext_AllBonds = _oemedchem.OEMatchedPairContext_AllBonds
OEMatchedPairContext_Bond0 = _oemedchem.OEMatchedPairContext_Bond0
OEMatchedPairContext_Bond1 = _oemedchem.OEMatchedPairContext_Bond1
OEMatchedPairContext_Bond2 = _oemedchem.OEMatchedPairContext_Bond2
OEMatchedPairContext_Bond3 = _oemedchem.OEMatchedPairContext_Bond3

OEMatchedPairContext_DEFAULT = OEMatchedPairContext_Bond1


OEMatchedPairContext_Default = OEMatchedPairContext_DEFAULT

OEMatchedPairProcessor_Undefined = _oemedchem.OEMatchedPairProcessor_Undefined
OEMatchedPairProcessor_HussainRea = _oemedchem.OEMatchedPairProcessor_HussainRea
OEMatchedPairProcessor_BemisMurcko = _oemedchem.OEMatchedPairProcessor_BemisMurcko
OEMatchedPairProcessor_Custom = _oemedchem.OEMatchedPairProcessor_Custom

OEMatchedPairProcessor_DEFAULT = OEMatchedPairProcessor_HussainRea


OEMatchedPairProcessor_Default = OEMatchedPairProcessor_DEFAULT

OEMatchedPairOptions_SingleCuts = _oemedchem.OEMatchedPairOptions_SingleCuts
OEMatchedPairOptions_DoubleCuts = _oemedchem.OEMatchedPairOptions_DoubleCuts
OEMatchedPairOptions_TripleCuts = _oemedchem.OEMatchedPairOptions_TripleCuts
OEMatchedPairOptions_ComboCuts = _oemedchem.OEMatchedPairOptions_ComboCuts
OEMatchedPairOptions_AllCuts = _oemedchem.OEMatchedPairOptions_AllCuts
OEMatchedPairOptions_UniquesOnly = _oemedchem.OEMatchedPairOptions_UniquesOnly
OEMatchedPairOptions_IndexHSites = _oemedchem.OEMatchedPairOptions_IndexHSites
OEMatchedPairOptions_ExportCompression = _oemedchem.OEMatchedPairOptions_ExportCompression
OEMatchedPairOptions_ExportHKeys = _oemedchem.OEMatchedPairOptions_ExportHKeys
OEMatchedPairOptions_IndexHSingleCuts = _oemedchem.OEMatchedPairOptions_IndexHSingleCuts
OEMatchedPairOptions_ValidFragIndexOpts = _oemedchem.OEMatchedPairOptions_ValidFragIndexOpts

OEMatchedPairOptions_ValidIndexOpts = OEMatchedPairOptions_ValidFragIndexOpts|OEMatchedPairOptions_UniquesOnly

OEMatchedPairOptions_ValidAlterOpts = _oemedchem.OEMatchedPairOptions_ValidAlterOpts

OEMatchedPairOptions_ValidOptions = OEMatchedPairOptions_ValidFragIndexOpts|OEMatchedPairOptions_UniquesOnly|OEMatchedPairOptions_ValidAlterOpts

OEMatchedPairOptions_DEFAULT = _oemedchem.OEMatchedPairOptions_DEFAULT

OEMatchedPairOptions_Default = OEMatchedPairOptions_DEFAULT


OEMatchedPairOptions_DefaultFragIndex = OEMatchedPairOptions_AllCuts|OEMatchedPairOptions_IndexHSites

OEMatchedPairIndexStatus_NoError = _oemedchem.OEMatchedPairIndexStatus_NoError
OEMatchedPairIndexStatus_Unspecified = _oemedchem.OEMatchedPairIndexStatus_Unspecified
OEMatchedPairIndexStatus_FragmentationLimitFilter = _oemedchem.OEMatchedPairIndexStatus_FragmentationLimitFilter
OEMatchedPairIndexStatus_HeavyAtomFilter = _oemedchem.OEMatchedPairIndexStatus_HeavyAtomFilter
OEMatchedPairIndexStatus_FragmentRangeFilter = _oemedchem.OEMatchedPairIndexStatus_FragmentRangeFilter
OEMatchedPairIndexStatus_DataFilter = _oemedchem.OEMatchedPairIndexStatus_DataFilter
OEMatchedPairIndexStatus_DuplicateStructure = _oemedchem.OEMatchedPairIndexStatus_DuplicateStructure
OEMatchedPairIndexStatus_DuplicateRecordID = _oemedchem.OEMatchedPairIndexStatus_DuplicateRecordID
OEMatchedPairIndexStatus_NoStructure = _oemedchem.OEMatchedPairIndexStatus_NoStructure
OEMatchedPairIndexStatus_CopyMolError = _oemedchem.OEMatchedPairIndexStatus_CopyMolError
OEMatchedPairIndexStatus_ProcessorError = _oemedchem.OEMatchedPairIndexStatus_ProcessorError
OEMatchedPairIndexStatus_ProcessorFilter = _oemedchem.OEMatchedPairIndexStatus_ProcessorFilter
OEMatchedPairIndexStatus_Deactivated = _oemedchem.OEMatchedPairIndexStatus_Deactivated
OEMatchedPairIndexStatus_NoFragmentationBonds = _oemedchem.OEMatchedPairIndexStatus_NoFragmentationBonds
OEMatchedPairIndexStatus_IncompatibleOptions = _oemedchem.OEMatchedPairIndexStatus_IncompatibleOptions
OEMatchedPairIndexStatus_BinaryIOError = _oemedchem.OEMatchedPairIndexStatus_BinaryIOError
OEMatchedPairTransformExtractMode_Unspecified = _oemedchem.OEMatchedPairTransformExtractMode_Unspecified
OEMatchedPairTransformExtractMode_Forward = _oemedchem.OEMatchedPairTransformExtractMode_Forward
OEMatchedPairTransformExtractMode_Backward = _oemedchem.OEMatchedPairTransformExtractMode_Backward
OEMatchedPairTransformExtractMode_NoSMARTS = _oemedchem.OEMatchedPairTransformExtractMode_NoSMARTS
OEMatchedPairTransformExtractMode_NoIsotopes = _oemedchem.OEMatchedPairTransformExtractMode_NoIsotopes
OEMatchedPairTransformExtractMode_Sorted = _oemedchem.OEMatchedPairTransformExtractMode_Sorted
OEMatchedPairTransformExtractMode_NoMatchedPairs = _oemedchem.OEMatchedPairTransformExtractMode_NoMatchedPairs
OEMatchedPairTransformExtractMode_NoMatchedPairData = _oemedchem.OEMatchedPairTransformExtractMode_NoMatchedPairData
OEMatchedPairTransformExtractMode_AddAttachmentPts = _oemedchem.OEMatchedPairTransformExtractMode_AddAttachmentPts
OEMatchedPairTransformExtractMode_AddMCSCorrespondence = _oemedchem.OEMatchedPairTransformExtractMode_AddMCSCorrespondence
OEMatchedPairTransformExtractMode_SuppressNodeSort = _oemedchem.OEMatchedPairTransformExtractMode_SuppressNodeSort
OEMatchedPairTransformExtractMode_SubstLimitSkip = _oemedchem.OEMatchedPairTransformExtractMode_SubstLimitSkip

OEMatchedPairTransformExtractMode_DEFAULT = OEMatchedPairTransformExtractMode_Forward|OEMatchedPairTransformExtractMode_Backward


OEMatchedPairTransformExtractMode_Default = OEMatchedPairTransformExtractMode_DEFAULT

OEMatchedPairTransformExtractMode_ValidOptions = _oemedchem.OEMatchedPairTransformExtractMode_ValidOptions
OEMatchedPairAnalyzerFileType_UNDEFINED = _oemedchem.OEMatchedPairAnalyzerFileType_UNDEFINED
OEMatchedPairAnalyzerFileType_MMPIndex = _oemedchem.OEMatchedPairAnalyzerFileType_MMPIndex
OEMatchedPairAnalyzerFileType_MCSFrags = _oemedchem.OEMatchedPairAnalyzerFileType_MCSFrags
OEMatchedPairIndexSetup_ProcessorType = _oemedchem.OEMatchedPairIndexSetup_ProcessorType
OEMatchedPairIndexSetup_BondFragLimit = _oemedchem.OEMatchedPairIndexSetup_BondFragLimit
OEMatchedPairIndexSetup_HeavyAtomLimit = _oemedchem.OEMatchedPairIndexSetup_HeavyAtomLimit
OEMatchedPairIndexSetup_FragMinMaxRange = _oemedchem.OEMatchedPairIndexSetup_FragMinMaxRange
OEMatchedPairIndexSetup_FragmentationCuts = _oemedchem.OEMatchedPairIndexSetup_FragmentationCuts
OEMatchedPairIndexSetup_IndexHydrogenSites = _oemedchem.OEMatchedPairIndexSetup_IndexHydrogenSites
OEMatchedPairIndexSetup_IndexHydrogenSingleCuts = _oemedchem.OEMatchedPairIndexSetup_IndexHydrogenSingleCuts
OEMatchedPairIndexSetup_UniquesOnly = _oemedchem.OEMatchedPairIndexSetup_UniquesOnly
OEMatchedPairIndexSetup_AllFrags = _oemedchem.OEMatchedPairIndexSetup_AllFrags
OEMatchedPairIndexSetup_All = _oemedchem.OEMatchedPairIndexSetup_All
OERegionType_Ring = _oemedchem.OERegionType_Ring
OERegionType_Linker = _oemedchem.OERegionType_Linker
OERegionType_Framework = _oemedchem.OERegionType_Framework
OERegionType_Sidechain = _oemedchem.OERegionType_Sidechain
OERegionType_All = _oemedchem.OERegionType_All
OEMCSScoreType_Undefined = _oemedchem.OEMCSScoreType_Undefined
OEMCSScoreType_AtomCount = _oemedchem.OEMCSScoreType_AtomCount
OEMCSScoreType_BondCount = _oemedchem.OEMCSScoreType_BondCount

OEMCSScoreType_Default = OEMCSScoreType_AtomCount

import openeye.oechem as oechem

def OEGetRingValue(mol: "OEMolBase") -> "float":
    r"""OEGetRingValue(OEMolBase mol) -> float"""
    return _oemedchem.OEGetRingValue(mol)

def OECreateIDString(m: "OEMolBase") -> "std::string":
    r"""OECreateIDString(OEMolBase m) -> std::string"""
    return _oemedchem.OECreateIDString(m)

def OECreateIDStrings(mol: "OEMolBase") -> "OESystem::OEIterBase< std::string const > *":
    r"""OECreateIDStrings(OEMolBase mol) -> OESystem::OEIterBase< std::string const > *"""
    return _oemedchem.OECreateIDStrings(mol)

def OECalculateComboBelief(combo: "float") -> "float":
    r"""OECalculateComboBelief(float combo) -> float"""
    return _oemedchem.OECalculateComboBelief(combo)

def OECalculateETComboBelief(etcombo: "float") -> "float":
    r"""OECalculateETComboBelief(float etcombo) -> float"""
    return _oemedchem.OECalculateETComboBelief(etcombo)

def OEDetermineRingComplexity(mol: "OEMolBase") -> "float":
    r"""OEDetermineRingComplexity(OEMolBase mol) -> float"""
    return _oemedchem.OEDetermineRingComplexity(mol)

def OEDetermineMolecularComplexity(mol: "OEMolBase") -> "float":
    r"""OEDetermineMolecularComplexity(OEMolBase mol) -> float"""
    return _oemedchem.OEDetermineMolecularComplexity(mol)

def OENormalMolecularComplexity(mol: "OEMolBase") -> "float":
    r"""OENormalMolecularComplexity(OEMolBase mol) -> float"""
    return _oemedchem.OENormalMolecularComplexity(mol)

def OEDetermineElementalComplexity(mol: "OEMolBase") -> "float":
    r"""OEDetermineElementalComplexity(OEMolBase mol) -> float"""
    return _oemedchem.OEDetermineElementalComplexity(mol)

def OEDetermineSymmetryComplexity(mol: "OEMolBase") -> "float":
    r"""OEDetermineSymmetryComplexity(OEMolBase mol) -> float"""
    return _oemedchem.OEDetermineSymmetryComplexity(mol)

def OEDetermineConnectiveComplexity(mol: "OEMolBase") -> "float":
    r"""OEDetermineConnectiveComplexity(OEMolBase mol) -> float"""
    return _oemedchem.OEDetermineConnectiveComplexity(mol)

def OEDetermineStereoComplexity(mol: "OEMolBase") -> "float":
    r"""OEDetermineStereoComplexity(OEMolBase mol) -> float"""
    return _oemedchem.OEDetermineStereoComplexity(mol)

def OENormalStereoComplexity(mol: "OEMolBase") -> "float":
    r"""OENormalStereoComplexity(OEMolBase mol) -> float"""
    return _oemedchem.OENormalStereoComplexity(mol)

def OETotalMolecularComplexity(mol: "OEMolBase") -> "float":
    r"""OETotalMolecularComplexity(OEMolBase mol) -> float"""
    return _oemedchem.OETotalMolecularComplexity(mol)

def no_op(arg1: "OEMolBaseIter") -> "void":
    r"""no_op(OEMolBaseIter arg1)"""
    return _oemedchem.no_op(arg1)
class OEMatchedPairAnalyzerOptions(object):
    r"""Proxy of C++ OEMedChem::OEMatchedPairAnalyzerOptions class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        __init__(OEMatchedPairAnalyzerOptions self, unsigned int processorType=) -> OEMatchedPairAnalyzerOptions
        __init__(OEMatchedPairAnalyzerOptions self, OEMatchedPairAnalyzerOptions rhs) -> OEMatchedPairAnalyzerOptions
        """
        _oemedchem.OEMatchedPairAnalyzerOptions_swiginit(self, _oemedchem.new_OEMatchedPairAnalyzerOptions(*args))
    __swig_destroy__ = _oemedchem.delete_OEMatchedPairAnalyzerOptions

    def __eq__(self, rhs: "OEMatchedPairAnalyzerOptions") -> "bool":
        r"""__eq__(OEMatchedPairAnalyzerOptions self, OEMatchedPairAnalyzerOptions rhs) -> bool"""
        return _oemedchem.OEMatchedPairAnalyzerOptions___eq__(self, rhs)

    def SetProcessorType(self, *args) -> "bool":
        r"""SetProcessorType(OEMatchedPairAnalyzerOptions self, unsigned int processorType=) -> bool"""
        return _oemedchem.OEMatchedPairAnalyzerOptions_SetProcessorType(self, *args)

    def GetProcessorType(self) -> "unsigned int":
        r"""GetProcessorType(OEMatchedPairAnalyzerOptions self) -> unsigned int"""
        return _oemedchem.OEMatchedPairAnalyzerOptions_GetProcessorType(self)

    def SetMaxAtomFilter(self, numAtoms: "unsigned int") -> "bool":
        r"""SetMaxAtomFilter(OEMatchedPairAnalyzerOptions self, unsigned int numAtoms) -> bool"""
        return _oemedchem.OEMatchedPairAnalyzerOptions_SetMaxAtomFilter(self, numAtoms)

    def GetMaxAtomFilter(self) -> "unsigned int":
        r"""GetMaxAtomFilter(OEMatchedPairAnalyzerOptions self) -> unsigned int"""
        return _oemedchem.OEMatchedPairAnalyzerOptions_GetMaxAtomFilter(self)

    def SetFragmentationLimit(self, limit: "unsigned int") -> "bool":
        r"""SetFragmentationLimit(OEMatchedPairAnalyzerOptions self, unsigned int limit) -> bool"""
        return _oemedchem.OEMatchedPairAnalyzerOptions_SetFragmentationLimit(self, limit)

    def GetFragmentationLimit(self) -> "unsigned int":
        r"""GetFragmentationLimit(OEMatchedPairAnalyzerOptions self) -> unsigned int"""
        return _oemedchem.OEMatchedPairAnalyzerOptions_GetFragmentationLimit(self)

    def HasIndexableFragmentHeavyAtomRange(self) -> "bool":
        r"""HasIndexableFragmentHeavyAtomRange(OEMatchedPairAnalyzerOptions self) -> bool"""
        return _oemedchem.OEMatchedPairAnalyzerOptions_HasIndexableFragmentHeavyAtomRange(self)

    def SetIndexableFragmentRange(self, minHeavyAtomPercent: "float", maxHeavyAtomPercent: "float") -> "bool":
        r"""SetIndexableFragmentRange(OEMatchedPairAnalyzerOptions self, float minHeavyAtomPercent, float maxHeavyAtomPercent) -> bool"""
        return _oemedchem.OEMatchedPairAnalyzerOptions_SetIndexableFragmentRange(self, minHeavyAtomPercent, maxHeavyAtomPercent)

    def GetIndexableFragmentRangeMin(self) -> "float":
        r"""GetIndexableFragmentRangeMin(OEMatchedPairAnalyzerOptions self) -> float"""
        return _oemedchem.OEMatchedPairAnalyzerOptions_GetIndexableFragmentRangeMin(self)

    def GetIndexableFragmentRangeMax(self) -> "float":
        r"""GetIndexableFragmentRangeMax(OEMatchedPairAnalyzerOptions self) -> float"""
        return _oemedchem.OEMatchedPairAnalyzerOptions_GetIndexableFragmentRangeMax(self)

    def ClearIndexableFragmentRange(self) -> "void":
        r"""ClearIndexableFragmentRange(OEMatchedPairAnalyzerOptions self)"""
        return _oemedchem.OEMatchedPairAnalyzerOptions_ClearIndexableFragmentRange(self)

    def SetOptions(self, opts: "unsigned int") -> "bool":
        r"""SetOptions(OEMatchedPairAnalyzerOptions self, unsigned int opts) -> bool"""
        return _oemedchem.OEMatchedPairAnalyzerOptions_SetOptions(self, opts)

    def GetOptions(self) -> "unsigned int":
        r"""GetOptions(OEMatchedPairAnalyzerOptions self) -> unsigned int"""
        return _oemedchem.OEMatchedPairAnalyzerOptions_GetOptions(self)

    def ModifyOptions(self, addopts: "unsigned int", delopts: "unsigned int") -> "bool":
        r"""ModifyOptions(OEMatchedPairAnalyzerOptions self, unsigned int addopts, unsigned int delopts) -> bool"""
        return _oemedchem.OEMatchedPairAnalyzerOptions_ModifyOptions(self, addopts, delopts)

    def GetImpl(self, *args) -> "OEMedChem::OEMatchedPairOptionsImpl *":
        r"""
        GetImpl(OEMatchedPairAnalyzerOptions self) -> OEMedChem::OEMatchedPairOptionsImpl const
        GetImpl(OEMatchedPairAnalyzerOptions self) -> OEMedChem::OEMatchedPairOptionsImpl *
        """
        return _oemedchem.OEMatchedPairAnalyzerOptions_GetImpl(self, *args)

# Register OEMatchedPairAnalyzerOptions in _oemedchem:
_oemedchem.OEMatchedPairAnalyzerOptions_swigregister(OEMatchedPairAnalyzerOptions)

class OEMatchedPairTransformExtractOptions(object):
    r"""Proxy of C++ OEMedChem::OEMatchedPairTransformExtractOptions class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        __init__(OEMatchedPairTransformExtractOptions self, int context=, unsigned int options=) -> OEMatchedPairTransformExtractOptions
        __init__(OEMatchedPairTransformExtractOptions self, OEMatchedPairTransformExtractOptions rhs) -> OEMatchedPairTransformExtractOptions
        """
        _oemedchem.OEMatchedPairTransformExtractOptions_swiginit(self, _oemedchem.new_OEMatchedPairTransformExtractOptions(*args))
    __swig_destroy__ = _oemedchem.delete_OEMatchedPairTransformExtractOptions

    def __eq__(self, rhs: "OEMatchedPairTransformExtractOptions") -> "bool":
        r"""__eq__(OEMatchedPairTransformExtractOptions self, OEMatchedPairTransformExtractOptions rhs) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions___eq__(self, rhs)

    def SetContext(self, context: "int") -> "bool":
        r"""SetContext(OEMatchedPairTransformExtractOptions self, int context) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_SetContext(self, context)

    def GetContext(self) -> "int":
        r"""GetContext(OEMatchedPairTransformExtractOptions self) -> int"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_GetContext(self)

    def SetDirection(self, direction: "unsigned int") -> "bool":
        r"""SetDirection(OEMatchedPairTransformExtractOptions self, unsigned int direction) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_SetDirection(self, direction)

    def GetDirection(self) -> "unsigned int":
        r"""GetDirection(OEMatchedPairTransformExtractOptions self) -> unsigned int"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_GetDirection(self)

    def SetSMARTS(self, val: "bool") -> "bool":
        r"""SetSMARTS(OEMatchedPairTransformExtractOptions self, bool val) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_SetSMARTS(self, val)

    def GetSMARTS(self) -> "bool":
        r"""GetSMARTS(OEMatchedPairTransformExtractOptions self) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_GetSMARTS(self)

    def SetIsotopes(self, val: "bool") -> "bool":
        r"""SetIsotopes(OEMatchedPairTransformExtractOptions self, bool val) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_SetIsotopes(self, val)

    def GetIsotopes(self) -> "bool":
        r"""GetIsotopes(OEMatchedPairTransformExtractOptions self) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_GetIsotopes(self)

    def SetMatchedPairs(self, val: "bool") -> "bool":
        r"""SetMatchedPairs(OEMatchedPairTransformExtractOptions self, bool val) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_SetMatchedPairs(self, val)

    def GetMatchedPairs(self) -> "bool":
        r"""GetMatchedPairs(OEMatchedPairTransformExtractOptions self) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_GetMatchedPairs(self)

    def SetMatchedPairData(self, val: "bool") -> "bool":
        r"""SetMatchedPairData(OEMatchedPairTransformExtractOptions self, bool val) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_SetMatchedPairData(self, val)

    def GetMatchedPairData(self) -> "bool":
        r"""GetMatchedPairData(OEMatchedPairTransformExtractOptions self) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_GetMatchedPairData(self)

    def SetAttachmentPoints(self, val: "bool") -> "bool":
        r"""SetAttachmentPoints(OEMatchedPairTransformExtractOptions self, bool val) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_SetAttachmentPoints(self, val)

    def GetAttachmentPoints(self) -> "bool":
        r"""GetAttachmentPoints(OEMatchedPairTransformExtractOptions self) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_GetAttachmentPoints(self)

    def SetMCSCorrespondence(self, val: "bool") -> "bool":
        r"""SetMCSCorrespondence(OEMatchedPairTransformExtractOptions self, bool val) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_SetMCSCorrespondence(self, val)

    def GetMCSCorrespondence(self) -> "bool":
        r"""GetMCSCorrespondence(OEMatchedPairTransformExtractOptions self) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_GetMCSCorrespondence(self)

    def SetOptions(self, opts: "unsigned int") -> "bool":
        r"""SetOptions(OEMatchedPairTransformExtractOptions self, unsigned int opts) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_SetOptions(self, opts)

    def GetOptions(self) -> "unsigned int":
        r"""GetOptions(OEMatchedPairTransformExtractOptions self) -> unsigned int"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_GetOptions(self)

    def SetMMPLimit(self, atLeast: "unsigned int", atMost: "unsigned int"=0) -> "bool":
        r"""SetMMPLimit(OEMatchedPairTransformExtractOptions self, unsigned int atLeast, unsigned int atMost=0) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_SetMMPLimit(self, atLeast, atMost)

    def GetMinMMPLimit(self) -> "unsigned int":
        r"""GetMinMMPLimit(OEMatchedPairTransformExtractOptions self) -> unsigned int"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_GetMinMMPLimit(self)

    def GetMaxMMPLimit(self) -> "unsigned int":
        r"""GetMaxMMPLimit(OEMatchedPairTransformExtractOptions self) -> unsigned int"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_GetMaxMMPLimit(self)

    def SetSubstituentLimit(self, atLeast: "unsigned int", atMost: "unsigned int"=0) -> "bool":
        r"""SetSubstituentLimit(OEMatchedPairTransformExtractOptions self, unsigned int atLeast, unsigned int atMost=0) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_SetSubstituentLimit(self, atLeast, atMost)

    def GetMinSubstituentLimit(self) -> "unsigned int":
        r"""GetMinSubstituentLimit(OEMatchedPairTransformExtractOptions self) -> unsigned int"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_GetMinSubstituentLimit(self)

    def GetMaxSubstituentLimit(self) -> "unsigned int":
        r"""GetMaxSubstituentLimit(OEMatchedPairTransformExtractOptions self) -> unsigned int"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_GetMaxSubstituentLimit(self)

    def SetMaxSubstituentLimitSkip(self, val: "bool") -> "bool":
        r"""SetMaxSubstituentLimitSkip(OEMatchedPairTransformExtractOptions self, bool val) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_SetMaxSubstituentLimitSkip(self, val)

    def GetMaxSubstituentLimitSkip(self) -> "bool":
        r"""GetMaxSubstituentLimitSkip(OEMatchedPairTransformExtractOptions self) -> bool"""
        return _oemedchem.OEMatchedPairTransformExtractOptions_GetMaxSubstituentLimitSkip(self)

# Register OEMatchedPairTransformExtractOptions in _oemedchem:
_oemedchem.OEMatchedPairTransformExtractOptions_swigregister(OEMatchedPairTransformExtractOptions)


def OEMatchedPairContextName(context: "int") -> "char const *":
    r"""OEMatchedPairContextName(int context) -> char const *"""
    return _oemedchem.OEMatchedPairContextName(context)

def OEMatchedPairContextType(sContextname: "std::string const &") -> "int":
    r"""OEMatchedPairContextType(std::string const & sContextname) -> int"""
    return _oemedchem.OEMatchedPairContextType(sContextname)

def OEMatchedPairProcessorName(proctype: "unsigned int") -> "char const *":
    r"""OEMatchedPairProcessorName(unsigned int proctype) -> char const *"""
    return _oemedchem.OEMatchedPairProcessorName(proctype)

def OEMatchedPairProcessorType(sProctype: "std::string const &") -> "unsigned int":
    r"""OEMatchedPairProcessorType(std::string const & sProctype) -> unsigned int"""
    return _oemedchem.OEMatchedPairProcessorType(sProctype)

def OEMatchedPairOptionsName(option: "unsigned int") -> "char const *":
    r"""OEMatchedPairOptionsName(unsigned int option) -> char const *"""
    return _oemedchem.OEMatchedPairOptionsName(option)

def OEMatchedPairOptionsType(sOption: "std::string const &") -> "unsigned int":
    r"""OEMatchedPairOptionsType(std::string const & sOption) -> unsigned int"""
    return _oemedchem.OEMatchedPairOptionsType(sOption)

def OEMatchedPairIndexStatusName(status: "int") -> "char const *":
    r"""OEMatchedPairIndexStatusName(int status) -> char const *"""
    return _oemedchem.OEMatchedPairIndexStatusName(status)

def OEMatchedPairIndexStatusType(sinput: "std::string const &") -> "int":
    r"""OEMatchedPairIndexStatusType(std::string const & sinput) -> int"""
    return _oemedchem.OEMatchedPairIndexStatusType(sinput)
class OEMatchedPairAnalyzer(object):
    r"""Proxy of C++ OEMedChem::OEMatchedPairAnalyzer class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""__init__(OEMatchedPairAnalyzer self, OEMatchedPairAnalyzerOptions opts=OEMedChem::OEMatchedPairAnalyzerOptions()) -> OEMatchedPairAnalyzer"""
        _oemedchem.OEMatchedPairAnalyzer_swiginit(self, _oemedchem.new_OEMatchedPairAnalyzer(*args))
    __swig_destroy__ = _oemedchem.delete_OEMatchedPairAnalyzer

    def GetOptions(self) -> "OEMedChem::OEMatchedPairAnalyzerOptions const &":
        r"""GetOptions(OEMatchedPairAnalyzer self) -> OEMatchedPairAnalyzerOptions"""
        return _oemedchem.OEMatchedPairAnalyzer_GetOptions(self)

    def ModifyOptions(self, addopts: "unsigned int", delopts: "unsigned int") -> "bool":
        r"""ModifyOptions(OEMatchedPairAnalyzer self, unsigned int addopts, unsigned int delopts) -> bool"""
        return _oemedchem.OEMatchedPairAnalyzer_ModifyOptions(self, addopts, delopts)

    def GetProcessorType(self) -> "unsigned int":
        r"""GetProcessorType(OEMatchedPairAnalyzer self) -> unsigned int"""
        return _oemedchem.OEMatchedPairAnalyzer_GetProcessorType(self)

    def GetProcessorID(self) -> "char const *":
        r"""GetProcessorID(OEMatchedPairAnalyzer self) -> char const *"""
        return _oemedchem.OEMatchedPairAnalyzer_GetProcessorID(self)

    def NumMols(self) -> "unsigned int":
        r"""NumMols(OEMatchedPairAnalyzer self) -> unsigned int"""
        return _oemedchem.OEMatchedPairAnalyzer_NumMols(self)

    def NumIndexNodes(self) -> "unsigned int":
        r"""NumIndexNodes(OEMatchedPairAnalyzer self) -> unsigned int"""
        return _oemedchem.OEMatchedPairAnalyzer_NumIndexNodes(self)

    def NumMatchedPairs(self) -> "unsigned int":
        r"""NumMatchedPairs(OEMatchedPairAnalyzer self) -> unsigned int"""
        return _oemedchem.OEMatchedPairAnalyzer_NumMatchedPairs(self)

    def GetMaxMolIdx(self) -> "unsigned int":
        r"""GetMaxMolIdx(OEMatchedPairAnalyzer self) -> unsigned int"""
        return _oemedchem.OEMatchedPairAnalyzer_GetMaxMolIdx(self)

    def IsIndexed(self, recID: "unsigned int") -> "bool":
        r"""IsIndexed(OEMatchedPairAnalyzer self, unsigned int recID) -> bool"""
        return _oemedchem.OEMatchedPairAnalyzer_IsIndexed(self, recID)

    def GetMolecule(self, mol: "OEMolBase", recID: "unsigned int", includeData: "bool"=True) -> "bool":
        r"""GetMolecule(OEMatchedPairAnalyzer self, OEMolBase mol, unsigned int recID, bool includeData=True) -> bool"""
        return _oemedchem.OEMatchedPairAnalyzer_GetMolecule(self, mol, recID, includeData)

    def AddMol(self, *args) -> "int":
        r"""AddMol(OEMatchedPairAnalyzer self, OEMolBase inmol, int recID=(-1)) -> int"""
        return _oemedchem.OEMatchedPairAnalyzer_AddMol(self, *args)

# Register OEMatchedPairAnalyzer in _oemedchem:
_oemedchem.OEMatchedPairAnalyzer_swigregister(OEMatchedPairAnalyzer)


def OEMatchedPairApplyTransforms(*args) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
    r"""OEMatchedPairApplyTransforms(OEMolBase mol, OEMatchedPairAnalyzer mmp, int context=, unsigned int requireNumPairs=0) -> OESystem::OEIterBase< OEChem::OEMolBase >"""
    return _oemedchem.OEMatchedPairApplyTransforms(*args)

def OEApplyChEMBL18SolubilityTransforms(*args) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
    r"""OEApplyChEMBL18SolubilityTransforms(OEMolBase input, int context=, unsigned int requireNumPairs=5) -> OESystem::OEIterBase< OEChem::OEMolBase >"""
    return _oemedchem.OEApplyChEMBL18SolubilityTransforms(*args)

def OEApplyChEMBL24SolubilityTransforms(*args) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
    r"""OEApplyChEMBL24SolubilityTransforms(OEMolBase input, int context=, unsigned int requireNumPairs=5) -> OESystem::OEIterBase< OEChem::OEMolBase >"""
    return _oemedchem.OEApplyChEMBL24SolubilityTransforms(*args)

def OEGetMatchedPairAnalyzerFileType(extn: "char const *") -> "unsigned int":
    r"""OEGetMatchedPairAnalyzerFileType(char const * extn) -> unsigned int"""
    return _oemedchem.OEGetMatchedPairAnalyzerFileType(extn)

def OEIsMatchedPairAnalyzerFileType(*args) -> "bool":
    r"""
    OEIsMatchedPairAnalyzerFileType(unsigned int type) -> bool
    OEIsMatchedPairAnalyzerFileType(std::string const & filename) -> bool
    """
    return _oemedchem.OEIsMatchedPairAnalyzerFileType(*args)

def OEIsReadableMatchedPairAnalyzer(*args) -> "bool":
    r"""
    OEIsReadableMatchedPairAnalyzer(unsigned int type) -> bool
    OEIsReadableMatchedPairAnalyzer(std::string const & filename) -> bool
    """
    return _oemedchem.OEIsReadableMatchedPairAnalyzer(*args)

def OEIsWriteableMatchedPairAnalyzer(*args) -> "bool":
    r"""
    OEIsWriteableMatchedPairAnalyzer(unsigned int type) -> bool
    OEIsWriteableMatchedPairAnalyzer(std::string const & filename) -> bool
    """
    return _oemedchem.OEIsWriteableMatchedPairAnalyzer(*args)

def OEReadMatchedPairAnalyzer(*args) -> "bool":
    r"""
    OEReadMatchedPairAnalyzer(std::string const & fname, OEMatchedPairAnalyzer mmpindex, bool enableMerge=False, bool regenHKeys=False) -> bool
    OEReadMatchedPairAnalyzer(oeistream ifs, OEMatchedPairAnalyzer mmpindex, bool enableMerge=False, bool regenHKeys=False) -> bool
    """
    return _oemedchem.OEReadMatchedPairAnalyzer(*args)

def OEWriteMatchedPairAnalyzer(*args) -> "bool":
    r"""
    OEWriteMatchedPairAnalyzer(std::string const & fname, OEMatchedPairAnalyzer mmpindex) -> bool
    OEWriteMatchedPairAnalyzer(oeostream ofs, OEMatchedPairAnalyzer mmpindex) -> bool
    """
    return _oemedchem.OEWriteMatchedPairAnalyzer(*args)

def OEWriteMMPIndexMolecules(*args) -> "int":
    r"""
    OEWriteMMPIndexMolecules(oeostream ofs, unsigned int recID, OEMolBase inmol, OEMatchedPairAnalyzer mmpindex, bool initStream=False) -> int
    OEWriteMMPIndexMolecules(std::string & fragbytes, unsigned int recID, OEMolBase inmol, OEMatchedPairAnalyzer mmpindex, bool writeHeader=False) -> int
    """
    return _oemedchem.OEWriteMMPIndexMolecules(*args)

def OEReadMMPIndexMolecules(*args) -> "bool":
    r"""
    OEReadMMPIndexMolecules(oeistream ifs, OEMatchedPairAnalyzer mmpindex, bool regenHKeys=False) -> bool
    OEReadMMPIndexMolecules(std::string const & fragbytes, OEMatchedPairAnalyzer mmpindex, bool regenHKeys=False) -> bool
    """
    return _oemedchem.OEReadMMPIndexMolecules(*args)

def OEGetMatchedMolecularPairs(*args) -> "OESystem::OEIterBase< OEMedChem::OEMatchedPair > *":
    r"""
    OEGetMatchedMolecularPairs(OEMatchedPairAnalyzer mmpindex, unsigned int molID, OEMatchedPairTransformExtractOptions extractOpts=OEMedChem::OEMatchedPairTransformExtractOptions()) -> OESystem::OEIterBase< OEMedChem::OEMatchedPair >
    OEGetMatchedMolecularPairs(OEMatchedPairAnalyzer mmpindex, OEMolBase probe, OEAtomBondSet probeAttachSites, OEMatchedPairTransformExtractOptions extractOpts=OEMedChem::OEMatchedPairTransformExtractOptions()) -> OESystem::OEIterBase< OEMedChem::OEMatchedPair >
    """
    return _oemedchem.OEGetMatchedMolecularPairs(*args)

def OEWriteMMPIndexMoleculesToBytes(recID: "unsigned int", inmol: "OEMolBase", mmpindex: "OEMatchedPairAnalyzer", writeHeader: "bool"=True) -> "PyObject *":
    r"""OEWriteMMPIndexMoleculesToBytes(unsigned int recID, OEMolBase inmol, OEMatchedPairAnalyzer mmpindex, bool writeHeader=True) -> PyObject"""
    return _oemedchem.OEWriteMMPIndexMoleculesToBytes(recID, inmol, mmpindex, writeHeader)

def OEReadMMPIndexMoleculesFromBytes(bytes: "PyObject *", mmpindex: "OEMatchedPairAnalyzer", regenHKeys: "bool"=False) -> "PyObject *":
    r"""OEReadMMPIndexMoleculesFromBytes(PyObject * bytes, OEMatchedPairAnalyzer mmpindex, bool regenHKeys=False) -> PyObject"""
    return _oemedchem.OEReadMMPIndexMoleculesFromBytes(bytes, mmpindex, regenHKeys)
class OEMCSFragDatabaseOptions(object):
    r"""Proxy of C++ OEMedChem::OEMCSFragDatabaseOptions class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        __init__(OEMCSFragDatabaseOptions self, OEMCSFragDatabaseOptions arg2) -> OEMCSFragDatabaseOptions
        __init__(OEMCSFragDatabaseOptions self) -> OEMCSFragDatabaseOptions
        """
        _oemedchem.OEMCSFragDatabaseOptions_swiginit(self, _oemedchem.new_OEMCSFragDatabaseOptions(*args))
    __swig_destroy__ = _oemedchem.delete_OEMCSFragDatabaseOptions

    def SetMaxAtomFilter(self, numAtoms: "unsigned int") -> "bool":
        r"""SetMaxAtomFilter(OEMCSFragDatabaseOptions self, unsigned int numAtoms) -> bool"""
        return _oemedchem.OEMCSFragDatabaseOptions_SetMaxAtomFilter(self, numAtoms)

    def GetMaxAtomFilter(self) -> "unsigned int":
        r"""GetMaxAtomFilter(OEMCSFragDatabaseOptions self) -> unsigned int"""
        return _oemedchem.OEMCSFragDatabaseOptions_GetMaxAtomFilter(self)

    def SetFragmentationLimit(self, limit: "unsigned int") -> "bool":
        r"""SetFragmentationLimit(OEMCSFragDatabaseOptions self, unsigned int limit) -> bool"""
        return _oemedchem.OEMCSFragDatabaseOptions_SetFragmentationLimit(self, limit)

    def GetFragmentationLimit(self) -> "unsigned int":
        r"""GetFragmentationLimit(OEMCSFragDatabaseOptions self) -> unsigned int"""
        return _oemedchem.OEMCSFragDatabaseOptions_GetFragmentationLimit(self)

    def HasIndexableFragmentHeavyAtomRange(self) -> "bool":
        r"""HasIndexableFragmentHeavyAtomRange(OEMCSFragDatabaseOptions self) -> bool"""
        return _oemedchem.OEMCSFragDatabaseOptions_HasIndexableFragmentHeavyAtomRange(self)

    def SetIndexableFragmentRange(self, minHeavyAtomPercent: "float", maxHeavyAtomPercent: "float") -> "bool":
        r"""SetIndexableFragmentRange(OEMCSFragDatabaseOptions self, float minHeavyAtomPercent, float maxHeavyAtomPercent) -> bool"""
        return _oemedchem.OEMCSFragDatabaseOptions_SetIndexableFragmentRange(self, minHeavyAtomPercent, maxHeavyAtomPercent)

    def GetIndexableFragmentRangeMin(self) -> "float":
        r"""GetIndexableFragmentRangeMin(OEMCSFragDatabaseOptions self) -> float"""
        return _oemedchem.OEMCSFragDatabaseOptions_GetIndexableFragmentRangeMin(self)

    def GetIndexableFragmentRangeMax(self) -> "float":
        r"""GetIndexableFragmentRangeMax(OEMCSFragDatabaseOptions self) -> float"""
        return _oemedchem.OEMCSFragDatabaseOptions_GetIndexableFragmentRangeMax(self)

    def ClearIndexableFragmentRange(self) -> "void":
        r"""ClearIndexableFragmentRange(OEMCSFragDatabaseOptions self)"""
        return _oemedchem.OEMCSFragDatabaseOptions_ClearIndexableFragmentRange(self)

    def SetOptions(self, opts: "unsigned int") -> "bool":
        r"""SetOptions(OEMCSFragDatabaseOptions self, unsigned int opts) -> bool"""
        return _oemedchem.OEMCSFragDatabaseOptions_SetOptions(self, opts)

    def GetOptions(self) -> "unsigned int":
        r"""GetOptions(OEMCSFragDatabaseOptions self) -> unsigned int"""
        return _oemedchem.OEMCSFragDatabaseOptions_GetOptions(self)

    def SetFragLimits(self, minval: "unsigned int", maxval: "unsigned int") -> "bool":
        r"""SetFragLimits(OEMCSFragDatabaseOptions self, unsigned int minval, unsigned int maxval) -> bool"""
        return _oemedchem.OEMCSFragDatabaseOptions_SetFragLimits(self, minval, maxval)

    def GetMinFragLimit(self) -> "unsigned int":
        r"""GetMinFragLimit(OEMCSFragDatabaseOptions self) -> unsigned int"""
        return _oemedchem.OEMCSFragDatabaseOptions_GetMinFragLimit(self)

    def GetMaxFragLimit(self) -> "unsigned int":
        r"""GetMaxFragLimit(OEMCSFragDatabaseOptions self) -> unsigned int"""
        return _oemedchem.OEMCSFragDatabaseOptions_GetMaxFragLimit(self)

    def SetRingFragLimit(self, val: "unsigned int") -> "bool":
        r"""SetRingFragLimit(OEMCSFragDatabaseOptions self, unsigned int val) -> bool"""
        return _oemedchem.OEMCSFragDatabaseOptions_SetRingFragLimit(self, val)

    def GetRingFragLimit(self) -> "unsigned int":
        r"""GetRingFragLimit(OEMCSFragDatabaseOptions self) -> unsigned int"""
        return _oemedchem.OEMCSFragDatabaseOptions_GetRingFragLimit(self)

    def __eq__(self, rhs: "OEMCSFragDatabaseOptions") -> "bool":
        r"""__eq__(OEMCSFragDatabaseOptions self, OEMCSFragDatabaseOptions rhs) -> bool"""
        return _oemedchem.OEMCSFragDatabaseOptions___eq__(self, rhs)

# Register OEMCSFragDatabaseOptions in _oemedchem:
_oemedchem.OEMCSFragDatabaseOptions_swigregister(OEMCSFragDatabaseOptions)

class OEMCSMolSimScore(object):
    r"""Proxy of C++ OEMedChem::OEMCSMolSimScore class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        __init__(OEMCSMolSimScore self) -> OEMCSMolSimScore
        __init__(OEMCSMolSimScore self, unsigned int i, double s, std::string const & sc) -> OEMCSMolSimScore
        __init__(OEMCSMolSimScore self, OEMCSMolSimScore ref) -> OEMCSMolSimScore
        """
        _oemedchem.OEMCSMolSimScore_swiginit(self, _oemedchem.new_OEMCSMolSimScore(*args))

    def GetIdx(self) -> "unsigned int":
        r"""GetIdx(OEMCSMolSimScore self) -> unsigned int"""
        return _oemedchem.OEMCSMolSimScore_GetIdx(self)

    def GetScore(self) -> "double":
        r"""GetScore(OEMCSMolSimScore self) -> double"""
        return _oemedchem.OEMCSMolSimScore_GetScore(self)

    def GetMCSCore(self) -> "std::string":
        r"""GetMCSCore(OEMCSMolSimScore self) -> std::string"""
        return _oemedchem.OEMCSMolSimScore_GetMCSCore(self)

    def Set(self, i: "unsigned int", s: "double", core: "std::string const &") -> "void":
        r"""Set(OEMCSMolSimScore self, unsigned int i, double s, std::string const & core)"""
        return _oemedchem.OEMCSMolSimScore_Set(self, i, s, core)
    idx = property(_oemedchem.OEMCSMolSimScore_idx_get, _oemedchem.OEMCSMolSimScore_idx_set, doc=r"""idx : unsigned int""")
    score = property(_oemedchem.OEMCSMolSimScore_score_get, _oemedchem.OEMCSMolSimScore_score_set, doc=r"""score : double""")
    mcscore = property(_oemedchem.OEMCSMolSimScore_mcscore_get, _oemedchem.OEMCSMolSimScore_mcscore_set, doc=r"""mcscore : std::string""")
    __swig_destroy__ = _oemedchem.delete_OEMCSMolSimScore

# Register OEMCSMolSimScore in _oemedchem:
_oemedchem.OEMCSMolSimScore_swigregister(OEMCSMolSimScore)

class OEMCSSimFuncBase(object):
    r"""Proxy of C++ OEMedChem::OEMCSSimFuncBase class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self):
        r"""__init__(OEMCSSimFuncBase self) -> OEMCSSimFuncBase"""
        if self.__class__ == OEMCSSimFuncBase:
            _self = None
        else:
            _self = self
        _oemedchem.OEMCSSimFuncBase_swiginit(self, _oemedchem.new_OEMCSSimFuncBase(_self, ))
    __swig_destroy__ = _oemedchem.delete_OEMCSSimFuncBase

    def __call__(self, commonAB: "unsigned int", totalA: "unsigned int", totalB: "unsigned int") -> "double":
        r"""__call__(OEMCSSimFuncBase self, unsigned int commonAB, unsigned int totalA, unsigned int totalB) -> double"""
        return _oemedchem.OEMCSSimFuncBase___call__(self, commonAB, totalA, totalB)

    def CreateCopy(self, *args):
        try:
            return _oemedchem.OEMCSSimFuncBase_CreateCopy(self, *args)
        except RuntimeError:
            try:
                return self.__class__().__disown__()
            except:
                raise RuntimeError("CreateCopy must be specialized for %s" % self.__class__.__name__)



    def GetMCSSimTypeString(self) -> "std::string":
        r"""GetMCSSimTypeString(OEMCSSimFuncBase self) -> std::string"""
        return _oemedchem.OEMCSSimFuncBase_GetMCSSimTypeString(self)
    def __disown__(self):
        self.this.disown()
        _oemedchem.disown_OEMCSSimFuncBase(self)
        return weakref.proxy(self)

# Register OEMCSSimFuncBase in _oemedchem:
_oemedchem.OEMCSSimFuncBase_swigregister(OEMCSSimFuncBase)

class OEMCSTanimotoSim(OEMCSSimFuncBase):
    r"""Proxy of C++ OEMedChem::OEMCSTanimotoSim class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self):
        r"""__init__(OEMCSTanimotoSim self) -> OEMCSTanimotoSim"""
        _oemedchem.OEMCSTanimotoSim_swiginit(self, _oemedchem.new_OEMCSTanimotoSim())

    def __call__(self, commonAB: "unsigned int", totalA: "unsigned int", totalB: "unsigned int") -> "double":
        r"""__call__(OEMCSTanimotoSim self, unsigned int commonAB, unsigned int totalA, unsigned int totalB) -> double"""
        return _oemedchem.OEMCSTanimotoSim___call__(self, commonAB, totalA, totalB)

    def CreateCopy(self, *args):
        try:
            return _oemedchem.OEMCSTanimotoSim_CreateCopy(self, *args)
        except RuntimeError:
            try:
                return self.__class__().__disown__()
            except:
                raise RuntimeError("CreateCopy must be specialized for %s" % self.__class__.__name__)



    def GetMCSSimTypeString(self) -> "std::string":
        r"""GetMCSSimTypeString(OEMCSTanimotoSim self) -> std::string"""
        return _oemedchem.OEMCSTanimotoSim_GetMCSSimTypeString(self)
    __swig_destroy__ = _oemedchem.delete_OEMCSTanimotoSim

# Register OEMCSTanimotoSim in _oemedchem:
_oemedchem.OEMCSTanimotoSim_swigregister(OEMCSTanimotoSim)

class OEMCSTverskySim(OEMCSSimFuncBase):
    r"""Proxy of C++ OEMedChem::OEMCSTverskySim class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        __init__(OEMCSTverskySim self, double tvAlpha=0.95, double tvBeta=0.05) -> OEMCSTverskySim
        __init__(OEMCSTverskySim self, OEMCSTverskySim ref) -> OEMCSTverskySim
        """
        _oemedchem.OEMCSTverskySim_swiginit(self, _oemedchem.new_OEMCSTverskySim(*args))

    def __call__(self, commonAB: "unsigned int", totalA: "unsigned int", totalB: "unsigned int") -> "double":
        r"""__call__(OEMCSTverskySim self, unsigned int commonAB, unsigned int totalA, unsigned int totalB) -> double"""
        return _oemedchem.OEMCSTverskySim___call__(self, commonAB, totalA, totalB)

    def GetAlpha(self) -> "double":
        r"""GetAlpha(OEMCSTverskySim self) -> double"""
        return _oemedchem.OEMCSTverskySim_GetAlpha(self)

    def GetBeta(self) -> "double":
        r"""GetBeta(OEMCSTverskySim self) -> double"""
        return _oemedchem.OEMCSTverskySim_GetBeta(self)

    def CreateCopy(self, *args):
        try:
            return _oemedchem.OEMCSTverskySim_CreateCopy(self, *args)
        except RuntimeError:
            try:
                return self.__class__().__disown__()
            except:
                raise RuntimeError("CreateCopy must be specialized for %s" % self.__class__.__name__)



    def GetMCSSimTypeString(self) -> "std::string":
        r"""GetMCSSimTypeString(OEMCSTverskySim self) -> std::string"""
        return _oemedchem.OEMCSTverskySim_GetMCSSimTypeString(self)
    __swig_destroy__ = _oemedchem.delete_OEMCSTverskySim

# Register OEMCSTverskySim in _oemedchem:
_oemedchem.OEMCSTverskySim_swigregister(OEMCSTverskySim)

class OEMCSFragDatabase(object):
    r"""Proxy of C++ OEMedChem::OEMCSFragDatabase class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""__init__(OEMCSFragDatabase self, OEMCSFragDatabaseOptions opts=OEMedChem::OEMCSFragDatabaseOptions()) -> OEMCSFragDatabase"""
        _oemedchem.OEMCSFragDatabase_swiginit(self, _oemedchem.new_OEMCSFragDatabase(*args))
    __swig_destroy__ = _oemedchem.delete_OEMCSFragDatabase

    def AddConstMol(self, *args) -> "int":
        r"""AddConstMol(OEMCSFragDatabase self, OEMolBase inmol, int recID=(-1)) -> int"""
        return _oemedchem.OEMCSFragDatabase_AddConstMol(self, *args)

    def AddMol(self, *args) -> "int":
        r"""AddMol(OEMCSFragDatabase self, OEMolBase inmol, int recID=(-1)) -> int"""
        return _oemedchem.OEMCSFragDatabase_AddMol(self, *args)

    def ProcessMol(self, inmol: "OEMolBase") -> "int":
        r"""ProcessMol(OEMCSFragDatabase self, OEMolBase inmol) -> int"""
        return _oemedchem.OEMCSFragDatabase_ProcessMol(self, inmol)

    def GetScores(self, *args) -> "OESystem::OEIterBase< OEMedChem::OEMCSMolSimScore > *":
        r"""GetScores(OEMCSFragDatabase self, OEMolBase query, unsigned int bgn=0, unsigned int end=0, unsigned int scorecounts=, OEMCSSimFuncBase scorefn=OEMedChem::OEMCSTanimotoSim()) -> OESystem::OEIterBase< OEMedChem::OEMCSMolSimScore >"""
        return _oemedchem.OEMCSFragDatabase_GetScores(self, *args)

    def GetSortedScores(self, *args) -> "OESystem::OEIterBase< OEMedChem::OEMCSMolSimScore > *":
        r"""GetSortedScores(OEMCSFragDatabase self, OEMolBase query, unsigned int limit=0, unsigned int bgn=0, unsigned int end=0, bool descending=True, unsigned int scorecounts=, OEMCSSimFuncBase scorefn=OEMedChem::OEMCSTanimotoSim()) -> OESystem::OEIterBase< OEMedChem::OEMCSMolSimScore >"""
        return _oemedchem.OEMCSFragDatabase_GetSortedScores(self, *args)

    def CoreToMolecules(self, core: "std::string const &") -> "OESystem::OEIterBase< unsigned int > *":
        r"""CoreToMolecules(OEMCSFragDatabase self, std::string const & core) -> OESystem::OEIterBase< unsigned int > *"""
        return _oemedchem.OEMCSFragDatabase_CoreToMolecules(self, core)

    def MoleculeToCores(self, mol: "OEMolBase", permuteFragments: "bool"=True) -> "OESystem::OEIterBase< std::string const > *":
        r"""MoleculeToCores(OEMCSFragDatabase self, OEMolBase mol, bool permuteFragments=True) -> OESystem::OEIterBase< std::string const >"""
        return _oemedchem.OEMCSFragDatabase_MoleculeToCores(self, mol, permuteFragments)

    def GetOptions(self) -> "OEMedChem::OEMCSFragDatabaseOptions const &":
        r"""GetOptions(OEMCSFragDatabase self) -> OEMCSFragDatabaseOptions"""
        return _oemedchem.OEMCSFragDatabase_GetOptions(self)

    def NumMols(self) -> "unsigned int":
        r"""NumMols(OEMCSFragDatabase self) -> unsigned int"""
        return _oemedchem.OEMCSFragDatabase_NumMols(self)

    def NumFragments(self) -> "unsigned int":
        r"""NumFragments(OEMCSFragDatabase self) -> unsigned int"""
        return _oemedchem.OEMCSFragDatabase_NumFragments(self)

    def GetMaxMolIdx(self) -> "unsigned int":
        r"""GetMaxMolIdx(OEMCSFragDatabase self) -> unsigned int"""
        return _oemedchem.OEMCSFragDatabase_GetMaxMolIdx(self)

    def ClearIndexedMols(self) -> "void":
        r"""ClearIndexedMols(OEMCSFragDatabase self)"""
        return _oemedchem.OEMCSFragDatabase_ClearIndexedMols(self)

    def IsIndexed(self, recID: "unsigned int") -> "bool":
        r"""IsIndexed(OEMCSFragDatabase self, unsigned int recID) -> bool"""
        return _oemedchem.OEMCSFragDatabase_IsIndexed(self, recID)

    def CoreToMoleculeCount(self, core: "std::string const &") -> "unsigned int":
        r"""CoreToMoleculeCount(OEMCSFragDatabase self, std::string const & core) -> unsigned int"""
        return _oemedchem.OEMCSFragDatabase_CoreToMoleculeCount(self, core)

    def GetMaxCoreMoleculeCount(self) -> "unsigned int":
        r"""GetMaxCoreMoleculeCount(OEMCSFragDatabase self) -> unsigned int"""
        return _oemedchem.OEMCSFragDatabase_GetMaxCoreMoleculeCount(self)

    def GetMaxCoreMolecule(self, *args) -> "std::string":
        r"""GetMaxCoreMolecule(OEMCSFragDatabase self, char const delim='.') -> std::string"""
        return _oemedchem.OEMCSFragDatabase_GetMaxCoreMolecule(self, *args)

# Register OEMCSFragDatabase in _oemedchem:
_oemedchem.OEMCSFragDatabase_swigregister(OEMCSFragDatabase)


def OEIsMCSFragDatabaseFiletype(*args) -> "bool":
    r"""
    OEIsMCSFragDatabaseFiletype(unsigned int type) -> bool
    OEIsMCSFragDatabaseFiletype(std::string const & filename) -> bool
    """
    return _oemedchem.OEIsMCSFragDatabaseFiletype(*args)

def OEIsMCSFragDatabaseFileType(*args) -> "bool":
    r"""
    OEIsMCSFragDatabaseFileType(unsigned int type) -> bool
    OEIsMCSFragDatabaseFileType(std::string const & filename) -> bool
    """
    return _oemedchem.OEIsMCSFragDatabaseFileType(*args)

def OEReadMCSFragDatabase(*args) -> "bool":
    r"""
    OEReadMCSFragDatabase(std::string const & fname, OEMCSFragDatabase mcsfragdb, bool enableMerge=False) -> bool
    OEReadMCSFragDatabase(oeistream ifs, OEMCSFragDatabase mcsfragdb, bool enableMerge=False) -> bool
    """
    return _oemedchem.OEReadMCSFragDatabase(*args)

def OEWriteMCSFragDatabase(*args) -> "bool":
    r"""
    OEWriteMCSFragDatabase(std::string const & fname, OEMCSFragDatabase mcsfragdb) -> bool
    OEWriteMCSFragDatabase(oeostream ofs, OEMCSFragDatabase mcsfragdb) -> bool
    """
    return _oemedchem.OEWriteMCSFragDatabase(*args)

def OEMoleculeToCores(mol: "OEMolBase", fragopts: "OEMCSFragDatabaseOptions", permuteFragments: "bool"=True) -> "OESystem::OEIterBase< std::string const > *":
    r"""OEMoleculeToCores(OEMolBase mol, OEMCSFragDatabaseOptions fragopts, bool permuteFragments=True) -> OESystem::OEIterBase< std::string const >"""
    return _oemedchem.OEMoleculeToCores(mol, fragopts, permuteFragments)
class OEMCSMolSimScoreIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEMedChem::OEMCSMolSimScore > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        __init__(OEMCSMolSimScoreIter self) -> OEMCSMolSimScoreIter
        __init__(OEMCSMolSimScoreIter self, OEMCSMolSimScoreIter rhs) -> OEMCSMolSimScoreIter
        __init__(OEMCSMolSimScoreIter self, OESystem::OEIterBase< OEMedChem::OEMCSMolSimScore > * rhs) -> OEMCSMolSimScoreIter
        __init__(OEMCSMolSimScoreIter self, OESystem::OEIterBase< OESystem::OEIter< OEMedChem::OEMCSMolSimScore >::NonConstA > * rhs) -> OEMCSMolSimScoreIter
        """
        _oemedchem.OEMCSMolSimScoreIter_swiginit(self, _oemedchem.new_OEMCSMolSimScoreIter(*args))
    __swig_destroy__ = _oemedchem.delete_OEMCSMolSimScoreIter

    def Copy(self) -> "OESystem::OEIterBase< OEMedChem::OEMCSMolSimScore > *":
        r"""Copy(OEMCSMolSimScoreIter self) -> OESystem::OEIterBase< OEMedChem::OEMCSMolSimScore > *"""
        return _oemedchem.OEMCSMolSimScoreIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEMCSMolSimScoreIter self, OESystem::OEIterBase< OEMedChem::OEMCSMolSimScore > * ib)
        Push(OEMCSMolSimScoreIter self, OEMCSMolSimScoreIter iter)
        """
        return _oemedchem.OEMCSMolSimScoreIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEMedChem::OEMCSMolSimScore,OEMedChem::OEMCSMolSimScore > const &") -> "void":
        r"""Sort(OEMCSMolSimScoreIter self, OESystem::OEBinaryPredicate< OEMedChem::OEMCSMolSimScore,OEMedChem::OEMCSMolSimScore > const & sort_criterion)"""
        return _oemedchem.OEMCSMolSimScoreIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEMedChem::OEMCSMolSimScore > &":
        r"""ToFirst(OEMCSMolSimScoreIter self) -> OEMCSMolSimScoreIter"""
        return _oemedchem.OEMCSMolSimScoreIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEMedChem::OEMCSMolSimScore > &":
        r"""ToLast(OEMCSMolSimScoreIter self) -> OEMCSMolSimScoreIter"""
        return _oemedchem.OEMCSMolSimScoreIter_ToLast(self)

    def __ref__(self) -> "OEMedChem::OEMCSMolSimScore &":
        r"""__ref__(OEMCSMolSimScoreIter self) -> OEMCSMolSimScore"""
        return _oemedchem.OEMCSMolSimScoreIter___ref__(self)

    def IsValid(self):
      return _oemedchem.OEMCSMolSimScoreIter___nonzero__(self)



    def __iter__(self):
        while self.IsValid():
            ret = self.Target()
            ret._itr = self
            yield ret
            self.Next()



    def next(self) -> "PyObject *":
        r"""next(OEMCSMolSimScoreIter self) -> PyObject *"""
        return _oemedchem.OEMCSMolSimScoreIter_next(self)

    def Target(self) -> "OEMedChem::OEMCSMolSimScore &":
        r"""Target(OEMCSMolSimScoreIter self) -> OEMCSMolSimScore"""
        return _oemedchem.OEMCSMolSimScoreIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEMedChem::OEMCSMolSimScore > &":
        r"""
        Next(OEMCSMolSimScoreIter self) -> OEMCSMolSimScoreIter
        Next(OEMCSMolSimScoreIter self, int i) -> OEMCSMolSimScoreIter
        """
        return _oemedchem.OEMCSMolSimScoreIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEMedChem::OEMCSMolSimScore > &":
        r"""
        Prev(OEMCSMolSimScoreIter self) -> OEMCSMolSimScoreIter
        Prev(OEMCSMolSimScoreIter self, int i) -> OEMCSMolSimScoreIter
        """
        return _oemedchem.OEMCSMolSimScoreIter_Prev(self, *args)

# Register OEMCSMolSimScoreIter in _oemedchem:
_oemedchem.OEMCSMolSimScoreIter_swigregister(OEMCSMolSimScoreIter)


def GetSWIG_NewPointerObj(*args) -> "PyObject *":
    r"""
    GetSWIG_NewPointerObj(arg, owned) -> PyObject
    GetSWIG_NewPointerObj(OEAtomBase arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEBondBase arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEMolBase arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEConfBase arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OETransBase arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OENbrs arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEAltLocation arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEAltGroup arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OESequenceAlignment arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OERole arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEResidue arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(std::string & arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OERotamer arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OETorsion arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEColor arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEColorStop arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEGroupBase arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEAtomBondSet arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OESubSearch arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEInteractionHintTypeBase arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEInteractionHint arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OESphere arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEReceptorProteinConstraint arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEReceptorConstraintFeature arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEHierResidue arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEHierFragment arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEHierChain arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEPlaceHydrogensMoverNote arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEAnnotation arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEFuzzy arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEMCSMolSimScore arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEMatchedPairTransform arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEMatchedPair arg, bool owned) -> PyObject *
    """
    return _oemedchem.GetSWIG_NewPointerObj(*args)

def OEMCSFragDatabaseCoreQuery(bytes: "PyObject *") -> "PyObject *":
    r"""OEMCSFragDatabaseCoreQuery(PyObject * bytes) -> PyObject *"""
    return _oemedchem.OEMCSFragDatabaseCoreQuery(bytes)
class OEMatchedPair(object):
    r"""Proxy of C++ OEMedChem::OEMatchedPair class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        __init__(OEMatchedPair self, OEMatchedPair rhs) -> OEMatchedPair
        __init__(OEMatchedPair self, unsigned int fromIndex=0, unsigned int toIndex=0, char const * fromSmiles=None, char const * toSmiles=None) -> OEMatchedPair
        """
        _oemedchem.OEMatchedPair_swiginit(self, _oemedchem.new_OEMatchedPair(*args))
    __swig_destroy__ = _oemedchem.delete_OEMatchedPair

    def CreateCopy(self) -> "OEMedChem::OEMatchedPair *":
        r"""CreateCopy(OEMatchedPair self) -> OEMatchedPair"""
        return _oemedchem.OEMatchedPair_CreateCopy(self)

    def FromIndex(self) -> "unsigned int":
        r"""FromIndex(OEMatchedPair self) -> unsigned int"""
        return _oemedchem.OEMatchedPair_FromIndex(self)

    def FromSmiles(self) -> "std::string const &":
        r"""FromSmiles(OEMatchedPair self) -> std::string const &"""
        return _oemedchem.OEMatchedPair_FromSmiles(self)

    def ToIndex(self) -> "unsigned int":
        r"""ToIndex(OEMatchedPair self) -> unsigned int"""
        return _oemedchem.OEMatchedPair_ToIndex(self)

    def ToSmiles(self) -> "std::string const &":
        r"""ToSmiles(OEMatchedPair self) -> std::string const &"""
        return _oemedchem.OEMatchedPair_ToSmiles(self)

    def NumDataTags(self) -> "unsigned int":
        r"""NumDataTags(OEMatchedPair self) -> unsigned int"""
        return _oemedchem.OEMatchedPair_NumDataTags(self)

    def GetDataTags(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetDataTags(OEMatchedPair self) -> OESystem::OEIterBase< std::string const > *"""
        return _oemedchem.OEMatchedPair_GetDataTags(self)

    def ClearSDData(self) -> "void":
        r"""ClearSDData(OEMatchedPair self)"""
        return _oemedchem.OEMatchedPair_ClearSDData(self)

    def HasSDData(self, tag: "std::string const &") -> "bool":
        r"""HasSDData(OEMatchedPair self, std::string const & tag) -> bool"""
        return _oemedchem.OEMatchedPair_HasSDData(self, tag)

    def GetFromSDData(self, tag: "std::string const &") -> "std::string":
        r"""GetFromSDData(OEMatchedPair self, std::string const & tag) -> std::string"""
        return _oemedchem.OEMatchedPair_GetFromSDData(self, tag)

    def GetToSDData(self, tag: "std::string const &") -> "std::string":
        r"""GetToSDData(OEMatchedPair self, std::string const & tag) -> std::string"""
        return _oemedchem.OEMatchedPair_GetToSDData(self, tag)

    def AddSDData(self, tag: "std::string const &", fromValue: "std::string const &", toValue: "std::string const &") -> "bool":
        r"""AddSDData(OEMatchedPair self, std::string const & tag, std::string const & fromValue, std::string const & toValue) -> bool"""
        return _oemedchem.OEMatchedPair_AddSDData(self, tag, fromValue, toValue)

# Register OEMatchedPair in _oemedchem:
_oemedchem.OEMatchedPair_swigregister(OEMatchedPair)

class OEMatchedPairTransform(object):
    r"""Proxy of C++ OEMedChem::OEMatchedPairTransform class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        __init__(OEMatchedPairTransform self) -> OEMatchedPairTransform
        __init__(OEMatchedPairTransform self, std::string const & xformstr, int context=) -> OEMatchedPairTransform
        __init__(OEMatchedPairTransform self, std::string const & ForwardXForm, std::string const & ReverseXForm, int context=) -> OEMatchedPairTransform
        __init__(OEMatchedPairTransform self, OEMatchedPairTransform rhs) -> OEMatchedPairTransform
        """
        _oemedchem.OEMatchedPairTransform_swiginit(self, _oemedchem.new_OEMatchedPairTransform(*args))
    __swig_destroy__ = _oemedchem.delete_OEMatchedPairTransform

    def CreateCopy(self) -> "OEMedChem::OEMatchedPairTransform *":
        r"""CreateCopy(OEMatchedPairTransform self) -> OEMatchedPairTransform"""
        return _oemedchem.OEMatchedPairTransform_CreateCopy(self)

    def GetMatchedPairContext(self) -> "int":
        r"""GetMatchedPairContext(OEMatchedPairTransform self) -> int"""
        return _oemedchem.OEMatchedPairTransform_GetMatchedPairContext(self)

    def GetTransform(self) -> "std::string const &":
        r"""GetTransform(OEMatchedPairTransform self) -> std::string const &"""
        return _oemedchem.OEMatchedPairTransform_GetTransform(self)

    def SetTransform(self, *args) -> "bool":
        r"""
        SetTransform(OEMatchedPairTransform self, std::string const & xform, int context=) -> bool
        SetTransform(OEMatchedPairTransform self, std::string const & ForwardXForm, std::string const & ReverseXForm, int context=) -> bool
        """
        return _oemedchem.OEMatchedPairTransform_SetTransform(self, *args)

    def NumMatchedPairs(self) -> "unsigned int":
        r"""NumMatchedPairs(OEMatchedPairTransform self) -> unsigned int"""
        return _oemedchem.OEMatchedPairTransform_NumMatchedPairs(self)

    def GetMatchedPairs(self, *args) -> "OESystem::OEIterBase< OEMedChem::OEMatchedPair > *":
        r"""
        GetMatchedPairs(OEMatchedPairTransform self) -> OESystem::OEIterBase< OEMedChem::OEMatchedPair >
        GetMatchedPairs(OEMatchedPairTransform self, unsigned int FromOrToIndex) -> OESystem::OEIterBase< OEMedChem::OEMatchedPair >
        GetMatchedPairs(OEMatchedPairTransform self, unsigned int fromIndex, unsigned int toIndex) -> OESystem::OEIterBase< OEMedChem::OEMatchedPair > *
        """
        return _oemedchem.OEMatchedPairTransform_GetMatchedPairs(self, *args)

    def Invert(self) -> "bool":
        r"""Invert(OEMatchedPairTransform self) -> bool"""
        return _oemedchem.OEMatchedPairTransform_Invert(self)

    def HasMatchedPair(self, *args) -> "bool":
        r"""
        HasMatchedPair(OEMatchedPairTransform self, unsigned int FromOrToIndex) -> bool
        HasMatchedPair(OEMatchedPairTransform self, unsigned int fromIndex, unsigned int toIndex) -> bool
        """
        return _oemedchem.OEMatchedPairTransform_HasMatchedPair(self, *args)

    def AddMatchedPair(self, *args) -> "bool":
        r"""
        AddMatchedPair(OEMatchedPairTransform self, OEMatchedPair molpair) -> bool
        AddMatchedPair(OEMatchedPairTransform self, unsigned int fromIndex, std::string const & fromSmiles, unsigned int toIndex, std::string const & toSmiles) -> bool
        """
        return _oemedchem.OEMatchedPairTransform_AddMatchedPair(self, *args)

    def GetMolecule(self, molindex: "unsigned int") -> "std::string":
        r"""GetMolecule(OEMatchedPairTransform self, unsigned int molindex) -> std::string"""
        return _oemedchem.OEMatchedPairTransform_GetMolecule(self, molindex)

    def GetMoleculeTitle(self, molindex: "unsigned int") -> "std::string":
        r"""GetMoleculeTitle(OEMatchedPairTransform self, unsigned int molindex) -> std::string"""
        return _oemedchem.OEMatchedPairTransform_GetMoleculeTitle(self, molindex)

    def SetMoleculeTitle(self, molindex: "unsigned int", name: "std::string const &") -> "bool":
        r"""SetMoleculeTitle(OEMatchedPairTransform self, unsigned int molindex, std::string const & name) -> bool"""
        return _oemedchem.OEMatchedPairTransform_SetMoleculeTitle(self, molindex, name)

    def GetImpl(self, *args) -> "OEMedChem::OEMatchedPairTransformImpl *":
        r"""
        GetImpl(OEMatchedPairTransform self) -> OEMedChem::OEMatchedPairTransformImpl const
        GetImpl(OEMatchedPairTransform self) -> OEMedChem::OEMatchedPairTransformImpl *
        """
        return _oemedchem.OEMatchedPairTransform_GetImpl(self, *args)

# Register OEMatchedPairTransform in _oemedchem:
_oemedchem.OEMatchedPairTransform_swigregister(OEMatchedPairTransform)


def OEMatchedPairGetTransforms(*args) -> "OESystem::OEIterBase< OEMedChem::OEMatchedPairTransform > *":
    r"""
    OEMatchedPairGetTransforms(OEMatchedPairAnalyzer mmpindex, int context, unsigned int extractMode=) -> OESystem::OEIterBase< OEMedChem::OEMatchedPairTransform >
    OEMatchedPairGetTransforms(OEMatchedPairAnalyzer mmpindex, OEMolBase probemol, int context, unsigned int extractMode=) -> OESystem::OEIterBase< OEMedChem::OEMatchedPairTransform >
    OEMatchedPairGetTransforms(OEMatchedPairAnalyzer mmpindex, OEMatchedPairTransformExtractOptions extractOpts=OEMedChem::OEMatchedPairTransformExtractOptions()) -> OESystem::OEIterBase< OEMedChem::OEMatchedPairTransform >
    OEMatchedPairGetTransforms(OEMatchedPairAnalyzer mmpindex, OEMolBase probemol, OEMatchedPairTransformExtractOptions extractOpts=OEMedChem::OEMatchedPairTransformExtractOptions()) -> OESystem::OEIterBase< OEMedChem::OEMatchedPairTransform >
    OEMatchedPairGetTransforms(OEMatchedPairAnalyzer mmpindex, OEMolBase probemol, OEMatchedPairAnalyzerOptions fragOpts, OEMatchedPairTransformExtractOptions extractOpts=OEMedChem::OEMatchedPairTransformExtractOptions()) -> OESystem::OEIterBase< OEMedChem::OEMatchedPairTransform >
    OEMatchedPairGetTransforms(OEMatchedPairAnalyzer mmpindex, OEMolBase probemol, OEAtomBondSet probesubst, OEMatchedPairTransformExtractOptions extractOpts=OEMedChem::OEMatchedPairTransformExtractOptions()) -> OESystem::OEIterBase< OEMedChem::OEMatchedPairTransform >
    OEMatchedPairGetTransforms(OEMatchedPairAnalyzer mmpindex, OEMolBase probemol, char const * probesubstDataField, OEMatchedPairTransformExtractOptions extractOpts=OEMedChem::OEMatchedPairTransformExtractOptions()) -> OESystem::OEIterBase< OEMedChem::OEMatchedPairTransform >
    """
    return _oemedchem.OEMatchedPairGetTransforms(*args)
class OEMatchedPairTransformIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEMedChem::OEMatchedPairTransform > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        __init__(OEMatchedPairTransformIter self) -> OEMatchedPairTransformIter
        __init__(OEMatchedPairTransformIter self, OEMatchedPairTransformIter rhs) -> OEMatchedPairTransformIter
        __init__(OEMatchedPairTransformIter self, OESystem::OEIterBase< OEMedChem::OEMatchedPairTransform > * rhs) -> OEMatchedPairTransformIter
        __init__(OEMatchedPairTransformIter self, OESystem::OEIterBase< OESystem::OEIter< OEMedChem::OEMatchedPairTransform >::NonConstA > * rhs) -> OEMatchedPairTransformIter
        """
        _oemedchem.OEMatchedPairTransformIter_swiginit(self, _oemedchem.new_OEMatchedPairTransformIter(*args))
    __swig_destroy__ = _oemedchem.delete_OEMatchedPairTransformIter

    def Copy(self) -> "OESystem::OEIterBase< OEMedChem::OEMatchedPairTransform > *":
        r"""Copy(OEMatchedPairTransformIter self) -> OESystem::OEIterBase< OEMedChem::OEMatchedPairTransform > *"""
        return _oemedchem.OEMatchedPairTransformIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEMatchedPairTransformIter self, OESystem::OEIterBase< OEMedChem::OEMatchedPairTransform > * ib)
        Push(OEMatchedPairTransformIter self, OEMatchedPairTransformIter iter)
        """
        return _oemedchem.OEMatchedPairTransformIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEMedChem::OEMatchedPairTransform,OEMedChem::OEMatchedPairTransform > const &") -> "void":
        r"""Sort(OEMatchedPairTransformIter self, OESystem::OEBinaryPredicate< OEMedChem::OEMatchedPairTransform,OEMedChem::OEMatchedPairTransform > const & sort_criterion)"""
        return _oemedchem.OEMatchedPairTransformIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEMedChem::OEMatchedPairTransform > &":
        r"""ToFirst(OEMatchedPairTransformIter self) -> OEMatchedPairTransformIter"""
        return _oemedchem.OEMatchedPairTransformIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEMedChem::OEMatchedPairTransform > &":
        r"""ToLast(OEMatchedPairTransformIter self) -> OEMatchedPairTransformIter"""
        return _oemedchem.OEMatchedPairTransformIter_ToLast(self)

    def __ref__(self) -> "OEMedChem::OEMatchedPairTransform &":
        r"""__ref__(OEMatchedPairTransformIter self) -> OEMatchedPairTransform"""
        return _oemedchem.OEMatchedPairTransformIter___ref__(self)

    def IsValid(self):
      return _oemedchem.OEMatchedPairTransformIter___nonzero__(self)



    def __iter__(self):
        while self.IsValid():
            ret = self.Target()
            ret._itr = self
            yield ret
            self.Next()



    def next(self) -> "PyObject *":
        r"""next(OEMatchedPairTransformIter self) -> PyObject *"""
        return _oemedchem.OEMatchedPairTransformIter_next(self)

    def Target(self) -> "OEMedChem::OEMatchedPairTransform &":
        r"""Target(OEMatchedPairTransformIter self) -> OEMatchedPairTransform"""
        return _oemedchem.OEMatchedPairTransformIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEMedChem::OEMatchedPairTransform > &":
        r"""
        Next(OEMatchedPairTransformIter self) -> OEMatchedPairTransformIter
        Next(OEMatchedPairTransformIter self, int i) -> OEMatchedPairTransformIter
        """
        return _oemedchem.OEMatchedPairTransformIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEMedChem::OEMatchedPairTransform > &":
        r"""
        Prev(OEMatchedPairTransformIter self) -> OEMatchedPairTransformIter
        Prev(OEMatchedPairTransformIter self, int i) -> OEMatchedPairTransformIter
        """
        return _oemedchem.OEMatchedPairTransformIter_Prev(self, *args)

# Register OEMatchedPairTransformIter in _oemedchem:
_oemedchem.OEMatchedPairTransformIter_swigregister(OEMatchedPairTransformIter)

class OEMatchedPairIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEMedChem::OEMatchedPair > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        __init__(OEMatchedPairIter self) -> OEMatchedPairIter
        __init__(OEMatchedPairIter self, OEMatchedPairIter rhs) -> OEMatchedPairIter
        __init__(OEMatchedPairIter self, OESystem::OEIterBase< OEMedChem::OEMatchedPair > * rhs) -> OEMatchedPairIter
        __init__(OEMatchedPairIter self, OESystem::OEIterBase< OESystem::OEIter< OEMedChem::OEMatchedPair >::NonConstA > * rhs) -> OEMatchedPairIter
        """
        _oemedchem.OEMatchedPairIter_swiginit(self, _oemedchem.new_OEMatchedPairIter(*args))
    __swig_destroy__ = _oemedchem.delete_OEMatchedPairIter

    def Copy(self) -> "OESystem::OEIterBase< OEMedChem::OEMatchedPair > *":
        r"""Copy(OEMatchedPairIter self) -> OESystem::OEIterBase< OEMedChem::OEMatchedPair > *"""
        return _oemedchem.OEMatchedPairIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEMatchedPairIter self, OESystem::OEIterBase< OEMedChem::OEMatchedPair > * ib)
        Push(OEMatchedPairIter self, OEMatchedPairIter iter)
        """
        return _oemedchem.OEMatchedPairIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEMedChem::OEMatchedPair,OEMedChem::OEMatchedPair > const &") -> "void":
        r"""Sort(OEMatchedPairIter self, OESystem::OEBinaryPredicate< OEMedChem::OEMatchedPair,OEMedChem::OEMatchedPair > const & sort_criterion)"""
        return _oemedchem.OEMatchedPairIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEMedChem::OEMatchedPair > &":
        r"""ToFirst(OEMatchedPairIter self) -> OEMatchedPairIter"""
        return _oemedchem.OEMatchedPairIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEMedChem::OEMatchedPair > &":
        r"""ToLast(OEMatchedPairIter self) -> OEMatchedPairIter"""
        return _oemedchem.OEMatchedPairIter_ToLast(self)

    def __ref__(self) -> "OEMedChem::OEMatchedPair &":
        r"""__ref__(OEMatchedPairIter self) -> OEMatchedPair"""
        return _oemedchem.OEMatchedPairIter___ref__(self)

    def IsValid(self):
      return _oemedchem.OEMatchedPairIter___nonzero__(self)



    def __iter__(self):
        while self.IsValid():
            ret = self.Target()
            ret._itr = self
            yield ret
            self.Next()



    def next(self) -> "PyObject *":
        r"""next(OEMatchedPairIter self) -> PyObject *"""
        return _oemedchem.OEMatchedPairIter_next(self)

    def Target(self) -> "OEMedChem::OEMatchedPair &":
        r"""Target(OEMatchedPairIter self) -> OEMatchedPair"""
        return _oemedchem.OEMatchedPairIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEMedChem::OEMatchedPair > &":
        r"""
        Next(OEMatchedPairIter self) -> OEMatchedPairIter
        Next(OEMatchedPairIter self, int i) -> OEMatchedPairIter
        """
        return _oemedchem.OEMatchedPairIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEMedChem::OEMatchedPair > &":
        r"""
        Prev(OEMatchedPairIter self) -> OEMatchedPairIter
        Prev(OEMatchedPairIter self, int i) -> OEMatchedPairIter
        """
        return _oemedchem.OEMatchedPairIter_Prev(self, *args)

# Register OEMatchedPairIter in _oemedchem:
_oemedchem.OEMatchedPairIter_swigregister(OEMatchedPairIter)

class OEBemisMurckoOptions(oechem.OEOptions):
    r"""Proxy of C++ OEMedChem::OEBemisMurckoOptions class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        __init__(OEBemisMurckoOptions self) -> OEBemisMurckoOptions
        __init__(OEBemisMurckoOptions self, OEBemisMurckoOptions arg2) -> OEBemisMurckoOptions
        """
        _oemedchem.OEBemisMurckoOptions_swiginit(self, _oemedchem.new_OEBemisMurckoOptions(*args))
    __swig_destroy__ = _oemedchem.delete_OEBemisMurckoOptions

    def GetRegionType(self) -> "std::string":
        r"""GetRegionType(OEBemisMurckoOptions self) -> std::string"""
        return _oemedchem.OEBemisMurckoOptions_GetRegionType(self)

    def SetRegionType(self, value: "std::string const") -> "bool":
        r"""SetRegionType(OEBemisMurckoOptions self, std::string const value) -> bool"""
        return _oemedchem.OEBemisMurckoOptions_SetRegionType(self, value)

    def GetUnsaturatedHeteroBonds(self) -> "bool":
        r"""GetUnsaturatedHeteroBonds(OEBemisMurckoOptions self) -> bool"""
        return _oemedchem.OEBemisMurckoOptions_GetUnsaturatedHeteroBonds(self)

    def SetUnsaturatedHeteroBonds(self, value: "bool const") -> "bool":
        r"""SetUnsaturatedHeteroBonds(OEBemisMurckoOptions self, bool const value) -> bool"""
        return _oemedchem.OEBemisMurckoOptions_SetUnsaturatedHeteroBonds(self, value)

    def GetSubstituentSearch(self) -> "OEChem::OESubSearch":
        r"""GetSubstituentSearch(OEBemisMurckoOptions self) -> OESubSearch"""
        return _oemedchem.OEBemisMurckoOptions_GetSubstituentSearch(self)

    def SetSubstituentSearch(self, value: "OESubSearch") -> "bool":
        r"""SetSubstituentSearch(OEBemisMurckoOptions self, OESubSearch value) -> bool"""
        return _oemedchem.OEBemisMurckoOptions_SetSubstituentSearch(self, value)

    def CreateCopy(self) -> "OEMedChem::OEBemisMurckoOptions *":
        r"""CreateCopy(OEBemisMurckoOptions self) -> OEBemisMurckoOptions"""
        return _oemedchem.OEBemisMurckoOptions_CreateCopy(self)

    def Validate(self) -> "bool":
        r"""Validate(OEBemisMurckoOptions self) -> bool"""
        return _oemedchem.OEBemisMurckoOptions_Validate(self)

# Register OEBemisMurckoOptions in _oemedchem:
_oemedchem.OEBemisMurckoOptions_swigregister(OEBemisMurckoOptions)


def OEGetRingChainFragments(mol: "OEMolBase") -> "OESystem::OEIterBase< OEChem::OEAtomBondSet > *":
    r"""OEGetRingChainFragments(OEMolBase mol) -> OESystem::OEIterBase< OEChem::OEAtomBondSet > *"""
    return _oemedchem.OEGetRingChainFragments(mol)

def OEGetRingLinkerSideChainFragments(*args) -> "OESystem::OEIterBase< OEChem::OEAtomBondSet > *":
    r"""
    OEGetRingLinkerSideChainFragments(OEMolBase mol, OEBemisMurckoOptions options=OEMedChem::OEBemisMurckoOptions()) -> OESystem::OEIterBase< OEChem::OEAtomBondSet >
    OEGetRingLinkerSideChainFragments(OEMolBase mol, unsigned int perceiveType) -> OESystem::OEIterBase< OEChem::OEAtomBondSet > *
    """
    return _oemedchem.OEGetRingLinkerSideChainFragments(*args)

def OEGetFuncGroupFragments(mol: "OEMolBase") -> "OESystem::OEIterBase< OEChem::OEAtomBondSet > *":
    r"""OEGetFuncGroupFragments(OEMolBase mol) -> OESystem::OEIterBase< OEChem::OEAtomBondSet > *"""
    return _oemedchem.OEGetFuncGroupFragments(mol)

def OEGetRegionTypeName(regionType: "unsigned int") -> "char const *":
    r"""OEGetRegionTypeName(unsigned int regionType) -> char const *"""
    return _oemedchem.OEGetRegionTypeName(regionType)

def OEGetRegionType(regionName: "std::string const &") -> "unsigned int":
    r"""OEGetRegionType(std::string const & regionName) -> unsigned int"""
    return _oemedchem.OEGetRegionType(regionName)

def OEGetBemisMurcko(*args) -> "OESystem::OEIterBase< OEChem::OEAtomBondSet > *":
    r"""
    OEGetBemisMurcko(OEMolBase mol, unsigned int perceivetype) -> OESystem::OEIterBase< OEChem::OEAtomBondSet >
    OEGetBemisMurcko(OEMolBase mol, OEBemisMurckoOptions options=OEMedChem::OEBemisMurckoOptions()) -> OESystem::OEIterBase< OEChem::OEAtomBondSet >
    """
    return _oemedchem.OEGetBemisMurcko(*args)

def OEConfigureMatchedPairIndexOptions(*args) -> "bool":
    r"""OEConfigureMatchedPairIndexOptions(OEInterface itf, unsigned int config=) -> bool"""
    return _oemedchem.OEConfigureMatchedPairIndexOptions(*args)

def OESetupMatchedPairIndexOptions(arg1: "OEMatchedPairAnalyzerOptions", itf: "OEInterface") -> "bool":
    r"""OESetupMatchedPairIndexOptions(OEMatchedPairAnalyzerOptions arg1, OEInterface itf) -> bool"""
    return _oemedchem.OESetupMatchedPairIndexOptions(arg1, itf)

def OEConfigureMCSFragDatabaseOptions(*args) -> "bool":
    r"""OEConfigureMCSFragDatabaseOptions(OEInterface itf, unsigned int config=All) -> bool"""
    return _oemedchem.OEConfigureMCSFragDatabaseOptions(*args)

def OESetupMCSFragDatabaseOptions(arg1: "OEMCSFragDatabaseOptions", itf: "OEInterface") -> "bool":
    r"""OESetupMCSFragDatabaseOptions(OEMCSFragDatabaseOptions arg1, OEInterface itf) -> bool"""
    return _oemedchem.OESetupMCSFragDatabaseOptions(arg1, itf)
class OECreateMMPIndexOptions(object):
    r"""Proxy of C++ OEMedChem::OECreateMMPIndexOptions class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, mmpopts: "OEMatchedPairAnalyzerOptions"):
        r"""__init__(OECreateMMPIndexOptions self, OEMatchedPairAnalyzerOptions mmpopts) -> OECreateMMPIndexOptions"""
        _oemedchem.OECreateMMPIndexOptions_swiginit(self, _oemedchem.new_OECreateMMPIndexOptions(mmpopts))
    __swig_destroy__ = _oemedchem.delete_OECreateMMPIndexOptions

    def GetMMPOptions(self) -> "OEMedChem::OEMatchedPairAnalyzerOptions const &":
        r"""GetMMPOptions(OECreateMMPIndexOptions self) -> OEMatchedPairAnalyzerOptions"""
        return _oemedchem.OECreateMMPIndexOptions_GetMMPOptions(self)

    def SetNumThreads(self, nthreads: "unsigned int") -> "void":
        r"""SetNumThreads(OECreateMMPIndexOptions self, unsigned int nthreads)"""
        return _oemedchem.OECreateMMPIndexOptions_SetNumThreads(self, nthreads)

    def GetNumThreads(self) -> "unsigned int":
        r"""GetNumThreads(OECreateMMPIndexOptions self) -> unsigned int"""
        return _oemedchem.OECreateMMPIndexOptions_GetNumThreads(self)

    def SetVerbose(self, verbose: "unsigned int") -> "void":
        r"""SetVerbose(OECreateMMPIndexOptions self, unsigned int verbose)"""
        return _oemedchem.OECreateMMPIndexOptions_SetVerbose(self, verbose)

    def GetVerbose(self) -> "unsigned int":
        r"""GetVerbose(OECreateMMPIndexOptions self) -> unsigned int"""
        return _oemedchem.OECreateMMPIndexOptions_GetVerbose(self)

    def SetMaxRecord(self, maxrec: "unsigned int") -> "void":
        r"""SetMaxRecord(OECreateMMPIndexOptions self, unsigned int maxrec)"""
        return _oemedchem.OECreateMMPIndexOptions_SetMaxRecord(self, maxrec)

    def GetMaxRecord(self) -> "unsigned int":
        r"""GetMaxRecord(OECreateMMPIndexOptions self) -> unsigned int"""
        return _oemedchem.OECreateMMPIndexOptions_GetMaxRecord(self)

    def SetTracer(self, dots: "OEDots") -> "void":
        r"""SetTracer(OECreateMMPIndexOptions self, OEDots dots)"""
        return _oemedchem.OECreateMMPIndexOptions_SetTracer(self, dots)

    def GetTracer(self) -> "OESystem::OEDots const *":
        r"""GetTracer(OECreateMMPIndexOptions self) -> OEDots"""
        return _oemedchem.OECreateMMPIndexOptions_GetTracer(self)

# Register OECreateMMPIndexOptions in _oemedchem:
_oemedchem.OECreateMMPIndexOptions_swigregister(OECreateMMPIndexOptions)
cvar = _oemedchem.cvar
BondFragLimit = cvar.BondFragLimit
HeavyAtomLimit = cvar.HeavyAtomLimit
FragMinMaxRange = cvar.FragMinMaxRange
FragmentationCuts = cvar.FragmentationCuts
IndexHydrogenSites = cvar.IndexHydrogenSites
AllFrags = cvar.AllFrags
FragCutsRange = cvar.FragCutsRange
RingCuts = cvar.RingCuts
All = cvar.All

class OECreateMMPIndexStatus(object):
    r"""Proxy of C++ OEMedChem::OECreateMMPIndexStatus class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, valid: "bool"=True):
        r"""__init__(OECreateMMPIndexStatus self, bool valid=True) -> OECreateMMPIndexStatus"""
        _oemedchem.OECreateMMPIndexStatus_swiginit(self, _oemedchem.new_OECreateMMPIndexStatus(valid))
    __swig_destroy__ = _oemedchem.delete_OECreateMMPIndexStatus

    def __iadd__(self, rhs: "OECreateMMPIndexStatus") -> "OEMedChem::OECreateMMPIndexStatus &":
        r"""__iadd__(OECreateMMPIndexStatus self, OECreateMMPIndexStatus rhs) -> OECreateMMPIndexStatus"""
        return _oemedchem.OECreateMMPIndexStatus___iadd__(self, rhs)

    def SetValid(self, valid: "bool") -> "void":
        r"""SetValid(OECreateMMPIndexStatus self, bool valid)"""
        return _oemedchem.OECreateMMPIndexStatus_SetValid(self, valid)

    def IsValid(self) -> "bool":
        r"""IsValid(OECreateMMPIndexStatus self) -> bool"""
        return _oemedchem.OECreateMMPIndexStatus_IsValid(self)

    def AddUnindexedMol(self) -> "unsigned int":
        r"""AddUnindexedMol(OECreateMMPIndexStatus self) -> unsigned int"""
        return _oemedchem.OECreateMMPIndexStatus_AddUnindexedMol(self)

    def SetUnindexedMols(self, unindexed: "unsigned int") -> "void":
        r"""SetUnindexedMols(OECreateMMPIndexStatus self, unsigned int unindexed)"""
        return _oemedchem.OECreateMMPIndexStatus_SetUnindexedMols(self, unindexed)

    def GetUnindexedMols(self) -> "unsigned int":
        r"""GetUnindexedMols(OECreateMMPIndexStatus self) -> unsigned int"""
        return _oemedchem.OECreateMMPIndexStatus_GetUnindexedMols(self)

    def AddIndexedMol(self) -> "unsigned int":
        r"""AddIndexedMol(OECreateMMPIndexStatus self) -> unsigned int"""
        return _oemedchem.OECreateMMPIndexStatus_AddIndexedMol(self)

    def SetNumMols(self, nummols: "unsigned int") -> "void":
        r"""SetNumMols(OECreateMMPIndexStatus self, unsigned int nummols)"""
        return _oemedchem.OECreateMMPIndexStatus_SetNumMols(self, nummols)

    def GetNumMols(self) -> "unsigned int":
        r"""GetNumMols(OECreateMMPIndexStatus self) -> unsigned int"""
        return _oemedchem.OECreateMMPIndexStatus_GetNumMols(self)

    def GetTotalMols(self) -> "unsigned int":
        r"""GetTotalMols(OECreateMMPIndexStatus self) -> unsigned int"""
        return _oemedchem.OECreateMMPIndexStatus_GetTotalMols(self)

    def SetNumMatchedPairs(self, nummmps: "unsigned int") -> "void":
        r"""SetNumMatchedPairs(OECreateMMPIndexStatus self, unsigned int nummmps)"""
        return _oemedchem.OECreateMMPIndexStatus_SetNumMatchedPairs(self, nummmps)

    def GetNumMatchedPairs(self) -> "unsigned int":
        r"""GetNumMatchedPairs(OECreateMMPIndexStatus self) -> unsigned int"""
        return _oemedchem.OECreateMMPIndexStatus_GetNumMatchedPairs(self)

# Register OECreateMMPIndexStatus in _oemedchem:
_oemedchem.OECreateMMPIndexStatus_swigregister(OECreateMMPIndexStatus)


def OECreateMMPIndexFile(mmpdbfname: "std::string const &", molfname: "std::string const &", opts: "OECreateMMPIndexOptions") -> "OEMedChem::OECreateMMPIndexStatus":
    r"""OECreateMMPIndexFile(std::string const & mmpdbfname, std::string const & molfname, OECreateMMPIndexOptions opts) -> OECreateMMPIndexStatus"""
    return _oemedchem.OECreateMMPIndexFile(mmpdbfname, molfname, opts)
OE_OEMEDCHEM_VERSION = _oemedchem.OE_OEMEDCHEM_VERSION


def OEMedChemGetRelease() -> "char const *":
    r"""OEMedChemGetRelease() -> char const *"""
    return _oemedchem.OEMedChemGetRelease()

def OEMedChemGetVersion() -> "unsigned int":
    r"""OEMedChemGetVersion() -> unsigned int"""
    return _oemedchem.OEMedChemGetVersion()

def OEMedChemGetArch() -> "char const *":
    r"""OEMedChemGetArch() -> char const *"""
    return _oemedchem.OEMedChemGetArch()

def OEMedChemGetPlatform() -> "char const *":
    r"""OEMedChemGetPlatform() -> char const *"""
    return _oemedchem.OEMedChemGetPlatform()

def OEMedChemIsLicensed(feature: "char const *"=None, expdate: "unsigned int *"=None) -> "bool":
    r"""OEMedChemIsLicensed(char const * feature=None, unsigned int * expdate=None) -> bool"""
    return _oemedchem.OEMedChemIsLicensed(feature, expdate)

def OEMedChemGetLicensee(*args) -> "std::string":
    r"""
    OEMedChemGetLicensee(std::string & licensee) -> bool
    OEMedChemGetLicensee() -> std::string
    """
    return _oemedchem.OEMedChemGetLicensee(*args)

def OEMedChemGetSite(*args) -> "std::string":
    r"""
    OEMedChemGetSite(std::string & site) -> bool
    OEMedChemGetSite() -> std::string
    """
    return _oemedchem.OEMedChemGetSite(*args)


