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


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

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


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

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

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

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

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

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

_oegraphsim = swig_import_helper()
del swig_import_helper

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

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


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


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


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


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


import weakref


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

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

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

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

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


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

def __no_op(*args) -> "void":
    return _oegraphsim.__no_op(*args)
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):
    r"""Proxy of C++ OEGraphSim::OESimScore class."""

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

    def __init__(self, i: "size_t", s: "double"):
        r"""__init__(OESimScore self, size_t i, double s) -> OESimScore"""
        _oegraphsim.OESimScore_swiginit(self, _oegraphsim.new_OESimScore(i, s))

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

    def GetScore(self) -> "double":
        r"""GetScore(OESimScore self) -> double"""
        return _oegraphsim.OESimScore_GetScore(self)
    _idx = property(_oegraphsim.OESimScore__idx_get, _oegraphsim.OESimScore__idx_set, doc=r"""_idx : size_t""")
    _score = property(_oegraphsim.OESimScore__score_get, _oegraphsim.OESimScore__score_set, doc=r"""_score : double""")
    __swig_destroy__ = _oegraphsim.delete_OESimScore

# Register OESimScore in _oegraphsim:
_oegraphsim.OESimScore_swigregister(OESimScore)

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

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

    def __init__(self, i: "size_t", j: "size_t", s: "double"):
        r"""__init__(OESimScorePair self, size_t i, size_t j, double s) -> OESimScorePair"""
        _oegraphsim.OESimScorePair_swiginit(self, _oegraphsim.new_OESimScorePair(i, j, s))

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

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

    def GetScore(self) -> "double":
        r"""GetScore(OESimScorePair self) -> double"""
        return _oegraphsim.OESimScorePair_GetScore(self)
    _idxA = property(_oegraphsim.OESimScorePair__idxA_get, _oegraphsim.OESimScorePair__idxA_set, doc=r"""_idxA : size_t""")
    _idxB = property(_oegraphsim.OESimScorePair__idxB_get, _oegraphsim.OESimScorePair__idxB_set, doc=r"""_idxB : size_t""")
    _score = property(_oegraphsim.OESimScorePair__score_get, _oegraphsim.OESimScorePair__score_set, doc=r"""_score : double""")
    __swig_destroy__ = _oegraphsim.delete_OESimScorePair

# Register OESimScorePair in _oegraphsim:
_oegraphsim.OESimScorePair_swigregister(OESimScorePair)

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

    thisown = 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

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

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

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

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

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

# Register OEFPTypeBase in _oegraphsim:
_oegraphsim.OEFPTypeBase_swigregister(OEFPTypeBase)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEFingerPrint self) -> OEFingerPrint
        __init__(OEFingerPrint self, OEFingerPrint rhs) -> OEFingerPrint
        """
        _oegraphsim.OEFingerPrint_swiginit(self, _oegraphsim.new_OEFingerPrint(*args))
    __swig_destroy__ = _oegraphsim.delete_OEFingerPrint

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



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

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

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

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

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

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

# Register OEFingerPrint in _oegraphsim:
_oegraphsim.OEFingerPrint_swigregister(OEFingerPrint)


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

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

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

def OEMakePathFP(*args) -> "bool":
    r"""
    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":
    r"""
    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":
    r"""
    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":
    r"""OEIsFPType(OEFingerPrint fp, unsigned int fptype) -> bool"""
    return _oegraphsim.OEIsFPType(fp, fptype)

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

