# 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 3.0.12
#
# 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

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')

    _oegraphsim = libs.OEGetModule('_oegraphsim2506')
    return _oegraphsim

_oegraphsim = swig_import_helper()
del swig_import_helper
del _swig_python_version_info

try:
    _swig_property = property
except NameError:
    pass  # Python < 2.2 doesn't have 'property'.

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

def _swig_setattr_nondynamic(self, class_type, name, value, static=1):
    if (name == "thisown"):
        return self.this.own(value)
    if (name == "this"):
        if type(value).__name__ == 'SwigPyObject':
            self.__dict__[name] = value
            return
    method = class_type.__swig_setmethods__.get(name, None)
    if method:
        return method(self, value)
    if (not static):
        object.__setattr__(self, name, value)
    else:
        raise AttributeError("You cannot add attributes to %s" % self)


def _swig_setattr(self, class_type, name, value):
    return _swig_setattr_nondynamic(self, class_type, name, value, 0)


def _swig_getattr(self, class_type, name):
    if (name == "thisown"):
        return self.this.own()
    method = class_type.__swig_getmethods__.get(name, None)
    if method:
        return method(self)
    raise AttributeError("'%s' object has no attribute '%s'" % (class_type.__name__, name))


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_method(set):
    def set_attr(self, name, value):
        if (name == "thisown"):
            return self.this.own(value)
        if hasattr(self, name) or (name == "this"):
            set(self, name, value)
        else:
            raise AttributeError("You cannot add attributes to %s" % self)
    return set_attr


try:
    import weakref
    weakref_proxy = weakref.proxy