def OEGetFPType(*args) -> "OEGraphSim::OEFPTypeBase const *":
    r"""
    OEGetFPType(unsigned int const fptype, bool const vs=False) -> 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 *":
    r"""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 *":
    r"""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 *":
    r"""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":
    r"""OEIsValidFPTypeString(std::string const & fptypestring) -> bool"""
    return _oegraphsim.OEIsValidFPTypeString(fptypestring)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEFPTypeParams self, OEFPTypeBase fptype) -> OEFPTypeParams
        __init__(OEFPTypeParams self, std::string const & typestr) -> OEFPTypeParams
        """
        _oegraphsim.OEFPTypeParams_swiginit(self, _oegraphsim.new_OEFPTypeParams(*args))
    __swig_destroy__ = _oegraphsim.delete_OEFPTypeParams

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

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

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

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

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

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

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

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

# Register OEFPTypeParams in _oegraphsim:
_oegraphsim.OEFPTypeParams_swigregister(OEFPTypeParams)

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

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

    def __init__(self, *args):
        r"""
        __init__(OESimScoreIter self) -> OESimScoreIter
        __init__(OESimScoreIter self, OESimScoreIter rhs) -> OESimScoreIter
        __init__(OESimScoreIter self, OESystem::OEIterBase< OEGraphSim::OESimScore > * rhs) -> OESimScoreIter
        __init__(OESimScoreIter self, OESystem::OEIterBase< OESystem::OEIter< OEGraphSim::OESimScore >::NonConstA > * rhs) -> OESimScoreIter
        """
        _oegraphsim.OESimScoreIter_swiginit(self, _oegraphsim.new_OESimScoreIter(*args))
    __swig_destroy__ = _oegraphsim.delete_OESimScoreIter

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

    def Push(self, *args) -> "void":
        r"""
        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":
        r"""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 > &":
        r"""ToFirst(OESimScoreIter self) -> OESimScoreIter"""
        return _oegraphsim.OESimScoreIter_ToFirst(self)

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

    def __ref__(self) -> "OEGraphSim::OESimScore &":
        r"""__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 *":
        r"""next(OESimScoreIter self) -> PyObject *"""
        return _oegraphsim.OESimScoreIter_next(self)

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

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

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

# Register OESimScoreIter in _oegraphsim:
_oegraphsim.OESimScoreIter_swigregister(OESimScoreIter)

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

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

    def __init__(self, *args):
        r"""
        __init__(OESimScorePairIter self) -> OESimScorePairIter
        __init__(OESimScorePairIter self, OESimScorePairIter rhs) -> OESimScorePairIter
        __init__(OESimScorePairIter self, OESystem::OEIterBase< OEGraphSim::OESimScorePair > * rhs) -> OESimScorePairIter
        __init__(OESimScorePairIter self, OESystem::OEIterBase< OESystem::OEIter< OEGraphSim::OESimScorePair >::NonConstA > * rhs) -> OESimScorePairIter
        """
        _oegraphsim.OESimScorePairIter_swiginit(self, _oegraphsim.new_OESimScorePairIter(*args))
    __swig_destroy__ = _oegraphsim.delete_OESimScorePairIter

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

    def Push(self, *args) -> "void":
        r"""
        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":
        r"""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 > &":
        r"""ToFirst(OESimScorePairIter self) -> OESimScorePairIter"""
        return _oegraphsim.OESimScorePairIter_ToFirst(self)

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

    def __ref__(self) -> "OEGraphSim::OESimScorePair &":
        r"""__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 *":
        r"""next(OESimScorePairIter self) -> PyObject *"""
        return _oegraphsim.OESimScorePairIter_next(self)

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

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

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

# Register OESimScorePairIter in _oegraphsim:
_oegraphsim.OESimScorePairIter_swigregister(OESimScorePairIter)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEFingerPrintIter self) -> OEFingerPrintIter
        __init__(OEFingerPrintIter self, OEFingerPrintIter rhs) -> OEFingerPrintIter
        __init__(OEFingerPrintIter self, OESystem::OEIterBase< OEGraphSim::OEFingerPrint const > * rhs) -> OEFingerPrintIter
        __init__(OEFingerPrintIter self, OESystem::OEIterBase< OESystem::OEIter< OEGraphSim::OEFingerPrint const >::NonConstA > * rhs) -> OEFingerPrintIter
        """
        _oegraphsim.OEFingerPrintIter_swiginit(self, _oegraphsim.new_OEFingerPrintIter(*args))
    __swig_destroy__ = _oegraphsim.delete_OEFingerPrintIter

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

    def Push(self, *args) -> "void":
        r"""
        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":
        r"""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 > &":
        r"""ToFirst(OEFingerPrintIter self) -> OEFingerPrintIter"""
        return _oegraphsim.OEFingerPrintIter_ToFirst(self)

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

    def __ref__(self) -> "OEGraphSim::OEFingerPrint const &":
        r"""__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 *":
        r"""next(OEFingerPrintIter self) -> PyObject *"""
        return _oegraphsim.OEFingerPrintIter_next(self)

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

    def Next(self, *args) -> "OESystem::OEIter< OEGraphSim::OEFingerPrint const > &":
        r"""
        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 > &":
        r"""
        Prev(OEFingerPrintIter self) -> OEFingerPrintIter
        Prev(OEFingerPrintIter self, int i) -> OEFingerPrintIter
        """
        return _oegraphsim.OEFingerPrintIter_Prev(self, *args)

# Register OEFingerPrintIter in _oegraphsim:
_oegraphsim.OEFingerPrintIter_swigregister(OEFingerPrintIter)


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

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

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

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

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

    def __init__(self, *args):
        r"""
        __init__(OEFPDatabaseOptions self) -> OEFPDatabaseOptions
        __init__(OEFPDatabaseOptions self, unsigned int const limit, unsigned int const simfunc=) -> OEFPDatabaseOptions
        __init__(OEFPDatabaseOptions self, OEFPDatabaseOptions arg2) -> OEFPDatabaseOptions
        """
        _oegraphsim.OEFPDatabaseOptions_swiginit(self, _oegraphsim.new_OEFPDatabaseOptions(*args))
    __swig_destroy__ = _oegraphsim.delete_OEFPDatabaseOptions

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

# Register OEFPDatabaseOptions in _oegraphsim:
_oegraphsim.OEFPDatabaseOptions_swigregister(OEFPDatabaseOptions)


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

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

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

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

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

    def __init__(self, *args):
        r"""
        __init__(OEFPDatabase self, unsigned int fptype) -> OEFPDatabase
        __init__(OEFPDatabase self, OEFPTypeBase arg2) -> OEFPDatabase
        """
        _oegraphsim.OEFPDatabase_swiginit(self, _oegraphsim.new_OEFPDatabase(*args))
    __swig_destroy__ = _oegraphsim.delete_OEFPDatabase

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

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

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

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

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

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

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

    def GetDescendingOrder(self) -> "bool":
        r"""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":
        r"""NumFingerPrints(OEFPDatabase self) -> unsigned int"""
        return _oegraphsim.OEFPDatabase_NumFingerPrints(self)

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

    def GetScores(self, *args) -> "OESystem::OEIterBase< OEGraphSim::OESimScore > *":
        r"""
        GetScores(OEFPDatabase self, OEFingerPrint fp, unsigned int bgn=0, unsigned int end=0) -> OESystem::OEIterBase< OEGraphSim::OESimScore >
        GetScores(OEFPDatabase self, OEMolBase mol, unsigned int bgn=0, unsigned int end=0) -> 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 > *":
        r"""
        GetSortedScores(OEFPDatabase self, OEFingerPrint fp, 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, unsigned int end=0) -> 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)

# Register OEFPDatabase in _oegraphsim:
_oegraphsim.OEFPDatabase_swigregister(OEFPDatabase)


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

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

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

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

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

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

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

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

    def __init__(self):
        r"""__init__(OESimFuncBase self) -> OESimFuncBase"""
        if self.__class__ == OESimFuncBase:
            _self = None
        else:
            _self = self
        _oegraphsim.OESimFuncBase_swiginit(self, _oegraphsim.new_OESimFuncBase(_self, ))
    __swig_destroy__ = _oegraphsim.delete_OESimFuncBase

    def __call__(self, fpA: "OEFingerPrint", fpB: "OEFingerPrint") -> "float":
        r"""__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":
        r"""GetSimTypeString(OESimFuncBase self) -> std::string"""
        return _oegraphsim.OESimFuncBase_GetSimTypeString(self)
    def __disown__(self):
        self.this.disown()
        _oegraphsim.disown_OESimFuncBase(self)
        return weakref.proxy(self)