except __builtin__.Exception:
    weakref_proxy = lambda x: x



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

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

    def __init__(self, *args):
        this = _oegraphsim.new_OEInternalFunctionPointer(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this

    def Add(self, b: 'OEBase', tag: 'unsigned int', data: 'PyObject *') -> "bool":
        return _oegraphsim.OEInternalFunctionPointer_Add(self, b, tag, data)
    __swig_destroy__ = _oegraphsim.delete_OEInternalFunctionPointer
    __del__ = lambda self: None
OEInternalFunctionPointer_swigregister = _oegraphsim.OEInternalFunctionPointer_swigregister
OEInternalFunctionPointer_swigregister(OEInternalFunctionPointer)


def OEInternalGetGenericData(type: 'void const *') -> "OEInternalFunctionPointer *":
    return _oegraphsim.OEInternalGetGenericData(type)
OEInternalGetGenericData = _oegraphsim.OEInternalGetGenericData

def __no_op(*args) -> "void":
    return _oegraphsim.__no_op(*args)
__no_op = _oegraphsim.__no_op
OEFPDatabaseOptionsSetup_Limit = _oegraphsim.OEFPDatabaseOptionsSetup_Limit
OEFPDatabaseOptionsSetup_SimFunc = _oegraphsim.OEFPDatabaseOptionsSetup_SimFunc
OEFPDatabaseOptionsSetup_Cutoff = _oegraphsim.OEFPDatabaseOptionsSetup_Cutoff
OEFPDatabaseOptionsSetup_DescendingOrder = _oegraphsim.OEFPDatabaseOptionsSetup_DescendingOrder
OEFPDatabaseOptionsSetup_All = _oegraphsim.OEFPDatabaseOptionsSetup_All
OEFPAtomType_None = _oegraphsim.OEFPAtomType_None
OEFPAtomType_All = _oegraphsim.OEFPAtomType_All
OEFPAtomType_AtomicNumber = _oegraphsim.OEFPAtomType_AtomicNumber
OEFPAtomType_Aromaticity = _oegraphsim.OEFPAtomType_Aromaticity
OEFPAtomType_Chiral = _oegraphsim.OEFPAtomType_Chiral
OEFPAtomType_FormalCharge = _oegraphsim.OEFPAtomType_FormalCharge
OEFPAtomType_HvyDegree = _oegraphsim.OEFPAtomType_HvyDegree
OEFPAtomType_Hybridization = _oegraphsim.OEFPAtomType_Hybridization
OEFPAtomType_InRing = _oegraphsim.OEFPAtomType_InRing
OEFPAtomType_HCount = _oegraphsim.OEFPAtomType_HCount
OEFPAtomType_EqHalogen = _oegraphsim.OEFPAtomType_EqHalogen
OEFPAtomType_EqAromatic = _oegraphsim.OEFPAtomType_EqAromatic
OEFPAtomType_EqHBondAcceptor = _oegraphsim.OEFPAtomType_EqHBondAcceptor
OEFPAtomType_EqHBondDonor = _oegraphsim.OEFPAtomType_EqHBondDonor

OEFPAtomType_DefaultAtom = OEFPAtomType_AtomicNumber|OEFPAtomType_Aromaticity|OEFPAtomType_Chiral|OEFPAtomType_FormalCharge|OEFPAtomType_HvyDegree|OEFPAtomType_Hybridization|OEFPAtomType_EqHalogen


OEFPAtomType_DefaultPathAtom = OEFPAtomType_AtomicNumber|OEFPAtomType_Aromaticity|OEFPAtomType_Chiral|OEFPAtomType_FormalCharge|OEFPAtomType_HvyDegree|OEFPAtomType_Hybridization|OEFPAtomType_EqHalogen


OEFPAtomType_DefaultPathVSAtom = OEFPAtomType_AtomicNumber|OEFPAtomType_Aromaticity|OEFPAtomType_Chiral|OEFPAtomType_HvyDegree|OEFPAtomType_EqHalogen


OEFPAtomType_DefaultCircularAtom = OEFPAtomType_AtomicNumber|OEFPAtomType_Aromaticity|OEFPAtomType_Chiral|OEFPAtomType_FormalCharge|OEFPAtomType_HCount|OEFPAtomType_EqHalogen


OEFPAtomType_DefaultCircularVSAtom = OEFPAtomType_AtomicNumber|OEFPAtomType_Aromaticity|OEFPAtomType_Chiral|OEFPAtomType_HCount|OEFPAtomType_EqHalogen


OEFPAtomType_DefaultTreeAtom = OEFPAtomType_AtomicNumber|OEFPAtomType_Aromaticity|OEFPAtomType_Chiral|OEFPAtomType_FormalCharge|OEFPAtomType_HvyDegree|OEFPAtomType_Hybridization


OEFPAtomType_DefaultTreeVSAtom = OEFPAtomType_AtomicNumber|OEFPAtomType_Aromaticity|OEFPAtomType_Chiral|OEFPAtomType_HvyDegree

OEFPBondType_None = _oegraphsim.OEFPBondType_None
OEFPBondType_All = _oegraphsim.OEFPBondType_All
OEFPBondType_BondOrder = _oegraphsim.OEFPBondType_BondOrder
OEFPBondType_Chiral = _oegraphsim.OEFPBondType_Chiral
OEFPBondType_InRing = _oegraphsim.OEFPBondType_InRing

OEFPBondType_DefaultBond = OEFPBondType_BondOrder|OEFPBondType_Chiral


OEFPBondType_DefaultPathBond = OEFPBondType_BondOrder|OEFPBondType_Chiral


OEFPBondType_DefaultPathVSBond = OEFPBondType_BondOrder|OEFPBondType_Chiral


OEFPBondType_DefaultCircularBond = OEFPBondType_BondOrder


OEFPBondType_DefaultCircularVSBond = OEFPBondType_BondOrder


OEFPBondType_DefaultTreeBond = OEFPBondType_BondOrder


OEFPBondType_DefaultTreeVSBond = OEFPBondType_BondOrder

OEPopCountMethod_NoSupport = _oegraphsim.OEPopCountMethod_NoSupport
OEPopCountMethod_BitCount = _oegraphsim.OEPopCountMethod_BitCount
OEPopCountMethod_PopCount = _oegraphsim.OEPopCountMethod_PopCount
OESimSearchStatus_Uninitialized = _oegraphsim.OESimSearchStatus_Uninitialized
OESimSearchStatus_InProgress = _oegraphsim.OESimSearchStatus_InProgress
OESimSearchStatus_Finished = _oegraphsim.OESimSearchStatus_Finished
OEFastFPDatabaseMemoryType_MemoryMapped = _oegraphsim.OEFastFPDatabaseMemoryType_MemoryMapped
OEFastFPDatabaseMemoryType_InMemory = _oegraphsim.OEFastFPDatabaseMemoryType_InMemory
OEFastFPDatabaseMemoryType_CUDA = _oegraphsim.OEFastFPDatabaseMemoryType_CUDA

OEFastFPDatabaseMemoryType_Default = OEFastFPDatabaseMemoryType_MemoryMapped

OEFPType_MACCS166 = _oegraphsim.OEFPType_MACCS166
OEFPType_Path = _oegraphsim.OEFPType_Path
OEFPType_Lingo = _oegraphsim.OEFPType_Lingo
OEFPType_Circular = _oegraphsim.OEFPType_Circular
OEFPType_Tree = _oegraphsim.OEFPType_Tree
OESimMeasure_Tanimoto = _oegraphsim.OESimMeasure_Tanimoto
OESimMeasure_Cosine = _oegraphsim.OESimMeasure_Cosine
OESimMeasure_Dice = _oegraphsim.OESimMeasure_Dice
OESimMeasure_Euclid = _oegraphsim.OESimMeasure_Euclid
OESimMeasure_Tversky = _oegraphsim.OESimMeasure_Tversky
OESimMeasure_Manhattan = _oegraphsim.OESimMeasure_Manhattan
OESimMeasure_Max = _oegraphsim.OESimMeasure_Max

OESimMeasure_Default = OESimMeasure_Tanimoto

import openeye.oechem as oechem
class OESimScore(object):
    """Proxy of C++ OEGraphSim::OESimScore class."""

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

    def __init__(self, i: 'size_t', s: 'double'):
        """__init__(OEGraphSim::OESimScore self, size_t i, double s) -> OESimScore"""
        this = _oegraphsim.new_OESimScore(i, s)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this

    def GetIdx(self) -> "size_t":
        """GetIdx(OESimScore self) -> size_t"""
        return _oegraphsim.OESimScore_GetIdx(self)


    def GetScore(self) -> "double":
        """GetScore(OESimScore self) -> double"""
        return _oegraphsim.OESimScore_GetScore(self)

    _idx = _swig_property(_oegraphsim.OESimScore__idx_get, _oegraphsim.OESimScore__idx_set)
    _score = _swig_property(_oegraphsim.OESimScore__score_get, _oegraphsim.OESimScore__score_set)
    __swig_destroy__ = _oegraphsim.delete_OESimScore
    __del__ = lambda self: None
OESimScore_swigregister = _oegraphsim.OESimScore_swigregister
OESimScore_swigregister(OESimScore)

class OESimScorePair(object):
    """Proxy of C++ OEGraphSim::OESimScorePair class."""

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

    def __init__(self, i: 'size_t', j: 'size_t', s: 'double'):
        """__init__(OEGraphSim::OESimScorePair self, size_t i, size_t j, double s) -> OESimScorePair"""
        this = _oegraphsim.new_OESimScorePair(i, j, s)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this

    def GetIdxA(self) -> "size_t":
        """GetIdxA(OESimScorePair self) -> size_t"""
        return _oegraphsim.OESimScorePair_GetIdxA(self)


    def GetIdxB(self) -> "size_t":
        """GetIdxB(OESimScorePair self) -> size_t"""
        return _oegraphsim.OESimScorePair_GetIdxB(self)


    def GetScore(self) -> "double":
        """GetScore(OESimScorePair self) -> double"""
        return _oegraphsim.OESimScorePair_GetScore(self)

    _idxA = _swig_property(_oegraphsim.OESimScorePair__idxA_get, _oegraphsim.OESimScorePair__idxA_set)
    _idxB = _swig_property(_oegraphsim.OESimScorePair__idxB_get, _oegraphsim.OESimScorePair__idxB_set)
    _score = _swig_property(_oegraphsim.OESimScorePair__score_get, _oegraphsim.OESimScorePair__score_set)
    __swig_destroy__ = _oegraphsim.delete_OESimScorePair
    __del__ = lambda self: None
OESimScorePair_swigregister = _oegraphsim.OESimScorePair_swigregister
OESimScorePair_swigregister(OESimScorePair)

class OEFPTypeBase(object):
    """Proxy of C++ OEGraphSim::OEFPTypeBase class."""

    thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oegraphsim.delete_OEFPTypeBase
    __del__ = lambda self: None

    def GetFPType(self) -> "unsigned int":
        """GetFPType(OEFPTypeBase self) -> unsigned int"""
        return _oegraphsim.OEFPTypeBase_GetFPType(self)


    def GetFPTypeString(self) -> "std::string":
        """GetFPTypeString(OEFPTypeBase self) -> std::string"""
        return _oegraphsim.OEFPTypeBase_GetFPTypeString(self)


    def GetFPVersion(self) -> "unsigned short":
        """GetFPVersion(OEFPTypeBase self) -> unsigned short"""
        return _oegraphsim.OEFPTypeBase_GetFPVersion(self)


    def GetFPVersionString(self) -> "std::string":
        """GetFPVersionString(OEFPTypeBase self) -> std::string"""
        return _oegraphsim.OEFPTypeBase_GetFPVersionString(self)


    def __eq__(self, rhs: 'OEFPTypeBase') -> "bool":
        """__eq__(OEFPTypeBase self, OEFPTypeBase rhs) -> bool"""
        return _oegraphsim.OEFPTypeBase___eq__(self, rhs)

OEFPTypeBase_swigregister = _oegraphsim.OEFPTypeBase_swigregister
OEFPTypeBase_swigregister(OEFPTypeBase)

class OEFingerPrint(oechem.OEBitVector):
    """Proxy of C++ OEGraphSim::OEFingerPrint class."""

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

    def __init__(self, *args):
        """
        __init__(OEGraphSim::OEFingerPrint self) -> OEFingerPrint
        __init__(OEGraphSim::OEFingerPrint self, OEFingerPrint rhs) -> OEFingerPrint
        """
        this = _oegraphsim.new_OEFingerPrint(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFingerPrint
    __del__ = lambda self: None

    def IsValid(self):
      return _oegraphsim.OEFingerPrint___nonzero__(self)



    def GetFPTypeBase(self) -> "OEGraphSim::OEFPTypeBase const *":
        """GetFPTypeBase(OEFingerPrint self) -> OEFPTypeBase"""
        return _oegraphsim.OEFingerPrint_GetFPTypeBase(self)


    def SetFPTypeBase(self, t: 'OEFPTypeBase') -> "void":
        """SetFPTypeBase(OEFingerPrint self, OEFPTypeBase t)"""
        return _oegraphsim.OEFingerPrint_SetFPTypeBase(self, t)


    def GetDataTypeAsLong(self) -> "PyObject *":
        """GetDataTypeAsLong(OEFingerPrint self) -> PyObject *"""
        return _oegraphsim.OEFingerPrint_GetDataTypeAsLong(self)


    def __cmp__(self, rhs: 'OEFingerPrint') -> "int":
        """__cmp__(OEFingerPrint self, OEFingerPrint rhs) -> int"""
        return _oegraphsim.OEFingerPrint___cmp__(self, rhs)


    def __eq__(self, rhs: 'OEFingerPrint') -> "bool":
        """__eq__(OEFingerPrint self, OEFingerPrint rhs) -> bool"""
        return _oegraphsim.OEFingerPrint___eq__(self, rhs)


    def __ne__(self, rhs: 'OEFingerPrint') -> "bool":
        """__ne__(OEFingerPrint self, OEFingerPrint rhs) -> bool"""
        return _oegraphsim.OEFingerPrint___ne__(self, rhs)

OEFingerPrint_swigregister = _oegraphsim.OEFingerPrint_swigregister
OEFingerPrint_swigregister(OEFingerPrint)


def OEMakeFP(*args) -> "bool":
    """
    OEMakeFP(OEFingerPrint fp, OEMolBase mol, unsigned int const fptype, bool const vs=False) -> bool
    OEMakeFP(OEFingerPrint fp, OEMolBase mol, unsigned int const fptype) -> bool
    OEMakeFP(OEFingerPrint fp, OEMolBase mol, OEFPTypeBase fptype) -> bool
    """
    return _oegraphsim.OEMakeFP(*args)

def OEMakeMACCS166FP(fp: 'OEFingerPrint', mol: 'OEMolBase') -> "bool":
    """OEMakeMACCS166FP(OEFingerPrint fp, OEMolBase mol) -> bool"""
    return _oegraphsim.OEMakeMACCS166FP(fp, mol)

def OEMakeLingoFP(fp: 'OEFingerPrint', mol: 'OEMolBase') -> "bool":
    """OEMakeLingoFP(OEFingerPrint fp, OEMolBase mol) -> bool"""
    return _oegraphsim.OEMakeLingoFP(fp, mol)

def OEMakePathFP(*args) -> "bool":
    """
    OEMakePathFP(OEFingerPrint fp, OEMolBase mol) -> bool
    OEMakePathFP(OEFingerPrint fp, OEMolBase mol, unsigned int numbits, unsigned int minbonds, unsigned int maxbonds, unsigned int atype, unsigned int btype) -> bool
    """
    return _oegraphsim.OEMakePathFP(*args)

def OEMakeCircularFP(*args) -> "bool":
    """
    OEMakeCircularFP(OEFingerPrint fp, OEMolBase mol) -> bool
    OEMakeCircularFP(OEFingerPrint fp, OEMolBase mol, unsigned int numbits, unsigned int minradius, unsigned int maxradius, unsigned int atype, unsigned int btype) -> bool
    """
    return _oegraphsim.OEMakeCircularFP(*args)

def OEMakeTreeFP(*args) -> "bool":
    """
    OEMakeTreeFP(OEFingerPrint fp, OEMolBase mol) -> bool
    OEMakeTreeFP(OEFingerPrint fp, OEMolBase mol, unsigned int numbits, unsigned int minbonds, unsigned int maxbonds, unsigned int atype, unsigned int btype) -> bool
    """
    return _oegraphsim.OEMakeTreeFP(*args)

def OEIsFPType(fp: 'OEFingerPrint', fptype: 'unsigned int') -> "bool":
    """OEIsFPType(OEFingerPrint fp, unsigned int fptype) -> bool"""
    return _oegraphsim.OEIsFPType(fp, fptype)

def OEIsSameFPType(fpA: 'OEFingerPrint', fpB: 'OEFingerPrint') -> "bool":
    """OEIsSameFPType(OEFingerPrint fpA, OEFingerPrint fpB) -> bool"""
    return _oegraphsim.OEIsSameFPType(fpA, fpB)

def OEGetFPType(*args) -> "OEGraphSim::OEFPTypeBase const *":
    """
    OEGetFPType(unsigned int const fptype, bool const vs=False) -> OEFPTypeBase
    OEGetFPType(unsigned int const fptype) -> OEFPTypeBase
    OEGetFPType(std::string const & fptypestring) -> OEFPTypeBase
    """
    return _oegraphsim.OEGetFPType(*args)

def OEGetPathFPType(numbits: 'unsigned int', minbonds: 'unsigned int', maxbonds: 'unsigned int', atype: 'unsigned int', btype: 'unsigned int') -> "OEGraphSim::OEFPTypeBase const *":
    """OEGetPathFPType(unsigned int numbits, unsigned int minbonds, unsigned int maxbonds, unsigned int atype, unsigned int btype) -> OEFPTypeBase"""
    return _oegraphsim.OEGetPathFPType(numbits, minbonds, maxbonds, atype, btype)

def OEGetCircularFPType(numbits: 'unsigned int', minradius: 'unsigned int', maxradius: 'unsigned int', atype: 'unsigned int', btype: 'unsigned int') -> "OEGraphSim::OEFPTypeBase const *":
    """OEGetCircularFPType(unsigned int numbits, unsigned int minradius, unsigned int maxradius, unsigned int atype, unsigned int btype) -> OEFPTypeBase"""
    return _oegraphsim.OEGetCircularFPType(numbits, minradius, maxradius, atype, btype)

def OEGetTreeFPType(numbits: 'unsigned int', minbonds: 'unsigned int', maxbonds: 'unsigned int', atype: 'unsigned int', btype: 'unsigned int') -> "OEGraphSim::OEFPTypeBase const *":
    """OEGetTreeFPType(unsigned int numbits, unsigned int minbonds, unsigned int maxbonds, unsigned int atype, unsigned int btype) -> OEFPTypeBase"""
    return _oegraphsim.OEGetTreeFPType(numbits, minbonds, maxbonds, atype, btype)

def OEIsValidFPTypeString(fptypestring: 'std::string const &') -> "bool":
    """OEIsValidFPTypeString(std::string const & fptypestring) -> bool"""
    return _oegraphsim.OEIsValidFPTypeString(fptypestring)

def OEGetFPTypeVersion(typestr: 'std::string const &') -> "unsigned short":
    """OEGetFPTypeVersion(std::string const & typestr) -> unsigned short"""
    return _oegraphsim.OEGetFPTypeVersion(typestr)
class OEFPTypeParams(object):
    """Proxy of C++ OEGraphSim::OEFPTypeParams class."""

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

    def __init__(self, *args):
        """
        __init__(OEGraphSim::OEFPTypeParams self, OEFPTypeBase fptype) -> OEFPTypeParams
        __init__(OEGraphSim::OEFPTypeParams self, std::string const & typestr) -> OEFPTypeParams
        """
        this = _oegraphsim.new_OEFPTypeParams(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFPTypeParams
    __del__ = lambda self: None

    def IsValid(self) -> "bool":
        """IsValid(OEFPTypeParams self) -> bool"""
        return _oegraphsim.OEFPTypeParams_IsValid(self)


    def GetFPType(self) -> "unsigned int":
        """GetFPType(OEFPTypeParams self) -> unsigned int"""
        return _oegraphsim.OEFPTypeParams_GetFPType(self)


    def GetVersion(self) -> "unsigned short":
        """GetVersion(OEFPTypeParams self) -> unsigned short"""
        return _oegraphsim.OEFPTypeParams_GetVersion(self)


    def GetNumBits(self) -> "unsigned int":
        """GetNumBits(OEFPTypeParams self) -> unsigned int"""
        return _oegraphsim.OEFPTypeParams_GetNumBits(self)


    def GetMinDistance(self) -> "unsigned int":
        """GetMinDistance(OEFPTypeParams self) -> unsigned int"""
        return _oegraphsim.OEFPTypeParams_GetMinDistance(self)


    def GetMaxDistance(self) -> "unsigned int":
        """GetMaxDistance(OEFPTypeParams self) -> unsigned int"""
        return _oegraphsim.OEFPTypeParams_GetMaxDistance(self)


    def GetAtomTypes(self) -> "unsigned int":
        """GetAtomTypes(OEFPTypeParams self) -> unsigned int"""
        return _oegraphsim.OEFPTypeParams_GetAtomTypes(self)


    def GetBondTypes(self) -> "unsigned int":
        """GetBondTypes(OEFPTypeParams self) -> unsigned int"""
        return _oegraphsim.OEFPTypeParams_GetBondTypes(self)

OEFPTypeParams_swigregister = _oegraphsim.OEFPTypeParams_swigregister
OEFPTypeParams_swigregister(OEFPTypeParams)

class OESimScoreIter(object):
    """Proxy of C++ OESystem::OEIter<(OEGraphSim::OESimScore)> class."""

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

    def __init__(self, *args):
        """
        __init__(OESystem::OEIter<(OEGraphSim::OESimScore)> self) -> OESimScoreIter
        __init__(OESystem::OEIter<(OEGraphSim::OESimScore)> self, OESimScoreIter rhs) -> OESimScoreIter
        __init__(OESystem::OEIter<(OEGraphSim::OESimScore)> self, OESystem::OEIterBase< OEGraphSim::OESimScore > * rhs) -> OESimScoreIter
        __init__(OESystem::OEIter<(OEGraphSim::OESimScore)> self, OESystem::OEIterBase< OESystem::OEIter< OEGraphSim::OESimScore >::NonConstA > * rhs) -> OESimScoreIter
        """
        this = _oegraphsim.new_OESimScoreIter(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OESimScoreIter
    __del__ = lambda self: None

    def Copy(self) -> "OESystem::OEIterBase< OEGraphSim::OESimScore > *":
        """Copy(OESimScoreIter self) -> OESystem::OEIterBase< OEGraphSim::OESimScore > *"""
        return _oegraphsim.OESimScoreIter_Copy(self)


    def Push(self, *args) -> "void":
        """
        Push(OESimScoreIter self, OESystem::OEIterBase< OEGraphSim::OESimScore > * ib)
        Push(OESimScoreIter self, OESimScoreIter iter)
        """
        return _oegraphsim.OESimScoreIter_Push(self, *args)


    def Sort(self, sort_criterion: 'OESystem::OEBinaryPredicate< OEGraphSim::OESimScore,OEGraphSim::OESimScore > const &') -> "void":
        """Sort(OESimScoreIter self, OESystem::OEBinaryPredicate< OEGraphSim::OESimScore,OEGraphSim::OESimScore > const & sort_criterion)"""
        return _oegraphsim.OESimScoreIter_Sort(self, sort_criterion)


    def ToFirst(self) -> "OESystem::OEIter< OEGraphSim::OESimScore > &":
        """ToFirst(OESimScoreIter self) -> OESimScoreIter"""
        return _oegraphsim.OESimScoreIter_ToFirst(self)


    def ToLast(self) -> "OESystem::OEIter< OEGraphSim::OESimScore > &":
        """ToLast(OESimScoreIter self) -> OESimScoreIter"""
        return _oegraphsim.OESimScoreIter_ToLast(self)


    def __ref__(self) -> "OEGraphSim::OESimScore &":
        """__ref__(OESimScoreIter self) -> OESimScore"""
        return _oegraphsim.OESimScoreIter___ref__(self)


    def IsValid(self):
      return _oegraphsim.OESimScoreIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        """next(OESimScoreIter self) -> PyObject *"""
        return _oegraphsim.OESimScoreIter_next(self)


    def Target(self) -> "OEGraphSim::OESimScore &":
        """Target(OESimScoreIter self) -> OESimScore"""
        return _oegraphsim.OESimScoreIter_Target(self)


    def Next(self, *args) -> "OESystem::OEIter< OEGraphSim::OESimScore > &":
        """
        Next(OESimScoreIter self) -> OESimScoreIter
        Next(OESimScoreIter self, int i) -> OESimScoreIter
        """
        return _oegraphsim.OESimScoreIter_Next(self, *args)


    def Prev(self, *args) -> "OESystem::OEIter< OEGraphSim::OESimScore > &":
        """
        Prev(OESimScoreIter self) -> OESimScoreIter
        Prev(OESimScoreIter self, int i) -> OESimScoreIter
        """
        return _oegraphsim.OESimScoreIter_Prev(self, *args)

OESimScoreIter_swigregister = _oegraphsim.OESimScoreIter_swigregister
OESimScoreIter_swigregister(OESimScoreIter)

class OESimScorePairIter(object):
    """Proxy of C++ OESystem::OEIter<(OEGraphSim::OESimScorePair)> class."""

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

    def __init__(self, *args):
        """
        __init__(OESystem::OEIter<(OEGraphSim::OESimScorePair)> self) -> OESimScorePairIter
        __init__(OESystem::OEIter<(OEGraphSim::OESimScorePair)> self, OESimScorePairIter rhs) -> OESimScorePairIter
        __init__(OESystem::OEIter<(OEGraphSim::OESimScorePair)> self, OESystem::OEIterBase< OEGraphSim::OESimScorePair > * rhs) -> OESimScorePairIter
        __init__(OESystem::OEIter<(OEGraphSim::OESimScorePair)> self, OESystem::OEIterBase< OESystem::OEIter< OEGraphSim::OESimScorePair >::NonConstA > * rhs) -> OESimScorePairIter
        """
        this = _oegraphsim.new_OESimScorePairIter(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OESimScorePairIter
    __del__ = lambda self: None

    def Copy(self) -> "OESystem::OEIterBase< OEGraphSim::OESimScorePair > *":
        """Copy(OESimScorePairIter self) -> OESystem::OEIterBase< OEGraphSim::OESimScorePair > *"""
        return _oegraphsim.OESimScorePairIter_Copy(self)


    def Push(self, *args) -> "void":
        """
        Push(OESimScorePairIter self, OESystem::OEIterBase< OEGraphSim::OESimScorePair > * ib)
        Push(OESimScorePairIter self, OESimScorePairIter iter)
        """
        return _oegraphsim.OESimScorePairIter_Push(self, *args)


    def Sort(self, sort_criterion: 'OESystem::OEBinaryPredicate< OEGraphSim::OESimScorePair,OEGraphSim::OESimScorePair > const &') -> "void":
        """Sort(OESimScorePairIter self, OESystem::OEBinaryPredicate< OEGraphSim::OESimScorePair,OEGraphSim::OESimScorePair > const & sort_criterion)"""
        return _oegraphsim.OESimScorePairIter_Sort(self, sort_criterion)


    def ToFirst(self) -> "OESystem::OEIter< OEGraphSim::OESimScorePair > &":
        """ToFirst(OESimScorePairIter self) -> OESimScorePairIter"""
        return _oegraphsim.OESimScorePairIter_ToFirst(self)


    def ToLast(self) -> "OESystem::OEIter< OEGraphSim::OESimScorePair > &":
        """ToLast(OESimScorePairIter self) -> OESimScorePairIter"""
        return _oegraphsim.OESimScorePairIter_ToLast(self)


    def __ref__(self) -> "OEGraphSim::OESimScorePair &":
        """__ref__(OESimScorePairIter self) -> OESimScorePair"""
        return _oegraphsim.OESimScorePairIter___ref__(self)


    def IsValid(self):
      return _oegraphsim.OESimScorePairIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        """next(OESimScorePairIter self) -> PyObject *"""
        return _oegraphsim.OESimScorePairIter_next(self)


    def Target(self) -> "OEGraphSim::OESimScorePair &":
        """Target(OESimScorePairIter self) -> OESimScorePair"""
        return _oegraphsim.OESimScorePairIter_Target(self)


    def Next(self, *args) -> "OESystem::OEIter< OEGraphSim::OESimScorePair > &":
        """
        Next(OESimScorePairIter self) -> OESimScorePairIter
        Next(OESimScorePairIter self, int i) -> OESimScorePairIter
        """
        return _oegraphsim.OESimScorePairIter_Next(self, *args)


    def Prev(self, *args) -> "OESystem::OEIter< OEGraphSim::OESimScorePair > &":
        """
        Prev(OESimScorePairIter self) -> OESimScorePairIter
        Prev(OESimScorePairIter self, int i) -> OESimScorePairIter
        """
        return _oegraphsim.OESimScorePairIter_Prev(self, *args)

OESimScorePairIter_swigregister = _oegraphsim.OESimScorePairIter_swigregister
OESimScorePairIter_swigregister(OESimScorePairIter)

class OEFingerPrintIter(object):
    """Proxy of C++ OESystem::OEIter<(q(const).OEGraphSim::OEFingerPrint)> class."""

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

    def __init__(self, *args):
        """
        __init__(OESystem::OEIter<(q(const).OEGraphSim::OEFingerPrint)> self) -> OEFingerPrintIter
        __init__(OESystem::OEIter<(q(const).OEGraphSim::OEFingerPrint)> self, OEFingerPrintIter rhs) -> OEFingerPrintIter
        __init__(OESystem::OEIter<(q(const).OEGraphSim::OEFingerPrint)> self, OESystem::OEIterBase< OEGraphSim::OEFingerPrint const > * rhs) -> OEFingerPrintIter
        __init__(OESystem::OEIter<(q(const).OEGraphSim::OEFingerPrint)> self, OESystem::OEIterBase< OESystem::OEIter< OEGraphSim::OEFingerPrint const >::NonConstA > * rhs) -> OEFingerPrintIter
        """
        this = _oegraphsim.new_OEFingerPrintIter(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFingerPrintIter
    __del__ = lambda self: None

    def Copy(self) -> "OESystem::OEIterBase< OEGraphSim::OEFingerPrint const > *":
        """Copy(OEFingerPrintIter self) -> OESystem::OEIterBase< OEGraphSim::OEFingerPrint const > *"""
        return _oegraphsim.OEFingerPrintIter_Copy(self)


    def Push(self, *args) -> "void":
        """
        Push(OEFingerPrintIter self, OESystem::OEIterBase< OEGraphSim::OEFingerPrint const > * ib)
        Push(OEFingerPrintIter self, OEFingerPrintIter iter)
        """
        return _oegraphsim.OEFingerPrintIter_Push(self, *args)


    def Sort(self, sort_criterion: 'OESystem::OEBinaryPredicate< OEGraphSim::OEFingerPrint const,OEGraphSim::OEFingerPrint const > const &') -> "void":
        """Sort(OEFingerPrintIter self, OESystem::OEBinaryPredicate< OEGraphSim::OEFingerPrint const,OEGraphSim::OEFingerPrint const > const & sort_criterion)"""
        return _oegraphsim.OEFingerPrintIter_Sort(self, sort_criterion)


    def ToFirst(self) -> "OESystem::OEIter< OEGraphSim::OEFingerPrint const > &":
        """ToFirst(OEFingerPrintIter self) -> OEFingerPrintIter"""
        return _oegraphsim.OEFingerPrintIter_ToFirst(self)


    def ToLast(self) -> "OESystem::OEIter< OEGraphSim::OEFingerPrint const > &":
        """ToLast(OEFingerPrintIter self) -> OEFingerPrintIter"""
        return _oegraphsim.OEFingerPrintIter_ToLast(self)


    def __ref__(self) -> "OEGraphSim::OEFingerPrint const &":
        """__ref__(OEFingerPrintIter self) -> OEFingerPrint"""
        return _oegraphsim.OEFingerPrintIter___ref__(self)


    def IsValid(self):
      return _oegraphsim.OEFingerPrintIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        """next(OEFingerPrintIter self) -> PyObject *"""
        return _oegraphsim.OEFingerPrintIter_next(self)


    def Target(self) -> "OEGraphSim::OEFingerPrint const &":
        """Target(OEFingerPrintIter self) -> OEFingerPrint"""
        return _oegraphsim.OEFingerPrintIter_Target(self)


    def Next(self, *args) -> "OESystem::OEIter< OEGraphSim::OEFingerPrint const > &":
        """
        Next(OEFingerPrintIter self) -> OEFingerPrintIter
        Next(OEFingerPrintIter self, int i) -> OEFingerPrintIter
        """
        return _oegraphsim.OEFingerPrintIter_Next(self, *args)


    def Prev(self, *args) -> "OESystem::OEIter< OEGraphSim::OEFingerPrint const > &":
        """
        Prev(OEFingerPrintIter self) -> OEFingerPrintIter
        Prev(OEFingerPrintIter self, int i) -> OEFingerPrintIter
        """
        return _oegraphsim.OEFingerPrintIter_Prev(self, *args)

OEFingerPrintIter_swigregister = _oegraphsim.OEFingerPrintIter_swigregister
OEFingerPrintIter_swigregister(OEFingerPrintIter)


def OEConfigureFingerPrint(itf: 'OEInterface', deffptype: 'OEFPTypeBase') -> "bool":
    """OEConfigureFingerPrint(OEInterface itf, OEFPTypeBase deffptype) -> bool"""
    return _oegraphsim.OEConfigureFingerPrint(itf, deffptype)

def OESetupFingerPrint(itf: 'OEInterface') -> "OEGraphSim::OEFPTypeBase const *":
    """OESetupFingerPrint(OEInterface itf) -> OEFPTypeBase"""
    return _oegraphsim.OESetupFingerPrint(itf)

def OEGetFPAtomType(*args) -> "std::string":
    """
    OEGetFPAtomType(std::string const & expression) -> unsigned int
    OEGetFPAtomType(unsigned int value) -> std::string
    """
    return _oegraphsim.OEGetFPAtomType(*args)

def OEGetFPBondType(*args) -> "std::string":
    """
    OEGetFPBondType(std::string const & expression) -> unsigned int
    OEGetFPBondType(unsigned int value) -> std::string
    """
    return _oegraphsim.OEGetFPBondType(*args)
class OEFPDatabaseOptions(object):
    """Proxy of C++ OEGraphSim::OEFPDatabaseOptions class."""

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

    def __init__(self, *args):
        """
        __init__(OEGraphSim::OEFPDatabaseOptions self) -> OEFPDatabaseOptions
        __init__(OEGraphSim::OEFPDatabaseOptions self, unsigned int const limit, unsigned int const simfunc) -> OEFPDatabaseOptions
        __init__(OEGraphSim::OEFPDatabaseOptions self, unsigned int const limit) -> OEFPDatabaseOptions
        __init__(OEGraphSim::OEFPDatabaseOptions self, OEFPDatabaseOptions arg2) -> OEFPDatabaseOptions
        """
        this = _oegraphsim.new_OEFPDatabaseOptions(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFPDatabaseOptions
    __del__ = lambda self: None

    def HasCutoff(self) -> "bool":
        """HasCutoff(OEFPDatabaseOptions self) -> bool"""
        return _oegraphsim.OEFPDatabaseOptions_HasCutoff(self)


    def SetCutoff(self, cutoff: 'float const') -> "void":
        """SetCutoff(OEFPDatabaseOptions self, float const cutoff)"""
        return _oegraphsim.OEFPDatabaseOptions_SetCutoff(self, cutoff)


    def GetCutoff(self) -> "float":
        """GetCutoff(OEFPDatabaseOptions self) -> float"""
        return _oegraphsim.OEFPDatabaseOptions_GetCutoff(self)


    def ClearCutoff(self) -> "void":
        """ClearCutoff(OEFPDatabaseOptions self)"""
        return _oegraphsim.OEFPDatabaseOptions_ClearCutoff(self)


    def SetSimFunc(self, simfunc: 'unsigned int const') -> "void":
        """SetSimFunc(OEFPDatabaseOptions self, unsigned int const simfunc)"""
        return _oegraphsim.OEFPDatabaseOptions_SetSimFunc(self, simfunc)


    def GetSimFunc(self) -> "unsigned int":
        """GetSimFunc(OEFPDatabaseOptions self) -> unsigned int"""
        return _oegraphsim.OEFPDatabaseOptions_GetSimFunc(self)


    def SetTverskyCoeffs(self, alpha: 'float const'=0.95, beta: 'float const'=0.05) -> "void":
        """
        SetTverskyCoeffs(OEFPDatabaseOptions self, float const alpha=0.95, float const beta=0.05)
        SetTverskyCoeffs(OEFPDatabaseOptions self, float const alpha=0.95)
        SetTverskyCoeffs(OEFPDatabaseOptions self)
        """
        return _oegraphsim.OEFPDatabaseOptions_SetTverskyCoeffs(self, alpha, beta)


    def GetTverskyAlpha(self) -> "float":
        """GetTverskyAlpha(OEFPDatabaseOptions self) -> float"""
        return _oegraphsim.OEFPDatabaseOptions_GetTverskyAlpha(self)


    def GetTverskyBeta(self) -> "float":
        """GetTverskyBeta(OEFPDatabaseOptions self) -> float"""
        return _oegraphsim.OEFPDatabaseOptions_GetTverskyBeta(self)


    def SetDescendingOrder(self, descending: 'bool const'=True) -> "void":
        """
        SetDescendingOrder(OEFPDatabaseOptions self, bool const descending=True)
        SetDescendingOrder(OEFPDatabaseOptions self)
        """
        return _oegraphsim.OEFPDatabaseOptions_SetDescendingOrder(self, descending)


    def GetDescendingOrder(self) -> "bool":
        """GetDescendingOrder(OEFPDatabaseOptions self) -> bool"""
        return _oegraphsim.OEFPDatabaseOptions_GetDescendingOrder(self)


    def SetLimit(self, limit: 'unsigned int const') -> "void":
        """SetLimit(OEFPDatabaseOptions self, unsigned int const limit)"""
        return _oegraphsim.OEFPDatabaseOptions_SetLimit(self, limit)


    def GetLimit(self) -> "unsigned int":
        """GetLimit(OEFPDatabaseOptions self) -> unsigned int"""
        return _oegraphsim.OEFPDatabaseOptions_GetLimit(self)


    def SetNumProcessors(self, nrps: 'unsigned int const') -> "void":
        """SetNumProcessors(OEFPDatabaseOptions self, unsigned int const nrps)"""
        return _oegraphsim.OEFPDatabaseOptions_SetNumProcessors(self, nrps)


    def GetNumProcessors(self) -> "unsigned int":
        """GetNumProcessors(OEFPDatabaseOptions self) -> unsigned int"""
        return _oegraphsim.OEFPDatabaseOptions_GetNumProcessors(self)

OEFPDatabaseOptions_swigregister = _oegraphsim.OEFPDatabaseOptions_swigregister
OEFPDatabaseOptions_swigregister(OEFPDatabaseOptions)


def OEConfigureFPDatabaseOptions(*args) -> "bool":
    """
    OEConfigureFPDatabaseOptions(OEInterface itf, OEFPDatabaseOptions defopts) -> bool
    OEConfigureFPDatabaseOptions(OEInterface itf, unsigned int config) -> bool
    OEConfigureFPDatabaseOptions(OEInterface itf) -> bool
    """
    return _oegraphsim.OEConfigureFPDatabaseOptions(*args)

def OESetupFPDatabaseOptions(opts: 'OEFPDatabaseOptions', itf: 'OEInterface') -> "bool":
    """OESetupFPDatabaseOptions(OEFPDatabaseOptions opts, OEInterface itf) -> bool"""
    return _oegraphsim.OESetupFPDatabaseOptions(opts, itf)

def OEConfigureFPDatabaseMemoryType(*args) -> "bool":
    """
    OEConfigureFPDatabaseMemoryType(OEInterface itf, unsigned int defvalue, std::string name, std::string alias) -> bool
    OEConfigureFPDatabaseMemoryType(OEInterface itf, unsigned int defvalue, std::string name) -> bool
    OEConfigureFPDatabaseMemoryType(OEInterface itf, unsigned int defvalue) -> bool
    OEConfigureFPDatabaseMemoryType(OEInterface itf) -> bool
    """
    return _oegraphsim.OEConfigureFPDatabaseMemoryType(*args)

def OEGetFPDatabaseMemoryType(*args) -> "unsigned int":
    """
    OEGetFPDatabaseMemoryType(OEInterface itf, std::string const name) -> unsigned int
    OEGetFPDatabaseMemoryType(OEInterface itf) -> unsigned int
    """
    return _oegraphsim.OEGetFPDatabaseMemoryType(*args)
class OEFPDatabase(object):
    """Proxy of C++ OEGraphSim::OEFPDatabase class."""

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

    def __init__(self, *args):
        """
        __init__(OEGraphSim::OEFPDatabase self, unsigned int fptype) -> OEFPDatabase
        __init__(OEGraphSim::OEFPDatabase self, OEFPTypeBase arg2) -> OEFPDatabase
        """
        this = _oegraphsim.new_OEFPDatabase(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFPDatabase
    __del__ = lambda self: None

    def GetFPTypeBase(self) -> "OEGraphSim::OEFPTypeBase const *":
        """GetFPTypeBase(OEFPDatabase self) -> OEFPTypeBase"""
        return _oegraphsim.OEFPDatabase_GetFPTypeBase(self)


    def HasCutoff(self) -> "bool":
        """HasCutoff(OEFPDatabase self) -> bool"""
        return _oegraphsim.OEFPDatabase_HasCutoff(self)


    def SetCutoff(self, arg2: 'float') -> "void":
        """SetCutoff(OEFPDatabase self, float arg2)"""
        return _oegraphsim.OEFPDatabase_SetCutoff(self, arg2)


    def GetCutoff(self) -> "float":
        """GetCutoff(OEFPDatabase self) -> float"""
        return _oegraphsim.OEFPDatabase_GetCutoff(self)


    def ClearCutoff(self) -> "void":
        """ClearCutoff(OEFPDatabase self)"""
        return _oegraphsim.OEFPDatabase_ClearCutoff(self)


    def SetSimFunc(self, *args) -> "void":
        """
        SetSimFunc(OEFPDatabase self, unsigned int simtype, bool descending=True)
        SetSimFunc(OEFPDatabase self, unsigned int simtype)
        SetSimFunc(OEFPDatabase self, OESimFuncBase arg2, bool descending=True)
        SetSimFunc(OEFPDatabase self, OESimFuncBase arg2)
        """
        return _oegraphsim.OEFPDatabase_SetSimFunc(self, *args)


    def SetDescendingOrder(self, arg2: 'bool') -> "void":
        """SetDescendingOrder(OEFPDatabase self, bool arg2)"""
        return _oegraphsim.OEFPDatabase_SetDescendingOrder(self, arg2)


    def GetDescendingOrder(self) -> "bool":
        """GetDescendingOrder(OEFPDatabase self) -> bool"""
        return _oegraphsim.OEFPDatabase_GetDescendingOrder(self)


    def AddFP(self, *args):
        idx = _oegraphsim.OEFPDatabase_AddFP(self, *args)
        if idx == 2 ** 32 -1 or idx == -1: # ((unsigned int) -1)
            raise RuntimeError("Unable to add '%s' to the OEFPDatabase" % repr(*args))
        return idx



    def NumFingerPrints(self) -> "unsigned int":
        """NumFingerPrints(OEFPDatabase self) -> unsigned int"""
        return _oegraphsim.OEFPDatabase_NumFingerPrints(self)


    def GetFingerPrints(self) -> "OESystem::OEIterBase< OEGraphSim::OEFingerPrint const > *":
        """GetFingerPrints(OEFPDatabase self) -> OESystem::OEIterBase< OEGraphSim::OEFingerPrint const > *"""
        return _oegraphsim.OEFPDatabase_GetFingerPrints(self)


    def GetScores(self, *args) -> "OESystem::OEIterBase< OEGraphSim::OESimScore > *":
        """
        GetScores(OEFPDatabase self, OEFingerPrint fp, unsigned int bgn=0, unsigned int end=0) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetScores(OEFPDatabase self, OEFingerPrint fp, unsigned int bgn=0) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetScores(OEFPDatabase self, OEFingerPrint fp) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetScores(OEFPDatabase self, OEMolBase mol, unsigned int bgn=0, unsigned int end=0) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetScores(OEFPDatabase self, OEMolBase mol, unsigned int bgn=0) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetScores(OEFPDatabase self, OEMolBase mol) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetScores(OEFPDatabase self, OEFingerPrint fp, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetScores(OEFPDatabase self, OEMolBase mol, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< OEGraphSim::OESimScore > *
        """
        return _oegraphsim.OEFPDatabase_GetScores(self, *args)


    def GetSortedScores(self, *args) -> "OESystem::OEIterBase< OEGraphSim::OESimScore > *":
        """
        GetSortedScores(OEFPDatabase self, OEFingerPrint fp, unsigned int limit=0, unsigned int bgn=0, unsigned int end=0) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetSortedScores(OEFPDatabase self, OEFingerPrint fp, unsigned int limit=0, unsigned int bgn=0) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetSortedScores(OEFPDatabase self, OEFingerPrint fp, unsigned int limit=0) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetSortedScores(OEFPDatabase self, OEFingerPrint fp) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetSortedScores(OEFPDatabase self, OEMolBase mol, unsigned int limit=0, unsigned int bgn=0, unsigned int end=0) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetSortedScores(OEFPDatabase self, OEMolBase mol, unsigned int limit=0, unsigned int bgn=0) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetSortedScores(OEFPDatabase self, OEMolBase mol, unsigned int limit=0) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetSortedScores(OEFPDatabase self, OEMolBase mol) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetSortedScores(OEFPDatabase self, OEFingerPrint fp, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetSortedScores(OEFPDatabase self, OEMolBase mol, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< OEGraphSim::OESimScore > *
        """
        return _oegraphsim.OEFPDatabase_GetSortedScores(self, *args)

OEFPDatabase_swigregister = _oegraphsim.OEFPDatabase_swigregister
OEFPDatabase_swigregister(OEFPDatabase)


def OEGetSimilarityMeasureName(simtype: 'unsigned int') -> "std::string":
    """OEGetSimilarityMeasureName(unsigned int simtype) -> std::string"""
    return _oegraphsim.OEGetSimilarityMeasureName(simtype)

def OETanimoto(fpA: 'OEFingerPrint', fpB: 'OEFingerPrint') -> "float":
    """OETanimoto(OEFingerPrint fpA, OEFingerPrint fpB) -> float"""
    return _oegraphsim.OETanimoto(fpA, fpB)

def OECosine(fpA: 'OEFingerPrint', fpB: 'OEFingerPrint') -> "float":
    """OECosine(OEFingerPrint fpA, OEFingerPrint fpB) -> float"""
    return _oegraphsim.OECosine(fpA, fpB)

def OEDice(fpA: 'OEFingerPrint', fpB: 'OEFingerPrint') -> "float":
    """OEDice(OEFingerPrint fpA, OEFingerPrint fpB) -> float"""
    return _oegraphsim.OEDice(fpA, fpB)

def OEEuclid(fpA: 'OEFingerPrint', fpB: 'OEFingerPrint') -> "float":
    """OEEuclid(OEFingerPrint fpA, OEFingerPrint fpB) -> float"""
    return _oegraphsim.OEEuclid(fpA, fpB)

def OETversky(fpA: 'OEFingerPrint', fpB: 'OEFingerPrint', a: 'float', b: 'float') -> "float":
    """OETversky(OEFingerPrint fpA, OEFingerPrint fpB, float a, float b) -> float"""
    return _oegraphsim.OETversky(fpA, fpB, a, b)

def OEManhattan(fpA: 'OEFingerPrint', fpB: 'OEFingerPrint') -> "float":
    """OEManhattan(OEFingerPrint fpA, OEFingerPrint fpB) -> float"""
    return _oegraphsim.OEManhattan(fpA, fpB)
class OESimFuncBase(object):
    """Proxy of C++ OEGraphSim::OESimFuncBase class."""

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

    def __init__(self):
        """__init__(OEGraphSim::OESimFuncBase self) -> OESimFuncBase"""
        if self.__class__ == OESimFuncBase:
            _self = None
        else:
            _self = self
        this = _oegraphsim.new_OESimFuncBase(_self, )
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OESimFuncBase
    __del__ = lambda self: None

    def __call__(self, fpA: 'OEFingerPrint', fpB: 'OEFingerPrint') -> "float":
        """__call__(OESimFuncBase self, OEFingerPrint fpA, OEFingerPrint fpB) -> float"""
        return _oegraphsim.OESimFuncBase___call__(self, fpA, fpB)


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



    def GetSimTypeString(self) -> "std::string":
        """GetSimTypeString(OESimFuncBase self) -> std::string"""
        return _oegraphsim.OESimFuncBase_GetSimTypeString(self)

    def __disown__(self):
        self.this.disown()
        _oegraphsim.disown_OESimFuncBase(self)
        return weakref_proxy(self)
OESimFuncBase_swigregister = _oegraphsim.OESimFuncBase_swigregister
OESimFuncBase_swigregister(OESimFuncBase)

class OETanimotoSim(OESimFuncBase):
    """Proxy of C++ OEGraphSim::OETanimotoSim class."""

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

    def __init__(self):
        """__init__(OEGraphSim::OETanimotoSim self) -> OETanimotoSim"""
        this = _oegraphsim.new_OETanimotoSim()
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this

    def __call__(self, fpA: 'OEFingerPrint', fpB: 'OEFingerPrint') -> "float":
        """__call__(OETanimotoSim self, OEFingerPrint fpA, OEFingerPrint fpB) -> float"""
        return _oegraphsim.OETanimotoSim___call__(self, fpA, fpB)


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



    def GetSimTypeString(self) -> "std::string":
        """GetSimTypeString(OETanimotoSim self) -> std::string"""
        return _oegraphsim.OETanimotoSim_GetSimTypeString(self)

    __swig_destroy__ = _oegraphsim.delete_OETanimotoSim
    __del__ = lambda self: None
OETanimotoSim_swigregister = _oegraphsim.OETanimotoSim_swigregister
OETanimotoSim_swigregister(OETanimotoSim)

class OETverskySim(OESimFuncBase):
    """Proxy of C++ OEGraphSim::OETverskySim class."""

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

    def __init__(self, *args):
        """
        __init__(OEGraphSim::OETverskySim self, float a=0.95) -> OETverskySim
        __init__(OEGraphSim::OETverskySim self) -> OETverskySim
        __init__(OEGraphSim::OETverskySim self, float a, float b) -> OETverskySim
        """
        this = _oegraphsim.new_OETverskySim(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this

    def __call__(self, fpA: 'OEFingerPrint', fpB: 'OEFingerPrint') -> "float":
        """__call__(OETverskySim self, OEFingerPrint fpA, OEFingerPrint fpB) -> float"""
        return _oegraphsim.OETverskySim___call__(self, fpA, fpB)


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



    def GetSimTypeString(self) -> "std::string":
        """GetSimTypeString(OETverskySim self) -> std::string"""
        return _oegraphsim.OETverskySim_GetSimTypeString(self)


    def GetAlpha(self) -> "float":
        """GetAlpha(OETverskySim self) -> float"""
        return _oegraphsim.OETverskySim_GetAlpha(self)


    def GetBeta(self) -> "float":
        """GetBeta(OETverskySim self) -> float"""
        return _oegraphsim.OETverskySim_GetBeta(self)

    __swig_destroy__ = _oegraphsim.delete_OETverskySim
    __del__ = lambda self: None
OETverskySim_swigregister = _oegraphsim.OETverskySim_swigregister
OETverskySim_swigregister(OETverskySim)


def OEGetBitCounts(*args) -> "PyObject *":
    """
    OEGetBitCounts(OEFingerPrint fpA, OEFingerPrint fpB, unsigned int * onlyA, unsigned int * onlyB, unsigned int * bothAB, unsigned int * neitherAB) -> bool
    OEGetBitCounts(OEFingerPrint a, OEFingerPrint b) -> PyObject *
    """
    return _oegraphsim.OEGetBitCounts(*args)

def OEGetFingerPrintVersion(fptype: 'unsigned int') -> "unsigned short":
    """OEGetFingerPrintVersion(unsigned int fptype) -> unsigned short"""
    return _oegraphsim.OEGetFingerPrintVersion(fptype)

def OEGetFingerPrintVersionString(version: 'unsigned short') -> "std::string":
    """OEGetFingerPrintVersionString(unsigned short version) -> std::string"""
    return _oegraphsim.OEGetFingerPrintVersionString(version)
class OEFPHistogram(object):
    """Proxy of C++ OEGraphSim::OEFPHistogram class."""

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

    def __init__(self, *args):
        """
        __init__(OEGraphSim::OEFPHistogram self, size_t const numBins=200, double const min=0.0, double const max=1.0) -> OEFPHistogram
        __init__(OEGraphSim::OEFPHistogram self, size_t const numBins=200, double const min=0.0) -> OEFPHistogram
        __init__(OEGraphSim::OEFPHistogram self, size_t const numBins=200) -> OEFPHistogram
        __init__(OEGraphSim::OEFPHistogram self) -> OEFPHistogram
        __init__(OEGraphSim::OEFPHistogram self, std::vector< uint64_t,std::allocator< uint64_t > > const & counts, double const min=0.0, double const max=1.0) -> OEFPHistogram
        __init__(OEGraphSim::OEFPHistogram self, std::vector< uint64_t,std::allocator< uint64_t > > const & counts, double const min=0.0) -> OEFPHistogram
        __init__(OEGraphSim::OEFPHistogram self, std::vector< uint64_t,std::allocator< uint64_t > > const & counts) -> OEFPHistogram
        __init__(OEGraphSim::OEFPHistogram self, OEFPHistogram arg2) -> OEFPHistogram
        """
        this = _oegraphsim.new_OEFPHistogram(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFPHistogram
    __del__ = lambda self: None

    def GetBinIdx(self, *args) -> "size_t":
        """
        GetBinIdx(OEFPHistogram self, float const sample) -> size_t
        GetBinIdx(OEFPHistogram self, double const sample) -> size_t
        """
        return _oegraphsim.OEFPHistogram_GetBinIdx(self, *args)


    def AddSample(self, *args) -> "size_t":
        """
        AddSample(OEFPHistogram self, float const sample) -> size_t
        AddSample(OEFPHistogram self, double const sample) -> size_t
        """
        return _oegraphsim.OEFPHistogram_AddSample(self, *args)


    def GetCounts(self) -> "OESystem::OEIterBase< unsigned int > *":
        """GetCounts(OEFPHistogram self) -> OESystem::OEIterBase< unsigned int > *"""
        return _oegraphsim.OEFPHistogram_GetCounts(self)


    def GetDensity(self) -> "OESystem::OEIterBase< double > *":
        """GetDensity(OEFPHistogram self) -> OESystem::OEIterBase< double > *"""
        return _oegraphsim.OEFPHistogram_GetDensity(self)


    def GetBinCenters(self) -> "OESystem::OEIterBase< double > *":
        """GetBinCenters(OEFPHistogram self) -> OESystem::OEIterBase< double > *"""
        return _oegraphsim.OEFPHistogram_GetBinCenters(self)


    def GetBinBoundaries(self) -> "OESystem::OEIterBase< double > *":
        """GetBinBoundaries(OEFPHistogram self) -> OESystem::OEIterBase< double > *"""
        return _oegraphsim.OEFPHistogram_GetBinBoundaries(self)


    def NumSamples(self) -> "size_t":
        """NumSamples(OEFPHistogram self) -> size_t"""
        return _oegraphsim.OEFPHistogram_NumSamples(self)


    def NumBins(self) -> "size_t":
        """NumBins(OEFPHistogram self) -> size_t"""
        return _oegraphsim.OEFPHistogram_NumBins(self)


    def GetBinWidth(self) -> "double":
        """GetBinWidth(OEFPHistogram self) -> double"""
        return _oegraphsim.OEFPHistogram_GetBinWidth(self)


    def GetMin(self) -> "double":
        """GetMin(OEFPHistogram self) -> double"""
        return _oegraphsim.OEFPHistogram_GetMin(self)


    def GetMax(self) -> "double":
        """GetMax(OEFPHistogram self) -> double"""
        return _oegraphsim.OEFPHistogram_GetMax(self)


    def Mean(self) -> "double":
        """Mean(OEFPHistogram self) -> double"""
        return _oegraphsim.OEFPHistogram_Mean(self)


    def Std(self) -> "double":
        """Std(OEFPHistogram self) -> double"""
        return _oegraphsim.OEFPHistogram_Std(self)


    def __iadd__(self, arg2: 'OEFPHistogram') -> "OEGraphSim::OEFPHistogram &":
        """__iadd__(OEFPHistogram self, OEFPHistogram arg2) -> OEFPHistogram"""
        return _oegraphsim.OEFPHistogram___iadd__(self, arg2)

OEFPHistogram_swigregister = _oegraphsim.OEFPHistogram_swigregister
OEFPHistogram_swigregister(OEFPHistogram)

class OEFPVariogram(OEFPHistogram):
    """Proxy of C++ OEGraphSim::OEFPVariogram class."""

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

    def __init__(self, *args):
        """
        __init__(OEGraphSim::OEFPVariogram self, size_t numBins=200, double min=0.0, double max=1.0) -> OEFPVariogram
        __init__(OEGraphSim::OEFPVariogram self, size_t numBins=200, double min=0.0) -> OEFPVariogram
        __init__(OEGraphSim::OEFPVariogram self, size_t numBins=200) -> OEFPVariogram
        __init__(OEGraphSim::OEFPVariogram self) -> OEFPVariogram
        __init__(OEGraphSim::OEFPVariogram self, std::vector< uint64_t,std::allocator< uint64_t > > const & counts, OEFloatVector varsums, double const min=0.0, double const max=1.0) -> OEFPVariogram
        __init__(OEGraphSim::OEFPVariogram self, std::vector< uint64_t,std::allocator< uint64_t > > const & counts, OEFloatVector varsums, double const min=0.0) -> OEFPVariogram
        __init__(OEGraphSim::OEFPVariogram self, std::vector< uint64_t,std::allocator< uint64_t > > const & counts, OEFloatVector varsums) -> OEFPVariogram
        __init__(OEGraphSim::OEFPVariogram self, OEFPVariogram arg2) -> OEFPVariogram
        """
        this = _oegraphsim.new_OEFPVariogram(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFPVariogram
    __del__ = lambda self: None

    def AddSample(self, sim: 'float const', obs: 'float const') -> "size_t":
        """AddSample(OEFPVariogram self, float const sim, float const obs) -> size_t"""
        return _oegraphsim.OEFPVariogram_AddSample(self, sim, obs)


    def GetVariogram(self) -> "OESystem::OEIterBase< double > *":
        """GetVariogram(OEFPVariogram self) -> OESystem::OEIterBase< double > *"""
        return _oegraphsim.OEFPVariogram_GetVariogram(self)

OEFPVariogram_swigregister = _oegraphsim.OEFPVariogram_swigregister
OEFPVariogram_swigregister(OEFPVariogram)

class OEFastFPDatabaseParams(object):
    """Proxy of C++ OEGraphSim::OEFastFPDatabaseParams class."""

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

    def __init__(self, *args):
        """
        __init__(OEGraphSim::OEFastFPDatabaseParams self) -> OEFastFPDatabaseParams
        __init__(OEGraphSim::OEFastFPDatabaseParams self, std::string const & fpdbfname) -> OEFastFPDatabaseParams
        """
        this = _oegraphsim.new_OEFastFPDatabaseParams(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFastFPDatabaseParams
    __del__ = lambda self: None

    def IsValid(self) -> "bool":
        """IsValid(OEFastFPDatabaseParams self) -> bool"""
        return _oegraphsim.OEFastFPDatabaseParams_IsValid(self)


    def GetMolDatabaseFilename(self) -> "std::string const &":
        """GetMolDatabaseFilename(OEFastFPDatabaseParams self) -> std::string const &"""
        return _oegraphsim.OEFastFPDatabaseParams_GetMolDatabaseFilename(self)


    def GetFPTypeBase(self) -> "OEGraphSim::OEFPTypeBase const *":
        """GetFPTypeBase(OEFastFPDatabaseParams self) -> OEFPTypeBase"""
        return _oegraphsim.OEFastFPDatabaseParams_GetFPTypeBase(self)


    def NumFingerPrints(self) -> "size_t":
        """NumFingerPrints(OEFastFPDatabaseParams self) -> size_t"""
        return _oegraphsim.OEFastFPDatabaseParams_NumFingerPrints(self)


    def IsInLittleEndian(self) -> "bool":
        """IsInLittleEndian(OEFastFPDatabaseParams self) -> bool"""
        return _oegraphsim.OEFastFPDatabaseParams_IsInLittleEndian(self)


    def GetFileSize(self) -> "size_t":
        """GetFileSize(OEFastFPDatabaseParams self) -> size_t"""
        return _oegraphsim.OEFastFPDatabaseParams_GetFileSize(self)


    def GetFingerPrintSizeIn64(self) -> "size_t":
        """GetFingerPrintSizeIn64(OEFastFPDatabaseParams self) -> size_t"""
        return _oegraphsim.OEFastFPDatabaseParams_GetFingerPrintSizeIn64(self)


    def GetFingerPrintSizeIn32(self) -> "size_t":
        """GetFingerPrintSizeIn32(OEFastFPDatabaseParams self) -> size_t"""
        return _oegraphsim.OEFastFPDatabaseParams_GetFingerPrintSizeIn32(self)


    def GetFingerPrintSizeInBytes(self) -> "size_t":
        """GetFingerPrintSizeInBytes(OEFastFPDatabaseParams self) -> size_t"""
        return _oegraphsim.OEFastFPDatabaseParams_GetFingerPrintSizeInBytes(self)


    def GetFingerPrintSizeInBits(self) -> "size_t":
        """GetFingerPrintSizeInBits(OEFastFPDatabaseParams self) -> size_t"""
        return _oegraphsim.OEFastFPDatabaseParams_GetFingerPrintSizeInBits(self)


    def SetMolDatabaseFilename(self, fname: 'std::string const &') -> "void":
        """SetMolDatabaseFilename(OEFastFPDatabaseParams self, std::string const & fname)"""
        return _oegraphsim.OEFastFPDatabaseParams_SetMolDatabaseFilename(self, fname)


    def SetFPTypeBase(self, fptype: 'OEFPTypeBase') -> "void":
        """SetFPTypeBase(OEFastFPDatabaseParams self, OEFPTypeBase fptype)"""
        return _oegraphsim.OEFastFPDatabaseParams_SetFPTypeBase(self, fptype)


    def SetNumFingerPrints(self, nrfps: 'size_t const') -> "void":
        """SetNumFingerPrints(OEFastFPDatabaseParams self, size_t const nrfps)"""
        return _oegraphsim.OEFastFPDatabaseParams_SetNumFingerPrints(self, nrfps)


    def SetFileSize(self, filesize: 'size_t const') -> "void":
        """SetFileSize(OEFastFPDatabaseParams self, size_t const filesize)"""
        return _oegraphsim.OEFastFPDatabaseParams_SetFileSize(self, filesize)

OEFastFPDatabaseParams_swigregister = _oegraphsim.OEFastFPDatabaseParams_swigregister
OEFastFPDatabaseParams_swigregister(OEFastFPDatabaseParams)


def OEIsFastFPDatabaseReady() -> "bool":
    """OEIsFastFPDatabaseReady() -> bool"""
    return _oegraphsim.OEIsFastFPDatabaseReady()

def OEGraphsimIsGPUReady() -> "bool":
    """OEGraphsimIsGPUReady() -> bool"""
    return _oegraphsim.OEGraphsimIsGPUReady()

def OEGetPopCountMethod() -> "unsigned int":
    """OEGetPopCountMethod() -> unsigned int"""
    return _oegraphsim.OEGetPopCountMethod()

def OEAreCompatibleDatabases(arg1: 'OEMolDatabase', arg2: 'OEFastFPDatabase') -> "bool":
    """OEAreCompatibleDatabases(OEMolDatabase arg1, OEFastFPDatabase arg2) -> bool"""
    return _oegraphsim.OEAreCompatibleDatabases(arg1, arg2)
class OECreateFastFPDatabaseOptions(object):
    """Proxy of C++ OEGraphSim::OECreateFastFPDatabaseOptions class."""

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

    def __init__(self, fptype: 'OEFPTypeBase'):
        """__init__(OEGraphSim::OECreateFastFPDatabaseOptions self, OEFPTypeBase fptype) -> OECreateFastFPDatabaseOptions"""
        this = _oegraphsim.new_OECreateFastFPDatabaseOptions(fptype)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OECreateFastFPDatabaseOptions
    __del__ = lambda self: None

    def GetFPType(self) -> "OEGraphSim::OEFPTypeBase const *":
        """GetFPType(OECreateFastFPDatabaseOptions self) -> OEFPTypeBase"""
        return _oegraphsim.OECreateFastFPDatabaseOptions_GetFPType(self)


    def SetNumProcessors(self, nrps: 'unsigned int') -> "void":
        """SetNumProcessors(OECreateFastFPDatabaseOptions self, unsigned int nrps)"""
        return _oegraphsim.OECreateFastFPDatabaseOptions_SetNumProcessors(self, nrps)


    def GetNumProcessors(self) -> "unsigned int":
        """GetNumProcessors(OECreateFastFPDatabaseOptions self) -> unsigned int"""
        return _oegraphsim.OECreateFastFPDatabaseOptions_GetNumProcessors(self)


    def SetTracer(self, dots: 'OEDots') -> "void":
        """SetTracer(OECreateFastFPDatabaseOptions self, OEDots dots)"""
        return _oegraphsim.OECreateFastFPDatabaseOptions_SetTracer(self, dots)


    def GetTracer(self) -> "OESystem::OEDots const *":
        """GetTracer(OECreateFastFPDatabaseOptions self) -> OEDots"""
        return _oegraphsim.OECreateFastFPDatabaseOptions_GetTracer(self)

OECreateFastFPDatabaseOptions_swigregister = _oegraphsim.OECreateFastFPDatabaseOptions_swigregister
OECreateFastFPDatabaseOptions_swigregister(OECreateFastFPDatabaseOptions)


def OECreateFastFPDatabaseFile(*args) -> "bool":
    """
    OECreateFastFPDatabaseFile(std::string const & fpdbfname, std::string const & molfname, OEFPTypeBase fptype) -> bool
    OECreateFastFPDatabaseFile(std::string const & fpdbfname, std::string const & molfname, OECreateFastFPDatabaseOptions opts) -> bool
    """
    return _oegraphsim.OECreateFastFPDatabaseFile(*args)

def OESimSearchStatusToName(status: 'unsigned int const') -> "std::string":
    """OESimSearchStatusToName(unsigned int const status) -> std::string"""
    return _oegraphsim.OESimSearchStatusToName(status)
class OESimSearchResult(object):
    """Proxy of C++ OEGraphSim::OESimSearchResult class."""

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

    def __init__(self, nrbins: 'size_t const'=50, min: 'double const'=0.0, max: 'double const'=1.0):
        """
        __init__(OEGraphSim::OESimSearchResult self, size_t const nrbins=50, double const min=0.0, double const max=1.0) -> OESimSearchResult
        __init__(OEGraphSim::OESimSearchResult self, size_t const nrbins=50, double const min=0.0) -> OESimSearchResult
        __init__(OEGraphSim::OESimSearchResult self, size_t const nrbins=50) -> OESimSearchResult
        __init__(OEGraphSim::OESimSearchResult self) -> OESimSearchResult
        """
        this = _oegraphsim.new_OESimSearchResult(nrbins, min, max)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OESimSearchResult
    __del__ = lambda self: None

    def IsValid(self) -> "bool":
        """IsValid(OESimSearchResult self) -> bool"""
        return _oegraphsim.OESimSearchResult_IsValid(self)


    def GetSearchStatus(self) -> "unsigned int":
        """GetSearchStatus(OESimSearchResult self) -> unsigned int"""
        return _oegraphsim.OESimSearchResult_GetSearchStatus(self)


    def NumTargets(self) -> "size_t":
        """NumTargets(OESimSearchResult self) -> size_t"""
        return _oegraphsim.OESimSearchResult_NumTargets(self)


    def NumSearched(self) -> "size_t":
        """NumSearched(OESimSearchResult self) -> size_t"""
        return _oegraphsim.OESimSearchResult_NumSearched(self)


    def GetHistogram(self) -> "OEGraphSim::OEFPHistogram":
        """GetHistogram(OESimSearchResult self) -> OEFPHistogram"""
        return _oegraphsim.OESimSearchResult_GetHistogram(self)


    def GetSortedScores(self) -> "OESystem::OEIterBase< OEGraphSim::OESimScore > *":
        """GetSortedScores(OESimSearchResult self) -> OESystem::OEIterBase< OEGraphSim::OESimScore > *"""
        return _oegraphsim.OESimSearchResult_GetSortedScores(self)


    def GetImpl(self, *args) -> "OEGraphSim::OESimSearchResultImpl const *":
        """
        GetImpl(OESimSearchResult self) -> OEGraphSim::OESimSearchResultImpl
        GetImpl(OESimSearchResult self) -> OEGraphSim::OESimSearchResultImpl const *
        """
        return _oegraphsim.OESimSearchResult_GetImpl(self, *args)

OESimSearchResult_swigregister = _oegraphsim.OESimSearchResult_swigregister
OESimSearchResult_swigregister(OESimSearchResult)

class OEFastFPDatabase(object):
    """Proxy of C++ OEGraphSim::OEFastFPDatabase class."""

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

    def __init__(self, *args):
        """
        __init__(OEGraphSim::OEFastFPDatabase self, std::string const & dbfile, unsigned int memtype) -> OEFastFPDatabase
        __init__(OEGraphSim::OEFastFPDatabase self, std::string const & dbfile) -> OEFastFPDatabase
        """
        this = _oegraphsim.new_OEFastFPDatabase(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFastFPDatabase
    __del__ = lambda self: None

    def IsValid(self) -> "bool":
        """IsValid(OEFastFPDatabase self) -> bool"""
        return _oegraphsim.OEFastFPDatabase_IsValid(self)


    def GetFPTypeBase(self) -> "OEGraphSim::OEFPTypeBase const *":
        """GetFPTypeBase(OEFastFPDatabase self) -> OEFPTypeBase"""
        return _oegraphsim.OEFastFPDatabase_GetFPTypeBase(self)


    def NumFingerPrints(self) -> "size_t":
        """NumFingerPrints(OEFastFPDatabase self) -> size_t"""
        return _oegraphsim.OEFastFPDatabase_NumFingerPrints(self)


    def GetMemoryType(self) -> "unsigned int":
        """GetMemoryType(OEFastFPDatabase self) -> unsigned int"""
        return _oegraphsim.OEFastFPDatabase_GetMemoryType(self)


    def GetMemoryTypeString(self) -> "std::string":
        """GetMemoryTypeString(OEFastFPDatabase self) -> std::string"""
        return _oegraphsim.OEFastFPDatabase_GetMemoryTypeString(self)


    def GetFingerPrint(self, fp: 'OEFingerPrint', fpidx: 'size_t const') -> "bool":
        """GetFingerPrint(OEFastFPDatabase self, OEFingerPrint fp, size_t const fpidx) -> bool"""
        return _oegraphsim.OEFastFPDatabase_GetFingerPrint(self, fp, fpidx)


    def GetMoleculeIndex(self, fpidx: 'size_t const') -> "size_t":
        """GetMoleculeIndex(OEFastFPDatabase self, size_t const fpidx) -> size_t"""
        return _oegraphsim.OEFastFPDatabase_GetMoleculeIndex(self, fpidx)


    def GetScores(self, *args) -> "OESystem::OEIterBase< OEGraphSim::OESimScore > *":
        """
        GetScores(OEFastFPDatabase self, OEFingerPrint fp, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetScores(OEFastFPDatabase self, OEMolBase mol, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetScores(OEFastFPDatabase self, size_t const idx, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< OEGraphSim::OESimScore > *
        """
        return _oegraphsim.OEFastFPDatabase_GetScores(self, *args)


    def GetSortedScores(self, *args) -> "OESystem::OEIterBase< OEGraphSim::OESimScore > *":
        """
        GetSortedScores(OEFastFPDatabase self, OEFingerPrint fp, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetSortedScores(OEFastFPDatabase self, OEMolBase mol, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetSortedScores(OEFastFPDatabase self, size_t const idx, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< OEGraphSim::OESimScore > *
        """
        return _oegraphsim.OEFastFPDatabase_GetSortedScores(self, *args)


    def GetRawScores(self, *args) -> "OESystem::OEIterBase< double > *":
        """
        GetRawScores(OEFastFPDatabase self, OEFingerPrint fp, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< double >
        GetRawScores(OEFastFPDatabase self, OEMolBase mol, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< double >
        GetRawScores(OEFastFPDatabase self, size_t const fpidx, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< double > *
        """
        return _oegraphsim.OEFastFPDatabase_GetRawScores(self, *args)


    def GetAllScores(self, opts: 'OEFPDatabaseOptions') -> "OESystem::OEIterBase< float > *":
        """GetAllScores(OEFastFPDatabase self, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< float > *"""
        return _oegraphsim.OEFastFPDatabase_GetAllScores(self, opts)


    def GetHistogram(self, opts: 'OEFPDatabaseOptions', nrbins: 'size_t const'=200) -> "OEGraphSim::OEFPHistogram":
        """
        GetHistogram(OEFastFPDatabase self, OEFPDatabaseOptions opts, size_t const nrbins=200) -> OEFPHistogram
        GetHistogram(OEFastFPDatabase self, OEFPDatabaseOptions opts) -> OEFPHistogram
        """
        return _oegraphsim.OEFastFPDatabase_GetHistogram(self, opts, nrbins)


    def GetVariogram(self, obsdata: 'OEFloatVector', opts: 'OEFPDatabaseOptions', nrbins: 'size_t const'=200) -> "OEGraphSim::OEFPVariogram":
        """
        GetVariogram(OEFastFPDatabase self, OEFloatVector obsdata, OEFPDatabaseOptions opts, size_t const nrbins=200) -> OEFPVariogram
        GetVariogram(OEFastFPDatabase self, OEFloatVector obsdata, OEFPDatabaseOptions opts) -> OEFPVariogram
        """
        return _oegraphsim.OEFastFPDatabase_GetVariogram(self, obsdata, opts, nrbins)


    def GetSparseMatrix(self, opts: 'OEFPDatabaseOptions') -> "OESystem::OEIterBase< OEGraphSim::OESimScorePair > *":
        """GetSparseMatrix(OEFastFPDatabase self, OEFPDatabaseOptions opts) -> OESystem::OEIterBase< OEGraphSim::OESimScorePair > *"""
        return _oegraphsim.OEFastFPDatabase_GetSparseMatrix(self, opts)


    def SortedSearch(self, result: 'OESimSearchResult', mol: 'OEMolBase', opts: 'OEFPDatabaseOptions') -> "unsigned int":
        """SortedSearch(OEFastFPDatabase self, OESimSearchResult result, OEMolBase mol, OEFPDatabaseOptions opts) -> unsigned int"""
        return _oegraphsim.OEFastFPDatabase_SortedSearch(self, result, mol, opts)

OEFastFPDatabase_swigregister = _oegraphsim.OEFastFPDatabase_swigregister
OEFastFPDatabase_swigregister(OEFastFPDatabase)


def GetSWIG_NewPointerObj(*args) -> "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 const & 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(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(OESimScore arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OESimScorePair arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEFingerPrint arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEFPPattern arg, bool owned) -> PyObject *
    """
    return _oegraphsim.GetSWIG_NewPointerObj(*args)
class OEFPPattern(oechem.OEAtomBondSet):
    """Proxy of C++ OEGraphSim::OEFPPattern class."""

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

    def __init__(self, atoms: 'OEAtomIter', bonds: 'OEBondIter', smarts: 'std::string const &', unhashed: 'unsigned int', setbit: 'unsigned int'):
        """__init__(OEGraphSim::OEFPPattern self, OEAtomIter atoms, OEBondIter bonds, std::string const & smarts, unsigned int unhashed, unsigned int setbit) -> OEFPPattern"""
        this = _oegraphsim.new_OEFPPattern(atoms, bonds, smarts, unhashed, setbit)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFPPattern
    __del__ = lambda self: None

    def GetSmarts(self) -> "std::string":
        """GetSmarts(OEFPPattern self) -> std::string"""
        return _oegraphsim.OEFPPattern_GetSmarts(self)


    def GetUnhashed(self) -> "unsigned int":
        """GetUnhashed(OEFPPattern self) -> unsigned int"""
        return _oegraphsim.OEFPPattern_GetUnhashed(self)


    def GetBit(self) -> "unsigned int":
        """GetBit(OEFPPattern self) -> unsigned int"""
        return _oegraphsim.OEFPPattern_GetBit(self)

OEFPPattern_swigregister = _oegraphsim.OEFPPattern_swigregister
OEFPPattern_swigregister(OEFPPattern)

class OEFPPatternIter(object):
    """Proxy of C++ OESystem::OEIter<(OEGraphSim::OEFPPattern)> class."""

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

    def __init__(self, *args):
        """
        __init__(OESystem::OEIter<(OEGraphSim::OEFPPattern)> self) -> OEFPPatternIter
        __init__(OESystem::OEIter<(OEGraphSim::OEFPPattern)> self, OEFPPatternIter rhs) -> OEFPPatternIter
        __init__(OESystem::OEIter<(OEGraphSim::OEFPPattern)> self, OESystem::OEIterBase< OEGraphSim::OEFPPattern > * rhs) -> OEFPPatternIter
        __init__(OESystem::OEIter<(OEGraphSim::OEFPPattern)> self, OESystem::OEIterBase< OESystem::OEIter< OEGraphSim::OEFPPattern >::NonConstA > * rhs) -> OEFPPatternIter
        """
        this = _oegraphsim.new_OEFPPatternIter(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFPPatternIter
    __del__ = lambda self: None

    def Copy(self) -> "OESystem::OEIterBase< OEGraphSim::OEFPPattern > *":
        """Copy(OEFPPatternIter self) -> OESystem::OEIterBase< OEGraphSim::OEFPPattern > *"""
        return _oegraphsim.OEFPPatternIter_Copy(self)


    def Push(self, *args) -> "void":
        """
        Push(OEFPPatternIter self, OESystem::OEIterBase< OEGraphSim::OEFPPattern > * ib)
        Push(OEFPPatternIter self, OEFPPatternIter iter)
        """
        return _oegraphsim.OEFPPatternIter_Push(self, *args)


    def Sort(self, sort_criterion: 'OESystem::OEBinaryPredicate< OEGraphSim::OEFPPattern,OEGraphSim::OEFPPattern > const &') -> "void":
        """Sort(OEFPPatternIter self, OESystem::OEBinaryPredicate< OEGraphSim::OEFPPattern,OEGraphSim::OEFPPattern > const & sort_criterion)"""
        return _oegraphsim.OEFPPatternIter_Sort(self, sort_criterion)


    def ToFirst(self) -> "OESystem::OEIter< OEGraphSim::OEFPPattern > &":
        """ToFirst(OEFPPatternIter self) -> OEFPPatternIter"""
        return _oegraphsim.OEFPPatternIter_ToFirst(self)


    def ToLast(self) -> "OESystem::OEIter< OEGraphSim::OEFPPattern > &":
        """ToLast(OEFPPatternIter self) -> OEFPPatternIter"""
        return _oegraphsim.OEFPPatternIter_ToLast(self)


    def __ref__(self) -> "OEGraphSim::OEFPPattern &":
        """__ref__(OEFPPatternIter self) -> OEFPPattern"""
        return _oegraphsim.OEFPPatternIter___ref__(self)


    def IsValid(self):
      return _oegraphsim.OEFPPatternIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        """next(OEFPPatternIter self) -> PyObject *"""
        return _oegraphsim.OEFPPatternIter_next(self)


    def Target(self) -> "OEGraphSim::OEFPPattern &":
        """Target(OEFPPatternIter self) -> OEFPPattern"""
        return _oegraphsim.OEFPPatternIter_Target(self)


    def Next(self, *args) -> "OESystem::OEIter< OEGraphSim::OEFPPattern > &":
        """
        Next(OEFPPatternIter self) -> OEFPPatternIter
        Next(OEFPPatternIter self, int i) -> OEFPPatternIter
        """
        return _oegraphsim.OEFPPatternIter_Next(self, *args)


    def Prev(self, *args) -> "OESystem::OEIter< OEGraphSim::OEFPPattern > &":
        """
        Prev(OEFPPatternIter self) -> OEFPPatternIter
        Prev(OEFPPatternIter self, int i) -> OEFPPatternIter
        """
        return _oegraphsim.OEFPPatternIter_Prev(self, *args)

OEFPPatternIter_swigregister = _oegraphsim.OEFPPatternIter_swigregister
OEFPPatternIter_swigregister(OEFPPatternIter)


def OEGetFPCoverage(mol: 'OEMolBase', fptype: 'OEFPTypeBase', unique: 'bool'=False) -> "OESystem::OEIterBase< OEChem::OEAtomBondSet > *":
    """
    OEGetFPCoverage(OEMolBase mol, OEFPTypeBase fptype, bool unique=False) -> OESystem::OEIterBase< OEChem::OEAtomBondSet >
    OEGetFPCoverage(OEMolBase mol, OEFPTypeBase fptype) -> OESystem::OEIterBase< OEChem::OEAtomBondSet > *
    """
    return _oegraphsim.OEGetFPCoverage(mol, fptype, unique)

def OEGetFPPatterns(mol: 'OEMolBase', fptype: 'OEFPTypeBase') -> "OESystem::OEIterBase< OEGraphSim::OEFPPattern > *":
    """OEGetFPPatterns(OEMolBase mol, OEFPTypeBase fptype) -> OESystem::OEIterBase< OEGraphSim::OEFPPattern > *"""
    return _oegraphsim.OEGetFPPatterns(mol, fptype)

def OEGetFPOverlap(qmol: 'OEMolBase', tmol: 'OEMolBase', fptype: 'OEFPTypeBase') -> "OESystem::OEIterBase< OEChem::OEMatchBase > *":
    """OEGetFPOverlap(OEMolBase qmol, OEMolBase tmol, OEFPTypeBase fptype) -> OESystem::OEIterBase< OEChem::OEMatchBase > *"""
    return _oegraphsim.OEGetFPOverlap(qmol, tmol, fptype)

def OESetFingerPrintValue(rec: 'OERecord', field: 'OEFingerPrintField', fp: 'OEFingerPrint') -> "bool":
    """OESetFingerPrintValue(OERecord rec, OEFingerPrintField field, OEFingerPrint fp) -> bool"""
    return _oegraphsim.OESetFingerPrintValue(rec, field, fp)

def OEInitFPFieldHandler() -> "OEDataFlow::OEFieldTypeHandler *":
    """OEInitFPFieldHandler() -> OEFieldTypeHandler"""
    return _oegraphsim.OEInitFPFieldHandler()

def OEInitFPVecFieldHandler() -> "OEDataFlow::OEFieldTypeHandler *":
    """OEInitFPVecFieldHandler() -> OEFieldTypeHandler"""
    return _oegraphsim.OEInitFPVecFieldHandler()
class OEFingerPrintType(oechem.OEFieldTypeHandler):
    """Proxy of C++ OEDataFlow::OEFieldType<(OEGraphSim::OEFingerPrint)> class."""

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

    def format(fp: 'OEFingerPrint') -> "std::string":
        """format(OEFingerPrint fp) -> std::string"""
        return _oegraphsim.OEFingerPrintType_format(fp)

    format = staticmethod(format)

    def is_cacheable(self) -> "bool":
        """is_cacheable(OEFingerPrintType self) -> bool"""
        return _oegraphsim.OEFingerPrintType_is_cacheable(self)


    def get_name(self) -> "std::string":
        """get_name(OEFingerPrintType self) -> std::string"""
        return _oegraphsim.OEFingerPrintType_get_name(self)


    def bytes_to_json(self, bytes: 'OEUCharVector') -> "std::string":
        """bytes_to_json(OEFingerPrintType self, OEUCharVector bytes) -> std::string"""
        return _oegraphsim.OEFingerPrintType_bytes_to_json(self, bytes)


    def __init__(self):
        """__init__(OEDataFlow::OEFieldType<(OEGraphSim::OEFingerPrint)> self) -> OEFingerPrintType"""
        this = _oegraphsim.new_OEFingerPrintType()
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFingerPrintType
    __del__ = lambda self: None
OEFingerPrintType_swigregister = _oegraphsim.OEFingerPrintType_swigregister
OEFingerPrintType_swigregister(OEFingerPrintType)
cvar = _oegraphsim.cvar

def OEFingerPrintType_format(fp: 'OEFingerPrint') -> "std::string":
    """OEFingerPrintType_format(OEFingerPrint fp) -> std::string"""
    return _oegraphsim.OEFingerPrintType_format(fp)

class OEFingerPrintVecType(oechem.OEFieldTypeHandler):
    """Proxy of C++ OEDataFlow::OEVectorFieldType<(OEGraphSim::OEFingerPrint)> class."""

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

    def format(val: 'std::vector< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint >,std::allocator< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint > > > const &') -> "std::string":
        """format(std::vector< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint >,std::allocator< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint > > > const & val) -> std::string"""
        return _oegraphsim.OEFingerPrintVecType_format(val)

    format = staticmethod(format)

    def GetCopyForCache(*args) -> "std::shared_ptr< std::vector< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint >,std::allocator< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint > > > >":
        """
        GetCopyForCache(std::vector< OEGraphSim::OEFingerPrint,std::allocator< OEGraphSim::OEFingerPrint > > const & val) -> std::shared_ptr< std::vector< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint >,std::allocator< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint > > > >
        GetCopyForCache(std::vector< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint >,std::allocator< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint > > > const & val) -> std::shared_ptr< std::vector< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint >,std::allocator< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint > > > >
        """
        return _oegraphsim.OEFingerPrintVecType_GetCopyForCache(*args)

    GetCopyForCache = staticmethod(GetCopyForCache)

    def get_name(self) -> "std::string":
        """get_name(OEFingerPrintVecType self) -> std::string"""
        return _oegraphsim.OEFingerPrintVecType_get_name(self)


    def bytes_to_json(self, bytes: 'OEUCharVector') -> "std::string":
        """bytes_to_json(OEFingerPrintVecType self, OEUCharVector bytes) -> std::string"""
        return _oegraphsim.OEFingerPrintVecType_bytes_to_json(self, bytes)


    def __init__(self):
        """__init__(OEDataFlow::OEVectorFieldType<(OEGraphSim::OEFingerPrint)> self) -> OEFingerPrintVecType"""
        this = _oegraphsim.new_OEFingerPrintVecType()
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFingerPrintVecType
    __del__ = lambda self: None
OEFingerPrintVecType_swigregister = _oegraphsim.OEFingerPrintVecType_swigregister
OEFingerPrintVecType_swigregister(OEFingerPrintVecType)

def OEFingerPrintVecType_format(val: 'std::vector< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint >,std::allocator< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint > > > const &') -> "std::string":
    """OEFingerPrintVecType_format(std::vector< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint >,std::allocator< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint > > > const & val) -> std::string"""
    return _oegraphsim.OEFingerPrintVecType_format(val)

def OEFingerPrintVecType_GetCopyForCache(*args) -> "std::shared_ptr< std::vector< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint >,std::allocator< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint > > > >":
    """
    GetCopyForCache(std::vector< OEGraphSim::OEFingerPrint,std::allocator< OEGraphSim::OEFingerPrint > > const & val) -> std::shared_ptr< std::vector< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint >,std::allocator< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint > > > >
    OEFingerPrintVecType_GetCopyForCache(std::vector< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint >,std::allocator< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint > > > const & val) -> std::shared_ptr< std::vector< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint >,std::allocator< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint > > > >
    """
    return _oegraphsim.OEFingerPrintVecType_GetCopyForCache(*args)

class OEFingerPrintField(oechem.OEFieldBase):
    """Proxy of C++ OEDataFlow::OEField<(OEGraphSim::OEFingerPrint)> class."""

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

    def __init__(self, *args):
        """
        __init__(OEDataFlow::OEField<(OEGraphSim::OEFingerPrint)> self, std::string const & name, OEFieldMeta meta, bool readonly=False, bool nullable=False) -> OEFingerPrintField
        __init__(OEDataFlow::OEField<(OEGraphSim::OEFingerPrint)> self, std::string const & name, OEFieldMeta meta, bool readonly=False) -> OEFingerPrintField
        __init__(OEDataFlow::OEField<(OEGraphSim::OEFingerPrint)> self, std::string const & name, OEFieldMeta meta) -> OEFingerPrintField
        __init__(OEDataFlow::OEField<(OEGraphSim::OEFingerPrint)> self, std::string const & name) -> OEFingerPrintField
        __init__(OEDataFlow::OEField<(OEGraphSim::OEFingerPrint)> self, OEFieldBase other) -> OEFingerPrintField
        """
        this = _oegraphsim.new_OEFingerPrintField(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this

    def deserialize(self, value: 'OEFingerPrint', data: 'OEUCharVector') -> "bool":
        """deserialize(OEFingerPrintField self, OEFingerPrint value, OEUCharVector data) -> bool"""
        return _oegraphsim.OEFingerPrintField_deserialize(self, value, data)


    def get_type(self) -> "OEDataFlow::OEFieldType< OEGraphSim::OEFingerPrint >":
        """get_type(OEFingerPrintField self) -> OEFingerPrintType"""
        return _oegraphsim.OEFingerPrintField_get_type(self)

    __swig_destroy__ = _oegraphsim.delete_OEFingerPrintField
    __del__ = lambda self: None
OEFingerPrintField_swigregister = _oegraphsim.OEFingerPrintField_swigregister
OEFingerPrintField_swigregister(OEFingerPrintField)

class OEFingerPrintVecField(oechem.OEFieldBase):
    """Proxy of C++ OEDataFlow::OEVectorField<(OEGraphSim::OEFingerPrint)> class."""

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

    def __init__(self, *args):
        """
        __init__(OEDataFlow::OEVectorField<(OEGraphSim::OEFingerPrint)> self, std::string const & name, OEFieldMeta meta, bool readonly=False, bool nullable=False) -> OEFingerPrintVecField
        __init__(OEDataFlow::OEVectorField<(OEGraphSim::OEFingerPrint)> self, std::string const & name, OEFieldMeta meta, bool readonly=False) -> OEFingerPrintVecField
        __init__(OEDataFlow::OEVectorField<(OEGraphSim::OEFingerPrint)> self, std::string const & name, OEFieldMeta meta) -> OEFingerPrintVecField
        __init__(OEDataFlow::OEVectorField<(OEGraphSim::OEFingerPrint)> self, std::string const & name) -> OEFingerPrintVecField
        __init__(OEDataFlow::OEVectorField<(OEGraphSim::OEFingerPrint)> self, OEFieldBase f) -> OEFingerPrintVecField
        """
        this = _oegraphsim.new_OEFingerPrintVecField(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this

    def deserialize(self, *args) -> "bool":
        """
        deserialize(OEFingerPrintVecField self, std::vector< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint >,std::allocator< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint > > > & ret, OEUCharVector data) -> bool
        deserialize(OEFingerPrintVecField self, std::vector< OEGraphSim::OEFingerPrint,std::allocator< OEGraphSim::OEFingerPrint > > & ret, OEUCharVector data) -> bool
        """
        return _oegraphsim.OEFingerPrintVecField_deserialize(self, *args)


    def get_type(self) -> "OEDataFlow::OEVectorFieldType< OEGraphSim::OEFingerPrint >":
        """get_type(OEFingerPrintVecField self) -> OEFingerPrintVecType"""
        return _oegraphsim.OEFingerPrintVecField_get_type(self)

    __swig_destroy__ = _oegraphsim.delete_OEFingerPrintVecField
    __del__ = lambda self: None
OEFingerPrintVecField_swigregister = _oegraphsim.OEFingerPrintVecField_swigregister
OEFingerPrintVecField_swigregister(OEFingerPrintVecField)

class OEFingerPrintMatchField(OEFingerPrintField):
    """Proxy of C++ OEDataFlow::OEMatchField<(OEGraphSim::OEFingerPrint)> class."""

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

    def __init__(self, *args):
        """
        __init__(OEDataFlow::OEMatchField<(OEGraphSim::OEFingerPrint)> self, std::string const & name, OEFieldMeta meta, bool readonly=False, bool nullable=False) -> OEFingerPrintMatchField
        __init__(OEDataFlow::OEMatchField<(OEGraphSim::OEFingerPrint)> self, std::string const & name, OEFieldMeta meta, bool readonly=False) -> OEFingerPrintMatchField
        __init__(OEDataFlow::OEMatchField<(OEGraphSim::OEFingerPrint)> self, std::string const & name, OEFieldMeta meta) -> OEFingerPrintMatchField
        __init__(OEDataFlow::OEMatchField<(OEGraphSim::OEFingerPrint)> self, std::string const & name) -> OEFingerPrintMatchField
        """
        this = _oegraphsim.new_OEFingerPrintMatchField(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFingerPrintMatchField
    __del__ = lambda self: None
OEFingerPrintMatchField_swigregister = _oegraphsim.OEFingerPrintMatchField_swigregister
OEFingerPrintMatchField_swigregister(OEFingerPrintMatchField)

class OEFingerPrintVecMatchField(OEFingerPrintVecField):
    """Proxy of C++ OEDataFlow::OEMatchVectorField<(OEGraphSim::OEFingerPrint)> class."""

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

    def __init__(self, *args):
        """
        __init__(OEDataFlow::OEMatchVectorField<(OEGraphSim::OEFingerPrint)> self, std::string const & name, OEFieldMeta meta, bool readonly=False, bool nullable=False) -> OEFingerPrintVecMatchField
        __init__(OEDataFlow::OEMatchVectorField<(OEGraphSim::OEFingerPrint)> self, std::string const & name, OEFieldMeta meta, bool readonly=False) -> OEFingerPrintVecMatchField
        __init__(OEDataFlow::OEMatchVectorField<(OEGraphSim::OEFingerPrint)> self, std::string const & name, OEFieldMeta meta) -> OEFingerPrintVecMatchField
        __init__(OEDataFlow::OEMatchVectorField<(OEGraphSim::OEFingerPrint)> self, std::string const & name) -> OEFingerPrintVecMatchField
        """
        this = _oegraphsim.new_OEFingerPrintVecMatchField(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oegraphsim.delete_OEFingerPrintVecMatchField
    __del__ = lambda self: None
OEFingerPrintVecMatchField_swigregister = _oegraphsim.OEFingerPrintVecMatchField_swigregister
OEFingerPrintVecMatchField_swigregister(OEFingerPrintVecMatchField)


oechem.Types.Chem.FingerPrint = OEFingerPrintType()
oechem.Types.Chem.FingerPrintVec = OEFingerPrintVecType()
oechem.Types.Chem.FingerPrintVec.__class__.scalar_type = oechem.Types.Chem.FingerPrint

OEFingerPrintType.valid_types = (OEFingerPrint,)

OE_OEGRAPHSIM_VERSION = _oegraphsim.OE_OEGRAPHSIM_VERSION

def OEGraphSimGetRelease() -> "char const *":
    """OEGraphSimGetRelease() -> char const *"""
    return _oegraphsim.OEGraphSimGetRelease()

def OEGraphSimGetVersion() -> "unsigned int":
    """OEGraphSimGetVersion() -> unsigned int"""
    return _oegraphsim.OEGraphSimGetVersion()

def OEGraphSimGetArch() -> "char const *":
    """OEGraphSimGetArch() -> char const *"""
    return _oegraphsim.OEGraphSimGetArch()

def OEGraphSimGetPlatform() -> "char const *":
    """OEGraphSimGetPlatform() -> char const *"""
    return _oegraphsim.OEGraphSimGetPlatform()

def OEGraphSimIsLicensed(feature: 'char const *'=None, expdate: 'unsigned int *'=None) -> "bool":
    """
    OEGraphSimIsLicensed(char const * feature=None, unsigned int * expdate=None) -> bool
    OEGraphSimIsLicensed(char const * feature=None) -> bool
    OEGraphSimIsLicensed() -> bool
    """
    return _oegraphsim.OEGraphSimIsLicensed(feature, expdate)

def OEGraphSimGetLicensee(*args) -> "std::string":
    """
    OEGraphSimGetLicensee(std::string & licensee) -> bool
    OEGraphSimGetLicensee() -> std::string
    """
    return _oegraphsim.OEGraphSimGetLicensee(*args)

def OEGraphSimGetSite(*args) -> "std::string":
    """
    OEGraphSimGetSite(std::string & site) -> bool
    OEGraphSimGetSite() -> std::string
    """
    return _oegraphsim.OEGraphSimGetSite(*args)