# Register OESimFuncBase in _oegraphsim:
_oegraphsim.OESimFuncBase_swigregister(OESimFuncBase)

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

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

    def __init__(self):
        r"""__init__(OETanimotoSim self) -> OETanimotoSim"""
        _oegraphsim.OETanimotoSim_swiginit(self, _oegraphsim.new_OETanimotoSim())

    def __call__(self, fpA: "OEFingerPrint", fpB: "OEFingerPrint") -> "float":
        r"""__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":
        r"""GetSimTypeString(OETanimotoSim self) -> std::string"""
        return _oegraphsim.OETanimotoSim_GetSimTypeString(self)
    __swig_destroy__ = _oegraphsim.delete_OETanimotoSim

# Register OETanimotoSim in _oegraphsim:
_oegraphsim.OETanimotoSim_swigregister(OETanimotoSim)

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

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

    def __init__(self, *args):
        r"""
        __init__(OETverskySim self, float a=0.95) -> OETverskySim
        __init__(OETverskySim self, float a, float b) -> OETverskySim
        """
        _oegraphsim.OETverskySim_swiginit(self, _oegraphsim.new_OETverskySim(*args))

    def __call__(self, fpA: "OEFingerPrint", fpB: "OEFingerPrint") -> "float":
        r"""__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":
        r"""GetSimTypeString(OETverskySim self) -> std::string"""
        return _oegraphsim.OETverskySim_GetSimTypeString(self)

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

    def GetBeta(self) -> "float":
        r"""GetBeta(OETverskySim self) -> float"""
        return _oegraphsim.OETverskySim_GetBeta(self)
    __swig_destroy__ = _oegraphsim.delete_OETverskySim

# Register OETverskySim in _oegraphsim:
_oegraphsim.OETverskySim_swigregister(OETverskySim)


def OEGetBitCounts(*args) -> "PyObject *":
    r"""
    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":
    r"""OEGetFingerPrintVersion(unsigned int fptype) -> unsigned short"""
    return _oegraphsim.OEGetFingerPrintVersion(fptype)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEFPHistogram self, size_t const numBins=200, double const min=0.0, double const max=1.0) -> OEFPHistogram
        __init__(OEFPHistogram self, std::vector< uint64_t,std::allocator< uint64_t > > const & counts, double const min=0.0, double const max=1.0) -> OEFPHistogram
        __init__(OEFPHistogram self, OEFPHistogram arg2) -> OEFPHistogram
        """
        _oegraphsim.OEFPHistogram_swiginit(self, _oegraphsim.new_OEFPHistogram(*args))
    __swig_destroy__ = _oegraphsim.delete_OEFPHistogram

    def GetBinIdx(self, *args) -> "size_t":
        r"""
        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":
        r"""
        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 > *":
        r"""GetCounts(OEFPHistogram self) -> OESystem::OEIterBase< unsigned int > *"""
        return _oegraphsim.OEFPHistogram_GetCounts(self)

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

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

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

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

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

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

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

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

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

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

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

# Register OEFPHistogram in _oegraphsim:
_oegraphsim.OEFPHistogram_swigregister(OEFPHistogram)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEFPVariogram self, size_t numBins=200, double min=0.0, double max=1.0) -> OEFPVariogram
        __init__(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__(OEFPVariogram self, OEFPVariogram arg2) -> OEFPVariogram
        """
        _oegraphsim.OEFPVariogram_swiginit(self, _oegraphsim.new_OEFPVariogram(*args))
    __swig_destroy__ = _oegraphsim.delete_OEFPVariogram

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

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

# Register OEFPVariogram in _oegraphsim:
_oegraphsim.OEFPVariogram_swigregister(OEFPVariogram)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEFastFPDatabaseParams self) -> OEFastFPDatabaseParams
        __init__(OEFastFPDatabaseParams self, std::string const & fpdbfname) -> OEFastFPDatabaseParams
        """
        _oegraphsim.OEFastFPDatabaseParams_swiginit(self, _oegraphsim.new_OEFastFPDatabaseParams(*args))
    __swig_destroy__ = _oegraphsim.delete_OEFastFPDatabaseParams

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

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

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

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

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

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

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

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

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

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

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

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

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

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

# Register OEFastFPDatabaseParams in _oegraphsim:
_oegraphsim.OEFastFPDatabaseParams_swigregister(OEFastFPDatabaseParams)


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

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

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

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

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

    def __init__(self, fptype: "OEFPTypeBase"):
        r"""__init__(OECreateFastFPDatabaseOptions self, OEFPTypeBase fptype) -> OECreateFastFPDatabaseOptions"""
        _oegraphsim.OECreateFastFPDatabaseOptions_swiginit(self, _oegraphsim.new_OECreateFastFPDatabaseOptions(fptype))
    __swig_destroy__ = _oegraphsim.delete_OECreateFastFPDatabaseOptions

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

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

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

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

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

# Register OECreateFastFPDatabaseOptions in _oegraphsim:
_oegraphsim.OECreateFastFPDatabaseOptions_swigregister(OECreateFastFPDatabaseOptions)


def OECreateFastFPDatabaseFile(*args) -> "bool":
    r"""
    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":
    r"""OESimSearchStatusToName(unsigned int const status) -> std::string"""
    return _oegraphsim.OESimSearchStatusToName(status)
class OESimSearchResult(object):
    r"""Proxy of C++ OEGraphSim::OESimSearchResult class."""

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

    def __init__(self, nrbins: "size_t const"=50, min: "double const"=0.0, max: "double const"=1.0):
        r"""__init__(OESimSearchResult self, size_t const nrbins=50, double const min=0.0, double const max=1.0) -> OESimSearchResult"""
        _oegraphsim.OESimSearchResult_swiginit(self, _oegraphsim.new_OESimSearchResult(nrbins, min, max))
    __swig_destroy__ = _oegraphsim.delete_OESimSearchResult

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

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

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

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

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

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

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

# Register OESimSearchResult in _oegraphsim:
_oegraphsim.OESimSearchResult_swigregister(OESimSearchResult)

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

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

    def __init__(self, *args):
        r"""__init__(OEFastFPDatabase self, std::string const & dbfile, unsigned int memtype=) -> OEFastFPDatabase"""
        _oegraphsim.OEFastFPDatabase_swiginit(self, _oegraphsim.new_OEFastFPDatabase(*args))
    __swig_destroy__ = _oegraphsim.delete_OEFastFPDatabase

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

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

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

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

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

    def GetFingerPrint(self, fp: "OEFingerPrint", fpidx: "size_t const") -> "bool":
        r"""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":
        r"""GetMoleculeIndex(OEFastFPDatabase self, size_t const fpidx) -> size_t"""
        return _oegraphsim.OEFastFPDatabase_GetMoleculeIndex(self, fpidx)

    def GetScores(self, *args) -> "OESystem::OEIterBase< OEGraphSim::OESimScore > *":
        r"""
        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 > *":
        r"""
        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 > *":
        r"""
        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 > *":
        r"""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":
        r"""GetHistogram(OEFastFPDatabase self, OEFPDatabaseOptions opts, size_t const nrbins=200) -> OEFPHistogram"""
        return _oegraphsim.OEFastFPDatabase_GetHistogram(self, opts, nrbins)

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

    def GetSparseMatrix(self, opts: "OEFPDatabaseOptions") -> "OESystem::OEIterBase< OEGraphSim::OESimScorePair > *":
        r"""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":
        r"""SortedSearch(OEFastFPDatabase self, OESimSearchResult result, OEMolBase mol, OEFPDatabaseOptions opts) -> unsigned int"""
        return _oegraphsim.OEFastFPDatabase_SortedSearch(self, result, mol, opts)

# Register OEFastFPDatabase in _oegraphsim:
_oegraphsim.OEFastFPDatabase_swigregister(OEFastFPDatabase)


def GetSWIG_NewPointerObj(*args) -> "PyObject *":
    r"""
    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(OESphere arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEReceptorProteinConstraint arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEReceptorConstraintFeature arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEHierResidue arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEHierFragment arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEHierChain arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEPlaceHydrogensMoverNote arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEAnnotation arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEFuzzy arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(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):
    r"""Proxy of C++ OEGraphSim::OEFPPattern class."""

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

    def __init__(self, atoms: "OEAtomIter", bonds: "OEBondIter", smarts: "std::string const &", unhashed: "unsigned int", setbit: "unsigned int"):
        r"""__init__(OEFPPattern self, OEAtomIter atoms, OEBondIter bonds, std::string const & smarts, unsigned int unhashed, unsigned int setbit) -> OEFPPattern"""
        _oegraphsim.OEFPPattern_swiginit(self, _oegraphsim.new_OEFPPattern(atoms, bonds, smarts, unhashed, setbit))
    __swig_destroy__ = _oegraphsim.delete_OEFPPattern

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

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

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

# Register OEFPPattern in _oegraphsim:
_oegraphsim.OEFPPattern_swigregister(OEFPPattern)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEFPPatternIter self) -> OEFPPatternIter
        __init__(OEFPPatternIter self, OEFPPatternIter rhs) -> OEFPPatternIter
        __init__(OEFPPatternIter self, OESystem::OEIterBase< OEGraphSim::OEFPPattern > * rhs) -> OEFPPatternIter
        __init__(OEFPPatternIter self, OESystem::OEIterBase< OESystem::OEIter< OEGraphSim::OEFPPattern >::NonConstA > * rhs) -> OEFPPatternIter
        """
        _oegraphsim.OEFPPatternIter_swiginit(self, _oegraphsim.new_OEFPPatternIter(*args))
    __swig_destroy__ = _oegraphsim.delete_OEFPPatternIter

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

    def Push(self, *args) -> "void":
        r"""
        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":
        r"""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 > &":
        r"""ToFirst(OEFPPatternIter self) -> OEFPPatternIter"""
        return _oegraphsim.OEFPPatternIter_ToFirst(self)

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

    def __ref__(self) -> "OEGraphSim::OEFPPattern &":
        r"""__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 *":
        r"""next(OEFPPatternIter self) -> PyObject *"""
        return _oegraphsim.OEFPPatternIter_next(self)

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

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

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

# Register OEFPPatternIter in _oegraphsim:
_oegraphsim.OEFPPatternIter_swigregister(OEFPPatternIter)


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

def OEGetFPPatterns(mol: "OEMolBase", fptype: "OEFPTypeBase") -> "OESystem::OEIterBase< OEGraphSim::OEFPPattern > *":
    r"""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 > *":
    r"""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":
    r"""OESetFingerPrintValue(OERecord rec, OEFingerPrintField field, OEFingerPrint fp) -> bool"""
    return _oegraphsim.OESetFingerPrintValue(rec, field, fp)

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

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

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

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

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

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

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

    def __init__(self):
        r"""__init__(OEFingerPrintType self) -> OEFingerPrintType"""
        _oegraphsim.OEFingerPrintType_swiginit(self, _oegraphsim.new_OEFingerPrintType())
    __swig_destroy__ = _oegraphsim.delete_OEFingerPrintType

# Register OEFingerPrintType in _oegraphsim:
_oegraphsim.OEFingerPrintType_swigregister(OEFingerPrintType)
cvar = _oegraphsim.cvar

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

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

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

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

    @staticmethod
    def GetCopyForCache(*args) -> "std::shared_ptr< std::vector< std::optional< OEGraphSim::OEFingerPrint >,std::allocator< std::optional< OEGraphSim::OEFingerPrint > > > >":
        r"""
        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< std::optional< OEGraphSim::OEFingerPrint >,std::allocator< std::optional< OEGraphSim::OEFingerPrint > > > const & val) -> std::shared_ptr< std::vector< std::optional< OEGraphSim::OEFingerPrint >,std::allocator< std::optional< OEGraphSim::OEFingerPrint > > > >
        """
        return _oegraphsim.OEFingerPrintVecType_GetCopyForCache(*args)

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

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

    def __init__(self):
        r"""__init__(OEFingerPrintVecType self) -> OEFingerPrintVecType"""
        _oegraphsim.OEFingerPrintVecType_swiginit(self, _oegraphsim.new_OEFingerPrintVecType())
    __swig_destroy__ = _oegraphsim.delete_OEFingerPrintVecType

# Register OEFingerPrintVecType in _oegraphsim:
_oegraphsim.OEFingerPrintVecType_swigregister(OEFingerPrintVecType)

def OEFingerPrintVecType_format(val: "std::vector< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint >,std::allocator< OEStdOptionalNamespace::optional< OEGraphSim::OEFingerPrint > > > const &") -> "std::string":
    r"""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< std::optional< OEGraphSim::OEFingerPrint >,std::allocator< std::optional< OEGraphSim::OEFingerPrint > > > >":
    r"""
    OEFingerPrintVecType_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< std::optional< OEGraphSim::OEFingerPrint >,std::allocator< std::optional< OEGraphSim::OEFingerPrint > > > const & val) -> std::shared_ptr< std::vector< std::optional< OEGraphSim::OEFingerPrint >,std::allocator< std::optional< OEGraphSim::OEFingerPrint > > > >
    """
    return _oegraphsim.OEFingerPrintVecType_GetCopyForCache(*args)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEFingerPrintField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEFingerPrintField
        __init__(OEFingerPrintField self, OEFieldBase other) -> OEFingerPrintField
        """
        _oegraphsim.OEFingerPrintField_swiginit(self, _oegraphsim.new_OEFingerPrintField(*args))

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

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

# Register OEFingerPrintField in _oegraphsim:
_oegraphsim.OEFingerPrintField_swigregister(OEFingerPrintField)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEFingerPrintVecField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEFingerPrintVecField
        __init__(OEFingerPrintVecField self, OEFieldBase f) -> OEFingerPrintVecField
        """
        _oegraphsim.OEFingerPrintVecField_swiginit(self, _oegraphsim.new_OEFingerPrintVecField(*args))

    def deserialize(self, *args) -> "bool":
        r"""
        deserialize(OEFingerPrintVecField self, std::vector< std::optional< OEGraphSim::OEFingerPrint >,std::allocator< std::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 >":
        r"""get_type(OEFingerPrintVecField self) -> OEFingerPrintVecType"""
        return _oegraphsim.OEFingerPrintVecField_get_type(self)
    __swig_destroy__ = _oegraphsim.delete_OEFingerPrintVecField

# Register OEFingerPrintVecField in _oegraphsim:
_oegraphsim.OEFingerPrintVecField_swigregister(OEFingerPrintVecField)

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

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

    def __init__(self, *args):
        r"""__init__(OEFingerPrintMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEFingerPrintMatchField"""
        _oegraphsim.OEFingerPrintMatchField_swiginit(self, _oegraphsim.new_OEFingerPrintMatchField(*args))
    __swig_destroy__ = _oegraphsim.delete_OEFingerPrintMatchField

# Register OEFingerPrintMatchField in _oegraphsim:
_oegraphsim.OEFingerPrintMatchField_swigregister(OEFingerPrintMatchField)

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

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

    def __init__(self, *args):
        r"""__init__(OEFingerPrintVecMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEFingerPrintVecMatchField"""
        _oegraphsim.OEFingerPrintVecMatchField_swiginit(self, _oegraphsim.new_OEFingerPrintVecMatchField(*args))
    __swig_destroy__ = _oegraphsim.delete_OEFingerPrintVecMatchField

# Register OEFingerPrintVecMatchField in _oegraphsim:
_oegraphsim.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 *":
    r"""OEGraphSimGetRelease() -> char const *"""
    return _oegraphsim.OEGraphSimGetRelease()

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

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

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

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

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

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


