# CONFIDENTIAL. (C) 2022 Cadence Design Systems, Inc. (Cadence)
# All rights reserved.
# ALL SOFTWARE BELOW IS PROPRIETARY AND CONFIDENTIAL TO CADENCE
# AND IS SUBJECT TO THE FULL PROTECTION OF COPYRIGHT AND TRADE SECRET LAW.
# Copying or modifying this software is strictly prohibited and illegal.
# Using this software without a valid license from Cadence 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 Cadence 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
    import importlib.abc

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

    _oechem = libs.OEGetModule('_oechem3401')
    return _oechem

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

class SwigPyIterator(object):
    r"""Proxy of C++ swig::SwigPyIterator 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__ = _oechem.delete_SwigPyIterator

    def value(self) -> "PyObject *":
        r"""value(SwigPyIterator self) -> PyObject *"""
        return _oechem.SwigPyIterator_value(self)

    def incr(self, n: "size_t"=1) -> "swig::SwigPyIterator *":
        r"""incr(SwigPyIterator self, size_t n=1) -> SwigPyIterator"""
        return _oechem.SwigPyIterator_incr(self, n)

    def decr(self, n: "size_t"=1) -> "swig::SwigPyIterator *":
        r"""decr(SwigPyIterator self, size_t n=1) -> SwigPyIterator"""
        return _oechem.SwigPyIterator_decr(self, n)

    def distance(self, x: "SwigPyIterator") -> "ptrdiff_t":
        r"""distance(SwigPyIterator self, SwigPyIterator x) -> ptrdiff_t"""
        return _oechem.SwigPyIterator_distance(self, x)

    def equal(self, x: "SwigPyIterator") -> "bool":
        r"""equal(SwigPyIterator self, SwigPyIterator x) -> bool"""
        return _oechem.SwigPyIterator_equal(self, x)

    def copy(self) -> "swig::SwigPyIterator *":
        r"""copy(SwigPyIterator self) -> SwigPyIterator"""
        return _oechem.SwigPyIterator_copy(self)

    def next(self) -> "PyObject *":
        r"""next(SwigPyIterator self) -> PyObject *"""
        return _oechem.SwigPyIterator_next(self)

    def __next__(self) -> "PyObject *":
        r"""__next__(SwigPyIterator self) -> PyObject *"""
        return _oechem.SwigPyIterator___next__(self)

    def previous(self) -> "PyObject *":
        r"""previous(SwigPyIterator self) -> PyObject *"""
        return _oechem.SwigPyIterator_previous(self)

    def advance(self, n: "ptrdiff_t") -> "swig::SwigPyIterator *":
        r"""advance(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"""
        return _oechem.SwigPyIterator_advance(self, n)

    def __eq__(self, x: "SwigPyIterator") -> "bool":
        r"""__eq__(SwigPyIterator self, SwigPyIterator x) -> bool"""
        return _oechem.SwigPyIterator___eq__(self, x)

    def __ne__(self, x: "SwigPyIterator") -> "bool":
        r"""__ne__(SwigPyIterator self, SwigPyIterator x) -> bool"""
        return _oechem.SwigPyIterator___ne__(self, x)

    def __iadd__(self, n: "ptrdiff_t") -> "swig::SwigPyIterator &":
        r"""__iadd__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"""
        return _oechem.SwigPyIterator___iadd__(self, n)

    def __isub__(self, n: "ptrdiff_t") -> "swig::SwigPyIterator &":
        r"""__isub__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"""
        return _oechem.SwigPyIterator___isub__(self, n)

    def __add__(self, n: "ptrdiff_t") -> "swig::SwigPyIterator *":
        r"""__add__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"""
        return _oechem.SwigPyIterator___add__(self, n)

    def __sub__(self, *args) -> "ptrdiff_t":
        r"""
        __sub__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator
        __sub__(SwigPyIterator self, SwigPyIterator x) -> ptrdiff_t
        """
        return _oechem.SwigPyIterator___sub__(self, *args)
    def __iter__(self):
        return self

# Register SwigPyIterator in _oechem:
_oechem.SwigPyIterator_swigregister(SwigPyIterator)

OERecordReturnCode_OK = _oechem.OERecordReturnCode_OK

OERecordReturnCode_NoSuchField = _oechem.OERecordReturnCode_NoSuchField

OERecordReturnCode_NoValue = _oechem.OERecordReturnCode_NoValue

OERecordReturnCode_NullValue = _oechem.OERecordReturnCode_NullValue

OERecordReturnCode_TypeMismatch = _oechem.OERecordReturnCode_TypeMismatch

OERecordReturnCode_MetadataMismatch = _oechem.OERecordReturnCode_MetadataMismatch

OEErrorLevel_Undefined = _oechem.OEErrorLevel_Undefined

OEErrorLevel_Debug = _oechem.OEErrorLevel_Debug

OEErrorLevel_Verbose = _oechem.OEErrorLevel_Verbose

OEErrorLevel_Info = _oechem.OEErrorLevel_Info

OEErrorLevel_Warning = _oechem.OEErrorLevel_Warning

OEErrorLevel_Error = _oechem.OEErrorLevel_Error

OEErrorLevel_Fatal = _oechem.OEErrorLevel_Fatal

OEErrorLevel_Usage = _oechem.OEErrorLevel_Usage

OEErrorLevel_Quiet = _oechem.OEErrorLevel_Quiet

OEErrorLevel_MAX = _oechem.OEErrorLevel_MAX

OEErrorLevel_MIN = _oechem.OEErrorLevel_MIN


OEErrorLevel_Default = OEErrorLevel_Info

OEBDictionary_OEBinaryTagMaxLength = _oechem.OEBDictionary_OEBinaryTagMaxLength

OEBDictionary_UDT = _oechem.OEBDictionary_UDT

OEBDictionary_UserDefinedTag = _oechem.OEBDictionary_UserDefinedTag

OEBDictionary_OEBasePOD = _oechem.OEBDictionary_OEBasePOD

OEBReturnCode_Success = _oechem.OEBReturnCode_Success

OEBReturnCode_NoParentClass = _oechem.OEBReturnCode_NoParentClass

OEBReturnCode_CheckFailed = _oechem.OEBReturnCode_CheckFailed

OEBReturnCode_StreamFailed = _oechem.OEBReturnCode_StreamFailed

OEBReturnCode_IncorrectSize = _oechem.OEBReturnCode_IncorrectSize

OEBReturnCode_Continue = _oechem.OEBReturnCode_Continue

OEBReturnCode_ReadTagFailed = _oechem.OEBReturnCode_ReadTagFailed

OEBReturnCode_CorruptHeader = _oechem.OEBReturnCode_CorruptHeader

OEBReturnCode_EndOfFile = _oechem.OEBReturnCode_EndOfFile

OEBReturnCode_ReadLengthFailed = _oechem.OEBReturnCode_ReadLengthFailed

OEBReturnCode_TypeCheckFailed = _oechem.OEBReturnCode_TypeCheckFailed

OEBReturnCode_IncorrectHandlerType = _oechem.OEBReturnCode_IncorrectHandlerType

OEParamVisibility_Simple = _oechem.OEParamVisibility_Simple

OEParamVisibility_Normal = _oechem.OEParamVisibility_Normal

OEParamVisibility_Hidden = _oechem.OEParamVisibility_Hidden

OEParamVisibility_MAX = _oechem.OEParamVisibility_MAX

OEMemPoolMode_SingleThreaded = _oechem.OEMemPoolMode_SingleThreaded

OEMemPoolMode_Mutexed = _oechem.OEMemPoolMode_Mutexed

OEMemPoolMode_ThreadLocal = _oechem.OEMemPoolMode_ThreadLocal

OEMemPoolMode_BoundedCache = _oechem.OEMemPoolMode_BoundedCache

OEMemPoolMode_UnboundedCache = _oechem.OEMemPoolMode_UnboundedCache

OEMemPoolMode_System = _oechem.OEMemPoolMode_System

OEMemPoolMode_Spinlocked = _oechem.OEMemPoolMode_Spinlocked


OEMemPoolMode_Default = OEMemPoolMode_ThreadLocal|OEMemPoolMode_UnboundedCache

OERangeInclusivity_All = _oechem.OERangeInclusivity_All

OERangeInclusivity_Between = _oechem.OERangeInclusivity_Between

OERangeInclusivity_Low = _oechem.OERangeInclusivity_Low

OERangeInclusivity_High = _oechem.OERangeInclusivity_High

OEAltLocFactOption_None = _oechem.OEAltLocFactOption_None

OEAltLocFactOption_TrustInputBonds = _oechem.OEAltLocFactOption_TrustInputBonds

OEMakeAltMolOption_None = _oechem.OEMakeAltMolOption_None

OEMakeAltMolOption_RemoveAltCodes = _oechem.OEMakeAltMolOption_RemoveAltCodes

OEAroModel_Undefined = _oechem.OEAroModel_Undefined

OEAroModel_Daylight = _oechem.OEAroModel_Daylight

OEAroModel_OpenEye = _oechem.OEAroModel_OpenEye

OEAroModel_Tripos = _oechem.OEAroModel_Tripos

OEAroModel_MMFF = _oechem.OEAroModel_MMFF

OEAroModel_MDL = _oechem.OEAroModel_MDL

OETriposType_Du = _oechem.OETriposType_Du

OETriposType_Al = _oechem.OETriposType_Al

OETriposType_Br = _oechem.OETriposType_Br

OETriposType_C1 = _oechem.OETriposType_C1

OETriposType_C2 = _oechem.OETriposType_C2

OETriposType_C3 = _oechem.OETriposType_C3

OETriposType_Car = _oechem.OETriposType_Car

OETriposType_Ccat = _oechem.OETriposType_Ccat

OETriposType_Ca = _oechem.OETriposType_Ca

OETriposType_Cl = _oechem.OETriposType_Cl

OETriposType_F = _oechem.OETriposType_F

OETriposType_H = _oechem.OETriposType_H

OETriposType_I = _oechem.OETriposType_I

OETriposType_K = _oechem.OETriposType_K

OETriposType_Li = _oechem.OETriposType_Li

OETriposType_Lp = _oechem.OETriposType_Lp

OETriposType_N1 = _oechem.OETriposType_N1

OETriposType_N2 = _oechem.OETriposType_N2

OETriposType_N3 = _oechem.OETriposType_N3

OETriposType_N4 = _oechem.OETriposType_N4

OETriposType_Nam = _oechem.OETriposType_Nam

OETriposType_Nar = _oechem.OETriposType_Nar

OETriposType_Npl3 = _oechem.OETriposType_Npl3

OETriposType_Na = _oechem.OETriposType_Na

OETriposType_O2 = _oechem.OETriposType_O2

OETriposType_O3 = _oechem.OETriposType_O3

OETriposType_Oco2 = _oechem.OETriposType_Oco2

OETriposType_P3 = _oechem.OETriposType_P3

OETriposType_S2 = _oechem.OETriposType_S2

OETriposType_S3 = _oechem.OETriposType_S3

OETriposType_So = _oechem.OETriposType_So

OETriposType_So2 = _oechem.OETriposType_So2

OETriposType_Si = _oechem.OETriposType_Si

OETriposType_Cu = _oechem.OETriposType_Cu

OETriposType_Cooh = _oechem.OETriposType_Cooh

OETriposType_Croh = _oechem.OETriposType_Croh

OETriposType_Crth = _oechem.OETriposType_Crth

OETriposType_Fe = _oechem.OETriposType_Fe

OETriposType_Mg = _oechem.OETriposType_Mg

OETriposType_Mn = _oechem.OETriposType_Mn

OETriposType_Mo = _oechem.OETriposType_Mo

OETriposType_Se = _oechem.OETriposType_Se

OETriposType_Sn = _oechem.OETriposType_Sn

OETriposType_Zn = _oechem.OETriposType_Zn

OETriposType_MAXTYPE = _oechem.OETriposType_MAXTYPE

OEMModType_C1 = _oechem.OEMModType_C1

OEMModType_C2 = _oechem.OEMModType_C2

OEMModType_C3 = _oechem.OEMModType_C3

OEMModType_CA = _oechem.OEMModType_CA

OEMModType_CB = _oechem.OEMModType_CB

OEMModType_CC = _oechem.OEMModType_CC

OEMModType_CD = _oechem.OEMModType_CD

OEMModType_CE = _oechem.OEMModType_CE

OEMModType_CF = _oechem.OEMModType_CF

OEMModType_CM = _oechem.OEMModType_CM

OEMModType_CP = _oechem.OEMModType_CP

OEMModType_CR = _oechem.OEMModType_CR

OEMModType_C0 = _oechem.OEMModType_C0

OEMModType_O2 = _oechem.OEMModType_O2

OEMModType_O3 = _oechem.OEMModType_O3

OEMModType_OA = _oechem.OEMModType_OA

OEMModType_OM = _oechem.OEMModType_OM

OEMModType_OW = _oechem.OEMModType_OW

OEMModType_OP = _oechem.OEMModType_OP

OEMModType_OQ = _oechem.OEMModType_OQ

OEMModType_O0 = _oechem.OEMModType_O0

OEMModType_N1 = _oechem.OEMModType_N1

OEMModType_N2 = _oechem.OEMModType_N2

OEMModType_N3 = _oechem.OEMModType_N3

OEMModType_NA = _oechem.OEMModType_NA

OEMModType_NB = _oechem.OEMModType_NB

OEMModType_NC = _oechem.OEMModType_NC

OEMModType_ND = _oechem.OEMModType_ND

OEMModType_N4 = _oechem.OEMModType_N4

OEMModType_N5 = _oechem.OEMModType_N5

OEMModType_NE = _oechem.OEMModType_NE

OEMModType_NF = _oechem.OEMModType_NF

OEMModType_NG = _oechem.OEMModType_NG

OEMModType_NH = _oechem.OEMModType_NH

OEMModType_NI = _oechem.OEMModType_NI

OEMModType_NM = _oechem.OEMModType_NM

OEMModType_NP = _oechem.OEMModType_NP

OEMModType_N0 = _oechem.OEMModType_N0

OEMModType_H1 = _oechem.OEMModType_H1

OEMModType_H2 = _oechem.OEMModType_H2

OEMModType_H3 = _oechem.OEMModType_H3

OEMModType_H4 = _oechem.OEMModType_H4

OEMModType_H5 = _oechem.OEMModType_H5

OEMModType_H0 = _oechem.OEMModType_H0

OEMModType_S1 = _oechem.OEMModType_S1

OEMModType_SA = _oechem.OEMModType_SA

OEMModType_SM = _oechem.OEMModType_SM

OEMModType_S0 = _oechem.OEMModType_S0

OEMModType_P0 = _oechem.OEMModType_P0

OEMModType_B2 = _oechem.OEMModType_B2

OEMModType_B3 = _oechem.OEMModType_B3

OEMModType_F0 = _oechem.OEMModType_F0

OEMModType_Cl = _oechem.OEMModType_Cl

OEMModType_Br = _oechem.OEMModType_Br

OEMModType_I0 = _oechem.OEMModType_I0

OEMModType_Si = _oechem.OEMModType_Si

OEMModType_Du = _oechem.OEMModType_Du

OEMModType_Z0 = _oechem.OEMModType_Z0

OEMModType_Lp = _oechem.OEMModType_Lp

OEMModType_Li = _oechem.OEMModType_Li

OEMModType_Na = _oechem.OEMModType_Na

OEMModType_K0 = _oechem.OEMModType_K0

OEMModType_Rb = _oechem.OEMModType_Rb

OEMModType_Cs = _oechem.OEMModType_Cs

OEMModType_Ca = _oechem.OEMModType_Ca

OEMModType_Ba = _oechem.OEMModType_Ba

OEMModType_Mg = _oechem.OEMModType_Mg

OEMModType_M2 = _oechem.OEMModType_M2

OEMModType_M3 = _oechem.OEMModType_M3

OEMModType_M4 = _oechem.OEMModType_M4

OEMModType_M5 = _oechem.OEMModType_M5

OEMModType_M6 = _oechem.OEMModType_M6

OEMModType_M7 = _oechem.OEMModType_M7

OEMModType_f2 = _oechem.OEMModType_f2

OEMModType_f3 = _oechem.OEMModType_f3

OEMModType_o2 = _oechem.OEMModType_o2

OEMModType_o3 = _oechem.OEMModType_o3

OEMModType_n2 = _oechem.OEMModType_n2

OEMModType_n3 = _oechem.OEMModType_n3

OEMModType_c1 = _oechem.OEMModType_c1

OEMModType_c2 = _oechem.OEMModType_c2

OEMModType_Zn = _oechem.OEMModType_Zn

OEMModType_m3 = _oechem.OEMModType_m3

OEMModType_m4 = _oechem.OEMModType_m4

OEMModType_m5 = _oechem.OEMModType_m5

OEMModType_m6 = _oechem.OEMModType_m6

OEMModType_SP = _oechem.OEMModType_SP

OEMModType_S2 = _oechem.OEMModType_S2

OEMModType_Cm = _oechem.OEMModType_Cm

OEMModType_MAXTYPE = _oechem.OEMModType_MAXTYPE

OECIPAtomStereo_NotStereo = _oechem.OECIPAtomStereo_NotStereo

OECIPAtomStereo_S = _oechem.OECIPAtomStereo_S

OECIPAtomStereo_R = _oechem.OECIPAtomStereo_R

OECIPAtomStereo_UnspecStereo = _oechem.OECIPAtomStereo_UnspecStereo

OECIPBondStereo_NotStereo = _oechem.OECIPBondStereo_NotStereo

OECIPBondStereo_E = _oechem.OECIPBondStereo_E

OECIPBondStereo_Z = _oechem.OECIPBondStereo_Z

OECIPBondStereo_UnspecStereo = _oechem.OECIPBondStereo_UnspecStereo

OENearestNbrsMethod_Auto = _oechem.OENearestNbrsMethod_Auto

OENearestNbrsMethod_AllByAll = _oechem.OENearestNbrsMethod_AllByAll

OENearestNbrsMethod_ZCoordSort = _oechem.OENearestNbrsMethod_ZCoordSort

OENearestNbrsMethod_LocalHash = _oechem.OENearestNbrsMethod_LocalHash


OENearestNbrsMethod_Default = OENearestNbrsMethod_Auto

OEZap9Version_Undefined = _oechem.OEZap9Version_Undefined

OEZap9Version_JMC2008 = _oechem.OEZap9Version_JMC2008

OEZap9Version_JCAMD2010 = _oechem.OEZap9Version_JCAMD2010


OEZap9Version_Default = OEZap9Version_JCAMD2010

OEZap7Version_Undefined = _oechem.OEZap7Version_Undefined

OEZap7Version_CarbonylOxygen = _oechem.OEZap7Version_CarbonylOxygen

OEZap7Version_DoublyBondedOxygen = _oechem.OEZap7Version_DoublyBondedOxygen


OEZap7Version_Default = OEZap7Version_CarbonylOxygen

OEElemNo_H = _oechem.OEElemNo_H

OEElemNo_He = _oechem.OEElemNo_He

OEElemNo_Li = _oechem.OEElemNo_Li

OEElemNo_Be = _oechem.OEElemNo_Be

OEElemNo_B = _oechem.OEElemNo_B

OEElemNo_C = _oechem.OEElemNo_C

OEElemNo_N = _oechem.OEElemNo_N

OEElemNo_O = _oechem.OEElemNo_O

OEElemNo_F = _oechem.OEElemNo_F

OEElemNo_Ne = _oechem.OEElemNo_Ne

OEElemNo_Na = _oechem.OEElemNo_Na

OEElemNo_Mg = _oechem.OEElemNo_Mg

OEElemNo_Al = _oechem.OEElemNo_Al

OEElemNo_Si = _oechem.OEElemNo_Si

OEElemNo_P = _oechem.OEElemNo_P

OEElemNo_S = _oechem.OEElemNo_S

OEElemNo_Cl = _oechem.OEElemNo_Cl

OEElemNo_Ar = _oechem.OEElemNo_Ar

OEElemNo_K = _oechem.OEElemNo_K

OEElemNo_Ca = _oechem.OEElemNo_Ca

OEElemNo_Sc = _oechem.OEElemNo_Sc

OEElemNo_Ti = _oechem.OEElemNo_Ti

OEElemNo_V = _oechem.OEElemNo_V

OEElemNo_Cr = _oechem.OEElemNo_Cr

OEElemNo_Mn = _oechem.OEElemNo_Mn

OEElemNo_Fe = _oechem.OEElemNo_Fe

OEElemNo_Co = _oechem.OEElemNo_Co

OEElemNo_Ni = _oechem.OEElemNo_Ni

OEElemNo_Cu = _oechem.OEElemNo_Cu

OEElemNo_Zn = _oechem.OEElemNo_Zn

OEElemNo_Ga = _oechem.OEElemNo_Ga

OEElemNo_Ge = _oechem.OEElemNo_Ge

OEElemNo_As = _oechem.OEElemNo_As

OEElemNo_Se = _oechem.OEElemNo_Se

OEElemNo_Br = _oechem.OEElemNo_Br

OEElemNo_Kr = _oechem.OEElemNo_Kr

OEElemNo_Rb = _oechem.OEElemNo_Rb

OEElemNo_Sr = _oechem.OEElemNo_Sr

OEElemNo_Y = _oechem.OEElemNo_Y

OEElemNo_Zr = _oechem.OEElemNo_Zr

OEElemNo_Nb = _oechem.OEElemNo_Nb

OEElemNo_Mo = _oechem.OEElemNo_Mo

OEElemNo_Tc = _oechem.OEElemNo_Tc

OEElemNo_Ru = _oechem.OEElemNo_Ru

OEElemNo_Rh = _oechem.OEElemNo_Rh

OEElemNo_Pd = _oechem.OEElemNo_Pd

OEElemNo_Ag = _oechem.OEElemNo_Ag

OEElemNo_Cd = _oechem.OEElemNo_Cd

OEElemNo_In = _oechem.OEElemNo_In

OEElemNo_Sn = _oechem.OEElemNo_Sn

OEElemNo_Sb = _oechem.OEElemNo_Sb

OEElemNo_Te = _oechem.OEElemNo_Te

OEElemNo_I = _oechem.OEElemNo_I

OEElemNo_Xe = _oechem.OEElemNo_Xe

OEElemNo_Cs = _oechem.OEElemNo_Cs

OEElemNo_Ba = _oechem.OEElemNo_Ba

OEElemNo_La = _oechem.OEElemNo_La

OEElemNo_Ce = _oechem.OEElemNo_Ce

OEElemNo_Pr = _oechem.OEElemNo_Pr

OEElemNo_Nd = _oechem.OEElemNo_Nd

OEElemNo_Pm = _oechem.OEElemNo_Pm

OEElemNo_Sm = _oechem.OEElemNo_Sm

OEElemNo_Eu = _oechem.OEElemNo_Eu

OEElemNo_Gd = _oechem.OEElemNo_Gd

OEElemNo_Tb = _oechem.OEElemNo_Tb

OEElemNo_Dy = _oechem.OEElemNo_Dy

OEElemNo_Ho = _oechem.OEElemNo_Ho

OEElemNo_Er = _oechem.OEElemNo_Er

OEElemNo_Tm = _oechem.OEElemNo_Tm

OEElemNo_Yb = _oechem.OEElemNo_Yb

OEElemNo_Lu = _oechem.OEElemNo_Lu

OEElemNo_Hf = _oechem.OEElemNo_Hf

OEElemNo_Ta = _oechem.OEElemNo_Ta

OEElemNo_W = _oechem.OEElemNo_W

OEElemNo_Re = _oechem.OEElemNo_Re

OEElemNo_Os = _oechem.OEElemNo_Os

OEElemNo_Ir = _oechem.OEElemNo_Ir

OEElemNo_Pt = _oechem.OEElemNo_Pt

OEElemNo_Au = _oechem.OEElemNo_Au

OEElemNo_Hg = _oechem.OEElemNo_Hg

OEElemNo_Tl = _oechem.OEElemNo_Tl

OEElemNo_Pb = _oechem.OEElemNo_Pb

OEElemNo_Bi = _oechem.OEElemNo_Bi

OEElemNo_Po = _oechem.OEElemNo_Po

OEElemNo_At = _oechem.OEElemNo_At

OEElemNo_Rn = _oechem.OEElemNo_Rn

OEElemNo_Fr = _oechem.OEElemNo_Fr

OEElemNo_Ra = _oechem.OEElemNo_Ra

OEElemNo_Ac = _oechem.OEElemNo_Ac

OEElemNo_Th = _oechem.OEElemNo_Th

OEElemNo_Pa = _oechem.OEElemNo_Pa

OEElemNo_U = _oechem.OEElemNo_U

OEElemNo_Np = _oechem.OEElemNo_Np

OEElemNo_Pu = _oechem.OEElemNo_Pu

OEElemNo_Am = _oechem.OEElemNo_Am

OEElemNo_Cm = _oechem.OEElemNo_Cm

OEElemNo_Bk = _oechem.OEElemNo_Bk

OEElemNo_Cf = _oechem.OEElemNo_Cf

OEElemNo_Es = _oechem.OEElemNo_Es

OEElemNo_Fm = _oechem.OEElemNo_Fm

OEElemNo_Md = _oechem.OEElemNo_Md

OEElemNo_No = _oechem.OEElemNo_No

OEElemNo_Lr = _oechem.OEElemNo_Lr

OEElemNo_Rf = _oechem.OEElemNo_Rf

OEElemNo_Db = _oechem.OEElemNo_Db

OEElemNo_Sg = _oechem.OEElemNo_Sg

OEElemNo_Bh = _oechem.OEElemNo_Bh

OEElemNo_Hs = _oechem.OEElemNo_Hs

OEElemNo_Mt = _oechem.OEElemNo_Mt

OEElemNo_Ds = _oechem.OEElemNo_Ds

OEElemNo_Rg = _oechem.OEElemNo_Rg

OEElemNo_Cn = _oechem.OEElemNo_Cn

OEElemNo_Nh = _oechem.OEElemNo_Nh

OEElemNo_Fl = _oechem.OEElemNo_Fl

OEElemNo_Mc = _oechem.OEElemNo_Mc

OEElemNo_Lv = _oechem.OEElemNo_Lv

OEElemNo_Ts = _oechem.OEElemNo_Ts

OEElemNo_Og = _oechem.OEElemNo_Og

OEElemNo_MAXELEM = _oechem.OEElemNo_MAXELEM

OEElemNo_Du = _oechem.OEElemNo_Du

OEElemNo_Lp = _oechem.OEElemNo_Lp

OEElemNo_Xx = _oechem.OEElemNo_Xx

OEElemNo_D = _oechem.OEElemNo_D

OEElemNo_T = _oechem.OEElemNo_T

OEMDLQueryOpts_SuppressExplicitH = _oechem.OEMDLQueryOpts_SuppressExplicitH

OEMDLQueryOpts_AddBondAliphaticConstraint = _oechem.OEMDLQueryOpts_AddBondAliphaticConstraint

OEMDLQueryOpts_AddBondTopologyConstraint = _oechem.OEMDLQueryOpts_AddBondTopologyConstraint

OEMDLQueryOpts_ReactionQuery = _oechem.OEMDLQueryOpts_ReactionQuery

OEMDLQueryOpts_MatchIsotope = _oechem.OEMDLQueryOpts_MatchIsotope

OEMDLQueryOpts_MatchAtomStereo = _oechem.OEMDLQueryOpts_MatchAtomStereo

OEMDLQueryOpts_Optimize = _oechem.OEMDLQueryOpts_Optimize


OEMDLQueryOpts_Default = OEMDLQueryOpts_Optimize

OEFormat_UNDEFINED = _oechem.OEFormat_UNDEFINED

OEFormat_SMI = _oechem.OEFormat_SMI

OEFormat_MDL = _oechem.OEFormat_MDL

OEFormat_PDB = _oechem.OEFormat_PDB

OEFormat_MOL2 = _oechem.OEFormat_MOL2

OEFormat_USM = _oechem.OEFormat_USM

OEFormat_ISM = _oechem.OEFormat_ISM

OEFormat_MOL2H = _oechem.OEFormat_MOL2H

OEFormat_SDF = _oechem.OEFormat_SDF

OEFormat_CAN = _oechem.OEFormat_CAN

OEFormat_MF = _oechem.OEFormat_MF

OEFormat_XYZ = _oechem.OEFormat_XYZ

OEFormat_FASTA = _oechem.OEFormat_FASTA

OEFormat_MOPAC = _oechem.OEFormat_MOPAC

OEFormat_OEB = _oechem.OEFormat_OEB

OEFormat_MMOD = _oechem.OEFormat_MMOD

OEFormat_SLN = _oechem.OEFormat_SLN

OEFormat_RDF = _oechem.OEFormat_RDF

OEFormat_CDX = _oechem.OEFormat_CDX

OEFormat_SKC = _oechem.OEFormat_SKC

OEFormat_INCHI = _oechem.OEFormat_INCHI

OEFormat_INCHIKEY = _oechem.OEFormat_INCHIKEY

OEFormat_CSV = _oechem.OEFormat_CSV

OEFormat_JSON = _oechem.OEFormat_JSON

OEFormat_CIF = _oechem.OEFormat_CIF

OEFormat_OEZ = _oechem.OEFormat_OEZ

OEFormat_MMCIF = _oechem.OEFormat_MMCIF

OEFormat_CXSMILES = _oechem.OEFormat_CXSMILES

OEFormat_MAXFORMAT = _oechem.OEFormat_MAXFORMAT

OEFormat_Default = _oechem.OEFormat_Default

OEIFlavor_Generic_OEAroModelDaylight = _oechem.OEIFlavor_Generic_OEAroModelDaylight

OEIFlavor_Generic_OEAroModelOpenEye = _oechem.OEIFlavor_Generic_OEAroModelOpenEye

OEIFlavor_Generic_OEAroModelTripos = _oechem.OEIFlavor_Generic_OEAroModelTripos

OEIFlavor_Generic_OEAroModelMMFF = _oechem.OEIFlavor_Generic_OEAroModelMMFF

OEIFlavor_Generic_OEAroModelMDL = _oechem.OEIFlavor_Generic_OEAroModelMDL

OEIFlavor_Generic_AroMask = _oechem.OEIFlavor_Generic_AroMask

OEIFlavor_Generic_Rings = _oechem.OEIFlavor_Generic_Rings

OEIFlavor_Generic_GenericMask = _oechem.OEIFlavor_Generic_GenericMask

OEIFlavor_Generic_SpecificMask = _oechem.OEIFlavor_Generic_SpecificMask

OEIFlavor_Generic_DEFAULT = _oechem.OEIFlavor_Generic_DEFAULT


OEIFlavor_Generic_Default = OEIFlavor_Generic_DEFAULT

OEIFlavor_SMI_Strict = _oechem.OEIFlavor_SMI_Strict

OEIFlavor_SMI_Canon = _oechem.OEIFlavor_SMI_Canon

OEIFlavor_SMI_DEFAULT = _oechem.OEIFlavor_SMI_DEFAULT


OEIFlavor_SMI_Default = OEIFlavor_SMI_DEFAULT

OEIFlavor_MDL_Default = _oechem.OEIFlavor_MDL_Default

OEIFlavor_MDL_FixBondMarks = _oechem.OEIFlavor_MDL_FixBondMarks

OEIFlavor_MDL_SuppressImp2ExpENHSTE = _oechem.OEIFlavor_MDL_SuppressImp2ExpENHSTE

OEIFlavor_MDL_SuppressEmptyMolSkip = _oechem.OEIFlavor_MDL_SuppressEmptyMolSkip

OEIFlavor_MMCIF_DEFAULT = _oechem.OEIFlavor_MMCIF_DEFAULT


OEIFlavor_MMCIF_Default = OEIFlavor_MMCIF_DEFAULT

OEIFlavor_MMCIF_NoAltLoc = _oechem.OEIFlavor_MMCIF_NoAltLoc


OEIFlavor_MMCIF_AllMask = OEIFlavor_MMCIF_DEFAULT|OEIFlavor_MMCIF_NoAltLoc

OEIFlavor_PDB_TER = _oechem.OEIFlavor_PDB_TER

OEIFlavor_PDB_END = _oechem.OEIFlavor_PDB_END

OEIFlavor_PDB_ENDM = _oechem.OEIFlavor_PDB_ENDM


OEIFlavor_PDB_TerMask = OEIFlavor_PDB_ENDM|OEIFlavor_PDB_END|OEIFlavor_PDB_TER

OEIFlavor_PDB_ALL = _oechem.OEIFlavor_PDB_ALL

OEIFlavor_PDB_DATA = _oechem.OEIFlavor_PDB_DATA

OEIFlavor_PDB_CHARGE = _oechem.OEIFlavor_PDB_CHARGE

OEIFlavor_PDB_RADIUS = _oechem.OEIFlavor_PDB_RADIUS


OEIFlavor_PDB_DELPHI = OEIFlavor_PDB_RADIUS|OEIFlavor_PDB_CHARGE

OEIFlavor_PDB_FORMALCHARGE = _oechem.OEIFlavor_PDB_FORMALCHARGE

OEIFlavor_PDB_BasicMask = _oechem.OEIFlavor_PDB_BasicMask

OEIFlavor_PDB_FormalCrg = _oechem.OEIFlavor_PDB_FormalCrg

OEIFlavor_PDB_ImplicitH = _oechem.OEIFlavor_PDB_ImplicitH

OEIFlavor_PDB_BondOrder = _oechem.OEIFlavor_PDB_BondOrder

OEIFlavor_PDB_Rings = _oechem.OEIFlavor_PDB_Rings

OEIFlavor_PDB_Connect = _oechem.OEIFlavor_PDB_Connect

OEIFlavor_PDB_SecStruct = _oechem.OEIFlavor_PDB_SecStruct

OEIFlavor_PDB_ExtraMask = _oechem.OEIFlavor_PDB_ExtraMask

OEIFlavor_PDB_AllMask = _oechem.OEIFlavor_PDB_AllMask


OEIFlavor_PDB_DEFAULT = OEIFlavor_PDB_Connect|OEIFlavor_PDB_Rings|OEIFlavor_PDB_BondOrder|OEIFlavor_PDB_ImplicitH|OEIFlavor_PDB_FormalCrg|OEIFlavor_PDB_SecStruct|OEIFlavor_PDB_ENDM|OEIFlavor_PDB_END


OEIFlavor_PDB_Default = OEIFlavor_PDB_DEFAULT

OEIFlavor_PDB_ALTLOC = _oechem.OEIFlavor_PDB_ALTLOC

OEIFlavor_MOL2_M2H = _oechem.OEIFlavor_MOL2_M2H

OEIFlavor_MOL2_Forcefield = _oechem.OEIFlavor_MOL2_Forcefield

OEIFlavor_MOL2_AllMask = _oechem.OEIFlavor_MOL2_AllMask

OEIFlavor_MOL2_DEFAULT = _oechem.OEIFlavor_MOL2_DEFAULT


OEIFlavor_MOL2_Default = OEIFlavor_MOL2_DEFAULT

OEIFlavor_BIN_Default = _oechem.OEIFlavor_BIN_Default

OEIFlavor_USM_Default = _oechem.OEIFlavor_USM_Default

OEIFlavor_ISM_Default = _oechem.OEIFlavor_ISM_Default

OEIFlavor_MOL2H_M2H = _oechem.OEIFlavor_MOL2H_M2H

OEIFlavor_MOL2H_AllMask = _oechem.OEIFlavor_MOL2H_AllMask

OEIFlavor_MOL2H_DEFAULT = _oechem.OEIFlavor_MOL2H_DEFAULT


OEIFlavor_MOL2H_Default = OEIFlavor_MOL2H_DEFAULT

OEIFlavor_SDF_Default = _oechem.OEIFlavor_SDF_Default

OEIFlavor_SDF_FixBondMarks = _oechem.OEIFlavor_SDF_FixBondMarks

OEIFlavor_SDF_SuppressImp2ExpENHSTE = _oechem.OEIFlavor_SDF_SuppressImp2ExpENHSTE

OEIFlavor_SDF_SuppressEmptyMolSkip = _oechem.OEIFlavor_SDF_SuppressEmptyMolSkip

OEIFlavor_CAN_Default = _oechem.OEIFlavor_CAN_Default

OEIFlavor_MF_Default = _oechem.OEIFlavor_MF_Default

OEIFlavor_CIF_FormalCrg = _oechem.OEIFlavor_CIF_FormalCrg

OEIFlavor_CIF_ImplicitH = _oechem.OEIFlavor_CIF_ImplicitH

OEIFlavor_CIF_BondOrder = _oechem.OEIFlavor_CIF_BondOrder

OEIFlavor_CIF_Rings = _oechem.OEIFlavor_CIF_Rings

OEIFlavor_CIF_OccFilterOneHalf = _oechem.OEIFlavor_CIF_OccFilterOneHalf

OEIFlavor_CIF_RemovePBCImages = _oechem.OEIFlavor_CIF_RemovePBCImages

OEIFlavor_CIF_NormalizeHydPos = _oechem.OEIFlavor_CIF_NormalizeHydPos

OEIFlavor_CIF_BondHydToClosest = _oechem.OEIFlavor_CIF_BondHydToClosest

OEIFlavor_CIF_RemoveQuestionMarkInLabel = _oechem.OEIFlavor_CIF_RemoveQuestionMarkInLabel


OEIFlavor_CIF_DEFAULT = OEIFlavor_CIF_FormalCrg|OEIFlavor_CIF_ImplicitH|OEIFlavor_CIF_BondOrder|OEIFlavor_CIF_Rings|OEIFlavor_CIF_OccFilterOneHalf|OEIFlavor_CIF_RemovePBCImages|OEIFlavor_CIF_NormalizeHydPos|OEIFlavor_CIF_BondHydToClosest|OEIFlavor_CIF_RemoveQuestionMarkInLabel


OEIFlavor_CIF_Default = OEIFlavor_CIF_DEFAULT

OEIFlavor_XYZ_FormalCrg = _oechem.OEIFlavor_XYZ_FormalCrg

OEIFlavor_XYZ_ImplicitH = _oechem.OEIFlavor_XYZ_ImplicitH

OEIFlavor_XYZ_BondOrder = _oechem.OEIFlavor_XYZ_BondOrder

OEIFlavor_XYZ_Rings = _oechem.OEIFlavor_XYZ_Rings

OEIFlavor_XYZ_Connect = _oechem.OEIFlavor_XYZ_Connect

OEIFlavor_XYZ_ExtraMask = _oechem.OEIFlavor_XYZ_ExtraMask

OEIFlavor_XYZ_Default = _oechem.OEIFlavor_XYZ_Default

OEIFlavor_FASTA_Default = _oechem.OEIFlavor_FASTA_Default

OEIFlavor_FASTA_CustomResidues = _oechem.OEIFlavor_FASTA_CustomResidues

OEIFlavor_FASTA_EmbeddedSMILES = _oechem.OEIFlavor_FASTA_EmbeddedSMILES

OEIFlavor_FASTA_AllMask = _oechem.OEIFlavor_FASTA_AllMask

OEIFlavor_MOPAC_Default = _oechem.OEIFlavor_MOPAC_Default

OEIFlavor_OEB_Default = _oechem.OEIFlavor_OEB_Default

OEIFlavor_OEZ_Default = _oechem.OEIFlavor_OEZ_Default

OEIFlavor_MMOD_FormalCrg = _oechem.OEIFlavor_MMOD_FormalCrg

OEIFlavor_MMOD_Default = _oechem.OEIFlavor_MMOD_Default

OEIFlavor_SLN_Default = _oechem.OEIFlavor_SLN_Default

OEIFlavor_RDF_Default = _oechem.OEIFlavor_RDF_Default

OEIFlavor_RDF_FixBondMarks = _oechem.OEIFlavor_RDF_FixBondMarks

OEIFlavor_RDF_SuppressImp2ExpENHSTE = _oechem.OEIFlavor_RDF_SuppressImp2ExpENHSTE

OEIFlavor_RDF_SuppressEmptyMolSkip = _oechem.OEIFlavor_RDF_SuppressEmptyMolSkip

OEIFlavor_CDX_SuperAtom = _oechem.OEIFlavor_CDX_SuperAtom

OEIFlavor_CDX_DEFAULT = _oechem.OEIFlavor_CDX_DEFAULT


OEIFlavor_CDX_Default = OEIFlavor_CDX_DEFAULT

OEIFlavor_SKC_Default = _oechem.OEIFlavor_SKC_Default

OEIFlavor_INCHI_Default = _oechem.OEIFlavor_INCHI_Default

OEIFlavor_CSV_Header = _oechem.OEIFlavor_CSV_Header


OEIFlavor_CSV_Default = OEIFlavor_CSV_Header


OEIFlavor_CSV_DEFAULT = OEIFlavor_CSV_Default

OEIFlavor_JSON_Default = _oechem.OEIFlavor_JSON_Default

OEIFlavor_JSONSurface_Default = _oechem.OEIFlavor_JSONSurface_Default

OEIFlavor_CXSMILES_Strict = _oechem.OEIFlavor_CXSMILES_Strict

OEIFlavor_CXSMILES_Canon = _oechem.OEIFlavor_CXSMILES_Canon

OEIFlavor_CXSMILES_DEFAULT = _oechem.OEIFlavor_CXSMILES_DEFAULT


OEIFlavor_CXSMILES_Default = OEIFlavor_CXSMILES_DEFAULT

OEOFlavor_Generic_OEAroModelDaylight = _oechem.OEOFlavor_Generic_OEAroModelDaylight

OEOFlavor_Generic_OEAroModelOpenEye = _oechem.OEOFlavor_Generic_OEAroModelOpenEye

OEOFlavor_Generic_OEAroModelTripos = _oechem.OEOFlavor_Generic_OEAroModelTripos

OEOFlavor_Generic_OEAroModelMMFF = _oechem.OEOFlavor_Generic_OEAroModelMMFF

OEOFlavor_Generic_OEAroModelMDL = _oechem.OEOFlavor_Generic_OEAroModelMDL

OEOFlavor_Generic_AroMask = _oechem.OEOFlavor_Generic_AroMask

OEOFlavor_Generic_Rings = _oechem.OEOFlavor_Generic_Rings

OEOFlavor_Generic_GenericMask = _oechem.OEOFlavor_Generic_GenericMask

OEOFlavor_Generic_SpecificMask = _oechem.OEOFlavor_Generic_SpecificMask

OEOFlavor_Generic_DEFAULT = _oechem.OEOFlavor_Generic_DEFAULT


OEOFlavor_Generic_Default = OEOFlavor_Generic_DEFAULT

OEOFlavor_SMI_Isotopes = _oechem.OEOFlavor_SMI_Isotopes

OEOFlavor_SMI_Hydrogens = _oechem.OEOFlavor_SMI_Hydrogens

OEOFlavor_SMI_RGroups = _oechem.OEOFlavor_SMI_RGroups

OEOFlavor_SMI_AtomStereo = _oechem.OEOFlavor_SMI_AtomStereo

OEOFlavor_SMI_BondStereo = _oechem.OEOFlavor_SMI_BondStereo

OEOFlavor_SMI_AtomMaps = _oechem.OEOFlavor_SMI_AtomMaps

OEOFlavor_SMI_Canonical = _oechem.OEOFlavor_SMI_Canonical

OEOFlavor_SMI_Kekule = _oechem.OEOFlavor_SMI_Kekule

OEOFlavor_SMI_SuperAtoms = _oechem.OEOFlavor_SMI_SuperAtoms

OEOFlavor_SMI_ExtBonds = _oechem.OEOFlavor_SMI_ExtBonds

OEOFlavor_SMI_ImpHCount = _oechem.OEOFlavor_SMI_ImpHCount

OEOFlavor_SMI_AllBonds = _oechem.OEOFlavor_SMI_AllBonds

OEOFlavor_SMI_EnhStereo = _oechem.OEOFlavor_SMI_EnhStereo

OEOFlavor_SMI_SmiMask = _oechem.OEOFlavor_SMI_SmiMask

OEOFlavor_SMI_DEFAULT = _oechem.OEOFlavor_SMI_DEFAULT


OEOFlavor_SMI_Default = OEOFlavor_SMI_DEFAULT

OEOFlavor_MDL_MCHG = _oechem.OEOFlavor_MDL_MCHG

OEOFlavor_MDL_MISO = _oechem.OEOFlavor_MDL_MISO

OEOFlavor_MDL_MRGP = _oechem.OEOFlavor_MDL_MRGP

OEOFlavor_MDL_MV30 = _oechem.OEOFlavor_MDL_MV30

OEOFlavor_MDL_MDLParity = _oechem.OEOFlavor_MDL_MDLParity

OEOFlavor_MDL_NoParity = _oechem.OEOFlavor_MDL_NoParity

OEOFlavor_MDL_CurrentParity = _oechem.OEOFlavor_MDL_CurrentParity

OEOFlavor_MDL_MMask = _oechem.OEOFlavor_MDL_MMask

OEOFlavor_MDL_PMask = _oechem.OEOFlavor_MDL_PMask

OEOFlavor_MDL_Add2D = _oechem.OEOFlavor_MDL_Add2D

OEOFlavor_MDL_UnsetBad2DStereo = _oechem.OEOFlavor_MDL_UnsetBad2DStereo

OEOFlavor_MDL_SuppressImp2ExpENHSTE = _oechem.OEOFlavor_MDL_SuppressImp2ExpENHSTE

OEOFlavor_MDL_SuppressTimestamps = _oechem.OEOFlavor_MDL_SuppressTimestamps

OEOFlavor_MDL_DEFAULT = _oechem.OEOFlavor_MDL_DEFAULT


OEOFlavor_MDL_Default = OEOFlavor_MDL_DEFAULT

OEOFlavor_MMCIF_DEFAULT = _oechem.OEOFlavor_MMCIF_DEFAULT


OEOFlavor_MMCIF_Default = OEOFlavor_MMCIF_DEFAULT

OEOFlavor_PDB_BONDS = _oechem.OEOFlavor_PDB_BONDS

OEOFlavor_PDB_ORDERS = _oechem.OEOFlavor_PDB_ORDERS

OEOFlavor_PDB_BOTH = _oechem.OEOFlavor_PDB_BOTH

OEOFlavor_PDB_CHARGE = _oechem.OEOFlavor_PDB_CHARGE

OEOFlavor_PDB_RADIUS = _oechem.OEOFlavor_PDB_RADIUS

OEOFlavor_PDB_TER = _oechem.OEOFlavor_PDB_TER

OEOFlavor_PDB_DELPHI = _oechem.OEOFlavor_PDB_DELPHI

OEOFlavor_PDB_ELEMENT = _oechem.OEOFlavor_PDB_ELEMENT

OEOFlavor_PDB_FormalCrg = _oechem.OEOFlavor_PDB_FormalCrg

OEOFlavor_PDB_FORMALCHARGE = _oechem.OEOFlavor_PDB_FORMALCHARGE

OEOFlavor_PDB_HETBONDS = _oechem.OEOFlavor_PDB_HETBONDS

OEOFlavor_PDB_BasicMask = _oechem.OEOFlavor_PDB_BasicMask

OEOFlavor_PDB_OEResidues = _oechem.OEOFlavor_PDB_OEResidues

OEOFlavor_PDB_NoResidues = _oechem.OEOFlavor_PDB_NoResidues

OEOFlavor_PDB_CurrentResidues = _oechem.OEOFlavor_PDB_CurrentResidues

OEOFlavor_PDB_OrderAtoms = _oechem.OEOFlavor_PDB_OrderAtoms

OEOFlavor_PDB_AllMask = _oechem.OEOFlavor_PDB_AllMask

OEOFlavor_PDB_DEFAULT = _oechem.OEOFlavor_PDB_DEFAULT


OEOFlavor_PDB_Default = OEOFlavor_PDB_DEFAULT

OEOFlavor_MOL2_AtomTypeNames = _oechem.OEOFlavor_MOL2_AtomTypeNames

OEOFlavor_MOL2_BondTypeNames = _oechem.OEOFlavor_MOL2_BondTypeNames

OEOFlavor_MOL2_AtomNames = _oechem.OEOFlavor_MOL2_AtomNames

OEOFlavor_MOL2_OrderAtoms = _oechem.OEOFlavor_MOL2_OrderAtoms

OEOFlavor_MOL2_Hydrogens = _oechem.OEOFlavor_MOL2_Hydrogens

OEOFlavor_MOL2_Substructure = _oechem.OEOFlavor_MOL2_Substructure

OEOFlavor_MOL2_ChargePrecision = _oechem.OEOFlavor_MOL2_ChargePrecision

OEOFlavor_MOL2_GeneralFFFormat = _oechem.OEOFlavor_MOL2_GeneralFFFormat

OEOFlavor_MOL2_Forcefield = _oechem.OEOFlavor_MOL2_Forcefield

OEOFlavor_MOL2_NameMask = _oechem.OEOFlavor_MOL2_NameMask

OEOFlavor_MOL2_AllMask = _oechem.OEOFlavor_MOL2_AllMask

OEOFlavor_MOL2_DEFAULT = _oechem.OEOFlavor_MOL2_DEFAULT


OEOFlavor_MOL2_Default = OEOFlavor_MOL2_DEFAULT

OEOFlavor_BIN_Default = _oechem.OEOFlavor_BIN_Default

OEOFlavor_USM_Isotopes = _oechem.OEOFlavor_USM_Isotopes

OEOFlavor_USM_Hydrogens = _oechem.OEOFlavor_USM_Hydrogens

OEOFlavor_USM_RGroups = _oechem.OEOFlavor_USM_RGroups

OEOFlavor_USM_AtomStereo = _oechem.OEOFlavor_USM_AtomStereo

OEOFlavor_USM_BondStereo = _oechem.OEOFlavor_USM_BondStereo

OEOFlavor_USM_AtomMaps = _oechem.OEOFlavor_USM_AtomMaps

OEOFlavor_USM_Canonical = _oechem.OEOFlavor_USM_Canonical

OEOFlavor_USM_Kekule = _oechem.OEOFlavor_USM_Kekule

OEOFlavor_USM_SuperAtoms = _oechem.OEOFlavor_USM_SuperAtoms

OEOFlavor_USM_ExtBonds = _oechem.OEOFlavor_USM_ExtBonds

OEOFlavor_USM_ImpHCount = _oechem.OEOFlavor_USM_ImpHCount

OEOFlavor_USM_AllBonds = _oechem.OEOFlavor_USM_AllBonds

OEOFlavor_USM_EnhStereo = _oechem.OEOFlavor_USM_EnhStereo

OEOFlavor_USM_SmiMask = _oechem.OEOFlavor_USM_SmiMask

OEOFlavor_USM_DEFAULT = _oechem.OEOFlavor_USM_DEFAULT


OEOFlavor_USM_Default = OEOFlavor_USM_DEFAULT

OEOFlavor_ISM_Isotopes = _oechem.OEOFlavor_ISM_Isotopes

OEOFlavor_ISM_Hydrogens = _oechem.OEOFlavor_ISM_Hydrogens

OEOFlavor_ISM_RGroups = _oechem.OEOFlavor_ISM_RGroups

OEOFlavor_ISM_AtomStereo = _oechem.OEOFlavor_ISM_AtomStereo

OEOFlavor_ISM_BondStereo = _oechem.OEOFlavor_ISM_BondStereo

OEOFlavor_ISM_AtomMaps = _oechem.OEOFlavor_ISM_AtomMaps

OEOFlavor_ISM_Canonical = _oechem.OEOFlavor_ISM_Canonical

OEOFlavor_ISM_Kekule = _oechem.OEOFlavor_ISM_Kekule

OEOFlavor_ISM_SuperAtoms = _oechem.OEOFlavor_ISM_SuperAtoms

OEOFlavor_ISM_ExtBonds = _oechem.OEOFlavor_ISM_ExtBonds

OEOFlavor_ISM_ImpHCount = _oechem.OEOFlavor_ISM_ImpHCount

OEOFlavor_ISM_AllBonds = _oechem.OEOFlavor_ISM_AllBonds

OEOFlavor_ISM_EnhStereo = _oechem.OEOFlavor_ISM_EnhStereo

OEOFlavor_ISM_SmiMask = _oechem.OEOFlavor_ISM_SmiMask

OEOFlavor_ISM_DEFAULT = _oechem.OEOFlavor_ISM_DEFAULT


OEOFlavor_ISM_Default = OEOFlavor_ISM_DEFAULT

OEOFlavor_MOL2H_AtomTypeNames = _oechem.OEOFlavor_MOL2H_AtomTypeNames

OEOFlavor_MOL2H_BondTypeNames = _oechem.OEOFlavor_MOL2H_BondTypeNames

OEOFlavor_MOL2H_AtomNames = _oechem.OEOFlavor_MOL2H_AtomNames

OEOFlavor_MOL2H_OrderAtoms = _oechem.OEOFlavor_MOL2H_OrderAtoms

OEOFlavor_MOL2H_Hydrogens = _oechem.OEOFlavor_MOL2H_Hydrogens

OEOFlavor_MOL2H_Substructure = _oechem.OEOFlavor_MOL2H_Substructure

OEOFlavor_MOL2H_NameMask = _oechem.OEOFlavor_MOL2H_NameMask

OEOFlavor_MOL2H_AllMask = _oechem.OEOFlavor_MOL2H_AllMask

OEOFlavor_MOL2H_DEFAULT = _oechem.OEOFlavor_MOL2H_DEFAULT


OEOFlavor_MOL2H_Default = OEOFlavor_MOL2H_DEFAULT

OEOFlavor_SDF_MCHG = _oechem.OEOFlavor_SDF_MCHG

OEOFlavor_SDF_MISO = _oechem.OEOFlavor_SDF_MISO

OEOFlavor_SDF_MRGP = _oechem.OEOFlavor_SDF_MRGP

OEOFlavor_SDF_MV30 = _oechem.OEOFlavor_SDF_MV30

OEOFlavor_SDF_MDLParity = _oechem.OEOFlavor_SDF_MDLParity

OEOFlavor_SDF_NoParity = _oechem.OEOFlavor_SDF_NoParity

OEOFlavor_SDF_CurrentParity = _oechem.OEOFlavor_SDF_CurrentParity

OEOFlavor_SDF_MMask = _oechem.OEOFlavor_SDF_MMask

OEOFlavor_SDF_PMask = _oechem.OEOFlavor_SDF_PMask

OEOFlavor_SDF_Add2D = _oechem.OEOFlavor_SDF_Add2D

OEOFlavor_SDF_UnsetBad2DStereo = _oechem.OEOFlavor_SDF_UnsetBad2DStereo

OEOFlavor_SDF_SuppressImp2ExpENHSTE = _oechem.OEOFlavor_SDF_SuppressImp2ExpENHSTE

OEOFlavor_SDF_SuppressTimestamps = _oechem.OEOFlavor_SDF_SuppressTimestamps

OEOFlavor_SDF_DEFAULT = _oechem.OEOFlavor_SDF_DEFAULT


OEOFlavor_SDF_Default = OEOFlavor_SDF_DEFAULT

OEOFlavor_CAN_Isotopes = _oechem.OEOFlavor_CAN_Isotopes

OEOFlavor_CAN_Hydrogens = _oechem.OEOFlavor_CAN_Hydrogens

OEOFlavor_CAN_RGroups = _oechem.OEOFlavor_CAN_RGroups

OEOFlavor_CAN_AtomStereo = _oechem.OEOFlavor_CAN_AtomStereo

OEOFlavor_CAN_BondStereo = _oechem.OEOFlavor_CAN_BondStereo

OEOFlavor_CAN_AtomMaps = _oechem.OEOFlavor_CAN_AtomMaps

OEOFlavor_CAN_Canonical = _oechem.OEOFlavor_CAN_Canonical

OEOFlavor_CAN_Kekule = _oechem.OEOFlavor_CAN_Kekule

OEOFlavor_CAN_SuperAtoms = _oechem.OEOFlavor_CAN_SuperAtoms

OEOFlavor_CAN_ExtBonds = _oechem.OEOFlavor_CAN_ExtBonds

OEOFlavor_CAN_ImpHCount = _oechem.OEOFlavor_CAN_ImpHCount

OEOFlavor_CAN_AllBonds = _oechem.OEOFlavor_CAN_AllBonds

OEOFlavor_CAN_EnhStereo = _oechem.OEOFlavor_CAN_EnhStereo

OEOFlavor_CAN_SmiMask = _oechem.OEOFlavor_CAN_SmiMask

OEOFlavor_CAN_DEFAULT = _oechem.OEOFlavor_CAN_DEFAULT


OEOFlavor_CAN_Default = OEOFlavor_CAN_DEFAULT

OEOFlavor_CIF_DEFAULT = _oechem.OEOFlavor_CIF_DEFAULT


OEOFlavor_CIF_Default = OEOFlavor_CIF_DEFAULT

OEOFlavor_MF_Title = _oechem.OEOFlavor_MF_Title

OEOFlavor_MF_DEFAULT = _oechem.OEOFlavor_MF_DEFAULT


OEOFlavor_MF_Default = OEOFlavor_MF_DEFAULT

OEOFlavor_XYZ_Charges = _oechem.OEOFlavor_XYZ_Charges

OEOFlavor_XYZ_Symbols = _oechem.OEOFlavor_XYZ_Symbols

OEOFlavor_XYZ_SinglePrecision = _oechem.OEOFlavor_XYZ_SinglePrecision

OEOFlavor_XYZ_DoublePrecision = _oechem.OEOFlavor_XYZ_DoublePrecision


OEOFlavor_XYZ_Default = OEOFlavor_XYZ_Charges|OEOFlavor_XYZ_Symbols


OEOFlavor_XYZ_AllMask = OEOFlavor_XYZ_Charges|OEOFlavor_XYZ_Symbols|OEOFlavor_XYZ_SinglePrecision|OEOFlavor_XYZ_DoublePrecision

OEOFlavor_FASTA_Default = _oechem.OEOFlavor_FASTA_Default

OEOFlavor_MOPAC_XYZ = _oechem.OEOFlavor_MOPAC_XYZ

OEOFlavor_MOPAC_CHARGES = _oechem.OEOFlavor_MOPAC_CHARGES

OEOFlavor_MOPAC_AllMask = _oechem.OEOFlavor_MOPAC_AllMask

OEOFlavor_MOPAC_DEFAULT = _oechem.OEOFlavor_MOPAC_DEFAULT


OEOFlavor_MOPAC_Default = OEOFlavor_MOPAC_DEFAULT

OEOFlavor_OEB_Default = _oechem.OEOFlavor_OEB_Default

OEOFlavor_OEZ_Default = _oechem.OEOFlavor_OEZ_Default

OEOFlavor_MMOD_AtomTypes = _oechem.OEOFlavor_MMOD_AtomTypes

OEOFlavor_MMOD_DEFAULT = _oechem.OEOFlavor_MMOD_DEFAULT


OEOFlavor_MMOD_Default = OEOFlavor_MMOD_DEFAULT

OEOFlavor_SLN_Default = _oechem.OEOFlavor_SLN_Default

OEOFlavor_RDF_MCHG = _oechem.OEOFlavor_RDF_MCHG

OEOFlavor_RDF_MISO = _oechem.OEOFlavor_RDF_MISO

OEOFlavor_RDF_MRGP = _oechem.OEOFlavor_RDF_MRGP

OEOFlavor_RDF_MV30 = _oechem.OEOFlavor_RDF_MV30

OEOFlavor_RDF_MDLParity = _oechem.OEOFlavor_RDF_MDLParity

OEOFlavor_RDF_NoParity = _oechem.OEOFlavor_RDF_NoParity

OEOFlavor_RDF_CurrentParity = _oechem.OEOFlavor_RDF_CurrentParity

OEOFlavor_RDF_MMask = _oechem.OEOFlavor_RDF_MMask

OEOFlavor_RDF_PMask = _oechem.OEOFlavor_RDF_PMask

OEOFlavor_RDF_SuppressImp2ExpENHSTE = _oechem.OEOFlavor_RDF_SuppressImp2ExpENHSTE

OEOFlavor_RDF_DEFAULT = _oechem.OEOFlavor_RDF_DEFAULT


OEOFlavor_RDF_Default = OEOFlavor_RDF_DEFAULT

OEOFlavor_CDX_Add2D = _oechem.OEOFlavor_CDX_Add2D

OEOFlavor_CDX_UnsetBad2DStereo = _oechem.OEOFlavor_CDX_UnsetBad2DStereo

OEOFlavor_CDX_Default = _oechem.OEOFlavor_CDX_Default

OEOFlavor_SKC_Default = _oechem.OEOFlavor_SKC_Default

OEOFlavor_INCHI_Hydrogens = _oechem.OEOFlavor_INCHI_Hydrogens

OEOFlavor_INCHI_Stereo = _oechem.OEOFlavor_INCHI_Stereo

OEOFlavor_INCHI_Chiral = _oechem.OEOFlavor_INCHI_Chiral

OEOFlavor_INCHI_FixedHLayer = _oechem.OEOFlavor_INCHI_FixedHLayer

OEOFlavor_INCHI_ReconnectedMetals = _oechem.OEOFlavor_INCHI_ReconnectedMetals

OEOFlavor_INCHI_RelativeStereo = _oechem.OEOFlavor_INCHI_RelativeStereo

OEOFlavor_INCHI_RacemicStereo = _oechem.OEOFlavor_INCHI_RacemicStereo

OEOFlavor_INCHI_Title = _oechem.OEOFlavor_INCHI_Title


OEOFlavor_INCHI_Default = OEOFlavor_INCHI_Stereo|OEOFlavor_INCHI_Title

OEOFlavor_INCHI_INCHIMask = _oechem.OEOFlavor_INCHI_INCHIMask

OEOFlavor_INCHIKEY_Hydrogens = _oechem.OEOFlavor_INCHIKEY_Hydrogens

OEOFlavor_INCHIKEY_Stereo = _oechem.OEOFlavor_INCHIKEY_Stereo

OEOFlavor_INCHIKEY_Chiral = _oechem.OEOFlavor_INCHIKEY_Chiral

OEOFlavor_INCHIKEY_FixedHLayer = _oechem.OEOFlavor_INCHIKEY_FixedHLayer

OEOFlavor_INCHIKEY_ReconnectedMetals = _oechem.OEOFlavor_INCHIKEY_ReconnectedMetals

OEOFlavor_INCHIKEY_RelativeStereo = _oechem.OEOFlavor_INCHIKEY_RelativeStereo

OEOFlavor_INCHIKEY_RacemicStereo = _oechem.OEOFlavor_INCHIKEY_RacemicStereo

OEOFlavor_INCHIKEY_Title = _oechem.OEOFlavor_INCHIKEY_Title


OEOFlavor_INCHIKEY_Default = OEOFlavor_INCHIKEY_Stereo|OEOFlavor_INCHIKEY_Title

OEOFlavor_INCHIKEY_INCHIKEYMask = _oechem.OEOFlavor_INCHIKEY_INCHIKEYMask

OEOFlavor_CSV_Header = _oechem.OEOFlavor_CSV_Header


OEOFlavor_CSV_Default = OEOFlavor_CSV_Header


OEOFlavor_CSV_DEFAULT = OEOFlavor_CSV_Default

OEOFlavor_JSON_Structure = _oechem.OEOFlavor_JSON_Structure

OEOFlavor_JSON_Coords = _oechem.OEOFlavor_JSON_Coords

OEOFlavor_JSON_Residues = _oechem.OEOFlavor_JSON_Residues

OEOFlavor_JSON_PartialCharges = _oechem.OEOFlavor_JSON_PartialCharges

OEOFlavor_JSON_AtomNames = _oechem.OEOFlavor_JSON_AtomNames

OEOFlavor_JSON_Styles = _oechem.OEOFlavor_JSON_Styles

OEOFlavor_JSON_Interactions = _oechem.OEOFlavor_JSON_Interactions

OEOFlavor_JSON_RGroups = _oechem.OEOFlavor_JSON_RGroups

OEOFlavor_JSON_SDData = _oechem.OEOFlavor_JSON_SDData

OEOFlavor_JSON_UserData = _oechem.OEOFlavor_JSON_UserData

OEOFlavor_JSON_Smiles = _oechem.OEOFlavor_JSON_Smiles

OEOFlavor_JSON_Reaction = _oechem.OEOFlavor_JSON_Reaction

OEOFlavor_JSON_EscapeData = _oechem.OEOFlavor_JSON_EscapeData

OEOFlavor_JSON_Packed = _oechem.OEOFlavor_JSON_Packed

OEOFlavor_JSON_Normals = _oechem.OEOFlavor_JSON_Normals


OEOFlavor_JSON_Default = OEOFlavor_JSON_Structure|OEOFlavor_JSON_Coords|OEOFlavor_JSON_RGroups|OEOFlavor_JSON_SDData|OEOFlavor_JSON_UserData|OEOFlavor_JSON_Residues|OEOFlavor_JSON_AtomNames|OEOFlavor_JSON_Reaction


OEOFlavor_JSON_All = OEOFlavor_JSON_Structure|OEOFlavor_JSON_Coords|OEOFlavor_JSON_Residues|OEOFlavor_JSON_PartialCharges|OEOFlavor_JSON_AtomNames|OEOFlavor_JSON_Styles|OEOFlavor_JSON_Interactions|OEOFlavor_JSON_RGroups|OEOFlavor_JSON_SDData|OEOFlavor_JSON_UserData|OEOFlavor_JSON_Smiles|OEOFlavor_JSON_Packed|OEOFlavor_JSON_Reaction

OEOFlavor_JSONSurface_UserData = _oechem.OEOFlavor_JSONSurface_UserData

OEOFlavor_JSONSurface_EscapeData = _oechem.OEOFlavor_JSONSurface_EscapeData

OEOFlavor_JSONSurface_Packed = _oechem.OEOFlavor_JSONSurface_Packed

OEOFlavor_JSONSurface_Normals = _oechem.OEOFlavor_JSONSurface_Normals


OEOFlavor_JSONSurface_Default = OEOFlavor_JSONSurface_UserData


OEOFlavor_JSONSurface_All = OEOFlavor_JSONSurface_UserData|OEOFlavor_JSONSurface_Packed|OEOFlavor_JSONSurface_Normals

OEOFlavor_CXSMILES_Isotopes = _oechem.OEOFlavor_CXSMILES_Isotopes

OEOFlavor_CXSMILES_Hydrogens = _oechem.OEOFlavor_CXSMILES_Hydrogens

OEOFlavor_CXSMILES_RGroups = _oechem.OEOFlavor_CXSMILES_RGroups

OEOFlavor_CXSMILES_AtomStereo = _oechem.OEOFlavor_CXSMILES_AtomStereo

OEOFlavor_CXSMILES_BondStereo = _oechem.OEOFlavor_CXSMILES_BondStereo

OEOFlavor_CXSMILES_AtomMaps = _oechem.OEOFlavor_CXSMILES_AtomMaps

OEOFlavor_CXSMILES_Canonical = _oechem.OEOFlavor_CXSMILES_Canonical

OEOFlavor_CXSMILES_Kekule = _oechem.OEOFlavor_CXSMILES_Kekule

OEOFlavor_CXSMILES_SuperAtoms = _oechem.OEOFlavor_CXSMILES_SuperAtoms

OEOFlavor_CXSMILES_ExtBonds = _oechem.OEOFlavor_CXSMILES_ExtBonds

OEOFlavor_CXSMILES_ImpHCount = _oechem.OEOFlavor_CXSMILES_ImpHCount

OEOFlavor_CXSMILES_AllBonds = _oechem.OEOFlavor_CXSMILES_AllBonds

OEOFlavor_CXSMILES_EnhStereo = _oechem.OEOFlavor_CXSMILES_EnhStereo

OEOFlavor_CXSMILES_SmiMask = _oechem.OEOFlavor_CXSMILES_SmiMask

OEOFlavor_CXSMILES_DEFAULT = _oechem.OEOFlavor_CXSMILES_DEFAULT


OEOFlavor_CXSMILES_Default = OEOFlavor_CXSMILES_DEFAULT


OEWriteMolReturnCode_Success = 0


OEWriteMolReturnCode_NoParentClass = 1


OEWriteMolReturnCode_CheckFailed = 2


OEWriteMolReturnCode_StreamFailed = 3


OEWriteMolReturnCode_IncorrectSize = 4


OEWriteMolReturnCode_Continue = 5


OEWriteMolReturnCode_ReadTagFailed = 6


OEWriteMolReturnCode_CorruptHeader = 7


OEWriteMolReturnCode_EndOfFile = 8


OEWriteMolReturnCode_ReadLengthFailed = 9


OEWriteMolReturnCode_TypeCheckFailed = 10


OEWriteMolReturnCode_IncorrectHandlerType = 11

OEWriteMolReturnCode_TooManyAtoms = _oechem.OEWriteMolReturnCode_TooManyAtoms

OEWriteMolReturnCode_OEBWriteFailure = _oechem.OEWriteMolReturnCode_OEBWriteFailure

OEWriteMolReturnCode_FormatNotWritable = _oechem.OEWriteMolReturnCode_FormatNotWritable

OEWriteMolReturnCode_NoConformer = _oechem.OEWriteMolReturnCode_NoConformer

OEMDLOFlag_MCHG = _oechem.OEMDLOFlag_MCHG

OEMDLOFlag_MISO = _oechem.OEMDLOFlag_MISO

OEMDLOFlag_MRGP = _oechem.OEMDLOFlag_MRGP

OEMDLOFlag_MV30 = _oechem.OEMDLOFlag_MV30

OEMDLOFlag_DEFAULT = _oechem.OEMDLOFlag_DEFAULT

OEPDBIFlag_TER = _oechem.OEPDBIFlag_TER

OEPDBIFlag_END = _oechem.OEPDBIFlag_END

OEPDBIFlag_ENDM = _oechem.OEPDBIFlag_ENDM

OEPDBIFlag_ALL = _oechem.OEPDBIFlag_ALL

OEPDBIFlag_DATA = _oechem.OEPDBIFlag_DATA

OEPDBIFlag_CHARGE = _oechem.OEPDBIFlag_CHARGE

OEPDBIFlag_RADIUS = _oechem.OEPDBIFlag_RADIUS

OEPDBIFlag_DELPHI = _oechem.OEPDBIFlag_DELPHI

OEPDBIFlag_DEFAULT = _oechem.OEPDBIFlag_DEFAULT

OEPDBOFlag_BONDS = _oechem.OEPDBOFlag_BONDS

OEPDBOFlag_ORDERS = _oechem.OEPDBOFlag_ORDERS

OEPDBOFlag_BOTH = _oechem.OEPDBOFlag_BOTH

OEPDBOFlag_CHARGE = _oechem.OEPDBOFlag_CHARGE

OEPDBOFlag_RADIUS = _oechem.OEPDBOFlag_RADIUS

OEPDBOFlag_TER = _oechem.OEPDBOFlag_TER

OEPDBOFlag_ELEMENT = _oechem.OEPDBOFlag_ELEMENT

OEPDBOFlag_FORMALCHARGE = _oechem.OEPDBOFlag_FORMALCHARGE

OEPDBOFlag_HETBONDS = _oechem.OEPDBOFlag_HETBONDS

OEPDBOFlag_DELPHI = _oechem.OEPDBOFlag_DELPHI

OEPDBOFlag_DEFAULT = _oechem.OEPDBOFlag_DEFAULT

OEMOPACOFlag_XYZ = _oechem.OEMOPACOFlag_XYZ

OEMOPACOFlag_CHARGES = _oechem.OEMOPACOFlag_CHARGES

OEMOPACOFlag_DEFAULT = _oechem.OEMOPACOFlag_DEFAULT

OEProperty_Undefined = _oechem.OEProperty_Undefined

OEProperty_Aromatic = _oechem.OEProperty_Aromatic

OEProperty_Ring = _oechem.OEProperty_Ring

OEProperty_Donor = _oechem.OEProperty_Donor

OEProperty_Acceptor = _oechem.OEProperty_Acceptor

OEProperty_Both = _oechem.OEProperty_Both

OEProperty_Chiral = _oechem.OEProperty_Chiral

OEProperty_Exo = _oechem.OEProperty_Exo

OEProperty_Endo = _oechem.OEProperty_Endo

OEProperty_StereoDefined = _oechem.OEProperty_StereoDefined

OEProperty_Visit = _oechem.OEProperty_Visit

OEProperty_Deleted = _oechem.OEProperty_Deleted

OEProperty_Single = _oechem.OEProperty_Single

OEProperty_Double = _oechem.OEProperty_Double

OEProperty_Triple = _oechem.OEProperty_Triple

OEProperty_Closure = _oechem.OEProperty_Closure

OEProperty_Rotor = _oechem.OEProperty_Rotor

OEProperty_RingAtomsAndBonds = _oechem.OEProperty_RingAtomsAndBonds

OEProperty_ClosureBonds = _oechem.OEProperty_ClosureBonds

OEProperty_Chirality = _oechem.OEProperty_Chirality

OEProperty_Hybridization = _oechem.OEProperty_Hybridization

OEProperty_Kekule = _oechem.OEProperty_Kekule

OEProperty_Degree = _oechem.OEProperty_Degree

OEProperty_Valence = _oechem.OEProperty_Valence

OEProperty_PhCorrected = _oechem.OEProperty_PhCorrected

OEProperty_AtomTypes = _oechem.OEProperty_AtomTypes

OEProperty_Residue = _oechem.OEProperty_Residue

OEProperty_BondOrders = _oechem.OEProperty_BondOrders

OEProperty_HydrogenMode = _oechem.OEProperty_HydrogenMode

OEProperty_DeletedAtoms = _oechem.OEProperty_DeletedAtoms

OEProperty_DeletedBonds = _oechem.OEProperty_DeletedBonds

OEProperty_AtomTypeString = _oechem.OEProperty_AtomTypeString

OEProperty_BondTypeString = _oechem.OEProperty_BondTypeString

OEProperty_Isotope = _oechem.OEProperty_Isotope

OEProperty_PartialCharge = _oechem.OEProperty_PartialCharge

OEProperty_AtomTypeInt = _oechem.OEProperty_AtomTypeInt

OEProperty_AtomName = _oechem.OEProperty_AtomName

OEProperty_X = _oechem.OEProperty_X

OEProperty_Y = _oechem.OEProperty_Y

OEProperty_Z = _oechem.OEProperty_Z

OEProperty_MatchOrder = _oechem.OEProperty_MatchOrder

OEProperty_OEBase = _oechem.OEProperty_OEBase

OEProperty_Rxn = _oechem.OEProperty_Rxn

OEProperty_RxnRole = _oechem.OEProperty_RxnRole

OEProperty_AtomMemberPred = _oechem.OEProperty_AtomMemberPred

OEProperty_BondMemberPred = _oechem.OEProperty_BondMemberPred

OEProperty_BondStereo = _oechem.OEProperty_BondStereo

OEProperty_Component = _oechem.OEProperty_Component

OEProperty_AroModel = _oechem.OEProperty_AroModel

OEProperty_PartialChargeModel = _oechem.OEProperty_PartialChargeModel

OEProperty_Dimension = _oechem.OEProperty_Dimension

OEProperty_Perceived = _oechem.OEProperty_Perceived

OEProperty_MapIdx = _oechem.OEProperty_MapIdx

OEProperty_SymClass = _oechem.OEProperty_SymClass

OEProperty_All = _oechem.OEProperty_All

OEProperty_Radius = _oechem.OEProperty_Radius

OEProperty_Anisou = _oechem.OEProperty_Anisou

OEProperty_MolDBIdx = _oechem.OEProperty_MolDBIdx

OERxnRole_None = _oechem.OERxnRole_None

OERxnRole_Reactant = _oechem.OERxnRole_Reactant

OERxnRole_Agent = _oechem.OERxnRole_Agent

OERxnRole_Product = _oechem.OERxnRole_Product

OERxnRole_Catalyst = _oechem.OERxnRole_Catalyst

OECounts_Undefined = _oechem.OECounts_Undefined

OECounts_Atoms = _oechem.OECounts_Atoms

OECounts_Bonds = _oechem.OECounts_Bonds

OECounts_Conformers = _oechem.OECounts_Conformers

OECounts_Poses = _oechem.OECounts_Poses

OECounts_Rotors = _oechem.OECounts_Rotors

OEFuzzVal_False = _oechem.OEFuzzVal_False

OEFuzzVal_True = _oechem.OEFuzzVal_True

OEFuzzVal_Maybe = _oechem.OEFuzzVal_Maybe

OEGroupType_Undefined = _oechem.OEGroupType_Undefined

OEGroupType_MDLAbsStereo = _oechem.OEGroupType_MDLAbsStereo

OEGroupType_MDLOrStereo = _oechem.OEGroupType_MDLOrStereo

OEGroupType_MDLAndStereo = _oechem.OEGroupType_MDLAndStereo

OEGroupType_Component = _oechem.OEGroupType_Component

OEGroupType_UserDefined = _oechem.OEGroupType_UserDefined

OEHybridization_Unknown = _oechem.OEHybridization_Unknown

OEHybridization_sp = _oechem.OEHybridization_sp

OEHybridization_sp2 = _oechem.OEHybridization_sp2

OEHybridization_sp3 = _oechem.OEHybridization_sp3

OEHybridization_sp3d = _oechem.OEHybridization_sp3d

OEHybridization_sp3d2 = _oechem.OEHybridization_sp3d2

OELingoType_Undefined = _oechem.OELingoType_Undefined

OELingoType_IsoSmiMap = _oechem.OELingoType_IsoSmiMap

OELingoType_Default = _oechem.OELingoType_Default

OEMCSType_Exhaustive = _oechem.OEMCSType_Exhaustive

OEMCSType_Approximate = _oechem.OEMCSType_Approximate


OEMCSType_Default = OEMCSType_Exhaustive

OEMMFFType_UNK = _oechem.OEMMFFType_UNK

OEMMFFType_CR = _oechem.OEMMFFType_CR

OEMMFFType_CC = _oechem.OEMMFFType_CC

OEMMFFType_CSP2 = _oechem.OEMMFFType_CSP2

OEMMFFType_CO = _oechem.OEMMFFType_CO

OEMMFFType_CN = _oechem.OEMMFFType_CN

OEMMFFType_CGD = _oechem.OEMMFFType_CGD

OEMMFFType_COR = _oechem.OEMMFFType_COR

OEMMFFType_CON = _oechem.OEMMFFType_CON

OEMMFFType_COO = _oechem.OEMMFFType_COO

OEMMFFType_COON = _oechem.OEMMFFType_COON

OEMMFFType_COOO = _oechem.OEMMFFType_COOO

OEMMFFType_COS = _oechem.OEMMFFType_COS

OEMMFFType_CS = _oechem.OEMMFFType_CS

OEMMFFType_CSN = _oechem.OEMMFFType_CSN

OEMMFFType_CSO2 = _oechem.OEMMFFType_CSO2

OEMMFFType_CSO = _oechem.OEMMFFType_CSO

OEMMFFType_CSS = _oechem.OEMMFFType_CSS

OEMMFFType_CP = _oechem.OEMMFFType_CP

OEMMFFType_CSP = _oechem.OEMMFFType_CSP

OEMMFFType_C = _oechem.OEMMFFType_C

OEMMFFType_HC = _oechem.OEMMFFType_HC

OEMMFFType_HSI = _oechem.OEMMFFType_HSI

OEMMFFType_O = _oechem.OEMMFFType_O

OEMMFFType_OR = _oechem.OEMMFFType_OR

OEMMFFType_OCO = _oechem.OEMMFFType_OCO

OEMMFFType_OCC = _oechem.OEMMFFType_OCC

OEMMFFType_OCN = _oechem.OEMMFFType_OCN

OEMMFFType_OCS = _oechem.OEMMFFType_OCS

OEMMFFType_ONO2 = _oechem.OEMMFFType_ONO2

OEMMFFType_ONO = _oechem.OEMMFFType_ONO

OEMMFFType_OSO3 = _oechem.OEMMFFType_OSO3

OEMMFFType_OSO2 = _oechem.OEMMFFType_OSO2

OEMMFFType_OSO = _oechem.OEMMFFType_OSO

OEMMFFType_OSO_ = _oechem.OEMMFFType_OSO_

OEMMFFType_OS = _oechem.OEMMFFType_OS

OEMMFFType_OPO3 = _oechem.OEMMFFType_OPO3

OEMMFFType_OPO2 = _oechem.OEMMFFType_OPO2

OEMMFFType_OPO = _oechem.OEMMFFType_OPO

OEMMFFType_OP = _oechem.OEMMFFType_OP

OEMMFFType_OC = _oechem.OEMMFFType_OC

OEMMFFType_OCN_ = _oechem.OEMMFFType_OCN_

OEMMFFType_OCR = _oechem.OEMMFFType_OCR

OEMMFFType_OCO_ = _oechem.OEMMFFType_OCO_

OEMMFFType_ON = _oechem.OEMMFFType_ON

OEMMFFType_OS_ = _oechem.OEMMFFType_OS_

OEMMFFType_OS__ = _oechem.OEMMFFType_OS__

OEMMFFType_NR = _oechem.OEMMFFType_NR

OEMMFFType_NC = _oechem.OEMMFFType_NC

OEMMFFType_NN = _oechem.OEMMFFType_NN

OEMMFFType_NCO = _oechem.OEMMFFType_NCO

OEMMFFType_NCS = _oechem.OEMMFFType_NCS

OEMMFFType_NNC = _oechem.OEMMFFType_NNC

OEMMFFType_NNN = _oechem.OEMMFFType_NNN

OEMMFFType_F = _oechem.OEMMFFType_F

OEMMFFType_CL = _oechem.OEMMFFType_CL

OEMMFFType_Cl = _oechem.OEMMFFType_Cl

OEMMFFType_BR = _oechem.OEMMFFType_BR

OEMMFFType_Br = _oechem.OEMMFFType_Br

OEMMFFType_I = _oechem.OEMMFFType_I

OEMMFFType_S = _oechem.OEMMFFType_S

OEMMFFType_SC = _oechem.OEMMFFType_SC

OEMMFFType_SO = _oechem.OEMMFFType_SO

OEMMFFType_SN = _oechem.OEMMFFType_SN

OEMMFFType_SO2 = _oechem.OEMMFFType_SO2

OEMMFFType_SO2N = _oechem.OEMMFFType_SO2N

OEMMFFType_SO3 = _oechem.OEMMFFType_SO3

OEMMFFType_SO4 = _oechem.OEMMFFType_SO4

OEMMFFType_SO2_ = _oechem.OEMMFFType_SO2_

OEMMFFType_SNO = _oechem.OEMMFFType_SNO

OEMMFFType_SI = _oechem.OEMMFFType_SI

OEMMFFType_CR4R = _oechem.OEMMFFType_CR4R

OEMMFFType_HOR = _oechem.OEMMFFType_HOR

OEMMFFType_HO = _oechem.OEMMFFType_HO

OEMMFFType_CR3R = _oechem.OEMMFFType_CR3R

OEMMFFType_HNR = _oechem.OEMMFFType_HNR

OEMMFFType_HPYL = _oechem.OEMMFFType_HPYL

OEMMFFType_H3N = _oechem.OEMMFFType_H3N

OEMMFFType_HNOX = _oechem.OEMMFFType_HNOX

OEMMFFType_HOCO = _oechem.OEMMFFType_HOCO

OEMMFFType_HOP = _oechem.OEMMFFType_HOP

OEMMFFType_PO4 = _oechem.OEMMFFType_PO4

OEMMFFType_PO3 = _oechem.OEMMFFType_PO3

OEMMFFType_PO2 = _oechem.OEMMFFType_PO2

OEMMFFType_PO = _oechem.OEMMFFType_PO

OEMMFFType_PTET = _oechem.OEMMFFType_PTET

OEMMFFType_P = _oechem.OEMMFFType_P

OEMMFFType_HNC = _oechem.OEMMFFType_HNC

OEMMFFType_HNN = _oechem.OEMMFFType_HNN

OEMMFFType_HNCO = _oechem.OEMMFFType_HNCO

OEMMFFType_HNCS = _oechem.OEMMFFType_HNCS

OEMMFFType_HNCC = _oechem.OEMMFFType_HNCC

OEMMFFType_HNCN = _oechem.OEMMFFType_HNCN

OEMMFFType_HNNC = _oechem.OEMMFFType_HNNC

OEMMFFType_HNNN = _oechem.OEMMFFType_HNNN

OEMMFFType_HNSO = _oechem.OEMMFFType_HNSO

OEMMFFType_HNC_ = _oechem.OEMMFFType_HNC_

OEMMFFType_HSP2 = _oechem.OEMMFFType_HSP2

OEMMFFType_HOCC = _oechem.OEMMFFType_HOCC

OEMMFFType_HOCN = _oechem.OEMMFFType_HOCN

OEMMFFType_CR4E = _oechem.OEMMFFType_CR4E

OEMMFFType_HOH = _oechem.OEMMFFType_HOH

OEMMFFType_O2CM = _oechem.OEMMFFType_O2CM

OEMMFFType_OXN = _oechem.OEMMFFType_OXN

OEMMFFType_ON_ = _oechem.OEMMFFType_ON_

OEMMFFType_O2N = _oechem.OEMMFFType_O2N

OEMMFFType_O2NO = _oechem.OEMMFFType_O2NO

OEMMFFType_O3N = _oechem.OEMMFFType_O3N

OEMMFFType_OS___ = _oechem.OEMMFFType_OS___

OEMMFFType_O2S = _oechem.OEMMFFType_O2S

OEMMFFType_O3S = _oechem.OEMMFFType_O3S

OEMMFFType_O4S = _oechem.OEMMFFType_O4S

OEMMFFType_OSMS = _oechem.OEMMFFType_OSMS

OEMMFFType_OP_ = _oechem.OEMMFFType_OP_

OEMMFFType_O2P = _oechem.OEMMFFType_O2P

OEMMFFType_O3P = _oechem.OEMMFFType_O3P

OEMMFFType_O4P = _oechem.OEMMFFType_O4P

OEMMFFType_O4CL = _oechem.OEMMFFType_O4CL

OEMMFFType_O4Cl = _oechem.OEMMFFType_O4Cl

OEMMFFType_HOS = _oechem.OEMMFFType_HOS

OEMMFFType_NR_ = _oechem.OEMMFFType_NR_

OEMMFFType_OM = _oechem.OEMMFFType_OM

OEMMFFType_OM2 = _oechem.OEMMFFType_OM2

OEMMFFType_HNR_ = _oechem.OEMMFFType_HNR_

OEMMFFType_HIM = _oechem.OEMMFFType_HIM

OEMMFFType_HPD_ = _oechem.OEMMFFType_HPD_

OEMMFFType_HNN_ = _oechem.OEMMFFType_HNN_

OEMMFFType_HNC__ = _oechem.OEMMFFType_HNC__

OEMMFFType_HGD_ = _oechem.OEMMFFType_HGD_

OEMMFFType_CB = _oechem.OEMMFFType_CB

OEMMFFType_NPYD = _oechem.OEMMFFType_NPYD

OEMMFFType_NPYL = _oechem.OEMMFFType_NPYL

OEMMFFType_NCC = _oechem.OEMMFFType_NCC

OEMMFFType_NCN = _oechem.OEMMFFType_NCN

OEMMFFType_NCP = _oechem.OEMMFFType_NCP

OEMMFFType_NCC_ = _oechem.OEMMFFType_NCC_

OEMMFFType_CO2M = _oechem.OEMMFFType_CO2M

OEMMFFType_CS2M = _oechem.OEMMFFType_CS2M

OEMMFFType_NSP = _oechem.OEMMFFType_NSP

OEMMFFType_NSO2 = _oechem.OEMMFFType_NSO2

OEMMFFType_NSO3 = _oechem.OEMMFFType_NSO3

OEMMFFType_NCN_ = _oechem.OEMMFFType_NCN_

OEMMFFType_STHI = _oechem.OEMMFFType_STHI

OEMMFFType_NO2 = _oechem.OEMMFFType_NO2

OEMMFFType_NO3 = _oechem.OEMMFFType_NO3

OEMMFFType_NO = _oechem.OEMMFFType_NO

OEMMFFType_NAZT = _oechem.OEMMFFType_NAZT

OEMMFFType_NSO = _oechem.OEMMFFType_NSO

OEMMFFType_O_ = _oechem.OEMMFFType_O_

OEMMFFType_HO_ = _oechem.OEMMFFType_HO_

OEMMFFType_O__ = _oechem.OEMMFFType_O__

OEMMFFType_HO__ = _oechem.OEMMFFType_HO__

OEMMFFType_N_ = _oechem.OEMMFFType_N_

OEMMFFType_NC_ = _oechem.OEMMFFType_NC_

OEMMFFType_NN_ = _oechem.OEMMFFType_NN_

OEMMFFType_NCN__ = _oechem.OEMMFFType_NCN__

OEMMFFType_NGD_ = _oechem.OEMMFFType_NGD_

OEMMFFType_CGD_ = _oechem.OEMMFFType_CGD_

OEMMFFType_CNN_ = _oechem.OEMMFFType_CNN_

OEMMFFType_NPD_ = _oechem.OEMMFFType_NPD_

OEMMFFType_OFUR = _oechem.OEMMFFType_OFUR

OEMMFFType_C__ = _oechem.OEMMFFType_C__

OEMMFFType_NR__ = _oechem.OEMMFFType_NR__

OEMMFFType_NM = _oechem.OEMMFFType_NM

OEMMFFType_C5A = _oechem.OEMMFFType_C5A

OEMMFFType_C5B = _oechem.OEMMFFType_C5B

OEMMFFType_N5A = _oechem.OEMMFFType_N5A

OEMMFFType_N5B = _oechem.OEMMFFType_N5B

OEMMFFType_N2OX = _oechem.OEMMFFType_N2OX

OEMMFFType_N3OX = _oechem.OEMMFFType_N3OX

OEMMFFType_NPOX = _oechem.OEMMFFType_NPOX

OEMMFFType_OH2 = _oechem.OEMMFFType_OH2

OEMMFFType_HS = _oechem.OEMMFFType_HS

OEMMFFType_HSN = _oechem.OEMMFFType_HSN

OEMMFFType_HP = _oechem.OEMMFFType_HP

OEMMFFType_SP = _oechem.OEMMFFType_SP

OEMMFFType_SM = _oechem.OEMMFFType_SM

OEMMFFType_SSMO = _oechem.OEMMFFType_SSMO

OEMMFFType_SO2M = _oechem.OEMMFFType_SO2M

OEMMFFType_SSOM = _oechem.OEMMFFType_SSOM

OEMMFFType_SO_ = _oechem.OEMMFFType_SO_

OEMMFFType_PC = _oechem.OEMMFFType_PC

OEMMFFType_N5M = _oechem.OEMMFFType_N5M

OEMMFFType_CLO4 = _oechem.OEMMFFType_CLO4

OEMMFFType_C5 = _oechem.OEMMFFType_C5

OEMMFFType_N5 = _oechem.OEMMFFType_N5

OEMMFFType_CIM = _oechem.OEMMFFType_CIM

OEMMFFType_NIM = _oechem.OEMMFFType_NIM

OEMMFFType_N5A_ = _oechem.OEMMFFType_N5A_

OEMMFFType_N5B_ = _oechem.OEMMFFType_N5B_

OEMMFFType_N5_ = _oechem.OEMMFFType_N5_

OEMMFFType_N5AX = _oechem.OEMMFFType_N5AX

OEMMFFType_N5BX = _oechem.OEMMFFType_N5BX

OEMMFFType_N5OX = _oechem.OEMMFFType_N5OX

OEMMFFType_FE2 = _oechem.OEMMFFType_FE2

OEMMFFType_FE3 = _oechem.OEMMFFType_FE3

OEMMFFType_F_ = _oechem.OEMMFFType_F_

OEMMFFType_CL_ = _oechem.OEMMFFType_CL_

OEMMFFType_BR_ = _oechem.OEMMFFType_BR_

OEMMFFType_LI = _oechem.OEMMFFType_LI

OEMMFFType_NA = _oechem.OEMMFFType_NA

OEMMFFType_K = _oechem.OEMMFFType_K

OEMMFFType_ZN2 = _oechem.OEMMFFType_ZN2

OEMMFFType_CA2 = _oechem.OEMMFFType_CA2

OEMMFFType_CU1 = _oechem.OEMMFFType_CU1

OEMMFFType_CU2 = _oechem.OEMMFFType_CU2

OEMMFFType_MG2 = _oechem.OEMMFFType_MG2

OEMMFFType_HOM = _oechem.OEMMFFType_HOM

OEMMFFType_HOCS = _oechem.OEMMFFType_HOCS

OEMMFFType_HON = _oechem.OEMMFFType_HON

OEMMFFType_HX = _oechem.OEMMFFType_HX

OEMMFFType_HNO = _oechem.OEMMFFType_HNO

OEMMFFType_HN5_ = _oechem.OEMMFFType_HN5_

OEMMFFType_NPO2 = _oechem.OEMMFFType_NPO2

OEMMFFType_NPO3 = _oechem.OEMMFFType_NPO3

OEMMFFType_HNPO = _oechem.OEMMFFType_HNPO

OEMMFFType_HNO2 = _oechem.OEMMFFType_HNO2

OEMMFFType_HNM = _oechem.OEMMFFType_HNM

OEMMFFType_CONN = _oechem.OEMMFFType_CONN

OEMMFFType_S2CM = _oechem.OEMMFFType_S2CM

OEMMFFType_SE = _oechem.OEMMFFType_SE

OEMMFFType_Se = _oechem.OEMMFFType_Se

OEMMFFType_B = _oechem.OEMMFFType_B

OEMMFFType_HSE = _oechem.OEMMFFType_HSE

OEMMFFType_HSe = _oechem.OEMMFFType_HSe

OEMMFFType_B_ = _oechem.OEMMFFType_B_

OEMMFFType_HB = _oechem.OEMMFFType_HB

OEMMFFType_DUMMY = _oechem.OEMMFFType_DUMMY

OEMMFFType_MAXTYPE = _oechem.OEMMFFType_MAXTYPE

OEPerceived_RingAtomsAndBonds = _oechem.OEPerceived_RingAtomsAndBonds

OEPerceived_Aromaticity = _oechem.OEPerceived_Aromaticity

OEPerceived_AtomStereo = _oechem.OEPerceived_AtomStereo

OEPerceived_BondStereo = _oechem.OEPerceived_BondStereo

OEPerceived_Chiral = _oechem.OEPerceived_Chiral

OEPerceived_PartialCharges = _oechem.OEPerceived_PartialCharges

OEPerceived_Chains = _oechem.OEPerceived_Chains

OEPerceived_Hybridization = _oechem.OEPerceived_Hybridization

OEPerceived_Energy = _oechem.OEPerceived_Energy

OEPerceived_SecondaryStructure = _oechem.OEPerceived_SecondaryStructure

OEMolBaseType_Undefined = _oechem.OEMolBaseType_Undefined

OEMolBaseType_OEDefault = _oechem.OEMolBaseType_OEDefault

OEMolBaseType_OEDBMol = _oechem.OEMolBaseType_OEDBMol

OEMolBaseType_OEMiniMol = _oechem.OEMolBaseType_OEMiniMol

OEMolBaseType_MaxType = _oechem.OEMolBaseType_MaxType

OEMCMolType_Undefined = _oechem.OEMCMolType_Undefined

OEMCMolType_Cartesian = _oechem.OEMCMolType_Cartesian


OEMCMolType_FloatCartesian = OEMCMolType_Cartesian

OEMCMolType_DoubleCartesian = _oechem.OEMCMolType_DoubleCartesian

OEMCMolType_LongDoubleCartesian = _oechem.OEMCMolType_LongDoubleCartesian

OEMCMolType_HalfFloatCartesian = _oechem.OEMCMolType_HalfFloatCartesian

OEMCMolType_OEDBMCMol = _oechem.OEMCMolType_OEDBMCMol

OEMCMolType_MaxType = _oechem.OEMCMolType_MaxType


OEMCMolType_OEDefault = OEMCMolType_FloatCartesian

OEQMolType_Undefined = _oechem.OEQMolType_Undefined

OEQMolType_OEDefault = _oechem.OEQMolType_OEDefault

OEQMolType_MaxType = _oechem.OEQMolType_MaxType


OEGraphMolType_Undefined = 0


OEGraphMolType_OEDefault = 1


OEGraphMolType_OEDBMol = 2


OEGraphMolType_OEMiniMol = 3


OEGraphMolType_MaxType = 4


OEMolType_Undefined = 0


OEMolType_Cartesian = 1


OEMolType_FloatCartesian = OEMCMolType_Cartesian


OEMolType_DoubleCartesian = 2


OEMolType_LongDoubleCartesian = 3


OEMolType_HalfFloatCartesian = 4


OEMolType_OEDBMCMol = 5


OEMolType_MaxType = 6


OEMolType_OEDefault = OEMCMolType_FloatCartesian

OESLNFlag_Isotopes = _oechem.OESLNFlag_Isotopes

OESLNFlag_Hydrogens = _oechem.OESLNFlag_Hydrogens

OESLNFlag_Canonical = _oechem.OESLNFlag_Canonical

OESLNFlag_Kekule = _oechem.OESLNFlag_Kekule

OESLNFlag_Name = _oechem.OESLNFlag_Name

OESLNFlag_FCharge = _oechem.OESLNFlag_FCharge

OESLNFlag_Coords2D = _oechem.OESLNFlag_Coords2D

OESLNFlag_Coords3D = _oechem.OESLNFlag_Coords3D

OESLNFlag_DEFAULT = _oechem.OESLNFlag_DEFAULT

OESMILESFlag_Isotopes = _oechem.OESMILESFlag_Isotopes

OESMILESFlag_Hydrogens = _oechem.OESMILESFlag_Hydrogens

OESMILESFlag_RGroups = _oechem.OESMILESFlag_RGroups

OESMILESFlag_AtomStereo = _oechem.OESMILESFlag_AtomStereo

OESMILESFlag_BondStereo = _oechem.OESMILESFlag_BondStereo

OESMILESFlag_AtomMaps = _oechem.OESMILESFlag_AtomMaps

OESMILESFlag_Canonical = _oechem.OESMILESFlag_Canonical

OESMILESFlag_Kekule = _oechem.OESMILESFlag_Kekule

OESMILESFlag_SuperAtoms = _oechem.OESMILESFlag_SuperAtoms

OESMILESFlag_ExtBonds = _oechem.OESMILESFlag_ExtBonds

OESMILESFlag_ImpHCount = _oechem.OESMILESFlag_ImpHCount

OESMILESFlag_AllBonds = _oechem.OESMILESFlag_AllBonds

OESMILESFlag_EnhStereo = _oechem.OESMILESFlag_EnhStereo

OESMILESFlag_DEFAULT = _oechem.OESMILESFlag_DEFAULT

OESMILESFlag_ISOMERIC = _oechem.OESMILESFlag_ISOMERIC

OENormType_Undefined = _oechem.OENormType_Undefined

OENormType_TableLen = _oechem.OENormType_TableLen

OENormType_Azide = _oechem.OENormType_Azide

OENormType_Carboxylate = _oechem.OENormType_Carboxylate

OENormType_Nitro = _oechem.OENormType_Nitro

OENormType_Noxide = _oechem.OENormType_Noxide

OENormType_Phosphate = _oechem.OENormType_Phosphate

OENormType_Sulfate = _oechem.OENormType_Sulfate

OENormType_Hydrogens = _oechem.OENormType_Hydrogens

OENormType_MAXTYPE = _oechem.OENormType_MAXTYPE

OEBinaryOpts_Readers = _oechem.OEBinaryOpts_Readers

OEBinaryOpts_Writers = _oechem.OEBinaryOpts_Writers

OEBinaryOpts_OEBase = _oechem.OEBinaryOpts_OEBase

OEBinaryOpts_OEMolBase = _oechem.OEBinaryOpts_OEMolBase

OEBinaryOpts_OEMCMolBase = _oechem.OEBinaryOpts_OEMCMolBase

OEBinaryOpts_OEQMol = _oechem.OEBinaryOpts_OEQMol

OEBinaryOpts_GZipCompress = _oechem.OEBinaryOpts_GZipCompress

OEBinaryOpts_RotCompress = _oechem.OEBinaryOpts_RotCompress

OEBinaryOpts_OEMolAtomIntType = _oechem.OEBinaryOpts_OEMolAtomIntType

OEBinaryOpts_OEMolBondIntType = _oechem.OEBinaryOpts_OEMolBondIntType

OEBinaryOpts_IntGrid = _oechem.OEBinaryOpts_IntGrid

OEBinaryOpts_IntMultiGrid = _oechem.OEBinaryOpts_IntMultiGrid

OEBinaryOpts_FloatGrid = _oechem.OEBinaryOpts_FloatGrid

OEBinaryOpts_FloatMultiGrid = _oechem.OEBinaryOpts_FloatMultiGrid

OEBinaryOpts_FloatFixedMultiGrid = _oechem.OEBinaryOpts_FloatFixedMultiGrid

OEBinaryOpts_CompressedConfTorsions = _oechem.OEBinaryOpts_CompressedConfTorsions

OEBinaryOpts_ZstdCompress = _oechem.OEBinaryOpts_ZstdCompress

OESmartsParseOpts_None = _oechem.OESmartsParseOpts_None

OESmartsParseOpts_RingConstraint = _oechem.OESmartsParseOpts_RingConstraint

OESmartsParseOpts_Optimize = _oechem.OESmartsParseOpts_Optimize


OESmartsParseOpts_Default = OESmartsParseOpts_Optimize|OESmartsParseOpts_RingConstraint

OEResidueIndex_ALA = _oechem.OEResidueIndex_ALA

OEResidueIndex_ARG = _oechem.OEResidueIndex_ARG

OEResidueIndex_ASN = _oechem.OEResidueIndex_ASN

OEResidueIndex_ASP = _oechem.OEResidueIndex_ASP

OEResidueIndex_CYS = _oechem.OEResidueIndex_CYS

OEResidueIndex_GLN = _oechem.OEResidueIndex_GLN

OEResidueIndex_GLU = _oechem.OEResidueIndex_GLU

OEResidueIndex_GLY = _oechem.OEResidueIndex_GLY

OEResidueIndex_HIS = _oechem.OEResidueIndex_HIS

OEResidueIndex_ILE = _oechem.OEResidueIndex_ILE

OEResidueIndex_LEU = _oechem.OEResidueIndex_LEU

OEResidueIndex_LYS = _oechem.OEResidueIndex_LYS

OEResidueIndex_MET = _oechem.OEResidueIndex_MET

OEResidueIndex_PHE = _oechem.OEResidueIndex_PHE

OEResidueIndex_PRO = _oechem.OEResidueIndex_PRO

OEResidueIndex_SER = _oechem.OEResidueIndex_SER

OEResidueIndex_THR = _oechem.OEResidueIndex_THR

OEResidueIndex_TRP = _oechem.OEResidueIndex_TRP

OEResidueIndex_TYR = _oechem.OEResidueIndex_TYR

OEResidueIndex_VAL = _oechem.OEResidueIndex_VAL

OEResidueIndex_UNK = _oechem.OEResidueIndex_UNK

OEResidueIndex_ASX = _oechem.OEResidueIndex_ASX

OEResidueIndex_GLX = _oechem.OEResidueIndex_GLX

OEResidueIndex_ASH = _oechem.OEResidueIndex_ASH

OEResidueIndex_CYX = _oechem.OEResidueIndex_CYX

OEResidueIndex_CYH = _oechem.OEResidueIndex_CYH

OEResidueIndex_CYM = _oechem.OEResidueIndex_CYM

OEResidueIndex_GLH = _oechem.OEResidueIndex_GLH

OEResidueIndex_HID = _oechem.OEResidueIndex_HID

OEResidueIndex_HIE = _oechem.OEResidueIndex_HIE

OEResidueIndex_HIP = _oechem.OEResidueIndex_HIP

OEResidueIndex_LYN = _oechem.OEResidueIndex_LYN

OEResidueIndex_TYM = _oechem.OEResidueIndex_TYM

OEResidueIndex_A = _oechem.OEResidueIndex_A

OEResidueIndex_C = _oechem.OEResidueIndex_C

OEResidueIndex_G = _oechem.OEResidueIndex_G

OEResidueIndex_I = _oechem.OEResidueIndex_I

OEResidueIndex_T = _oechem.OEResidueIndex_T

OEResidueIndex_U = _oechem.OEResidueIndex_U

OEResidueIndex_DA = _oechem.OEResidueIndex_DA

OEResidueIndex_DC = _oechem.OEResidueIndex_DC

OEResidueIndex_DG = _oechem.OEResidueIndex_DG

OEResidueIndex_DI = _oechem.OEResidueIndex_DI

OEResidueIndex_DT = _oechem.OEResidueIndex_DT

OEResidueIndex_DU = _oechem.OEResidueIndex_DU

OEResidueIndex__1MA = _oechem.OEResidueIndex__1MA

OEResidueIndex__2MG = _oechem.OEResidueIndex__2MG

OEResidueIndex__5MC = _oechem.OEResidueIndex__5MC

OEResidueIndex__5MU = _oechem.OEResidueIndex__5MU

OEResidueIndex__7MG = _oechem.OEResidueIndex__7MG

OEResidueIndex_H2U = _oechem.OEResidueIndex_H2U

OEResidueIndex_M2G = _oechem.OEResidueIndex_M2G

OEResidueIndex_OMC = _oechem.OEResidueIndex_OMC

OEResidueIndex_OMG = _oechem.OEResidueIndex_OMG

OEResidueIndex_PSU = _oechem.OEResidueIndex_PSU

OEResidueIndex_YG = _oechem.OEResidueIndex_YG

OEResidueIndex_ABA = _oechem.OEResidueIndex_ABA

OEResidueIndex_ACE = _oechem.OEResidueIndex_ACE

OEResidueIndex_CGU = _oechem.OEResidueIndex_CGU

OEResidueIndex_CME = _oechem.OEResidueIndex_CME

OEResidueIndex_CSD = _oechem.OEResidueIndex_CSD

OEResidueIndex_FOR = _oechem.OEResidueIndex_FOR

OEResidueIndex_HSE = _oechem.OEResidueIndex_HSE

OEResidueIndex_HYP = _oechem.OEResidueIndex_HYP

OEResidueIndex_HYL = _oechem.OEResidueIndex_HYL

OEResidueIndex_LYZ = _oechem.OEResidueIndex_LYZ

OEResidueIndex_MEN = _oechem.OEResidueIndex_MEN

OEResidueIndex_MLE = _oechem.OEResidueIndex_MLE

OEResidueIndex_MLY = _oechem.OEResidueIndex_MLY

OEResidueIndex_MSE = _oechem.OEResidueIndex_MSE

OEResidueIndex_ORN = _oechem.OEResidueIndex_ORN

OEResidueIndex_PCA = _oechem.OEResidueIndex_PCA

OEResidueIndex_PTR = _oechem.OEResidueIndex_PTR

OEResidueIndex_SAR = _oechem.OEResidueIndex_SAR

OEResidueIndex_SEP = _oechem.OEResidueIndex_SEP

OEResidueIndex_TAU = _oechem.OEResidueIndex_TAU

OEResidueIndex_TPO = _oechem.OEResidueIndex_TPO

OEResidueIndex_LIG = _oechem.OEResidueIndex_LIG

OEResidueIndex_MOL = _oechem.OEResidueIndex_MOL

OEResidueIndex_UNL = _oechem.OEResidueIndex_UNL

OEResidueIndex_BR = _oechem.OEResidueIndex_BR

OEResidueIndex_CL = _oechem.OEResidueIndex_CL

OEResidueIndex_ADP = _oechem.OEResidueIndex_ADP

OEResidueIndex_AF3 = _oechem.OEResidueIndex_AF3

OEResidueIndex_ALF = _oechem.OEResidueIndex_ALF

OEResidueIndex_ATP = _oechem.OEResidueIndex_ATP

OEResidueIndex_BME = _oechem.OEResidueIndex_BME

OEResidueIndex_DMS = _oechem.OEResidueIndex_DMS

OEResidueIndex_EDO = _oechem.OEResidueIndex_EDO

OEResidueIndex_EOH = _oechem.OEResidueIndex_EOH

OEResidueIndex_FAD = _oechem.OEResidueIndex_FAD

OEResidueIndex_GOL = _oechem.OEResidueIndex_GOL

OEResidueIndex_HEM = _oechem.OEResidueIndex_HEM

OEResidueIndex_HOH = _oechem.OEResidueIndex_HOH

OEResidueIndex_IOD = _oechem.OEResidueIndex_IOD

OEResidueIndex_MOH = _oechem.OEResidueIndex_MOH

OEResidueIndex_NAD = _oechem.OEResidueIndex_NAD

OEResidueIndex_NAG = _oechem.OEResidueIndex_NAG

OEResidueIndex_PEO = _oechem.OEResidueIndex_PEO

OEResidueIndex_PER = _oechem.OEResidueIndex_PER

OEResidueIndex_PO2 = _oechem.OEResidueIndex_PO2

OEResidueIndex_PO4 = _oechem.OEResidueIndex_PO4

OEResidueIndex_SO2 = _oechem.OEResidueIndex_SO2

OEResidueIndex_SO4 = _oechem.OEResidueIndex_SO4

OEResidueIndex_SX = _oechem.OEResidueIndex_SX

OEResidueIndex_NME = _oechem.OEResidueIndex_NME

OEResidueIndex_NHE = _oechem.OEResidueIndex_NHE

OEResidueIndex_CIP = _oechem.OEResidueIndex_CIP

OEResidueIndex_CIM = _oechem.OEResidueIndex_CIM

OEResidueIndex_RU = _oechem.OEResidueIndex_RU

OEResidueIndex_SB = _oechem.OEResidueIndex_SB

OEResidueIndex_V = _oechem.OEResidueIndex_V

OEResidueIndex_MN = _oechem.OEResidueIndex_MN

OEResidueIndex_MN3 = _oechem.OEResidueIndex_MN3

OEResidueIndex_FE = _oechem.OEResidueIndex_FE

OEResidueIndex_FE2 = _oechem.OEResidueIndex_FE2

OEResidueIndex_CO = _oechem.OEResidueIndex_CO

OEResidueIndex_CO3 = _oechem.OEResidueIndex_CO3

OEResidueIndex_NI = _oechem.OEResidueIndex_NI

OEResidueIndex__3NI = _oechem.OEResidueIndex__3NI

OEResidueIndex_CU1 = _oechem.OEResidueIndex_CU1

OEResidueIndex_CU = _oechem.OEResidueIndex_CU

OEResidueIndex_Y1 = _oechem.OEResidueIndex_Y1

OEResidueIndex_YT3 = _oechem.OEResidueIndex_YT3

OEResidueIndex__4MO = _oechem.OEResidueIndex__4MO

OEResidueIndex__6MO = _oechem.OEResidueIndex__6MO

OEResidueIndex_EU = _oechem.OEResidueIndex_EU

OEResidueIndex_EU3 = _oechem.OEResidueIndex_EU3

OEResidueIndex_AU = _oechem.OEResidueIndex_AU

OEResidueIndex_AU3 = _oechem.OEResidueIndex_AU3

OEResidueIndex_PT4 = _oechem.OEResidueIndex_PT4

OEResidueIndex_PT = _oechem.OEResidueIndex_PT

OEResidueIndex_IR3 = _oechem.OEResidueIndex_IR3

OEResidueIndex_IR = _oechem.OEResidueIndex_IR

OEResidueIndex_OS = _oechem.OEResidueIndex_OS

OEResidueIndex_OS4 = _oechem.OEResidueIndex_OS4

OEResidueIndex_YB = _oechem.OEResidueIndex_YB

OEResidueIndex_YB2 = _oechem.OEResidueIndex_YB2

OEResidueIndex__4TI = _oechem.OEResidueIndex__4TI

OEPDBAtomName_UNK = _oechem.OEPDBAtomName_UNK

OEPDBAtomName_N = _oechem.OEPDBAtomName_N

OEPDBAtomName_CA = _oechem.OEPDBAtomName_CA

OEPDBAtomName_C = _oechem.OEPDBAtomName_C

OEPDBAtomName_O = _oechem.OEPDBAtomName_O

OEPDBAtomName_CB = _oechem.OEPDBAtomName_CB

OEPDBAtomName_CG = _oechem.OEPDBAtomName_CG

OEPDBAtomName_OG = _oechem.OEPDBAtomName_OG

OEPDBAtomName_SG = _oechem.OEPDBAtomName_SG

OEPDBAtomName_CG1 = _oechem.OEPDBAtomName_CG1

OEPDBAtomName_OG1 = _oechem.OEPDBAtomName_OG1

OEPDBAtomName_CG2 = _oechem.OEPDBAtomName_CG2

OEPDBAtomName_CD = _oechem.OEPDBAtomName_CD

OEPDBAtomName_OD = _oechem.OEPDBAtomName_OD

OEPDBAtomName_SD = _oechem.OEPDBAtomName_SD

OEPDBAtomName_CD1 = _oechem.OEPDBAtomName_CD1

OEPDBAtomName_ND1 = _oechem.OEPDBAtomName_ND1

OEPDBAtomName_OD1 = _oechem.OEPDBAtomName_OD1

OEPDBAtomName_CD2 = _oechem.OEPDBAtomName_CD2

OEPDBAtomName_ND2 = _oechem.OEPDBAtomName_ND2

OEPDBAtomName_OD2 = _oechem.OEPDBAtomName_OD2

OEPDBAtomName_SE_ = _oechem.OEPDBAtomName_SE_

OEPDBAtomName_CE = _oechem.OEPDBAtomName_CE

OEPDBAtomName_NE = _oechem.OEPDBAtomName_NE

OEPDBAtomName_OE = _oechem.OEPDBAtomName_OE

OEPDBAtomName_CE1 = _oechem.OEPDBAtomName_CE1

OEPDBAtomName_NE1 = _oechem.OEPDBAtomName_NE1

OEPDBAtomName_OE1 = _oechem.OEPDBAtomName_OE1

OEPDBAtomName_CE2 = _oechem.OEPDBAtomName_CE2

OEPDBAtomName_NE2 = _oechem.OEPDBAtomName_NE2

OEPDBAtomName_OE2 = _oechem.OEPDBAtomName_OE2

OEPDBAtomName_CE3 = _oechem.OEPDBAtomName_CE3

OEPDBAtomName_OE3 = _oechem.OEPDBAtomName_OE3

OEPDBAtomName_OE4 = _oechem.OEPDBAtomName_OE4

OEPDBAtomName_CZ = _oechem.OEPDBAtomName_CZ

OEPDBAtomName_NZ = _oechem.OEPDBAtomName_NZ

OEPDBAtomName_CZ2 = _oechem.OEPDBAtomName_CZ2

OEPDBAtomName_CZ3 = _oechem.OEPDBAtomName_CZ3

OEPDBAtomName_OH = _oechem.OEPDBAtomName_OH

OEPDBAtomName_CH1 = _oechem.OEPDBAtomName_CH1

OEPDBAtomName_NH1 = _oechem.OEPDBAtomName_NH1

OEPDBAtomName_CH2 = _oechem.OEPDBAtomName_CH2

OEPDBAtomName_NH2 = _oechem.OEPDBAtomName_NH2

OEPDBAtomName_CH3 = _oechem.OEPDBAtomName_CH3

OEPDBAtomName_OXT = _oechem.OEPDBAtomName_OXT

OEPDBAtomName_P = _oechem.OEPDBAtomName_P

OEPDBAtomName_O1P = _oechem.OEPDBAtomName_O1P

OEPDBAtomName_O2P = _oechem.OEPDBAtomName_O2P

OEPDBAtomName_O5_ = _oechem.OEPDBAtomName_O5_

OEPDBAtomName_C5_ = _oechem.OEPDBAtomName_C5_

OEPDBAtomName_C4_ = _oechem.OEPDBAtomName_C4_

OEPDBAtomName_O4_ = _oechem.OEPDBAtomName_O4_

OEPDBAtomName_C3_ = _oechem.OEPDBAtomName_C3_

OEPDBAtomName_O3_ = _oechem.OEPDBAtomName_O3_

OEPDBAtomName_C2_ = _oechem.OEPDBAtomName_C2_

OEPDBAtomName_O2_ = _oechem.OEPDBAtomName_O2_

OEPDBAtomName_C2A = _oechem.OEPDBAtomName_C2A

OEPDBAtomName_C1_ = _oechem.OEPDBAtomName_C1_

OEPDBAtomName_N9 = _oechem.OEPDBAtomName_N9

OEPDBAtomName_C8 = _oechem.OEPDBAtomName_C8

OEPDBAtomName_N7 = _oechem.OEPDBAtomName_N7

OEPDBAtomName_C5 = _oechem.OEPDBAtomName_C5

OEPDBAtomName_C6 = _oechem.OEPDBAtomName_C6

OEPDBAtomName_O6 = _oechem.OEPDBAtomName_O6

OEPDBAtomName_N6 = _oechem.OEPDBAtomName_N6

OEPDBAtomName_N1 = _oechem.OEPDBAtomName_N1

OEPDBAtomName_C2 = _oechem.OEPDBAtomName_C2

OEPDBAtomName_O2 = _oechem.OEPDBAtomName_O2

OEPDBAtomName_N2 = _oechem.OEPDBAtomName_N2

OEPDBAtomName_CM5 = _oechem.OEPDBAtomName_CM5

OEPDBAtomName_N3 = _oechem.OEPDBAtomName_N3

OEPDBAtomName_C3 = _oechem.OEPDBAtomName_C3

OEPDBAtomName_C4 = _oechem.OEPDBAtomName_C4

OEPDBAtomName_O4 = _oechem.OEPDBAtomName_O4

OEPDBAtomName_N4 = _oechem.OEPDBAtomName_N4

OEPDBAtomName_CM7 = _oechem.OEPDBAtomName_CM7

OEPDBAtomName_C5M = _oechem.OEPDBAtomName_C5M

OEPDBAtomName_O3P = _oechem.OEPDBAtomName_O3P

OEPDBAtomName_CM1 = _oechem.OEPDBAtomName_CM1

OEPDBAtomName_CM2 = _oechem.OEPDBAtomName_CM2

OEPDBAtomName_C10 = _oechem.OEPDBAtomName_C10

OEPDBAtomName_C11 = _oechem.OEPDBAtomName_C11

OEPDBAtomName_C12 = _oechem.OEPDBAtomName_C12

OEPDBAtomName_C13 = _oechem.OEPDBAtomName_C13

OEPDBAtomName_C14 = _oechem.OEPDBAtomName_C14

OEPDBAtomName_C15 = _oechem.OEPDBAtomName_C15

OEPDBAtomName_C16 = _oechem.OEPDBAtomName_C16

OEPDBAtomName_O17 = _oechem.OEPDBAtomName_O17

OEPDBAtomName_O18 = _oechem.OEPDBAtomName_O18

OEPDBAtomName_C19 = _oechem.OEPDBAtomName_C19

OEPDBAtomName_N20 = _oechem.OEPDBAtomName_N20

OEPDBAtomName_C21 = _oechem.OEPDBAtomName_C21

OEPDBAtomName_O22 = _oechem.OEPDBAtomName_O22

OEPDBAtomName_O23 = _oechem.OEPDBAtomName_O23

OEPDBAtomName_C24 = _oechem.OEPDBAtomName_C24

OEPDBAtomName_Cprev = _oechem.OEPDBAtomName_Cprev

OEPDBAtomName_Nnext = _oechem.OEPDBAtomName_Nnext

OEPDBAtomName_CAnext = _oechem.OEPDBAtomName_CAnext

OEPDBAtomName_H = _oechem.OEPDBAtomName_H

OEPDBAtomName_H1 = _oechem.OEPDBAtomName_H1

OEPDBAtomName_H2 = _oechem.OEPDBAtomName_H2

OEPDBAtomName_H3 = _oechem.OEPDBAtomName_H3

OEPDBAtomName_HA = _oechem.OEPDBAtomName_HA

OEPDBAtomName_HA2 = _oechem.OEPDBAtomName_HA2

OEPDBAtomName_HA3 = _oechem.OEPDBAtomName_HA3

OEPDBAtomName_HB = _oechem.OEPDBAtomName_HB

OEPDBAtomName_HB1 = _oechem.OEPDBAtomName_HB1

OEPDBAtomName_HB2 = _oechem.OEPDBAtomName_HB2

OEPDBAtomName_HB3 = _oechem.OEPDBAtomName_HB3

OEPDBAtomName_HG = _oechem.OEPDBAtomName_HG

OEPDBAtomName_HG1 = _oechem.OEPDBAtomName_HG1

OEPDBAtomName_HG2 = _oechem.OEPDBAtomName_HG2

OEPDBAtomName_HG3 = _oechem.OEPDBAtomName_HG3

OEPDBAtomName_HG11 = _oechem.OEPDBAtomName_HG11

OEPDBAtomName_HG12 = _oechem.OEPDBAtomName_HG12

OEPDBAtomName_HG13 = _oechem.OEPDBAtomName_HG13

OEPDBAtomName_HG21 = _oechem.OEPDBAtomName_HG21

OEPDBAtomName_HG22 = _oechem.OEPDBAtomName_HG22

OEPDBAtomName_HG23 = _oechem.OEPDBAtomName_HG23

OEPDBAtomName_HD = _oechem.OEPDBAtomName_HD

OEPDBAtomName_HD1 = _oechem.OEPDBAtomName_HD1

OEPDBAtomName_HD2 = _oechem.OEPDBAtomName_HD2

OEPDBAtomName_HD3 = _oechem.OEPDBAtomName_HD3

OEPDBAtomName_HD11 = _oechem.OEPDBAtomName_HD11

OEPDBAtomName_HD12 = _oechem.OEPDBAtomName_HD12

OEPDBAtomName_HD13 = _oechem.OEPDBAtomName_HD13

OEPDBAtomName_HD21 = _oechem.OEPDBAtomName_HD21

OEPDBAtomName_HD22 = _oechem.OEPDBAtomName_HD22

OEPDBAtomName_HD23 = _oechem.OEPDBAtomName_HD23

OEPDBAtomName_HE = _oechem.OEPDBAtomName_HE

OEPDBAtomName_HE1 = _oechem.OEPDBAtomName_HE1

OEPDBAtomName_HE2 = _oechem.OEPDBAtomName_HE2

OEPDBAtomName_HE3 = _oechem.OEPDBAtomName_HE3

OEPDBAtomName_HE11 = _oechem.OEPDBAtomName_HE11

OEPDBAtomName_HE12 = _oechem.OEPDBAtomName_HE12

OEPDBAtomName_HE21 = _oechem.OEPDBAtomName_HE21

OEPDBAtomName_HE22 = _oechem.OEPDBAtomName_HE22

OEPDBAtomName_HZ = _oechem.OEPDBAtomName_HZ

OEPDBAtomName_HZ1 = _oechem.OEPDBAtomName_HZ1

OEPDBAtomName_HZ2 = _oechem.OEPDBAtomName_HZ2

OEPDBAtomName_HZ3 = _oechem.OEPDBAtomName_HZ3

OEPDBAtomName_HH = _oechem.OEPDBAtomName_HH

OEPDBAtomName_HH2 = _oechem.OEPDBAtomName_HH2

OEPDBAtomName_HH11 = _oechem.OEPDBAtomName_HH11

OEPDBAtomName_HH12 = _oechem.OEPDBAtomName_HH12

OEPDBAtomName_HH21 = _oechem.OEPDBAtomName_HH21

OEPDBAtomName_HH22 = _oechem.OEPDBAtomName_HH22

OEPDBAtomName_HH31 = _oechem.OEPDBAtomName_HH31

OEPDBAtomName_HH32 = _oechem.OEPDBAtomName_HH32

OEPDBAtomName_HH33 = _oechem.OEPDBAtomName_HH33

OEPDBAtomName_HN1 = _oechem.OEPDBAtomName_HN1

OEPDBAtomName_HN2 = _oechem.OEPDBAtomName_HN2

OEPDBAtomName_Hpr = _oechem.OEPDBAtomName_Hpr

OEPDBAtomName_H1P = _oechem.OEPDBAtomName_H1P

OEPDBAtomName_H2P = _oechem.OEPDBAtomName_H2P

OEPDBAtomName_H3P = _oechem.OEPDBAtomName_H3P

OEPDBAtomName_NA = _oechem.OEPDBAtomName_NA

OEPDBAtomName_CL = _oechem.OEPDBAtomName_CL

OEPreserveResInfo_None = _oechem.OEPreserveResInfo_None

OEPreserveResInfo_ChainID = _oechem.OEPreserveResInfo_ChainID

OEPreserveResInfo_ResidueNumber = _oechem.OEPreserveResInfo_ResidueNumber

OEPreserveResInfo_ResidueName = _oechem.OEPreserveResInfo_ResidueName

OEPreserveResInfo_SerialNumber = _oechem.OEPreserveResInfo_SerialNumber

OEPreserveResInfo_AlternateLocation = _oechem.OEPreserveResInfo_AlternateLocation

OEPreserveResInfo_InsertCode = _oechem.OEPreserveResInfo_InsertCode

OEPreserveResInfo_HetAtom = _oechem.OEPreserveResInfo_HetAtom

OEPreserveResInfo_AtomName = _oechem.OEPreserveResInfo_AtomName

OEPreserveResInfo_FragmentNumber = _oechem.OEPreserveResInfo_FragmentNumber

OEPreserveResInfo_BFactor = _oechem.OEPreserveResInfo_BFactor

OEPreserveResInfo_Occupancy = _oechem.OEPreserveResInfo_Occupancy

OEPreserveResInfo_Default = _oechem.OEPreserveResInfo_Default

OEPreserveResInfo_All = _oechem.OEPreserveResInfo_All

OEPDBHydrogenStyle_Classic = _oechem.OEPDBHydrogenStyle_Classic

OEPDBHydrogenStyle_Markley = _oechem.OEPDBHydrogenStyle_Markley


OEPDBHydrogenStyle_Modern = OEPDBHydrogenStyle_Markley


OEPDBHydrogenStyle_Default = OEPDBHydrogenStyle_Markley

OEAssumptionImpl_None = _oechem.OEAssumptionImpl_None

OEAssumptionImpl_PDBOrder = _oechem.OEAssumptionImpl_PDBOrder

OEAssumptionImpl_BondedResidue = _oechem.OEAssumptionImpl_BondedResidue

OEAssumptionImpl_ResPerceived = _oechem.OEAssumptionImpl_ResPerceived

OEAssumptionImpl_Default = _oechem.OEAssumptionImpl_Default

OEUniMolecularRxnFixValence_Explicit = _oechem.OEUniMolecularRxnFixValence_Explicit

OEUniMolecularRxnFixValence_Altered = _oechem.OEUniMolecularRxnFixValence_Altered

OEUniMolecularRxnFixValence_All = _oechem.OEUniMolecularRxnFixValence_All


OEUniMolecularRxnFixValence_DEFAULT = OEUniMolecularRxnFixValence_Explicit


OEUniMolecularRxnFixValence_Default = OEUniMolecularRxnFixValence_DEFAULT

OESubSearchScreenType_Unknown = _oechem.OESubSearchScreenType_Unknown

OESubSearchScreenType_Molecule = _oechem.OESubSearchScreenType_Molecule

OESubSearchScreenType_MDL = _oechem.OESubSearchScreenType_MDL

OESubSearchScreenType_SMARTS = _oechem.OESubSearchScreenType_SMARTS


OESubSearchScreenType_Default = OESubSearchScreenType_MDL

OESubSearchStatus_Uninitialized = _oechem.OESubSearchStatus_Uninitialized

OESubSearchStatus_InProgress = _oechem.OESubSearchStatus_InProgress

OESubSearchStatus_Finished = _oechem.OESubSearchStatus_Finished

OESubSearchStatus_Canceled = _oechem.OESubSearchStatus_Canceled

OESubSearchDatabaseType_InMemoryMultiThreaded = _oechem.OESubSearchDatabaseType_InMemoryMultiThreaded

OESubSearchDatabaseType_MolDatabaseMultiThreaded = _oechem.OESubSearchDatabaseType_MolDatabaseMultiThreaded


OESubSearchDatabaseType_Default = OESubSearchDatabaseType_InMemoryMultiThreaded

OEAtomStereo_Undefined = _oechem.OEAtomStereo_Undefined

OEAtomStereo_Right = _oechem.OEAtomStereo_Right

OEAtomStereo_RightHanded = _oechem.OEAtomStereo_RightHanded

OEAtomStereo_Left = _oechem.OEAtomStereo_Left

OEAtomStereo_LeftHanded = _oechem.OEAtomStereo_LeftHanded

OEAtomStereo_Tetra = _oechem.OEAtomStereo_Tetra

OEAtomStereo_Tetrahedral = _oechem.OEAtomStereo_Tetrahedral

OEAtomStereo_All = _oechem.OEAtomStereo_All

OEBondStereo_Undefined = _oechem.OEBondStereo_Undefined

OEBondStereo_Hash = _oechem.OEBondStereo_Hash

OEBondStereo_Wedge = _oechem.OEBondStereo_Wedge

OEBondStereo_Cis = _oechem.OEBondStereo_Cis

OEBondStereo_Trans = _oechem.OEBondStereo_Trans

OEBondStereo_Wavy = _oechem.OEBondStereo_Wavy

OEBondStereo_DoubleEither = _oechem.OEBondStereo_DoubleEither

OEBondStereo_CisTrans = _oechem.OEBondStereo_CisTrans

OEBondStereo_All = _oechem.OEBondStereo_All

OEAtomStyle_BEGIN = _oechem.OEAtomStyle_BEGIN

OEAtomStyle_BallAndStick = _oechem.OEAtomStyle_BallAndStick

OEAtomStyle_CPK = _oechem.OEAtomStyle_CPK

OEAtomStyle_Wireframe = _oechem.OEAtomStyle_Wireframe

OEAtomStyle_Stick = _oechem.OEAtomStyle_Stick

OEAtomStyle_Stars = _oechem.OEAtomStyle_Stars

OEAtomStyle_Hidden = _oechem.OEAtomStyle_Hidden

OEAtomStyle_END = _oechem.OEAtomStyle_END

OEBaseColorScheme_BEGIN = _oechem.OEBaseColorScheme_BEGIN

OEBaseColorScheme_Solid = _oechem.OEBaseColorScheme_Solid

OEBaseColorScheme_GenericData = _oechem.OEBaseColorScheme_GenericData

OEBaseColorScheme_END = _oechem.OEBaseColorScheme_END

OEAtomColorScheme_BEGIN = _oechem.OEAtomColorScheme_BEGIN

OEAtomColorScheme_Solid = _oechem.OEAtomColorScheme_Solid

OEAtomColorScheme_GenericData = _oechem.OEAtomColorScheme_GenericData

OEAtomColorScheme_Amino = _oechem.OEAtomColorScheme_Amino

OEAtomColorScheme_BFactor = _oechem.OEAtomColorScheme_BFactor

OEAtomColorScheme_Chain = _oechem.OEAtomColorScheme_Chain

OEAtomColorScheme_Element = _oechem.OEAtomColorScheme_Element

OEAtomColorScheme_FormalCharge = _oechem.OEAtomColorScheme_FormalCharge

OEAtomColorScheme_Occupancy = _oechem.OEAtomColorScheme_Occupancy

OEAtomColorScheme_PartialCharge = _oechem.OEAtomColorScheme_PartialCharge

OEAtomColorScheme_ProteinSequence = _oechem.OEAtomColorScheme_ProteinSequence

OEAtomColorScheme_Residue = _oechem.OEAtomColorScheme_Residue

OEAtomColorScheme_Shapely = _oechem.OEAtomColorScheme_Shapely

OEAtomColorScheme_AltLocation = _oechem.OEAtomColorScheme_AltLocation

OEAtomColorScheme_SecondaryStructure = _oechem.OEAtomColorScheme_SecondaryStructure

OEAtomColorScheme_ResidueHydrophobicity = _oechem.OEAtomColorScheme_ResidueHydrophobicity

OEAtomColorScheme_END = _oechem.OEAtomColorScheme_END

OEHydrogenVisibility_BEGIN = _oechem.OEHydrogenVisibility_BEGIN

OEHydrogenVisibility_Off = _oechem.OEHydrogenVisibility_Off

OEHydrogenVisibility_Polar = _oechem.OEHydrogenVisibility_Polar

OEHydrogenVisibility_All = _oechem.OEHydrogenVisibility_All

OEHydrogenVisibility_END = _oechem.OEHydrogenVisibility_END

OEInteractionStyle_BEGIN = _oechem.OEInteractionStyle_BEGIN

OEInteractionStyle_Off = _oechem.OEInteractionStyle_Off

OEInteractionStyle_IntermolecularHBonds = _oechem.OEInteractionStyle_IntermolecularHBonds

OEInteractionStyle_IntramolecularHBonds = _oechem.OEInteractionStyle_IntramolecularHBonds

OEInteractionStyle_UnsatisfiedHBonds = _oechem.OEInteractionStyle_UnsatisfiedHBonds

OEInteractionStyle_Bumps = _oechem.OEInteractionStyle_Bumps

OEInteractionStyle_END = _oechem.OEInteractionStyle_END

OEProteinStyle_BEGIN = _oechem.OEProteinStyle_BEGIN

OEProteinStyle_Off = _oechem.OEProteinStyle_Off

OEProteinStyle_Ribbons = _oechem.OEProteinStyle_Ribbons

OEProteinStyle_CAlpha = _oechem.OEProteinStyle_CAlpha

OEProteinStyle_Backbone = _oechem.OEProteinStyle_Backbone

OEProteinStyle_END = _oechem.OEProteinStyle_END

OESurfaceType_BEGIN = _oechem.OESurfaceType_BEGIN

OESurfaceType_Off = _oechem.OESurfaceType_Off

OESurfaceType_Molecular = _oechem.OESurfaceType_Molecular

OESurfaceType_Accessible = _oechem.OESurfaceType_Accessible

OESurfaceType_VDW = _oechem.OESurfaceType_VDW

OESurfaceType_END = _oechem.OESurfaceType_END

OESurfaceStyle_BEGIN = _oechem.OESurfaceStyle_BEGIN

OESurfaceStyle_Solid = _oechem.OESurfaceStyle_Solid

OESurfaceStyle_Mesh = _oechem.OESurfaceStyle_Mesh

OESurfaceStyle_Points = _oechem.OESurfaceStyle_Points

OESurfaceStyle_END = _oechem.OESurfaceStyle_END

OESurfaceColorScheme_Solid = _oechem.OESurfaceColorScheme_Solid

OESurfaceColorScheme_GenericData = _oechem.OESurfaceColorScheme_GenericData

OESurfaceColorScheme_BEGIN = _oechem.OESurfaceColorScheme_BEGIN

OESurfaceColorScheme_Concavity = _oechem.OESurfaceColorScheme_Concavity

OESurfaceColorScheme_Curvature = _oechem.OESurfaceColorScheme_Curvature

OESurfaceColorScheme_Distance = _oechem.OESurfaceColorScheme_Distance

OESurfaceColorScheme_Electrostatic = _oechem.OESurfaceColorScheme_Electrostatic

OESurfaceColorScheme_Grid = _oechem.OESurfaceColorScheme_Grid

OESurfaceColorScheme_HBondPotential = _oechem.OESurfaceColorScheme_HBondPotential

OESurfaceColorScheme_Hydrophobicity = _oechem.OESurfaceColorScheme_Hydrophobicity

OESurfaceColorScheme_SurfacePotential = _oechem.OESurfaceColorScheme_SurfacePotential

OESurfaceColorScheme_AtomColor = _oechem.OESurfaceColorScheme_AtomColor

OESurfaceColorScheme_END = _oechem.OESurfaceColorScheme_END

OEProteinColorScheme_BEGIN = _oechem.OEProteinColorScheme_BEGIN

OEProteinColorScheme_AtomColor = _oechem.OEProteinColorScheme_AtomColor

OEProteinColorScheme_END = _oechem.OEProteinColorScheme_END

OEStyleGridType_BEGIN = _oechem.OEStyleGridType_BEGIN

OEStyleGridType_Electrostatic = _oechem.OEStyleGridType_Electrostatic

OEStyleGridType_END = _oechem.OEStyleGridType_END

OEContourStyle_BEGIN = _oechem.OEContourStyle_BEGIN

OEContourStyle_Hidden = _oechem.OEContourStyle_Hidden

OEContourStyle_Solid = _oechem.OEContourStyle_Solid

OEContourStyle_Mesh = _oechem.OEContourStyle_Mesh

OEContourStyle_Cloud = _oechem.OEContourStyle_Cloud

OEContourStyle_END = _oechem.OEContourStyle_END

OEAtomLabelScheme_BEGIN = _oechem.OEAtomLabelScheme_BEGIN

OEAtomLabelScheme_Off = _oechem.OEAtomLabelScheme_Off

OEAtomLabelScheme_Index = _oechem.OEAtomLabelScheme_Index

OEAtomLabelScheme_Element = _oechem.OEAtomLabelScheme_Element

OEAtomLabelScheme_Isotope = _oechem.OEAtomLabelScheme_Isotope

OEAtomLabelScheme_Type = _oechem.OEAtomLabelScheme_Type

OEAtomLabelScheme_IntegerType = _oechem.OEAtomLabelScheme_IntegerType

OEAtomLabelScheme_MMFFType = _oechem.OEAtomLabelScheme_MMFFType

OEAtomLabelScheme_ImplicitHCount = _oechem.OEAtomLabelScheme_ImplicitHCount

OEAtomLabelScheme_MapIdx = _oechem.OEAtomLabelScheme_MapIdx

OEAtomLabelScheme_PartialCharge = _oechem.OEAtomLabelScheme_PartialCharge

OEAtomLabelScheme_FormalCharge = _oechem.OEAtomLabelScheme_FormalCharge

OEAtomLabelScheme_Radius = _oechem.OEAtomLabelScheme_Radius

OEAtomLabelScheme_ResidueInfo = _oechem.OEAtomLabelScheme_ResidueInfo

OEAtomLabelScheme_ResidueInfoCA = _oechem.OEAtomLabelScheme_ResidueInfoCA

OEAtomLabelScheme_AltLocation = _oechem.OEAtomLabelScheme_AltLocation

OEAtomLabelScheme_BFactor = _oechem.OEAtomLabelScheme_BFactor

OEAtomLabelScheme_Occupancy = _oechem.OEAtomLabelScheme_Occupancy

OEAtomLabelScheme_Degree = _oechem.OEAtomLabelScheme_Degree

OEAtomLabelScheme_IsChiral = _oechem.OEAtomLabelScheme_IsChiral

OEAtomLabelScheme_Chirality = _oechem.OEAtomLabelScheme_Chirality

OEAtomLabelScheme_Hybridization = _oechem.OEAtomLabelScheme_Hybridization

OEAtomLabelScheme_Symmetry = _oechem.OEAtomLabelScheme_Symmetry

OEAtomLabelScheme_HasStereoSpecified = _oechem.OEAtomLabelScheme_HasStereoSpecified

OEAtomLabelScheme_IsInRing = _oechem.OEAtomLabelScheme_IsInRing

OEAtomLabelScheme_OEChemIdx = _oechem.OEAtomLabelScheme_OEChemIdx

OEAtomLabelScheme_GenericData = _oechem.OEAtomLabelScheme_GenericData

OEAtomLabelScheme_User = _oechem.OEAtomLabelScheme_User

OEAtomLabelScheme_END = _oechem.OEAtomLabelScheme_END

OEColorerType_Integer = _oechem.OEColorerType_Integer

OEColorerType_Double = _oechem.OEColorerType_Double

OEColorerType_String = _oechem.OEColorerType_String

OEColorerType_All = _oechem.OEColorerType_All

OEExprFlag_Unspec = _oechem.OEExprFlag_Unspec

OEExprFlag_Unspecified = _oechem.OEExprFlag_Unspecified

OEExprFlag_Undefined = _oechem.OEExprFlag_Undefined

OEExprFlag_Up = _oechem.OEExprFlag_Up

OEExprFlag_Down = _oechem.OEExprFlag_Down

OEExprFlag_Cis = _oechem.OEExprFlag_Cis

OEExprFlag_Trans = _oechem.OEExprFlag_Trans

OEExprFlag_UpOrUnspec = _oechem.OEExprFlag_UpOrUnspec

OEExprFlag_DownOrUnspec = _oechem.OEExprFlag_DownOrUnspec

OEExprFlag_CisOrUnspec = _oechem.OEExprFlag_CisOrUnspec

OEExprFlag_TransOrUnspec = _oechem.OEExprFlag_TransOrUnspec

OEExprFlag_TetraLeft = _oechem.OEExprFlag_TetraLeft

OEExprFlag_TetraRight = _oechem.OEExprFlag_TetraRight

OEExprType_Undefined = _oechem.OEExprType_Undefined

OEExprType_And = _oechem.OEExprType_And

OEExprType_Or = _oechem.OEExprType_Or

OEExprType_Not = _oechem.OEExprType_Not

OEExprType_Const = _oechem.OEExprType_Const

OEExprType_Element = _oechem.OEExprType_Element

OEExprType_AromElem = _oechem.OEExprType_AromElem

OEExprType_Aromatic = _oechem.OEExprType_Aromatic

OEExprType_Mass = _oechem.OEExprType_Mass

OEExprType_HCount = _oechem.OEExprType_HCount

OEExprType_MinHCount = _oechem.OEExprType_MinHCount

OEExprType_Charge = _oechem.OEExprType_Charge

OEExprType_Connect = _oechem.OEExprType_Connect

OEExprType_Degree = _oechem.OEExprType_Degree

OEExprType_MinDegree = _oechem.OEExprType_MinDegree

OEExprType_Implicit = _oechem.OEExprType_Implicit

OEExprType_Ring = _oechem.OEExprType_Ring

OEExprType_Size = _oechem.OEExprType_Size

OEExprType_RingBondCount = _oechem.OEExprType_RingBondCount

OEExprType_Valence = _oechem.OEExprType_Valence

OEExprType_Hyb = _oechem.OEExprType_Hyb

OEExprType_Recurs = _oechem.OEExprType_Recurs

OEExprType_Chiral = _oechem.OEExprType_Chiral

OEExprType_Stereo = _oechem.OEExprType_Stereo

OEExprType_DefaultEdge = _oechem.OEExprType_DefaultEdge

OEExprType_BondOrder = _oechem.OEExprType_BondOrder

OEExprType_Metal = _oechem.OEExprType_Metal

OEExprType_Halogen = _oechem.OEExprType_Halogen

OEExprType_IntType = _oechem.OEExprType_IntType

OEExprType_StringType = _oechem.OEExprType_StringType

OEExprType_SymmetryClass = _oechem.OEExprType_SymmetryClass

OEExprType_Saturation = _oechem.OEExprType_Saturation

OEExprType_AllowedElements = _oechem.OEExprType_AllowedElements

OEExprType_TerminalAtom = _oechem.OEExprType_TerminalAtom

OEExprType_SingleAromBond = _oechem.OEExprType_SingleAromBond

OEExprType_DoubleAromBond = _oechem.OEExprType_DoubleAromBond

OEExprType_RingElem = _oechem.OEExprType_RingElem

OEExprType_AromRingElem = _oechem.OEExprType_AromRingElem

OEExprType_ElemMinHCount = _oechem.OEExprType_ElemMinHCount

OEExprType_ElemCharge = _oechem.OEExprType_ElemCharge

OEExprType_ElemMinDegree = _oechem.OEExprType_ElemMinDegree

OEExprType_AromElemMinDegree = _oechem.OEExprType_AromElemMinDegree

OEExprType_RingBondOrder = _oechem.OEExprType_RingBondOrder

OEExprType_AromBondOrder = _oechem.OEExprType_AromBondOrder

OEExprType_AromOrBondOrder = _oechem.OEExprType_AromOrBondOrder

OEExprType_RingDefaultEdge = _oechem.OEExprType_RingDefaultEdge

OEExprType_AromRingBondOrder = _oechem.OEExprType_AromRingBondOrder

OEExprType_HCountChange = _oechem.OEExprType_HCountChange

OEExprType_FormalChargeChange = _oechem.OEExprType_FormalChargeChange

OEExprType_AtomParityChange = _oechem.OEExprType_AtomParityChange

OEExprType_BondParityChange = _oechem.OEExprType_BondParityChange

OEExprOpts_Mass = _oechem.OEExprOpts_Mass

OEExprOpts_HCount = _oechem.OEExprOpts_HCount

OEExprOpts_ImplicitHCount = _oechem.OEExprOpts_ImplicitHCount

OEExprOpts_FormalCharge = _oechem.OEExprOpts_FormalCharge

OEExprOpts_StrictFormalCharge = _oechem.OEExprOpts_StrictFormalCharge

OEExprOpts_Degree = _oechem.OEExprOpts_Degree

OEExprOpts_ExplicitDegree = _oechem.OEExprOpts_ExplicitDegree

OEExprOpts_HvyDegree = _oechem.OEExprOpts_HvyDegree

OEExprOpts_Valence = _oechem.OEExprOpts_Valence

OEExprOpts_Hybridization = _oechem.OEExprOpts_Hybridization

OEExprOpts_AtomicNumber = _oechem.OEExprOpts_AtomicNumber

OEExprOpts_EqMetal = _oechem.OEExprOpts_EqMetal

OEExprOpts_EqHalogen = _oechem.OEExprOpts_EqHalogen

OEExprOpts_EqON = _oechem.OEExprOpts_EqON

OEExprOpts_EqONS = _oechem.OEExprOpts_EqONS

OEExprOpts_EqPS = _oechem.OEExprOpts_EqPS

OEExprOpts_EqAromatic = _oechem.OEExprOpts_EqAromatic

OEExprOpts_EqCHalogen = _oechem.OEExprOpts_EqCHalogen

OEExprOpts_EqCAliphaticONS = _oechem.OEExprOpts_EqCAliphaticONS

OEExprOpts_EqCPSAcidRoot = _oechem.OEExprOpts_EqCPSAcidRoot

OEExprOpts_EqKetoneSulfoneRoot = _oechem.OEExprOpts_EqKetoneSulfoneRoot

OEExprOpts_BondOrder = _oechem.OEExprOpts_BondOrder

OEExprOpts_EqSingleDouble = _oechem.OEExprOpts_EqSingleDouble

OEExprOpts_EqDoubleTriple = _oechem.OEExprOpts_EqDoubleTriple

OEExprOpts_EqNotAromatic = _oechem.OEExprOpts_EqNotAromatic

OEExprOpts_Aromaticity = _oechem.OEExprOpts_Aromaticity

OEExprOpts_RingMember = _oechem.OEExprOpts_RingMember

OEExprOpts_Chiral = _oechem.OEExprOpts_Chiral

OEExprOpts_IntType = _oechem.OEExprOpts_IntType

OEExprOpts_StringType = _oechem.OEExprOpts_StringType

OEExprOpts_SymmetryClass = _oechem.OEExprOpts_SymmetryClass


OEExprOpts_DefaultAtoms = OEExprOpts_AtomicNumber|OEExprOpts_Aromaticity|OEExprOpts_FormalCharge


OEExprOpts_DefaultBonds = OEExprOpts_BondOrder|OEExprOpts_Aromaticity


OEExprOpts_ExactAtoms = OEExprOpts_AtomicNumber|OEExprOpts_Aromaticity|OEExprOpts_StrictFormalCharge|OEExprOpts_Degree|OEExprOpts_HCount|OEExprOpts_Chiral|OEExprOpts_Mass|OEExprOpts_RingMember


OEExprOpts_ExactBonds = OEExprOpts_BondOrder|OEExprOpts_Aromaticity|OEExprOpts_RingMember|OEExprOpts_Chiral


OEExprOpts_AutomorphAtoms = OEExprOpts_AtomicNumber|OEExprOpts_Aromaticity|OEExprOpts_RingMember|OEExprOpts_HvyDegree


OEExprOpts_AutomorphBonds = OEExprOpts_Aromaticity

OERadiiType_Default = _oechem.OERadiiType_Default

OERadiiType_None = _oechem.OERadiiType_None

OERadiiType_Covalent = _oechem.OERadiiType_Covalent

OERadiiType_Delphi = _oechem.OERadiiType_Delphi

OERadiiType_Delphi_Robust = _oechem.OERadiiType_Delphi_Robust

OERadiiType_BondiVdw = _oechem.OERadiiType_BondiVdw

OERadiiType_BondiHVdw = _oechem.OERadiiType_BondiHVdw

OERadiiType_PaulingVdw = _oechem.OERadiiType_PaulingVdw

OERadiiType_PaulingVdw_Robust = _oechem.OERadiiType_PaulingVdw_Robust

OERadiiType_HonigIonicCavity = _oechem.OERadiiType_HonigIonicCavity

OERadiiType_HonigIonicCavity_Robust = _oechem.OERadiiType_HonigIonicCavity_Robust

OERadiiType_Zap9_JMC2008 = _oechem.OERadiiType_Zap9_JMC2008

OERadiiType_Zap9_JCAMD2010 = _oechem.OERadiiType_Zap9_JCAMD2010


OERadiiType_Zap9 = OERadiiType_Zap9_JCAMD2010

OERadiiType_Zap7_CarbonylOxygen = _oechem.OERadiiType_Zap7_CarbonylOxygen

OERadiiType_Zap7_DoublyBondedOxygen = _oechem.OERadiiType_Zap7_DoublyBondedOxygen


OERadiiType_Zap7 = OERadiiType_Zap7_CarbonylOxygen

OERadiiType_Max = _oechem.OERadiiType_Max

OESecondaryStructure_Unassigned = _oechem.OESecondaryStructure_Unassigned

OESecondaryStructure_Helix = _oechem.OESecondaryStructure_Helix

OESecondaryStructure_Helix310 = _oechem.OESecondaryStructure_Helix310

OESecondaryStructure_HelixAlpha = _oechem.OESecondaryStructure_HelixAlpha

OESecondaryStructure_HelixPi = _oechem.OESecondaryStructure_HelixPi

OESecondaryStructure_Turn = _oechem.OESecondaryStructure_Turn

OESecondaryStructure_Turn3 = _oechem.OESecondaryStructure_Turn3

OESecondaryStructure_Turn4 = _oechem.OESecondaryStructure_Turn4

OESecondaryStructure_Turn5 = _oechem.OESecondaryStructure_Turn5

OESecondaryStructure_Sheet = _oechem.OESecondaryStructure_Sheet

OESecondaryStructure_StrandSense = _oechem.OESecondaryStructure_StrandSense

OESecondaryStructure_HelixLeft = _oechem.OESecondaryStructure_HelixLeft

OESecondaryStructure_SheetMask = _oechem.OESecondaryStructure_SheetMask

OESecondaryStructure_Any = _oechem.OESecondaryStructure_Any

OEFileStringType_Mol = _oechem.OEFileStringType_Mol

OEFileStringType_Mol3D = _oechem.OEFileStringType_Mol3D

OEFileStringType_MolReceptor = _oechem.OEFileStringType_MolReceptor

OEFileStringType_DU = _oechem.OEFileStringType_DU

OEFileStringType_MAX = _oechem.OEFileStringType_MAX

OEFileStringTypeFlavor_Generic_FileList = _oechem.OEFileStringTypeFlavor_Generic_FileList

OEFileStringTypeFlavor_Generic_Input = _oechem.OEFileStringTypeFlavor_Generic_Input

OEFileStringTypeFlavor_Generic_Output = _oechem.OEFileStringTypeFlavor_Generic_Output

OEFileStringTypeFlavor_Generic_MolOnly = _oechem.OEFileStringTypeFlavor_Generic_MolOnly

OEFileStringTypeFlavor_Generic_RxnOnly = _oechem.OEFileStringTypeFlavor_Generic_RxnOnly

OEFileStringTypeFlavor_Generic_Dim3D = _oechem.OEFileStringTypeFlavor_Generic_Dim3D

OEFileStringTypeFlavor_Generic_Dim2D = _oechem.OEFileStringTypeFlavor_Generic_Dim2D

OEFileStringTypeFlavor_Generic_Dim0D = _oechem.OEFileStringTypeFlavor_Generic_Dim0D

OEFileStringTypeFlavor_Generic_Dim2D3D = _oechem.OEFileStringTypeFlavor_Generic_Dim2D3D

OEFileStringTypeFlavor_Generic_Dim0D2D = _oechem.OEFileStringTypeFlavor_Generic_Dim0D2D

OEFileStringTypeFlavor_Generic_DEFAULT = _oechem.OEFileStringTypeFlavor_Generic_DEFAULT


OEFileStringTypeFlavor_Generic_Default = OEFileStringTypeFlavor_Generic_DEFAULT

OEFileStringTypeFlavor_Generic_NoListDefault = _oechem.OEFileStringTypeFlavor_Generic_NoListDefault

OEFileStringTypeFlavor_Generic_InputDefault = _oechem.OEFileStringTypeFlavor_Generic_InputDefault

OEFileStringTypeFlavor_Generic_OutputDefault = _oechem.OEFileStringTypeFlavor_Generic_OutputDefault

OEUncolorStrategy_UncolorNone = _oechem.OEUncolorStrategy_UncolorNone

OEUncolorStrategy_ConvertAtomTypeToC = _oechem.OEUncolorStrategy_ConvertAtomTypeToC

OEUncolorStrategy_ConvertBondTypeToSingle = _oechem.OEUncolorStrategy_ConvertBondTypeToSingle

OEUncolorStrategy_RemoveAtomStereo = _oechem.OEUncolorStrategy_RemoveAtomStereo

OEUncolorStrategy_RemoveBondStereo = _oechem.OEUncolorStrategy_RemoveBondStereo

OEUncolorStrategy_RemoveAtomProperties = _oechem.OEUncolorStrategy_RemoveAtomProperties

OEUncolorStrategy_RemoveGroupStereo = _oechem.OEUncolorStrategy_RemoveGroupStereo

OEUncolorStrategy_RemoveDimension = _oechem.OEUncolorStrategy_RemoveDimension


OEUncolorStrategy_BemisMurcko = OEUncolorStrategy_ConvertAtomTypeToC|OEUncolorStrategy_RemoveAtomProperties|OEUncolorStrategy_RemoveAtomStereo|OEUncolorStrategy_ConvertBondTypeToSingle|OEUncolorStrategy_RemoveBondStereo

OEUncolorStrategy_UncolorMask = _oechem.OEUncolorStrategy_UncolorMask


OEUncolorStrategy_DEFAULT = OEUncolorStrategy_BemisMurcko|OEUncolorStrategy_RemoveDimension


OEUncolorStrategy_Default = OEUncolorStrategy_DEFAULT

OEOptsConfigureStatus_Success = _oechem.OEOptsConfigureStatus_Success

OEOptsConfigureStatus_Help = _oechem.OEOptsConfigureStatus_Help

OEOptsConfigureStatus_Failed = _oechem.OEOptsConfigureStatus_Failed

OESMARTSAtomFlag_AtomType = _oechem.OESMARTSAtomFlag_AtomType

OESMARTSAtomFlag_IgnoreArom = _oechem.OESMARTSAtomFlag_IgnoreArom

OESMARTSAtomFlag_AnyAtomType = _oechem.OESMARTSAtomFlag_AnyAtomType

OESMARTSAtomFlag_DegreeCount = _oechem.OESMARTSAtomFlag_DegreeCount

OESMARTSAtomFlag_HCount = _oechem.OESMARTSAtomFlag_HCount

OESMARTSAtomFlag_HCount0 = _oechem.OESMARTSAtomFlag_HCount0

OESMARTSAtomFlag_Charge = _oechem.OESMARTSAtomFlag_Charge

OESMARTSAtomFlag_Charge0 = _oechem.OESMARTSAtomFlag_Charge0

OESMARTSAtomFlag_RingBondCount = _oechem.OESMARTSAtomFlag_RingBondCount

OESMARTSAtomFlag_Valence = _oechem.OESMARTSAtomFlag_Valence

OESMARTSAtomFlag_Connectivity = _oechem.OESMARTSAtomFlag_Connectivity

OESMARTSAtomFlag_AAmap = _oechem.OESMARTSAtomFlag_AAmap

OESMARTSAtomFlag_LeavingGroup = _oechem.OESMARTSAtomFlag_LeavingGroup

OESMARTSAtomFlag_Isotope = _oechem.OESMARTSAtomFlag_Isotope

OESMARTSAtomFlag_Chirality = _oechem.OESMARTSAtomFlag_Chirality

OESMARTSAtomFlag_Hybridization = _oechem.OESMARTSAtomFlag_Hybridization

OESMARTSAtomFlag_ImplicitHCount = _oechem.OESMARTSAtomFlag_ImplicitHCount

OESMARTSAtomFlag_ImplicitHCount0 = _oechem.OESMARTSAtomFlag_ImplicitHCount0

OESMARTSAtomFlag_DEFAULT = _oechem.OESMARTSAtomFlag_DEFAULT


OESMARTSAtomFlag_AtomDefault = OESMARTSAtomFlag_DEFAULT


OESMARTSAtomFlag_AtomExact = OESMARTSAtomFlag_AtomType|OESMARTSAtomFlag_Isotope|OESMARTSAtomFlag_RingBondCount|OESMARTSAtomFlag_Valence|OESMARTSAtomFlag_HCount0|OESMARTSAtomFlag_Connectivity|OESMARTSAtomFlag_Charge0


OESMARTSAtomFlag_AtomAll = OESMARTSAtomFlag_AtomType|OESMARTSAtomFlag_IgnoreArom|OESMARTSAtomFlag_AnyAtomType|OESMARTSAtomFlag_DegreeCount|OESMARTSAtomFlag_HCount|OESMARTSAtomFlag_HCount0|OESMARTSAtomFlag_Charge|OESMARTSAtomFlag_Charge0|OESMARTSAtomFlag_RingBondCount|OESMARTSAtomFlag_Valence|OESMARTSAtomFlag_Connectivity|OESMARTSAtomFlag_AAmap|OESMARTSAtomFlag_LeavingGroup|OESMARTSAtomFlag_Isotope|OESMARTSAtomFlag_Chirality|OESMARTSAtomFlag_Hybridization|OESMARTSAtomFlag_ImplicitHCount|OESMARTSAtomFlag_ImplicitHCount0

OESMARTSBondFlag_BondType = _oechem.OESMARTSBondFlag_BondType

OESMARTSBondFlag_AromBondType = _oechem.OESMARTSBondFlag_AromBondType

OESMARTSBondFlag_AnyBondType = _oechem.OESMARTSBondFlag_AnyBondType

OESMARTSBondFlag_BondTopo = _oechem.OESMARTSBondFlag_BondTopo

OESMARTSBondFlag_Chirality = _oechem.OESMARTSBondFlag_Chirality

OESMARTSBondFlag_DEFAULT = _oechem.OESMARTSBondFlag_DEFAULT


OESMARTSBondFlag_BondDefault = OESMARTSBondFlag_DEFAULT


OESMARTSBondFlag_BondExact = OESMARTSBondFlag_BondType|OESMARTSBondFlag_AromBondType|OESMARTSBondFlag_BondTopo


OESMARTSBondFlag_BondAll = OESMARTSBondFlag_BondType|OESMARTSBondFlag_AromBondType|OESMARTSBondFlag_AnyBondType|OESMARTSBondFlag_BondTopo|OESMARTSBondFlag_Chirality


OEAssumption_None = 0


OEAssumption_PDBOrder = 1


OEAssumption_BondedResidue = 2


OEAssumption_ResPerceived = 4


OEAssumption_Default = 15

OEProtTorType_Unknown = _oechem.OEProtTorType_Unknown

OEProtTorType_Phi = _oechem.OEProtTorType_Phi

OEProtTorType_Psi = _oechem.OEProtTorType_Psi

OEProtTorType_Omega = _oechem.OEProtTorType_Omega

OEProtTorType_Chi1 = _oechem.OEProtTorType_Chi1

OEProtTorType_Chi2 = _oechem.OEProtTorType_Chi2

OEProtTorType_Chi3 = _oechem.OEProtTorType_Chi3

OEProtTorType_Chi4 = _oechem.OEProtTorType_Chi4

OEProtTorType_Chi5 = _oechem.OEProtTorType_Chi5

OEProtTorType_Max = _oechem.OEProtTorType_Max

OERotamerLibrary_Dunbrack = _oechem.OERotamerLibrary_Dunbrack

OERotamerLibrary_Richardson = _oechem.OERotamerLibrary_Richardson

OERotamerLibrary_Richardson2016 = _oechem.OERotamerLibrary_Richardson2016

OERotamerLibrary_Default = _oechem.OERotamerLibrary_Default

OESeqAlignmentMethod_None = _oechem.OESeqAlignmentMethod_None

OESeqAlignmentMethod_Identity = _oechem.OESeqAlignmentMethod_Identity

OESeqAlignmentMethod_PAM250 = _oechem.OESeqAlignmentMethod_PAM250

OESeqAlignmentMethod_BLOSUM62 = _oechem.OESeqAlignmentMethod_BLOSUM62

OESeqAlignmentMethod_GONNET = _oechem.OESeqAlignmentMethod_GONNET

OEHBondInteractionHintType_LigandAccepts = _oechem.OEHBondInteractionHintType_LigandAccepts

OEHBondInteractionHintType_LigandDonates = _oechem.OEHBondInteractionHintType_LigandDonates


OEHBondInteractionHintType_ProteinDonates = OEHBondInteractionHintType_LigandAccepts


OEHBondInteractionHintType_ProteinAccepts = OEHBondInteractionHintType_LigandDonates

OEHBondInteractionHintType_IntramolecularLigand = _oechem.OEHBondInteractionHintType_IntramolecularLigand

OEHBondInteractionHintType_IntramolecularProtein = _oechem.OEHBondInteractionHintType_IntramolecularProtein

OEHBondInteractionHintType_NonIdealIntramolecularLigand = _oechem.OEHBondInteractionHintType_NonIdealIntramolecularLigand

OEHBondInteractionHintType_NonIdealIntramolecularProtein = _oechem.OEHBondInteractionHintType_NonIdealIntramolecularProtein

OEHBondInteractionHintType_NonIdealLigandAccepts = _oechem.OEHBondInteractionHintType_NonIdealLigandAccepts

OEHBondInteractionHintType_NonIdealLigandDonates = _oechem.OEHBondInteractionHintType_NonIdealLigandDonates


OEHBondInteractionHintType_NonIdealProteinDonates = OEHBondInteractionHintType_NonIdealLigandAccepts


OEHBondInteractionHintType_NonIdealProteinAccepts = OEHBondInteractionHintType_NonIdealLigandDonates

OEHBondInteractionHintType_UnpairedLigandDonor = _oechem.OEHBondInteractionHintType_UnpairedLigandDonor

OEHBondInteractionHintType_UnpairedLigandAcceptor = _oechem.OEHBondInteractionHintType_UnpairedLigandAcceptor

OEHBondInteractionHintType_UnpairedProteinDonor = _oechem.OEHBondInteractionHintType_UnpairedProteinDonor

OEHBondInteractionHintType_UnpairedProteinAcceptor = _oechem.OEHBondInteractionHintType_UnpairedProteinAcceptor

OEHBondInteractionHintType_ClashAcceptorAcceptor = _oechem.OEHBondInteractionHintType_ClashAcceptorAcceptor

OEHBondInteractionHintType_ClashDonorDonor = _oechem.OEHBondInteractionHintType_ClashDonorDonor

OEHBondInteractionHintType_Clash = _oechem.OEHBondInteractionHintType_Clash

OEChelatorInteractionHintType_LigandChelates = _oechem.OEChelatorInteractionHintType_LigandChelates

OEChelatorInteractionHintType_ProteinChelates = _oechem.OEChelatorInteractionHintType_ProteinChelates

OEChelatorInteractionHintType_IntramolecularLigand = _oechem.OEChelatorInteractionHintType_IntramolecularLigand

OEChelatorInteractionHintType_IntramolecularProtein = _oechem.OEChelatorInteractionHintType_IntramolecularProtein

OESaltBridgeInteractionHintType_LigandNegative = _oechem.OESaltBridgeInteractionHintType_LigandNegative

OESaltBridgeInteractionHintType_LigandPositive = _oechem.OESaltBridgeInteractionHintType_LigandPositive


OESaltBridgeInteractionHintType_ProteinNegative = OESaltBridgeInteractionHintType_LigandPositive


OESaltBridgeInteractionHintType_ProteinPositive = OESaltBridgeInteractionHintType_LigandNegative

OESaltBridgeInteractionHintType_Clash = _oechem.OESaltBridgeInteractionHintType_Clash

OESaltBridgeInteractionHintType_IntramolecularLigand = _oechem.OESaltBridgeInteractionHintType_IntramolecularLigand

OESaltBridgeInteractionHintType_IntramolecularProtein = _oechem.OESaltBridgeInteractionHintType_IntramolecularProtein

OESaltBridgeInteractionHintType_UnpairedLigandPositive = _oechem.OESaltBridgeInteractionHintType_UnpairedLigandPositive

OESaltBridgeInteractionHintType_UnpairedLigandNegative = _oechem.OESaltBridgeInteractionHintType_UnpairedLigandNegative

OESaltBridgeInteractionHintType_UnpairedProteinPositive = _oechem.OESaltBridgeInteractionHintType_UnpairedProteinPositive

OESaltBridgeInteractionHintType_UnpairedProteinNegative = _oechem.OESaltBridgeInteractionHintType_UnpairedProteinNegative

OESaltBridgeInteractionHintType_UnpairedLigand = _oechem.OESaltBridgeInteractionHintType_UnpairedLigand

OESaltBridgeInteractionHintType_UnpairedProtein = _oechem.OESaltBridgeInteractionHintType_UnpairedProtein

OEStackingInteractionHintType_Pi = _oechem.OEStackingInteractionHintType_Pi

OEStackingInteractionHintType_T = _oechem.OEStackingInteractionHintType_T

OECationPiInteractionHintType_LigandPi = _oechem.OECationPiInteractionHintType_LigandPi

OECationPiInteractionHintType_ProteinPi = _oechem.OECationPiInteractionHintType_ProteinPi


OECationPiInteractionHintType_LigandCation = OECationPiInteractionHintType_ProteinPi


OECationPiInteractionHintType_ProteinCation = OECationPiInteractionHintType_LigandPi

OEHalogenBondInteractionHintType_LigandElectrophile = _oechem.OEHalogenBondInteractionHintType_LigandElectrophile

OEHalogenBondInteractionHintType_LigandNucleophile = _oechem.OEHalogenBondInteractionHintType_LigandNucleophile

OEHalogenBondInteractionHintType_ProteinElectrophile = _oechem.OEHalogenBondInteractionHintType_ProteinElectrophile

OEHalogenBondInteractionHintType_ProteinNucleophile = _oechem.OEHalogenBondInteractionHintType_ProteinNucleophile

OEHalogenBondInteractionHintType_IntramolecularLigand = _oechem.OEHalogenBondInteractionHintType_IntramolecularLigand

OEHalogenBondInteractionHintType_IntramolecularProtein = _oechem.OEHalogenBondInteractionHintType_IntramolecularProtein

OEResidueDatabaseCategory_Ligand = _oechem.OEResidueDatabaseCategory_Ligand

OEResidueDatabaseCategory_Cofactor = _oechem.OEResidueDatabaseCategory_Cofactor

OEResidueDatabaseCategory_CofactorAndLigand = _oechem.OEResidueDatabaseCategory_CofactorAndLigand

OEResidueDatabaseCategory_AminoAcid = _oechem.OEResidueDatabaseCategory_AminoAcid

OEResidueDatabaseCategory_NucleicAcid = _oechem.OEResidueDatabaseCategory_NucleicAcid

OEResidueDatabaseCategory_Saccharide = _oechem.OEResidueDatabaseCategory_Saccharide

OEResidueDatabaseCategory_Metal = _oechem.OEResidueDatabaseCategory_Metal

OEResidueDatabaseCategory_Misc = _oechem.OEResidueDatabaseCategory_Misc

OEResidueDatabaseCategory_Polymer = _oechem.OEResidueDatabaseCategory_Polymer

OEResidueDatabaseCategory_Lipid = _oechem.OEResidueDatabaseCategory_Lipid

OEResidueDatabaseCategory_Max = _oechem.OEResidueDatabaseCategory_Max

OEMolComplexFilterCategory_Unknown = _oechem.OEMolComplexFilterCategory_Unknown

OEMolComplexFilterCategory_Protein = _oechem.OEMolComplexFilterCategory_Protein

OEMolComplexFilterCategory_Ligand = _oechem.OEMolComplexFilterCategory_Ligand

OEMolComplexFilterCategory_Water = _oechem.OEMolComplexFilterCategory_Water

OEMolComplexFilterCategory_Saccharide = _oechem.OEMolComplexFilterCategory_Saccharide

OEMolComplexFilterCategory_Cofactor = _oechem.OEMolComplexFilterCategory_Cofactor

OEMolComplexFilterCategory_CofactorAndLigand = _oechem.OEMolComplexFilterCategory_CofactorAndLigand

OEMolComplexFilterCategory_Metal = _oechem.OEMolComplexFilterCategory_Metal

OEMolComplexFilterCategory_CounterIon = _oechem.OEMolComplexFilterCategory_CounterIon

OEMolComplexFilterCategory_ProtComplex = _oechem.OEMolComplexFilterCategory_ProtComplex

OEMolComplexFilterCategory_Peptide = _oechem.OEMolComplexFilterCategory_Peptide

OEMolComplexFilterCategory_DNA_RNA = _oechem.OEMolComplexFilterCategory_DNA_RNA

OEMolComplexFilterCategory_Nucleotide = _oechem.OEMolComplexFilterCategory_Nucleotide

OEMolComplexFilterCategory_Covalent = _oechem.OEMolComplexFilterCategory_Covalent

OEMolComplexFilterCategory_Solution = _oechem.OEMolComplexFilterCategory_Solution

OEMolComplexFilterCategory_Misc = _oechem.OEMolComplexFilterCategory_Misc

OEMolComplexFilterCategory_Underdefined = _oechem.OEMolComplexFilterCategory_Underdefined

OEMolComplexFilterCategory_Site1 = _oechem.OEMolComplexFilterCategory_Site1

OEMolComplexFilterCategory_SurfaceWaters1 = _oechem.OEMolComplexFilterCategory_SurfaceWaters1

OEMolComplexFilterCategory_Model1 = _oechem.OEMolComplexFilterCategory_Model1

OEMolComplexFilterCategory_ChainA = _oechem.OEMolComplexFilterCategory_ChainA

OEMolComplexFilterCategory_Anything = _oechem.OEMolComplexFilterCategory_Anything

OEMolComplexFilterCategory_Nothing = _oechem.OEMolComplexFilterCategory_Nothing

OEMolComplexFilterCategory_Lipid = _oechem.OEMolComplexFilterCategory_Lipid

OESplitMolComplexSetup_LigName = _oechem.OESplitMolComplexSetup_LigName

OESplitMolComplexSetup_SiteNum = _oechem.OESplitMolComplexSetup_SiteNum

OESplitMolComplexSetup_SurfWat = _oechem.OESplitMolComplexSetup_SurfWat

OESplitMolComplexSetup_CovLig = _oechem.OESplitMolComplexSetup_CovLig

OESplitMolComplexSetup_CovCofactor = _oechem.OESplitMolComplexSetup_CovCofactor

OESplitMolComplexSetup_SeparateRes = _oechem.OESplitMolComplexSetup_SeparateRes

OESplitMolComplexSetup_MaxSiteDist = _oechem.OESplitMolComplexSetup_MaxSiteDist

OESplitMolComplexSetup_MaxSurfDist = _oechem.OESplitMolComplexSetup_MaxSurfDist

OESplitMolComplexSetup_CovBondTreatment = _oechem.OESplitMolComplexSetup_CovBondTreatment

OESplitMolComplexSetup_ModelNum = _oechem.OESplitMolComplexSetup_ModelNum

OESplitMolComplexSetup_LigFilter = _oechem.OESplitMolComplexSetup_LigFilter

OESplitMolComplexSetup_ProtFilter = _oechem.OESplitMolComplexSetup_ProtFilter

OESplitMolComplexSetup_WatFilter = _oechem.OESplitMolComplexSetup_WatFilter

OESplitMolComplexSetup_All = _oechem.OESplitMolComplexSetup_All

OESplitMolComplexParam_DoNotOverride = _oechem.OESplitMolComplexParam_DoNotOverride

OEMolComplexData_SDTagPrefix = _oechem.OEMolComplexData_SDTagPrefix

OEMolComplexData_CovalentSDTag = _oechem.OEMolComplexData_CovalentSDTag


OEMolComplexData_CovalentLigandSDTag = OEMolComplexData_CovalentSDTag

OEMolComplexData_PartOrderSDTag = _oechem.OEMolComplexData_PartOrderSDTag

OEMolComplexData_SiteNumberSDTag = _oechem.OEMolComplexData_SiteNumberSDTag

OEMolComplexData_SurfaceWatersNumberSDTag = _oechem.OEMolComplexData_SurfaceWatersNumberSDTag

OEPlaceHydrogensMoverClass_Background = _oechem.OEPlaceHydrogensMoverClass_Background

OEPlaceHydrogensMoverClass_DH = _oechem.OEPlaceHydrogensMoverClass_DH

OEPlaceHydrogensMoverClass_NH3 = _oechem.OEPlaceHydrogensMoverClass_NH3

OEPlaceHydrogensMoverClass_NH2 = _oechem.OEPlaceHydrogensMoverClass_NH2

OEPlaceHydrogensMoverClass_analinicNH2 = _oechem.OEPlaceHydrogensMoverClass_analinicNH2

OEPlaceHydrogensMoverClass_NHsp2Only = _oechem.OEPlaceHydrogensMoverClass_NHsp2Only

OEPlaceHydrogensMoverClass_NHsp3Only = _oechem.OEPlaceHydrogensMoverClass_NHsp3Only

OEPlaceHydrogensMoverClass_NHsp2sp3 = _oechem.OEPlaceHydrogensMoverClass_NHsp2sp3

OEPlaceHydrogensMoverClass_N = _oechem.OEPlaceHydrogensMoverClass_N

OEPlaceHydrogensMoverClass_AroN = _oechem.OEPlaceHydrogensMoverClass_AroN

OEPlaceHydrogensMoverClass_SCH3 = _oechem.OEPlaceHydrogensMoverClass_SCH3

OEPlaceHydrogensMoverClass_AroCH3 = _oechem.OEPlaceHydrogensMoverClass_AroCH3

OEPlaceHydrogensMoverClass_Imidazole = _oechem.OEPlaceHydrogensMoverClass_Imidazole

OEPlaceHydrogensMoverClass_AmideNO = _oechem.OEPlaceHydrogensMoverClass_AmideNO

OEPlaceHydrogensMoverClass_COOH = _oechem.OEPlaceHydrogensMoverClass_COOH

OEPlaceHydrogensMoverClass_AspDyad = _oechem.OEPlaceHydrogensMoverClass_AspDyad

OEPlaceHydrogensMoverClass_Water = _oechem.OEPlaceHydrogensMoverClass_Water

OEPlaceHydrogensMoverClass_Max = _oechem.OEPlaceHydrogensMoverClass_Max

OEPlaceHydrogensWaterProcessing_Ignore = _oechem.OEPlaceHydrogensWaterProcessing_Ignore

OEPlaceHydrogensWaterProcessing_Focused = _oechem.OEPlaceHydrogensWaterProcessing_Focused

OEPlaceHydrogensWaterProcessing_FullSearch = _oechem.OEPlaceHydrogensWaterProcessing_FullSearch


OEPlaceHydrogensWaterProcessing_Default = OEPlaceHydrogensWaterProcessing_FullSearch

OERamaCategory_Unknown = _oechem.OERamaCategory_Unknown

OERamaCategory_Favored = _oechem.OERamaCategory_Favored

OERamaCategory_Allowed = _oechem.OERamaCategory_Allowed

OERamaCategory_Outlier = _oechem.OERamaCategory_Outlier

OERamaCategory_Max = _oechem.OERamaCategory_Max

OERamaType_Unknown = _oechem.OERamaType_Unknown

OERamaType_General = _oechem.OERamaType_General

OERamaType_Glycine = _oechem.OERamaType_Glycine

OERamaType_CisPro = _oechem.OERamaType_CisPro

OERamaType_TransPro = _oechem.OERamaType_TransPro

OERamaType_PrePro = _oechem.OERamaType_PrePro

OERamaType_IleVal = _oechem.OERamaType_IleVal

OERamaType_Max = _oechem.OERamaType_Max

OEDesignUnitComponents_Unknown = _oechem.OEDesignUnitComponents_Unknown

OEDesignUnitComponents_Protein = _oechem.OEDesignUnitComponents_Protein

OEDesignUnitComponents_Nucleic = _oechem.OEDesignUnitComponents_Nucleic

OEDesignUnitComponents_Ligand = _oechem.OEDesignUnitComponents_Ligand

OEDesignUnitComponents_Cofactors = _oechem.OEDesignUnitComponents_Cofactors

OEDesignUnitComponents_Solvent = _oechem.OEDesignUnitComponents_Solvent

OEDesignUnitComponents_Metals = _oechem.OEDesignUnitComponents_Metals

OEDesignUnitComponents_CounterIons = _oechem.OEDesignUnitComponents_CounterIons

OEDesignUnitComponents_Lipids = _oechem.OEDesignUnitComponents_Lipids

OEDesignUnitComponents_PackingResidues = _oechem.OEDesignUnitComponents_PackingResidues

OEDesignUnitComponents_Excipients = _oechem.OEDesignUnitComponents_Excipients

OEDesignUnitComponents_Sugars = _oechem.OEDesignUnitComponents_Sugars

OEDesignUnitComponents_Polymers = _oechem.OEDesignUnitComponents_Polymers

OEDesignUnitComponents_PostTranslational = _oechem.OEDesignUnitComponents_PostTranslational

OEDesignUnitComponents_OtherProteins = _oechem.OEDesignUnitComponents_OtherProteins

OEDesignUnitComponents_OtherNucleics = _oechem.OEDesignUnitComponents_OtherNucleics

OEDesignUnitComponents_OtherLigands = _oechem.OEDesignUnitComponents_OtherLigands

OEDesignUnitComponents_OtherCofactors = _oechem.OEDesignUnitComponents_OtherCofactors


OEDesignUnitComponents_OEMax = OEDesignUnitComponents_OtherCofactors

OEDesignUnitComponents_OEAll = _oechem.OEDesignUnitComponents_OEAll

OEDesignUnitComponents_User1 = _oechem.OEDesignUnitComponents_User1

OEDesignUnitComponents_User2 = _oechem.OEDesignUnitComponents_User2

OEDesignUnitComponents_User3 = _oechem.OEDesignUnitComponents_User3

OEDesignUnitComponents_User4 = _oechem.OEDesignUnitComponents_User4

OEDesignUnitComponents_User5 = _oechem.OEDesignUnitComponents_User5


OEDesignUnitComponents_UserMin = OEDesignUnitComponents_User1


OEDesignUnitComponents_UserMax = OEDesignUnitComponents_User5

OEDesignUnitComponents_Undefined = _oechem.OEDesignUnitComponents_Undefined


OEDesignUnitComponents_UserComponents = OEDesignUnitComponents_User1|OEDesignUnitComponents_User2|OEDesignUnitComponents_User3|OEDesignUnitComponents_User4|OEDesignUnitComponents_User5


OEDesignUnitComponents_MolComponents = OEDesignUnitComponents_Protein|OEDesignUnitComponents_Nucleic|OEDesignUnitComponents_Ligand|OEDesignUnitComponents_Solvent|OEDesignUnitComponents_Metals|OEDesignUnitComponents_CounterIons|OEDesignUnitComponents_Lipids|OEDesignUnitComponents_PackingResidues|OEDesignUnitComponents_Undefined|OEDesignUnitComponents_UserComponents


OEDesignUnitComponents_ListComponents = OEDesignUnitComponents_Cofactors|OEDesignUnitComponents_Excipients|OEDesignUnitComponents_Sugars|OEDesignUnitComponents_Polymers|OEDesignUnitComponents_PostTranslational|OEDesignUnitComponents_OtherProteins|OEDesignUnitComponents_OtherNucleics|OEDesignUnitComponents_OtherLigands|OEDesignUnitComponents_OtherCofactors


OEDesignUnitComponents_Default = OEDesignUnitComponents_Protein|OEDesignUnitComponents_Nucleic|OEDesignUnitComponents_Ligand|OEDesignUnitComponents_Cofactors|OEDesignUnitComponents_Solvent|OEDesignUnitComponents_Metals|OEDesignUnitComponents_CounterIons|OEDesignUnitComponents_Lipids


OEDesignUnitComponents_MacroMolComponents = OEDesignUnitComponents_Protein|OEDesignUnitComponents_Nucleic|OEDesignUnitComponents_OtherProteins|OEDesignUnitComponents_OtherNucleics


OEDesignUnitComponents_TargetComplex = OEDesignUnitComponents_Protein|OEDesignUnitComponents_Nucleic|OEDesignUnitComponents_Cofactors|OEDesignUnitComponents_Solvent|OEDesignUnitComponents_Metals|OEDesignUnitComponents_CounterIons|OEDesignUnitComponents_Lipids|OEDesignUnitComponents_OtherProteins|OEDesignUnitComponents_OtherNucleics|OEDesignUnitComponents_OtherLigands|OEDesignUnitComponents_OtherCofactors


OEDesignUnitComponents_TargetComplexNoSolvent = OEDesignUnitComponents_Protein|OEDesignUnitComponents_Nucleic|OEDesignUnitComponents_Cofactors|OEDesignUnitComponents_Metals|OEDesignUnitComponents_Lipids|OEDesignUnitComponents_OtherProteins|OEDesignUnitComponents_OtherNucleics|OEDesignUnitComponents_OtherLigands|OEDesignUnitComponents_OtherCofactors


OEDesignUnitComponents_All = OEDesignUnitComponents_MolComponents|OEDesignUnitComponents_ListComponents

OEDesignUnitFileType_Undefined = _oechem.OEDesignUnitFileType_Undefined

OEDesignUnitFileType_OEMol = _oechem.OEDesignUnitFileType_OEMol

OEDesignUnitFileType_OEDesignUnit = _oechem.OEDesignUnitFileType_OEDesignUnit

OEIridiumCategory_NA = _oechem.OEIridiumCategory_NA

OEIridiumCategory_NT = _oechem.OEIridiumCategory_NT

OEIridiumCategory_MT = _oechem.OEIridiumCategory_MT

OEIridiumCategory_HT = _oechem.OEIridiumCategory_HT

class OEUCharArray(object):
    r"""Proxy of C++ ArrayT< unsigned char > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __swig_destroy__ = _oechem.delete_OEUCharArray

    def __init__(self, *args):
        r"""
        __init__(OEUCharArray self, Py_ssize_t n) -> OEUCharArray
        __init__(OEUCharArray self, unsigned char const * d, Py_ssize_t n) -> OEUCharArray
        __init__(OEUCharArray self, unsigned char const * d, Py_ssize_t n, bool o) -> OEUCharArray
        __init__(OEUCharArray self, PyObject * input) -> OEUCharArray
        __init__(OEUCharArray self, OEUCharArray rhs) -> OEUCharArray
        """
        _oechem.OEUCharArray_swiginit(self, _oechem.new_OEUCharArray(*args))

    def __eq__(self, other: "OEUCharArray") -> "bool":
        r"""__eq__(OEUCharArray self, OEUCharArray other) -> bool"""
        return _oechem.OEUCharArray___eq__(self, other)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEUCharArray self, double arg2, unsigned char arg3)
        __setitem__(OEUCharArray self, Py_ssize_t n, unsigned char value)
        """
        return _oechem.OEUCharArray___setitem__(self, *args)

    def __getitem__(self, obj):
        if not isinstance(obj, slice):
            return _oechem.OEUCharArray___getitem__(self, obj)

        indices = range(*obj.indices(len(self)))
        newarr  = self.__class__(len(indices))
        for dst, src in enumerate(indices):
            newarr[dst] = self[src]
        return newarr



    def __repr__(self) -> "PyObject *":
        r"""__repr__(OEUCharArray self) -> PyObject *"""
        return _oechem.OEUCharArray___repr__(self)

    def PtrCast(self, *args) -> "unsigned char const *":
        r"""
        PtrCast(OEUCharArray self) -> unsigned char
        PtrCast(OEUCharArray self) -> unsigned char const *
        """
        return _oechem.OEUCharArray_PtrCast(self, *args)

    def __len__(self) -> "Py_ssize_t":
        r"""__len__(OEUCharArray self) -> Py_ssize_t"""
        return _oechem.OEUCharArray___len__(self)

# Register OEUCharArray in _oechem:
_oechem.OEUCharArray_swigregister(OEUCharArray)

class OEUIntArray(object):
    r"""Proxy of C++ ArrayT< unsigned int > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __swig_destroy__ = _oechem.delete_OEUIntArray

    def __init__(self, *args):
        r"""
        __init__(OEUIntArray self, Py_ssize_t n) -> OEUIntArray
        __init__(OEUIntArray self, unsigned int const * d, Py_ssize_t n) -> OEUIntArray
        __init__(OEUIntArray self, unsigned int const * d, Py_ssize_t n, bool o) -> OEUIntArray
        __init__(OEUIntArray self, PyObject * input) -> OEUIntArray
        __init__(OEUIntArray self, OEUIntArray rhs) -> OEUIntArray
        """
        _oechem.OEUIntArray_swiginit(self, _oechem.new_OEUIntArray(*args))

    def __eq__(self, other: "OEUIntArray") -> "bool":
        r"""__eq__(OEUIntArray self, OEUIntArray other) -> bool"""
        return _oechem.OEUIntArray___eq__(self, other)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEUIntArray self, double arg2, unsigned int arg3)
        __setitem__(OEUIntArray self, Py_ssize_t n, unsigned int value)
        """
        return _oechem.OEUIntArray___setitem__(self, *args)

    def __getitem__(self, obj):
        if not isinstance(obj, slice):
            return _oechem.OEUIntArray___getitem__(self, obj)

        indices = range(*obj.indices(len(self)))
        newarr  = self.__class__(len(indices))
        for dst, src in enumerate(indices):
            newarr[dst] = self[src]
        return newarr



    def __repr__(self) -> "PyObject *":
        r"""__repr__(OEUIntArray self) -> PyObject *"""
        return _oechem.OEUIntArray___repr__(self)

    def PtrCast(self, *args) -> "unsigned int const *":
        r"""
        PtrCast(OEUIntArray self) -> unsigned int
        PtrCast(OEUIntArray self) -> unsigned int const *
        """
        return _oechem.OEUIntArray_PtrCast(self, *args)

    def __len__(self) -> "Py_ssize_t":
        r"""__len__(OEUIntArray self) -> Py_ssize_t"""
        return _oechem.OEUIntArray___len__(self)

# Register OEUIntArray in _oechem:
_oechem.OEUIntArray_swigregister(OEUIntArray)

class OEIntArray(object):
    r"""Proxy of C++ ArrayT< int > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __swig_destroy__ = _oechem.delete_OEIntArray

    def __init__(self, *args):
        r"""
        __init__(OEIntArray self, Py_ssize_t n) -> OEIntArray
        __init__(OEIntArray self, int const * d, Py_ssize_t n) -> OEIntArray
        __init__(OEIntArray self, int const * d, Py_ssize_t n, bool o) -> OEIntArray
        __init__(OEIntArray self, PyObject * input) -> OEIntArray
        __init__(OEIntArray self, OEIntArray rhs) -> OEIntArray
        """
        _oechem.OEIntArray_swiginit(self, _oechem.new_OEIntArray(*args))

    def __eq__(self, other: "OEIntArray") -> "bool":
        r"""__eq__(OEIntArray self, OEIntArray other) -> bool"""
        return _oechem.OEIntArray___eq__(self, other)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEIntArray self, double arg2, int arg3)
        __setitem__(OEIntArray self, Py_ssize_t n, int value)
        """
        return _oechem.OEIntArray___setitem__(self, *args)

    def __getitem__(self, obj):
        if not isinstance(obj, slice):
            return _oechem.OEIntArray___getitem__(self, obj)

        indices = range(*obj.indices(len(self)))
        newarr  = self.__class__(len(indices))
        for dst, src in enumerate(indices):
            newarr[dst] = self[src]
        return newarr



    def __repr__(self) -> "PyObject *":
        r"""__repr__(OEIntArray self) -> PyObject *"""
        return _oechem.OEIntArray___repr__(self)

    def PtrCast(self, *args) -> "int const *":
        r"""
        PtrCast(OEIntArray self) -> int
        PtrCast(OEIntArray self) -> int const *
        """
        return _oechem.OEIntArray_PtrCast(self, *args)

    def __len__(self) -> "Py_ssize_t":
        r"""__len__(OEIntArray self) -> Py_ssize_t"""
        return _oechem.OEIntArray___len__(self)

# Register OEIntArray in _oechem:
_oechem.OEIntArray_swigregister(OEIntArray)

class OEFloatArray(object):
    r"""Proxy of C++ ArrayT< float > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __swig_destroy__ = _oechem.delete_OEFloatArray

    def __init__(self, *args):
        r"""
        __init__(OEFloatArray self, Py_ssize_t n) -> OEFloatArray
        __init__(OEFloatArray self, float const * d, Py_ssize_t n) -> OEFloatArray
        __init__(OEFloatArray self, float const * d, Py_ssize_t n, bool o) -> OEFloatArray
        __init__(OEFloatArray self, PyObject * input) -> OEFloatArray
        __init__(OEFloatArray self, OEFloatArray rhs) -> OEFloatArray
        """
        _oechem.OEFloatArray_swiginit(self, _oechem.new_OEFloatArray(*args))

    def __eq__(self, other: "OEFloatArray") -> "bool":
        r"""__eq__(OEFloatArray self, OEFloatArray other) -> bool"""
        return _oechem.OEFloatArray___eq__(self, other)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEFloatArray self, double arg2, float arg3)
        __setitem__(OEFloatArray self, Py_ssize_t n, float value)
        """
        return _oechem.OEFloatArray___setitem__(self, *args)

    def __getitem__(self, obj):
        if not isinstance(obj, slice):
            return _oechem.OEFloatArray___getitem__(self, obj)

        indices = range(*obj.indices(len(self)))
        newarr  = self.__class__(len(indices))
        for dst, src in enumerate(indices):
            newarr[dst] = self[src]
        return newarr



    def __repr__(self) -> "PyObject *":
        r"""__repr__(OEFloatArray self) -> PyObject *"""
        return _oechem.OEFloatArray___repr__(self)

    def PtrCast(self, *args) -> "float const *":
        r"""
        PtrCast(OEFloatArray self) -> float
        PtrCast(OEFloatArray self) -> float const *
        """
        return _oechem.OEFloatArray_PtrCast(self, *args)

    def __len__(self) -> "Py_ssize_t":
        r"""__len__(OEFloatArray self) -> Py_ssize_t"""
        return _oechem.OEFloatArray___len__(self)

# Register OEFloatArray in _oechem:
_oechem.OEFloatArray_swigregister(OEFloatArray)

class OEDoubleArray(object):
    r"""Proxy of C++ ArrayT< double > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __swig_destroy__ = _oechem.delete_OEDoubleArray

    def __init__(self, *args):
        r"""
        __init__(OEDoubleArray self, Py_ssize_t n) -> OEDoubleArray
        __init__(OEDoubleArray self, double const * d, Py_ssize_t n) -> OEDoubleArray
        __init__(OEDoubleArray self, double const * d, Py_ssize_t n, bool o) -> OEDoubleArray
        __init__(OEDoubleArray self, PyObject * input) -> OEDoubleArray
        __init__(OEDoubleArray self, OEDoubleArray rhs) -> OEDoubleArray
        """
        _oechem.OEDoubleArray_swiginit(self, _oechem.new_OEDoubleArray(*args))

    def __eq__(self, other: "OEDoubleArray") -> "bool":
        r"""__eq__(OEDoubleArray self, OEDoubleArray other) -> bool"""
        return _oechem.OEDoubleArray___eq__(self, other)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEDoubleArray self, double arg2, double arg3)
        __setitem__(OEDoubleArray self, Py_ssize_t n, double value)
        """
        return _oechem.OEDoubleArray___setitem__(self, *args)

    def __getitem__(self, obj):
        if not isinstance(obj, slice):
            return _oechem.OEDoubleArray___getitem__(self, obj)

        indices = range(*obj.indices(len(self)))
        newarr  = self.__class__(len(indices))
        for dst, src in enumerate(indices):
            newarr[dst] = self[src]
        return newarr



    def __repr__(self) -> "PyObject *":
        r"""__repr__(OEDoubleArray self) -> PyObject *"""
        return _oechem.OEDoubleArray___repr__(self)

    def PtrCast(self, *args) -> "double const *":
        r"""
        PtrCast(OEDoubleArray self) -> double
        PtrCast(OEDoubleArray self) -> double const *
        """
        return _oechem.OEDoubleArray_PtrCast(self, *args)

    def __len__(self) -> "Py_ssize_t":
        r"""__len__(OEDoubleArray self) -> Py_ssize_t"""
        return _oechem.OEDoubleArray___len__(self)

# Register OEDoubleArray in _oechem:
_oechem.OEDoubleArray_swigregister(OEDoubleArray)

class OEBoolArray(object):
    r"""Proxy of C++ ArrayT< bool > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __swig_destroy__ = _oechem.delete_OEBoolArray

    def __init__(self, *args):
        r"""
        __init__(OEBoolArray self, Py_ssize_t n) -> OEBoolArray
        __init__(OEBoolArray self, bool const * d, Py_ssize_t n) -> OEBoolArray
        __init__(OEBoolArray self, bool const * d, Py_ssize_t n, bool o) -> OEBoolArray
        __init__(OEBoolArray self, PyObject * input) -> OEBoolArray
        __init__(OEBoolArray self, OEBoolArray rhs) -> OEBoolArray
        """
        _oechem.OEBoolArray_swiginit(self, _oechem.new_OEBoolArray(*args))

    def __eq__(self, other: "OEBoolArray") -> "bool":
        r"""__eq__(OEBoolArray self, OEBoolArray other) -> bool"""
        return _oechem.OEBoolArray___eq__(self, other)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEBoolArray self, double arg2, bool arg3)
        __setitem__(OEBoolArray self, Py_ssize_t n, bool value)
        """
        return _oechem.OEBoolArray___setitem__(self, *args)

    def __getitem__(self, obj):
        if not isinstance(obj, slice):
            return _oechem.OEBoolArray___getitem__(self, obj)

        indices = range(*obj.indices(len(self)))
        newarr  = self.__class__(len(indices))
        for dst, src in enumerate(indices):
            newarr[dst] = self[src]
        return newarr



    def __repr__(self) -> "PyObject *":
        r"""__repr__(OEBoolArray self) -> PyObject *"""
        return _oechem.OEBoolArray___repr__(self)

    def PtrCast(self, *args) -> "bool const *":
        r"""
        PtrCast(OEBoolArray self) -> bool
        PtrCast(OEBoolArray self) -> bool const *
        """
        return _oechem.OEBoolArray_PtrCast(self, *args)

    def __len__(self) -> "Py_ssize_t":
        r"""__len__(OEBoolArray self) -> Py_ssize_t"""
        return _oechem.OEBoolArray___len__(self)

# Register OEBoolArray in _oechem:
_oechem.OEBoolArray_swigregister(OEBoolArray)

class OEUIntVector(object):
    r"""Proxy of C++ std::vector< unsigned int > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEUIntVector self) -> SwigPyIterator"""
        return _oechem.OEUIntVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEUIntVector self) -> bool"""
        return _oechem.OEUIntVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEUIntVector self) -> bool"""
        return _oechem.OEUIntVector___bool__(self)

    def __len__(self) -> "std::vector< unsigned int >::size_type":
        r"""__len__(OEUIntVector self) -> std::vector< unsigned int >::size_type"""
        return _oechem.OEUIntVector___len__(self)

    def __getslice__(self, i: "std::vector< unsigned int >::difference_type", j: "std::vector< unsigned int >::difference_type") -> "std::vector< unsigned int,std::allocator< unsigned int > > *":
        r"""__getslice__(OEUIntVector self, std::vector< unsigned int >::difference_type i, std::vector< unsigned int >::difference_type j) -> OEUIntVector"""
        return _oechem.OEUIntVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEUIntVector self, std::vector< unsigned int >::difference_type i, std::vector< unsigned int >::difference_type j)
        __setslice__(OEUIntVector self, std::vector< unsigned int >::difference_type i, std::vector< unsigned int >::difference_type j, OEUIntVector v)
        """
        return _oechem.OEUIntVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< unsigned int >::difference_type", j: "std::vector< unsigned int >::difference_type") -> "void":
        r"""__delslice__(OEUIntVector self, std::vector< unsigned int >::difference_type i, std::vector< unsigned int >::difference_type j)"""
        return _oechem.OEUIntVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEUIntVector self, std::vector< unsigned int >::difference_type i)
        __delitem__(OEUIntVector self, PySliceObject * slice)
        """
        return _oechem.OEUIntVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< unsigned int >::value_type const &":
        r"""
        __getitem__(OEUIntVector self, PySliceObject * slice) -> OEUIntVector
        __getitem__(OEUIntVector self, std::vector< unsigned int >::difference_type i) -> std::vector< unsigned int >::value_type const &
        """
        return _oechem.OEUIntVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEUIntVector self, PySliceObject * slice, OEUIntVector v)
        __setitem__(OEUIntVector self, PySliceObject * slice)
        __setitem__(OEUIntVector self, std::vector< unsigned int >::difference_type i, std::vector< unsigned int >::value_type const & x)
        """
        return _oechem.OEUIntVector___setitem__(self, *args)

    def pop(self) -> "std::vector< unsigned int >::value_type":
        r"""pop(OEUIntVector self) -> std::vector< unsigned int >::value_type"""
        return _oechem.OEUIntVector_pop(self)

    def append(self, x: "std::vector< unsigned int >::value_type const &") -> "void":
        r"""append(OEUIntVector self, std::vector< unsigned int >::value_type const & x)"""
        return _oechem.OEUIntVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEUIntVector self) -> bool"""
        return _oechem.OEUIntVector_empty(self)

    def size(self) -> "std::vector< unsigned int >::size_type":
        r"""size(OEUIntVector self) -> std::vector< unsigned int >::size_type"""
        return _oechem.OEUIntVector_size(self)

    def swap(self, v: "OEUIntVector") -> "void":
        r"""swap(OEUIntVector self, OEUIntVector v)"""
        return _oechem.OEUIntVector_swap(self, v)

    def begin(self) -> "std::vector< unsigned int >::iterator":
        r"""begin(OEUIntVector self) -> std::vector< unsigned int >::iterator"""
        return _oechem.OEUIntVector_begin(self)

    def end(self) -> "std::vector< unsigned int >::iterator":
        r"""end(OEUIntVector self) -> std::vector< unsigned int >::iterator"""
        return _oechem.OEUIntVector_end(self)

    def rbegin(self) -> "std::vector< unsigned int >::reverse_iterator":
        r"""rbegin(OEUIntVector self) -> std::vector< unsigned int >::reverse_iterator"""
        return _oechem.OEUIntVector_rbegin(self)

    def rend(self) -> "std::vector< unsigned int >::reverse_iterator":
        r"""rend(OEUIntVector self) -> std::vector< unsigned int >::reverse_iterator"""
        return _oechem.OEUIntVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OEUIntVector self)"""
        return _oechem.OEUIntVector_clear(self)

    def get_allocator(self) -> "std::vector< unsigned int >::allocator_type":
        r"""get_allocator(OEUIntVector self) -> std::vector< unsigned int >::allocator_type"""
        return _oechem.OEUIntVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEUIntVector self)"""
        return _oechem.OEUIntVector_pop_back(self)

    def erase(self, *args) -> "std::vector< unsigned int >::iterator":
        r"""
        erase(OEUIntVector self, std::vector< unsigned int >::iterator pos) -> std::vector< unsigned int >::iterator
        erase(OEUIntVector self, std::vector< unsigned int >::iterator first, std::vector< unsigned int >::iterator last) -> std::vector< unsigned int >::iterator
        """
        return _oechem.OEUIntVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEUIntVector self) -> OEUIntVector
        __init__(OEUIntVector self, OEUIntVector other) -> OEUIntVector
        __init__(OEUIntVector self, std::vector< unsigned int >::size_type size) -> OEUIntVector
        __init__(OEUIntVector self, std::vector< unsigned int >::size_type size, std::vector< unsigned int >::value_type const & value) -> OEUIntVector
        """
        _oechem.OEUIntVector_swiginit(self, _oechem.new_OEUIntVector(*args))

    def push_back(self, x: "std::vector< unsigned int >::value_type const &") -> "void":
        r"""push_back(OEUIntVector self, std::vector< unsigned int >::value_type const & x)"""
        return _oechem.OEUIntVector_push_back(self, x)

    def front(self) -> "std::vector< unsigned int >::value_type const &":
        r"""front(OEUIntVector self) -> std::vector< unsigned int >::value_type const &"""
        return _oechem.OEUIntVector_front(self)

    def back(self) -> "std::vector< unsigned int >::value_type const &":
        r"""back(OEUIntVector self) -> std::vector< unsigned int >::value_type const &"""
        return _oechem.OEUIntVector_back(self)

    def assign(self, n: "std::vector< unsigned int >::size_type", x: "std::vector< unsigned int >::value_type const &") -> "void":
        r"""assign(OEUIntVector self, std::vector< unsigned int >::size_type n, std::vector< unsigned int >::value_type const & x)"""
        return _oechem.OEUIntVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEUIntVector self, std::vector< unsigned int >::size_type new_size)
        resize(OEUIntVector self, std::vector< unsigned int >::size_type new_size, std::vector< unsigned int >::value_type const & x)
        """
        return _oechem.OEUIntVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEUIntVector self, std::vector< unsigned int >::iterator pos, std::vector< unsigned int >::value_type const & x) -> std::vector< unsigned int >::iterator
        insert(OEUIntVector self, std::vector< unsigned int >::iterator pos, std::vector< unsigned int >::size_type n, std::vector< unsigned int >::value_type const & x)
        """
        return _oechem.OEUIntVector_insert(self, *args)

    def reserve(self, n: "std::vector< unsigned int >::size_type") -> "void":
        r"""reserve(OEUIntVector self, std::vector< unsigned int >::size_type n)"""
        return _oechem.OEUIntVector_reserve(self, n)

    def capacity(self) -> "std::vector< unsigned int >::size_type":
        r"""capacity(OEUIntVector self) -> std::vector< unsigned int >::size_type"""
        return _oechem.OEUIntVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OEUIntVector

# Register OEUIntVector in _oechem:
_oechem.OEUIntVector_swigregister(OEUIntVector)

class OEIntVector(object):
    r"""Proxy of C++ std::vector< int > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEIntVector self) -> SwigPyIterator"""
        return _oechem.OEIntVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEIntVector self) -> bool"""
        return _oechem.OEIntVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEIntVector self) -> bool"""
        return _oechem.OEIntVector___bool__(self)

    def __len__(self) -> "std::vector< int >::size_type":
        r"""__len__(OEIntVector self) -> std::vector< int >::size_type"""
        return _oechem.OEIntVector___len__(self)

    def __getslice__(self, i: "std::vector< int >::difference_type", j: "std::vector< int >::difference_type") -> "std::vector< int,std::allocator< int > > *":
        r"""__getslice__(OEIntVector self, std::vector< int >::difference_type i, std::vector< int >::difference_type j) -> OEIntVector"""
        return _oechem.OEIntVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEIntVector self, std::vector< int >::difference_type i, std::vector< int >::difference_type j)
        __setslice__(OEIntVector self, std::vector< int >::difference_type i, std::vector< int >::difference_type j, OEIntVector v)
        """
        return _oechem.OEIntVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< int >::difference_type", j: "std::vector< int >::difference_type") -> "void":
        r"""__delslice__(OEIntVector self, std::vector< int >::difference_type i, std::vector< int >::difference_type j)"""
        return _oechem.OEIntVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEIntVector self, std::vector< int >::difference_type i)
        __delitem__(OEIntVector self, PySliceObject * slice)
        """
        return _oechem.OEIntVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< int >::value_type const &":
        r"""
        __getitem__(OEIntVector self, PySliceObject * slice) -> OEIntVector
        __getitem__(OEIntVector self, std::vector< int >::difference_type i) -> std::vector< int >::value_type const &
        """
        return _oechem.OEIntVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEIntVector self, PySliceObject * slice, OEIntVector v)
        __setitem__(OEIntVector self, PySliceObject * slice)
        __setitem__(OEIntVector self, std::vector< int >::difference_type i, std::vector< int >::value_type const & x)
        """
        return _oechem.OEIntVector___setitem__(self, *args)

    def pop(self) -> "std::vector< int >::value_type":
        r"""pop(OEIntVector self) -> std::vector< int >::value_type"""
        return _oechem.OEIntVector_pop(self)

    def append(self, x: "std::vector< int >::value_type const &") -> "void":
        r"""append(OEIntVector self, std::vector< int >::value_type const & x)"""
        return _oechem.OEIntVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEIntVector self) -> bool"""
        return _oechem.OEIntVector_empty(self)

    def size(self) -> "std::vector< int >::size_type":
        r"""size(OEIntVector self) -> std::vector< int >::size_type"""
        return _oechem.OEIntVector_size(self)

    def swap(self, v: "OEIntVector") -> "void":
        r"""swap(OEIntVector self, OEIntVector v)"""
        return _oechem.OEIntVector_swap(self, v)

    def begin(self) -> "std::vector< int >::iterator":
        r"""begin(OEIntVector self) -> std::vector< int >::iterator"""
        return _oechem.OEIntVector_begin(self)

    def end(self) -> "std::vector< int >::iterator":
        r"""end(OEIntVector self) -> std::vector< int >::iterator"""
        return _oechem.OEIntVector_end(self)

    def rbegin(self) -> "std::vector< int >::reverse_iterator":
        r"""rbegin(OEIntVector self) -> std::vector< int >::reverse_iterator"""
        return _oechem.OEIntVector_rbegin(self)

    def rend(self) -> "std::vector< int >::reverse_iterator":
        r"""rend(OEIntVector self) -> std::vector< int >::reverse_iterator"""
        return _oechem.OEIntVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OEIntVector self)"""
        return _oechem.OEIntVector_clear(self)

    def get_allocator(self) -> "std::vector< int >::allocator_type":
        r"""get_allocator(OEIntVector self) -> std::vector< int >::allocator_type"""
        return _oechem.OEIntVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEIntVector self)"""
        return _oechem.OEIntVector_pop_back(self)

    def erase(self, *args) -> "std::vector< int >::iterator":
        r"""
        erase(OEIntVector self, std::vector< int >::iterator pos) -> std::vector< int >::iterator
        erase(OEIntVector self, std::vector< int >::iterator first, std::vector< int >::iterator last) -> std::vector< int >::iterator
        """
        return _oechem.OEIntVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEIntVector self) -> OEIntVector
        __init__(OEIntVector self, OEIntVector other) -> OEIntVector
        __init__(OEIntVector self, std::vector< int >::size_type size) -> OEIntVector
        __init__(OEIntVector self, std::vector< int >::size_type size, std::vector< int >::value_type const & value) -> OEIntVector
        """
        _oechem.OEIntVector_swiginit(self, _oechem.new_OEIntVector(*args))

    def push_back(self, x: "std::vector< int >::value_type const &") -> "void":
        r"""push_back(OEIntVector self, std::vector< int >::value_type const & x)"""
        return _oechem.OEIntVector_push_back(self, x)

    def front(self) -> "std::vector< int >::value_type const &":
        r"""front(OEIntVector self) -> std::vector< int >::value_type const &"""
        return _oechem.OEIntVector_front(self)

    def back(self) -> "std::vector< int >::value_type const &":
        r"""back(OEIntVector self) -> std::vector< int >::value_type const &"""
        return _oechem.OEIntVector_back(self)

    def assign(self, n: "std::vector< int >::size_type", x: "std::vector< int >::value_type const &") -> "void":
        r"""assign(OEIntVector self, std::vector< int >::size_type n, std::vector< int >::value_type const & x)"""
        return _oechem.OEIntVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEIntVector self, std::vector< int >::size_type new_size)
        resize(OEIntVector self, std::vector< int >::size_type new_size, std::vector< int >::value_type const & x)
        """
        return _oechem.OEIntVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEIntVector self, std::vector< int >::iterator pos, std::vector< int >::value_type const & x) -> std::vector< int >::iterator
        insert(OEIntVector self, std::vector< int >::iterator pos, std::vector< int >::size_type n, std::vector< int >::value_type const & x)
        """
        return _oechem.OEIntVector_insert(self, *args)

    def reserve(self, n: "std::vector< int >::size_type") -> "void":
        r"""reserve(OEIntVector self, std::vector< int >::size_type n)"""
        return _oechem.OEIntVector_reserve(self, n)

    def capacity(self) -> "std::vector< int >::size_type":
        r"""capacity(OEIntVector self) -> std::vector< int >::size_type"""
        return _oechem.OEIntVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OEIntVector

# Register OEIntVector in _oechem:
_oechem.OEIntVector_swigregister(OEIntVector)

class OELongVector(object):
    r"""Proxy of C++ std::vector< long > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OELongVector self) -> SwigPyIterator"""
        return _oechem.OELongVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OELongVector self) -> bool"""
        return _oechem.OELongVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OELongVector self) -> bool"""
        return _oechem.OELongVector___bool__(self)

    def __len__(self) -> "std::vector< long >::size_type":
        r"""__len__(OELongVector self) -> std::vector< long >::size_type"""
        return _oechem.OELongVector___len__(self)

    def __getslice__(self, i: "std::vector< long >::difference_type", j: "std::vector< long >::difference_type") -> "std::vector< long,std::allocator< long > > *":
        r"""__getslice__(OELongVector self, std::vector< long >::difference_type i, std::vector< long >::difference_type j) -> OELongVector"""
        return _oechem.OELongVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OELongVector self, std::vector< long >::difference_type i, std::vector< long >::difference_type j)
        __setslice__(OELongVector self, std::vector< long >::difference_type i, std::vector< long >::difference_type j, OELongVector v)
        """
        return _oechem.OELongVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< long >::difference_type", j: "std::vector< long >::difference_type") -> "void":
        r"""__delslice__(OELongVector self, std::vector< long >::difference_type i, std::vector< long >::difference_type j)"""
        return _oechem.OELongVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OELongVector self, std::vector< long >::difference_type i)
        __delitem__(OELongVector self, PySliceObject * slice)
        """
        return _oechem.OELongVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< long >::value_type const &":
        r"""
        __getitem__(OELongVector self, PySliceObject * slice) -> OELongVector
        __getitem__(OELongVector self, std::vector< long >::difference_type i) -> std::vector< long >::value_type const &
        """
        return _oechem.OELongVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OELongVector self, PySliceObject * slice, OELongVector v)
        __setitem__(OELongVector self, PySliceObject * slice)
        __setitem__(OELongVector self, std::vector< long >::difference_type i, std::vector< long >::value_type const & x)
        """
        return _oechem.OELongVector___setitem__(self, *args)

    def pop(self) -> "std::vector< long >::value_type":
        r"""pop(OELongVector self) -> std::vector< long >::value_type"""
        return _oechem.OELongVector_pop(self)

    def append(self, x: "std::vector< long >::value_type const &") -> "void":
        r"""append(OELongVector self, std::vector< long >::value_type const & x)"""
        return _oechem.OELongVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OELongVector self) -> bool"""
        return _oechem.OELongVector_empty(self)

    def size(self) -> "std::vector< long >::size_type":
        r"""size(OELongVector self) -> std::vector< long >::size_type"""
        return _oechem.OELongVector_size(self)

    def swap(self, v: "OELongVector") -> "void":
        r"""swap(OELongVector self, OELongVector v)"""
        return _oechem.OELongVector_swap(self, v)

    def begin(self) -> "std::vector< long >::iterator":
        r"""begin(OELongVector self) -> std::vector< long >::iterator"""
        return _oechem.OELongVector_begin(self)

    def end(self) -> "std::vector< long >::iterator":
        r"""end(OELongVector self) -> std::vector< long >::iterator"""
        return _oechem.OELongVector_end(self)

    def rbegin(self) -> "std::vector< long >::reverse_iterator":
        r"""rbegin(OELongVector self) -> std::vector< long >::reverse_iterator"""
        return _oechem.OELongVector_rbegin(self)

    def rend(self) -> "std::vector< long >::reverse_iterator":
        r"""rend(OELongVector self) -> std::vector< long >::reverse_iterator"""
        return _oechem.OELongVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OELongVector self)"""
        return _oechem.OELongVector_clear(self)

    def get_allocator(self) -> "std::vector< long >::allocator_type":
        r"""get_allocator(OELongVector self) -> std::vector< long >::allocator_type"""
        return _oechem.OELongVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OELongVector self)"""
        return _oechem.OELongVector_pop_back(self)

    def erase(self, *args) -> "std::vector< long >::iterator":
        r"""
        erase(OELongVector self, std::vector< long >::iterator pos) -> std::vector< long >::iterator
        erase(OELongVector self, std::vector< long >::iterator first, std::vector< long >::iterator last) -> std::vector< long >::iterator
        """
        return _oechem.OELongVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OELongVector self) -> OELongVector
        __init__(OELongVector self, OELongVector other) -> OELongVector
        __init__(OELongVector self, std::vector< long >::size_type size) -> OELongVector
        __init__(OELongVector self, std::vector< long >::size_type size, std::vector< long >::value_type const & value) -> OELongVector
        """
        _oechem.OELongVector_swiginit(self, _oechem.new_OELongVector(*args))

    def push_back(self, x: "std::vector< long >::value_type const &") -> "void":
        r"""push_back(OELongVector self, std::vector< long >::value_type const & x)"""
        return _oechem.OELongVector_push_back(self, x)

    def front(self) -> "std::vector< long >::value_type const &":
        r"""front(OELongVector self) -> std::vector< long >::value_type const &"""
        return _oechem.OELongVector_front(self)

    def back(self) -> "std::vector< long >::value_type const &":
        r"""back(OELongVector self) -> std::vector< long >::value_type const &"""
        return _oechem.OELongVector_back(self)

    def assign(self, n: "std::vector< long >::size_type", x: "std::vector< long >::value_type const &") -> "void":
        r"""assign(OELongVector self, std::vector< long >::size_type n, std::vector< long >::value_type const & x)"""
        return _oechem.OELongVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OELongVector self, std::vector< long >::size_type new_size)
        resize(OELongVector self, std::vector< long >::size_type new_size, std::vector< long >::value_type const & x)
        """
        return _oechem.OELongVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OELongVector self, std::vector< long >::iterator pos, std::vector< long >::value_type const & x) -> std::vector< long >::iterator
        insert(OELongVector self, std::vector< long >::iterator pos, std::vector< long >::size_type n, std::vector< long >::value_type const & x)
        """
        return _oechem.OELongVector_insert(self, *args)

    def reserve(self, n: "std::vector< long >::size_type") -> "void":
        r"""reserve(OELongVector self, std::vector< long >::size_type n)"""
        return _oechem.OELongVector_reserve(self, n)

    def capacity(self) -> "std::vector< long >::size_type":
        r"""capacity(OELongVector self) -> std::vector< long >::size_type"""
        return _oechem.OELongVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OELongVector

# Register OELongVector in _oechem:
_oechem.OELongVector_swigregister(OELongVector)

class OECharVector(object):
    r"""Proxy of C++ std::vector< char > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OECharVector self) -> SwigPyIterator"""
        return _oechem.OECharVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OECharVector self) -> bool"""
        return _oechem.OECharVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OECharVector self) -> bool"""
        return _oechem.OECharVector___bool__(self)

    def __len__(self) -> "std::vector< char >::size_type":
        r"""__len__(OECharVector self) -> std::vector< char >::size_type"""
        return _oechem.OECharVector___len__(self)

    def __getslice__(self, i: "std::vector< char >::difference_type", j: "std::vector< char >::difference_type") -> "std::vector< char,std::allocator< char > > *":
        r"""__getslice__(OECharVector self, std::vector< char >::difference_type i, std::vector< char >::difference_type j) -> OECharVector"""
        return _oechem.OECharVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OECharVector self, std::vector< char >::difference_type i, std::vector< char >::difference_type j)
        __setslice__(OECharVector self, std::vector< char >::difference_type i, std::vector< char >::difference_type j, OECharVector v)
        """
        return _oechem.OECharVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< char >::difference_type", j: "std::vector< char >::difference_type") -> "void":
        r"""__delslice__(OECharVector self, std::vector< char >::difference_type i, std::vector< char >::difference_type j)"""
        return _oechem.OECharVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OECharVector self, std::vector< char >::difference_type i)
        __delitem__(OECharVector self, PySliceObject * slice)
        """
        return _oechem.OECharVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< char >::value_type const &":
        r"""
        __getitem__(OECharVector self, PySliceObject * slice) -> OECharVector
        __getitem__(OECharVector self, std::vector< char >::difference_type i) -> std::vector< char >::value_type const &
        """
        return _oechem.OECharVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OECharVector self, PySliceObject * slice, OECharVector v)
        __setitem__(OECharVector self, PySliceObject * slice)
        __setitem__(OECharVector self, std::vector< char >::difference_type i, std::vector< char >::value_type const & x)
        """
        return _oechem.OECharVector___setitem__(self, *args)

    def pop(self) -> "std::vector< char >::value_type":
        r"""pop(OECharVector self) -> std::vector< char >::value_type"""
        return _oechem.OECharVector_pop(self)

    def append(self, x: "std::vector< char >::value_type const &") -> "void":
        r"""append(OECharVector self, std::vector< char >::value_type const & x)"""
        return _oechem.OECharVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OECharVector self) -> bool"""
        return _oechem.OECharVector_empty(self)

    def size(self) -> "std::vector< char >::size_type":
        r"""size(OECharVector self) -> std::vector< char >::size_type"""
        return _oechem.OECharVector_size(self)

    def swap(self, v: "OECharVector") -> "void":
        r"""swap(OECharVector self, OECharVector v)"""
        return _oechem.OECharVector_swap(self, v)

    def begin(self) -> "std::vector< char >::iterator":
        r"""begin(OECharVector self) -> std::vector< char >::iterator"""
        return _oechem.OECharVector_begin(self)

    def end(self) -> "std::vector< char >::iterator":
        r"""end(OECharVector self) -> std::vector< char >::iterator"""
        return _oechem.OECharVector_end(self)

    def rbegin(self) -> "std::vector< char >::reverse_iterator":
        r"""rbegin(OECharVector self) -> std::vector< char >::reverse_iterator"""
        return _oechem.OECharVector_rbegin(self)

    def rend(self) -> "std::vector< char >::reverse_iterator":
        r"""rend(OECharVector self) -> std::vector< char >::reverse_iterator"""
        return _oechem.OECharVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OECharVector self)"""
        return _oechem.OECharVector_clear(self)

    def get_allocator(self) -> "std::vector< char >::allocator_type":
        r"""get_allocator(OECharVector self) -> std::vector< char >::allocator_type"""
        return _oechem.OECharVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OECharVector self)"""
        return _oechem.OECharVector_pop_back(self)

    def erase(self, *args) -> "std::vector< char >::iterator":
        r"""
        erase(OECharVector self, std::vector< char >::iterator pos) -> std::vector< char >::iterator
        erase(OECharVector self, std::vector< char >::iterator first, std::vector< char >::iterator last) -> std::vector< char >::iterator
        """
        return _oechem.OECharVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OECharVector self) -> OECharVector
        __init__(OECharVector self, OECharVector other) -> OECharVector
        __init__(OECharVector self, std::vector< char >::size_type size) -> OECharVector
        __init__(OECharVector self, std::vector< char >::size_type size, std::vector< char >::value_type const & value) -> OECharVector
        """
        _oechem.OECharVector_swiginit(self, _oechem.new_OECharVector(*args))

    def push_back(self, x: "std::vector< char >::value_type const &") -> "void":
        r"""push_back(OECharVector self, std::vector< char >::value_type const & x)"""
        return _oechem.OECharVector_push_back(self, x)

    def front(self) -> "std::vector< char >::value_type const &":
        r"""front(OECharVector self) -> std::vector< char >::value_type const &"""
        return _oechem.OECharVector_front(self)

    def back(self) -> "std::vector< char >::value_type const &":
        r"""back(OECharVector self) -> std::vector< char >::value_type const &"""
        return _oechem.OECharVector_back(self)

    def assign(self, n: "std::vector< char >::size_type", x: "std::vector< char >::value_type const &") -> "void":
        r"""assign(OECharVector self, std::vector< char >::size_type n, std::vector< char >::value_type const & x)"""
        return _oechem.OECharVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OECharVector self, std::vector< char >::size_type new_size)
        resize(OECharVector self, std::vector< char >::size_type new_size, std::vector< char >::value_type const & x)
        """
        return _oechem.OECharVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OECharVector self, std::vector< char >::iterator pos, std::vector< char >::value_type const & x) -> std::vector< char >::iterator
        insert(OECharVector self, std::vector< char >::iterator pos, std::vector< char >::size_type n, std::vector< char >::value_type const & x)
        """
        return _oechem.OECharVector_insert(self, *args)

    def reserve(self, n: "std::vector< char >::size_type") -> "void":
        r"""reserve(OECharVector self, std::vector< char >::size_type n)"""
        return _oechem.OECharVector_reserve(self, n)

    def capacity(self) -> "std::vector< char >::size_type":
        r"""capacity(OECharVector self) -> std::vector< char >::size_type"""
        return _oechem.OECharVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OECharVector

# Register OECharVector in _oechem:
_oechem.OECharVector_swigregister(OECharVector)

class OEUCharVector(object):
    r"""Proxy of C++ std::vector< unsigned char > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEUCharVector self) -> SwigPyIterator"""
        return _oechem.OEUCharVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEUCharVector self) -> bool"""
        return _oechem.OEUCharVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEUCharVector self) -> bool"""
        return _oechem.OEUCharVector___bool__(self)

    def __len__(self) -> "std::vector< unsigned char >::size_type":
        r"""__len__(OEUCharVector self) -> std::vector< unsigned char >::size_type"""
        return _oechem.OEUCharVector___len__(self)

    def __getslice__(self, i: "std::vector< unsigned char >::difference_type", j: "std::vector< unsigned char >::difference_type") -> "std::vector< unsigned char,std::allocator< unsigned char > > *":
        r"""__getslice__(OEUCharVector self, std::vector< unsigned char >::difference_type i, std::vector< unsigned char >::difference_type j) -> OEUCharVector"""
        return _oechem.OEUCharVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEUCharVector self, std::vector< unsigned char >::difference_type i, std::vector< unsigned char >::difference_type j)
        __setslice__(OEUCharVector self, std::vector< unsigned char >::difference_type i, std::vector< unsigned char >::difference_type j, OEUCharVector v)
        """
        return _oechem.OEUCharVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< unsigned char >::difference_type", j: "std::vector< unsigned char >::difference_type") -> "void":
        r"""__delslice__(OEUCharVector self, std::vector< unsigned char >::difference_type i, std::vector< unsigned char >::difference_type j)"""
        return _oechem.OEUCharVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEUCharVector self, std::vector< unsigned char >::difference_type i)
        __delitem__(OEUCharVector self, PySliceObject * slice)
        """
        return _oechem.OEUCharVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< unsigned char >::value_type const &":
        r"""
        __getitem__(OEUCharVector self, PySliceObject * slice) -> OEUCharVector
        __getitem__(OEUCharVector self, std::vector< unsigned char >::difference_type i) -> std::vector< unsigned char >::value_type const &
        """
        return _oechem.OEUCharVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEUCharVector self, PySliceObject * slice, OEUCharVector v)
        __setitem__(OEUCharVector self, PySliceObject * slice)
        __setitem__(OEUCharVector self, std::vector< unsigned char >::difference_type i, std::vector< unsigned char >::value_type const & x)
        """
        return _oechem.OEUCharVector___setitem__(self, *args)

    def pop(self) -> "std::vector< unsigned char >::value_type":
        r"""pop(OEUCharVector self) -> std::vector< unsigned char >::value_type"""
        return _oechem.OEUCharVector_pop(self)

    def append(self, x: "std::vector< unsigned char >::value_type const &") -> "void":
        r"""append(OEUCharVector self, std::vector< unsigned char >::value_type const & x)"""
        return _oechem.OEUCharVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEUCharVector self) -> bool"""
        return _oechem.OEUCharVector_empty(self)

    def size(self) -> "std::vector< unsigned char >::size_type":
        r"""size(OEUCharVector self) -> std::vector< unsigned char >::size_type"""
        return _oechem.OEUCharVector_size(self)

    def swap(self, v: "OEUCharVector") -> "void":
        r"""swap(OEUCharVector self, OEUCharVector v)"""
        return _oechem.OEUCharVector_swap(self, v)

    def begin(self) -> "std::vector< unsigned char >::iterator":
        r"""begin(OEUCharVector self) -> std::vector< unsigned char >::iterator"""
        return _oechem.OEUCharVector_begin(self)

    def end(self) -> "std::vector< unsigned char >::iterator":
        r"""end(OEUCharVector self) -> std::vector< unsigned char >::iterator"""
        return _oechem.OEUCharVector_end(self)

    def rbegin(self) -> "std::vector< unsigned char >::reverse_iterator":
        r"""rbegin(OEUCharVector self) -> std::vector< unsigned char >::reverse_iterator"""
        return _oechem.OEUCharVector_rbegin(self)

    def rend(self) -> "std::vector< unsigned char >::reverse_iterator":
        r"""rend(OEUCharVector self) -> std::vector< unsigned char >::reverse_iterator"""
        return _oechem.OEUCharVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OEUCharVector self)"""
        return _oechem.OEUCharVector_clear(self)

    def get_allocator(self) -> "std::vector< unsigned char >::allocator_type":
        r"""get_allocator(OEUCharVector self) -> std::vector< unsigned char >::allocator_type"""
        return _oechem.OEUCharVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEUCharVector self)"""
        return _oechem.OEUCharVector_pop_back(self)

    def erase(self, *args) -> "std::vector< unsigned char >::iterator":
        r"""
        erase(OEUCharVector self, std::vector< unsigned char >::iterator pos) -> std::vector< unsigned char >::iterator
        erase(OEUCharVector self, std::vector< unsigned char >::iterator first, std::vector< unsigned char >::iterator last) -> std::vector< unsigned char >::iterator
        """
        return _oechem.OEUCharVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEUCharVector self) -> OEUCharVector
        __init__(OEUCharVector self, OEUCharVector other) -> OEUCharVector
        __init__(OEUCharVector self, std::vector< unsigned char >::size_type size) -> OEUCharVector
        __init__(OEUCharVector self, std::vector< unsigned char >::size_type size, std::vector< unsigned char >::value_type const & value) -> OEUCharVector
        """
        _oechem.OEUCharVector_swiginit(self, _oechem.new_OEUCharVector(*args))

    def push_back(self, x: "std::vector< unsigned char >::value_type const &") -> "void":
        r"""push_back(OEUCharVector self, std::vector< unsigned char >::value_type const & x)"""
        return _oechem.OEUCharVector_push_back(self, x)

    def front(self) -> "std::vector< unsigned char >::value_type const &":
        r"""front(OEUCharVector self) -> std::vector< unsigned char >::value_type const &"""
        return _oechem.OEUCharVector_front(self)

    def back(self) -> "std::vector< unsigned char >::value_type const &":
        r"""back(OEUCharVector self) -> std::vector< unsigned char >::value_type const &"""
        return _oechem.OEUCharVector_back(self)

    def assign(self, n: "std::vector< unsigned char >::size_type", x: "std::vector< unsigned char >::value_type const &") -> "void":
        r"""assign(OEUCharVector self, std::vector< unsigned char >::size_type n, std::vector< unsigned char >::value_type const & x)"""
        return _oechem.OEUCharVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEUCharVector self, std::vector< unsigned char >::size_type new_size)
        resize(OEUCharVector self, std::vector< unsigned char >::size_type new_size, std::vector< unsigned char >::value_type const & x)
        """
        return _oechem.OEUCharVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEUCharVector self, std::vector< unsigned char >::iterator pos, std::vector< unsigned char >::value_type const & x) -> std::vector< unsigned char >::iterator
        insert(OEUCharVector self, std::vector< unsigned char >::iterator pos, std::vector< unsigned char >::size_type n, std::vector< unsigned char >::value_type const & x)
        """
        return _oechem.OEUCharVector_insert(self, *args)

    def reserve(self, n: "std::vector< unsigned char >::size_type") -> "void":
        r"""reserve(OEUCharVector self, std::vector< unsigned char >::size_type n)"""
        return _oechem.OEUCharVector_reserve(self, n)

    def capacity(self) -> "std::vector< unsigned char >::size_type":
        r"""capacity(OEUCharVector self) -> std::vector< unsigned char >::size_type"""
        return _oechem.OEUCharVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OEUCharVector

# Register OEUCharVector in _oechem:
_oechem.OEUCharVector_swigregister(OEUCharVector)

class OEFloatVector(object):
    r"""Proxy of C++ std::vector< float > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEFloatVector self) -> SwigPyIterator"""
        return _oechem.OEFloatVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEFloatVector self) -> bool"""
        return _oechem.OEFloatVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEFloatVector self) -> bool"""
        return _oechem.OEFloatVector___bool__(self)

    def __len__(self) -> "std::vector< float >::size_type":
        r"""__len__(OEFloatVector self) -> std::vector< float >::size_type"""
        return _oechem.OEFloatVector___len__(self)

    def __getslice__(self, i: "std::vector< float >::difference_type", j: "std::vector< float >::difference_type") -> "std::vector< float,std::allocator< float > > *":
        r"""__getslice__(OEFloatVector self, std::vector< float >::difference_type i, std::vector< float >::difference_type j) -> OEFloatVector"""
        return _oechem.OEFloatVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEFloatVector self, std::vector< float >::difference_type i, std::vector< float >::difference_type j)
        __setslice__(OEFloatVector self, std::vector< float >::difference_type i, std::vector< float >::difference_type j, OEFloatVector v)
        """
        return _oechem.OEFloatVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< float >::difference_type", j: "std::vector< float >::difference_type") -> "void":
        r"""__delslice__(OEFloatVector self, std::vector< float >::difference_type i, std::vector< float >::difference_type j)"""
        return _oechem.OEFloatVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEFloatVector self, std::vector< float >::difference_type i)
        __delitem__(OEFloatVector self, PySliceObject * slice)
        """
        return _oechem.OEFloatVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< float >::value_type const &":
        r"""
        __getitem__(OEFloatVector self, PySliceObject * slice) -> OEFloatVector
        __getitem__(OEFloatVector self, std::vector< float >::difference_type i) -> std::vector< float >::value_type const &
        """
        return _oechem.OEFloatVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEFloatVector self, PySliceObject * slice, OEFloatVector v)
        __setitem__(OEFloatVector self, PySliceObject * slice)
        __setitem__(OEFloatVector self, std::vector< float >::difference_type i, std::vector< float >::value_type const & x)
        """
        return _oechem.OEFloatVector___setitem__(self, *args)

    def pop(self) -> "std::vector< float >::value_type":
        r"""pop(OEFloatVector self) -> std::vector< float >::value_type"""
        return _oechem.OEFloatVector_pop(self)

    def append(self, x: "std::vector< float >::value_type const &") -> "void":
        r"""append(OEFloatVector self, std::vector< float >::value_type const & x)"""
        return _oechem.OEFloatVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEFloatVector self) -> bool"""
        return _oechem.OEFloatVector_empty(self)

    def size(self) -> "std::vector< float >::size_type":
        r"""size(OEFloatVector self) -> std::vector< float >::size_type"""
        return _oechem.OEFloatVector_size(self)

    def swap(self, v: "OEFloatVector") -> "void":
        r"""swap(OEFloatVector self, OEFloatVector v)"""
        return _oechem.OEFloatVector_swap(self, v)

    def begin(self) -> "std::vector< float >::iterator":
        r"""begin(OEFloatVector self) -> std::vector< float >::iterator"""
        return _oechem.OEFloatVector_begin(self)

    def end(self) -> "std::vector< float >::iterator":
        r"""end(OEFloatVector self) -> std::vector< float >::iterator"""
        return _oechem.OEFloatVector_end(self)

    def rbegin(self) -> "std::vector< float >::reverse_iterator":
        r"""rbegin(OEFloatVector self) -> std::vector< float >::reverse_iterator"""
        return _oechem.OEFloatVector_rbegin(self)

    def rend(self) -> "std::vector< float >::reverse_iterator":
        r"""rend(OEFloatVector self) -> std::vector< float >::reverse_iterator"""
        return _oechem.OEFloatVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OEFloatVector self)"""
        return _oechem.OEFloatVector_clear(self)

    def get_allocator(self) -> "std::vector< float >::allocator_type":
        r"""get_allocator(OEFloatVector self) -> std::vector< float >::allocator_type"""
        return _oechem.OEFloatVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEFloatVector self)"""
        return _oechem.OEFloatVector_pop_back(self)

    def erase(self, *args) -> "std::vector< float >::iterator":
        r"""
        erase(OEFloatVector self, std::vector< float >::iterator pos) -> std::vector< float >::iterator
        erase(OEFloatVector self, std::vector< float >::iterator first, std::vector< float >::iterator last) -> std::vector< float >::iterator
        """
        return _oechem.OEFloatVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEFloatVector self) -> OEFloatVector
        __init__(OEFloatVector self, OEFloatVector other) -> OEFloatVector
        __init__(OEFloatVector self, std::vector< float >::size_type size) -> OEFloatVector
        __init__(OEFloatVector self, std::vector< float >::size_type size, std::vector< float >::value_type const & value) -> OEFloatVector
        """
        _oechem.OEFloatVector_swiginit(self, _oechem.new_OEFloatVector(*args))

    def push_back(self, x: "std::vector< float >::value_type const &") -> "void":
        r"""push_back(OEFloatVector self, std::vector< float >::value_type const & x)"""
        return _oechem.OEFloatVector_push_back(self, x)

    def front(self) -> "std::vector< float >::value_type const &":
        r"""front(OEFloatVector self) -> std::vector< float >::value_type const &"""
        return _oechem.OEFloatVector_front(self)

    def back(self) -> "std::vector< float >::value_type const &":
        r"""back(OEFloatVector self) -> std::vector< float >::value_type const &"""
        return _oechem.OEFloatVector_back(self)

    def assign(self, n: "std::vector< float >::size_type", x: "std::vector< float >::value_type const &") -> "void":
        r"""assign(OEFloatVector self, std::vector< float >::size_type n, std::vector< float >::value_type const & x)"""
        return _oechem.OEFloatVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEFloatVector self, std::vector< float >::size_type new_size)
        resize(OEFloatVector self, std::vector< float >::size_type new_size, std::vector< float >::value_type const & x)
        """
        return _oechem.OEFloatVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEFloatVector self, std::vector< float >::iterator pos, std::vector< float >::value_type const & x) -> std::vector< float >::iterator
        insert(OEFloatVector self, std::vector< float >::iterator pos, std::vector< float >::size_type n, std::vector< float >::value_type const & x)
        """
        return _oechem.OEFloatVector_insert(self, *args)

    def reserve(self, n: "std::vector< float >::size_type") -> "void":
        r"""reserve(OEFloatVector self, std::vector< float >::size_type n)"""
        return _oechem.OEFloatVector_reserve(self, n)

    def capacity(self) -> "std::vector< float >::size_type":
        r"""capacity(OEFloatVector self) -> std::vector< float >::size_type"""
        return _oechem.OEFloatVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OEFloatVector

# Register OEFloatVector in _oechem:
_oechem.OEFloatVector_swigregister(OEFloatVector)

class OEDoubleVector(object):
    r"""Proxy of C++ std::vector< double > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEDoubleVector self) -> SwigPyIterator"""
        return _oechem.OEDoubleVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEDoubleVector self) -> bool"""
        return _oechem.OEDoubleVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEDoubleVector self) -> bool"""
        return _oechem.OEDoubleVector___bool__(self)

    def __len__(self) -> "std::vector< double >::size_type":
        r"""__len__(OEDoubleVector self) -> std::vector< double >::size_type"""
        return _oechem.OEDoubleVector___len__(self)

    def __getslice__(self, i: "std::vector< double >::difference_type", j: "std::vector< double >::difference_type") -> "std::vector< double,std::allocator< double > > *":
        r"""__getslice__(OEDoubleVector self, std::vector< double >::difference_type i, std::vector< double >::difference_type j) -> OEDoubleVector"""
        return _oechem.OEDoubleVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEDoubleVector self, std::vector< double >::difference_type i, std::vector< double >::difference_type j)
        __setslice__(OEDoubleVector self, std::vector< double >::difference_type i, std::vector< double >::difference_type j, OEDoubleVector v)
        """
        return _oechem.OEDoubleVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< double >::difference_type", j: "std::vector< double >::difference_type") -> "void":
        r"""__delslice__(OEDoubleVector self, std::vector< double >::difference_type i, std::vector< double >::difference_type j)"""
        return _oechem.OEDoubleVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEDoubleVector self, std::vector< double >::difference_type i)
        __delitem__(OEDoubleVector self, PySliceObject * slice)
        """
        return _oechem.OEDoubleVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< double >::value_type const &":
        r"""
        __getitem__(OEDoubleVector self, PySliceObject * slice) -> OEDoubleVector
        __getitem__(OEDoubleVector self, std::vector< double >::difference_type i) -> std::vector< double >::value_type const &
        """
        return _oechem.OEDoubleVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEDoubleVector self, PySliceObject * slice, OEDoubleVector v)
        __setitem__(OEDoubleVector self, PySliceObject * slice)
        __setitem__(OEDoubleVector self, std::vector< double >::difference_type i, std::vector< double >::value_type const & x)
        """
        return _oechem.OEDoubleVector___setitem__(self, *args)

    def pop(self) -> "std::vector< double >::value_type":
        r"""pop(OEDoubleVector self) -> std::vector< double >::value_type"""
        return _oechem.OEDoubleVector_pop(self)

    def append(self, x: "std::vector< double >::value_type const &") -> "void":
        r"""append(OEDoubleVector self, std::vector< double >::value_type const & x)"""
        return _oechem.OEDoubleVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEDoubleVector self) -> bool"""
        return _oechem.OEDoubleVector_empty(self)

    def size(self) -> "std::vector< double >::size_type":
        r"""size(OEDoubleVector self) -> std::vector< double >::size_type"""
        return _oechem.OEDoubleVector_size(self)

    def swap(self, v: "OEDoubleVector") -> "void":
        r"""swap(OEDoubleVector self, OEDoubleVector v)"""
        return _oechem.OEDoubleVector_swap(self, v)

    def begin(self) -> "std::vector< double >::iterator":
        r"""begin(OEDoubleVector self) -> std::vector< double >::iterator"""
        return _oechem.OEDoubleVector_begin(self)

    def end(self) -> "std::vector< double >::iterator":
        r"""end(OEDoubleVector self) -> std::vector< double >::iterator"""
        return _oechem.OEDoubleVector_end(self)

    def rbegin(self) -> "std::vector< double >::reverse_iterator":
        r"""rbegin(OEDoubleVector self) -> std::vector< double >::reverse_iterator"""
        return _oechem.OEDoubleVector_rbegin(self)

    def rend(self) -> "std::vector< double >::reverse_iterator":
        r"""rend(OEDoubleVector self) -> std::vector< double >::reverse_iterator"""
        return _oechem.OEDoubleVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OEDoubleVector self)"""
        return _oechem.OEDoubleVector_clear(self)

    def get_allocator(self) -> "std::vector< double >::allocator_type":
        r"""get_allocator(OEDoubleVector self) -> std::vector< double >::allocator_type"""
        return _oechem.OEDoubleVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEDoubleVector self)"""
        return _oechem.OEDoubleVector_pop_back(self)

    def erase(self, *args) -> "std::vector< double >::iterator":
        r"""
        erase(OEDoubleVector self, std::vector< double >::iterator pos) -> std::vector< double >::iterator
        erase(OEDoubleVector self, std::vector< double >::iterator first, std::vector< double >::iterator last) -> std::vector< double >::iterator
        """
        return _oechem.OEDoubleVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEDoubleVector self) -> OEDoubleVector
        __init__(OEDoubleVector self, OEDoubleVector other) -> OEDoubleVector
        __init__(OEDoubleVector self, std::vector< double >::size_type size) -> OEDoubleVector
        __init__(OEDoubleVector self, std::vector< double >::size_type size, std::vector< double >::value_type const & value) -> OEDoubleVector
        """
        _oechem.OEDoubleVector_swiginit(self, _oechem.new_OEDoubleVector(*args))

    def push_back(self, x: "std::vector< double >::value_type const &") -> "void":
        r"""push_back(OEDoubleVector self, std::vector< double >::value_type const & x)"""
        return _oechem.OEDoubleVector_push_back(self, x)

    def front(self) -> "std::vector< double >::value_type const &":
        r"""front(OEDoubleVector self) -> std::vector< double >::value_type const &"""
        return _oechem.OEDoubleVector_front(self)

    def back(self) -> "std::vector< double >::value_type const &":
        r"""back(OEDoubleVector self) -> std::vector< double >::value_type const &"""
        return _oechem.OEDoubleVector_back(self)

    def assign(self, n: "std::vector< double >::size_type", x: "std::vector< double >::value_type const &") -> "void":
        r"""assign(OEDoubleVector self, std::vector< double >::size_type n, std::vector< double >::value_type const & x)"""
        return _oechem.OEDoubleVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEDoubleVector self, std::vector< double >::size_type new_size)
        resize(OEDoubleVector self, std::vector< double >::size_type new_size, std::vector< double >::value_type const & x)
        """
        return _oechem.OEDoubleVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEDoubleVector self, std::vector< double >::iterator pos, std::vector< double >::value_type const & x) -> std::vector< double >::iterator
        insert(OEDoubleVector self, std::vector< double >::iterator pos, std::vector< double >::size_type n, std::vector< double >::value_type const & x)
        """
        return _oechem.OEDoubleVector_insert(self, *args)

    def reserve(self, n: "std::vector< double >::size_type") -> "void":
        r"""reserve(OEDoubleVector self, std::vector< double >::size_type n)"""
        return _oechem.OEDoubleVector_reserve(self, n)

    def capacity(self) -> "std::vector< double >::size_type":
        r"""capacity(OEDoubleVector self) -> std::vector< double >::size_type"""
        return _oechem.OEDoubleVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OEDoubleVector

# Register OEDoubleVector in _oechem:
_oechem.OEDoubleVector_swigregister(OEDoubleVector)

class OEStringVector(object):
    r"""Proxy of C++ std::vector< std::string > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEStringVector self) -> SwigPyIterator"""
        return _oechem.OEStringVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEStringVector self) -> bool"""
        return _oechem.OEStringVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEStringVector self) -> bool"""
        return _oechem.OEStringVector___bool__(self)

    def __len__(self) -> "std::vector< std::string >::size_type":
        r"""__len__(OEStringVector self) -> std::vector< std::string >::size_type"""
        return _oechem.OEStringVector___len__(self)

    def __getslice__(self, i: "std::vector< std::string >::difference_type", j: "std::vector< std::string >::difference_type") -> "std::vector< std::string,std::allocator< std::string > > *":
        r"""__getslice__(OEStringVector self, std::vector< std::string >::difference_type i, std::vector< std::string >::difference_type j) -> OEStringVector"""
        return _oechem.OEStringVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEStringVector self, std::vector< std::string >::difference_type i, std::vector< std::string >::difference_type j)
        __setslice__(OEStringVector self, std::vector< std::string >::difference_type i, std::vector< std::string >::difference_type j, OEStringVector v)
        """
        return _oechem.OEStringVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< std::string >::difference_type", j: "std::vector< std::string >::difference_type") -> "void":
        r"""__delslice__(OEStringVector self, std::vector< std::string >::difference_type i, std::vector< std::string >::difference_type j)"""
        return _oechem.OEStringVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEStringVector self, std::vector< std::string >::difference_type i)
        __delitem__(OEStringVector self, PySliceObject * slice)
        """
        return _oechem.OEStringVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< std::string >::value_type const &":
        r"""
        __getitem__(OEStringVector self, PySliceObject * slice) -> OEStringVector
        __getitem__(OEStringVector self, std::vector< std::string >::difference_type i) -> std::vector< std::string >::value_type const &
        """
        return _oechem.OEStringVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEStringVector self, PySliceObject * slice, OEStringVector v)
        __setitem__(OEStringVector self, PySliceObject * slice)
        __setitem__(OEStringVector self, std::vector< std::string >::difference_type i, std::vector< std::string >::value_type const & x)
        """
        return _oechem.OEStringVector___setitem__(self, *args)

    def pop(self) -> "std::vector< std::string >::value_type":
        r"""pop(OEStringVector self) -> std::vector< std::string >::value_type"""
        return _oechem.OEStringVector_pop(self)

    def append(self, x: "std::vector< std::string >::value_type const &") -> "void":
        r"""append(OEStringVector self, std::vector< std::string >::value_type const & x)"""
        return _oechem.OEStringVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEStringVector self) -> bool"""
        return _oechem.OEStringVector_empty(self)

    def size(self) -> "std::vector< std::string >::size_type":
        r"""size(OEStringVector self) -> std::vector< std::string >::size_type"""
        return _oechem.OEStringVector_size(self)

    def swap(self, v: "OEStringVector") -> "void":
        r"""swap(OEStringVector self, OEStringVector v)"""
        return _oechem.OEStringVector_swap(self, v)

    def begin(self) -> "std::vector< std::string >::iterator":
        r"""begin(OEStringVector self) -> std::vector< std::string >::iterator"""
        return _oechem.OEStringVector_begin(self)

    def end(self) -> "std::vector< std::string >::iterator":
        r"""end(OEStringVector self) -> std::vector< std::string >::iterator"""
        return _oechem.OEStringVector_end(self)

    def rbegin(self) -> "std::vector< std::string >::reverse_iterator":
        r"""rbegin(OEStringVector self) -> std::vector< std::string >::reverse_iterator"""
        return _oechem.OEStringVector_rbegin(self)

    def rend(self) -> "std::vector< std::string >::reverse_iterator":
        r"""rend(OEStringVector self) -> std::vector< std::string >::reverse_iterator"""
        return _oechem.OEStringVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OEStringVector self)"""
        return _oechem.OEStringVector_clear(self)

    def get_allocator(self) -> "std::vector< std::string >::allocator_type":
        r"""get_allocator(OEStringVector self) -> std::vector< std::string >::allocator_type"""
        return _oechem.OEStringVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEStringVector self)"""
        return _oechem.OEStringVector_pop_back(self)

    def erase(self, *args) -> "std::vector< std::string >::iterator":
        r"""
        erase(OEStringVector self, std::vector< std::string >::iterator pos) -> std::vector< std::string >::iterator
        erase(OEStringVector self, std::vector< std::string >::iterator first, std::vector< std::string >::iterator last) -> std::vector< std::string >::iterator
        """
        return _oechem.OEStringVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEStringVector self) -> OEStringVector
        __init__(OEStringVector self, OEStringVector other) -> OEStringVector
        __init__(OEStringVector self, std::vector< std::string >::size_type size) -> OEStringVector
        __init__(OEStringVector self, std::vector< std::string >::size_type size, std::vector< std::string >::value_type const & value) -> OEStringVector
        """
        _oechem.OEStringVector_swiginit(self, _oechem.new_OEStringVector(*args))

    def push_back(self, x: "std::vector< std::string >::value_type const &") -> "void":
        r"""push_back(OEStringVector self, std::vector< std::string >::value_type const & x)"""
        return _oechem.OEStringVector_push_back(self, x)

    def front(self) -> "std::vector< std::string >::value_type const &":
        r"""front(OEStringVector self) -> std::vector< std::string >::value_type const &"""
        return _oechem.OEStringVector_front(self)

    def back(self) -> "std::vector< std::string >::value_type const &":
        r"""back(OEStringVector self) -> std::vector< std::string >::value_type const &"""
        return _oechem.OEStringVector_back(self)

    def assign(self, n: "std::vector< std::string >::size_type", x: "std::vector< std::string >::value_type const &") -> "void":
        r"""assign(OEStringVector self, std::vector< std::string >::size_type n, std::vector< std::string >::value_type const & x)"""
        return _oechem.OEStringVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEStringVector self, std::vector< std::string >::size_type new_size)
        resize(OEStringVector self, std::vector< std::string >::size_type new_size, std::vector< std::string >::value_type const & x)
        """
        return _oechem.OEStringVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEStringVector self, std::vector< std::string >::iterator pos, std::vector< std::string >::value_type const & x) -> std::vector< std::string >::iterator
        insert(OEStringVector self, std::vector< std::string >::iterator pos, std::vector< std::string >::size_type n, std::vector< std::string >::value_type const & x)
        """
        return _oechem.OEStringVector_insert(self, *args)

    def reserve(self, n: "std::vector< std::string >::size_type") -> "void":
        r"""reserve(OEStringVector self, std::vector< std::string >::size_type n)"""
        return _oechem.OEStringVector_reserve(self, n)

    def capacity(self) -> "std::vector< std::string >::size_type":
        r"""capacity(OEStringVector self) -> std::vector< std::string >::size_type"""
        return _oechem.OEStringVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OEStringVector

# Register OEStringVector in _oechem:
_oechem.OEStringVector_swigregister(OEStringVector)

OE_PYTHON_SWIG = _oechem.OE_PYTHON_SWIG



def _isAtomList(alist):
  if isinstance(alist, list):
    for item in alist:
      if not isinstance(item, OEAtomBase):
        return False
    return True
  else:
    return False

def _isBondList(alist):
  if isinstance(alist, list):
    for item in alist:
      if not isinstance(item, OEBondBase):
        return False
    return True
  else:
    return False

def NewGroup(self, type, *args):
  argcount = len(args)
  if argcount == 1:
    if _isAtomList(args[0]) or isinstance(args[0], OEAtomVector):
      return self._NewGroup_Atoms(type, args[0])
    elif _isBondList(args[0]) or isinstance(args[0], OEBondVector):
      return self._NewGroup_Bonds(type, args[0])
    elif isinstance(args[0], OEAtomBondSet):
      return self._NewGroup_AtomBondSet(type, args[0])
    else:
      return
  elif argcount == 2:
    return self._NewGroup_AtomsBonds(type, args[0], args[1])
  else:
    return


def PopEmptyIter() -> "void *":
    r"""PopEmptyIter() -> void *"""
    return _oechem.PopEmptyIter()

def PushEmptyIter(arg1: "void *") -> "void":
    r"""PushEmptyIter(void * arg1)"""
    return _oechem.PushEmptyIter(arg1)


IntArray = OEIntArray
FloatArray = OEFloatArray
DoubleArray = OEDoubleArray


class OEResidueVector(object):
    r"""Proxy of C++ std::vector< OEChem::OEResidue > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEResidueVector self) -> SwigPyIterator"""
        return _oechem.OEResidueVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEResidueVector self) -> bool"""
        return _oechem.OEResidueVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEResidueVector self) -> bool"""
        return _oechem.OEResidueVector___bool__(self)

    def __len__(self) -> "std::vector< OEChem::OEResidue >::size_type":
        r"""__len__(OEResidueVector self) -> std::vector< OEChem::OEResidue >::size_type"""
        return _oechem.OEResidueVector___len__(self)

    def __getslice__(self, i: "std::vector< OEChem::OEResidue >::difference_type", j: "std::vector< OEChem::OEResidue >::difference_type") -> "std::vector< OEChem::OEResidue,std::allocator< OEChem::OEResidue > > *":
        r"""__getslice__(OEResidueVector self, std::vector< OEChem::OEResidue >::difference_type i, std::vector< OEChem::OEResidue >::difference_type j) -> OEResidueVector"""
        return _oechem.OEResidueVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEResidueVector self, std::vector< OEChem::OEResidue >::difference_type i, std::vector< OEChem::OEResidue >::difference_type j)
        __setslice__(OEResidueVector self, std::vector< OEChem::OEResidue >::difference_type i, std::vector< OEChem::OEResidue >::difference_type j, OEResidueVector v)
        """
        return _oechem.OEResidueVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< OEChem::OEResidue >::difference_type", j: "std::vector< OEChem::OEResidue >::difference_type") -> "void":
        r"""__delslice__(OEResidueVector self, std::vector< OEChem::OEResidue >::difference_type i, std::vector< OEChem::OEResidue >::difference_type j)"""
        return _oechem.OEResidueVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEResidueVector self, std::vector< OEChem::OEResidue >::difference_type i)
        __delitem__(OEResidueVector self, PySliceObject * slice)
        """
        return _oechem.OEResidueVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< OEChem::OEResidue >::value_type const &":
        r"""
        __getitem__(OEResidueVector self, PySliceObject * slice) -> OEResidueVector
        __getitem__(OEResidueVector self, std::vector< OEChem::OEResidue >::difference_type i) -> OEResidue
        """
        return _oechem.OEResidueVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEResidueVector self, PySliceObject * slice, OEResidueVector v)
        __setitem__(OEResidueVector self, PySliceObject * slice)
        __setitem__(OEResidueVector self, std::vector< OEChem::OEResidue >::difference_type i, OEResidue x)
        """
        return _oechem.OEResidueVector___setitem__(self, *args)

    def pop(self) -> "std::vector< OEChem::OEResidue >::value_type":
        r"""pop(OEResidueVector self) -> OEResidue"""
        return _oechem.OEResidueVector_pop(self)

    def append(self, x: "OEResidue") -> "void":
        r"""append(OEResidueVector self, OEResidue x)"""
        return _oechem.OEResidueVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEResidueVector self) -> bool"""
        return _oechem.OEResidueVector_empty(self)

    def size(self) -> "std::vector< OEChem::OEResidue >::size_type":
        r"""size(OEResidueVector self) -> std::vector< OEChem::OEResidue >::size_type"""
        return _oechem.OEResidueVector_size(self)

    def swap(self, v: "OEResidueVector") -> "void":
        r"""swap(OEResidueVector self, OEResidueVector v)"""
        return _oechem.OEResidueVector_swap(self, v)

    def begin(self) -> "std::vector< OEChem::OEResidue >::iterator":
        r"""begin(OEResidueVector self) -> std::vector< OEChem::OEResidue >::iterator"""
        return _oechem.OEResidueVector_begin(self)

    def end(self) -> "std::vector< OEChem::OEResidue >::iterator":
        r"""end(OEResidueVector self) -> std::vector< OEChem::OEResidue >::iterator"""
        return _oechem.OEResidueVector_end(self)

    def rbegin(self) -> "std::vector< OEChem::OEResidue >::reverse_iterator":
        r"""rbegin(OEResidueVector self) -> std::vector< OEChem::OEResidue >::reverse_iterator"""
        return _oechem.OEResidueVector_rbegin(self)

    def rend(self) -> "std::vector< OEChem::OEResidue >::reverse_iterator":
        r"""rend(OEResidueVector self) -> std::vector< OEChem::OEResidue >::reverse_iterator"""
        return _oechem.OEResidueVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OEResidueVector self)"""
        return _oechem.OEResidueVector_clear(self)

    def get_allocator(self) -> "std::vector< OEChem::OEResidue >::allocator_type":
        r"""get_allocator(OEResidueVector self) -> std::vector< OEChem::OEResidue >::allocator_type"""
        return _oechem.OEResidueVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEResidueVector self)"""
        return _oechem.OEResidueVector_pop_back(self)

    def erase(self, *args) -> "std::vector< OEChem::OEResidue >::iterator":
        r"""
        erase(OEResidueVector self, std::vector< OEChem::OEResidue >::iterator pos) -> std::vector< OEChem::OEResidue >::iterator
        erase(OEResidueVector self, std::vector< OEChem::OEResidue >::iterator first, std::vector< OEChem::OEResidue >::iterator last) -> std::vector< OEChem::OEResidue >::iterator
        """
        return _oechem.OEResidueVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEResidueVector self) -> OEResidueVector
        __init__(OEResidueVector self, OEResidueVector other) -> OEResidueVector
        __init__(OEResidueVector self, std::vector< OEChem::OEResidue >::size_type size) -> OEResidueVector
        __init__(OEResidueVector self, std::vector< OEChem::OEResidue >::size_type size, OEResidue value) -> OEResidueVector
        """
        _oechem.OEResidueVector_swiginit(self, _oechem.new_OEResidueVector(*args))

    def push_back(self, x: "OEResidue") -> "void":
        r"""push_back(OEResidueVector self, OEResidue x)"""
        return _oechem.OEResidueVector_push_back(self, x)

    def front(self) -> "std::vector< OEChem::OEResidue >::value_type const &":
        r"""front(OEResidueVector self) -> OEResidue"""
        return _oechem.OEResidueVector_front(self)

    def back(self) -> "std::vector< OEChem::OEResidue >::value_type const &":
        r"""back(OEResidueVector self) -> OEResidue"""
        return _oechem.OEResidueVector_back(self)

    def assign(self, n: "std::vector< OEChem::OEResidue >::size_type", x: "OEResidue") -> "void":
        r"""assign(OEResidueVector self, std::vector< OEChem::OEResidue >::size_type n, OEResidue x)"""
        return _oechem.OEResidueVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEResidueVector self, std::vector< OEChem::OEResidue >::size_type new_size)
        resize(OEResidueVector self, std::vector< OEChem::OEResidue >::size_type new_size, OEResidue x)
        """
        return _oechem.OEResidueVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEResidueVector self, std::vector< OEChem::OEResidue >::iterator pos, OEResidue x) -> std::vector< OEChem::OEResidue >::iterator
        insert(OEResidueVector self, std::vector< OEChem::OEResidue >::iterator pos, std::vector< OEChem::OEResidue >::size_type n, OEResidue x)
        """
        return _oechem.OEResidueVector_insert(self, *args)

    def reserve(self, n: "std::vector< OEChem::OEResidue >::size_type") -> "void":
        r"""reserve(OEResidueVector self, std::vector< OEChem::OEResidue >::size_type n)"""
        return _oechem.OEResidueVector_reserve(self, n)

    def capacity(self) -> "std::vector< OEChem::OEResidue >::size_type":
        r"""capacity(OEResidueVector self) -> std::vector< OEChem::OEResidue >::size_type"""
        return _oechem.OEResidueVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OEResidueVector

# Register OEResidueVector in _oechem:
_oechem.OEResidueVector_swigregister(OEResidueVector)

class OEAtomVector(object):
    r"""Proxy of C++ std::vector< OEChem::OEAtomBase * > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEAtomVector self) -> SwigPyIterator"""
        return _oechem.OEAtomVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEAtomVector self) -> bool"""
        return _oechem.OEAtomVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEAtomVector self) -> bool"""
        return _oechem.OEAtomVector___bool__(self)

    def __len__(self) -> "std::vector< OEChem::OEAtomBase * >::size_type":
        r"""__len__(OEAtomVector self) -> std::vector< OEChem::OEAtomBase * >::size_type"""
        return _oechem.OEAtomVector___len__(self)

    def __getslice__(self, i: "std::vector< OEChem::OEAtomBase * >::difference_type", j: "std::vector< OEChem::OEAtomBase * >::difference_type") -> "std::vector< OEChem::OEAtomBase *,std::allocator< OEChem::OEAtomBase * > > *":
        r"""__getslice__(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::difference_type i, std::vector< OEChem::OEAtomBase * >::difference_type j) -> OEAtomVector"""
        return _oechem.OEAtomVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::difference_type i, std::vector< OEChem::OEAtomBase * >::difference_type j)
        __setslice__(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::difference_type i, std::vector< OEChem::OEAtomBase * >::difference_type j, OEAtomVector v)
        """
        return _oechem.OEAtomVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< OEChem::OEAtomBase * >::difference_type", j: "std::vector< OEChem::OEAtomBase * >::difference_type") -> "void":
        r"""__delslice__(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::difference_type i, std::vector< OEChem::OEAtomBase * >::difference_type j)"""
        return _oechem.OEAtomVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::difference_type i)
        __delitem__(OEAtomVector self, PySliceObject * slice)
        """
        return _oechem.OEAtomVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< OEChem::OEAtomBase * >::value_type":
        r"""
        __getitem__(OEAtomVector self, PySliceObject * slice) -> OEAtomVector
        __getitem__(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::difference_type i) -> OEAtomBase
        """
        return _oechem.OEAtomVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEAtomVector self, PySliceObject * slice, OEAtomVector v)
        __setitem__(OEAtomVector self, PySliceObject * slice)
        __setitem__(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::difference_type i, OEAtomBase x)
        """
        return _oechem.OEAtomVector___setitem__(self, *args)

    def pop(self) -> "std::vector< OEChem::OEAtomBase * >::value_type":
        r"""pop(OEAtomVector self) -> OEAtomBase"""
        return _oechem.OEAtomVector_pop(self)

    def append(self, x: "OEAtomBase") -> "void":
        r"""append(OEAtomVector self, OEAtomBase x)"""
        return _oechem.OEAtomVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEAtomVector self) -> bool"""
        return _oechem.OEAtomVector_empty(self)

    def size(self) -> "std::vector< OEChem::OEAtomBase * >::size_type":
        r"""size(OEAtomVector self) -> std::vector< OEChem::OEAtomBase * >::size_type"""
        return _oechem.OEAtomVector_size(self)

    def swap(self, v: "OEAtomVector") -> "void":
        r"""swap(OEAtomVector self, OEAtomVector v)"""
        return _oechem.OEAtomVector_swap(self, v)

    def begin(self) -> "std::vector< OEChem::OEAtomBase * >::iterator":
        r"""begin(OEAtomVector self) -> std::vector< OEChem::OEAtomBase * >::iterator"""
        return _oechem.OEAtomVector_begin(self)

    def end(self) -> "std::vector< OEChem::OEAtomBase * >::iterator":
        r"""end(OEAtomVector self) -> std::vector< OEChem::OEAtomBase * >::iterator"""
        return _oechem.OEAtomVector_end(self)

    def rbegin(self) -> "std::vector< OEChem::OEAtomBase * >::reverse_iterator":
        r"""rbegin(OEAtomVector self) -> std::vector< OEChem::OEAtomBase * >::reverse_iterator"""
        return _oechem.OEAtomVector_rbegin(self)

    def rend(self) -> "std::vector< OEChem::OEAtomBase * >::reverse_iterator":
        r"""rend(OEAtomVector self) -> std::vector< OEChem::OEAtomBase * >::reverse_iterator"""
        return _oechem.OEAtomVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OEAtomVector self)"""
        return _oechem.OEAtomVector_clear(self)

    def get_allocator(self) -> "std::vector< OEChem::OEAtomBase * >::allocator_type":
        r"""get_allocator(OEAtomVector self) -> std::vector< OEChem::OEAtomBase * >::allocator_type"""
        return _oechem.OEAtomVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEAtomVector self)"""
        return _oechem.OEAtomVector_pop_back(self)

    def erase(self, *args) -> "std::vector< OEChem::OEAtomBase * >::iterator":
        r"""
        erase(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::iterator pos) -> std::vector< OEChem::OEAtomBase * >::iterator
        erase(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::iterator first, std::vector< OEChem::OEAtomBase * >::iterator last) -> std::vector< OEChem::OEAtomBase * >::iterator
        """
        return _oechem.OEAtomVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEAtomVector self) -> OEAtomVector
        __init__(OEAtomVector self, OEAtomVector other) -> OEAtomVector
        __init__(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::size_type size) -> OEAtomVector
        __init__(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::size_type size, OEAtomBase value) -> OEAtomVector
        """
        _oechem.OEAtomVector_swiginit(self, _oechem.new_OEAtomVector(*args))

    def push_back(self, x: "OEAtomBase") -> "void":
        r"""push_back(OEAtomVector self, OEAtomBase x)"""
        return _oechem.OEAtomVector_push_back(self, x)

    def front(self) -> "std::vector< OEChem::OEAtomBase * >::value_type":
        r"""front(OEAtomVector self) -> OEAtomBase"""
        return _oechem.OEAtomVector_front(self)

    def back(self) -> "std::vector< OEChem::OEAtomBase * >::value_type":
        r"""back(OEAtomVector self) -> OEAtomBase"""
        return _oechem.OEAtomVector_back(self)

    def assign(self, n: "std::vector< OEChem::OEAtomBase * >::size_type", x: "OEAtomBase") -> "void":
        r"""assign(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::size_type n, OEAtomBase x)"""
        return _oechem.OEAtomVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::size_type new_size)
        resize(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::size_type new_size, OEAtomBase x)
        """
        return _oechem.OEAtomVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::iterator pos, OEAtomBase x) -> std::vector< OEChem::OEAtomBase * >::iterator
        insert(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::iterator pos, std::vector< OEChem::OEAtomBase * >::size_type n, OEAtomBase x)
        """
        return _oechem.OEAtomVector_insert(self, *args)

    def reserve(self, n: "std::vector< OEChem::OEAtomBase * >::size_type") -> "void":
        r"""reserve(OEAtomVector self, std::vector< OEChem::OEAtomBase * >::size_type n)"""
        return _oechem.OEAtomVector_reserve(self, n)

    def capacity(self) -> "std::vector< OEChem::OEAtomBase * >::size_type":
        r"""capacity(OEAtomVector self) -> std::vector< OEChem::OEAtomBase * >::size_type"""
        return _oechem.OEAtomVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OEAtomVector

# Register OEAtomVector in _oechem:
_oechem.OEAtomVector_swigregister(OEAtomVector)

class OEBondVector(object):
    r"""Proxy of C++ std::vector< OEChem::OEBondBase * > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEBondVector self) -> SwigPyIterator"""
        return _oechem.OEBondVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEBondVector self) -> bool"""
        return _oechem.OEBondVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEBondVector self) -> bool"""
        return _oechem.OEBondVector___bool__(self)

    def __len__(self) -> "std::vector< OEChem::OEBondBase * >::size_type":
        r"""__len__(OEBondVector self) -> std::vector< OEChem::OEBondBase * >::size_type"""
        return _oechem.OEBondVector___len__(self)

    def __getslice__(self, i: "std::vector< OEChem::OEBondBase * >::difference_type", j: "std::vector< OEChem::OEBondBase * >::difference_type") -> "std::vector< OEChem::OEBondBase *,std::allocator< OEChem::OEBondBase * > > *":
        r"""__getslice__(OEBondVector self, std::vector< OEChem::OEBondBase * >::difference_type i, std::vector< OEChem::OEBondBase * >::difference_type j) -> OEBondVector"""
        return _oechem.OEBondVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEBondVector self, std::vector< OEChem::OEBondBase * >::difference_type i, std::vector< OEChem::OEBondBase * >::difference_type j)
        __setslice__(OEBondVector self, std::vector< OEChem::OEBondBase * >::difference_type i, std::vector< OEChem::OEBondBase * >::difference_type j, OEBondVector v)
        """
        return _oechem.OEBondVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< OEChem::OEBondBase * >::difference_type", j: "std::vector< OEChem::OEBondBase * >::difference_type") -> "void":
        r"""__delslice__(OEBondVector self, std::vector< OEChem::OEBondBase * >::difference_type i, std::vector< OEChem::OEBondBase * >::difference_type j)"""
        return _oechem.OEBondVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEBondVector self, std::vector< OEChem::OEBondBase * >::difference_type i)
        __delitem__(OEBondVector self, PySliceObject * slice)
        """
        return _oechem.OEBondVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< OEChem::OEBondBase * >::value_type":
        r"""
        __getitem__(OEBondVector self, PySliceObject * slice) -> OEBondVector
        __getitem__(OEBondVector self, std::vector< OEChem::OEBondBase * >::difference_type i) -> OEBondBase
        """
        return _oechem.OEBondVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEBondVector self, PySliceObject * slice, OEBondVector v)
        __setitem__(OEBondVector self, PySliceObject * slice)
        __setitem__(OEBondVector self, std::vector< OEChem::OEBondBase * >::difference_type i, OEBondBase x)
        """
        return _oechem.OEBondVector___setitem__(self, *args)

    def pop(self) -> "std::vector< OEChem::OEBondBase * >::value_type":
        r"""pop(OEBondVector self) -> OEBondBase"""
        return _oechem.OEBondVector_pop(self)

    def append(self, x: "OEBondBase") -> "void":
        r"""append(OEBondVector self, OEBondBase x)"""
        return _oechem.OEBondVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEBondVector self) -> bool"""
        return _oechem.OEBondVector_empty(self)

    def size(self) -> "std::vector< OEChem::OEBondBase * >::size_type":
        r"""size(OEBondVector self) -> std::vector< OEChem::OEBondBase * >::size_type"""
        return _oechem.OEBondVector_size(self)

    def swap(self, v: "OEBondVector") -> "void":
        r"""swap(OEBondVector self, OEBondVector v)"""
        return _oechem.OEBondVector_swap(self, v)

    def begin(self) -> "std::vector< OEChem::OEBondBase * >::iterator":
        r"""begin(OEBondVector self) -> std::vector< OEChem::OEBondBase * >::iterator"""
        return _oechem.OEBondVector_begin(self)

    def end(self) -> "std::vector< OEChem::OEBondBase * >::iterator":
        r"""end(OEBondVector self) -> std::vector< OEChem::OEBondBase * >::iterator"""
        return _oechem.OEBondVector_end(self)

    def rbegin(self) -> "std::vector< OEChem::OEBondBase * >::reverse_iterator":
        r"""rbegin(OEBondVector self) -> std::vector< OEChem::OEBondBase * >::reverse_iterator"""
        return _oechem.OEBondVector_rbegin(self)

    def rend(self) -> "std::vector< OEChem::OEBondBase * >::reverse_iterator":
        r"""rend(OEBondVector self) -> std::vector< OEChem::OEBondBase * >::reverse_iterator"""
        return _oechem.OEBondVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OEBondVector self)"""
        return _oechem.OEBondVector_clear(self)

    def get_allocator(self) -> "std::vector< OEChem::OEBondBase * >::allocator_type":
        r"""get_allocator(OEBondVector self) -> std::vector< OEChem::OEBondBase * >::allocator_type"""
        return _oechem.OEBondVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEBondVector self)"""
        return _oechem.OEBondVector_pop_back(self)

    def erase(self, *args) -> "std::vector< OEChem::OEBondBase * >::iterator":
        r"""
        erase(OEBondVector self, std::vector< OEChem::OEBondBase * >::iterator pos) -> std::vector< OEChem::OEBondBase * >::iterator
        erase(OEBondVector self, std::vector< OEChem::OEBondBase * >::iterator first, std::vector< OEChem::OEBondBase * >::iterator last) -> std::vector< OEChem::OEBondBase * >::iterator
        """
        return _oechem.OEBondVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEBondVector self) -> OEBondVector
        __init__(OEBondVector self, OEBondVector other) -> OEBondVector
        __init__(OEBondVector self, std::vector< OEChem::OEBondBase * >::size_type size) -> OEBondVector
        __init__(OEBondVector self, std::vector< OEChem::OEBondBase * >::size_type size, OEBondBase value) -> OEBondVector
        """
        _oechem.OEBondVector_swiginit(self, _oechem.new_OEBondVector(*args))

    def push_back(self, x: "OEBondBase") -> "void":
        r"""push_back(OEBondVector self, OEBondBase x)"""
        return _oechem.OEBondVector_push_back(self, x)

    def front(self) -> "std::vector< OEChem::OEBondBase * >::value_type":
        r"""front(OEBondVector self) -> OEBondBase"""
        return _oechem.OEBondVector_front(self)

    def back(self) -> "std::vector< OEChem::OEBondBase * >::value_type":
        r"""back(OEBondVector self) -> OEBondBase"""
        return _oechem.OEBondVector_back(self)

    def assign(self, n: "std::vector< OEChem::OEBondBase * >::size_type", x: "OEBondBase") -> "void":
        r"""assign(OEBondVector self, std::vector< OEChem::OEBondBase * >::size_type n, OEBondBase x)"""
        return _oechem.OEBondVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEBondVector self, std::vector< OEChem::OEBondBase * >::size_type new_size)
        resize(OEBondVector self, std::vector< OEChem::OEBondBase * >::size_type new_size, OEBondBase x)
        """
        return _oechem.OEBondVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEBondVector self, std::vector< OEChem::OEBondBase * >::iterator pos, OEBondBase x) -> std::vector< OEChem::OEBondBase * >::iterator
        insert(OEBondVector self, std::vector< OEChem::OEBondBase * >::iterator pos, std::vector< OEChem::OEBondBase * >::size_type n, OEBondBase x)
        """
        return _oechem.OEBondVector_insert(self, *args)

    def reserve(self, n: "std::vector< OEChem::OEBondBase * >::size_type") -> "void":
        r"""reserve(OEBondVector self, std::vector< OEChem::OEBondBase * >::size_type n)"""
        return _oechem.OEBondVector_reserve(self, n)

    def capacity(self) -> "std::vector< OEChem::OEBondBase * >::size_type":
        r"""capacity(OEBondVector self) -> std::vector< OEChem::OEBondBase * >::size_type"""
        return _oechem.OEBondVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OEBondVector

# Register OEBondVector in _oechem:
_oechem.OEBondVector_swigregister(OEBondVector)

class OEAtomBondSetVector(object):
    r"""Proxy of C++ std::vector< OEChem::OEAtomBondSet > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEAtomBondSetVector self) -> SwigPyIterator"""
        return _oechem.OEAtomBondSetVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEAtomBondSetVector self) -> bool"""
        return _oechem.OEAtomBondSetVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEAtomBondSetVector self) -> bool"""
        return _oechem.OEAtomBondSetVector___bool__(self)

    def __len__(self) -> "std::vector< OEChem::OEAtomBondSet >::size_type":
        r"""__len__(OEAtomBondSetVector self) -> std::vector< OEChem::OEAtomBondSet >::size_type"""
        return _oechem.OEAtomBondSetVector___len__(self)

    def __getslice__(self, i: "std::vector< OEChem::OEAtomBondSet >::difference_type", j: "std::vector< OEChem::OEAtomBondSet >::difference_type") -> "std::vector< OEChem::OEAtomBondSet,std::allocator< OEChem::OEAtomBondSet > > *":
        r"""__getslice__(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::difference_type i, std::vector< OEChem::OEAtomBondSet >::difference_type j) -> OEAtomBondSetVector"""
        return _oechem.OEAtomBondSetVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::difference_type i, std::vector< OEChem::OEAtomBondSet >::difference_type j)
        __setslice__(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::difference_type i, std::vector< OEChem::OEAtomBondSet >::difference_type j, OEAtomBondSetVector v)
        """
        return _oechem.OEAtomBondSetVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< OEChem::OEAtomBondSet >::difference_type", j: "std::vector< OEChem::OEAtomBondSet >::difference_type") -> "void":
        r"""__delslice__(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::difference_type i, std::vector< OEChem::OEAtomBondSet >::difference_type j)"""
        return _oechem.OEAtomBondSetVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::difference_type i)
        __delitem__(OEAtomBondSetVector self, PySliceObject * slice)
        """
        return _oechem.OEAtomBondSetVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< OEChem::OEAtomBondSet >::value_type const &":
        r"""
        __getitem__(OEAtomBondSetVector self, PySliceObject * slice) -> OEAtomBondSetVector
        __getitem__(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::difference_type i) -> OEAtomBondSet
        """
        return _oechem.OEAtomBondSetVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEAtomBondSetVector self, PySliceObject * slice, OEAtomBondSetVector v)
        __setitem__(OEAtomBondSetVector self, PySliceObject * slice)
        __setitem__(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::difference_type i, OEAtomBondSet x)
        """
        return _oechem.OEAtomBondSetVector___setitem__(self, *args)

    def pop(self) -> "std::vector< OEChem::OEAtomBondSet >::value_type":
        r"""pop(OEAtomBondSetVector self) -> OEAtomBondSet"""
        return _oechem.OEAtomBondSetVector_pop(self)

    def append(self, x: "OEAtomBondSet") -> "void":
        r"""append(OEAtomBondSetVector self, OEAtomBondSet x)"""
        return _oechem.OEAtomBondSetVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEAtomBondSetVector self) -> bool"""
        return _oechem.OEAtomBondSetVector_empty(self)

    def size(self) -> "std::vector< OEChem::OEAtomBondSet >::size_type":
        r"""size(OEAtomBondSetVector self) -> std::vector< OEChem::OEAtomBondSet >::size_type"""
        return _oechem.OEAtomBondSetVector_size(self)

    def swap(self, v: "OEAtomBondSetVector") -> "void":
        r"""swap(OEAtomBondSetVector self, OEAtomBondSetVector v)"""
        return _oechem.OEAtomBondSetVector_swap(self, v)

    def begin(self) -> "std::vector< OEChem::OEAtomBondSet >::iterator":
        r"""begin(OEAtomBondSetVector self) -> std::vector< OEChem::OEAtomBondSet >::iterator"""
        return _oechem.OEAtomBondSetVector_begin(self)

    def end(self) -> "std::vector< OEChem::OEAtomBondSet >::iterator":
        r"""end(OEAtomBondSetVector self) -> std::vector< OEChem::OEAtomBondSet >::iterator"""
        return _oechem.OEAtomBondSetVector_end(self)

    def rbegin(self) -> "std::vector< OEChem::OEAtomBondSet >::reverse_iterator":
        r"""rbegin(OEAtomBondSetVector self) -> std::vector< OEChem::OEAtomBondSet >::reverse_iterator"""
        return _oechem.OEAtomBondSetVector_rbegin(self)

    def rend(self) -> "std::vector< OEChem::OEAtomBondSet >::reverse_iterator":
        r"""rend(OEAtomBondSetVector self) -> std::vector< OEChem::OEAtomBondSet >::reverse_iterator"""
        return _oechem.OEAtomBondSetVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OEAtomBondSetVector self)"""
        return _oechem.OEAtomBondSetVector_clear(self)

    def get_allocator(self) -> "std::vector< OEChem::OEAtomBondSet >::allocator_type":
        r"""get_allocator(OEAtomBondSetVector self) -> std::vector< OEChem::OEAtomBondSet >::allocator_type"""
        return _oechem.OEAtomBondSetVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEAtomBondSetVector self)"""
        return _oechem.OEAtomBondSetVector_pop_back(self)

    def erase(self, *args) -> "std::vector< OEChem::OEAtomBondSet >::iterator":
        r"""
        erase(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::iterator pos) -> std::vector< OEChem::OEAtomBondSet >::iterator
        erase(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::iterator first, std::vector< OEChem::OEAtomBondSet >::iterator last) -> std::vector< OEChem::OEAtomBondSet >::iterator
        """
        return _oechem.OEAtomBondSetVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEAtomBondSetVector self) -> OEAtomBondSetVector
        __init__(OEAtomBondSetVector self, OEAtomBondSetVector other) -> OEAtomBondSetVector
        __init__(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::size_type size) -> OEAtomBondSetVector
        __init__(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::size_type size, OEAtomBondSet value) -> OEAtomBondSetVector
        """
        _oechem.OEAtomBondSetVector_swiginit(self, _oechem.new_OEAtomBondSetVector(*args))

    def push_back(self, x: "OEAtomBondSet") -> "void":
        r"""push_back(OEAtomBondSetVector self, OEAtomBondSet x)"""
        return _oechem.OEAtomBondSetVector_push_back(self, x)

    def front(self) -> "std::vector< OEChem::OEAtomBondSet >::value_type const &":
        r"""front(OEAtomBondSetVector self) -> OEAtomBondSet"""
        return _oechem.OEAtomBondSetVector_front(self)

    def back(self) -> "std::vector< OEChem::OEAtomBondSet >::value_type const &":
        r"""back(OEAtomBondSetVector self) -> OEAtomBondSet"""
        return _oechem.OEAtomBondSetVector_back(self)

    def assign(self, n: "std::vector< OEChem::OEAtomBondSet >::size_type", x: "OEAtomBondSet") -> "void":
        r"""assign(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::size_type n, OEAtomBondSet x)"""
        return _oechem.OEAtomBondSetVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::size_type new_size)
        resize(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::size_type new_size, OEAtomBondSet x)
        """
        return _oechem.OEAtomBondSetVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::iterator pos, OEAtomBondSet x) -> std::vector< OEChem::OEAtomBondSet >::iterator
        insert(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::iterator pos, std::vector< OEChem::OEAtomBondSet >::size_type n, OEAtomBondSet x)
        """
        return _oechem.OEAtomBondSetVector_insert(self, *args)

    def reserve(self, n: "std::vector< OEChem::OEAtomBondSet >::size_type") -> "void":
        r"""reserve(OEAtomBondSetVector self, std::vector< OEChem::OEAtomBondSet >::size_type n)"""
        return _oechem.OEAtomBondSetVector_reserve(self, n)

    def capacity(self) -> "std::vector< OEChem::OEAtomBondSet >::size_type":
        r"""capacity(OEAtomBondSetVector self) -> std::vector< OEChem::OEAtomBondSet >::size_type"""
        return _oechem.OEAtomBondSetVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OEAtomBondSetVector

# Register OEAtomBondSetVector in _oechem:
_oechem.OEAtomBondSetVector_swigregister(OEAtomBondSetVector)

class OESubSearchVector(object):
    r"""Proxy of C++ std::vector< OEChem::OESubSearch > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OESubSearchVector self) -> SwigPyIterator"""
        return _oechem.OESubSearchVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OESubSearchVector self) -> bool"""
        return _oechem.OESubSearchVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OESubSearchVector self) -> bool"""
        return _oechem.OESubSearchVector___bool__(self)

    def __len__(self) -> "std::vector< OEChem::OESubSearch >::size_type":
        r"""__len__(OESubSearchVector self) -> std::vector< OEChem::OESubSearch >::size_type"""
        return _oechem.OESubSearchVector___len__(self)

    def __getslice__(self, i: "std::vector< OEChem::OESubSearch >::difference_type", j: "std::vector< OEChem::OESubSearch >::difference_type") -> "std::vector< OEChem::OESubSearch,std::allocator< OEChem::OESubSearch > > *":
        r"""__getslice__(OESubSearchVector self, std::vector< OEChem::OESubSearch >::difference_type i, std::vector< OEChem::OESubSearch >::difference_type j) -> OESubSearchVector"""
        return _oechem.OESubSearchVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OESubSearchVector self, std::vector< OEChem::OESubSearch >::difference_type i, std::vector< OEChem::OESubSearch >::difference_type j)
        __setslice__(OESubSearchVector self, std::vector< OEChem::OESubSearch >::difference_type i, std::vector< OEChem::OESubSearch >::difference_type j, OESubSearchVector v)
        """
        return _oechem.OESubSearchVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< OEChem::OESubSearch >::difference_type", j: "std::vector< OEChem::OESubSearch >::difference_type") -> "void":
        r"""__delslice__(OESubSearchVector self, std::vector< OEChem::OESubSearch >::difference_type i, std::vector< OEChem::OESubSearch >::difference_type j)"""
        return _oechem.OESubSearchVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OESubSearchVector self, std::vector< OEChem::OESubSearch >::difference_type i)
        __delitem__(OESubSearchVector self, PySliceObject * slice)
        """
        return _oechem.OESubSearchVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< OEChem::OESubSearch >::value_type const &":
        r"""
        __getitem__(OESubSearchVector self, PySliceObject * slice) -> OESubSearchVector
        __getitem__(OESubSearchVector self, std::vector< OEChem::OESubSearch >::difference_type i) -> OESubSearch
        """
        return _oechem.OESubSearchVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OESubSearchVector self, PySliceObject * slice, OESubSearchVector v)
        __setitem__(OESubSearchVector self, PySliceObject * slice)
        __setitem__(OESubSearchVector self, std::vector< OEChem::OESubSearch >::difference_type i, OESubSearch x)
        """
        return _oechem.OESubSearchVector___setitem__(self, *args)

    def pop(self) -> "std::vector< OEChem::OESubSearch >::value_type":
        r"""pop(OESubSearchVector self) -> OESubSearch"""
        return _oechem.OESubSearchVector_pop(self)

    def append(self, x: "OESubSearch") -> "void":
        r"""append(OESubSearchVector self, OESubSearch x)"""
        return _oechem.OESubSearchVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OESubSearchVector self) -> bool"""
        return _oechem.OESubSearchVector_empty(self)

    def size(self) -> "std::vector< OEChem::OESubSearch >::size_type":
        r"""size(OESubSearchVector self) -> std::vector< OEChem::OESubSearch >::size_type"""
        return _oechem.OESubSearchVector_size(self)

    def swap(self, v: "OESubSearchVector") -> "void":
        r"""swap(OESubSearchVector self, OESubSearchVector v)"""
        return _oechem.OESubSearchVector_swap(self, v)

    def begin(self) -> "std::vector< OEChem::OESubSearch >::iterator":
        r"""begin(OESubSearchVector self) -> std::vector< OEChem::OESubSearch >::iterator"""
        return _oechem.OESubSearchVector_begin(self)

    def end(self) -> "std::vector< OEChem::OESubSearch >::iterator":
        r"""end(OESubSearchVector self) -> std::vector< OEChem::OESubSearch >::iterator"""
        return _oechem.OESubSearchVector_end(self)

    def rbegin(self) -> "std::vector< OEChem::OESubSearch >::reverse_iterator":
        r"""rbegin(OESubSearchVector self) -> std::vector< OEChem::OESubSearch >::reverse_iterator"""
        return _oechem.OESubSearchVector_rbegin(self)

    def rend(self) -> "std::vector< OEChem::OESubSearch >::reverse_iterator":
        r"""rend(OESubSearchVector self) -> std::vector< OEChem::OESubSearch >::reverse_iterator"""
        return _oechem.OESubSearchVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OESubSearchVector self)"""
        return _oechem.OESubSearchVector_clear(self)

    def get_allocator(self) -> "std::vector< OEChem::OESubSearch >::allocator_type":
        r"""get_allocator(OESubSearchVector self) -> std::vector< OEChem::OESubSearch >::allocator_type"""
        return _oechem.OESubSearchVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OESubSearchVector self)"""
        return _oechem.OESubSearchVector_pop_back(self)

    def erase(self, *args) -> "std::vector< OEChem::OESubSearch >::iterator":
        r"""
        erase(OESubSearchVector self, std::vector< OEChem::OESubSearch >::iterator pos) -> std::vector< OEChem::OESubSearch >::iterator
        erase(OESubSearchVector self, std::vector< OEChem::OESubSearch >::iterator first, std::vector< OEChem::OESubSearch >::iterator last) -> std::vector< OEChem::OESubSearch >::iterator
        """
        return _oechem.OESubSearchVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OESubSearchVector self) -> OESubSearchVector
        __init__(OESubSearchVector self, OESubSearchVector other) -> OESubSearchVector
        __init__(OESubSearchVector self, std::vector< OEChem::OESubSearch >::size_type size) -> OESubSearchVector
        __init__(OESubSearchVector self, std::vector< OEChem::OESubSearch >::size_type size, OESubSearch value) -> OESubSearchVector
        """
        _oechem.OESubSearchVector_swiginit(self, _oechem.new_OESubSearchVector(*args))

    def push_back(self, x: "OESubSearch") -> "void":
        r"""push_back(OESubSearchVector self, OESubSearch x)"""
        return _oechem.OESubSearchVector_push_back(self, x)

    def front(self) -> "std::vector< OEChem::OESubSearch >::value_type const &":
        r"""front(OESubSearchVector self) -> OESubSearch"""
        return _oechem.OESubSearchVector_front(self)

    def back(self) -> "std::vector< OEChem::OESubSearch >::value_type const &":
        r"""back(OESubSearchVector self) -> OESubSearch"""
        return _oechem.OESubSearchVector_back(self)

    def assign(self, n: "std::vector< OEChem::OESubSearch >::size_type", x: "OESubSearch") -> "void":
        r"""assign(OESubSearchVector self, std::vector< OEChem::OESubSearch >::size_type n, OESubSearch x)"""
        return _oechem.OESubSearchVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OESubSearchVector self, std::vector< OEChem::OESubSearch >::size_type new_size)
        resize(OESubSearchVector self, std::vector< OEChem::OESubSearch >::size_type new_size, OESubSearch x)
        """
        return _oechem.OESubSearchVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OESubSearchVector self, std::vector< OEChem::OESubSearch >::iterator pos, OESubSearch x) -> std::vector< OEChem::OESubSearch >::iterator
        insert(OESubSearchVector self, std::vector< OEChem::OESubSearch >::iterator pos, std::vector< OEChem::OESubSearch >::size_type n, OESubSearch x)
        """
        return _oechem.OESubSearchVector_insert(self, *args)

    def reserve(self, n: "std::vector< OEChem::OESubSearch >::size_type") -> "void":
        r"""reserve(OESubSearchVector self, std::vector< OEChem::OESubSearch >::size_type n)"""
        return _oechem.OESubSearchVector_reserve(self, n)

    def capacity(self) -> "std::vector< OEChem::OESubSearch >::size_type":
        r"""capacity(OESubSearchVector self) -> std::vector< OEChem::OESubSearch >::size_type"""
        return _oechem.OESubSearchVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OESubSearchVector

# Register OESubSearchVector in _oechem:
_oechem.OESubSearchVector_swigregister(OESubSearchVector)

class OEAtomArray(object):
    r"""Proxy of C++ ArrayT< OEChem::OEAtomBase * > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __swig_destroy__ = _oechem.delete_OEAtomArray

    def __init__(self, *args):
        r"""
        __init__(OEAtomArray self, Py_ssize_t n) -> OEAtomArray
        __init__(OEAtomArray self, OEChem::OEAtomBase *const * d, Py_ssize_t n) -> OEAtomArray
        __init__(OEAtomArray self, OEChem::OEAtomBase *const * d, Py_ssize_t n, bool o) -> OEAtomArray
        __init__(OEAtomArray self, PyObject * input) -> OEAtomArray
        __init__(OEAtomArray self, OEAtomArray rhs) -> OEAtomArray
        """
        _oechem.OEAtomArray_swiginit(self, _oechem.new_OEAtomArray(*args))

    def __eq__(self, other: "OEAtomArray") -> "bool":
        r"""__eq__(OEAtomArray self, OEAtomArray other) -> bool"""
        return _oechem.OEAtomArray___eq__(self, other)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEAtomArray self, double arg2, OEAtomBase arg3)
        __setitem__(OEAtomArray self, Py_ssize_t n, OEAtomBase value)
        """
        return _oechem.OEAtomArray___setitem__(self, *args)

    def __getitem__(self, obj):
        if not isinstance(obj, slice):
            return _oechem.OEAtomArray___getitem__(self, obj)

        indices = range(*obj.indices(len(self)))
        newarr  = self.__class__(len(indices))
        for dst, src in enumerate(indices):
            newarr[dst] = self[src]
        return newarr



    def __repr__(self) -> "PyObject *":
        r"""__repr__(OEAtomArray self) -> PyObject *"""
        return _oechem.OEAtomArray___repr__(self)

    def PtrCast(self, *args) -> "OEChem::OEAtomBase *const *":
        r"""
        PtrCast(OEAtomArray self) -> OEAtomBase
        PtrCast(OEAtomArray self) -> OEChem::OEAtomBase *const *
        """
        return _oechem.OEAtomArray_PtrCast(self, *args)

    def __len__(self) -> "Py_ssize_t":
        r"""__len__(OEAtomArray self) -> Py_ssize_t"""
        return _oechem.OEAtomArray___len__(self)

# Register OEAtomArray in _oechem:
_oechem.OEAtomArray_swigregister(OEAtomArray)

class OEBondArray(object):
    r"""Proxy of C++ ArrayT< OEChem::OEBondBase * > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __swig_destroy__ = _oechem.delete_OEBondArray

    def __init__(self, *args):
        r"""
        __init__(OEBondArray self, Py_ssize_t n) -> OEBondArray
        __init__(OEBondArray self, OEChem::OEBondBase *const * d, Py_ssize_t n) -> OEBondArray
        __init__(OEBondArray self, OEChem::OEBondBase *const * d, Py_ssize_t n, bool o) -> OEBondArray
        __init__(OEBondArray self, PyObject * input) -> OEBondArray
        __init__(OEBondArray self, OEBondArray rhs) -> OEBondArray
        """
        _oechem.OEBondArray_swiginit(self, _oechem.new_OEBondArray(*args))

    def __eq__(self, other: "OEBondArray") -> "bool":
        r"""__eq__(OEBondArray self, OEBondArray other) -> bool"""
        return _oechem.OEBondArray___eq__(self, other)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEBondArray self, double arg2, OEBondBase arg3)
        __setitem__(OEBondArray self, Py_ssize_t n, OEBondBase value)
        """
        return _oechem.OEBondArray___setitem__(self, *args)

    def __getitem__(self, obj):
        if not isinstance(obj, slice):
            return _oechem.OEBondArray___getitem__(self, obj)

        indices = range(*obj.indices(len(self)))
        newarr  = self.__class__(len(indices))
        for dst, src in enumerate(indices):
            newarr[dst] = self[src]
        return newarr



    def __repr__(self) -> "PyObject *":
        r"""__repr__(OEBondArray self) -> PyObject *"""
        return _oechem.OEBondArray___repr__(self)

    def PtrCast(self, *args) -> "OEChem::OEBondBase *const *":
        r"""
        PtrCast(OEBondArray self) -> OEBondBase
        PtrCast(OEBondArray self) -> OEChem::OEBondBase *const *
        """
        return _oechem.OEBondArray_PtrCast(self, *args)

    def __len__(self) -> "Py_ssize_t":
        r"""__len__(OEBondArray self) -> Py_ssize_t"""
        return _oechem.OEBondArray___len__(self)

# Register OEBondArray in _oechem:
_oechem.OEBondArray_swigregister(OEBondArray)



IntVector = OEIntVector
FloatVector = OEFloatVector
DoubleVector = OEDoubleVector
AtomVector = OEAtomVector
BondVector = OEBondVector


class OEOptionalUInt(object):
    r"""Proxy of C++ std::optional< unsigned int > 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__(OEOptionalUInt self) -> OEOptionalUInt
        __init__(OEOptionalUInt self, unsigned int const & value) -> OEOptionalUInt
        __init__(OEOptionalUInt self, OEOptionalUInt other) -> OEOptionalUInt
        """
        _oechem.OEOptionalUInt_swiginit(self, _oechem.new_OEOptionalUInt(*args))

    def IsValid(self):
      return _oechem.OEOptionalUInt___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalUInt self) -> bool"""
        return _oechem.OEOptionalUInt_has_value(self)

    def value(self) -> "unsigned int const &":
        r"""value(OEOptionalUInt self) -> unsigned int const &"""
        return _oechem.OEOptionalUInt_value(self)

    def value_or(self, arg2: "unsigned int const &") -> "unsigned int":
        r"""value_or(OEOptionalUInt self, unsigned int const & arg2) -> unsigned int"""
        return _oechem.OEOptionalUInt_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalUInt

# Register OEOptionalUInt in _oechem:
_oechem.OEOptionalUInt_swigregister(OEOptionalUInt)

class OEOptionalInt(object):
    r"""Proxy of C++ std::optional< int > 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__(OEOptionalInt self) -> OEOptionalInt
        __init__(OEOptionalInt self, int const & value) -> OEOptionalInt
        __init__(OEOptionalInt self, OEOptionalInt other) -> OEOptionalInt
        """
        _oechem.OEOptionalInt_swiginit(self, _oechem.new_OEOptionalInt(*args))

    def IsValid(self):
      return _oechem.OEOptionalInt___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalInt self) -> bool"""
        return _oechem.OEOptionalInt_has_value(self)

    def value(self) -> "int const &":
        r"""value(OEOptionalInt self) -> int const &"""
        return _oechem.OEOptionalInt_value(self)

    def value_or(self, arg2: "int const &") -> "int":
        r"""value_or(OEOptionalInt self, int const & arg2) -> int"""
        return _oechem.OEOptionalInt_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalInt

# Register OEOptionalInt in _oechem:
_oechem.OEOptionalInt_swigregister(OEOptionalInt)

class OEOptionalLong(object):
    r"""Proxy of C++ std::optional< long > 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__(OEOptionalLong self) -> OEOptionalLong
        __init__(OEOptionalLong self, long const & value) -> OEOptionalLong
        __init__(OEOptionalLong self, OEOptionalLong other) -> OEOptionalLong
        """
        _oechem.OEOptionalLong_swiginit(self, _oechem.new_OEOptionalLong(*args))

    def IsValid(self):
      return _oechem.OEOptionalLong___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalLong self) -> bool"""
        return _oechem.OEOptionalLong_has_value(self)

    def value(self) -> "long const &":
        r"""value(OEOptionalLong self) -> long const &"""
        return _oechem.OEOptionalLong_value(self)

    def value_or(self, arg2: "long const &") -> "long":
        r"""value_or(OEOptionalLong self, long const & arg2) -> long"""
        return _oechem.OEOptionalLong_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalLong

# Register OEOptionalLong in _oechem:
_oechem.OEOptionalLong_swigregister(OEOptionalLong)

class OEOptionalChar(object):
    r"""Proxy of C++ std::optional< char > 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__(OEOptionalChar self) -> OEOptionalChar
        __init__(OEOptionalChar self, char const & value) -> OEOptionalChar
        __init__(OEOptionalChar self, OEOptionalChar other) -> OEOptionalChar
        """
        _oechem.OEOptionalChar_swiginit(self, _oechem.new_OEOptionalChar(*args))

    def IsValid(self):
      return _oechem.OEOptionalChar___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalChar self) -> bool"""
        return _oechem.OEOptionalChar_has_value(self)

    def value(self) -> "char const &":
        r"""value(OEOptionalChar self) -> char const &"""
        return _oechem.OEOptionalChar_value(self)

    def value_or(self, arg2: "char const &") -> "char":
        r"""value_or(OEOptionalChar self, char const & arg2) -> char"""
        return _oechem.OEOptionalChar_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalChar

# Register OEOptionalChar in _oechem:
_oechem.OEOptionalChar_swigregister(OEOptionalChar)

class OEOptionalString(object):
    r"""Proxy of C++ std::optional< std::string > 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__(OEOptionalString self) -> OEOptionalString
        __init__(OEOptionalString self, std::string const & value) -> OEOptionalString
        __init__(OEOptionalString self, OEOptionalString other) -> OEOptionalString
        """
        _oechem.OEOptionalString_swiginit(self, _oechem.new_OEOptionalString(*args))

    def IsValid(self):
      return _oechem.OEOptionalString___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalString self) -> bool"""
        return _oechem.OEOptionalString_has_value(self)

    def value(self) -> "std::string const &":
        r"""value(OEOptionalString self) -> std::string const &"""
        return _oechem.OEOptionalString_value(self)

    def value_or(self, arg2: "std::string const &") -> "std::string":
        r"""value_or(OEOptionalString self, std::string const & arg2) -> std::string"""
        return _oechem.OEOptionalString_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalString

# Register OEOptionalString in _oechem:
_oechem.OEOptionalString_swigregister(OEOptionalString)

class OEOptionalUChar(object):
    r"""Proxy of C++ std::optional< unsigned char > 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__(OEOptionalUChar self) -> OEOptionalUChar
        __init__(OEOptionalUChar self, unsigned char const & value) -> OEOptionalUChar
        __init__(OEOptionalUChar self, OEOptionalUChar other) -> OEOptionalUChar
        """
        _oechem.OEOptionalUChar_swiginit(self, _oechem.new_OEOptionalUChar(*args))

    def IsValid(self):
      return _oechem.OEOptionalUChar___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalUChar self) -> bool"""
        return _oechem.OEOptionalUChar_has_value(self)

    def value(self) -> "unsigned char const &":
        r"""value(OEOptionalUChar self) -> unsigned char const &"""
        return _oechem.OEOptionalUChar_value(self)

    def value_or(self, arg2: "unsigned char const &") -> "unsigned char":
        r"""value_or(OEOptionalUChar self, unsigned char const & arg2) -> unsigned char"""
        return _oechem.OEOptionalUChar_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalUChar

# Register OEOptionalUChar in _oechem:
_oechem.OEOptionalUChar_swigregister(OEOptionalUChar)

class OEOptionalFloat(object):
    r"""Proxy of C++ std::optional< float > 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__(OEOptionalFloat self) -> OEOptionalFloat
        __init__(OEOptionalFloat self, float const & value) -> OEOptionalFloat
        __init__(OEOptionalFloat self, OEOptionalFloat other) -> OEOptionalFloat
        """
        _oechem.OEOptionalFloat_swiginit(self, _oechem.new_OEOptionalFloat(*args))

    def IsValid(self):
      return _oechem.OEOptionalFloat___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalFloat self) -> bool"""
        return _oechem.OEOptionalFloat_has_value(self)

    def value(self) -> "float const &":
        r"""value(OEOptionalFloat self) -> float const &"""
        return _oechem.OEOptionalFloat_value(self)

    def value_or(self, arg2: "float const &") -> "float":
        r"""value_or(OEOptionalFloat self, float const & arg2) -> float"""
        return _oechem.OEOptionalFloat_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalFloat

# Register OEOptionalFloat in _oechem:
_oechem.OEOptionalFloat_swigregister(OEOptionalFloat)

class OEOptionalDouble(object):
    r"""Proxy of C++ std::optional< double > 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__(OEOptionalDouble self) -> OEOptionalDouble
        __init__(OEOptionalDouble self, double const & value) -> OEOptionalDouble
        __init__(OEOptionalDouble self, OEOptionalDouble other) -> OEOptionalDouble
        """
        _oechem.OEOptionalDouble_swiginit(self, _oechem.new_OEOptionalDouble(*args))

    def IsValid(self):
      return _oechem.OEOptionalDouble___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalDouble self) -> bool"""
        return _oechem.OEOptionalDouble_has_value(self)

    def value(self) -> "double const &":
        r"""value(OEOptionalDouble self) -> double const &"""
        return _oechem.OEOptionalDouble_value(self)

    def value_or(self, arg2: "double const &") -> "double":
        r"""value_or(OEOptionalDouble self, double const & arg2) -> double"""
        return _oechem.OEOptionalDouble_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalDouble

# Register OEOptionalDouble in _oechem:
_oechem.OEOptionalDouble_swigregister(OEOptionalDouble)

class OEOptionalUIntVector(object):
    r"""Proxy of C++ std::optional< std::vector< unsigned int > > 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__(OEOptionalUIntVector self) -> OEOptionalUIntVector
        __init__(OEOptionalUIntVector self, OEUIntVector value) -> OEOptionalUIntVector
        __init__(OEOptionalUIntVector self, OEOptionalUIntVector other) -> OEOptionalUIntVector
        """
        _oechem.OEOptionalUIntVector_swiginit(self, _oechem.new_OEOptionalUIntVector(*args))

    def IsValid(self):
      return _oechem.OEOptionalUIntVector___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalUIntVector self) -> bool"""
        return _oechem.OEOptionalUIntVector_has_value(self)

    def value(self) -> "std::vector< unsigned int,std::allocator< unsigned int > > const &":
        r"""value(OEOptionalUIntVector self) -> OEUIntVector"""
        return _oechem.OEOptionalUIntVector_value(self)

    def value_or(self, arg2: "OEUIntVector") -> "std::vector< unsigned int,std::allocator< unsigned int > >":
        r"""value_or(OEOptionalUIntVector self, OEUIntVector arg2) -> OEUIntVector"""
        return _oechem.OEOptionalUIntVector_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalUIntVector

# Register OEOptionalUIntVector in _oechem:
_oechem.OEOptionalUIntVector_swigregister(OEOptionalUIntVector)

class OEOptionalIntVector(object):
    r"""Proxy of C++ std::optional< std::vector< int > > 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__(OEOptionalIntVector self) -> OEOptionalIntVector
        __init__(OEOptionalIntVector self, OEIntVector value) -> OEOptionalIntVector
        __init__(OEOptionalIntVector self, OEOptionalIntVector other) -> OEOptionalIntVector
        """
        _oechem.OEOptionalIntVector_swiginit(self, _oechem.new_OEOptionalIntVector(*args))

    def IsValid(self):
      return _oechem.OEOptionalIntVector___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalIntVector self) -> bool"""
        return _oechem.OEOptionalIntVector_has_value(self)

    def value(self) -> "std::vector< int,std::allocator< int > > const &":
        r"""value(OEOptionalIntVector self) -> OEIntVector"""
        return _oechem.OEOptionalIntVector_value(self)

    def value_or(self, arg2: "OEIntVector") -> "std::vector< int,std::allocator< int > >":
        r"""value_or(OEOptionalIntVector self, OEIntVector arg2) -> OEIntVector"""
        return _oechem.OEOptionalIntVector_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalIntVector

# Register OEOptionalIntVector in _oechem:
_oechem.OEOptionalIntVector_swigregister(OEOptionalIntVector)

class OEOptionalLongVector(object):
    r"""Proxy of C++ std::optional< std::vector< long > > 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__(OEOptionalLongVector self) -> OEOptionalLongVector
        __init__(OEOptionalLongVector self, OELongVector value) -> OEOptionalLongVector
        __init__(OEOptionalLongVector self, OEOptionalLongVector other) -> OEOptionalLongVector
        """
        _oechem.OEOptionalLongVector_swiginit(self, _oechem.new_OEOptionalLongVector(*args))

    def IsValid(self):
      return _oechem.OEOptionalLongVector___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalLongVector self) -> bool"""
        return _oechem.OEOptionalLongVector_has_value(self)

    def value(self) -> "std::vector< long,std::allocator< long > > const &":
        r"""value(OEOptionalLongVector self) -> OELongVector"""
        return _oechem.OEOptionalLongVector_value(self)

    def value_or(self, arg2: "OELongVector") -> "std::vector< long,std::allocator< long > >":
        r"""value_or(OEOptionalLongVector self, OELongVector arg2) -> OELongVector"""
        return _oechem.OEOptionalLongVector_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalLongVector

# Register OEOptionalLongVector in _oechem:
_oechem.OEOptionalLongVector_swigregister(OEOptionalLongVector)

class OEOptionalCharVector(object):
    r"""Proxy of C++ std::optional< std::vector< char > > 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__(OEOptionalCharVector self) -> OEOptionalCharVector
        __init__(OEOptionalCharVector self, OECharVector value) -> OEOptionalCharVector
        __init__(OEOptionalCharVector self, OEOptionalCharVector other) -> OEOptionalCharVector
        """
        _oechem.OEOptionalCharVector_swiginit(self, _oechem.new_OEOptionalCharVector(*args))

    def IsValid(self):
      return _oechem.OEOptionalCharVector___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalCharVector self) -> bool"""
        return _oechem.OEOptionalCharVector_has_value(self)

    def value(self) -> "std::vector< char,std::allocator< char > > const &":
        r"""value(OEOptionalCharVector self) -> OECharVector"""
        return _oechem.OEOptionalCharVector_value(self)

    def value_or(self, arg2: "OECharVector") -> "std::vector< char,std::allocator< char > >":
        r"""value_or(OEOptionalCharVector self, OECharVector arg2) -> OECharVector"""
        return _oechem.OEOptionalCharVector_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalCharVector

# Register OEOptionalCharVector in _oechem:
_oechem.OEOptionalCharVector_swigregister(OEOptionalCharVector)

class OEOptionalUCharVector(object):
    r"""Proxy of C++ std::optional< std::vector< unsigned char > > 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__(OEOptionalUCharVector self) -> OEOptionalUCharVector
        __init__(OEOptionalUCharVector self, OEUCharVector value) -> OEOptionalUCharVector
        __init__(OEOptionalUCharVector self, OEOptionalUCharVector other) -> OEOptionalUCharVector
        """
        _oechem.OEOptionalUCharVector_swiginit(self, _oechem.new_OEOptionalUCharVector(*args))

    def IsValid(self):
      return _oechem.OEOptionalUCharVector___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalUCharVector self) -> bool"""
        return _oechem.OEOptionalUCharVector_has_value(self)

    def value(self) -> "std::vector< unsigned char,std::allocator< unsigned char > > const &":
        r"""value(OEOptionalUCharVector self) -> OEUCharVector"""
        return _oechem.OEOptionalUCharVector_value(self)

    def value_or(self, arg2: "OEUCharVector") -> "std::vector< unsigned char,std::allocator< unsigned char > >":
        r"""value_or(OEOptionalUCharVector self, OEUCharVector arg2) -> OEUCharVector"""
        return _oechem.OEOptionalUCharVector_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalUCharVector

# Register OEOptionalUCharVector in _oechem:
_oechem.OEOptionalUCharVector_swigregister(OEOptionalUCharVector)

class OEOptionalFloatVector(object):
    r"""Proxy of C++ std::optional< std::vector< float > > 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__(OEOptionalFloatVector self) -> OEOptionalFloatVector
        __init__(OEOptionalFloatVector self, OEFloatVector value) -> OEOptionalFloatVector
        __init__(OEOptionalFloatVector self, OEOptionalFloatVector other) -> OEOptionalFloatVector
        """
        _oechem.OEOptionalFloatVector_swiginit(self, _oechem.new_OEOptionalFloatVector(*args))

    def IsValid(self):
      return _oechem.OEOptionalFloatVector___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalFloatVector self) -> bool"""
        return _oechem.OEOptionalFloatVector_has_value(self)

    def value(self) -> "std::vector< float,std::allocator< float > > const &":
        r"""value(OEOptionalFloatVector self) -> OEFloatVector"""
        return _oechem.OEOptionalFloatVector_value(self)

    def value_or(self, arg2: "OEFloatVector") -> "std::vector< float,std::allocator< float > >":
        r"""value_or(OEOptionalFloatVector self, OEFloatVector arg2) -> OEFloatVector"""
        return _oechem.OEOptionalFloatVector_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalFloatVector

# Register OEOptionalFloatVector in _oechem:
_oechem.OEOptionalFloatVector_swigregister(OEOptionalFloatVector)

class OEOptionalDoubleVector(object):
    r"""Proxy of C++ std::optional< std::vector< double > > 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__(OEOptionalDoubleVector self) -> OEOptionalDoubleVector
        __init__(OEOptionalDoubleVector self, OEDoubleVector value) -> OEOptionalDoubleVector
        __init__(OEOptionalDoubleVector self, OEOptionalDoubleVector other) -> OEOptionalDoubleVector
        """
        _oechem.OEOptionalDoubleVector_swiginit(self, _oechem.new_OEOptionalDoubleVector(*args))

    def IsValid(self):
      return _oechem.OEOptionalDoubleVector___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalDoubleVector self) -> bool"""
        return _oechem.OEOptionalDoubleVector_has_value(self)

    def value(self) -> "std::vector< double,std::allocator< double > > const &":
        r"""value(OEOptionalDoubleVector self) -> OEDoubleVector"""
        return _oechem.OEOptionalDoubleVector_value(self)

    def value_or(self, arg2: "OEDoubleVector") -> "std::vector< double,std::allocator< double > >":
        r"""value_or(OEOptionalDoubleVector self, OEDoubleVector arg2) -> OEDoubleVector"""
        return _oechem.OEOptionalDoubleVector_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalDoubleVector

# Register OEOptionalDoubleVector in _oechem:
_oechem.OEOptionalDoubleVector_swigregister(OEOptionalDoubleVector)


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

def TypeToPyString(type: "void const *") -> "PyObject *":
    r"""TypeToPyString(void const * type) -> PyObject *"""
    return _oechem.TypeToPyString(type)
class OEInternalFunctionPointer(object):
    r"""Proxy of C++ OEInternalFunctionPointer 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__(OEInternalFunctionPointer self) -> OEInternalFunctionPointer
        __init__(OEInternalFunctionPointer self, void const * type, GenericDataGetFunc getter, GenericDataSetFunc setter, GenericDataSetFunc adder) -> OEInternalFunctionPointer
        """
        _oechem.OEInternalFunctionPointer_swiginit(self, _oechem.new_OEInternalFunctionPointer(*args))

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

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


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

def AddData(*args) -> "PyObject *":
    r"""
    AddData(OEBase * _self, unsigned int tag, PyObject * object) -> PyObject
    AddData(OEBase * _self, unsigned int tag, PyObject * object, PyObject * type) -> PyObject *
    """
    return _oechem.AddData(*args)

def OEGetBitCounts(a: "OEBitVector", b: "OEBitVector") -> "PyObject *":
    r"""OEGetBitCounts(OEBitVector a, OEBitVector b) -> PyObject *"""
    return _oechem.OEGetBitCounts(a, b)

def OEBitVectorNumWords(bits: "size_t") -> "size_t":
    r"""OEBitVectorNumWords(size_t bits) -> size_t"""
    return _oechem.OEBitVectorNumWords(bits)

def OEBitVectorNumBytes(bits: "size_t") -> "size_t":
    r"""OEBitVectorNumBytes(size_t bits) -> size_t"""
    return _oechem.OEBitVectorNumBytes(bits)
class OEBitVector(object):
    r"""Proxy of C++ OESystem::OEBitVector 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__(OEBitVector self) -> OEBitVector
        __init__(OEBitVector self, unsigned char const * data, unsigned int size) -> OEBitVector
        __init__(OEBitVector self, unsigned int size) -> OEBitVector
        __init__(OEBitVector self, OERandom & rand, unsigned int size) -> OEBitVector
        __init__(OEBitVector self, OEBitVector src) -> OEBitVector
        """
        _oechem.OEBitVector_swiginit(self, _oechem.new_OEBitVector(*args))
    __swig_destroy__ = _oechem.delete_OEBitVector

    def GetSize(self) -> "unsigned int":
        r"""GetSize(OEBitVector self) -> unsigned int"""
        return _oechem.OEBitVector_GetSize(self)

    def SetData(self, data: "unsigned char const *", nbits: "unsigned int") -> "void":
        r"""SetData(OEBitVector self, unsigned char const * data, unsigned int nbits)"""
        return _oechem.OEBitVector_SetData(self, data, nbits)

    def GetData(self) -> "unsigned char const *":
        r"""GetData(OEBitVector self) -> unsigned char const *"""
        return _oechem.OEBitVector_GetData(self)

    def SetSize(self, bits: "unsigned int") -> "void":
        r"""SetSize(OEBitVector self, unsigned int bits)"""
        return _oechem.OEBitVector_SetSize(self, bits)

    def IsEmpty(self) -> "bool":
        r"""IsEmpty(OEBitVector self) -> bool"""
        return _oechem.OEBitVector_IsEmpty(self)

    def IsBitOn(self, bit: "unsigned int") -> "bool":
        r"""IsBitOn(OEBitVector self, unsigned int bit) -> bool"""
        return _oechem.OEBitVector_IsBitOn(self, bit)

    def SetBitOn(self, bit: "unsigned int") -> "void":
        r"""SetBitOn(OEBitVector self, unsigned int bit)"""
        return _oechem.OEBitVector_SetBitOn(self, bit)

    def SetBitOff(self, bit: "unsigned int") -> "void":
        r"""SetBitOff(OEBitVector self, unsigned int bit)"""
        return _oechem.OEBitVector_SetBitOff(self, bit)

    def SetRangeOn(self, start: "unsigned int", end: "unsigned int") -> "void":
        r"""SetRangeOn(OEBitVector self, unsigned int start, unsigned int end)"""
        return _oechem.OEBitVector_SetRangeOn(self, start, end)

    def SetRangeOff(self, start: "unsigned int", end: "unsigned int") -> "void":
        r"""SetRangeOff(OEBitVector self, unsigned int start, unsigned int end)"""
        return _oechem.OEBitVector_SetRangeOff(self, start, end)

    def ToggleBit(self, bit: "unsigned int") -> "void":
        r"""ToggleBit(OEBitVector self, unsigned int bit)"""
        return _oechem.OEBitVector_ToggleBit(self, bit)

    def ClearBits(self) -> "void":
        r"""ClearBits(OEBitVector self)"""
        return _oechem.OEBitVector_ClearBits(self)

    def NegateBits(self) -> "void":
        r"""NegateBits(OEBitVector self)"""
        return _oechem.OEBitVector_NegateBits(self)

    def CountBits(self) -> "unsigned int":
        r"""CountBits(OEBitVector self) -> unsigned int"""
        return _oechem.OEBitVector_CountBits(self)

    def CountRangeBits(self, start: "unsigned int const", end: "unsigned int const") -> "unsigned int":
        r"""CountRangeBits(OEBitVector self, unsigned int const start, unsigned int const end) -> unsigned int"""
        return _oechem.OEBitVector_CountRangeBits(self, start, end)

    def FirstBit(self) -> "int":
        r"""FirstBit(OEBitVector self) -> int"""
        return _oechem.OEBitVector_FirstBit(self)

    def PrevBit(self, arg2: "unsigned int") -> "int":
        r"""PrevBit(OEBitVector self, unsigned int arg2) -> int"""
        return _oechem.OEBitVector_PrevBit(self, arg2)

    def NextBit(self, arg2: "unsigned int") -> "int":
        r"""NextBit(OEBitVector self, unsigned int arg2) -> int"""
        return _oechem.OEBitVector_NextBit(self, arg2)

    def LastBit(self) -> "int":
        r"""LastBit(OEBitVector self) -> int"""
        return _oechem.OEBitVector_LastBit(self)

    def __iand__(self, arg2: "OEBitVector") -> "OESystem::OEBitVector &":
        r"""__iand__(OEBitVector self, OEBitVector arg2) -> OEBitVector"""
        return _oechem.OEBitVector___iand__(self, arg2)

    def __isub__(self, arg2: "OEBitVector") -> "OESystem::OEBitVector &":
        r"""__isub__(OEBitVector self, OEBitVector arg2) -> OEBitVector"""
        return _oechem.OEBitVector___isub__(self, arg2)

    def __ior__(self, *args) -> "OESystem::OEBitVector &":
        r"""
        __ior__(OEBitVector self, OEBitVector arg2) -> OEBitVector
        __ior__(OEBitVector self, unsigned int bit) -> OEBitVector
        """
        return _oechem.OEBitVector___ior__(self, *args)

    def __lt__(self, other: "OEBitVector") -> "bool":
        r"""__lt__(OEBitVector self, OEBitVector other) -> bool"""
        return _oechem.OEBitVector___lt__(self, other)

    def __ixor__(self, *args) -> "OESystem::OEBitVector &":
        r"""
        __ixor__(OEBitVector self, OEBitVector arg2) -> OEBitVector
        __ixor__(OEBitVector self, unsigned int bit) -> OEBitVector
        """
        return _oechem.OEBitVector___ixor__(self, *args)

    def __getitem__(self, bit: "unsigned int") -> "bool":
        r"""__getitem__(OEBitVector self, unsigned int bit) -> bool"""
        return _oechem.OEBitVector___getitem__(self, bit)

    def FromHexString(self, bvs: "char const *") -> "void":
        r"""FromHexString(OEBitVector self, char const * bvs)"""
        return _oechem.OEBitVector_FromHexString(self, bvs)

    def ToHexString(self) -> "std::string":
        r"""ToHexString(OEBitVector self) -> std::string"""
        return _oechem.OEBitVector_ToHexString(self)

    def __and__(self, o): return OEBitVectorAnd(self, o) 


    def __or__(self, o): return OEBitVectorOr(self, o) 


    def __xor__(self, o): return OEBitVectorXor(self, o) 


    def __sub__(self, o): return OEBitVectorSub(self, o) 


    def __eq__(self, o): return OEBitVectorEqual(self, o) 


    def __not__(self): return OEBitVectorNot(self) 


    def GetDataTypeAsLong(self) -> "PyObject *":
        r"""GetDataTypeAsLong(OEBitVector self) -> PyObject *"""
        return _oechem.OEBitVector_GetDataTypeAsLong(self)

# Register OEBitVector in _oechem:
_oechem.OEBitVector_swigregister(OEBitVector)
cvar = _oechem.cvar
Conversion_Magic = cvar.Conversion_Magic
Conversion_Int = cvar.Conversion_Int
Conversion_UInt = cvar.Conversion_UInt
Conversion_Float = cvar.Conversion_Float
Conversion_Double = cvar.Conversion_Double
Conversion_Bool = cvar.Conversion_Bool
Conversion_String = cvar.Conversion_String
Conversion_Char = cvar.Conversion_Char
Conversion_UChar = cvar.Conversion_UChar
Conversion_Short = cvar.Conversion_Short
Conversion_UShort = cvar.Conversion_UShort


def OEBitVectorNot(bv: "OEBitVector") -> "OESystem::OEBitVector":
    r"""OEBitVectorNot(OEBitVector bv) -> OEBitVector"""
    return _oechem.OEBitVectorNot(bv)

def OEBitVectorOr(a: "OEBitVector", b: "OEBitVector") -> "OESystem::OEBitVector":
    r"""OEBitVectorOr(OEBitVector a, OEBitVector b) -> OEBitVector"""
    return _oechem.OEBitVectorOr(a, b)

def OEBitVectorAnd(a: "OEBitVector", b: "OEBitVector") -> "OESystem::OEBitVector":
    r"""OEBitVectorAnd(OEBitVector a, OEBitVector b) -> OEBitVector"""
    return _oechem.OEBitVectorAnd(a, b)

def OEBitVectorXor(a: "OEBitVector", b: "OEBitVector") -> "OESystem::OEBitVector":
    r"""OEBitVectorXor(OEBitVector a, OEBitVector b) -> OEBitVector"""
    return _oechem.OEBitVectorXor(a, b)

def OEBitVectorSub(a: "OEBitVector", b: "OEBitVector") -> "OESystem::OEBitVector":
    r"""OEBitVectorSub(OEBitVector a, OEBitVector b) -> OEBitVector"""
    return _oechem.OEBitVectorSub(a, b)

def OEBitVectorEqual(a: "OEBitVector", b: "OEBitVector") -> "bool":
    r"""OEBitVectorEqual(OEBitVector a, OEBitVector b) -> bool"""
    return _oechem.OEBitVectorEqual(a, b)

def OETanimoto(a: "OEBitVector", b: "OEBitVector") -> "double":
    r"""OETanimoto(OEBitVector a, OEBitVector b) -> double"""
    return _oechem.OETanimoto(a, b)

def OECopyBits(*args) -> "void":
    r"""
    OECopyBits(std::vector< bool,std::allocator< bool > > & vb, OEBitVector bv)
    OECopyBits(OEBitVector bv, std::vector< bool,std::allocator< bool > > const & vb)
    """
    return _oechem.OECopyBits(*args)

def OEMakeHex(*args) -> "bool":
    r"""
    OEMakeHex(std::string & arg1, std::vector< bool,std::allocator< bool > > const & arg2, unsigned int columns=0) -> bool
    OEMakeHex(std::string & hex, OEBitVector arg2, unsigned int columns=0) -> bool
    """
    return _oechem.OEMakeHex(*args)

def OEParseHex(*args) -> "bool":
    r"""
    OEParseHex(std::vector< bool,std::allocator< bool > > & arg1, std::string const & arg2) -> bool
    OEParseHex(OEBitVector arg1, std::string const & arg2) -> bool
    """
    return _oechem.OEParseHex(*args)

def OEInBitField(bitmask: "unsigned int", bitfield: "unsigned int") -> "bool":
    r"""OEInBitField(unsigned int bitmask, unsigned int bitfield) -> bool"""
    return _oechem.OEInBitField(bitmask, bitfield)

def OEBitIsPowerOf2(bitmask: "unsigned int", allowZero: "bool const"=False) -> "bool":
    r"""OEBitIsPowerOf2(unsigned int bitmask, bool const allowZero=False) -> bool"""
    return _oechem.OEBitIsPowerOf2(bitmask, allowZero)
class AttributeList(object):
    r"""Proxy of C++ std::vector< std::pair< unsigned int,std::vector< unsigned char > > > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(AttributeList self) -> SwigPyIterator"""
        return _oechem.AttributeList_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(AttributeList self) -> bool"""
        return _oechem.AttributeList___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(AttributeList self) -> bool"""
        return _oechem.AttributeList___bool__(self)

    def __len__(self) -> "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type":
        r"""__len__(AttributeList self) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type"""
        return _oechem.AttributeList___len__(self)

    def __getslice__(self, i: "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type", j: "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type") -> "std::vector< std::pair< unsigned int,std::vector< unsigned char,std::allocator< unsigned char > > >,std::allocator< std::pair< unsigned int,std::vector< unsigned char,std::allocator< unsigned char > > > > > *":
        r"""__getslice__(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type i, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type j) -> AttributeList"""
        return _oechem.AttributeList___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type i, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type j)
        __setslice__(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type i, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type j, AttributeList v)
        """
        return _oechem.AttributeList___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type", j: "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type") -> "void":
        r"""__delslice__(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type i, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type j)"""
        return _oechem.AttributeList___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type i)
        __delitem__(AttributeList self, PySliceObject * slice)
        """
        return _oechem.AttributeList___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const &":
        r"""
        __getitem__(AttributeList self, PySliceObject * slice) -> AttributeList
        __getitem__(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type i) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const &
        """
        return _oechem.AttributeList___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(AttributeList self, PySliceObject * slice, AttributeList v)
        __setitem__(AttributeList self, PySliceObject * slice)
        __setitem__(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::difference_type i, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const & x)
        """
        return _oechem.AttributeList___setitem__(self, *args)

    def pop(self) -> "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type":
        r"""pop(AttributeList self) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type"""
        return _oechem.AttributeList_pop(self)

    def append(self, x: "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const &") -> "void":
        r"""append(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const & x)"""
        return _oechem.AttributeList_append(self, x)

    def empty(self) -> "bool":
        r"""empty(AttributeList self) -> bool"""
        return _oechem.AttributeList_empty(self)

    def size(self) -> "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type":
        r"""size(AttributeList self) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type"""
        return _oechem.AttributeList_size(self)

    def swap(self, v: "AttributeList") -> "void":
        r"""swap(AttributeList self, AttributeList v)"""
        return _oechem.AttributeList_swap(self, v)

    def begin(self) -> "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::iterator":
        r"""begin(AttributeList self) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::iterator"""
        return _oechem.AttributeList_begin(self)

    def end(self) -> "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::iterator":
        r"""end(AttributeList self) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::iterator"""
        return _oechem.AttributeList_end(self)

    def rbegin(self) -> "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::reverse_iterator":
        r"""rbegin(AttributeList self) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::reverse_iterator"""
        return _oechem.AttributeList_rbegin(self)

    def rend(self) -> "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::reverse_iterator":
        r"""rend(AttributeList self) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::reverse_iterator"""
        return _oechem.AttributeList_rend(self)

    def clear(self) -> "void":
        r"""clear(AttributeList self)"""
        return _oechem.AttributeList_clear(self)

    def get_allocator(self) -> "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::allocator_type":
        r"""get_allocator(AttributeList self) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::allocator_type"""
        return _oechem.AttributeList_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(AttributeList self)"""
        return _oechem.AttributeList_pop_back(self)

    def erase(self, *args) -> "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::iterator":
        r"""
        erase(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::iterator pos) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::iterator
        erase(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::iterator first, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::iterator last) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::iterator
        """
        return _oechem.AttributeList_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(AttributeList self) -> AttributeList
        __init__(AttributeList self, AttributeList other) -> AttributeList
        __init__(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type size) -> AttributeList
        __init__(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type size, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const & value) -> AttributeList
        """
        _oechem.AttributeList_swiginit(self, _oechem.new_AttributeList(*args))

    def push_back(self, x: "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const &") -> "void":
        r"""push_back(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const & x)"""
        return _oechem.AttributeList_push_back(self, x)

    def front(self) -> "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const &":
        r"""front(AttributeList self) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const &"""
        return _oechem.AttributeList_front(self)

    def back(self) -> "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const &":
        r"""back(AttributeList self) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const &"""
        return _oechem.AttributeList_back(self)

    def assign(self, n: "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type", x: "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const &") -> "void":
        r"""assign(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type n, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const & x)"""
        return _oechem.AttributeList_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type new_size)
        resize(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type new_size, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const & x)
        """
        return _oechem.AttributeList_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::iterator pos, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const & x) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::iterator
        insert(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::iterator pos, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type n, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::value_type const & x)
        """
        return _oechem.AttributeList_insert(self, *args)

    def reserve(self, n: "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type") -> "void":
        r"""reserve(AttributeList self, std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type n)"""
        return _oechem.AttributeList_reserve(self, n)

    def capacity(self) -> "std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type":
        r"""capacity(AttributeList self) -> std::vector< std::pair< unsigned int,std::vector< unsigned char > > >::size_type"""
        return _oechem.AttributeList_capacity(self)
    __swig_destroy__ = _oechem.delete_AttributeList

# Register AttributeList in _oechem:
_oechem.AttributeList_swigregister(AttributeList)

class OEOptionalMol(object):
    r"""Proxy of C++ std::optional< OEChem::OEMol > 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__(OEOptionalMol self) -> OEOptionalMol
        __init__(OEOptionalMol self, OEChem::OEMol const & value) -> OEOptionalMol
        __init__(OEOptionalMol self, OEOptionalMol other) -> OEOptionalMol
        """
        _oechem.OEOptionalMol_swiginit(self, _oechem.new_OEOptionalMol(*args))

    def IsValid(self):
      return _oechem.OEOptionalMol___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalMol self) -> bool"""
        return _oechem.OEOptionalMol_has_value(self)

    def value(self) -> "OEChem::OEMol const &":
        r"""value(OEOptionalMol self) -> OEChem::OEMol const &"""
        return _oechem.OEOptionalMol_value(self)

    def value_or(self, arg2: "OEChem::OEMol const &") -> "OEChem::OEMol":
        r"""value_or(OEOptionalMol self, OEChem::OEMol const & arg2) -> OEChem::OEMol"""
        return _oechem.OEOptionalMol_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalMol

# Register OEOptionalMol in _oechem:
_oechem.OEOptionalMol_swigregister(OEOptionalMol)

class VecOptMol(object):
    r"""Proxy of C++ std::vector< std::optional< OEChem::OEMol > > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(VecOptMol self) -> SwigPyIterator"""
        return _oechem.VecOptMol_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(VecOptMol self) -> bool"""
        return _oechem.VecOptMol___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(VecOptMol self) -> bool"""
        return _oechem.VecOptMol___bool__(self)

    def __len__(self) -> "std::vector< std::optional< OEChem::OEMol > >::size_type":
        r"""__len__(VecOptMol self) -> std::vector< std::optional< OEChem::OEMol > >::size_type"""
        return _oechem.VecOptMol___len__(self)

    def __getslice__(self, i: "std::vector< std::optional< OEChem::OEMol > >::difference_type", j: "std::vector< std::optional< OEChem::OEMol > >::difference_type") -> "std::vector< std::optional< OEChem::OEMol >,std::allocator< std::optional< OEChem::OEMol > > > *":
        r"""__getslice__(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::difference_type i, std::vector< std::optional< OEChem::OEMol > >::difference_type j) -> VecOptMol"""
        return _oechem.VecOptMol___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::difference_type i, std::vector< std::optional< OEChem::OEMol > >::difference_type j)
        __setslice__(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::difference_type i, std::vector< std::optional< OEChem::OEMol > >::difference_type j, VecOptMol v)
        """
        return _oechem.VecOptMol___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< std::optional< OEChem::OEMol > >::difference_type", j: "std::vector< std::optional< OEChem::OEMol > >::difference_type") -> "void":
        r"""__delslice__(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::difference_type i, std::vector< std::optional< OEChem::OEMol > >::difference_type j)"""
        return _oechem.VecOptMol___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::difference_type i)
        __delitem__(VecOptMol self, PySliceObject * slice)
        """
        return _oechem.VecOptMol___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< std::optional< OEChem::OEMol > >::value_type const &":
        r"""
        __getitem__(VecOptMol self, PySliceObject * slice) -> VecOptMol
        __getitem__(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::difference_type i) -> OEOptionalMol
        """
        return _oechem.VecOptMol___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(VecOptMol self, PySliceObject * slice, VecOptMol v)
        __setitem__(VecOptMol self, PySliceObject * slice)
        __setitem__(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::difference_type i, OEOptionalMol x)
        """
        return _oechem.VecOptMol___setitem__(self, *args)

    def pop(self) -> "std::vector< std::optional< OEChem::OEMol > >::value_type":
        r"""pop(VecOptMol self) -> OEOptionalMol"""
        return _oechem.VecOptMol_pop(self)

    def append(self, x: "OEOptionalMol") -> "void":
        r"""append(VecOptMol self, OEOptionalMol x)"""
        return _oechem.VecOptMol_append(self, x)

    def empty(self) -> "bool":
        r"""empty(VecOptMol self) -> bool"""
        return _oechem.VecOptMol_empty(self)

    def size(self) -> "std::vector< std::optional< OEChem::OEMol > >::size_type":
        r"""size(VecOptMol self) -> std::vector< std::optional< OEChem::OEMol > >::size_type"""
        return _oechem.VecOptMol_size(self)

    def swap(self, v: "VecOptMol") -> "void":
        r"""swap(VecOptMol self, VecOptMol v)"""
        return _oechem.VecOptMol_swap(self, v)

    def begin(self) -> "std::vector< std::optional< OEChem::OEMol > >::iterator":
        r"""begin(VecOptMol self) -> std::vector< std::optional< OEChem::OEMol > >::iterator"""
        return _oechem.VecOptMol_begin(self)

    def end(self) -> "std::vector< std::optional< OEChem::OEMol > >::iterator":
        r"""end(VecOptMol self) -> std::vector< std::optional< OEChem::OEMol > >::iterator"""
        return _oechem.VecOptMol_end(self)

    def rbegin(self) -> "std::vector< std::optional< OEChem::OEMol > >::reverse_iterator":
        r"""rbegin(VecOptMol self) -> std::vector< std::optional< OEChem::OEMol > >::reverse_iterator"""
        return _oechem.VecOptMol_rbegin(self)

    def rend(self) -> "std::vector< std::optional< OEChem::OEMol > >::reverse_iterator":
        r"""rend(VecOptMol self) -> std::vector< std::optional< OEChem::OEMol > >::reverse_iterator"""
        return _oechem.VecOptMol_rend(self)

    def clear(self) -> "void":
        r"""clear(VecOptMol self)"""
        return _oechem.VecOptMol_clear(self)

    def get_allocator(self) -> "std::vector< std::optional< OEChem::OEMol > >::allocator_type":
        r"""get_allocator(VecOptMol self) -> std::vector< std::optional< OEChem::OEMol > >::allocator_type"""
        return _oechem.VecOptMol_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(VecOptMol self)"""
        return _oechem.VecOptMol_pop_back(self)

    def erase(self, *args) -> "std::vector< std::optional< OEChem::OEMol > >::iterator":
        r"""
        erase(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::iterator pos) -> std::vector< std::optional< OEChem::OEMol > >::iterator
        erase(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::iterator first, std::vector< std::optional< OEChem::OEMol > >::iterator last) -> std::vector< std::optional< OEChem::OEMol > >::iterator
        """
        return _oechem.VecOptMol_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(VecOptMol self) -> VecOptMol
        __init__(VecOptMol self, VecOptMol other) -> VecOptMol
        __init__(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::size_type size) -> VecOptMol
        __init__(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::size_type size, OEOptionalMol value) -> VecOptMol
        """
        _oechem.VecOptMol_swiginit(self, _oechem.new_VecOptMol(*args))

    def push_back(self, x: "OEOptionalMol") -> "void":
        r"""push_back(VecOptMol self, OEOptionalMol x)"""
        return _oechem.VecOptMol_push_back(self, x)

    def front(self) -> "std::vector< std::optional< OEChem::OEMol > >::value_type const &":
        r"""front(VecOptMol self) -> OEOptionalMol"""
        return _oechem.VecOptMol_front(self)

    def back(self) -> "std::vector< std::optional< OEChem::OEMol > >::value_type const &":
        r"""back(VecOptMol self) -> OEOptionalMol"""
        return _oechem.VecOptMol_back(self)

    def assign(self, n: "std::vector< std::optional< OEChem::OEMol > >::size_type", x: "OEOptionalMol") -> "void":
        r"""assign(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::size_type n, OEOptionalMol x)"""
        return _oechem.VecOptMol_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::size_type new_size)
        resize(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::size_type new_size, OEOptionalMol x)
        """
        return _oechem.VecOptMol_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::iterator pos, OEOptionalMol x) -> std::vector< std::optional< OEChem::OEMol > >::iterator
        insert(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::iterator pos, std::vector< std::optional< OEChem::OEMol > >::size_type n, OEOptionalMol x)
        """
        return _oechem.VecOptMol_insert(self, *args)

    def reserve(self, n: "std::vector< std::optional< OEChem::OEMol > >::size_type") -> "void":
        r"""reserve(VecOptMol self, std::vector< std::optional< OEChem::OEMol > >::size_type n)"""
        return _oechem.VecOptMol_reserve(self, n)

    def capacity(self) -> "std::vector< std::optional< OEChem::OEMol > >::size_type":
        r"""capacity(VecOptMol self) -> std::vector< std::optional< OEChem::OEMol > >::size_type"""
        return _oechem.VecOptMol_capacity(self)
    __swig_destroy__ = _oechem.delete_VecOptMol

# Register VecOptMol in _oechem:
_oechem.VecOptMol_swigregister(VecOptMol)

class OEMeta(object):
    r"""Proxy of C++ OEDataFlow::OEMeta 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__(OEMeta self) -> OEMeta"""
        _oechem.OEMeta_swiginit(self, _oechem.new_OEMeta())
    __swig_destroy__ = _oechem.delete_OEMeta

    @staticmethod
    def get_name(key: "unsigned int") -> "std::string":
        r"""get_name(unsigned int key) -> std::string"""
        return _oechem.OEMeta_get_name(key)

    @staticmethod
    def GetValue(name: "std::string const &") -> "unsigned int":
        r"""GetValue(std::string const & name) -> unsigned int"""
        return _oechem.OEMeta_GetValue(name)

    def clear(self) -> "void":
        r"""clear(OEMeta self)"""
        return _oechem.OEMeta_clear(self)

    def has_option(self, option: "unsigned int") -> "bool":
        r"""has_option(OEMeta self, unsigned int option) -> bool"""
        return _oechem.OEMeta_has_option(self, option)

    def get_options(self) -> "std::vector< unsigned int,std::allocator< unsigned int > > const &":
        r"""get_options(OEMeta self) -> OEUIntVector"""
        return _oechem.OEMeta_get_options(self)

    def set_option(self, option: "unsigned int") -> "OEDataFlow::OEMeta &":
        r"""set_option(OEMeta self, unsigned int option) -> OEMeta"""
        return _oechem.OEMeta_set_option(self, option)

    def set_options(self, options: "OEUIntVector") -> "OEDataFlow::OEMeta &":
        r"""set_options(OEMeta self, OEUIntVector options) -> OEMeta"""
        return _oechem.OEMeta_set_options(self, options)

    def remove_option(self, option: "unsigned int") -> "OEDataFlow::OEMeta &":
        r"""remove_option(OEMeta self, unsigned int option) -> OEMeta"""
        return _oechem.OEMeta_remove_option(self, option)

    def set_attribute(self, *args) -> "OEDataFlow::OEMeta &":
        r"""
        set_attribute(OEMeta self, unsigned int key, std::string const & val) -> OEMeta
        set_attribute(OEMeta self, unsigned int key, double const & val) -> OEMeta
        set_attribute(OEMeta self, unsigned int key, int const & val) -> OEMeta
        """
        return _oechem.OEMeta_set_attribute(self, *args)

    def add_attribute(self, *args) -> "OEDataFlow::OEMeta &":
        r"""
        add_attribute(OEMeta self, unsigned int key, std::string const & val) -> OEMeta
        add_attribute(OEMeta self, unsigned int key, double const & val) -> OEMeta
        add_attribute(OEMeta self, unsigned int key, int const & val) -> OEMeta
        """
        return _oechem.OEMeta_add_attribute(self, *args)

    def remove_attribute(self, *args) -> "OEDataFlow::OEMeta &":
        r"""
        remove_attribute(OEMeta self, unsigned int key) -> OEMeta
        remove_attribute(OEMeta self, unsigned int key, std::string const & val) -> OEMeta
        remove_attribute(OEMeta self, unsigned int key, double const & val) -> OEMeta
        remove_attribute(OEMeta self, unsigned int key, int const & val) -> OEMeta
        """
        return _oechem.OEMeta_remove_attribute(self, *args)

    def set_attributes(self, attrs: "AttributeList") -> "void":
        r"""set_attributes(OEMeta self, AttributeList attrs)"""
        return _oechem.OEMeta_set_attributes(self, attrs)

    def has_attribute(self, *args) -> "bool":
        r"""
        has_attribute(OEMeta self, unsigned int key) -> bool
        has_attribute(OEMeta self, unsigned int key, std::string const & value) -> bool
        has_attribute(OEMeta self, unsigned int key, double const & value) -> bool
        has_attribute(OEMeta self, unsigned int key, int const & value) -> bool
        """
        return _oechem.OEMeta_has_attribute(self, *args)

    def get_attributes(self, key: "unsigned int"=0) -> "OEDataFlow::AttributeList":
        r"""get_attributes(OEMeta self, unsigned int key=0) -> AttributeList"""
        return _oechem.OEMeta_get_attributes(self, key)

    def get_int_attribute(self, key: "unsigned int", idx: "unsigned int") -> "int":
        r"""get_int_attribute(OEMeta self, unsigned int key, unsigned int idx) -> int"""
        return _oechem.OEMeta_get_int_attribute(self, key, idx)

    def get_str_attribute(self, key: "unsigned int", idx: "unsigned int") -> "std::string":
        r"""get_str_attribute(OEMeta self, unsigned int key, unsigned int idx) -> std::string"""
        return _oechem.OEMeta_get_str_attribute(self, key, idx)

    def get_float_attribute(self, key: "unsigned int", idx: "unsigned int") -> "double":
        r"""get_float_attribute(OEMeta self, unsigned int key, unsigned int idx) -> double"""
        return _oechem.OEMeta_get_float_attribute(self, key, idx)

    def Merge(self, other: "OEMeta") -> "void":
        r"""Merge(OEMeta self, OEMeta other)"""
        return _oechem.OEMeta_Merge(self, other)

    def is_subset_of(self, other: "OEMeta") -> "bool":
        r"""is_subset_of(OEMeta self, OEMeta other) -> bool"""
        return _oechem.OEMeta_is_subset_of(self, other)

    def get_attribute(self, key: "unsigned int") -> "PyObject *":
        r"""get_attribute(OEMeta self, unsigned int key) -> PyObject *"""
        return _oechem.OEMeta_get_attribute(self, key)

# Register OEMeta in _oechem:
_oechem.OEMeta_swigregister(OEMeta)

def OEMeta_get_name(key: "unsigned int") -> "std::string":
    r"""OEMeta_get_name(unsigned int key) -> std::string"""
    return _oechem.OEMeta_get_name(key)

def OEMeta_GetValue(name: "std::string const &") -> "unsigned int":
    r"""OEMeta_GetValue(std::string const & name) -> unsigned int"""
    return _oechem.OEMeta_GetValue(name)

class OERecordMeta(OEMeta):
    r"""Proxy of C++ OEDataFlow::OERecordMeta class."""

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

    @staticmethod
    def get_name(key: "unsigned int") -> "std::string":
        r"""get_name(unsigned int key) -> std::string"""
        return _oechem.OERecordMeta_get_name(key)

    def set_option(self, option: "unsigned int") -> "OEDataFlow::OERecordMeta &":
        r"""set_option(OERecordMeta self, unsigned int option) -> OERecordMeta"""
        return _oechem.OERecordMeta_set_option(self, option)

    def set_options(self, options: "OEUIntVector") -> "OEDataFlow::OERecordMeta &":
        r"""set_options(OERecordMeta self, OEUIntVector options) -> OERecordMeta"""
        return _oechem.OERecordMeta_set_options(self, options)

    def remove_option(self, option: "unsigned int") -> "OEDataFlow::OERecordMeta &":
        r"""remove_option(OERecordMeta self, unsigned int option) -> OERecordMeta"""
        return _oechem.OERecordMeta_remove_option(self, option)

    def set_attribute(self, *args) -> "OEDataFlow::OERecordMeta &":
        r"""
        set_attribute(OERecordMeta self, unsigned int key, std::string const & val) -> OERecordMeta
        set_attribute(OERecordMeta self, unsigned int key, double const & val) -> OERecordMeta
        set_attribute(OERecordMeta self, unsigned int key, int const & val) -> OERecordMeta
        """
        return _oechem.OERecordMeta_set_attribute(self, *args)

    def add_attribute(self, *args) -> "OEDataFlow::OERecordMeta &":
        r"""
        add_attribute(OERecordMeta self, unsigned int key, std::string const & val) -> OERecordMeta
        add_attribute(OERecordMeta self, unsigned int key, double const & val) -> OERecordMeta
        add_attribute(OERecordMeta self, unsigned int key, int const & val) -> OERecordMeta
        """
        return _oechem.OERecordMeta_add_attribute(self, *args)

    def remove_attribute(self, *args) -> "OEDataFlow::OERecordMeta &":
        r"""
        remove_attribute(OERecordMeta self, unsigned int key) -> OERecordMeta
        remove_attribute(OERecordMeta self, unsigned int key, std::string const & val) -> OERecordMeta
        remove_attribute(OERecordMeta self, unsigned int key, double const & val) -> OERecordMeta
        remove_attribute(OERecordMeta self, unsigned int key, int const & val) -> OERecordMeta
        """
        return _oechem.OERecordMeta_remove_attribute(self, *args)

    def __init__(self):
        r"""__init__(OERecordMeta self) -> OERecordMeta"""
        _oechem.OERecordMeta_swiginit(self, _oechem.new_OERecordMeta())
    __swig_destroy__ = _oechem.delete_OERecordMeta

# Register OERecordMeta in _oechem:
_oechem.OERecordMeta_swigregister(OERecordMeta)

def OERecordMeta_get_name(key: "unsigned int") -> "std::string":
    r"""OERecordMeta_get_name(unsigned int key) -> std::string"""
    return _oechem.OERecordMeta_get_name(key)

class OEFieldMeta(OEMeta):
    r"""Proxy of C++ OEDataFlow::OEFieldMeta 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__(OEFieldMeta self) -> OEFieldMeta
        __init__(OEFieldMeta self, OEUIntVector options) -> OEFieldMeta
        __init__(OEFieldMeta self, OEFieldMeta other) -> OEFieldMeta
        """
        _oechem.OEFieldMeta_swiginit(self, _oechem.new_OEFieldMeta(*args))

    @staticmethod
    def get_name(key: "unsigned int") -> "std::string":
        r"""get_name(unsigned int key) -> std::string"""
        return _oechem.OEFieldMeta_get_name(key)

    def add_relation(self, relationship: "unsigned int", otherField: "OEFieldBase") -> "OEDataFlow::OEFieldMeta &":
        r"""add_relation(OEFieldMeta self, unsigned int relationship, OEFieldBase otherField) -> OEFieldMeta"""
        return _oechem.OEFieldMeta_add_relation(self, relationship, otherField)

    def set_option(self, option: "unsigned int") -> "OEDataFlow::OEFieldMeta &":
        r"""set_option(OEFieldMeta self, unsigned int option) -> OEFieldMeta"""
        return _oechem.OEFieldMeta_set_option(self, option)

    def set_options(self, options: "OEUIntVector") -> "OEDataFlow::OEFieldMeta &":
        r"""set_options(OEFieldMeta self, OEUIntVector options) -> OEFieldMeta"""
        return _oechem.OEFieldMeta_set_options(self, options)

    def remove_option(self, option: "unsigned int") -> "OEDataFlow::OEFieldMeta &":
        r"""remove_option(OEFieldMeta self, unsigned int option) -> OEFieldMeta"""
        return _oechem.OEFieldMeta_remove_option(self, option)

    def set_attribute(self, *args) -> "OEDataFlow::OEFieldMeta &":
        r"""
        set_attribute(OEFieldMeta self, unsigned int key, std::string const & val) -> OEFieldMeta
        set_attribute(OEFieldMeta self, unsigned int key, double const & val) -> OEFieldMeta
        set_attribute(OEFieldMeta self, unsigned int key, int const & val) -> OEFieldMeta
        """
        return _oechem.OEFieldMeta_set_attribute(self, *args)

    def add_attribute(self, *args) -> "OEDataFlow::OEFieldMeta &":
        r"""
        add_attribute(OEFieldMeta self, unsigned int key, std::string const & val) -> OEFieldMeta
        add_attribute(OEFieldMeta self, unsigned int key, double const & val) -> OEFieldMeta
        add_attribute(OEFieldMeta self, unsigned int key, int const & val) -> OEFieldMeta
        """
        return _oechem.OEFieldMeta_add_attribute(self, *args)

    def remove_attribute(self, *args) -> "OEDataFlow::OEFieldMeta &":
        r"""
        remove_attribute(OEFieldMeta self, unsigned int key) -> OEFieldMeta
        remove_attribute(OEFieldMeta self, unsigned int key, std::string const & val) -> OEFieldMeta
        remove_attribute(OEFieldMeta self, unsigned int key, double const & val) -> OEFieldMeta
        remove_attribute(OEFieldMeta self, unsigned int key, int const & val) -> OEFieldMeta
        """
        return _oechem.OEFieldMeta_remove_attribute(self, *args)

    def get_related_fields(self) -> "std::vector< std::string,std::allocator< std::string > >":
        r"""get_related_fields(OEFieldMeta self) -> OEStringVector"""
        return _oechem.OEFieldMeta_get_related_fields(self)

    def get_field_relations(self, name: "std::string const &") -> "std::vector< unsigned int,std::allocator< unsigned int > >":
        r"""get_field_relations(OEFieldMeta self, std::string const & name) -> OEUIntVector"""
        return _oechem.OEFieldMeta_get_field_relations(self, name)
    __swig_destroy__ = _oechem.delete_OEFieldMeta

# Register OEFieldMeta in _oechem:
_oechem.OEFieldMeta_swigregister(OEFieldMeta)

def OEFieldMeta_get_name(key: "unsigned int") -> "std::string":
    r"""OEFieldMeta_get_name(unsigned int key) -> std::string"""
    return _oechem.OEFieldMeta_get_name(key)

class OEMakeFieldOptions(object):
    r"""Proxy of C++ OEDataFlow::OEMakeFieldOptions 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__(OEMakeFieldOptions self) -> OEMakeFieldOptions"""
        _oechem.OEMakeFieldOptions_swiginit(self, _oechem.new_OEMakeFieldOptions())
    meta = property(_oechem.OEMakeFieldOptions_meta_get, _oechem.OEMakeFieldOptions_meta_set, doc=r"""meta : OEDataFlow::OEFieldMeta""")
    readonly = property(_oechem.OEMakeFieldOptions_readonly_get, _oechem.OEMakeFieldOptions_readonly_set, doc=r"""readonly : bool""")
    nullable = property(_oechem.OEMakeFieldOptions_nullable_get, _oechem.OEMakeFieldOptions_nullable_set, doc=r"""nullable : bool""")
    typeName = property(_oechem.OEMakeFieldOptions_typeName_get, _oechem.OEMakeFieldOptions_typeName_set, doc=r"""typeName : std::string""")
    userTypeName = property(_oechem.OEMakeFieldOptions_userTypeName_get, _oechem.OEMakeFieldOptions_userTypeName_set, doc=r"""userTypeName : std::string""")
    __swig_destroy__ = _oechem.delete_OEMakeFieldOptions

# Register OEMakeFieldOptions in _oechem:
_oechem.OEMakeFieldOptions_swigregister(OEMakeFieldOptions)

class OEFieldBase(object):
    r"""Proxy of C++ OEDataFlow::OEFieldBase 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__(OEFieldBase self) -> OEFieldBase
        __init__(OEFieldBase self, OEFieldBase other) -> OEFieldBase
        """
        _oechem.OEFieldBase_swiginit(self, _oechem.new_OEFieldBase(*args))

    def get_name(self) -> "std::string":
        r"""get_name(OEFieldBase self) -> std::string"""
        return _oechem.OEFieldBase_get_name(self)

    def set_name(self, name: "std::string const &") -> "void":
        r"""set_name(OEFieldBase self, std::string const & name)"""
        return _oechem.OEFieldBase_set_name(self, name)

    def get_type_name(self) -> "std::string":
        r"""get_type_name(OEFieldBase self) -> std::string"""
        return _oechem.OEFieldBase_get_type_name(self)

    def get_storage_type_name(self) -> "std::string":
        r"""get_storage_type_name(OEFieldBase self) -> std::string"""
        return _oechem.OEFieldBase_get_storage_type_name(self)

    def get_user_type_name(self) -> "std::string":
        r"""get_user_type_name(OEFieldBase self) -> std::string"""
        return _oechem.OEFieldBase_get_user_type_name(self)

    def set_user_type_name(self, tn: "std::string const &") -> "void":
        r"""set_user_type_name(OEFieldBase self, std::string const & tn)"""
        return _oechem.OEFieldBase_set_user_type_name(self, tn)

    def is_nullable(self) -> "bool":
        r"""is_nullable(OEFieldBase self) -> bool"""
        return _oechem.OEFieldBase_is_nullable(self)

    def get_read_only(self) -> "bool":
        r"""get_read_only(OEFieldBase self) -> bool"""
        return _oechem.OEFieldBase_get_read_only(self)

    def get_meta(self) -> "OEDataFlow::OEFieldMeta":
        r"""get_meta(OEFieldBase self) -> OEFieldMeta"""
        return _oechem.OEFieldBase_get_meta(self)

    def set_meta(self, meta: "OEFieldMeta") -> "void":
        r"""set_meta(OEFieldBase self, OEFieldMeta meta)"""
        return _oechem.OEFieldBase_set_meta(self, meta)

    def is_valid(self) -> "bool":
        r"""is_valid(OEFieldBase self) -> bool"""
        return _oechem.OEFieldBase_is_valid(self)
    __swig_destroy__ = _oechem.delete_OEFieldBase

# Register OEFieldBase in _oechem:
_oechem.OEFieldBase_swigregister(OEFieldBase)

class OERange(object):
    r"""Proxy of C++ OEDataFlow::OERange 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__(OERange self) -> OERange
        __init__(OERange self, OEOptionalDouble low, OEOptionalDouble high, std::string const & incl="[]") -> OERange
        __init__(OERange self, OEOptionalDouble low, OEOptionalDouble high, unsigned int incl) -> OERange
        __init__(OERange self, OEDoubleVector v) -> OERange
        __init__(OERange self, OERange arg2) -> OERange
        """
        _oechem.OERange_swiginit(self, _oechem.new_OERange(*args))

    def is_empty(self) -> "bool":
        r"""is_empty(OERange self) -> bool"""
        return _oechem.OERange_is_empty(self)

    def is_valid(self) -> "bool":
        r"""is_valid(OERange self) -> bool"""
        return _oechem.OERange_is_valid(self)

    def get_as_vector(self) -> "std::vector< double,std::allocator< double > >":
        r"""get_as_vector(OERange self) -> OEDoubleVector"""
        return _oechem.OERange_get_as_vector(self)

    def get_low(self) -> "double":
        r"""get_low(OERange self) -> double"""
        return _oechem.OERange_get_low(self)

    def get_high(self) -> "double":
        r"""get_high(OERange self) -> double"""
        return _oechem.OERange_get_high(self)

    def get_inclusivity_string(self) -> "std::string":
        r"""get_inclusivity_string(OERange self) -> std::string"""
        return _oechem.OERange_get_inclusivity_string(self)

    def is_unbounded_low(self) -> "bool":
        r"""is_unbounded_low(OERange self) -> bool"""
        return _oechem.OERange_is_unbounded_low(self)

    def is_unbounded_high(self) -> "bool":
        r"""is_unbounded_high(OERange self) -> bool"""
        return _oechem.OERange_is_unbounded_high(self)

    def __eq__(self, other: "OERange") -> "bool":
        r"""__eq__(OERange self, OERange other) -> bool"""
        return _oechem.OERange___eq__(self, other)
    __swig_destroy__ = _oechem.delete_OERange

# Register OERange in _oechem:
_oechem.OERange_swigregister(OERange)

class OEJSONObject(object):
    r"""Proxy of C++ OEDataFlow::OEJSONObject 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__(OEJSONObject self) -> OEJSONObject
        __init__(OEJSONObject self, std::string const & val) -> OEJSONObject
        """
        _oechem.OEJSONObject_swiginit(self, _oechem.new_OEJSONObject(*args))

    def get_value(self) -> "std::string":
        r"""get_value(OEJSONObject self) -> std::string"""
        return _oechem.OEJSONObject_get_value(self)

    def is_valid(self) -> "bool":
        r"""is_valid(OEJSONObject self) -> bool"""
        return _oechem.OEJSONObject_is_valid(self)
    __swig_destroy__ = _oechem.delete_OEJSONObject

# Register OEJSONObject in _oechem:
_oechem.OEJSONObject_swigregister(OEJSONObject)

class OELinkObject(OEJSONObject):
    r"""Proxy of C++ OEDataFlow::OELinkObject 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__(OELinkObject self) -> OELinkObject
        __init__(OELinkObject self, std::string const & val) -> OELinkObject
        """
        _oechem.OELinkObject_swiginit(self, _oechem.new_OELinkObject(*args))
    __swig_destroy__ = _oechem.delete_OELinkObject

# Register OELinkObject in _oechem:
_oechem.OELinkObject_swigregister(OELinkObject)

class OEFieldTypeHandler(object):
    r"""Proxy of C++ OEDataFlow::OEFieldTypeHandler 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__ = _oechem.delete_OEFieldTypeHandler

    def bytes_to_json(self, arg2: "OEUCharVector") -> "std::string":
        r"""bytes_to_json(OEFieldTypeHandler self, OEUCharVector arg2) -> std::string"""
        return _oechem.OEFieldTypeHandler_bytes_to_json(self, arg2)

    def get_name(self) -> "std::string":
        r"""get_name(OEFieldTypeHandler self) -> std::string"""
        return _oechem.OEFieldTypeHandler_get_name(self)

    def is_cacheable(self) -> "bool":
        r"""is_cacheable(OEFieldTypeHandler self) -> bool"""
        return _oechem.OEFieldTypeHandler_is_cacheable(self)

    def isPOD(self) -> "bool":
        r"""isPOD(OEFieldTypeHandler self) -> bool"""
        return _oechem.OEFieldTypeHandler_isPOD(self)

    def from_bytes(self, b: "OEUCharVector") -> "PyObject *":
        r"""from_bytes(OEFieldTypeHandler self, OEUCharVector b) -> PyObject *"""
        return _oechem.OEFieldTypeHandler_from_bytes(self, b)

    def to_bytes(self, val: "PyObject *") -> "PyObject *":
        r"""to_bytes(OEFieldTypeHandler self, PyObject * val) -> PyObject *"""
        return _oechem.OEFieldTypeHandler_to_bytes(self, val)

# Register OEFieldTypeHandler in _oechem:
_oechem.OEFieldTypeHandler_swigregister(OEFieldTypeHandler)

class OEFieldTypeHandlerRegistry(object):
    r"""Proxy of C++ OEDataFlow::OEFieldTypeHandlerRegistry 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")
    __repr__ = _swig_repr
    __swig_destroy__ = _oechem.delete_OEFieldTypeHandlerRegistry

    def RegisterHandler(self, handler: "OEFieldTypeHandler", priority: "int"=0) -> "void":
        r"""RegisterHandler(OEFieldTypeHandlerRegistry self, OEFieldTypeHandler handler, int priority=0)"""
        return _oechem.OEFieldTypeHandlerRegistry_RegisterHandler(self, handler, priority)

    @staticmethod
    def GetInstance() -> "OEDataFlow::OEFieldTypeHandlerRegistry &":
        r"""GetInstance() -> OEFieldTypeHandlerRegistry"""
        return _oechem.OEFieldTypeHandlerRegistry_GetInstance()

    def GetHandler(self, name: "std::string const &") -> "OEDataFlow::OEFieldTypeHandler *":
        r"""GetHandler(OEFieldTypeHandlerRegistry self, std::string const & name) -> OEFieldTypeHandler"""
        return _oechem.OEFieldTypeHandlerRegistry_GetHandler(self, name)

# Register OEFieldTypeHandlerRegistry in _oechem:
_oechem.OEFieldTypeHandlerRegistry_swigregister(OEFieldTypeHandlerRegistry)

def OEFieldTypeHandlerRegistry_GetInstance() -> "OEDataFlow::OEFieldTypeHandlerRegistry &":
    r"""OEFieldTypeHandlerRegistry_GetInstance() -> OEFieldTypeHandlerRegistry"""
    return _oechem.OEFieldTypeHandlerRegistry_GetInstance()

class OEWrappedFieldTypeHandler(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEWrappedFieldTypeHandler 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__ = _oechem.delete_OEWrappedFieldTypeHandler

    def SetValue(self, r: "OERecord", field: "OEFieldBase", obj: "void const *") -> "bool":
        r"""SetValue(OEWrappedFieldTypeHandler self, OERecord r, OEFieldBase field, void const * obj) -> bool"""
        return _oechem.OEWrappedFieldTypeHandler_SetValue(self, r, field, obj)

    def GetValue(self, r: "OERecord", field: "OEFieldBase") -> "void *":
        r"""GetValue(OEWrappedFieldTypeHandler self, OERecord r, OEFieldBase field) -> void *"""
        return _oechem.OEWrappedFieldTypeHandler_GetValue(self, r, field)

    def GetReference(self, r: "OERecord", field: "OEFieldBase") -> "void *":
        r"""GetReference(OEWrappedFieldTypeHandler self, OERecord r, OEFieldBase field) -> void *"""
        return _oechem.OEWrappedFieldTypeHandler_GetReference(self, r, field)

    def MakeField(self, name: "std::string const &", opts: "OEMakeFieldOptions") -> "void *":
        r"""MakeField(OEWrappedFieldTypeHandler self, std::string const & name, OEMakeFieldOptions opts) -> void *"""
        return _oechem.OEWrappedFieldTypeHandler_MakeField(self, name, opts)

    def MakeMatchField(self, name: "std::string const &", meta: "OEFieldMeta", readonly: "bool"=False, nullable: "bool"=False) -> "void *":
        r"""MakeMatchField(OEWrappedFieldTypeHandler self, std::string const & name, OEFieldMeta meta, bool readonly=False, bool nullable=False)"""
        return _oechem.OEWrappedFieldTypeHandler_MakeMatchField(self, name, meta, readonly, nullable)

# Register OEWrappedFieldTypeHandler in _oechem:
_oechem.OEWrappedFieldTypeHandler_swigregister(OEWrappedFieldTypeHandler)

class OEWrappedFieldTypeHandlerRegistry(object):
    r"""Proxy of C++ OEDataFlow::OEWrappedFieldTypeHandlerRegistry 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")
    __repr__ = _swig_repr
    __swig_destroy__ = _oechem.delete_OEWrappedFieldTypeHandlerRegistry

    def RegisterHandler(self, handler: "OEWrappedFieldTypeHandler") -> "void":
        r"""RegisterHandler(OEWrappedFieldTypeHandlerRegistry self, OEWrappedFieldTypeHandler handler)"""
        return _oechem.OEWrappedFieldTypeHandlerRegistry_RegisterHandler(self, handler)

    @staticmethod
    def GetInstance() -> "OEDataFlow::OEWrappedFieldTypeHandlerRegistry &":
        r"""GetInstance() -> OEWrappedFieldTypeHandlerRegistry"""
        return _oechem.OEWrappedFieldTypeHandlerRegistry_GetInstance()

    def GetHandler(self, name: "std::string const &") -> "OEDataFlow::OEWrappedFieldTypeHandler *":
        r"""GetHandler(OEWrappedFieldTypeHandlerRegistry self, std::string const & name) -> OEWrappedFieldTypeHandler"""
        return _oechem.OEWrappedFieldTypeHandlerRegistry_GetHandler(self, name)

    def HasHandler(self, name: "std::string const &") -> "bool":
        r"""HasHandler(OEWrappedFieldTypeHandlerRegistry self, std::string const & name) -> bool"""
        return _oechem.OEWrappedFieldTypeHandlerRegistry_HasHandler(self, name)

# Register OEWrappedFieldTypeHandlerRegistry in _oechem:
_oechem.OEWrappedFieldTypeHandlerRegistry_swigregister(OEWrappedFieldTypeHandlerRegistry)

def OEWrappedFieldTypeHandlerRegistry_GetInstance() -> "OEDataFlow::OEWrappedFieldTypeHandlerRegistry &":
    r"""OEWrappedFieldTypeHandlerRegistry_GetInstance() -> OEWrappedFieldTypeHandlerRegistry"""
    return _oechem.OEWrappedFieldTypeHandlerRegistry_GetInstance()


def OEBase85Encode(input: "OEUCharVector") -> "std::string":
    r"""OEBase85Encode(OEUCharVector input) -> std::string"""
    return _oechem.OEBase85Encode(input)

def OEBase85Decode(input: "std::string const &") -> "OEDataFlow::OEBytes":
    r"""OEBase85Decode(std::string const & input) -> OEUCharVector"""
    return _oechem.OEBase85Decode(input)
class OERecord(object):
    r"""Proxy of C++ OEDataFlow::OERecord class."""

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

    def __init__(self, *args):
        r"""
        __init__(OERecord self) -> OERecord
        __init__(OERecord self, OERecord other) -> OERecord
        __init__(OERecord self, OERecord arg2) -> OERecord
        """
        _oechem.OERecord_swiginit(self, _oechem.new_OERecord(*args))

    def set_bytes(self, *args) -> "bool":
        r"""
        set_bytes(OERecord self, OEFieldBase f, OEUCharVector d) -> bool
        set_bytes(OERecord self, OEFieldBase f, OEOptionalUCharVector d) -> bool
        """
        return _oechem.OERecord_set_bytes(self, *args)

    def get_bytes(self, *args) -> "OEDataFlow::OEBytes":
        r"""
        get_bytes(OERecord self, OEFieldBase f) -> OEUCharVector
        get_bytes(OERecord self, OEUCharVector ret, OEFieldBase f) -> bool
        get_bytes(OERecord self, std::string const & fieldName) -> OEUCharVector
        """
        return _oechem.OERecord_get_bytes(self, *args)

    @staticmethod
    def get_version() -> "std::string":
        r"""get_version() -> std::string"""
        return _oechem.OERecord_get_version()

    def has_field(self, field: "OEFieldBase", matchMeta: "bool"=False) -> "bool":
        r"""has_field(OERecord self, OEFieldBase field, bool matchMeta=False) -> bool"""
        return _oechem.OERecord_has_field(self, field, matchMeta)

    def has_value(self, field: "OEFieldBase") -> "bool":
        r"""has_value(OERecord self, OEFieldBase field) -> bool"""
        return _oechem.OERecord_has_value(self, field)

    def add_field(self, f: "OEFieldBase") -> "bool":
        r"""add_field(OERecord self, OEFieldBase f) -> bool"""
        return _oechem.OERecord_add_field(self, f)

    def check_field(self, field: "OEFieldBase", matchMeta: "bool"=False) -> "unsigned int":
        r"""check_field(OERecord self, OEFieldBase field, bool matchMeta=False) -> unsigned int"""
        return _oechem.OERecord_check_field(self, field, matchMeta)

    def is_na(self, *args) -> "bool":
        r"""
        is_na(OERecord self, OEFieldBase field) -> bool
        is_na(OERecord self, std::string const & fieldName) -> bool
        """
        return _oechem.OERecord_is_na(self, *args)

    def clear_value(self, f: "OEFieldBase") -> "bool":
        r"""clear_value(OERecord self, OEFieldBase f) -> bool"""
        return _oechem.OERecord_clear_value(self, f)

    def delete_field(self, f: "OEFieldBase") -> "bool":
        r"""delete_field(OERecord self, OEFieldBase f) -> bool"""
        return _oechem.OERecord_delete_field(self, f)

    def get_record_meta(self) -> "OEDataFlow::OERecordMeta":
        r"""get_record_meta(OERecord self) -> OERecordMeta"""
        return _oechem.OERecord_get_record_meta(self)

    def set_record_meta(self, meta: "OERecordMeta") -> "void":
        r"""set_record_meta(OERecord self, OERecordMeta meta)"""
        return _oechem.OERecord_set_record_meta(self, meta)

    def get_field_meta(self, name: "std::string const &") -> "OEDataFlow::OEFieldMeta":
        r"""get_field_meta(OERecord self, std::string const & name) -> OEFieldMeta"""
        return _oechem.OERecord_get_field_meta(self, name)

    def get_source_id(self) -> "std::string":
        r"""get_source_id(OERecord self) -> std::string"""
        return _oechem.OERecord_get_source_id(self)

    def set_source_id(self, id: "std::string const &") -> "void":
        r"""set_source_id(OERecord self, std::string const & id)"""
        return _oechem.OERecord_set_source_id(self, id)

    def clear(self) -> "void":
        r"""clear(OERecord self)"""
        return _oechem.OERecord_clear(self)

    def is_empty(self) -> "bool":
        r"""is_empty(OERecord self) -> bool"""
        return _oechem.OERecord_is_empty(self)

    def flush(self) -> "void":
        r"""flush(OERecord self)"""
        return _oechem.OERecord_flush(self)

    def has_child_records(self, f: "OEFieldBase") -> "bool":
        r"""has_child_records(OERecord self, OEFieldBase f) -> bool"""
        return _oechem.OERecord_has_child_records(self, f)

    def get_child_record(self, *args) -> "OEDataFlow::OERecord &":
        r"""
        get_child_record(OERecord self, OEFieldBase f, std::string const & key) -> OERecord
        get_child_record(OERecord self, OEFieldBase f, int key) -> OERecord
        """
        return _oechem.OERecord_get_child_record(self, *args)

    def has_child_record(self, *args) -> "bool":
        r"""
        has_child_record(OERecord self, OEFieldBase f, std::string const & key) -> bool
        has_child_record(OERecord self, OEFieldBase f, int key) -> bool
        """
        return _oechem.OERecord_has_child_record(self, *args)

    def GetImpl(self, *args) -> "OEDataFlow::OERecordImpl const *":
        r"""
        GetImpl(OERecord self) -> OEDataFlow::OERecordImpl
        GetImpl(OERecord self) -> OEDataFlow::OERecordImpl const *
        """
        return _oechem.OERecord_GetImpl(self, *args)

    def _get_child_bytes(self, f: "OEFieldBase") -> "OEDataFlow::OEBytes":
        r"""_get_child_bytes(OERecord self, OEFieldBase f) -> OEUCharVector"""
        return _oechem.OERecord__get_child_bytes(self, f)

    def _set_child_bytes(self, f: "OEFieldBase", b: "OEUCharVector") -> "bool":
        r"""_set_child_bytes(OERecord self, OEFieldBase f, OEUCharVector b) -> bool"""
        return _oechem.OERecord__set_child_bytes(self, f, b)

    def CheckCache(self, field: "OEFieldBase", dirtyOnly: "bool"=False) -> "std::shared_ptr< void >":
        r"""CheckCache(OERecord self, OEFieldBase field, bool dirtyOnly=False) -> std::shared_ptr< void >"""
        return _oechem.OERecord_CheckCache(self, field, dirtyOnly)

    def set_value(self, f: "OEFieldBase", val: "PyObject *") -> "PyObject *":
        r"""set_value(OERecord self, OEFieldBase f, PyObject * val) -> PyObject *"""
        return _oechem.OERecord_set_value(self, f, val)

    def get_reference(self, f: "OEFieldBase") -> "PyObject *":
        r"""get_reference(OERecord self, OEFieldBase f) -> PyObject *"""
        return _oechem.OERecord_get_reference(self, f)

    def set_reference(self, f: "OEFieldBase", val: "PyObject *") -> "PyObject *":
        r"""set_reference(OERecord self, OEFieldBase f, PyObject * val) -> PyObject *"""
        return _oechem.OERecord_set_reference(self, f, val)

    def get_value(self, f: "OEFieldBase") -> "PyObject *":
        r"""get_value(OERecord self, OEFieldBase f) -> PyObject *"""
        return _oechem.OERecord_get_value(self, f)

    def get_field(self, name: "std::string const &", include_meta: "bool"=True) -> "PyObject *":
        r"""get_field(OERecord self, std::string const & name, bool include_meta=True) -> PyObject"""
        return _oechem.OERecord_get_field(self, name, include_meta)

    def get_fields(self, *args) -> "PyObject *":
        r"""
        get_fields(OERecord self) -> std::vector< OEDataFlow::OEFieldBase,std::allocator< OEDataFlow::OEFieldBase > >
        get_fields(OERecord self, bool include_meta=False) -> PyObject
        """
        return _oechem.OERecord_get_fields(self, *args)

    def _format_value(self, field: "OEFieldBase") -> "PyObject *":
        r"""_format_value(OERecord self, OEFieldBase field) -> PyObject *"""
        return _oechem.OERecord__format_value(self, field)

    def get_child_records(self, *args) -> "PyObject *":
        r"""
        get_child_records(OERecord self, OEFieldBase f) -> std::map< std::string,OEDataFlow::OERecord >
        get_child_records(OERecord self, OEFieldBase field=OEDataFlow::OEFieldBase()) -> PyObject
        """
        return _oechem.OERecord_get_child_records(self, *args)

    def _get_meta(self, field: "OEFieldBase") -> "OEDataFlow::OEFieldMeta":
        r"""_get_meta(OERecord self, OEFieldBase field) -> OEFieldMeta"""
        return _oechem.OERecord__get_meta(self, field)

# Register OERecord in _oechem:
_oechem.OERecord_swigregister(OERecord)

def OERecord_get_version() -> "std::string":
    r"""OERecord_get_version() -> std::string"""
    return _oechem.OERecord_get_version()


def OERecordToJSON(record: "OERecord") -> "std::string":
    r"""OERecordToJSON(OERecord record) -> std::string"""
    return _oechem.OERecordToJSON(record)

def OERecordFromJSON(record: "OERecord", js: "std::string const &") -> "bool":
    r"""OERecordFromJSON(OERecord record, std::string const & js) -> bool"""
    return _oechem.OERecordFromJSON(record, js)

def OERecordToBytes(record: "OERecord") -> "OEDataFlow::OEBytes":
    r"""OERecordToBytes(OERecord record) -> OEUCharVector"""
    return _oechem.OERecordToBytes(record)

def OERecordFromBytes(record: "OERecord", buf: "OEUCharVector") -> "bool":
    r"""OERecordFromBytes(OERecord record, OEUCharVector buf) -> bool"""
    return _oechem.OERecordFromBytes(record, buf)

def OEReadRecord(*args) -> "bool":
    r"""OEReadRecord(OERecord record, oeistream ifs, std::string const & fmt="binary") -> bool"""
    return _oechem.OEReadRecord(*args)

def OEWriteRecord(*args) -> "bool":
    r"""OEWriteRecord(oeostream ofs, OERecord rec, std::string const & fmt="binary") -> bool"""
    return _oechem.OEWriteRecord(*args)

def OEReadRecordBytes(ifs: "oeistream") -> "OEDataFlow::OEBytes":
    r"""OEReadRecordBytes(oeistream ifs) -> OEUCharVector"""
    return _oechem.OEReadRecordBytes(ifs)

def OEFieldMetaToJSON(meta: "OEFieldMeta") -> "std::string":
    r"""OEFieldMetaToJSON(OEFieldMeta meta) -> std::string"""
    return _oechem.OEFieldMetaToJSON(meta)

def OEFieldMetaFromJSON(meta: "OEFieldMeta", json: "std::string const &", clear: "bool"=True) -> "bool":
    r"""OEFieldMetaFromJSON(OEFieldMeta meta, std::string const & json, bool clear=True) -> bool"""
    return _oechem.OEFieldMetaFromJSON(meta, json, clear)
class OEOptionalRecord(object):
    r"""Proxy of C++ std::optional< OEDataFlow::OERecord > 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__(OEOptionalRecord self) -> OEOptionalRecord
        __init__(OEOptionalRecord self, OERecord value) -> OEOptionalRecord
        __init__(OEOptionalRecord self, OEOptionalRecord other) -> OEOptionalRecord
        """
        _oechem.OEOptionalRecord_swiginit(self, _oechem.new_OEOptionalRecord(*args))

    def IsValid(self):
      return _oechem.OEOptionalRecord___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalRecord self) -> bool"""
        return _oechem.OEOptionalRecord_has_value(self)

    def value(self) -> "OEDataFlow::OERecord const &":
        r"""value(OEOptionalRecord self) -> OERecord"""
        return _oechem.OEOptionalRecord_value(self)

    def value_or(self, arg2: "OERecord") -> "OEDataFlow::OERecord":
        r"""value_or(OEOptionalRecord self, OERecord arg2) -> OERecord"""
        return _oechem.OEOptionalRecord_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalRecord

# Register OEOptionalRecord in _oechem:
_oechem.OEOptionalRecord_swigregister(OEOptionalRecord)

class OEOptionalRange(object):
    r"""Proxy of C++ std::optional< OEDataFlow::OERange > 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__(OEOptionalRange self) -> OEOptionalRange
        __init__(OEOptionalRange self, OERange value) -> OEOptionalRange
        __init__(OEOptionalRange self, OEOptionalRange other) -> OEOptionalRange
        """
        _oechem.OEOptionalRange_swiginit(self, _oechem.new_OEOptionalRange(*args))

    def IsValid(self):
      return _oechem.OEOptionalRange___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalRange self) -> bool"""
        return _oechem.OEOptionalRange_has_value(self)

    def value(self) -> "OEDataFlow::OERange const &":
        r"""value(OEOptionalRange self) -> OERange"""
        return _oechem.OEOptionalRange_value(self)

    def value_or(self, arg2: "OERange") -> "OEDataFlow::OERange":
        r"""value_or(OEOptionalRange self, OERange arg2) -> OERange"""
        return _oechem.OEOptionalRange_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalRange

# Register OEOptionalRange in _oechem:
_oechem.OEOptionalRange_swigregister(OEOptionalRange)

class OEOptionalJSONObject(object):
    r"""Proxy of C++ std::optional< OEDataFlow::OEJSONObject > 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__(OEOptionalJSONObject self) -> OEOptionalJSONObject
        __init__(OEOptionalJSONObject self, OEJSONObject value) -> OEOptionalJSONObject
        __init__(OEOptionalJSONObject self, OEOptionalJSONObject other) -> OEOptionalJSONObject
        """
        _oechem.OEOptionalJSONObject_swiginit(self, _oechem.new_OEOptionalJSONObject(*args))

    def IsValid(self):
      return _oechem.OEOptionalJSONObject___nonzero__(self)



    def has_value(self) -> "bool":
        r"""has_value(OEOptionalJSONObject self) -> bool"""
        return _oechem.OEOptionalJSONObject_has_value(self)

    def value(self) -> "OEDataFlow::OEJSONObject const &":
        r"""value(OEOptionalJSONObject self) -> OEJSONObject"""
        return _oechem.OEOptionalJSONObject_value(self)

    def value_or(self, arg2: "OEJSONObject") -> "OEDataFlow::OEJSONObject":
        r"""value_or(OEOptionalJSONObject self, OEJSONObject arg2) -> OEJSONObject"""
        return _oechem.OEOptionalJSONObject_value_or(self, arg2)
    __swig_destroy__ = _oechem.delete_OEOptionalJSONObject

# Register OEOptionalJSONObject in _oechem:
_oechem.OEOptionalJSONObject_swigregister(OEOptionalJSONObject)

class OEVecOptInt(object):
    r"""Proxy of C++ std::vector< std::optional< OELongLong > > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEVecOptInt self) -> SwigPyIterator"""
        return _oechem.OEVecOptInt_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEVecOptInt self) -> bool"""
        return _oechem.OEVecOptInt___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEVecOptInt self) -> bool"""
        return _oechem.OEVecOptInt___bool__(self)

    def __len__(self) -> "std::vector< std::optional< OELongLong > >::size_type":
        r"""__len__(OEVecOptInt self) -> std::vector< std::optional< OELongLong > >::size_type"""
        return _oechem.OEVecOptInt___len__(self)

    def __getslice__(self, i: "std::vector< std::optional< OELongLong > >::difference_type", j: "std::vector< std::optional< OELongLong > >::difference_type") -> "std::vector< std::optional< OELongLong >,std::allocator< std::optional< OELongLong > > > *":
        r"""__getslice__(OEVecOptInt self, std::vector< std::optional< OELongLong > >::difference_type i, std::vector< std::optional< OELongLong > >::difference_type j) -> OEVecOptInt"""
        return _oechem.OEVecOptInt___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEVecOptInt self, std::vector< std::optional< OELongLong > >::difference_type i, std::vector< std::optional< OELongLong > >::difference_type j)
        __setslice__(OEVecOptInt self, std::vector< std::optional< OELongLong > >::difference_type i, std::vector< std::optional< OELongLong > >::difference_type j, OEVecOptInt v)
        """
        return _oechem.OEVecOptInt___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< std::optional< OELongLong > >::difference_type", j: "std::vector< std::optional< OELongLong > >::difference_type") -> "void":
        r"""__delslice__(OEVecOptInt self, std::vector< std::optional< OELongLong > >::difference_type i, std::vector< std::optional< OELongLong > >::difference_type j)"""
        return _oechem.OEVecOptInt___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEVecOptInt self, std::vector< std::optional< OELongLong > >::difference_type i)
        __delitem__(OEVecOptInt self, PySliceObject * slice)
        """
        return _oechem.OEVecOptInt___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< std::optional< OELongLong > >::value_type const &":
        r"""
        __getitem__(OEVecOptInt self, PySliceObject * slice) -> OEVecOptInt
        __getitem__(OEVecOptInt self, std::vector< std::optional< OELongLong > >::difference_type i) -> std::vector< std::optional< OELongLong > >::value_type const &
        """
        return _oechem.OEVecOptInt___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEVecOptInt self, PySliceObject * slice, OEVecOptInt v)
        __setitem__(OEVecOptInt self, PySliceObject * slice)
        __setitem__(OEVecOptInt self, std::vector< std::optional< OELongLong > >::difference_type i, std::vector< std::optional< OELongLong > >::value_type const & x)
        """
        return _oechem.OEVecOptInt___setitem__(self, *args)

    def pop(self) -> "std::vector< std::optional< OELongLong > >::value_type":
        r"""pop(OEVecOptInt self) -> std::vector< std::optional< OELongLong > >::value_type"""
        return _oechem.OEVecOptInt_pop(self)

    def append(self, x: "std::vector< std::optional< OELongLong > >::value_type const &") -> "void":
        r"""append(OEVecOptInt self, std::vector< std::optional< OELongLong > >::value_type const & x)"""
        return _oechem.OEVecOptInt_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEVecOptInt self) -> bool"""
        return _oechem.OEVecOptInt_empty(self)

    def size(self) -> "std::vector< std::optional< OELongLong > >::size_type":
        r"""size(OEVecOptInt self) -> std::vector< std::optional< OELongLong > >::size_type"""
        return _oechem.OEVecOptInt_size(self)

    def swap(self, v: "OEVecOptInt") -> "void":
        r"""swap(OEVecOptInt self, OEVecOptInt v)"""
        return _oechem.OEVecOptInt_swap(self, v)

    def begin(self) -> "std::vector< std::optional< OELongLong > >::iterator":
        r"""begin(OEVecOptInt self) -> std::vector< std::optional< OELongLong > >::iterator"""
        return _oechem.OEVecOptInt_begin(self)

    def end(self) -> "std::vector< std::optional< OELongLong > >::iterator":
        r"""end(OEVecOptInt self) -> std::vector< std::optional< OELongLong > >::iterator"""
        return _oechem.OEVecOptInt_end(self)

    def rbegin(self) -> "std::vector< std::optional< OELongLong > >::reverse_iterator":
        r"""rbegin(OEVecOptInt self) -> std::vector< std::optional< OELongLong > >::reverse_iterator"""
        return _oechem.OEVecOptInt_rbegin(self)

    def rend(self) -> "std::vector< std::optional< OELongLong > >::reverse_iterator":
        r"""rend(OEVecOptInt self) -> std::vector< std::optional< OELongLong > >::reverse_iterator"""
        return _oechem.OEVecOptInt_rend(self)

    def clear(self) -> "void":
        r"""clear(OEVecOptInt self)"""
        return _oechem.OEVecOptInt_clear(self)

    def get_allocator(self) -> "std::vector< std::optional< OELongLong > >::allocator_type":
        r"""get_allocator(OEVecOptInt self) -> std::vector< std::optional< OELongLong > >::allocator_type"""
        return _oechem.OEVecOptInt_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEVecOptInt self)"""
        return _oechem.OEVecOptInt_pop_back(self)

    def erase(self, *args) -> "std::vector< std::optional< OELongLong > >::iterator":
        r"""
        erase(OEVecOptInt self, std::vector< std::optional< OELongLong > >::iterator pos) -> std::vector< std::optional< OELongLong > >::iterator
        erase(OEVecOptInt self, std::vector< std::optional< OELongLong > >::iterator first, std::vector< std::optional< OELongLong > >::iterator last) -> std::vector< std::optional< OELongLong > >::iterator
        """
        return _oechem.OEVecOptInt_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEVecOptInt self) -> OEVecOptInt
        __init__(OEVecOptInt self, OEVecOptInt other) -> OEVecOptInt
        __init__(OEVecOptInt self, std::vector< std::optional< OELongLong > >::size_type size) -> OEVecOptInt
        __init__(OEVecOptInt self, std::vector< std::optional< OELongLong > >::size_type size, std::vector< std::optional< OELongLong > >::value_type const & value) -> OEVecOptInt
        """
        _oechem.OEVecOptInt_swiginit(self, _oechem.new_OEVecOptInt(*args))

    def push_back(self, x: "std::vector< std::optional< OELongLong > >::value_type const &") -> "void":
        r"""push_back(OEVecOptInt self, std::vector< std::optional< OELongLong > >::value_type const & x)"""
        return _oechem.OEVecOptInt_push_back(self, x)

    def front(self) -> "std::vector< std::optional< OELongLong > >::value_type const &":
        r"""front(OEVecOptInt self) -> std::vector< std::optional< OELongLong > >::value_type const &"""
        return _oechem.OEVecOptInt_front(self)

    def back(self) -> "std::vector< std::optional< OELongLong > >::value_type const &":
        r"""back(OEVecOptInt self) -> std::vector< std::optional< OELongLong > >::value_type const &"""
        return _oechem.OEVecOptInt_back(self)

    def assign(self, n: "std::vector< std::optional< OELongLong > >::size_type", x: "std::vector< std::optional< OELongLong > >::value_type const &") -> "void":
        r"""assign(OEVecOptInt self, std::vector< std::optional< OELongLong > >::size_type n, std::vector< std::optional< OELongLong > >::value_type const & x)"""
        return _oechem.OEVecOptInt_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEVecOptInt self, std::vector< std::optional< OELongLong > >::size_type new_size)
        resize(OEVecOptInt self, std::vector< std::optional< OELongLong > >::size_type new_size, std::vector< std::optional< OELongLong > >::value_type const & x)
        """
        return _oechem.OEVecOptInt_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEVecOptInt self, std::vector< std::optional< OELongLong > >::iterator pos, std::vector< std::optional< OELongLong > >::value_type const & x) -> std::vector< std::optional< OELongLong > >::iterator
        insert(OEVecOptInt self, std::vector< std::optional< OELongLong > >::iterator pos, std::vector< std::optional< OELongLong > >::size_type n, std::vector< std::optional< OELongLong > >::value_type const & x)
        """
        return _oechem.OEVecOptInt_insert(self, *args)

    def reserve(self, n: "std::vector< std::optional< OELongLong > >::size_type") -> "void":
        r"""reserve(OEVecOptInt self, std::vector< std::optional< OELongLong > >::size_type n)"""
        return _oechem.OEVecOptInt_reserve(self, n)

    def capacity(self) -> "std::vector< std::optional< OELongLong > >::size_type":
        r"""capacity(OEVecOptInt self) -> std::vector< std::optional< OELongLong > >::size_type"""
        return _oechem.OEVecOptInt_capacity(self)
    __swig_destroy__ = _oechem.delete_OEVecOptInt

# Register OEVecOptInt in _oechem:
_oechem.OEVecOptInt_swigregister(OEVecOptInt)

class OEVecOptFloat(object):
    r"""Proxy of C++ std::vector< std::optional< double > > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEVecOptFloat self) -> SwigPyIterator"""
        return _oechem.OEVecOptFloat_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEVecOptFloat self) -> bool"""
        return _oechem.OEVecOptFloat___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEVecOptFloat self) -> bool"""
        return _oechem.OEVecOptFloat___bool__(self)

    def __len__(self) -> "std::vector< std::optional< double > >::size_type":
        r"""__len__(OEVecOptFloat self) -> std::vector< std::optional< double > >::size_type"""
        return _oechem.OEVecOptFloat___len__(self)

    def __getslice__(self, i: "std::vector< std::optional< double > >::difference_type", j: "std::vector< std::optional< double > >::difference_type") -> "std::vector< std::optional< double >,std::allocator< std::optional< double > > > *":
        r"""__getslice__(OEVecOptFloat self, std::vector< std::optional< double > >::difference_type i, std::vector< std::optional< double > >::difference_type j) -> OEVecOptFloat"""
        return _oechem.OEVecOptFloat___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEVecOptFloat self, std::vector< std::optional< double > >::difference_type i, std::vector< std::optional< double > >::difference_type j)
        __setslice__(OEVecOptFloat self, std::vector< std::optional< double > >::difference_type i, std::vector< std::optional< double > >::difference_type j, OEVecOptFloat v)
        """
        return _oechem.OEVecOptFloat___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< std::optional< double > >::difference_type", j: "std::vector< std::optional< double > >::difference_type") -> "void":
        r"""__delslice__(OEVecOptFloat self, std::vector< std::optional< double > >::difference_type i, std::vector< std::optional< double > >::difference_type j)"""
        return _oechem.OEVecOptFloat___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEVecOptFloat self, std::vector< std::optional< double > >::difference_type i)
        __delitem__(OEVecOptFloat self, PySliceObject * slice)
        """
        return _oechem.OEVecOptFloat___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< std::optional< double > >::value_type const &":
        r"""
        __getitem__(OEVecOptFloat self, PySliceObject * slice) -> OEVecOptFloat
        __getitem__(OEVecOptFloat self, std::vector< std::optional< double > >::difference_type i) -> OEOptionalDouble
        """
        return _oechem.OEVecOptFloat___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEVecOptFloat self, PySliceObject * slice, OEVecOptFloat v)
        __setitem__(OEVecOptFloat self, PySliceObject * slice)
        __setitem__(OEVecOptFloat self, std::vector< std::optional< double > >::difference_type i, OEOptionalDouble x)
        """
        return _oechem.OEVecOptFloat___setitem__(self, *args)

    def pop(self) -> "std::vector< std::optional< double > >::value_type":
        r"""pop(OEVecOptFloat self) -> OEOptionalDouble"""
        return _oechem.OEVecOptFloat_pop(self)

    def append(self, x: "OEOptionalDouble") -> "void":
        r"""append(OEVecOptFloat self, OEOptionalDouble x)"""
        return _oechem.OEVecOptFloat_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEVecOptFloat self) -> bool"""
        return _oechem.OEVecOptFloat_empty(self)

    def size(self) -> "std::vector< std::optional< double > >::size_type":
        r"""size(OEVecOptFloat self) -> std::vector< std::optional< double > >::size_type"""
        return _oechem.OEVecOptFloat_size(self)

    def swap(self, v: "OEVecOptFloat") -> "void":
        r"""swap(OEVecOptFloat self, OEVecOptFloat v)"""
        return _oechem.OEVecOptFloat_swap(self, v)

    def begin(self) -> "std::vector< std::optional< double > >::iterator":
        r"""begin(OEVecOptFloat self) -> std::vector< std::optional< double > >::iterator"""
        return _oechem.OEVecOptFloat_begin(self)

    def end(self) -> "std::vector< std::optional< double > >::iterator":
        r"""end(OEVecOptFloat self) -> std::vector< std::optional< double > >::iterator"""
        return _oechem.OEVecOptFloat_end(self)

    def rbegin(self) -> "std::vector< std::optional< double > >::reverse_iterator":
        r"""rbegin(OEVecOptFloat self) -> std::vector< std::optional< double > >::reverse_iterator"""
        return _oechem.OEVecOptFloat_rbegin(self)

    def rend(self) -> "std::vector< std::optional< double > >::reverse_iterator":
        r"""rend(OEVecOptFloat self) -> std::vector< std::optional< double > >::reverse_iterator"""
        return _oechem.OEVecOptFloat_rend(self)

    def clear(self) -> "void":
        r"""clear(OEVecOptFloat self)"""
        return _oechem.OEVecOptFloat_clear(self)

    def get_allocator(self) -> "std::vector< std::optional< double > >::allocator_type":
        r"""get_allocator(OEVecOptFloat self) -> std::vector< std::optional< double > >::allocator_type"""
        return _oechem.OEVecOptFloat_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEVecOptFloat self)"""
        return _oechem.OEVecOptFloat_pop_back(self)

    def erase(self, *args) -> "std::vector< std::optional< double > >::iterator":
        r"""
        erase(OEVecOptFloat self, std::vector< std::optional< double > >::iterator pos) -> std::vector< std::optional< double > >::iterator
        erase(OEVecOptFloat self, std::vector< std::optional< double > >::iterator first, std::vector< std::optional< double > >::iterator last) -> std::vector< std::optional< double > >::iterator
        """
        return _oechem.OEVecOptFloat_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEVecOptFloat self) -> OEVecOptFloat
        __init__(OEVecOptFloat self, OEVecOptFloat other) -> OEVecOptFloat
        __init__(OEVecOptFloat self, std::vector< std::optional< double > >::size_type size) -> OEVecOptFloat
        __init__(OEVecOptFloat self, std::vector< std::optional< double > >::size_type size, OEOptionalDouble value) -> OEVecOptFloat
        """
        _oechem.OEVecOptFloat_swiginit(self, _oechem.new_OEVecOptFloat(*args))

    def push_back(self, x: "OEOptionalDouble") -> "void":
        r"""push_back(OEVecOptFloat self, OEOptionalDouble x)"""
        return _oechem.OEVecOptFloat_push_back(self, x)

    def front(self) -> "std::vector< std::optional< double > >::value_type const &":
        r"""front(OEVecOptFloat self) -> OEOptionalDouble"""
        return _oechem.OEVecOptFloat_front(self)

    def back(self) -> "std::vector< std::optional< double > >::value_type const &":
        r"""back(OEVecOptFloat self) -> OEOptionalDouble"""
        return _oechem.OEVecOptFloat_back(self)

    def assign(self, n: "std::vector< std::optional< double > >::size_type", x: "OEOptionalDouble") -> "void":
        r"""assign(OEVecOptFloat self, std::vector< std::optional< double > >::size_type n, OEOptionalDouble x)"""
        return _oechem.OEVecOptFloat_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEVecOptFloat self, std::vector< std::optional< double > >::size_type new_size)
        resize(OEVecOptFloat self, std::vector< std::optional< double > >::size_type new_size, OEOptionalDouble x)
        """
        return _oechem.OEVecOptFloat_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEVecOptFloat self, std::vector< std::optional< double > >::iterator pos, OEOptionalDouble x) -> std::vector< std::optional< double > >::iterator
        insert(OEVecOptFloat self, std::vector< std::optional< double > >::iterator pos, std::vector< std::optional< double > >::size_type n, OEOptionalDouble x)
        """
        return _oechem.OEVecOptFloat_insert(self, *args)

    def reserve(self, n: "std::vector< std::optional< double > >::size_type") -> "void":
        r"""reserve(OEVecOptFloat self, std::vector< std::optional< double > >::size_type n)"""
        return _oechem.OEVecOptFloat_reserve(self, n)

    def capacity(self) -> "std::vector< std::optional< double > >::size_type":
        r"""capacity(OEVecOptFloat self) -> std::vector< std::optional< double > >::size_type"""
        return _oechem.OEVecOptFloat_capacity(self)
    __swig_destroy__ = _oechem.delete_OEVecOptFloat

# Register OEVecOptFloat in _oechem:
_oechem.OEVecOptFloat_swigregister(OEVecOptFloat)

class OEVecOptBool(object):
    r"""Proxy of C++ std::vector< std::optional< bool > > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEVecOptBool self) -> SwigPyIterator"""
        return _oechem.OEVecOptBool_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEVecOptBool self) -> bool"""
        return _oechem.OEVecOptBool___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEVecOptBool self) -> bool"""
        return _oechem.OEVecOptBool___bool__(self)

    def __len__(self) -> "std::vector< std::optional< bool > >::size_type":
        r"""__len__(OEVecOptBool self) -> std::vector< std::optional< bool > >::size_type"""
        return _oechem.OEVecOptBool___len__(self)

    def __getslice__(self, i: "std::vector< std::optional< bool > >::difference_type", j: "std::vector< std::optional< bool > >::difference_type") -> "std::vector< std::optional< bool >,std::allocator< std::optional< bool > > > *":
        r"""__getslice__(OEVecOptBool self, std::vector< std::optional< bool > >::difference_type i, std::vector< std::optional< bool > >::difference_type j) -> OEVecOptBool"""
        return _oechem.OEVecOptBool___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEVecOptBool self, std::vector< std::optional< bool > >::difference_type i, std::vector< std::optional< bool > >::difference_type j)
        __setslice__(OEVecOptBool self, std::vector< std::optional< bool > >::difference_type i, std::vector< std::optional< bool > >::difference_type j, OEVecOptBool v)
        """
        return _oechem.OEVecOptBool___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< std::optional< bool > >::difference_type", j: "std::vector< std::optional< bool > >::difference_type") -> "void":
        r"""__delslice__(OEVecOptBool self, std::vector< std::optional< bool > >::difference_type i, std::vector< std::optional< bool > >::difference_type j)"""
        return _oechem.OEVecOptBool___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEVecOptBool self, std::vector< std::optional< bool > >::difference_type i)
        __delitem__(OEVecOptBool self, PySliceObject * slice)
        """
        return _oechem.OEVecOptBool___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< std::optional< bool > >::value_type const &":
        r"""
        __getitem__(OEVecOptBool self, PySliceObject * slice) -> OEVecOptBool
        __getitem__(OEVecOptBool self, std::vector< std::optional< bool > >::difference_type i) -> std::vector< std::optional< bool > >::value_type const &
        """
        return _oechem.OEVecOptBool___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEVecOptBool self, PySliceObject * slice, OEVecOptBool v)
        __setitem__(OEVecOptBool self, PySliceObject * slice)
        __setitem__(OEVecOptBool self, std::vector< std::optional< bool > >::difference_type i, std::vector< std::optional< bool > >::value_type const & x)
        """
        return _oechem.OEVecOptBool___setitem__(self, *args)

    def pop(self) -> "std::vector< std::optional< bool > >::value_type":
        r"""pop(OEVecOptBool self) -> std::vector< std::optional< bool > >::value_type"""
        return _oechem.OEVecOptBool_pop(self)

    def append(self, x: "std::vector< std::optional< bool > >::value_type const &") -> "void":
        r"""append(OEVecOptBool self, std::vector< std::optional< bool > >::value_type const & x)"""
        return _oechem.OEVecOptBool_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEVecOptBool self) -> bool"""
        return _oechem.OEVecOptBool_empty(self)

    def size(self) -> "std::vector< std::optional< bool > >::size_type":
        r"""size(OEVecOptBool self) -> std::vector< std::optional< bool > >::size_type"""
        return _oechem.OEVecOptBool_size(self)

    def swap(self, v: "OEVecOptBool") -> "void":
        r"""swap(OEVecOptBool self, OEVecOptBool v)"""
        return _oechem.OEVecOptBool_swap(self, v)

    def begin(self) -> "std::vector< std::optional< bool > >::iterator":
        r"""begin(OEVecOptBool self) -> std::vector< std::optional< bool > >::iterator"""
        return _oechem.OEVecOptBool_begin(self)

    def end(self) -> "std::vector< std::optional< bool > >::iterator":
        r"""end(OEVecOptBool self) -> std::vector< std::optional< bool > >::iterator"""
        return _oechem.OEVecOptBool_end(self)

    def rbegin(self) -> "std::vector< std::optional< bool > >::reverse_iterator":
        r"""rbegin(OEVecOptBool self) -> std::vector< std::optional< bool > >::reverse_iterator"""
        return _oechem.OEVecOptBool_rbegin(self)

    def rend(self) -> "std::vector< std::optional< bool > >::reverse_iterator":
        r"""rend(OEVecOptBool self) -> std::vector< std::optional< bool > >::reverse_iterator"""
        return _oechem.OEVecOptBool_rend(self)

    def clear(self) -> "void":
        r"""clear(OEVecOptBool self)"""
        return _oechem.OEVecOptBool_clear(self)

    def get_allocator(self) -> "std::vector< std::optional< bool > >::allocator_type":
        r"""get_allocator(OEVecOptBool self) -> std::vector< std::optional< bool > >::allocator_type"""
        return _oechem.OEVecOptBool_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEVecOptBool self)"""
        return _oechem.OEVecOptBool_pop_back(self)

    def erase(self, *args) -> "std::vector< std::optional< bool > >::iterator":
        r"""
        erase(OEVecOptBool self, std::vector< std::optional< bool > >::iterator pos) -> std::vector< std::optional< bool > >::iterator
        erase(OEVecOptBool self, std::vector< std::optional< bool > >::iterator first, std::vector< std::optional< bool > >::iterator last) -> std::vector< std::optional< bool > >::iterator
        """
        return _oechem.OEVecOptBool_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEVecOptBool self) -> OEVecOptBool
        __init__(OEVecOptBool self, OEVecOptBool other) -> OEVecOptBool
        __init__(OEVecOptBool self, std::vector< std::optional< bool > >::size_type size) -> OEVecOptBool
        __init__(OEVecOptBool self, std::vector< std::optional< bool > >::size_type size, std::vector< std::optional< bool > >::value_type const & value) -> OEVecOptBool
        """
        _oechem.OEVecOptBool_swiginit(self, _oechem.new_OEVecOptBool(*args))

    def push_back(self, x: "std::vector< std::optional< bool > >::value_type const &") -> "void":
        r"""push_back(OEVecOptBool self, std::vector< std::optional< bool > >::value_type const & x)"""
        return _oechem.OEVecOptBool_push_back(self, x)

    def front(self) -> "std::vector< std::optional< bool > >::value_type const &":
        r"""front(OEVecOptBool self) -> std::vector< std::optional< bool > >::value_type const &"""
        return _oechem.OEVecOptBool_front(self)

    def back(self) -> "std::vector< std::optional< bool > >::value_type const &":
        r"""back(OEVecOptBool self) -> std::vector< std::optional< bool > >::value_type const &"""
        return _oechem.OEVecOptBool_back(self)

    def assign(self, n: "std::vector< std::optional< bool > >::size_type", x: "std::vector< std::optional< bool > >::value_type const &") -> "void":
        r"""assign(OEVecOptBool self, std::vector< std::optional< bool > >::size_type n, std::vector< std::optional< bool > >::value_type const & x)"""
        return _oechem.OEVecOptBool_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEVecOptBool self, std::vector< std::optional< bool > >::size_type new_size)
        resize(OEVecOptBool self, std::vector< std::optional< bool > >::size_type new_size, std::vector< std::optional< bool > >::value_type const & x)
        """
        return _oechem.OEVecOptBool_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEVecOptBool self, std::vector< std::optional< bool > >::iterator pos, std::vector< std::optional< bool > >::value_type const & x) -> std::vector< std::optional< bool > >::iterator
        insert(OEVecOptBool self, std::vector< std::optional< bool > >::iterator pos, std::vector< std::optional< bool > >::size_type n, std::vector< std::optional< bool > >::value_type const & x)
        """
        return _oechem.OEVecOptBool_insert(self, *args)

    def reserve(self, n: "std::vector< std::optional< bool > >::size_type") -> "void":
        r"""reserve(OEVecOptBool self, std::vector< std::optional< bool > >::size_type n)"""
        return _oechem.OEVecOptBool_reserve(self, n)

    def capacity(self) -> "std::vector< std::optional< bool > >::size_type":
        r"""capacity(OEVecOptBool self) -> std::vector< std::optional< bool > >::size_type"""
        return _oechem.OEVecOptBool_capacity(self)
    __swig_destroy__ = _oechem.delete_OEVecOptBool

# Register OEVecOptBool in _oechem:
_oechem.OEVecOptBool_swigregister(OEVecOptBool)

class OEVecOptString(object):
    r"""Proxy of C++ std::vector< std::optional< std::string > > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEVecOptString self) -> SwigPyIterator"""
        return _oechem.OEVecOptString_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEVecOptString self) -> bool"""
        return _oechem.OEVecOptString___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEVecOptString self) -> bool"""
        return _oechem.OEVecOptString___bool__(self)

    def __len__(self) -> "std::vector< std::optional< std::string > >::size_type":
        r"""__len__(OEVecOptString self) -> std::vector< std::optional< std::string > >::size_type"""
        return _oechem.OEVecOptString___len__(self)

    def __getslice__(self, i: "std::vector< std::optional< std::string > >::difference_type", j: "std::vector< std::optional< std::string > >::difference_type") -> "std::vector< std::optional< std::string >,std::allocator< std::optional< std::string > > > *":
        r"""__getslice__(OEVecOptString self, std::vector< std::optional< std::string > >::difference_type i, std::vector< std::optional< std::string > >::difference_type j) -> OEVecOptString"""
        return _oechem.OEVecOptString___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEVecOptString self, std::vector< std::optional< std::string > >::difference_type i, std::vector< std::optional< std::string > >::difference_type j)
        __setslice__(OEVecOptString self, std::vector< std::optional< std::string > >::difference_type i, std::vector< std::optional< std::string > >::difference_type j, OEVecOptString v)
        """
        return _oechem.OEVecOptString___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< std::optional< std::string > >::difference_type", j: "std::vector< std::optional< std::string > >::difference_type") -> "void":
        r"""__delslice__(OEVecOptString self, std::vector< std::optional< std::string > >::difference_type i, std::vector< std::optional< std::string > >::difference_type j)"""
        return _oechem.OEVecOptString___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEVecOptString self, std::vector< std::optional< std::string > >::difference_type i)
        __delitem__(OEVecOptString self, PySliceObject * slice)
        """
        return _oechem.OEVecOptString___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< std::optional< std::string > >::value_type const &":
        r"""
        __getitem__(OEVecOptString self, PySliceObject * slice) -> OEVecOptString
        __getitem__(OEVecOptString self, std::vector< std::optional< std::string > >::difference_type i) -> OEOptionalString
        """
        return _oechem.OEVecOptString___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEVecOptString self, PySliceObject * slice, OEVecOptString v)
        __setitem__(OEVecOptString self, PySliceObject * slice)
        __setitem__(OEVecOptString self, std::vector< std::optional< std::string > >::difference_type i, OEOptionalString x)
        """
        return _oechem.OEVecOptString___setitem__(self, *args)

    def pop(self) -> "std::vector< std::optional< std::string > >::value_type":
        r"""pop(OEVecOptString self) -> OEOptionalString"""
        return _oechem.OEVecOptString_pop(self)

    def append(self, x: "OEOptionalString") -> "void":
        r"""append(OEVecOptString self, OEOptionalString x)"""
        return _oechem.OEVecOptString_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEVecOptString self) -> bool"""
        return _oechem.OEVecOptString_empty(self)

    def size(self) -> "std::vector< std::optional< std::string > >::size_type":
        r"""size(OEVecOptString self) -> std::vector< std::optional< std::string > >::size_type"""
        return _oechem.OEVecOptString_size(self)

    def swap(self, v: "OEVecOptString") -> "void":
        r"""swap(OEVecOptString self, OEVecOptString v)"""
        return _oechem.OEVecOptString_swap(self, v)

    def begin(self) -> "std::vector< std::optional< std::string > >::iterator":
        r"""begin(OEVecOptString self) -> std::vector< std::optional< std::string > >::iterator"""
        return _oechem.OEVecOptString_begin(self)

    def end(self) -> "std::vector< std::optional< std::string > >::iterator":
        r"""end(OEVecOptString self) -> std::vector< std::optional< std::string > >::iterator"""
        return _oechem.OEVecOptString_end(self)

    def rbegin(self) -> "std::vector< std::optional< std::string > >::reverse_iterator":
        r"""rbegin(OEVecOptString self) -> std::vector< std::optional< std::string > >::reverse_iterator"""
        return _oechem.OEVecOptString_rbegin(self)

    def rend(self) -> "std::vector< std::optional< std::string > >::reverse_iterator":
        r"""rend(OEVecOptString self) -> std::vector< std::optional< std::string > >::reverse_iterator"""
        return _oechem.OEVecOptString_rend(self)

    def clear(self) -> "void":
        r"""clear(OEVecOptString self)"""
        return _oechem.OEVecOptString_clear(self)

    def get_allocator(self) -> "std::vector< std::optional< std::string > >::allocator_type":
        r"""get_allocator(OEVecOptString self) -> std::vector< std::optional< std::string > >::allocator_type"""
        return _oechem.OEVecOptString_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEVecOptString self)"""
        return _oechem.OEVecOptString_pop_back(self)

    def erase(self, *args) -> "std::vector< std::optional< std::string > >::iterator":
        r"""
        erase(OEVecOptString self, std::vector< std::optional< std::string > >::iterator pos) -> std::vector< std::optional< std::string > >::iterator
        erase(OEVecOptString self, std::vector< std::optional< std::string > >::iterator first, std::vector< std::optional< std::string > >::iterator last) -> std::vector< std::optional< std::string > >::iterator
        """
        return _oechem.OEVecOptString_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEVecOptString self) -> OEVecOptString
        __init__(OEVecOptString self, OEVecOptString other) -> OEVecOptString
        __init__(OEVecOptString self, std::vector< std::optional< std::string > >::size_type size) -> OEVecOptString
        __init__(OEVecOptString self, std::vector< std::optional< std::string > >::size_type size, OEOptionalString value) -> OEVecOptString
        """
        _oechem.OEVecOptString_swiginit(self, _oechem.new_OEVecOptString(*args))

    def push_back(self, x: "OEOptionalString") -> "void":
        r"""push_back(OEVecOptString self, OEOptionalString x)"""
        return _oechem.OEVecOptString_push_back(self, x)

    def front(self) -> "std::vector< std::optional< std::string > >::value_type const &":
        r"""front(OEVecOptString self) -> OEOptionalString"""
        return _oechem.OEVecOptString_front(self)

    def back(self) -> "std::vector< std::optional< std::string > >::value_type const &":
        r"""back(OEVecOptString self) -> OEOptionalString"""
        return _oechem.OEVecOptString_back(self)

    def assign(self, n: "std::vector< std::optional< std::string > >::size_type", x: "OEOptionalString") -> "void":
        r"""assign(OEVecOptString self, std::vector< std::optional< std::string > >::size_type n, OEOptionalString x)"""
        return _oechem.OEVecOptString_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEVecOptString self, std::vector< std::optional< std::string > >::size_type new_size)
        resize(OEVecOptString self, std::vector< std::optional< std::string > >::size_type new_size, OEOptionalString x)
        """
        return _oechem.OEVecOptString_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEVecOptString self, std::vector< std::optional< std::string > >::iterator pos, OEOptionalString x) -> std::vector< std::optional< std::string > >::iterator
        insert(OEVecOptString self, std::vector< std::optional< std::string > >::iterator pos, std::vector< std::optional< std::string > >::size_type n, OEOptionalString x)
        """
        return _oechem.OEVecOptString_insert(self, *args)

    def reserve(self, n: "std::vector< std::optional< std::string > >::size_type") -> "void":
        r"""reserve(OEVecOptString self, std::vector< std::optional< std::string > >::size_type n)"""
        return _oechem.OEVecOptString_reserve(self, n)

    def capacity(self) -> "std::vector< std::optional< std::string > >::size_type":
        r"""capacity(OEVecOptString self) -> std::vector< std::optional< std::string > >::size_type"""
        return _oechem.OEVecOptString_capacity(self)
    __swig_destroy__ = _oechem.delete_OEVecOptString

# Register OEVecOptString in _oechem:
_oechem.OEVecOptString_swigregister(OEVecOptString)

class OEVecOptBlob(object):
    r"""Proxy of C++ std::vector< std::optional< OEDataFlow::OEBytes > > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEVecOptBlob self) -> SwigPyIterator"""
        return _oechem.OEVecOptBlob_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEVecOptBlob self) -> bool"""
        return _oechem.OEVecOptBlob___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEVecOptBlob self) -> bool"""
        return _oechem.OEVecOptBlob___bool__(self)

    def __len__(self) -> "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type":
        r"""__len__(OEVecOptBlob self) -> std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type"""
        return _oechem.OEVecOptBlob___len__(self)

    def __getslice__(self, i: "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type", j: "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type") -> "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > >,std::allocator< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > > > *":
        r"""__getslice__(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type i, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type j) -> OEVecOptBlob"""
        return _oechem.OEVecOptBlob___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type i, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type j)
        __setslice__(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type i, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type j, OEVecOptBlob v)
        """
        return _oechem.OEVecOptBlob___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type", j: "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type") -> "void":
        r"""__delslice__(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type i, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type j)"""
        return _oechem.OEVecOptBlob___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type i)
        __delitem__(OEVecOptBlob self, PySliceObject * slice)
        """
        return _oechem.OEVecOptBlob___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::value_type const &":
        r"""
        __getitem__(OEVecOptBlob self, PySliceObject * slice) -> OEVecOptBlob
        __getitem__(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type i) -> OEOptionalUCharVector
        """
        return _oechem.OEVecOptBlob___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEVecOptBlob self, PySliceObject * slice, OEVecOptBlob v)
        __setitem__(OEVecOptBlob self, PySliceObject * slice)
        __setitem__(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::difference_type i, OEOptionalUCharVector x)
        """
        return _oechem.OEVecOptBlob___setitem__(self, *args)

    def pop(self) -> "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::value_type":
        r"""pop(OEVecOptBlob self) -> OEOptionalUCharVector"""
        return _oechem.OEVecOptBlob_pop(self)

    def append(self, x: "OEOptionalUCharVector") -> "void":
        r"""append(OEVecOptBlob self, OEOptionalUCharVector x)"""
        return _oechem.OEVecOptBlob_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEVecOptBlob self) -> bool"""
        return _oechem.OEVecOptBlob_empty(self)

    def size(self) -> "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type":
        r"""size(OEVecOptBlob self) -> std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type"""
        return _oechem.OEVecOptBlob_size(self)

    def swap(self, v: "OEVecOptBlob") -> "void":
        r"""swap(OEVecOptBlob self, OEVecOptBlob v)"""
        return _oechem.OEVecOptBlob_swap(self, v)

    def begin(self) -> "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::iterator":
        r"""begin(OEVecOptBlob self) -> std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::iterator"""
        return _oechem.OEVecOptBlob_begin(self)

    def end(self) -> "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::iterator":
        r"""end(OEVecOptBlob self) -> std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::iterator"""
        return _oechem.OEVecOptBlob_end(self)

    def rbegin(self) -> "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::reverse_iterator":
        r"""rbegin(OEVecOptBlob self) -> std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::reverse_iterator"""
        return _oechem.OEVecOptBlob_rbegin(self)

    def rend(self) -> "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::reverse_iterator":
        r"""rend(OEVecOptBlob self) -> std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::reverse_iterator"""
        return _oechem.OEVecOptBlob_rend(self)

    def clear(self) -> "void":
        r"""clear(OEVecOptBlob self)"""
        return _oechem.OEVecOptBlob_clear(self)

    def get_allocator(self) -> "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::allocator_type":
        r"""get_allocator(OEVecOptBlob self) -> std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::allocator_type"""
        return _oechem.OEVecOptBlob_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEVecOptBlob self)"""
        return _oechem.OEVecOptBlob_pop_back(self)

    def erase(self, *args) -> "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::iterator":
        r"""
        erase(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::iterator pos) -> std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::iterator
        erase(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::iterator first, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::iterator last) -> std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::iterator
        """
        return _oechem.OEVecOptBlob_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEVecOptBlob self) -> OEVecOptBlob
        __init__(OEVecOptBlob self, OEVecOptBlob other) -> OEVecOptBlob
        __init__(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type size) -> OEVecOptBlob
        __init__(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type size, OEOptionalUCharVector value) -> OEVecOptBlob
        """
        _oechem.OEVecOptBlob_swiginit(self, _oechem.new_OEVecOptBlob(*args))

    def push_back(self, x: "OEOptionalUCharVector") -> "void":
        r"""push_back(OEVecOptBlob self, OEOptionalUCharVector x)"""
        return _oechem.OEVecOptBlob_push_back(self, x)

    def front(self) -> "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::value_type const &":
        r"""front(OEVecOptBlob self) -> OEOptionalUCharVector"""
        return _oechem.OEVecOptBlob_front(self)

    def back(self) -> "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::value_type const &":
        r"""back(OEVecOptBlob self) -> OEOptionalUCharVector"""
        return _oechem.OEVecOptBlob_back(self)

    def assign(self, n: "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type", x: "OEOptionalUCharVector") -> "void":
        r"""assign(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type n, OEOptionalUCharVector x)"""
        return _oechem.OEVecOptBlob_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type new_size)
        resize(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type new_size, OEOptionalUCharVector x)
        """
        return _oechem.OEVecOptBlob_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::iterator pos, OEOptionalUCharVector x) -> std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::iterator
        insert(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::iterator pos, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type n, OEOptionalUCharVector x)
        """
        return _oechem.OEVecOptBlob_insert(self, *args)

    def reserve(self, n: "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type") -> "void":
        r"""reserve(OEVecOptBlob self, std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type n)"""
        return _oechem.OEVecOptBlob_reserve(self, n)

    def capacity(self) -> "std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type":
        r"""capacity(OEVecOptBlob self) -> std::vector< std::optional< std::vector< unsigned char,std::allocator< unsigned char > > > >::size_type"""
        return _oechem.OEVecOptBlob_capacity(self)
    __swig_destroy__ = _oechem.delete_OEVecOptBlob

# Register OEVecOptBlob in _oechem:
_oechem.OEVecOptBlob_swigregister(OEVecOptBlob)

class OEVecOptRecord(object):
    r"""Proxy of C++ std::vector< std::optional< OEDataFlow::OERecord > > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEVecOptRecord self) -> SwigPyIterator"""
        return _oechem.OEVecOptRecord_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEVecOptRecord self) -> bool"""
        return _oechem.OEVecOptRecord___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEVecOptRecord self) -> bool"""
        return _oechem.OEVecOptRecord___bool__(self)

    def __len__(self) -> "std::vector< std::optional< OEDataFlow::OERecord > >::size_type":
        r"""__len__(OEVecOptRecord self) -> std::vector< std::optional< OEDataFlow::OERecord > >::size_type"""
        return _oechem.OEVecOptRecord___len__(self)

    def __getslice__(self, i: "std::vector< std::optional< OEDataFlow::OERecord > >::difference_type", j: "std::vector< std::optional< OEDataFlow::OERecord > >::difference_type") -> "std::vector< std::optional< OEDataFlow::OERecord >,std::allocator< std::optional< OEDataFlow::OERecord > > > *":
        r"""__getslice__(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::difference_type i, std::vector< std::optional< OEDataFlow::OERecord > >::difference_type j) -> OEVecOptRecord"""
        return _oechem.OEVecOptRecord___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::difference_type i, std::vector< std::optional< OEDataFlow::OERecord > >::difference_type j)
        __setslice__(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::difference_type i, std::vector< std::optional< OEDataFlow::OERecord > >::difference_type j, OEVecOptRecord v)
        """
        return _oechem.OEVecOptRecord___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< std::optional< OEDataFlow::OERecord > >::difference_type", j: "std::vector< std::optional< OEDataFlow::OERecord > >::difference_type") -> "void":
        r"""__delslice__(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::difference_type i, std::vector< std::optional< OEDataFlow::OERecord > >::difference_type j)"""
        return _oechem.OEVecOptRecord___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::difference_type i)
        __delitem__(OEVecOptRecord self, PySliceObject * slice)
        """
        return _oechem.OEVecOptRecord___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< std::optional< OEDataFlow::OERecord > >::value_type const &":
        r"""
        __getitem__(OEVecOptRecord self, PySliceObject * slice) -> OEVecOptRecord
        __getitem__(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::difference_type i) -> OEOptionalRecord
        """
        return _oechem.OEVecOptRecord___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEVecOptRecord self, PySliceObject * slice, OEVecOptRecord v)
        __setitem__(OEVecOptRecord self, PySliceObject * slice)
        __setitem__(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::difference_type i, OEOptionalRecord x)
        """
        return _oechem.OEVecOptRecord___setitem__(self, *args)

    def pop(self) -> "std::vector< std::optional< OEDataFlow::OERecord > >::value_type":
        r"""pop(OEVecOptRecord self) -> OEOptionalRecord"""
        return _oechem.OEVecOptRecord_pop(self)

    def append(self, x: "OEOptionalRecord") -> "void":
        r"""append(OEVecOptRecord self, OEOptionalRecord x)"""
        return _oechem.OEVecOptRecord_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEVecOptRecord self) -> bool"""
        return _oechem.OEVecOptRecord_empty(self)

    def size(self) -> "std::vector< std::optional< OEDataFlow::OERecord > >::size_type":
        r"""size(OEVecOptRecord self) -> std::vector< std::optional< OEDataFlow::OERecord > >::size_type"""
        return _oechem.OEVecOptRecord_size(self)

    def swap(self, v: "OEVecOptRecord") -> "void":
        r"""swap(OEVecOptRecord self, OEVecOptRecord v)"""
        return _oechem.OEVecOptRecord_swap(self, v)

    def begin(self) -> "std::vector< std::optional< OEDataFlow::OERecord > >::iterator":
        r"""begin(OEVecOptRecord self) -> std::vector< std::optional< OEDataFlow::OERecord > >::iterator"""
        return _oechem.OEVecOptRecord_begin(self)

    def end(self) -> "std::vector< std::optional< OEDataFlow::OERecord > >::iterator":
        r"""end(OEVecOptRecord self) -> std::vector< std::optional< OEDataFlow::OERecord > >::iterator"""
        return _oechem.OEVecOptRecord_end(self)

    def rbegin(self) -> "std::vector< std::optional< OEDataFlow::OERecord > >::reverse_iterator":
        r"""rbegin(OEVecOptRecord self) -> std::vector< std::optional< OEDataFlow::OERecord > >::reverse_iterator"""
        return _oechem.OEVecOptRecord_rbegin(self)

    def rend(self) -> "std::vector< std::optional< OEDataFlow::OERecord > >::reverse_iterator":
        r"""rend(OEVecOptRecord self) -> std::vector< std::optional< OEDataFlow::OERecord > >::reverse_iterator"""
        return _oechem.OEVecOptRecord_rend(self)

    def clear(self) -> "void":
        r"""clear(OEVecOptRecord self)"""
        return _oechem.OEVecOptRecord_clear(self)

    def get_allocator(self) -> "std::vector< std::optional< OEDataFlow::OERecord > >::allocator_type":
        r"""get_allocator(OEVecOptRecord self) -> std::vector< std::optional< OEDataFlow::OERecord > >::allocator_type"""
        return _oechem.OEVecOptRecord_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEVecOptRecord self)"""
        return _oechem.OEVecOptRecord_pop_back(self)

    def erase(self, *args) -> "std::vector< std::optional< OEDataFlow::OERecord > >::iterator":
        r"""
        erase(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::iterator pos) -> std::vector< std::optional< OEDataFlow::OERecord > >::iterator
        erase(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::iterator first, std::vector< std::optional< OEDataFlow::OERecord > >::iterator last) -> std::vector< std::optional< OEDataFlow::OERecord > >::iterator
        """
        return _oechem.OEVecOptRecord_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEVecOptRecord self) -> OEVecOptRecord
        __init__(OEVecOptRecord self, OEVecOptRecord other) -> OEVecOptRecord
        __init__(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::size_type size) -> OEVecOptRecord
        __init__(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::size_type size, OEOptionalRecord value) -> OEVecOptRecord
        """
        _oechem.OEVecOptRecord_swiginit(self, _oechem.new_OEVecOptRecord(*args))

    def push_back(self, x: "OEOptionalRecord") -> "void":
        r"""push_back(OEVecOptRecord self, OEOptionalRecord x)"""
        return _oechem.OEVecOptRecord_push_back(self, x)

    def front(self) -> "std::vector< std::optional< OEDataFlow::OERecord > >::value_type const &":
        r"""front(OEVecOptRecord self) -> OEOptionalRecord"""
        return _oechem.OEVecOptRecord_front(self)

    def back(self) -> "std::vector< std::optional< OEDataFlow::OERecord > >::value_type const &":
        r"""back(OEVecOptRecord self) -> OEOptionalRecord"""
        return _oechem.OEVecOptRecord_back(self)

    def assign(self, n: "std::vector< std::optional< OEDataFlow::OERecord > >::size_type", x: "OEOptionalRecord") -> "void":
        r"""assign(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::size_type n, OEOptionalRecord x)"""
        return _oechem.OEVecOptRecord_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::size_type new_size)
        resize(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::size_type new_size, OEOptionalRecord x)
        """
        return _oechem.OEVecOptRecord_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::iterator pos, OEOptionalRecord x) -> std::vector< std::optional< OEDataFlow::OERecord > >::iterator
        insert(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::iterator pos, std::vector< std::optional< OEDataFlow::OERecord > >::size_type n, OEOptionalRecord x)
        """
        return _oechem.OEVecOptRecord_insert(self, *args)

    def reserve(self, n: "std::vector< std::optional< OEDataFlow::OERecord > >::size_type") -> "void":
        r"""reserve(OEVecOptRecord self, std::vector< std::optional< OEDataFlow::OERecord > >::size_type n)"""
        return _oechem.OEVecOptRecord_reserve(self, n)

    def capacity(self) -> "std::vector< std::optional< OEDataFlow::OERecord > >::size_type":
        r"""capacity(OEVecOptRecord self) -> std::vector< std::optional< OEDataFlow::OERecord > >::size_type"""
        return _oechem.OEVecOptRecord_capacity(self)
    __swig_destroy__ = _oechem.delete_OEVecOptRecord

# Register OEVecOptRecord in _oechem:
_oechem.OEVecOptRecord_swigregister(OEVecOptRecord)

class OEStringField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEField< std::string > 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__(OEStringField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEStringField
        __init__(OEStringField self, OEFieldBase other) -> OEStringField
        """
        _oechem.OEStringField_swiginit(self, _oechem.new_OEStringField(*args))

    def deserialize(self, value: "std::string &", data: "OEUCharVector") -> "bool":
        r"""deserialize(OEStringField self, std::string & value, OEUCharVector data) -> bool"""
        return _oechem.OEStringField_deserialize(self, value, data)

    def get_type(self) -> "OEDataFlow::OEFieldType< std::string >":
        r"""get_type(OEStringField self) -> OEStringType"""
        return _oechem.OEStringField_get_type(self)
    __swig_destroy__ = _oechem.delete_OEStringField

# Register OEStringField in _oechem:
_oechem.OEStringField_swigregister(OEStringField)

class OEIntField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEField< OELongLong > 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__(OEIntField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEIntField
        __init__(OEIntField self, OEFieldBase other) -> OEIntField
        """
        _oechem.OEIntField_swiginit(self, _oechem.new_OEIntField(*args))

    def deserialize(self, value: "OELongLong &", data: "OEUCharVector") -> "bool":
        r"""deserialize(OEIntField self, OELongLong & value, OEUCharVector data) -> bool"""
        return _oechem.OEIntField_deserialize(self, value, data)

    def get_type(self) -> "OEDataFlow::OEFieldType< OELongLong >":
        r"""get_type(OEIntField self) -> OEIntType"""
        return _oechem.OEIntField_get_type(self)
    __swig_destroy__ = _oechem.delete_OEIntField

# Register OEIntField in _oechem:
_oechem.OEIntField_swigregister(OEIntField)

class OEFloatField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEField< double > 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__(OEFloatField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEFloatField
        __init__(OEFloatField self, OEFieldBase other) -> OEFloatField
        """
        _oechem.OEFloatField_swiginit(self, _oechem.new_OEFloatField(*args))

    def deserialize(self, value: "double &", data: "OEUCharVector") -> "bool":
        r"""deserialize(OEFloatField self, double & value, OEUCharVector data) -> bool"""
        return _oechem.OEFloatField_deserialize(self, value, data)

    def get_type(self) -> "OEDataFlow::OEFieldType< double >":
        r"""get_type(OEFloatField self) -> OEFloatType"""
        return _oechem.OEFloatField_get_type(self)
    __swig_destroy__ = _oechem.delete_OEFloatField

# Register OEFloatField in _oechem:
_oechem.OEFloatField_swigregister(OEFloatField)

class OEBoolField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEField< bool > 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__(OEBoolField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEBoolField
        __init__(OEBoolField self, OEFieldBase other) -> OEBoolField
        """
        _oechem.OEBoolField_swiginit(self, _oechem.new_OEBoolField(*args))

    def deserialize(self, value: "bool &", data: "OEUCharVector") -> "bool":
        r"""deserialize(OEBoolField self, bool & value, OEUCharVector data) -> bool"""
        return _oechem.OEBoolField_deserialize(self, value, data)

    def get_type(self) -> "OEDataFlow::OEFieldType< bool >":
        r"""get_type(OEBoolField self) -> OEBoolType"""
        return _oechem.OEBoolField_get_type(self)
    __swig_destroy__ = _oechem.delete_OEBoolField

# Register OEBoolField in _oechem:
_oechem.OEBoolField_swigregister(OEBoolField)

class OEBlobField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEField< OEDataFlow::OEBytes > 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__(OEBlobField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEBlobField
        __init__(OEBlobField self, OEFieldBase other) -> OEBlobField
        """
        _oechem.OEBlobField_swiginit(self, _oechem.new_OEBlobField(*args))

    def deserialize(self, value: "OEUCharVector", data: "OEUCharVector") -> "bool":
        r"""deserialize(OEBlobField self, OEUCharVector value, OEUCharVector data) -> bool"""
        return _oechem.OEBlobField_deserialize(self, value, data)

    def get_type(self) -> "OEDataFlow::OEFieldType< std::vector< unsigned char,std::allocator< unsigned char > > >":
        r"""get_type(OEBlobField self) -> OEBlobType"""
        return _oechem.OEBlobField_get_type(self)
    __swig_destroy__ = _oechem.delete_OEBlobField

# Register OEBlobField in _oechem:
_oechem.OEBlobField_swigregister(OEBlobField)

class OERangeField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEField< OEDataFlow::OERange > 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__(OERangeField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OERangeField
        __init__(OERangeField self, OEFieldBase other) -> OERangeField
        """
        _oechem.OERangeField_swiginit(self, _oechem.new_OERangeField(*args))

    def deserialize(self, value: "OERange", data: "OEUCharVector") -> "bool":
        r"""deserialize(OERangeField self, OERange value, OEUCharVector data) -> bool"""
        return _oechem.OERangeField_deserialize(self, value, data)

    def get_type(self) -> "OEDataFlow::OEFieldType< OEDataFlow::OERange >":
        r"""get_type(OERangeField self) -> OERangeType"""
        return _oechem.OERangeField_get_type(self)
    __swig_destroy__ = _oechem.delete_OERangeField

# Register OERangeField in _oechem:
_oechem.OERangeField_swigregister(OERangeField)

class OEMolField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEField< OEChem::OEMol > 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__(OEMolField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEMolField
        __init__(OEMolField self, OEFieldBase other) -> OEMolField
        """
        _oechem.OEMolField_swiginit(self, _oechem.new_OEMolField(*args))

    def deserialize(self, value: "OEChem::OEMol &", data: "OEUCharVector") -> "bool":
        r"""deserialize(OEMolField self, OEChem::OEMol & value, OEUCharVector data) -> bool"""
        return _oechem.OEMolField_deserialize(self, value, data)

    def get_type(self) -> "OEDataFlow::OEFieldType< OEChem::OEMol >":
        r"""get_type(OEMolField self) -> OEMolType"""
        return _oechem.OEMolField_get_type(self)
    __swig_destroy__ = _oechem.delete_OEMolField

# Register OEMolField in _oechem:
_oechem.OEMolField_swigregister(OEMolField)

class OERecordField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEField< OEDataFlow::OERecord > 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__(OERecordField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OERecordField
        __init__(OERecordField self, OEFieldBase other) -> OERecordField
        """
        _oechem.OERecordField_swiginit(self, _oechem.new_OERecordField(*args))

    def deserialize(self, value: "OERecord", data: "OEUCharVector") -> "bool":
        r"""deserialize(OERecordField self, OERecord value, OEUCharVector data) -> bool"""
        return _oechem.OERecordField_deserialize(self, value, data)

    def get_type(self) -> "OEDataFlow::OEFieldType< OEDataFlow::OERecord >":
        r"""get_type(OERecordField self) -> OERecordType"""
        return _oechem.OERecordField_get_type(self)
    __swig_destroy__ = _oechem.delete_OERecordField

# Register OERecordField in _oechem:
_oechem.OERecordField_swigregister(OERecordField)

class OEJSONObjectField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEField< OEJSONObject > 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__(OEJSONObjectField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEJSONObjectField
        __init__(OEJSONObjectField self, OEFieldBase other) -> OEJSONObjectField
        """
        _oechem.OEJSONObjectField_swiginit(self, _oechem.new_OEJSONObjectField(*args))

    def deserialize(self, value: "OEJSONObject", data: "OEUCharVector") -> "bool":
        r"""deserialize(OEJSONObjectField self, OEJSONObject value, OEUCharVector data) -> bool"""
        return _oechem.OEJSONObjectField_deserialize(self, value, data)

    def get_type(self) -> "OEDataFlow::OEFieldType< OEDataFlow::OEJSONObject >":
        r"""get_type(OEJSONObjectField self) -> OEJSONObjectType"""
        return _oechem.OEJSONObjectField_get_type(self)
    __swig_destroy__ = _oechem.delete_OEJSONObjectField

# Register OEJSONObjectField in _oechem:
_oechem.OEJSONObjectField_swigregister(OEJSONObjectField)

class OELinkObjectField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEField< OELinkObject > 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__(OELinkObjectField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OELinkObjectField
        __init__(OELinkObjectField self, OEFieldBase other) -> OELinkObjectField
        """
        _oechem.OELinkObjectField_swiginit(self, _oechem.new_OELinkObjectField(*args))

    def deserialize(self, value: "OELinkObject", data: "OEUCharVector") -> "bool":
        r"""deserialize(OELinkObjectField self, OELinkObject value, OEUCharVector data) -> bool"""
        return _oechem.OELinkObjectField_deserialize(self, value, data)

    def get_type(self) -> "OEDataFlow::OEFieldType< OEDataFlow::OELinkObject >":
        r"""get_type(OELinkObjectField self) -> OELinkObjectType"""
        return _oechem.OELinkObjectField_get_type(self)
    __swig_destroy__ = _oechem.delete_OELinkObjectField

# Register OELinkObjectField in _oechem:
_oechem.OELinkObjectField_swigregister(OELinkObjectField)

class OEDesignUnitField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEField< OEBio::OEDesignUnit > 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__(OEDesignUnitField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEDesignUnitField
        __init__(OEDesignUnitField self, OEFieldBase other) -> OEDesignUnitField
        """
        _oechem.OEDesignUnitField_swiginit(self, _oechem.new_OEDesignUnitField(*args))

    def deserialize(self, value: "OEDesignUnit", data: "OEUCharVector") -> "bool":
        r"""deserialize(OEDesignUnitField self, OEDesignUnit value, OEUCharVector data) -> bool"""
        return _oechem.OEDesignUnitField_deserialize(self, value, data)

    def get_type(self) -> "OEDataFlow::OEFieldType< OEBio::OEDesignUnit >":
        r"""get_type(OEDesignUnitField self) -> OEDesignUnitType"""
        return _oechem.OEDesignUnitField_get_type(self)
    __swig_destroy__ = _oechem.delete_OEDesignUnitField

# Register OEDesignUnitField in _oechem:
_oechem.OEDesignUnitField_swigregister(OEDesignUnitField)

class OEIntVecField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEVectorField< OELongLong > 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__(OEIntVecField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEIntVecField
        __init__(OEIntVecField self, OEFieldBase f) -> OEIntVecField
        """
        _oechem.OEIntVecField_swiginit(self, _oechem.new_OEIntVecField(*args))

    def deserialize(self, *args) -> "bool":
        r"""
        deserialize(OEIntVecField self, OEVecOptInt ret, OEUCharVector data) -> bool
        deserialize(OEIntVecField self, std::vector< OELongLong,std::allocator< OELongLong > > & ret, OEUCharVector data) -> bool
        """
        return _oechem.OEIntVecField_deserialize(self, *args)

    def get_type(self) -> "OEDataFlow::OEVectorFieldType< OELongLong >":
        r"""get_type(OEIntVecField self) -> OEIntVecType"""
        return _oechem.OEIntVecField_get_type(self)
    __swig_destroy__ = _oechem.delete_OEIntVecField

# Register OEIntVecField in _oechem:
_oechem.OEIntVecField_swigregister(OEIntVecField)

class OEFloatVecField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEVectorField< double > 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__(OEFloatVecField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEFloatVecField
        __init__(OEFloatVecField self, OEFieldBase f) -> OEFloatVecField
        """
        _oechem.OEFloatVecField_swiginit(self, _oechem.new_OEFloatVecField(*args))

    def deserialize(self, *args) -> "bool":
        r"""
        deserialize(OEFloatVecField self, OEVecOptFloat ret, OEUCharVector data) -> bool
        deserialize(OEFloatVecField self, OEDoubleVector ret, OEUCharVector data) -> bool
        """
        return _oechem.OEFloatVecField_deserialize(self, *args)

    def get_type(self) -> "OEDataFlow::OEVectorFieldType< double >":
        r"""get_type(OEFloatVecField self) -> OEFloatVecType"""
        return _oechem.OEFloatVecField_get_type(self)
    __swig_destroy__ = _oechem.delete_OEFloatVecField

# Register OEFloatVecField in _oechem:
_oechem.OEFloatVecField_swigregister(OEFloatVecField)

class OEBoolVecField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEVectorField< bool > 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__(OEBoolVecField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEBoolVecField
        __init__(OEBoolVecField self, OEFieldBase f) -> OEBoolVecField
        """
        _oechem.OEBoolVecField_swiginit(self, _oechem.new_OEBoolVecField(*args))

    def deserialize(self, *args) -> "bool":
        r"""
        deserialize(OEBoolVecField self, OEVecOptBool ret, OEUCharVector data) -> bool
        deserialize(OEBoolVecField self, std::vector< bool,std::allocator< bool > > & ret, OEUCharVector data) -> bool
        """
        return _oechem.OEBoolVecField_deserialize(self, *args)

    def get_type(self) -> "OEDataFlow::OEVectorFieldType< bool >":
        r"""get_type(OEBoolVecField self) -> OEBoolVecType"""
        return _oechem.OEBoolVecField_get_type(self)
    __swig_destroy__ = _oechem.delete_OEBoolVecField

# Register OEBoolVecField in _oechem:
_oechem.OEBoolVecField_swigregister(OEBoolVecField)

class OEStringVecField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEVectorField< std::string > 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__(OEStringVecField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEStringVecField
        __init__(OEStringVecField self, OEFieldBase f) -> OEStringVecField
        """
        _oechem.OEStringVecField_swiginit(self, _oechem.new_OEStringVecField(*args))

    def deserialize(self, *args) -> "bool":
        r"""
        deserialize(OEStringVecField self, OEVecOptString ret, OEUCharVector data) -> bool
        deserialize(OEStringVecField self, OEStringVector ret, OEUCharVector data) -> bool
        """
        return _oechem.OEStringVecField_deserialize(self, *args)

    def get_type(self) -> "OEDataFlow::OEVectorFieldType< std::string >":
        r"""get_type(OEStringVecField self) -> OEStringVecType"""
        return _oechem.OEStringVecField_get_type(self)
    __swig_destroy__ = _oechem.delete_OEStringVecField

# Register OEStringVecField in _oechem:
_oechem.OEStringVecField_swigregister(OEStringVecField)

class OEBlobVecField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEVectorField< OEDataFlow::OEBytes > 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__(OEBlobVecField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEBlobVecField
        __init__(OEBlobVecField self, OEFieldBase f) -> OEBlobVecField
        """
        _oechem.OEBlobVecField_swiginit(self, _oechem.new_OEBlobVecField(*args))

    def deserialize(self, *args) -> "bool":
        r"""
        deserialize(OEBlobVecField self, OEVecOptBlob ret, OEUCharVector data) -> bool
        deserialize(OEBlobVecField self, std::vector< std::vector< unsigned char,std::allocator< unsigned char > >,std::allocator< std::vector< unsigned char,std::allocator< unsigned char > > > > & ret, OEUCharVector data) -> bool
        """
        return _oechem.OEBlobVecField_deserialize(self, *args)

    def get_type(self) -> "OEDataFlow::OEVectorFieldType< std::vector< unsigned char,std::allocator< unsigned char > > >":
        r"""get_type(OEBlobVecField self) -> OEBlobVecType"""
        return _oechem.OEBlobVecField_get_type(self)
    __swig_destroy__ = _oechem.delete_OEBlobVecField

# Register OEBlobVecField in _oechem:
_oechem.OEBlobVecField_swigregister(OEBlobVecField)

class OEMolVecField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEVectorField< OEChem::OEMol > 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__(OEMolVecField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEMolVecField
        __init__(OEMolVecField self, OEFieldBase f) -> OEMolVecField
        """
        _oechem.OEMolVecField_swiginit(self, _oechem.new_OEMolVecField(*args))

    def deserialize(self, *args) -> "bool":
        r"""
        deserialize(OEMolVecField self, VecOptMol ret, OEUCharVector data) -> bool
        deserialize(OEMolVecField self, std::vector< OEChem::OEMol,std::allocator< OEChem::OEMol > > & ret, OEUCharVector data) -> bool
        """
        return _oechem.OEMolVecField_deserialize(self, *args)

    def get_type(self) -> "OEDataFlow::OEVectorFieldType< OEChem::OEMol >":
        r"""get_type(OEMolVecField self) -> OEMolVecType"""
        return _oechem.OEMolVecField_get_type(self)
    __swig_destroy__ = _oechem.delete_OEMolVecField

# Register OEMolVecField in _oechem:
_oechem.OEMolVecField_swigregister(OEMolVecField)

class OERecordVecField(OEFieldBase):
    r"""Proxy of C++ OEDataFlow::OEVectorField< OEDataFlow::OERecord > 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__(OERecordVecField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OERecordVecField
        __init__(OERecordVecField self, OEFieldBase f) -> OERecordVecField
        """
        _oechem.OERecordVecField_swiginit(self, _oechem.new_OERecordVecField(*args))

    def deserialize(self, *args) -> "bool":
        r"""
        deserialize(OERecordVecField self, OEVecOptRecord ret, OEUCharVector data) -> bool
        deserialize(OERecordVecField self, std::vector< OEDataFlow::OERecord,std::allocator< OEDataFlow::OERecord > > & ret, OEUCharVector data) -> bool
        """
        return _oechem.OERecordVecField_deserialize(self, *args)

    def get_type(self) -> "OEDataFlow::OEVectorFieldType< OEDataFlow::OERecord >":
        r"""get_type(OERecordVecField self) -> OERecordVecType"""
        return _oechem.OERecordVecField_get_type(self)
    __swig_destroy__ = _oechem.delete_OERecordVecField

# Register OERecordVecField in _oechem:
_oechem.OERecordVecField_swigregister(OERecordVecField)

class OEStringType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEFieldType< std::string > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OEStringType self) -> std::string"""
        return _oechem.OEStringType_get_name(self)

    def isPOD(self) -> "bool":
        r"""isPOD(OEStringType self) -> bool"""
        return _oechem.OEStringType_isPOD(self)

    @staticmethod
    def format(val: "std::string const &") -> "std::string":
        r"""format(std::string const & val) -> std::string"""
        return _oechem.OEStringType_format(val)

    def __init__(self):
        r"""__init__(OEStringType self) -> OEStringType"""
        _oechem.OEStringType_swiginit(self, _oechem.new_OEStringType())
    __swig_destroy__ = _oechem.delete_OEStringType

# Register OEStringType in _oechem:
_oechem.OEStringType_swigregister(OEStringType)

def OEStringType_format(val: "std::string const &") -> "std::string":
    r"""OEStringType_format(std::string const & val) -> std::string"""
    return _oechem.OEStringType_format(val)

class OEIntType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEFieldType< OELongLong > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OEIntType self) -> std::string"""
        return _oechem.OEIntType_get_name(self)

    def isPOD(self) -> "bool":
        r"""isPOD(OEIntType self) -> bool"""
        return _oechem.OEIntType_isPOD(self)

    @staticmethod
    def format(val: "OELongLong") -> "std::string":
        r"""format(OELongLong val) -> std::string"""
        return _oechem.OEIntType_format(val)

    def __init__(self):
        r"""__init__(OEIntType self) -> OEIntType"""
        _oechem.OEIntType_swiginit(self, _oechem.new_OEIntType())
    __swig_destroy__ = _oechem.delete_OEIntType

# Register OEIntType in _oechem:
_oechem.OEIntType_swigregister(OEIntType)

def OEIntType_format(val: "OELongLong") -> "std::string":
    r"""OEIntType_format(OELongLong val) -> std::string"""
    return _oechem.OEIntType_format(val)

class OEFloatType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEFieldType< double > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OEFloatType self) -> std::string"""
        return _oechem.OEFloatType_get_name(self)

    def isPOD(self) -> "bool":
        r"""isPOD(OEFloatType self) -> bool"""
        return _oechem.OEFloatType_isPOD(self)

    @staticmethod
    def format(val: "double const &") -> "std::string":
        r"""format(double const & val) -> std::string"""
        return _oechem.OEFloatType_format(val)

    def __init__(self):
        r"""__init__(OEFloatType self) -> OEFloatType"""
        _oechem.OEFloatType_swiginit(self, _oechem.new_OEFloatType())
    __swig_destroy__ = _oechem.delete_OEFloatType

# Register OEFloatType in _oechem:
_oechem.OEFloatType_swigregister(OEFloatType)

def OEFloatType_format(val: "double const &") -> "std::string":
    r"""OEFloatType_format(double const & val) -> std::string"""
    return _oechem.OEFloatType_format(val)

class OEBoolType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEFieldType< bool > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OEBoolType self) -> std::string"""
        return _oechem.OEBoolType_get_name(self)

    def isPOD(self) -> "bool":
        r"""isPOD(OEBoolType self) -> bool"""
        return _oechem.OEBoolType_isPOD(self)

    @staticmethod
    def format(val: "bool") -> "std::string":
        r"""format(bool val) -> std::string"""
        return _oechem.OEBoolType_format(val)

    def __init__(self):
        r"""__init__(OEBoolType self) -> OEBoolType"""
        _oechem.OEBoolType_swiginit(self, _oechem.new_OEBoolType())
    __swig_destroy__ = _oechem.delete_OEBoolType

# Register OEBoolType in _oechem:
_oechem.OEBoolType_swigregister(OEBoolType)

def OEBoolType_format(val: "bool") -> "std::string":
    r"""OEBoolType_format(bool val) -> std::string"""
    return _oechem.OEBoolType_format(val)

class OEBlobType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEFieldType< OEDataFlow::OEBytes > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OEBlobType self) -> std::string"""
        return _oechem.OEBlobType_get_name(self)

    def isPOD(self) -> "bool":
        r"""isPOD(OEBlobType self) -> bool"""
        return _oechem.OEBlobType_isPOD(self)

    @staticmethod
    def format(val: "OEUCharVector") -> "std::string":
        r"""format(OEUCharVector val) -> std::string"""
        return _oechem.OEBlobType_format(val)

    def __init__(self):
        r"""__init__(OEBlobType self) -> OEBlobType"""
        _oechem.OEBlobType_swiginit(self, _oechem.new_OEBlobType())
    __swig_destroy__ = _oechem.delete_OEBlobType

# Register OEBlobType in _oechem:
_oechem.OEBlobType_swigregister(OEBlobType)

def OEBlobType_format(val: "OEUCharVector") -> "std::string":
    r"""OEBlobType_format(OEUCharVector val) -> std::string"""
    return _oechem.OEBlobType_format(val)

class OEMolType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEFieldType< OEChem::OEMol > 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__(OEMolType self) -> OEMolType"""
        _oechem.OEMolType_swiginit(self, _oechem.new_OEMolType())

    @staticmethod
    def format(val: "OEChem::OEMol const &") -> "std::string":
        r"""format(OEChem::OEMol const & val) -> std::string"""
        return _oechem.OEMolType_format(val)

    def get_name(self) -> "std::string":
        r"""get_name(OEMolType self) -> std::string"""
        return _oechem.OEMolType_get_name(self)
    __swig_destroy__ = _oechem.delete_OEMolType

# Register OEMolType in _oechem:
_oechem.OEMolType_swigregister(OEMolType)

def OEMolType_format(val: "OEChem::OEMol const &") -> "std::string":
    r"""OEMolType_format(OEChem::OEMol const & val) -> std::string"""
    return _oechem.OEMolType_format(val)

class OEDesignUnitType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEFieldType< OEBio::OEDesignUnit > 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__(OEDesignUnitType self) -> OEDesignUnitType"""
        _oechem.OEDesignUnitType_swiginit(self, _oechem.new_OEDesignUnitType())

    @staticmethod
    def format(val: "OEDesignUnit") -> "std::string":
        r"""format(OEDesignUnit val) -> std::string"""
        return _oechem.OEDesignUnitType_format(val)

    def get_name(self) -> "std::string":
        r"""get_name(OEDesignUnitType self) -> std::string"""
        return _oechem.OEDesignUnitType_get_name(self)
    __swig_destroy__ = _oechem.delete_OEDesignUnitType

# Register OEDesignUnitType in _oechem:
_oechem.OEDesignUnitType_swigregister(OEDesignUnitType)

def OEDesignUnitType_format(val: "OEDesignUnit") -> "std::string":
    r"""OEDesignUnitType_format(OEDesignUnit val) -> std::string"""
    return _oechem.OEDesignUnitType_format(val)

class OERecordType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEFieldType< OEDataFlow::OERecord > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OERecordType self) -> std::string"""
        return _oechem.OERecordType_get_name(self)

    @staticmethod
    def format(val: "OERecord") -> "std::string":
        r"""format(OERecord val) -> std::string"""
        return _oechem.OERecordType_format(val)

    def is_cacheable(self) -> "bool":
        r"""is_cacheable(OERecordType self) -> bool"""
        return _oechem.OERecordType_is_cacheable(self)

    def __init__(self):
        r"""__init__(OERecordType self) -> OERecordType"""
        _oechem.OERecordType_swiginit(self, _oechem.new_OERecordType())
    __swig_destroy__ = _oechem.delete_OERecordType

# Register OERecordType in _oechem:
_oechem.OERecordType_swigregister(OERecordType)

def OERecordType_format(val: "OERecord") -> "std::string":
    r"""OERecordType_format(OERecord val) -> std::string"""
    return _oechem.OERecordType_format(val)

class OEJSONObjectType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEFieldType< OEJSONObject > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OEJSONObjectType self) -> std::string"""
        return _oechem.OEJSONObjectType_get_name(self)

    @staticmethod
    def format(val: "OEJSONObject") -> "std::string":
        r"""format(OEJSONObject val) -> std::string"""
        return _oechem.OEJSONObjectType_format(val)

    def __init__(self):
        r"""__init__(OEJSONObjectType self) -> OEJSONObjectType"""
        _oechem.OEJSONObjectType_swiginit(self, _oechem.new_OEJSONObjectType())
    __swig_destroy__ = _oechem.delete_OEJSONObjectType

# Register OEJSONObjectType in _oechem:
_oechem.OEJSONObjectType_swigregister(OEJSONObjectType)

def OEJSONObjectType_format(val: "OEJSONObject") -> "std::string":
    r"""OEJSONObjectType_format(OEJSONObject val) -> std::string"""
    return _oechem.OEJSONObjectType_format(val)

class OELinkObjectType(OEJSONObjectType):
    r"""Proxy of C++ OEDataFlow::OEFieldType< OELinkObject > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OELinkObjectType self) -> std::string"""
        return _oechem.OELinkObjectType_get_name(self)

    def __init__(self):
        r"""__init__(OELinkObjectType self) -> OELinkObjectType"""
        _oechem.OELinkObjectType_swiginit(self, _oechem.new_OELinkObjectType())
    __swig_destroy__ = _oechem.delete_OELinkObjectType

# Register OELinkObjectType in _oechem:
_oechem.OELinkObjectType_swigregister(OELinkObjectType)

class OEIntVecType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEVectorFieldType< OELongLong > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OEIntVecType self) -> std::string"""
        return _oechem.OEIntVecType_get_name(self)

    def isPOD(self) -> "bool":
        r"""isPOD(OEIntVecType self) -> bool"""
        return _oechem.OEIntVecType_isPOD(self)

    @staticmethod
    def GetCopyForCache(*args) -> "std::shared_ptr< std::vector< std::optional< OELongLong >,std::allocator< std::optional< OELongLong > > > >":
        r"""
        GetCopyForCache(std::vector< OELongLong,std::allocator< OELongLong > > const & arg1) -> std::shared_ptr< std::vector< std::optional< OELongLong >,std::allocator< std::optional< OELongLong > > > >
        GetCopyForCache(OEVecOptInt arg1) -> std::shared_ptr< std::vector< std::optional< OELongLong >,std::allocator< std::optional< OELongLong > > > >
        """
        return _oechem.OEIntVecType_GetCopyForCache(*args)

    @staticmethod
    def format(val: "OEVecOptInt") -> "std::string":
        r"""format(OEVecOptInt val) -> std::string"""
        return _oechem.OEIntVecType_format(val)

    def __init__(self):
        r"""__init__(OEIntVecType self) -> OEIntVecType"""
        _oechem.OEIntVecType_swiginit(self, _oechem.new_OEIntVecType())
    __swig_destroy__ = _oechem.delete_OEIntVecType

# Register OEIntVecType in _oechem:
_oechem.OEIntVecType_swigregister(OEIntVecType)

def OEIntVecType_GetCopyForCache(*args) -> "std::shared_ptr< std::vector< std::optional< OELongLong >,std::allocator< std::optional< OELongLong > > > >":
    r"""
    OEIntVecType_GetCopyForCache(std::vector< OELongLong,std::allocator< OELongLong > > const & arg1) -> std::shared_ptr< std::vector< std::optional< OELongLong >,std::allocator< std::optional< OELongLong > > > >
    OEIntVecType_GetCopyForCache(OEVecOptInt arg1) -> std::shared_ptr< std::vector< std::optional< OELongLong >,std::allocator< std::optional< OELongLong > > > >
    """
    return _oechem.OEIntVecType_GetCopyForCache(*args)

def OEIntVecType_format(val: "OEVecOptInt") -> "std::string":
    r"""OEIntVecType_format(OEVecOptInt val) -> std::string"""
    return _oechem.OEIntVecType_format(val)

class OEFloatVecType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEVectorFieldType< double > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OEFloatVecType self) -> std::string"""
        return _oechem.OEFloatVecType_get_name(self)

    def isPOD(self) -> "bool":
        r"""isPOD(OEFloatVecType self) -> bool"""
        return _oechem.OEFloatVecType_isPOD(self)

    @staticmethod
    def GetCopyForCache(*args) -> "std::shared_ptr< std::vector< std::optional< double >,std::allocator< std::optional< double > > > >":
        r"""
        GetCopyForCache(OEDoubleVector arg1) -> std::shared_ptr< std::vector< std::optional< double >,std::allocator< std::optional< double > > > >
        GetCopyForCache(OEVecOptFloat arg1) -> std::shared_ptr< std::vector< std::optional< double >,std::allocator< std::optional< double > > > >
        """
        return _oechem.OEFloatVecType_GetCopyForCache(*args)

    @staticmethod
    def format(val: "OEVecOptFloat") -> "std::string":
        r"""format(OEVecOptFloat val) -> std::string"""
        return _oechem.OEFloatVecType_format(val)

    def __init__(self):
        r"""__init__(OEFloatVecType self) -> OEFloatVecType"""
        _oechem.OEFloatVecType_swiginit(self, _oechem.new_OEFloatVecType())
    __swig_destroy__ = _oechem.delete_OEFloatVecType

# Register OEFloatVecType in _oechem:
_oechem.OEFloatVecType_swigregister(OEFloatVecType)

def OEFloatVecType_GetCopyForCache(*args) -> "std::shared_ptr< std::vector< std::optional< double >,std::allocator< std::optional< double > > > >":
    r"""
    OEFloatVecType_GetCopyForCache(OEDoubleVector arg1) -> std::shared_ptr< std::vector< std::optional< double >,std::allocator< std::optional< double > > > >
    OEFloatVecType_GetCopyForCache(OEVecOptFloat arg1) -> std::shared_ptr< std::vector< std::optional< double >,std::allocator< std::optional< double > > > >
    """
    return _oechem.OEFloatVecType_GetCopyForCache(*args)

def OEFloatVecType_format(val: "OEVecOptFloat") -> "std::string":
    r"""OEFloatVecType_format(OEVecOptFloat val) -> std::string"""
    return _oechem.OEFloatVecType_format(val)

class OEBoolVecType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEVectorFieldType< bool > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OEBoolVecType self) -> std::string"""
        return _oechem.OEBoolVecType_get_name(self)

    def isPOD(self) -> "bool":
        r"""isPOD(OEBoolVecType self) -> bool"""
        return _oechem.OEBoolVecType_isPOD(self)

    @staticmethod
    def GetCopyForCache(*args) -> "std::shared_ptr< std::vector< std::optional< bool >,std::allocator< std::optional< bool > > > >":
        r"""
        GetCopyForCache(std::vector< bool,std::allocator< bool > > const & arg1) -> std::shared_ptr< std::vector< std::optional< bool >,std::allocator< std::optional< bool > > > >
        GetCopyForCache(OEVecOptBool arg1) -> std::shared_ptr< std::vector< std::optional< bool >,std::allocator< std::optional< bool > > > >
        """
        return _oechem.OEBoolVecType_GetCopyForCache(*args)

    @staticmethod
    def format(val: "OEVecOptBool") -> "std::string":
        r"""format(OEVecOptBool val) -> std::string"""
        return _oechem.OEBoolVecType_format(val)

    def __init__(self):
        r"""__init__(OEBoolVecType self) -> OEBoolVecType"""
        _oechem.OEBoolVecType_swiginit(self, _oechem.new_OEBoolVecType())
    __swig_destroy__ = _oechem.delete_OEBoolVecType

# Register OEBoolVecType in _oechem:
_oechem.OEBoolVecType_swigregister(OEBoolVecType)

def OEBoolVecType_GetCopyForCache(*args) -> "std::shared_ptr< std::vector< std::optional< bool >,std::allocator< std::optional< bool > > > >":
    r"""
    OEBoolVecType_GetCopyForCache(std::vector< bool,std::allocator< bool > > const & arg1) -> std::shared_ptr< std::vector< std::optional< bool >,std::allocator< std::optional< bool > > > >
    OEBoolVecType_GetCopyForCache(OEVecOptBool arg1) -> std::shared_ptr< std::vector< std::optional< bool >,std::allocator< std::optional< bool > > > >
    """
    return _oechem.OEBoolVecType_GetCopyForCache(*args)

def OEBoolVecType_format(val: "OEVecOptBool") -> "std::string":
    r"""OEBoolVecType_format(OEVecOptBool val) -> std::string"""
    return _oechem.OEBoolVecType_format(val)

class OEStringVecType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEVectorFieldType< std::string > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OEStringVecType self) -> std::string"""
        return _oechem.OEStringVecType_get_name(self)

    def isPOD(self) -> "bool":
        r"""isPOD(OEStringVecType self) -> bool"""
        return _oechem.OEStringVecType_isPOD(self)

    @staticmethod
    def GetCopyForCache(*args) -> "std::shared_ptr< std::vector< std::optional< std::string >,std::allocator< std::optional< std::string > > > >":
        r"""
        GetCopyForCache(OEStringVector arg1) -> std::shared_ptr< std::vector< std::optional< std::string >,std::allocator< std::optional< std::string > > > >
        GetCopyForCache(OEVecOptString arg1) -> std::shared_ptr< std::vector< std::optional< std::string >,std::allocator< std::optional< std::string > > > >
        """
        return _oechem.OEStringVecType_GetCopyForCache(*args)

    @staticmethod
    def format(val: "OEVecOptString") -> "std::string":
        r"""format(OEVecOptString val) -> std::string"""
        return _oechem.OEStringVecType_format(val)

    def __init__(self):
        r"""__init__(OEStringVecType self) -> OEStringVecType"""
        _oechem.OEStringVecType_swiginit(self, _oechem.new_OEStringVecType())
    __swig_destroy__ = _oechem.delete_OEStringVecType

# Register OEStringVecType in _oechem:
_oechem.OEStringVecType_swigregister(OEStringVecType)

def OEStringVecType_GetCopyForCache(*args) -> "std::shared_ptr< std::vector< std::optional< std::string >,std::allocator< std::optional< std::string > > > >":
    r"""
    OEStringVecType_GetCopyForCache(OEStringVector arg1) -> std::shared_ptr< std::vector< std::optional< std::string >,std::allocator< std::optional< std::string > > > >
    OEStringVecType_GetCopyForCache(OEVecOptString arg1) -> std::shared_ptr< std::vector< std::optional< std::string >,std::allocator< std::optional< std::string > > > >
    """
    return _oechem.OEStringVecType_GetCopyForCache(*args)

def OEStringVecType_format(val: "OEVecOptString") -> "std::string":
    r"""OEStringVecType_format(OEVecOptString val) -> std::string"""
    return _oechem.OEStringVecType_format(val)

class OEBlobVecType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEVectorFieldType< OEDataFlow::OEBytes > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OEBlobVecType self) -> std::string"""
        return _oechem.OEBlobVecType_get_name(self)

    def isPOD(self) -> "bool":
        r"""isPOD(OEBlobVecType self) -> bool"""
        return _oechem.OEBlobVecType_isPOD(self)

    @staticmethod
    def GetCopyForCache(*args) -> "std::shared_ptr< std::vector< OEDataFlow::OEBytes,std::allocator< OEDataFlow::OEBytes > > >":
        r"""
        GetCopyForCache(std::vector< OEDataFlow::OEBytes,std::allocator< OEDataFlow::OEBytes > > const & arg1) -> std::shared_ptr< std::vector< OEDataFlow::OEBytes,std::allocator< OEDataFlow::OEBytes > > >
        GetCopyForCache(OEVecOptBlob arg1) -> std::shared_ptr< std::vector< OEDataFlow::OEBytes,std::allocator< OEDataFlow::OEBytes > > >
        """
        return _oechem.OEBlobVecType_GetCopyForCache(*args)

    @staticmethod
    def format(val: "OEVecOptBlob") -> "std::string":
        r"""format(OEVecOptBlob val) -> std::string"""
        return _oechem.OEBlobVecType_format(val)

    def __init__(self):
        r"""__init__(OEBlobVecType self) -> OEBlobVecType"""
        _oechem.OEBlobVecType_swiginit(self, _oechem.new_OEBlobVecType())
    __swig_destroy__ = _oechem.delete_OEBlobVecType

# Register OEBlobVecType in _oechem:
_oechem.OEBlobVecType_swigregister(OEBlobVecType)

def OEBlobVecType_GetCopyForCache(*args) -> "std::shared_ptr< std::vector< OEDataFlow::OEBytes,std::allocator< OEDataFlow::OEBytes > > >":
    r"""
    OEBlobVecType_GetCopyForCache(std::vector< OEDataFlow::OEBytes,std::allocator< OEDataFlow::OEBytes > > const & arg1) -> std::shared_ptr< std::vector< OEDataFlow::OEBytes,std::allocator< OEDataFlow::OEBytes > > >
    OEBlobVecType_GetCopyForCache(OEVecOptBlob arg1) -> std::shared_ptr< std::vector< OEDataFlow::OEBytes,std::allocator< OEDataFlow::OEBytes > > >
    """
    return _oechem.OEBlobVecType_GetCopyForCache(*args)

def OEBlobVecType_format(val: "OEVecOptBlob") -> "std::string":
    r"""OEBlobVecType_format(OEVecOptBlob val) -> std::string"""
    return _oechem.OEBlobVecType_format(val)

class OEMolVecType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEVectorFieldType< OEChem::OEMol > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OEMolVecType self) -> std::string"""
        return _oechem.OEMolVecType_get_name(self)

    @staticmethod
    def GetCopyForCache(*args) -> "std::shared_ptr< std::vector< std::optional< OEChem::OEMol >,std::allocator< std::optional< OEChem::OEMol > > > >":
        r"""
        GetCopyForCache(std::vector< OEChem::OEMol,std::allocator< OEChem::OEMol > > const & thing) -> std::shared_ptr< std::vector< std::optional< OEChem::OEMol >,std::allocator< std::optional< OEChem::OEMol > > > >
        GetCopyForCache(VecOptMol thing) -> std::shared_ptr< std::vector< std::optional< OEChem::OEMol >,std::allocator< std::optional< OEChem::OEMol > > > >
        """
        return _oechem.OEMolVecType_GetCopyForCache(*args)

    @staticmethod
    def format(val: "VecOptMol") -> "std::string":
        r"""format(VecOptMol val) -> std::string"""
        return _oechem.OEMolVecType_format(val)

    def __init__(self):
        r"""__init__(OEMolVecType self) -> OEMolVecType"""
        _oechem.OEMolVecType_swiginit(self, _oechem.new_OEMolVecType())
    __swig_destroy__ = _oechem.delete_OEMolVecType

# Register OEMolVecType in _oechem:
_oechem.OEMolVecType_swigregister(OEMolVecType)

def OEMolVecType_GetCopyForCache(*args) -> "std::shared_ptr< std::vector< std::optional< OEChem::OEMol >,std::allocator< std::optional< OEChem::OEMol > > > >":
    r"""
    OEMolVecType_GetCopyForCache(std::vector< OEChem::OEMol,std::allocator< OEChem::OEMol > > const & thing) -> std::shared_ptr< std::vector< std::optional< OEChem::OEMol >,std::allocator< std::optional< OEChem::OEMol > > > >
    OEMolVecType_GetCopyForCache(VecOptMol thing) -> std::shared_ptr< std::vector< std::optional< OEChem::OEMol >,std::allocator< std::optional< OEChem::OEMol > > > >
    """
    return _oechem.OEMolVecType_GetCopyForCache(*args)

def OEMolVecType_format(val: "VecOptMol") -> "std::string":
    r"""OEMolVecType_format(VecOptMol val) -> std::string"""
    return _oechem.OEMolVecType_format(val)

class OERecordVecType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEVectorFieldType< OEDataFlow::OERecord > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OERecordVecType self) -> std::string"""
        return _oechem.OERecordVecType_get_name(self)

    @staticmethod
    def format(val: "OEVecOptRecord") -> "std::string":
        r"""format(OEVecOptRecord val) -> std::string"""
        return _oechem.OERecordVecType_format(val)

    @staticmethod
    def GetCopyForCache(*args) -> "std::shared_ptr< std::vector< std::optional< OEDataFlow::OERecord >,std::allocator< std::optional< OEDataFlow::OERecord > > > >":
        r"""
        GetCopyForCache(std::vector< OEDataFlow::OERecord,std::allocator< OEDataFlow::OERecord > > const & val) -> std::shared_ptr< std::vector< std::optional< OEDataFlow::OERecord >,std::allocator< std::optional< OEDataFlow::OERecord > > > >
        GetCopyForCache(OEVecOptRecord val) -> std::shared_ptr< std::vector< std::optional< OEDataFlow::OERecord >,std::allocator< std::optional< OEDataFlow::OERecord > > > >
        """
        return _oechem.OERecordVecType_GetCopyForCache(*args)

    def __init__(self):
        r"""__init__(OERecordVecType self) -> OERecordVecType"""
        _oechem.OERecordVecType_swiginit(self, _oechem.new_OERecordVecType())
    __swig_destroy__ = _oechem.delete_OERecordVecType

# Register OERecordVecType in _oechem:
_oechem.OERecordVecType_swigregister(OERecordVecType)

def OERecordVecType_format(val: "OEVecOptRecord") -> "std::string":
    r"""OERecordVecType_format(OEVecOptRecord val) -> std::string"""
    return _oechem.OERecordVecType_format(val)

def OERecordVecType_GetCopyForCache(*args) -> "std::shared_ptr< std::vector< std::optional< OEDataFlow::OERecord >,std::allocator< std::optional< OEDataFlow::OERecord > > > >":
    r"""
    OERecordVecType_GetCopyForCache(std::vector< OEDataFlow::OERecord,std::allocator< OEDataFlow::OERecord > > const & val) -> std::shared_ptr< std::vector< std::optional< OEDataFlow::OERecord >,std::allocator< std::optional< OEDataFlow::OERecord > > > >
    OERecordVecType_GetCopyForCache(OEVecOptRecord val) -> std::shared_ptr< std::vector< std::optional< OEDataFlow::OERecord >,std::allocator< std::optional< OEDataFlow::OERecord > > > >
    """
    return _oechem.OERecordVecType_GetCopyForCache(*args)

class OERangeType(OEFieldTypeHandler):
    r"""Proxy of C++ OEDataFlow::OEFieldType< OERange > class."""

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

    def get_name(self) -> "std::string":
        r"""get_name(OERangeType self) -> std::string"""
        return _oechem.OERangeType_get_name(self)

    @staticmethod
    def format(val: "OERange") -> "std::string":
        r"""format(OERange val) -> std::string"""
        return _oechem.OERangeType_format(val)

    def __init__(self):
        r"""__init__(OERangeType self) -> OERangeType"""
        _oechem.OERangeType_swiginit(self, _oechem.new_OERangeType())
    __swig_destroy__ = _oechem.delete_OERangeType

# Register OERangeType in _oechem:
_oechem.OERangeType_swigregister(OERangeType)

def OERangeType_format(val: "OERange") -> "std::string":
    r"""OERangeType_format(OERange val) -> std::string"""
    return _oechem.OERangeType_format(val)

class OEStringMatchField(OEStringField):
    r"""Proxy of C++ OEDataFlow::OEMatchField< std::string > 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__(OEStringMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEStringMatchField"""
        _oechem.OEStringMatchField_swiginit(self, _oechem.new_OEStringMatchField(*args))
    __swig_destroy__ = _oechem.delete_OEStringMatchField

# Register OEStringMatchField in _oechem:
_oechem.OEStringMatchField_swigregister(OEStringMatchField)

class OEIntMatchField(OEIntField):
    r"""Proxy of C++ OEDataFlow::OEMatchField< OELongLong > 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__(OEIntMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEIntMatchField"""
        _oechem.OEIntMatchField_swiginit(self, _oechem.new_OEIntMatchField(*args))
    __swig_destroy__ = _oechem.delete_OEIntMatchField

# Register OEIntMatchField in _oechem:
_oechem.OEIntMatchField_swigregister(OEIntMatchField)

class OEFloatMatchField(OEFloatField):
    r"""Proxy of C++ OEDataFlow::OEMatchField< double > 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__(OEFloatMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEFloatMatchField"""
        _oechem.OEFloatMatchField_swiginit(self, _oechem.new_OEFloatMatchField(*args))
    __swig_destroy__ = _oechem.delete_OEFloatMatchField

# Register OEFloatMatchField in _oechem:
_oechem.OEFloatMatchField_swigregister(OEFloatMatchField)

class OEBoolMatchField(OEBoolField):
    r"""Proxy of C++ OEDataFlow::OEMatchField< bool > 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__(OEBoolMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEBoolMatchField"""
        _oechem.OEBoolMatchField_swiginit(self, _oechem.new_OEBoolMatchField(*args))
    __swig_destroy__ = _oechem.delete_OEBoolMatchField

# Register OEBoolMatchField in _oechem:
_oechem.OEBoolMatchField_swigregister(OEBoolMatchField)

class OEBlobMatchField(OEBlobField):
    r"""Proxy of C++ OEDataFlow::OEMatchField< OEDataFlow::OEBytes > 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__(OEBlobMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEBlobMatchField"""
        _oechem.OEBlobMatchField_swiginit(self, _oechem.new_OEBlobMatchField(*args))
    __swig_destroy__ = _oechem.delete_OEBlobMatchField

# Register OEBlobMatchField in _oechem:
_oechem.OEBlobMatchField_swigregister(OEBlobMatchField)

class OEMolMatchField(OEMolField):
    r"""Proxy of C++ OEDataFlow::OEMatchField< OEChem::OEMol > 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__(OEMolMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEMolMatchField"""
        _oechem.OEMolMatchField_swiginit(self, _oechem.new_OEMolMatchField(*args))
    __swig_destroy__ = _oechem.delete_OEMolMatchField

# Register OEMolMatchField in _oechem:
_oechem.OEMolMatchField_swigregister(OEMolMatchField)

class OERecordMatchField(OERecordField):
    r"""Proxy of C++ OEDataFlow::OEMatchField< OEDataFlow::OERecord > 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__(OERecordMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OERecordMatchField"""
        _oechem.OERecordMatchField_swiginit(self, _oechem.new_OERecordMatchField(*args))
    __swig_destroy__ = _oechem.delete_OERecordMatchField

# Register OERecordMatchField in _oechem:
_oechem.OERecordMatchField_swigregister(OERecordMatchField)

class OEJSONObjectMatchField(OEJSONObjectField):
    r"""Proxy of C++ OEDataFlow::OEMatchField< OEJSONObject > 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__(OEJSONObjectMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEJSONObjectMatchField"""
        _oechem.OEJSONObjectMatchField_swiginit(self, _oechem.new_OEJSONObjectMatchField(*args))
    __swig_destroy__ = _oechem.delete_OEJSONObjectMatchField

# Register OEJSONObjectMatchField in _oechem:
_oechem.OEJSONObjectMatchField_swigregister(OEJSONObjectMatchField)

class OELinkObjectMatchField(OELinkObjectField):
    r"""Proxy of C++ OEDataFlow::OEMatchField< OELinkObject > 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__(OELinkObjectMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OELinkObjectMatchField"""
        _oechem.OELinkObjectMatchField_swiginit(self, _oechem.new_OELinkObjectMatchField(*args))
    __swig_destroy__ = _oechem.delete_OELinkObjectMatchField

# Register OELinkObjectMatchField in _oechem:
_oechem.OELinkObjectMatchField_swigregister(OELinkObjectMatchField)

class OERangeMatchField(OERangeField):
    r"""Proxy of C++ OEDataFlow::OEMatchField< OERange > 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__(OERangeMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OERangeMatchField"""
        _oechem.OERangeMatchField_swiginit(self, _oechem.new_OERangeMatchField(*args))
    __swig_destroy__ = _oechem.delete_OERangeMatchField

# Register OERangeMatchField in _oechem:
_oechem.OERangeMatchField_swigregister(OERangeMatchField)

class OEDesignUnitMatchField(OEDesignUnitField):
    r"""Proxy of C++ OEDataFlow::OEMatchField< OEBio::OEDesignUnit > 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__(OEDesignUnitMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEDesignUnitMatchField"""
        _oechem.OEDesignUnitMatchField_swiginit(self, _oechem.new_OEDesignUnitMatchField(*args))
    __swig_destroy__ = _oechem.delete_OEDesignUnitMatchField

# Register OEDesignUnitMatchField in _oechem:
_oechem.OEDesignUnitMatchField_swigregister(OEDesignUnitMatchField)

class OEIntVecMatchField(OEIntVecField):
    r"""Proxy of C++ OEDataFlow::OEMatchVectorField< OELongLong > 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__(OEIntVecMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEIntVecMatchField"""
        _oechem.OEIntVecMatchField_swiginit(self, _oechem.new_OEIntVecMatchField(*args))
    __swig_destroy__ = _oechem.delete_OEIntVecMatchField

# Register OEIntVecMatchField in _oechem:
_oechem.OEIntVecMatchField_swigregister(OEIntVecMatchField)

class OEFloatVecMatchField(OEFloatVecField):
    r"""Proxy of C++ OEDataFlow::OEMatchVectorField< double > 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__(OEFloatVecMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEFloatVecMatchField"""
        _oechem.OEFloatVecMatchField_swiginit(self, _oechem.new_OEFloatVecMatchField(*args))
    __swig_destroy__ = _oechem.delete_OEFloatVecMatchField

# Register OEFloatVecMatchField in _oechem:
_oechem.OEFloatVecMatchField_swigregister(OEFloatVecMatchField)

class OEBoolVecMatchField(OEBoolVecField):
    r"""Proxy of C++ OEDataFlow::OEMatchVectorField< bool > 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__(OEBoolVecMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEBoolVecMatchField"""
        _oechem.OEBoolVecMatchField_swiginit(self, _oechem.new_OEBoolVecMatchField(*args))
    __swig_destroy__ = _oechem.delete_OEBoolVecMatchField

# Register OEBoolVecMatchField in _oechem:
_oechem.OEBoolVecMatchField_swigregister(OEBoolVecMatchField)

class OEStringVecMatchField(OEStringVecField):
    r"""Proxy of C++ OEDataFlow::OEMatchVectorField< std::string > 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__(OEStringVecMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEStringVecMatchField"""
        _oechem.OEStringVecMatchField_swiginit(self, _oechem.new_OEStringVecMatchField(*args))
    __swig_destroy__ = _oechem.delete_OEStringVecMatchField

# Register OEStringVecMatchField in _oechem:
_oechem.OEStringVecMatchField_swigregister(OEStringVecMatchField)

class OEBlobVecMatchField(OEBlobVecField):
    r"""Proxy of C++ OEDataFlow::OEMatchVectorField< OEDataFlow::OEBytes > 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__(OEBlobVecMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEBlobVecMatchField"""
        _oechem.OEBlobVecMatchField_swiginit(self, _oechem.new_OEBlobVecMatchField(*args))
    __swig_destroy__ = _oechem.delete_OEBlobVecMatchField

# Register OEBlobVecMatchField in _oechem:
_oechem.OEBlobVecMatchField_swigregister(OEBlobVecMatchField)

class OEMolVecMatchField(OEMolVecField):
    r"""Proxy of C++ OEDataFlow::OEMatchVectorField< OEChem::OEMol > 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__(OEMolVecMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OEMolVecMatchField"""
        _oechem.OEMolVecMatchField_swiginit(self, _oechem.new_OEMolVecMatchField(*args))
    __swig_destroy__ = _oechem.delete_OEMolVecMatchField

# Register OEMolVecMatchField in _oechem:
_oechem.OEMolVecMatchField_swigregister(OEMolVecMatchField)

class OERecordVecMatchField(OERecordVecField):
    r"""Proxy of C++ OEDataFlow::OEMatchVectorField< OEDataFlow::OERecord > 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__(OERecordVecMatchField self, std::string const & name, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> OERecordVecMatchField"""
        _oechem.OERecordVecMatchField_swiginit(self, _oechem.new_OERecordVecMatchField(*args))
    __swig_destroy__ = _oechem.delete_OERecordVecMatchField

# Register OERecordVecMatchField in _oechem:
_oechem.OERecordVecMatchField_swigregister(OERecordVecMatchField)


def OEMakeField(*args) -> "PyObject *":
    r"""
    OEMakeField(std::string const & name, std::string const & dtName, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> PyObject
    OEMakeField(std::string const & name, OEFieldTypeHandler dataType, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> PyObject
    """
    return _oechem.OEMakeField(*args)

def OEMakeMatchField(*args) -> "PyObject *":
    r"""OEMakeMatchField(std::string const & name, std::string const & dtName, OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False, bool nullable=False) -> PyObject"""
    return _oechem.OEMakeMatchField(*args)

def _is_known_handler(name: "std::string const &") -> "bool":
    r"""_is_known_handler(std::string const & name) -> bool"""
    return _oechem._is_known_handler(name)

def OEMakePrimaryMolField(*args) -> "OEPrimaryMolField":
    r"""OEMakePrimaryMolField(std::string const name="Molecule", OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool readonly=False) -> OEPrimaryMolField"""
    return _oechem.OEMakePrimaryMolField(*args)
class OEMolRecord(OERecord):
    r"""Proxy of C++ OEDataFlow::OEMolRecord 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__(OEMolRecord self) -> OEMolRecord
        __init__(OEMolRecord self, OERecord other) -> OEMolRecord
        """
        _oechem.OEMolRecord_swiginit(self, _oechem.new_OEMolRecord(*args))

    def get_primary_mol_field(self, *args) -> "OEDataFlow::OEField< OEChem::OEMol >":
        r"""get_primary_mol_field(OEMolRecord self, std::string const defName="Molecule", OEFieldMeta meta=OEDataFlow::OEFieldMeta()) -> OEMolField"""
        return _oechem.OEMolRecord_get_primary_mol_field(self, *args)

    def has_mol(self, *args) -> "bool":
        r"""has_mol(OEMolRecord self, OEFieldBase field=OEDataFlow::OEFieldBase()) -> bool"""
        return _oechem.OEMolRecord_has_mol(self, *args)

    def get_conf_record(self, conf: "OEConfBase") -> "OEDataFlow::OERecord":
        r"""get_conf_record(OEMolRecord self, OEConfBase conf) -> OERecord"""
        return _oechem.OEMolRecord_get_conf_record(self, conf)

    def get_atom_record(self, atom: "OEAtomBase") -> "OEDataFlow::OERecord":
        r"""get_atom_record(OEMolRecord self, OEAtomBase atom) -> OERecord"""
        return _oechem.OEMolRecord_get_atom_record(self, atom)

    def get_bond_record(self, bond: "OEBondBase") -> "OEDataFlow::OERecord":
        r"""get_bond_record(OEMolRecord self, OEBondBase bond) -> OERecord"""
        return _oechem.OEMolRecord_get_bond_record(self, bond)

    def set_conf_record(self, conf: "OEConfBase", record: "OERecord") -> "void":
        r"""set_conf_record(OEMolRecord self, OEConfBase conf, OERecord record)"""
        return _oechem.OEMolRecord_set_conf_record(self, conf, record)

    def set_atom_record(self, atom: "OEAtomBase", record: "OERecord") -> "void":
        r"""set_atom_record(OEMolRecord self, OEAtomBase atom, OERecord record)"""
        return _oechem.OEMolRecord_set_atom_record(self, atom, record)

    def set_bond_record(self, bond: "OEBondBase", record: "OERecord") -> "void":
        r"""set_bond_record(OEMolRecord self, OEBondBase bond, OERecord record)"""
        return _oechem.OEMolRecord_set_bond_record(self, bond, record)

    def has_conf_record(self, conf: "OEConfBase") -> "bool":
        r"""has_conf_record(OEMolRecord self, OEConfBase conf) -> bool"""
        return _oechem.OEMolRecord_has_conf_record(self, conf)

    def has_atom_record(self, atom: "OEAtomBase") -> "bool":
        r"""has_atom_record(OEMolRecord self, OEAtomBase atom) -> bool"""
        return _oechem.OEMolRecord_has_atom_record(self, atom)

    def has_bond_record(self, bond: "OEBondBase") -> "bool":
        r"""has_bond_record(OEMolRecord self, OEBondBase bond) -> bool"""
        return _oechem.OEMolRecord_has_bond_record(self, bond)

    def delete_conf_record(self, conf: "OEConfBase") -> "bool":
        r"""delete_conf_record(OEMolRecord self, OEConfBase conf) -> bool"""
        return _oechem.OEMolRecord_delete_conf_record(self, conf)

    def delete_atom_record(self, atom: "OEAtomBase") -> "bool":
        r"""delete_atom_record(OEMolRecord self, OEAtomBase atom) -> bool"""
        return _oechem.OEMolRecord_delete_atom_record(self, atom)

    def delete_bond_record(self, bond: "OEBondBase") -> "bool":
        r"""delete_bond_record(OEMolRecord self, OEBondBase bond) -> bool"""
        return _oechem.OEMolRecord_delete_bond_record(self, bond)

    def GetBondRecords(self, field: "OEMolField") -> "std::map< std::string,OEDataFlow::OERecord >":
        r"""GetBondRecords(OEMolRecord self, OEMolField field) -> std::map< std::string,OEDataFlow::OERecord >"""
        return _oechem.OEMolRecord_GetBondRecords(self, field)

    def GetAtomRecords(self, field: "OEMolField") -> "std::map< std::string,OEDataFlow::OERecord >":
        r"""GetAtomRecords(OEMolRecord self, OEMolField field) -> std::map< std::string,OEDataFlow::OERecord >"""
        return _oechem.OEMolRecord_GetAtomRecords(self, field)

    def get_mol(self, *args) -> "PyObject *":
        r"""get_mol(OEMolRecord self, OEFieldBase f=OEFieldBase()) -> PyObject"""
        return _oechem.OEMolRecord_get_mol(self, *args)

    def get_mol_reference(self, *args) -> "PyObject *":
        r"""get_mol_reference(OEMolRecord self, OEFieldBase f=OEFieldBase()) -> PyObject"""
        return _oechem.OEMolRecord_get_mol_reference(self, *args)

    def set_mol(self, *args) -> "PyObject *":
        r"""
        set_mol(OEMolRecord self, OEChem::OEMol const & mol, OEFieldBase field=OEDataFlow::OEFieldBase(), OEFieldMeta meta=OEDataFlow::OEFieldMeta()) -> bool
        set_mol(OEMolRecord self, PyObject * mol, OEFieldBase f=OEFieldBase(), OEFieldMeta meta=OEFieldMeta()) -> PyObject
        """
        return _oechem.OEMolRecord_set_mol(self, *args)

    def set_mol_reference(self, *args) -> "PyObject *":
        r"""set_mol_reference(OEMolRecord self, PyObject * mol, OEFieldBase f=OEFieldBase()) -> PyObject"""
        return _oechem.OEMolRecord_set_mol_reference(self, *args)

    def get_conf_records(self, *args) -> "PyObject *":
        r"""get_conf_records(OEMolRecord self, OEFieldBase f=OEFieldBase()) -> PyObject"""
        return _oechem.OEMolRecord_get_conf_records(self, *args)

    def get_bond_records(self, *args) -> "PyObject *":
        r"""get_bond_records(OEMolRecord self, OEFieldBase f=OEFieldBase()) -> PyObject"""
        return _oechem.OEMolRecord_get_bond_records(self, *args)

    def get_atom_records(self, *args) -> "PyObject *":
        r"""get_atom_records(OEMolRecord self, OEFieldBase f=OEFieldBase()) -> PyObject"""
        return _oechem.OEMolRecord_get_atom_records(self, *args)
    __swig_destroy__ = _oechem.delete_OEMolRecord

# Register OEMolRecord in _oechem:
_oechem.OEMolRecord_swigregister(OEMolRecord)


def OEReadMolRecord(*args) -> "bool":
    r"""OEReadMolRecord(OEMolRecord record, oeistream ifs, std::string const & fmt="binary") -> bool"""
    return _oechem.OEReadMolRecord(*args)
class OEROCMolType(OEMolType):
    r"""Proxy of C++ OEDataFlow::OEROCMolType class."""

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

    def __init__(self):
        r"""__init__(OEROCMolType self) -> OEROCMolType"""
        _oechem.OEROCMolType_swiginit(self, _oechem.new_OEROCMolType())

# Register OEROCMolType in _oechem:
_oechem.OEROCMolType_swigregister(OEROCMolType)


def OEInitMolFieldHandler() -> "OEDataFlow::OEFieldTypeHandler *":
    r"""OEInitMolFieldHandler() -> OEFieldTypeHandler"""
    return _oechem.OEInitMolFieldHandler()

def OEInitMolVecFieldHandler() -> "OEDataFlow::OEFieldTypeHandler *":
    r"""OEInitMolVecFieldHandler() -> OEFieldTypeHandler"""
    return _oechem.OEInitMolVecFieldHandler()
class OEPrimaryMolField(OEMolMatchField):
    r"""Proxy of C++ OEDataFlow::OEPrimaryMolField 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, **kwargs):
        r"""__init__(OEPrimaryMolField self, std::string const default_name="Molecule", OEFieldMeta meta=OEDataFlow::OEFieldMeta(), bool read_only=False) -> OEPrimaryMolField"""
        _oechem.OEPrimaryMolField_swiginit(self, _oechem.new_OEPrimaryMolField(*args, **kwargs))
    __swig_destroy__ = _oechem.delete_OEPrimaryMolField

# Register OEPrimaryMolField in _oechem:
_oechem.OEPrimaryMolField_swigregister(OEPrimaryMolField)
Mol = cvar.Mol


def OEInitDUFieldHandler() -> "OEDataFlow::OEFieldTypeHandler *":
    r"""OEInitDUFieldHandler() -> OEFieldTypeHandler"""
    return _oechem.OEInitDUFieldHandler()


class Types:
    Int = OEIntType()
    String = OEStringType()
    Float = OEFloatType()
    Bool = OEBoolType()
    Blob = OEBlobType()
    Record = OERecordType()
    IntVec = OEIntVecType()
    StringVec = OEStringVecType()
    FloatVec = OEFloatVecType()
    BoolVec = OEBoolVecType()
    BlobVec = OEBlobVecType()
    RecordVec = OERecordVecType()
    Range = OERangeType()
    JSONObject = OEJSONObjectType()
    Link = OELinkObjectType()
    class Chem:
        Mol = OEMolType()
        MolVec = OEMolVecType()
        DesignUnit = OEDesignUnitType()


# Add scalar_type for vector types
Types.IntVec.__class__.scalar_type = Types.Int
Types.StringVec.__class__.scalar_type = Types.String
Types.FloatVec.__class__.scalar_type = Types.Float
Types.BoolVec.__class__.scalar_type = Types.Bool
Types.BlobVec.__class__.scalar_type = Types.Blob
Types.RecordVec.__class__.scalar_type = Types.Record
Types.Chem.MolVec.__class__.scalar_type = Types.Chem.Mol

def __get_scalar_type(cls):
    if not hasattr(cls, 'scalar_type'):
        return None
    return cls.scalar_type

OEFieldTypeHandler.get_scalar_type = classmethod(__get_scalar_type)

Types.Int.__class__.valid_types = (int, float)
Types.Float.__class__.valid_types = (float, int)
Types.String.__class__.valid_types = (str,)
Types.Bool.__class__.valid_types = (bool,)
Types.Record.__class__.valid_types = (OERecord,)
Types.Blob.__class__.valid_types = (bytes, bytearray)
Types.JSONObject.__class__.valid_types = (dict, OEJSONObject)
Types.Range.__class__.valid_types = (OERange, tuple, list)
Types.Chem.Mol.__class__.valid_types = ()
Types.Chem.DesignUnit.__class__.valid_types = ()


def __validate_option(opt):
    if not isinstance(opt, int):
        return False
    cls = Meta.get_class(opt)
    if cls is None:
        return False
    if cls.is_attribute():
        return False
    return True

def __validate_option_list(opts):
    if not isinstance(opts, (list, tuple)):
        return False
    for opt in opts:
        if not __validate_option(opt):
            return False
    return True

def __validate_attribute(att):
    if not isinstance(att, (list, tuple)):
        return False
    if len(att) != 2:
        return False
    cls = Meta.get_class(att[0]) if isinstance(att[0], int) else None
    if cls is None or not cls.is_attribute():
        return False
    if not isinstance(att[1], cls._attribute_type):
        return False
    return True

def __validate_attribute_list(atts):
    if not isinstance(atts, (list, tuple)):
        return False
    for att in atts:
        if not __validate_attribute(att):
            return False
    return True

# Monkey patch the OEFieldMeta constructor to allow keywords. SWIG wont because there
# are multiple overloads
def __oefieldmeta_init(self, *args, **kwargs):
    self.__init0__()
    options = []
    attributes = []
    if "options" in kwargs:
        options = kwargs["options"]
        if not __validate_option_list(options):
            raise ValueError("Invalid options passed to OEFieldMeta()")
        self.set_options(options)
    elif len(args) > 0:
        tmp = args[0]
        if isinstance(tmp, OEFieldMeta):
            self.from_dict(tmp.to_dict())
        elif __validate_option_list(tmp):
            self.set_options(tmp)
        elif __validate_option(tmp):
            self.set_option(tmp)
        else:
            raise ValueError("Invalid option passed to OEFieldMeta()")

    if "attributes" in kwargs:
        attributes = kwargs["attributes"]
    elif len(args) > 1:
        attributes = args[1]
    if not __validate_attribute_list(attributes):
        raise ValueError("Invalid attribute list passed to OEFieldMeta()")
    for att in attributes:
        self.add_attribute(att[0], att[1])

OEFieldMeta.__init0__ = OEFieldMeta.__init__
OEFieldMeta.__init__ = __oefieldmeta_init


def _validate_value(handler, val):
    if (val is None):
        return True
    if hasattr(handler, "scalar_type"):
        if not isinstance(val, (list, tuple)):
            return False
        for v in val:
            if not handler.scalar_type.validate(v) and v is not None:
                return False
    elif not isinstance(val, handler.valid_types):
        return False

# some specific built-in type validations
    if handler == Types.Int:
        if isinstance(val, float) and not val.is_integer():
            return False
        if int(val).bit_length() > 63:
            return False
    elif handler == Types.Range:
        if isinstance(val, OERange):
            return True
        try:
            tmp = OERange(val)
            return True
        except:
            return False
    elif handler == Types.Link:
        if isinstance(val, OELinkObject):
            return True
        if "domain" not in val or "resource" not in val or "id" not in val:
            return False
        if "version" not in val:
            return False

    return True


OEFieldTypeHandler.validate = _validate_value

# decorator for user handlers
def custom_handler(parent):
    if not isinstance(parent, OEFieldTypeHandler):
        msg = """Invalid type in @custom_handler decorator. Must be a valid type,
e.g., Types.Blob"""
        raise RuntimeError(msg)
    def inner(user_class):
        return type(user_class.__name__, (user_class, parent.__class__), {})
    return inner

@custom_handler(Types.Blob)
class CustomHandler:
    @staticmethod
    def get_name():
        raise NotImplementedError("You must define a get_name method for this class")

    @staticmethod
    def serialize(thing):
        raise NotImplementedError("You must define a serialize method for this class")

    @staticmethod
    def deserialize(byte_data):
        raise NotImplementedError("You must define a deserialize method for this class")

    @classmethod
    def validate(cls, thing):
        raise NotImplementedError("You must define a validate method for this class")





import inspect
import json
import math
import io

def _is_valid_handler(cls):
    if not inspect.isclass(cls):
        return False
    if not hasattr(cls, "get_name"):
        return False
    if cls is OEFieldTypeHandler:
        return False
    if not issubclass(cls, OEFieldTypeHandler):
        return False
    return True

def _get_storage_type(cls):
    if not inspect.isclass(cls):
       cls = cls.__class__
    if issubclass(cls, CustomHandler):
        return OEBlobType
    if not _is_valid_handler(cls):
        return None
    if _is_known_handler(cls().get_name()):  # it's a built-in type
        return None
    ret = None
    for c in filter(lambda a: a is not cls and _is_valid_handler(a) and _is_known_handler(a().get_name()), inspect.getmro(cls)):
        ret = c
    return ret

def record_to_json(record):
    return OERecordToJSON(record)


def record_to_dict(record):
    s = OERecordToJSON(record)
    return json.loads(s)


def record_from_bytes(record, buf):
    return OERecordFromBytes(record, buf)


def record_to_bytes(record):
    return OERecordToBytes(record)


def record_to_json(record):
    return OERecordToJSON(record)


def record_from_json(record, buf):
    return OERecordFromJSON(record, buf)

def _read_int(ifs):
    tmp = ifs.read(1)
    if len(tmp) == 0:
        return 0
    nbytes = tmp[0]
    if nbytes < 128:
        return nbytes
    nbytes -= 128
    shift = 0
    if nbytes == 1:
        val = ifs.read(1)[0]
        if val & 128:
            val -= 256
    elif nbytes == 0:
        return None
    else:
# Values is packed in multiple bytes. Unpack little-endian bytes.
        val = 0
        high_byte = 0
        while nbytes:
            high_byte = ifs.read(1)[0]
            val += high_byte << shift
            shift += 8
            nbytes -= 1
        if high_byte & 128:
            val -= 1 << shift
    return val

def _write_int(val):
    data = bytearray()
    if 0 <= val < 128:
        data.append(val)
        return bytes(data)
    nbytes = 1 + val.bit_length() // 8
    data.append(nbytes + 128)
    if val < 0:  # twos complement it
        val = (1 << (8 * nbytes)) + val
    if nbytes == 1:
        data.append(val)
        return bytes(data)
    while nbytes:
        data.append(val & 255)
        val = val >> 8
        nbytes -= 1
    return bytes(data)

def _get_record_bytes(ifs):
    result = bytearray()
    length = _read_int(ifs)
    if length == 0:
        return b''
    result += _write_int(length)
    tmp = ifs.read(length)
    result += tmp
    remaining = _read_int(ifs)
    result += _write_int(remaining)
    result += ifs.read(remaining)
    return bytes(result)

def _read_record_internal(ifs, rec, fmt):
    if isinstance(ifs, oeistream):
        pos = ifs.tell()
        size = ifs.size()
        if pos == size or not __OEReadRecordOrig(rec, ifs, fmt):
            return False
        return True 

    if fmt == "json" and hasattr(ifs, "readline"):
        line = ifs.readline()
        return record_from_json(rec, line)

# Most python io objects won't go into C++. Try some other approaches.
    try:
        pos = ifs.tell()
    except:
# Use seek-free methods of pulling a record off the stream
        if fmt == 'binary' or fmt == 'oeb':
            b = _get_record_bytes(ifs)
            if len(b) == 0:
                return False
            return record_from_bytes(rec, b)
        else:
            line = ifs.readline()
            return record_from_json(rec, line)
    if hasattr(ifs, "fileno") and hasattr(ifs, "name") and isinstance(ifs.name, str):
        orig_ifs = ifs
        ifs = oeifstream(ifs.name)
        ifs.seek(pos)
        if ifs.tell() != pos or not __OEReadRecordOrig(rec, ifs, fmt):
            ifs.close()
            orig_ifs.close()
            return False
        orig_ifs.seek(ifs.tell())
        return True 
    elif fmt == 'binary' or fmt == 'oeb':
        if hasattr(ifs, "buffer"):
            b = _get_record_bytes(ifs.buffer)
        else:
            b = _get_record_bytes(ifs)
        if len(b) == 0:
            return False
        return record_from_bytes(rec, b)
    else:
        line = ifs.readline()
        return record_from_json(rec, line)


def read_record_bytes(ifs):
# TODO: this will likely fail on SpooledTemporaryFiles and needs better logic like above
    pos = ifs.tell()
    orig_ifs = None
    if hasattr(ifs, "fileno") and hasattr(ifs, "name"):  # this is a file, not an oeistream
       orig_ifs = ifs
       ifs = oeifstream(ifs.name)
       ifs.seek(pos)
    elif isinstance(ifs, io.BytesIO):
       orig_ifs = ifs
       ifs = oeisstream(ifs.getbuffer().tobytes())
       ifs.seek(pos)

    size = ifs.size()
    ret = b""
    if pos != size:
      ret = OEReadRecordBytes(ifs)
    if len(ret) == 0: 
        ifs.close()
        if orig_ifs:
            orig_ifs.close()
        return ret
    if orig_ifs:
        orig_ifs.seek(ifs.tell())
    return ret


def read_record(ifs, fmt="binary"):
    record = OERecord()
    if _read_record_internal(ifs, record, fmt):
      return record
    return None


def write_record(ofs, record, fmt="binary"):
    using_file = hasattr(ofs, "fileno")
    if using_file:  # python file, instead of OE stream
      if fmt == "binary":
          ofs.write(record_to_bytes(record))
      else:
          ofs.write(record_to_json(record))
          ofs.write("\n")
      return True
    else:
        return OEWriteRecord_orig(ofs, record, fmt)


OEWriteRecord_orig = OEWriteRecord
OEWriteRecord = write_record


def read_records(ifs, fmt="binary"):
    record = read_record(ifs, fmt=fmt)
    while record is not None:
        yield record
        record = read_record(ifs, fmt=fmt)


OEReadRecords = read_records


def record_from_dict(record, d):
    buf = json.dumps(d)
    return record_from_json(record, buf)


def read_mol_record(ifs, fmt="binary"):
    record = OEMolRecord()
    stat = _read_record_internal(ifs, record, fmt)
    if stat:
        return record
    return None


def read_mol_records(ifs, fmt="binary"):
    record = read_mol_record(ifs, fmt=fmt)
    while record is not None:
        yield record
        record = read_mol_record(ifs, fmt=fmt)


OEReadMolRecords = read_mol_records


def get_primary_mol_field(record=None, default_name="Molecule", meta=None):
    if meta is None:
        meta = OEFieldMeta()
    if record is None:
        return OEPrimaryMolField(default_name, meta)
    return record.get_primary_mol_field(default_name, meta)


class Constants:
    """
    This abstract class holds hierarchical constants, and allows quick reverse
    lookup for classes and names from the integers. For this to work,
    every constant in the class needs to be unique.
    """

# Uniqueness is accomplished with the _base attribute, which tells where
# the constants for a class/category begin. The first byte should be unique
# to category, second to subcategory, etc.

# _attribute_type determines whether a class is an attribute, meaning it
# takes an additional value. _attribute_type is an actual python type.
# N.B. If you need to create an attribute that is a list, make a subclass
# of list (e.g., intlist, strlist, etc.) and use that. Otherwise, if you
# have lists of different types they will not serialize properly to
# datarecords.

    _base = 0
    _attribute_type = None
    _registry = {}
    _parent = None

    def __init__(self):
        raise AttributeError("No constructor defined - class is abstract")

    @classmethod
    def get_name(cls, val):
        """
        Returns the name of an integer constant in a class, or '' if the
        integer doesn't belong to the class.
        """
        if val not in cls._registry:
            return ""
        return cls._registry[val][0]

    @classmethod
    def get_class(cls, val):
        """
        Returns the class of an integer constant or None if the integer
        doesn't belong to the class.
        """
        if val not in cls._registry:
            return None
        return cls._registry[val][1]

    @classmethod
    def get_short_name(cls, val):
        """
        Returns the short name of an integer constant in a class, or '' if the
        integer doesn't belong to the class.
        """
        if val not in cls._registry:
            return ""
        owning_class = cls._registry[val][1]
        return owning_class.get_name(val)

    @classmethod
    def is_category(cls, val):
        """
        Returns True if constant 'val' belongs to this category.
        """
        return val & 0xFF000000 == cls._base

    @classmethod
    def is_subcategory(cls, val):
        """
        Returns True if constant 'val' belongs to this subcategory.
        """
        return val & 0xFFFF0000 == cls._base

    @classmethod
    def is_subsubcategory(cls, val):
        """
        Returns True if constant 'val' belongs to this sub-subcategory.
        """
        return val & 0xFFFFFF00 == cls._base

    @classmethod
    def is_attribute(cls):
        """
        Returns True if the class is an attribute (requires arguments) vs.
        an option.
        """
        return cls._attribute_type is not None

    @classmethod
    def attribute_type(cls):
        """
        Returns the data type required by this attribute.
        """
        return cls._attribute_type

    @classmethod
    def get_value_from_name(cls, name):
        entry = [i for i in cls._registry.items() if i[1][0] == name]
        if len(entry):
            return entry[0][0]
        return None

    @classmethod
    def initialize(cls):
        """
        Creates an internal dict that maps the integer constant values to
        their names and owning classes. This allows quick lookup of constants'
        names and classes. If any inner classes are injected into this class,
        this method must be called afterward for the injected constants to work.
        """
        cls._registry = {}
        cls._parent = None
        for name in dir(cls):
            if name.startswith("_"):
                continue
            d = getattr(cls, name)
            if isinstance(d, int):
# Found a constant, log its name and class
                ret = name, cls
                cls._registry[d] = ret
            elif hasattr(d, "_base"):
# Found an inner class, descend into it
                child_registry = d.initialize()
                d._parent = cls
                for key in child_registry:
                    child_name, retcls = child_registry[key]
                    cls._registry[key] = name + "." + child_name, retcls
        return dict(cls._registry)

    @classmethod
    def get_values(cls):
        for i in dir(cls):
            if i.startswith("_"):
                continue
            d = getattr(cls, i)
            if isinstance(d, int):
                yield d
            elif hasattr(d, "_base"):
                kids = d.get_values()
                for k in kids:
                    yield k

    @classmethod
    def find(cls, query):
        ret = []
        for i in cls.get_values():
            name = cls.get_name(i)
            if query.lower() in name.lower():
                ret.append(name)
        print(", ".join(ret))

    @classmethod
    def list(cls):
        classes = []
        vals = []
        for i in dir(cls):
            if i[0] == "_":
                continue
            c = getattr(cls, i)
            if inspect.isclass(c):
                if i[0].islower():
                    continue
                classes.append(i)
            elif type(c) is int:
                name = cls.get_name(c)
                if name is not None:
                    vals.append(name)
        result = ""
        if classes:
            result = "Categories: " + ", ".join(classes)
        if vals:
            part2 = "Values: " + ", ".join(vals)
            if result:
                result += "\n" + part2
            else:
                result = part2
        print(result)

    @classmethod
    def get_parent(cls):
        return cls._parent

    @classmethod
    def register(cls, key, val=None):
        if type(val) is int:
            setattr(cls, key, val + cls._base)
        elif inspect.isclass(key):
            setattr(cls, key.__name__, key)

        top = cls
        while top._parent is not None:
            top = top._parent
        top.initialize()


class Meta(Constants):
    """
    A class containing metadata constants used by the :py:class:`OEFieldMeta`
    and :py:class:`OERecordMeta` classes.
    """

# _base keeps our constants separated by category/subcategory. If the
# first byte is unique to category and second is unique to sub-category,
# we can identify category membership quickly
    _base = 0xFFFF0000

    class Annotation(Constants):
        """
        A class defining annotation attributes. Attribute type is str.

        .. py:data:: Description
        .. py:data:: Author
        .. py:data:: Comments
        """

        _base = 0x02000000
        _attribute_type = str

        Description = _base + 1
        Author = _base + 2
        Comments = _base + 3

    class Source(Constants):
        """
        A class defining column source attributes. Attribute type is str.

        .. py:data:: ID
        .. py:data:: JobID
        .. py:data:: ServiceID
        .. py:data:: Version
        .. py:data:: Query
        """

        _base = 0x03000000
        _attribute_type = str

        ID = _base + 1
        JobID = _base + 2
        ServiceID = _base + 3
        Version = _base + 4
        Query = _base + 5

    class Flags(Constants):
        """
        A class defining column option flags.

        .. py:data:: ID
        .. py:data:: Deprecated
        .. py:data:: Range
        .. py:data:: Categorical
        .. py:data:: Ordinal
        .. py:data:: Invalid
        .. py:data:: Readonly
        .. py:data:: DoNotSave
        .. py:data:: Independent
        .. py:data:: Experimental
        .. py:data:: Calculated
        .. py:data:: SDData
        .. py:data:: GenericData
        .. py:data:: PDBData
        .. py:data:: UserCreated
        .. py:data:: Optional
        .. py:data:: Predicted
        """

        _base = 0x04000000

        ID = _base + 1
        Deprecated = _base + 2
        Range = _base + 3
        Categorical = _base + 4
        Ordinal = _base + 5
        Invalid = _base + 6
        Readonly = _base + 7
        DoNotSave = _base + 8
        Independent = _base + 9
        Experimental = _base + 10
        Calculated = _base + 11
        SDData = _base + 12
        GenericData = _base + 13
        PDBData = _base + 14
        UserCreated = _base + 15
        Optional = _base + 16
        Predicted = _base + 17

    class Hints(Constants):
        """
        A class defining interpretation hint options for column data.

        .. py:data:: Image
        .. py:data:: Image_SVG
        .. py:data:: Image_PNG
        .. py:data:: Image_JPG
        .. py:data:: Date
        .. py:data:: URL
        .. py:data:: ImageURL
        .. py:data:: LargerValuesBetter
        .. py:data:: SmallerValuesBetter
        .. py:data:: ShardID
        .. py:data:: ClusterID
        .. py:data:: ClusterHead
        .. py:data:: ClusterX
        .. py:data:: ClusterY
        """

        _base = 0x05000000

        Image = _base + 1
        Image_SVG = _base + 2
        Image_PNG = _base + 3
        Image_JPG = _base + 4
        Date = _base + 5
        URL = _base + 6
        ImageURL = _base + 7
        LargerValuesBetter = _base + 8
        SmallerValuesBetter = _base + 9
        ShardID = _base + 10
        ClusterID = _base + 11
        ClusterHead = _base + 12
        ClusterX = _base + 13
        ClusterY = _base + 14

        class Chem(Constants):
            """
            Chemistry-specific Hints.

            .. py:data:: PrimaryMol
            .. py:data:: SMILES
            .. py:data:: SMARTS
            .. py:data:: Protein
            .. py:data:: Receptor
            .. py:data:: Conformer
            .. py:data:: Reaction
            .. py:data:: Markush
            .. py:data:: FingerPrint
            .. py:data:: SelectivityTarget
            .. py:data:: PrimaryTarget
            .. py:data:: Ligand
            .. py:data:: Query
            .. py:data:: MolReference
            .. py:data:: ProteinSequence
            .. py:data:: DNASequence
            .. py:data:: RNASequence
            .. py:data:: InChi
            .. py:data:: InChiKey
            .. py:data:: OrionMolURL
            .. py:data:: ChemicalName
            .. py:data:: RotorOffsetCompression
            .. py:data:: GraphMol
            .. py:data:: Virtual
            .. py:data:: VirtualID
            .. py:data:: CXSMILES
            """

            _base = 0x05010000

            PrimaryMol = _base + 1
            SMILES = _base + 2
            SMARTS = _base + 3
            Protein = _base + 4
            Receptor = _base + 5
            Conformer = _base + 6
            Reaction = _base + 7
            Markush = _base + 8
            FingerPrint = _base + 9
            SelectivityTarget = _base + 10
            PrimaryTarget = _base + 11
            Ligand = _base + 12
            Query = _base + 13
            MolReference = _base + 14
            ProteinSequence = _base + 15
            DNASequence = _base + 16
            RNASequence = _base + 17
            InChi = _base + 18
            InChiKey = _base + 19
            OrionMolURL = _base + 20
            ChemicalName = _base + 21
            RotorOffsetCompression = _base + 22
            GraphMol = _base + 23
            Virtual = _base + 24
            VirtualID = _base + 25
            CXSMILES = _base + 26

    class Display(Constants):
        """
        A class defining hints for how to display information.

        .. py:data:: Hidden
        .. py:data:: AsMean
        .. py:data:: AsRange
        .. py:data:: Precision1
        .. py:data:: Precision2
        .. py:data:: Precision3
        .. py:data:: Precision4
        .. py:data:: PreferLog
        .. py:data:: ColorBy
        .. py:data:: MarkerBy
        .. py:data:: SizeBy
        .. py:data:: XAxis
        .. py:data:: YAxis
        .. py:data:: HiddenFrom3D
        .. py:data:: HiddenFromSpreadsheet
        .. py:data:: HiddenFromPlot
        .. py:data:: HiddenFromTileView
        .. py:data:: HiddenByDefault
        """

        _base = 0x06000000

        Hidden = _base + 1
        AsMean = _base + 2
        AsRange = _base + 3
        Precision1 = _base + 4
        Precision2 = _base + 5
        Precision3 = _base + 6
        Precision4 = _base + 7
        PreferLog = _base + 8
        ColorBy = _base + 9
        MarkerBy = _base + 10
        SizeBy = _base + 11
        XAxis = _base + 12
        YAxis = _base + 13
        Rating = _base + 14
        HiddenFrom3D = _base + 15
        HiddenFromSpreadsheet = _base + 16
        HiddenFromPlot = _base + 17
        HiddenFromTileView = _base + 18
        HiddenByDefault = _base + 19

        class Chem(Constants):
            _base = 0x06010000
            AsDepiction = _base + 1

        class Values(Constants):
            _base = 0x06020000
            _attribute_type = int
            Priority = _base + 1
            Precision = _base + 2

    class Relations(Constants):
        """
        A class defining relationship attributes to other columns. The
        attribute type is str, for column names.

        .. py:data:: ChildOf
        .. py:data:: UnitsFor
        .. py:data:: ErrorsFor
        .. py:data:: DetailsFor
        .. py:data:: MeanFor
        .. py:data:: GroupID
        .. py:data:: ReplacedBy
        .. py:data:: AppliesTo
        .. py:data:: CommentFor
        .. py:data:: MeasurementUpperLimitFor
        .. py:data:: MeasurementLowerLimitFor
        .. py:data:: QualifierFor
        .. py:data:: SplitFrom
        """

        _base = 0x07000000
        _attribute_type = str

        ErrorsFor = _base + 2
        ChildOf = _base + 3
        UnitsFor = _base + 4
        DetailsFor = _base + 5
        MeanFor = _base + 7
        GroupID = _base + 8
        ReplacedBy = _base + 9
        AppliesTo = _base + 10
        CommentFor = _base + 12
        MeasurementUpperLimitFor = _base + 13
        MeasurementLowerLimitFor = _base + 14
        QualifierFor = _base + 15
        SplitFrom = _base + 16

        class Chem(Constants):
            """
            Chemistry-specific Relations. Attribute type is str.

            .. py:data:: MolDataFor
            .. py:data:: ConfDataFor
            .. py:data:: AtomDataFor
            .. py:data:: BondDataFor
            .. py:data:: LigandFor
            .. py:data:: ReceptorFor
            .. py:data:: QueryFor
            """

            _base = 0x07010000
            _attribute_type = str

            MolDataFor = _base + 1
            ConfDataFor = _base + 2
            AtomDataFor = _base + 3
            BondDataFor = _base + 4
            LigandFor = _base + 5
            ReceptorFor = _base + 6
            QueryFor = _base + 7

    class Units(Constants):
        """
        A class defining unit options for columns.
        """

        _base = 0x08000000

        class Concentration(Constants):
            """
            Concentration Units

            .. py:data:: M
            .. py:data:: mM
            .. py:data:: uM
            .. py:data:: nM
            .. py:data:: mg_per_kg
            .. py:data:: ng_per_ml
            .. py:data:: ppm
            .. py:data:: ppb
            """

            _base = 0x08010000
            M = _base + 1
            mM = _base + 2
            uM = _base + 3
            nM = _base + 4
            mg_per_kg = _base + 5
            ng_per_ml = _base + 6
            ppm = _base + 7
            ppb = _base + 8

        class Energy(Constants):
            """
            Energy Units

            .. py:data:: Cal
            .. py:data:: kCal
            .. py:data:: J
            .. py:data:: kJ
            .. py:data:: Hartree
            .. py:data:: eV
            .. py:data:: kCal_per_mol
            .. py:data:: kJ_per_mol
            .. py:data:: kT
            .. py:data:: RT
            """

            _base = 0x08020000
            Cal = _base + 1
            kCal = _base + 2
            J = _base + 3
            kJ = _base + 4
            Hartree = _base + 5
            eV = _base + 6
            kCal_per_mol = _base + 7
            kJ_per_mol = _base + 8
            kT = _base + 9
            RT = _base + 10

        class Entropy(Constants):
            """
            Entropy Units

            .. py:data:: kCal_per_mol_K
            .. py:data:: kJ_per_mol_K
            """

            _base = 0x08090000
            kCal_per_mol_K = _base + 1
            kJ_per_mol_K = _base + 2

        class Velocity(Constants):
            """
            Velocity Units

            .. py:data:: m_per_s
            .. py:data:: A_per_ps
            """

            _base = 0x080A0000
            m_per_s = _base + 1
            A_per_ps = _base + 2

        class Density(Constants):
            """
            Density Units

            .. py:data:: e_per_A3
            .. py:data:: n_per_A3
            """

            _base = 0x080B0000
            e_per_A3 = _base + 1
            n_per_A3 = _base + 2
            item_per_m3 = _base + 3
            item_per_cm3 = _base + 4

        class Amount(Constants):
            """
            Amount Units

            .. py:data:: Mol
            .. py:data:: Item
            """

            _base = 0x080C0000
            Mol = _base + 1
            Item = _base + 2

        class Charge(Constants):
            """
            Charge Units

            .. py:data:: Coulomb
            .. py:data:: PlanckCharge
            """

            _base = 0x080D0000
            Coulomb = _base + 1
            PlanckCharge = _base + 2

        class Angle(Constants):
            """
            Angle Units

            .. py:data:: rad
            .. py:data:: deg
            """

            _base = 0x080E0000
            rad = _base + 1
            deg = _base + 2

        class Force(Constants):
            """
            Force Units

            .. py:data:: N
            .. py:data:: dyn
            .. py:data:: H_per_Bohr
            .. py:data:: eV_per_A
            .. py:data:: kJ_per_mol_rad
            .. py:data:: kJ_per_mol_nm
            .. py:data:: kJ_per_mol_A
            .. py:data:: kCal_per_mol_rad
            .. py:data:: kCal_per_mol_nm
            .. py:data:: kCal_per_mol_A
            """

            _base = 0x080F0000
            N = _base + 1
            dyn = _base + 2
            H_per_Bohr = _base + 3
            eV_per_A = _base + 4
            kJ_per_mol_rad = _base + 5
            kJ_per_mol_nm = _base + 6
            kJ_per_mol_A = _base + 7
            kCal_per_mol_rad = _base + 8
            kCal_per_mol_nm = _base + 9
            kCal_per_mol_A = _base + 10

        class Power(Constants):
            """
            Power Units

            .. py:data:: W
            """

            _base = 0x08100000
            W = _base + 1

        class Current(Constants):
            """
            Current Units

            .. py:data:: A
            .. py:data:: mA
            .. py:data:: uA
            """

            _base = 0x08110000
            A = _base + 1
            mA = _base + 2
            uA = _base + 3

        class ElectricalPotential(Constants):
            """
            Potential Units

            .. py:data:: V
            """

            _base = 0x08120000
            V = _base + 1

        class MagneticField(Constants):
            """
            Magnetic Field Units

            .. py:data:: T
            .. py:data:: G
            """

            _base = 0x08130000
            T = _base + 1
            G = _base + 2

        class Pressure(Constants):
            """
            Pressure Units

            .. py:data:: Pa
            .. py:data:: kPa
            .. py:data:: bar
            .. py:data:: atm
            .. py:data:: mmHg
            .. py:data:: torr
            """

            _base = 0x08140000
            Pa = _base + 1
            kPa = _base + 2
            bar = _base + 3
            atm = _base + 4
            mmHg = _base + 5
            tor = _base + 6

        class DipoleMoment(Constants):
            """
            Dipole Moment Units

            .. py:data:: D
            .. py:data:: statCm
            """

            _base = 0x08150000
            D = _base + 1
            statCm = _base + 2

        class Length(Constants):
            """
            Length Units

            .. py:data:: m
            .. py:data:: mm
            .. py:data:: um
            .. py:data:: nm
            .. py:data:: A
            .. py:data:: Bohr
            """

            _base = 0x08030000
            m = _base + 1
            mm = _base + 2
            um = _base + 3
            nm = _base + 4
            Ang = _base + 5
            Bohr = _base + 6

        class Time(Constants):
            """
            Time Units

            .. py:data:: s
            .. py:data:: ms
            .. py:data:: us
            .. py:data:: ns
            .. py:data:: ps
            .. py:data:: fs
            .. py:data:: days
            .. py:data:: min
            .. py:data:: hours
            """

            _base = 0x08040000
            s = _base + 1
            ms = _base + 2
            us = _base + 3
            ns = _base + 4
            ps = _base + 5
            fs = _base + 6
            days = _base + 7
            min = _base + 8
            hours = _base + 9

        class Mass(Constants):
            """
            Mass Units

            .. py:data:: kg
            .. py:data:: g
            .. py:data:: mg
            .. py:data:: ug
            .. py:data:: ng
            .. py:data:: Da

            """

            _base = 0x08050000
            kg = _base + 1
            g = _base + 2
            mg = _base + 3
            ug = _base + 4
            ng = _base + 5
            Da = _base + 6

        class Volume(Constants):
            """
            Volume Units

            .. py:data:: l
            .. py:data:: ml
            .. py:data:: ul
            .. py:data:: nl
            .. py:data:: A3
            """

            _base = 0x08060000
            l = _base + 1
            ml = _base + 2
            ul = _base + 3
            nl = _base + 4
            A3 = _base + 5

        class Frequency(Constants):
            """
            Frequency Units

            .. py:data:: Hz
            .. py:data:: kHz
            .. py:data:: MHz
            .. py:data:: GHz
            .. py:data:: THz
            .. py:data:: Recip_cm
            """

            _base = 0x08070000
            Hz = _base + 1
            kHz = _base + 2
            MHz = _base + 3
            GHz = _base + 4
            THz = _base + 5
            Recip_cm = _base + 6

        class Temp(Constants):
            """
            Temperature Units

            .. py:data:: C
            .. py:data:: F
            .. py:data:: K
            """

            _base = 0x08080000
            C = _base + 1
            F = _base + 2
            K = _base + 3

    class Limits(Constants):
        """
        Limits. Attribute type is float.

        .. py:data:: Lower
        .. py:data:: Upper
        """

        _base = 0x09000000
        _attribute_type = float

        Lower = _base + 1
        Upper = _base + 2

    class Constraints(Constants):
        _base = 0x0A000000
        _attribute_type = list

        AllowedValues = _base + 1
        Limits = _base + 2


class RecordMeta(Constants):
    """
    Class for record-level metadata
    """

    class Flags(Constants):
        """
        Attribute type is str.

        .. py:data:: ID
        .. py:data:: Annotation
        .. py:data:: IsSchema
        """

        _base = 0x01000000
        _attribute_type = str

        ID = _base + 1
        Annotation = _base + 2
        IsSchema = _base + 3


# Monkey patch in a [] operator for OERange for compatibility
def __oerange_getindex(self, idx):
    if idx == 0:
        return self.get_low()
    if idx == 1:
        return self.get_high()
    if idx == 2:
        return self.get_inclusivity_string()
    raise IndexError()

OERange.__getitem__ = __oerange_getindex

# Monkey patch in some python code for OERecord.set_value

def __oerecord_set_value(self, field, val):
    if field.get_user_type_name() == "":
        res = self.__set_value(field, val)
    else:
        py_handler = _get_unknown_type(field.get_user_type_name())
        if py_handler is None:
# Use the storage type to store bytes
            value_bytes = field.get_type().to_bytes(val)
            return self.set_bytes(field, value_bytes)

        if not py_handler.validate(val):
            return False

        base_value = py_handler.serialize(val)
        res = self.__set_value(field, base_value)

    if res is False:
        if field.get_read_only():
            msg = "Attempted to set value on a readonly field: {}".format(field.get_name())
            raise RuntimeError(msg)
        msg = "Invalid value passed to set_value: {} for field type '{}'"
        msg = msg.format(type(val).__name__, field.get_type_name())
        raise ValueError(msg)
    return res

def __oerecord_get_value(self, field):
    value = self.__get_value(field)
    if field.get_user_type_name() == "":
        return value
    py_handler = _get_unknown_type(field.get_user_type_name())
    if py_handler is None:
        OEThrow.Warning(f"Invalid attempt to deserialize an unknown custom field type: {field.get_user_type_name}")
        return value
    return py_handler.deserialize(value)

OERecord.__set_value = OERecord.set_value
OERecord.set_value = __oerecord_set_value
OERecord.__get_value = OERecord.get_value
OERecord.get_value = __oerecord_get_value
OEMolRecord.mol_dr_tag = "__DRID__"


def OEField(name, 
            dataType, 
            meta=None, 
            read_only=False, 
            nullable=False,
            units=None):
    ret = None
    if meta is None:
        meta = OEFieldMeta()
    if units is not None:
        ok_units = None
        if isinstance(units, str):
            for u in Meta.Units.get_values():
                if Meta.Units.get_short_name(u) == units:
                    ok_units = u
        elif isinstance(units, int):
            if Meta.Units.get_class(units) is not None:
                ok_units = units
        if ok_units is None:
            raise ValueError(f"Unknown units: {units}")
        meta.set_option(ok_units)

    storage_name = None
    if isinstance(dataType, str):
        type_name = dataType
        if ":" in dataType:
            type_name, storage_name = type_name.rsplit(":", 1)
    elif inspect.isclass(dataType) and issubclass(dataType, OEFieldTypeHandler):
        dataType = dataType()
        type_name = dataType.get_name()
    elif isinstance(dataType, OEFieldTypeHandler):
        type_name = dataType.get_name()
    else:
        raise TypeError("{} is not a known data type".format(dataType))


    if not name:
        raise ValueError("Field name cannot be empty")
    if _is_known_handler(type_name):
       ret = OEMakeField(name, type_name, meta, read_only, nullable)
    else:
        if storage_name is not None:
            ret = OEMakeField(name, storage_name, meta, read_only, nullable)
            ret.set_user_type_name(type_name)
        else:
            storage_class = _get_storage_type(dataType)
            if storage_class is not None:
                ret = OEField(name, storage_class, meta, read_only, nullable)
                ret.set_user_type_name(type_name)
    return ret


def OEMatchField(name, dataType, meta=None, read_only=False, nullable=False):
    if meta is None:
      meta = OEFieldMeta()
    return OEMakeMatchField(name, dataType.get_name(), meta, read_only, nullable)


def __OEFieldMetaToDict(meta):
  s = OEFieldMetaToJSON(meta)
  return json.loads(s)


def __OEFieldMetaFromDict(meta, d, clear=True):
  s = json.dumps(d)
  return OEFieldMetaFromJSON(meta, s, clear)


OEFieldMeta.to_dict = __OEFieldMetaToDict
OEFieldMeta.from_dict = __OEFieldMetaFromDict

def __field_type_cmp(self, other):
  if not hasattr(other, "get_name"):
    return False
  return self.get_name() == other.get_name()

def __range_cmp(self, other):
    if isinstance(other, tuple) or isinstance(other, list):
        other = OERange(*other)
    if isinstance(other, OERange):
        return self.get_as_vector() == other.get_as_vector()
    return False

def _format_record(self, depth=0):
    space = " " * (depth * 4)
    ret = space + self.__class__.__name__ + " (\n"
    for f in self.get_fields():
        space = " " * (depth + 1) * 4
        dt_name = f.get_type_name()
        name = f.get_name()
        if not self.has_value(f):
          val = "None"
        elif self.is_na(f):
          val = "None"
        elif dt_name == Types.Record.get_name():
            v = self.get_value(f)
            val = _format_record(v, depth + 1)
        elif dt_name == Types.RecordVec.get_name():
            txts = []
            rv = self.get_value(f)
            for v in rv:
                txts.append(_format_record(v, depth + 2))
            val = "\n" + "\n".join(txts)

        else:
            val = self._format_value(f)

        pad = " "
        if isinstance(val, str) and val.startswith("\n"):
            pad = ""
        ret += space + "{}({}) :{}{}\n".format(name, dt_name, pad, val)
    ret += space + ")"
    return ret

OERecord._get_base_fields = OERecord.get_fields

def _get_fields_new(record, include_meta=False):
    ret = []
    bases = record._get_base_fields(include_meta)
    for base in bases:
      name = base.get_name()
      f = record.get_field(name)
      if f is None:
          f = base
      ret.append(f)
    return ret

OERecord.get_fields = _get_fields_new

OERecord.__repr__ = _format_record
OEMolRecord.__repr__ = _format_record


OEFieldTypeHandler.__eq__ = __field_type_cmp
OERange.__eq__ = __range_cmp

OEReadMolRecord = read_mol_record
__OEReadRecordOrig = OEReadRecord
OEReadRecord = read_record

def __get_type_from_name(name):
    field = OEMakeField('x', name)
    if field:
        return field.get_type()
    return None

Types.get_type = __get_type_from_name

def _get_known_types():
    result = []
    for c in vars(Types).values():
        if  isinstance(c, OEFieldTypeHandler):
            result.append(c.__class__)
    for c in vars(Types.Chem).values():
        if  isinstance(c, OEFieldTypeHandler):
            result.append(c.__class__)
    return result

def _find_subclass_with_name(cls, name):
  for sub in cls.__subclasses__():
    if hasattr(sub, "get_name"):
      if sub is CustomHandler:
         subsub = _find_subclass_with_name(sub, name)
         if subsub is not None:
             return subsub
         continue
# This is gross because the built-in get_name/GetName is virtual,
# but the one in custom classes is static, so the signatures can differ
      sig = inspect.signature(sub.get_name)
      if len(sig.parameters) == 1:
          subname = sub.get_name(sub())
      else:
          subname = sub.get_name()
      if subname == name:
        return sub
      else:
        subsub = _find_subclass_with_name(sub, name)
        if subsub is not None:
          return subsub
  return None

def _get_unknown_type(name):
    for c in _get_known_types():
        match = _find_subclass_with_name(c, name)
        if match:
            return match
    return None


Meta.initialize()
RecordMeta.initialize()


class OEDots(object):
    r"""Proxy of C++ OESystem::OEDots 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__(OEDots self, unsigned int bigstep, unsigned int smallstep, char const * objectname="", char const * action="processed") -> OEDots"""
        _oechem.OEDots_swiginit(self, _oechem.new_OEDots(*args))

    def GetCounts(self) -> "unsigned int":
        r"""GetCounts(OEDots self) -> unsigned int"""
        return _oechem.OEDots_GetCounts(self)

    def GetBigStep(self) -> "unsigned int":
        r"""GetBigStep(OEDots self) -> unsigned int"""
        return _oechem.OEDots_GetBigStep(self)

    def SetBigStep(self, s: "unsigned int") -> "void":
        r"""SetBigStep(OEDots self, unsigned int s)"""
        return _oechem.OEDots_SetBigStep(self, s)

    def GetSmallStep(self) -> "unsigned int":
        r"""GetSmallStep(OEDots self) -> unsigned int"""
        return _oechem.OEDots_GetSmallStep(self)

    def SetSmallStep(self, s: "unsigned int") -> "void":
        r"""SetSmallStep(OEDots self, unsigned int s)"""
        return _oechem.OEDots_SetSmallStep(self, s)

    def Total(self) -> "void":
        r"""Total(OEDots self)"""
        return _oechem.OEDots_Total(self)

    def Update(self, *args) -> "void":
        r"""
        Update(OEDots self, unsigned int step=1)
        Update(OEDots self, char const symbol, unsigned int step=1)
        """
        return _oechem.OEDots_Update(self, *args)
    __swig_destroy__ = _oechem.delete_OEDots

# Register OEDots in _oechem:
_oechem.OEDots_swigregister(OEDots)
DesignUnit = cvar.DesignUnit

class OEThreadedDots(object):
    r"""Proxy of C++ OESystem::OEThreadedDots 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__(OEThreadedDots self, unsigned int bigstep, unsigned int smallstep, char const * objectname="") -> OEThreadedDots"""
        _oechem.OEThreadedDots_swiginit(self, _oechem.new_OEThreadedDots(*args))
    __swig_destroy__ = _oechem.delete_OEThreadedDots

    def Total(self) -> "void":
        r"""Total(OEThreadedDots self)"""
        return _oechem.OEThreadedDots_Total(self)

    def Update(self, step: "unsigned int"=1) -> "void":
        r"""Update(OEThreadedDots self, unsigned int step=1)"""
        return _oechem.OEThreadedDots_Update(self, step)

# Register OEThreadedDots in _oechem:
_oechem.OEThreadedDots_swigregister(OEThreadedDots)

class OEStopwatch(object):
    r"""Proxy of C++ OESystem::OEStopwatch 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__(OEStopwatch self) -> OEStopwatch"""
        _oechem.OEStopwatch_swiginit(self, _oechem.new_OEStopwatch())

    def Start(self) -> "void":
        r"""Start(OEStopwatch self)"""
        return _oechem.OEStopwatch_Start(self)

    def Lap(self) -> "float":
        r"""Lap(OEStopwatch self) -> float"""
        return _oechem.OEStopwatch_Lap(self)

    def Elapsed(self) -> "float":
        r"""Elapsed(OEStopwatch self) -> float"""
        return _oechem.OEStopwatch_Elapsed(self)
    __swig_destroy__ = _oechem.delete_OEStopwatch

# Register OEStopwatch in _oechem:
_oechem.OEStopwatch_swigregister(OEStopwatch)

class OEWallTimer(object):
    r"""Proxy of C++ OESystem::OEWallTimer 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__(OEWallTimer self) -> OEWallTimer"""
        _oechem.OEWallTimer_swiginit(self, _oechem.new_OEWallTimer())

    def Start(self) -> "void":
        r"""Start(OEWallTimer self)"""
        return _oechem.OEWallTimer_Start(self)

    def Lap(self) -> "double":
        r"""Lap(OEWallTimer self) -> double"""
        return _oechem.OEWallTimer_Lap(self)

    def Elapsed(self) -> "double":
        r"""Elapsed(OEWallTimer self) -> double"""
        return _oechem.OEWallTimer_Elapsed(self)
    __swig_destroy__ = _oechem.delete_OEWallTimer

# Register OEWallTimer in _oechem:
_oechem.OEWallTimer_swigregister(OEWallTimer)

class OECycleTimer(object):
    r"""Proxy of C++ OESystem::OECycleTimer 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__(OECycleTimer self) -> OECycleTimer"""
        _oechem.OECycleTimer_swiginit(self, _oechem.new_OECycleTimer())

    def Start(self) -> "void":
        r"""Start(OECycleTimer self)"""
        return _oechem.OECycleTimer_Start(self)

    def Lap(self) -> "OEULongLong":
        r"""Lap(OECycleTimer self) -> OEULongLong"""
        return _oechem.OECycleTimer_Lap(self)

    def Elapsed(self) -> "OEULongLong":
        r"""Elapsed(OECycleTimer self) -> OEULongLong"""
        return _oechem.OECycleTimer_Elapsed(self)
    __swig_destroy__ = _oechem.delete_OECycleTimer

# Register OECycleTimer in _oechem:
_oechem.OECycleTimer_swigregister(OECycleTimer)


def OESetMemPoolMode(mode: "unsigned int") -> "void":
    r"""OESetMemPoolMode(unsigned int mode)"""
    return _oechem.OESetMemPoolMode(mode)

def OEGetMemPoolMode() -> "unsigned int":
    r"""OEGetMemPoolMode() -> unsigned int"""
    return _oechem.OEGetMemPoolMode()

def OESetThreadSafe(arg1: "bool") -> "void":
    r"""OESetThreadSafe(bool arg1)"""
    return _oechem.OESetThreadSafe(arg1)

def OEGetThreadSafe() -> "bool":
    r"""OEGetThreadSafe() -> bool"""
    return _oechem.OEGetThreadSafe()
class OEBaseData(object):
    r"""Proxy of C++ OESystem::OEBaseData 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__ = _oechem.delete_OEBaseData

    def GetTag(self) -> "unsigned int":
        r"""GetTag(OEBaseData self) -> unsigned int"""
        return _oechem.OEBaseData_GetTag(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEBaseData self) -> void const *"""
        return _oechem.OEBaseData_GetDataType(self)

    def GetSize(self) -> "unsigned int":
        r"""GetSize(OEBaseData self) -> unsigned int"""
        return _oechem.OEBaseData_GetSize(self)

    def CreateCopy(self) -> "OESystem::OEBaseData *":
        r"""CreateCopy(OEBaseData self) -> OEBaseData"""
        return _oechem.OEBaseData_CreateCopy(self)

    def GetData(self) -> "PyObject *":
        r"""GetData(OEBaseData self) -> PyObject *"""
        return _oechem.OEBaseData_GetData(self)

# Register OEBaseData in _oechem:
_oechem.OEBaseData_swigregister(OEBaseData)

class OEBase(object):
    r"""Proxy of C++ OESystem::OEBase 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__ = _oechem.delete_OEBase

    def Clear(self) -> "void":
        r"""Clear(OEBase self)"""
        return _oechem.OEBase_Clear(self)

    def SetBaseData(self, arg2: "OEBaseData") -> "bool":
        r"""SetBaseData(OEBase self, OEBaseData arg2) -> bool"""
        return _oechem.OEBase_SetBaseData(self, arg2)

    def AddBaseData(self, arg2: "OEBaseData") -> "bool":
        r"""AddBaseData(OEBase self, OEBaseData arg2) -> bool"""
        return _oechem.OEBase_AddBaseData(self, arg2)

    def HasData(self, *args) -> "bool":
        r"""
        HasData(OEBase self, char const * tag) -> bool
        HasData(OEBase self, unsigned int tag) -> bool
        """
        return _oechem.OEBase_HasData(self, *args)

    def DeleteData(self, *args) -> "bool":
        r"""
        DeleteData(OEBase self, char const * tag) -> bool
        DeleteData(OEBase self, unsigned int tag) -> bool
        """
        return _oechem.OEBase_DeleteData(self, *args)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEBase self) -> void const *"""
        return _oechem.OEBase_GetDataType(self)

    def IsDataType(self, arg2: "void const *") -> "bool":
        r"""IsDataType(OEBase self, void const * arg2) -> bool"""
        return _oechem.OEBase_IsDataType(self, arg2)

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEBase self) -> OEBase"""
        return _oechem.OEBase_CreateCopy(self)

    def GetDataIter(self, *args) -> "OESystem::OEIterBase< OESystem::OEBaseData > *":
        r"""
        GetDataIter(OEBase self) -> OESystem::OEIterBase< OESystem::OEBaseData >
        GetDataIter(OEBase self, unsigned int tag) -> OESystem::OEIterBase< OESystem::OEBaseData > *
        """
        return _oechem.OEBase_GetDataIter(self, *args)

    def SetBoolData(self, *args) -> "bool":
        r"""
        SetBoolData(OEBase self, char const * tag, bool t) -> bool
        SetBoolData(OEBase self, unsigned int tag, bool t) -> bool
        """
        return _oechem.OEBase_SetBoolData(self, *args)

    def GetBoolData(self, *args) -> "bool":
        r"""
        GetBoolData(OEBase self, char const * tag) -> bool
        GetBoolData(OEBase self, unsigned int tag) -> bool
        """
        return _oechem.OEBase_GetBoolData(self, *args)

    def SetIntData(self, *args) -> "bool":
        r"""
        SetIntData(OEBase self, char const * tag, int t) -> bool
        SetIntData(OEBase self, unsigned int tag, int t) -> bool
        """
        return _oechem.OEBase_SetIntData(self, *args)

    def GetIntData(self, *args) -> "int":
        r"""
        GetIntData(OEBase self, char const * tag) -> int
        GetIntData(OEBase self, unsigned int tag) -> int
        """
        return _oechem.OEBase_GetIntData(self, *args)

    def SetFloatData(self, *args) -> "bool":
        r"""
        SetFloatData(OEBase self, char const * tag, float t) -> bool
        SetFloatData(OEBase self, unsigned int tag, float t) -> bool
        """
        return _oechem.OEBase_SetFloatData(self, *args)

    def GetFloatData(self, *args) -> "float":
        r"""
        GetFloatData(OEBase self, char const * tag) -> float
        GetFloatData(OEBase self, unsigned int tag) -> float
        """
        return _oechem.OEBase_GetFloatData(self, *args)

    def SetDoubleData(self, *args) -> "bool":
        r"""
        SetDoubleData(OEBase self, char const * tag, double t) -> bool
        SetDoubleData(OEBase self, unsigned int tag, double t) -> bool
        """
        return _oechem.OEBase_SetDoubleData(self, *args)

    def GetDoubleData(self, *args) -> "double":
        r"""
        GetDoubleData(OEBase self, char const * tag) -> double
        GetDoubleData(OEBase self, unsigned int tag) -> double
        """
        return _oechem.OEBase_GetDoubleData(self, *args)

    def SetStringData(self, *args) -> "bool":
        r"""
        SetStringData(OEBase self, char const * tag, std::string const t) -> bool
        SetStringData(OEBase self, unsigned int tag, std::string const t) -> bool
        """
        return _oechem.OEBase_SetStringData(self, *args)

    def GetStringData(self, *args) -> "std::string const &":
        r"""
        GetStringData(OEBase self, char const * tag) -> std::string const
        GetStringData(OEBase self, unsigned int tag) -> std::string const &
        """
        return _oechem.OEBase_GetStringData(self, *args)

    def __lt__(self, other):
        return id(self) < id(other)



    def __le__(self, other):
        return id(self) <= id(other)



    def __gt__(self, other):
        return id(self) > id(other)



    def __ge__(self, other):
        return id(self) >= id(other)



    def __eq__(self, rhs):
        if not isinstance(rhs, OEBase):
            return False
        return self._py_equal(rhs)

    def __ne__(self, rhs):
        if not isinstance(rhs, OEBase):
            return True
        return not self._py_equal(rhs)


    def _py_equal(self, rhs: "OEBase") -> "bool":
        r"""_py_equal(OEBase self, OEBase rhs) -> bool"""
        return _oechem.OEBase__py_equal(self, rhs)

    def __hash__(self):
        return hash(self.__gethash__())



    def __copy__(self):
    # All copy operations are deep copies
        return self.__deepcopy__({})



    def __deepcopy__(self, memodict):
    # Use OEBase::CreateCopy to make deep copies
        return self.CreateCopy()



    def __gethash__(self) -> "unsigned int":
        r"""__gethash__(OEBase self) -> unsigned int"""
        return _oechem.OEBase___gethash__(self)

    def GetData(self, *args) -> "PyObject *":
        r"""
        GetData(OEBase self, char * tag) -> PyObject
        GetData(OEBase self, unsigned int t) -> PyObject
        GetData(OEBase self) -> PyObject *
        """
        return _oechem.OEBase_GetData(self, *args)

    def SetData(self, *args) -> "PyObject *":
        r"""
        SetData(OEBase self, char const * tag, PyObject * object) -> PyObject
        SetData(OEBase self, unsigned int tag, PyObject * object) -> PyObject *
        """
        return _oechem.OEBase_SetData(self, *args)

    def AddData(self, *args) -> "PyObject *":
        r"""
        AddData(OEBase self, char const * tag, PyObject * object) -> PyObject
        AddData(OEBase self, unsigned int tag, PyObject * object) -> PyObject *
        """
        return _oechem.OEBase_AddData(self, *args)

    def GetDataTypeAsLong(self) -> "PyObject *":
        r"""GetDataTypeAsLong(OEBase self) -> PyObject *"""
        return _oechem.OEBase_GetDataTypeAsLong(self)

# Register OEBase in _oechem:
_oechem.OEBase_swigregister(OEBase)

class OEContainer(OEBase):
    r"""Proxy of C++ OESystem::OEContainer class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEContainer self) -> OEContainer
        __init__(OEContainer self, OEBase rhs) -> OEContainer
        __init__(OEContainer self, OEContainer arg2) -> OEContainer
        """
        _oechem.OEContainer_swiginit(self, _oechem.new_OEContainer(*args))

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEContainer self) -> void const *"""
        return _oechem.OEContainer_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEContainer self, void const * type) -> bool"""
        return _oechem.OEContainer_IsDataType(self, type)

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEContainer self) -> OEBase"""
        return _oechem.OEContainer_CreateCopy(self)

# Register OEContainer in _oechem:
_oechem.OEContainer_swigregister(OEContainer)


def OECopyBaseData(dst: "OEBase", src: "OEBase") -> "void":
    r"""OECopyBaseData(OEBase dst, OEBase src)"""
    return _oechem.OECopyBaseData(dst, src)

def OEHasTag(*args) -> "bool":
    r"""
    OEHasTag(unsigned int arg1) -> bool
    OEHasTag(std::string const & arg1) -> bool
    """
    return _oechem.OEHasTag(*args)

def OEGetTag(*args) -> "unsigned int":
    r"""
    OEGetTag(unsigned int arg1) -> char const
    OEGetTag(std::string && arg1) -> unsigned int
    OEGetTag(char const * arg1) -> unsigned int
    """
    return _oechem.OEGetTag(*args)

def OEGetOEBReturnString(idx: "unsigned int") -> "char const *":
    r"""OEGetOEBReturnString(unsigned int idx) -> char const *"""
    return _oechem.OEGetOEBReturnString(idx)
class OEReadFxnBase(object):
    r"""Proxy of C++ OESystem::OEReadFxnBase 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__ = _oechem.delete_OEReadFxnBase

    def GetTag(self) -> "char const *":
        r"""GetTag(OEReadFxnBase self) -> char const *"""
        return _oechem.OEReadFxnBase_GetTag(self)

    def GetType(self) -> "void const *":
        r"""GetType(OEReadFxnBase self) -> void const *"""
        return _oechem.OEReadFxnBase_GetType(self)

    def CreateCopy(self) -> "OESystem::OEReadFxnBase *":
        r"""CreateCopy(OEReadFxnBase self) -> OEReadFxnBase"""
        return _oechem.OEReadFxnBase_CreateCopy(self)

# Register OEReadFxnBase in _oechem:
_oechem.OEReadFxnBase_swigregister(OEReadFxnBase)
Rad2Deg = cvar.Rad2Deg
Deg2Rad = cvar.Deg2Rad
Pi = cvar.Pi
Pi2 = cvar.Pi2
OEBinaryTagMaxLength = cvar.OEBinaryTagMaxLength
UDT = cvar.UDT
UserDefinedTag = cvar.UserDefinedTag
OEBasePOD = cvar.OEBasePOD
Success = cvar.Success
NoParentClass = cvar.NoParentClass
CheckFailed = cvar.CheckFailed
StreamFailed = cvar.StreamFailed
IncorrectSize = cvar.IncorrectSize
Continue = cvar.Continue
ReadTagFailed = cvar.ReadTagFailed
CorruptHeader = cvar.CorruptHeader
EndOfFile = cvar.EndOfFile
ReadLengthFailed = cvar.ReadLengthFailed
TypeCheckFailed = cvar.TypeCheckFailed
IncorrectHandlerType = cvar.IncorrectHandlerType

class OEDefaultReadFxn(OEReadFxnBase):
    r"""Proxy of C++ OESystem::OEDefaultReadFxn 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

    def __call__(self, arg2: "oeistream", arg3: "OEULongLong", arg4: "char const *", arg5: "OEBinaryIOHandlerBase") -> "unsigned int":
        r"""__call__(OEDefaultReadFxn self, oeistream arg2, OEULongLong arg3, char const * arg4, OEBinaryIOHandlerBase arg5) -> unsigned int"""
        return _oechem.OEDefaultReadFxn___call__(self, arg2, arg3, arg4, arg5)
    __swig_destroy__ = _oechem.delete_OEDefaultReadFxn

# Register OEDefaultReadFxn in _oechem:
_oechem.OEDefaultReadFxn_swigregister(OEDefaultReadFxn)

class OEWriteFxnBase(object):
    r"""Proxy of C++ OESystem::OEWriteFxnBase 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__ = _oechem.delete_OEWriteFxnBase

    def GetTag(self) -> "char const *":
        r"""GetTag(OEWriteFxnBase self) -> char const *"""
        return _oechem.OEWriteFxnBase_GetTag(self)

    def GetType(self) -> "void const *":
        r"""GetType(OEWriteFxnBase self) -> void const *"""
        return _oechem.OEWriteFxnBase_GetType(self)

    def CreateCopy(self) -> "OESystem::OEWriteFxnBase *":
        r"""CreateCopy(OEWriteFxnBase self) -> OEWriteFxnBase"""
        return _oechem.OEWriteFxnBase_CreateCopy(self)

# Register OEWriteFxnBase in _oechem:
_oechem.OEWriteFxnBase_swigregister(OEWriteFxnBase)

class OEDefaultWriteFxn(OEWriteFxnBase):
    r"""Proxy of C++ OESystem::OEDefaultWriteFxn 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

    def __call__(self, arg2: "oeostream", arg3: "OEBinaryIOHandlerBase") -> "bool":
        r"""__call__(OEDefaultWriteFxn self, oeostream arg2, OEBinaryIOHandlerBase arg3) -> bool"""
        return _oechem.OEDefaultWriteFxn___call__(self, arg2, arg3)
    __swig_destroy__ = _oechem.delete_OEDefaultWriteFxn

# Register OEDefaultWriteFxn in _oechem:
_oechem.OEDefaultWriteFxn_swigregister(OEDefaultWriteFxn)

class OEBinaryIOHandlerBase(OEBase):
    r"""Proxy of C++ OESystem::OEBinaryIOHandlerBase 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__ = _oechem.delete_OEBinaryIOHandlerBase

    def Clear(self) -> "void":
        r"""Clear(OEBinaryIOHandlerBase self)"""
        return _oechem.OEBinaryIOHandlerBase_Clear(self)

    def SetReadFxn(self, arg2: "OEReadFxnBase", makedefault: "bool"=False) -> "bool":
        r"""SetReadFxn(OEBinaryIOHandlerBase self, OEReadFxnBase arg2, bool makedefault=False) -> bool"""
        return _oechem.OEBinaryIOHandlerBase_SetReadFxn(self, arg2, makedefault)

    def SetWriteFxn(self, arg2: "OEWriteFxnBase", makedefault: "bool"=False) -> "bool":
        r"""SetWriteFxn(OEBinaryIOHandlerBase self, OEWriteFxnBase arg2, bool makedefault=False) -> bool"""
        return _oechem.OEBinaryIOHandlerBase_SetWriteFxn(self, arg2, makedefault)

    def GetDefaultReadFxn(self) -> "OESystem::OEReadFxnBase const &":
        r"""GetDefaultReadFxn(OEBinaryIOHandlerBase self) -> OEReadFxnBase"""
        return _oechem.OEBinaryIOHandlerBase_GetDefaultReadFxn(self)

    def GetDefaultWriteFxn(self) -> "OESystem::OEWriteFxnBase const &":
        r"""GetDefaultWriteFxn(OEBinaryIOHandlerBase self) -> OEWriteFxnBase"""
        return _oechem.OEBinaryIOHandlerBase_GetDefaultWriteFxn(self)

    def ReplaceReadFxn(self, *args) -> "bool":
        r"""ReplaceReadFxn(OEBinaryIOHandlerBase self, OEReadFxnBase arg2, std::string const replacetag=std::string("")) -> bool"""
        return _oechem.OEBinaryIOHandlerBase_ReplaceReadFxn(self, *args)

    def ReplaceWriteFxn(self, *args) -> "bool":
        r"""ReplaceWriteFxn(OEBinaryIOHandlerBase self, OEWriteFxnBase arg2, std::string const replacetag=std::string("")) -> bool"""
        return _oechem.OEBinaryIOHandlerBase_ReplaceWriteFxn(self, *args)

    def HasReadFxn(self, arg2: "OEReadFxnBase") -> "bool":
        r"""HasReadFxn(OEBinaryIOHandlerBase self, OEReadFxnBase arg2) -> bool"""
        return _oechem.OEBinaryIOHandlerBase_HasReadFxn(self, arg2)

    def HasWriteFxn(self, arg2: "OEWriteFxnBase") -> "bool":
        r"""HasWriteFxn(OEBinaryIOHandlerBase self, OEWriteFxnBase arg2) -> bool"""
        return _oechem.OEBinaryIOHandlerBase_HasWriteFxn(self, arg2)

    def GetReadFxns(self) -> "OESystem::OEIterBase< OESystem::OEReadFxnBase > *":
        r"""GetReadFxns(OEBinaryIOHandlerBase self) -> OESystem::OEIterBase< OESystem::OEReadFxnBase > *"""
        return _oechem.OEBinaryIOHandlerBase_GetReadFxns(self)

    def GetWriteFxns(self) -> "OESystem::OEIterBase< OESystem::OEWriteFxnBase > *":
        r"""GetWriteFxns(OEBinaryIOHandlerBase self) -> OESystem::OEIterBase< OESystem::OEWriteFxnBase > *"""
        return _oechem.OEBinaryIOHandlerBase_GetWriteFxns(self)

    def SetBaseWriteFxn(self, arg2: "OESystem::OEWriteFxn< OESystem::OEBaseData > const &") -> "bool":
        r"""SetBaseWriteFxn(OEBinaryIOHandlerBase self, OESystem::OEWriteFxn< OESystem::OEBaseData > const & arg2) -> bool"""
        return _oechem.OEBinaryIOHandlerBase_SetBaseWriteFxn(self, arg2)

    def GetBaseWriteFxns(self) -> "OESystem::OEIterBase< OESystem::OEWriteFxn< OESystem::OEBaseData > > *":
        r"""GetBaseWriteFxns(OEBinaryIOHandlerBase self) -> OESystem::OEIterBase< OESystem::OEWriteFxn< OESystem::OEBaseData > > *"""
        return _oechem.OEBinaryIOHandlerBase_GetBaseWriteFxns(self)

# Register OEBinaryIOHandlerBase in _oechem:
_oechem.OEBinaryIOHandlerBase_swigregister(OEBinaryIOHandlerBase)

class OEUnknownOEBData(object):
    r"""Proxy of C++ OESystem::OEUnknownOEBData 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__(OEUnknownOEBData self) -> OEUnknownOEBData
        __init__(OEUnknownOEBData self, oeistream ifs, void const * typ, OEULongLong len, char * tag, unsigned char tagtype) -> OEUnknownOEBData
        __init__(OEUnknownOEBData self, OEUnknownOEBData rhs) -> OEUnknownOEBData
        """
        _oechem.OEUnknownOEBData_swiginit(self, _oechem.new_OEUnknownOEBData(*args))
    __swig_destroy__ = _oechem.delete_OEUnknownOEBData

    def IsValid(self):
      return _oechem.OEUnknownOEBData___nonzero__(self)



    def GetData(self) -> "char const *":
        r"""GetData(OEUnknownOEBData self) -> char const *"""
        return _oechem.OEUnknownOEBData_GetData(self)

    def GetLength(self) -> "size_t":
        r"""GetLength(OEUnknownOEBData self) -> size_t"""
        return _oechem.OEUnknownOEBData_GetLength(self)

    def GetType(self) -> "void const *":
        r"""GetType(OEUnknownOEBData self) -> void const *"""
        return _oechem.OEUnknownOEBData_GetType(self)

    def GetTag(self) -> "char const *":
        r"""GetTag(OEUnknownOEBData self) -> char const *"""
        return _oechem.OEUnknownOEBData_GetTag(self)

    def GetTagType(self) -> "unsigned char":
        r"""GetTagType(OEUnknownOEBData self) -> unsigned char"""
        return _oechem.OEUnknownOEBData_GetTagType(self)

# Register OEUnknownOEBData in _oechem:
_oechem.OEUnknownOEBData_swigregister(OEUnknownOEBData)


def OEBReadDataLength(*args) -> "OEULongLong":
    r"""OEBReadDataLength(oeistream arg1, OEULongLong maxLen=UINT_MAX) -> OEULongLong"""
    return _oechem.OEBReadDataLength(*args)

def OEBWriteDataLength(*args) -> "bool":
    r"""
    OEBWriteDataLength(oeostream arg1, OEULongLong arg2) -> bool
    OEBWriteDataLength(oeostream arg1, unsigned int arg2) -> bool
    """
    return _oechem.OEBWriteDataLength(*args)

def OEBDataLengthBytes(*args) -> "unsigned int":
    r"""
    OEBDataLengthBytes(unsigned int arg1) -> unsigned int
    OEBDataLengthBytes(OEULongLong arg1) -> unsigned int
    """
    return _oechem.OEBDataLengthBytes(*args)

def OEBReadTag(*args) -> "bool":
    r"""
    OEBReadTag(oeistream ifs, char * tag, unsigned char & tagtype) -> bool
    OEBReadTag(oeistream ifs, char * tag) -> bool
    """
    return _oechem.OEBReadTag(*args)

def OEBPeekTag(*args) -> "bool":
    r"""
    OEBPeekTag(oeistream ifs, char * tag) -> bool
    OEBPeekTag(oeistream ifs, char * tag, unsigned char & tagtype) -> bool
    """
    return _oechem.OEBPeekTag(*args)

def OEBWriteTag(*args) -> "bool":
    r"""
    OEBWriteTag(oeostream ofs, char const * arg2) -> bool
    OEBWriteTag(oeostream ofs, char const * arg2, unsigned char tagtype) -> bool
    """
    return _oechem.OEBWriteTag(*args)

def OEBIntEndian(*args) -> "bool":
    r"""
    OEBIntEndian() -> unsigned char
    OEBIntEndian(unsigned int arg1) -> bool
    """
    return _oechem.OEBIntEndian(*args)

def OEBFloatEndian(*args) -> "bool":
    r"""
    OEBFloatEndian() -> unsigned char
    OEBFloatEndian(unsigned int arg1) -> bool
    """
    return _oechem.OEBFloatEndian(*args)

def OEBShortEndian(*args) -> "bool":
    r"""
    OEBShortEndian() -> unsigned char
    OEBShortEndian(unsigned int arg1) -> bool
    """
    return _oechem.OEBShortEndian(*args)

def OEBFPosTEndian(*args) -> "bool":
    r"""
    OEBFPosTEndian() -> unsigned char
    OEBFPosTEndian(unsigned int arg1) -> bool
    """
    return _oechem.OEBFPosTEndian(*args)

def OEIsIntLittleEndian() -> "bool":
    r"""OEIsIntLittleEndian() -> bool"""
    return _oechem.OEIsIntLittleEndian()

def OEIsFloatLittleEndian() -> "bool":
    r"""OEIsFloatLittleEndian() -> bool"""
    return _oechem.OEIsFloatLittleEndian()

def OEIsShortLittleEndian() -> "bool":
    r"""OEIsShortLittleEndian() -> bool"""
    return _oechem.OEIsShortLittleEndian()

def OEIsFPosTLittleEndian() -> "bool":
    r"""OEIsFPosTLittleEndian() -> bool"""
    return _oechem.OEIsFPosTLittleEndian()

def OEIsIntByteSwapRequired(dataIsLittleEndian: "bool") -> "bool":
    r"""OEIsIntByteSwapRequired(bool dataIsLittleEndian) -> bool"""
    return _oechem.OEIsIntByteSwapRequired(dataIsLittleEndian)

def OEIsFloatByteSwapRequired(dataIsLittleEndian: "bool") -> "bool":
    r"""OEIsFloatByteSwapRequired(bool dataIsLittleEndian) -> bool"""
    return _oechem.OEIsFloatByteSwapRequired(dataIsLittleEndian)

def OEIsShortByteSwapRequired(dataIsLittleEndian: "bool") -> "bool":
    r"""OEIsShortByteSwapRequired(bool dataIsLittleEndian) -> bool"""
    return _oechem.OEIsShortByteSwapRequired(dataIsLittleEndian)

def OEIsFPosTByteSwapRequired(dataIsLittleEndian: "bool") -> "bool":
    r"""OEIsFPosTByteSwapRequired(bool dataIsLittleEndian) -> bool"""
    return _oechem.OEIsFPosTByteSwapRequired(dataIsLittleEndian)
class OEBinaryIOHandler(OEBinaryIOHandlerBase):
    r"""Proxy of C++ OESystem::OEBinaryIOHandler 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__(OEBinaryIOHandler self) -> OEBinaryIOHandler
        __init__(OEBinaryIOHandler self, OEBinaryIOHandler arg2) -> OEBinaryIOHandler
        __init__(OEBinaryIOHandler self, OEBinaryIOHandlerBase arg2) -> OEBinaryIOHandler
        """
        _oechem.OEBinaryIOHandler_swiginit(self, _oechem.new_OEBinaryIOHandler(*args))
    __swig_destroy__ = _oechem.delete_OEBinaryIOHandler

    def Clear(self) -> "void":
        r"""Clear(OEBinaryIOHandler self)"""
        return _oechem.OEBinaryIOHandler_Clear(self)

    def SetReadFxn(self, arg2: "OEReadFxnBase", makedefault: "bool"=False) -> "bool":
        r"""SetReadFxn(OEBinaryIOHandler self, OEReadFxnBase arg2, bool makedefault=False) -> bool"""
        return _oechem.OEBinaryIOHandler_SetReadFxn(self, arg2, makedefault)

    def SetWriteFxn(self, arg2: "OEWriteFxnBase", makedefault: "bool"=False) -> "bool":
        r"""SetWriteFxn(OEBinaryIOHandler self, OEWriteFxnBase arg2, bool makedefault=False) -> bool"""
        return _oechem.OEBinaryIOHandler_SetWriteFxn(self, arg2, makedefault)

    def SetBaseWriteFxn(self, arg2: "OESystem::OEWriteFxn< OESystem::OEBaseData > const &") -> "bool":
        r"""SetBaseWriteFxn(OEBinaryIOHandler self, OESystem::OEWriteFxn< OESystem::OEBaseData > const & arg2) -> bool"""
        return _oechem.OEBinaryIOHandler_SetBaseWriteFxn(self, arg2)

    def GetDefaultReadFxn(self) -> "OESystem::OEReadFxnBase const &":
        r"""GetDefaultReadFxn(OEBinaryIOHandler self) -> OEReadFxnBase"""
        return _oechem.OEBinaryIOHandler_GetDefaultReadFxn(self)

    def GetDefaultWriteFxn(self) -> "OESystem::OEWriteFxnBase const &":
        r"""GetDefaultWriteFxn(OEBinaryIOHandler self) -> OEWriteFxnBase"""
        return _oechem.OEBinaryIOHandler_GetDefaultWriteFxn(self)

    def ReplaceReadFxn(self, *args) -> "bool":
        r"""ReplaceReadFxn(OEBinaryIOHandler self, OEReadFxnBase arg2, std::string const replacetag=std::string("")) -> bool"""
        return _oechem.OEBinaryIOHandler_ReplaceReadFxn(self, *args)

    def ReplaceWriteFxn(self, *args) -> "bool":
        r"""ReplaceWriteFxn(OEBinaryIOHandler self, OEWriteFxnBase arg2, std::string const replacetag=std::string("")) -> bool"""
        return _oechem.OEBinaryIOHandler_ReplaceWriteFxn(self, *args)

    def HasReadFxn(self, arg2: "OEReadFxnBase") -> "bool":
        r"""HasReadFxn(OEBinaryIOHandler self, OEReadFxnBase arg2) -> bool"""
        return _oechem.OEBinaryIOHandler_HasReadFxn(self, arg2)

    def HasWriteFxn(self, arg2: "OEWriteFxnBase") -> "bool":
        r"""HasWriteFxn(OEBinaryIOHandler self, OEWriteFxnBase arg2) -> bool"""
        return _oechem.OEBinaryIOHandler_HasWriteFxn(self, arg2)

    def GetReadFxns(self) -> "OESystem::OEIterBase< OESystem::OEReadFxnBase > *":
        r"""GetReadFxns(OEBinaryIOHandler self) -> OESystem::OEIterBase< OESystem::OEReadFxnBase > *"""
        return _oechem.OEBinaryIOHandler_GetReadFxns(self)

    def GetWriteFxns(self) -> "OESystem::OEIterBase< OESystem::OEWriteFxnBase > *":
        r"""GetWriteFxns(OEBinaryIOHandler self) -> OESystem::OEIterBase< OESystem::OEWriteFxnBase > *"""
        return _oechem.OEBinaryIOHandler_GetWriteFxns(self)

    def GetBaseWriteFxns(self) -> "OESystem::OEIterBase< OESystem::OEWriteFxn< OESystem::OEBaseData > > *":
        r"""GetBaseWriteFxns(OEBinaryIOHandler self) -> OESystem::OEIterBase< OESystem::OEWriteFxn< OESystem::OEBaseData > > *"""
        return _oechem.OEBinaryIOHandler_GetBaseWriteFxns(self)

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEBinaryIOHandler self) -> OEBase"""
        return _oechem.OEBinaryIOHandler_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEBinaryIOHandler self) -> void const *"""
        return _oechem.OEBinaryIOHandler_GetDataType(self)

    def IsDataType(self, arg2: "void const *") -> "bool":
        r"""IsDataType(OEBinaryIOHandler self, void const * arg2) -> bool"""
        return _oechem.OEBinaryIOHandler_IsDataType(self, arg2)

# Register OEBinaryIOHandler in _oechem:
_oechem.OEBinaryIOHandler_swigregister(OEBinaryIOHandler)


def OERegisterOEBInitializer(initializer: "OESystem::OEBHandInitializer") -> "void":
    r"""OERegisterOEBInitializer(OESystem::OEBHandInitializer initializer)"""
    return _oechem.OERegisterOEBInitializer(initializer)

def OEInitializeHandler(hand: "OEBinaryIOHandlerBase") -> "void":
    r"""OEInitializeHandler(OEBinaryIOHandlerBase hand)"""
    return _oechem.OEInitializeHandler(hand)

def OEGetOEBInitializerCount() -> "oesize_t":
    r"""OEGetOEBInitializerCount() -> oesize_t"""
    return _oechem.OEGetOEBInitializerCount()
class OETracerBase(object):
    r"""Proxy of C++ OESystem::OETracerBase 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__ = _oechem.delete_OETracerBase

    def SetTask(self, task: "std::string") -> "void":
        r"""SetTask(OETracerBase self, std::string task)"""
        return _oechem.OETracerBase_SetTask(self, task)

    def Push(self, task: "std::string") -> "void":
        r"""Push(OETracerBase self, std::string task)"""
        return _oechem.OETracerBase_Push(self, task)

    def Pop(self) -> "void":
        r"""Pop(OETracerBase self)"""
        return _oechem.OETracerBase_Pop(self)

    def Refresh(self) -> "void":
        r"""Refresh(OETracerBase self)"""
        return _oechem.OETracerBase_Refresh(self)

    def SetProgress(self, *args) -> "void":
        r"""
        SetProgress(OETracerBase self, unsigned int current, unsigned int total)
        SetProgress(OETracerBase self, double percent)
        """
        return _oechem.OETracerBase_SetProgress(self, *args)

    def Aborted(self) -> "bool":
        r"""Aborted(OETracerBase self) -> bool"""
        return _oechem.OETracerBase_Aborted(self)

# Register OETracerBase in _oechem:
_oechem.OETracerBase_swigregister(OETracerBase)

class OENullTracer(OETracerBase):
    r"""Proxy of C++ OESystem::OENullTracer class."""

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

    def SetTask(self, arg2: "std::string") -> "void":
        r"""SetTask(OENullTracer self, std::string arg2)"""
        return _oechem.OENullTracer_SetTask(self, arg2)

    def Push(self, arg2: "std::string") -> "void":
        r"""Push(OENullTracer self, std::string arg2)"""
        return _oechem.OENullTracer_Push(self, arg2)

    def Pop(self) -> "void":
        r"""Pop(OENullTracer self)"""
        return _oechem.OENullTracer_Pop(self)

    def Refresh(self) -> "void":
        r"""Refresh(OENullTracer self)"""
        return _oechem.OENullTracer_Refresh(self)

    def SetProgress(self, *args) -> "void":
        r"""
        SetProgress(OENullTracer self, unsigned int arg2, unsigned int arg3)
        SetProgress(OENullTracer self, double arg2)
        """
        return _oechem.OENullTracer_SetProgress(self, *args)

    def Aborted(self) -> "bool":
        r"""Aborted(OENullTracer self) -> bool"""
        return _oechem.OENullTracer_Aborted(self)

    def __init__(self):
        r"""__init__(OENullTracer self) -> OENullTracer"""
        _oechem.OENullTracer_swiginit(self, _oechem.new_OENullTracer())
    __swig_destroy__ = _oechem.delete_OENullTracer

# Register OENullTracer in _oechem:
_oechem.OENullTracer_swigregister(OENullTracer)

class OEConsoleProgressTracer(OETracerBase):
    r"""Proxy of C++ OESystem::OEConsoleProgressTracer 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__(OEConsoleProgressTracer self) -> OEConsoleProgressTracer"""
        _oechem.OEConsoleProgressTracer_swiginit(self, _oechem.new_OEConsoleProgressTracer())
    __swig_destroy__ = _oechem.delete_OEConsoleProgressTracer

    def SetTask(self, task: "std::string") -> "void":
        r"""SetTask(OEConsoleProgressTracer self, std::string task)"""
        return _oechem.OEConsoleProgressTracer_SetTask(self, task)

    def Push(self, task: "std::string") -> "void":
        r"""Push(OEConsoleProgressTracer self, std::string task)"""
        return _oechem.OEConsoleProgressTracer_Push(self, task)

    def Pop(self) -> "void":
        r"""Pop(OEConsoleProgressTracer self)"""
        return _oechem.OEConsoleProgressTracer_Pop(self)

    def Refresh(self) -> "void":
        r"""Refresh(OEConsoleProgressTracer self)"""
        return _oechem.OEConsoleProgressTracer_Refresh(self)

    def SetProgress(self, *args) -> "void":
        r"""
        SetProgress(OEConsoleProgressTracer self, unsigned int current, unsigned int total)
        SetProgress(OEConsoleProgressTracer self, double percent)
        """
        return _oechem.OEConsoleProgressTracer_SetProgress(self, *args)

    def Aborted(self) -> "bool":
        r"""Aborted(OEConsoleProgressTracer self) -> bool"""
        return _oechem.OEConsoleProgressTracer_Aborted(self)

# Register OEConsoleProgressTracer in _oechem:
_oechem.OEConsoleProgressTracer_swigregister(OEConsoleProgressTracer)

class OEAnnotationWriteFxn(OEWriteFxnBase):
    r"""Proxy of C++ OESystem::OEWriteFxn< OESystem::OEAnnotation > 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

    def __call__(self, arg2: "oeostream", arg3: "OEAnnotation", arg4: "OEBinaryIOHandlerBase") -> "bool":
        r"""__call__(OEAnnotationWriteFxn self, oeostream arg2, OEAnnotation arg3, OEBinaryIOHandlerBase arg4) -> bool"""
        return _oechem.OEAnnotationWriteFxn___call__(self, arg2, arg3, arg4)
    __swig_destroy__ = _oechem.delete_OEAnnotationWriteFxn

# Register OEAnnotationWriteFxn in _oechem:
_oechem.OEAnnotationWriteFxn_swigregister(OEAnnotationWriteFxn)

class OEColor(object):
    r"""Proxy of C++ OESystem::OEColor class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEColor self) -> OEColor
        __init__(OEColor self, unsigned int r, unsigned int g, unsigned int b) -> OEColor
        __init__(OEColor self, unsigned int r, unsigned int g, unsigned int b, unsigned int a) -> OEColor
        __init__(OEColor self, unsigned char const * rgba) -> OEColor
        __init__(OEColor self, unsigned int packed) -> OEColor
        __init__(OEColor self, std::string const & text) -> OEColor
        __init__(OEColor self, OEColor rhs) -> OEColor
        """
        _oechem.OEColor_swiginit(self, _oechem.new_OEColor(*args))

    def __eq__(self, rhs: "OEColor") -> "bool":
        r"""__eq__(OEColor self, OEColor rhs) -> bool"""
        return _oechem.OEColor___eq__(self, rhs)

    def __ne__(self, rhs: "OEColor") -> "bool":
        r"""__ne__(OEColor self, OEColor rhs) -> bool"""
        return _oechem.OEColor___ne__(self, rhs)

    def CreateCopy(self) -> "OESystem::OEColor *":
        r"""CreateCopy(OEColor self) -> OEColor"""
        return _oechem.OEColor_CreateCopy(self)

    def GetR(self) -> "unsigned int":
        r"""GetR(OEColor self) -> unsigned int"""
        return _oechem.OEColor_GetR(self)

    def GetG(self) -> "unsigned int":
        r"""GetG(OEColor self) -> unsigned int"""
        return _oechem.OEColor_GetG(self)

    def GetB(self) -> "unsigned int":
        r"""GetB(OEColor self) -> unsigned int"""
        return _oechem.OEColor_GetB(self)

    def GetA(self) -> "unsigned int":
        r"""GetA(OEColor self) -> unsigned int"""
        return _oechem.OEColor_GetA(self)

    def GetPackedColor(self) -> "unsigned int":
        r"""GetPackedColor(OEColor self) -> unsigned int"""
        return _oechem.OEColor_GetPackedColor(self)

    def GetText(self, a: "bool"=False) -> "std::string":
        r"""GetText(OEColor self, bool a=False) -> std::string"""
        return _oechem.OEColor_GetText(self, a)

    def Set(self, *args) -> "OESystem::OEColor &":
        r"""
        Set(OEColor self, unsigned int r, unsigned int g, unsigned int b) -> OEColor
        Set(OEColor self, unsigned int r, unsigned int g, unsigned int b, unsigned int a) -> OEColor
        """
        return _oechem.OEColor_Set(self, *args)

    def SetR(self, r: "unsigned int") -> "OESystem::OEColor &":
        r"""SetR(OEColor self, unsigned int r) -> OEColor"""
        return _oechem.OEColor_SetR(self, r)

    def SetG(self, g: "unsigned int") -> "OESystem::OEColor &":
        r"""SetG(OEColor self, unsigned int g) -> OEColor"""
        return _oechem.OEColor_SetG(self, g)

    def SetB(self, b: "unsigned int") -> "OESystem::OEColor &":
        r"""SetB(OEColor self, unsigned int b) -> OEColor"""
        return _oechem.OEColor_SetB(self, b)

    def SetA(self, a: "unsigned int") -> "OESystem::OEColor &":
        r"""SetA(OEColor self, unsigned int a) -> OEColor"""
        return _oechem.OEColor_SetA(self, a)

    def SetPackedColor(self, color: "unsigned int") -> "OESystem::OEColor &":
        r"""SetPackedColor(OEColor self, unsigned int color) -> OEColor"""
        return _oechem.OEColor_SetPackedColor(self, color)

    def SetRGBA(self, rgba: "unsigned char const *") -> "OESystem::OEColor &":
        r"""SetRGBA(OEColor self, unsigned char const * rgba) -> OEColor"""
        return _oechem.OEColor_SetRGBA(self, rgba)

    def SetText(self, text: "std::string const &") -> "OESystem::OEColor &":
        r"""SetText(OEColor self, std::string const & text) -> OEColor"""
        return _oechem.OEColor_SetText(self, text)

    def GetRGBA(self, *args) -> "PyObject *":
        r"""
        GetRGBA(OEColor self) -> unsigned char const
        GetRGBA(OEColor self) -> PyObject *
        """
        return _oechem.OEColor_GetRGBA(self, *args)

    def __str__(self) -> "std::string":
        r"""__str__(OEColor self) -> std::string"""
        return _oechem.OEColor___str__(self)

    def __repr__(self) -> "std::string":
        r"""__repr__(OEColor self) -> std::string"""
        return _oechem.OEColor___repr__(self)
    __swig_destroy__ = _oechem.delete_OEColor

# Register OEColor in _oechem:
_oechem.OEColor_swigregister(OEColor)


def OEColorCreate(*args) -> "OESystem::OEColor":
    r"""
    OEColorCreate(double r, double g, double b) -> OEColor
    OEColorCreate(double r, double g, double b, double a) -> OEColor
    """
    return _oechem.OEColorCreate(*args)

def OEColorGet(*args) -> "void":
    r"""
    OEColorGet(OEColor arg1, float & r, float & g, float & b)
    OEColorGet(OEColor arg1, double & r, double & g, double & b)
    OEColorGet(OEColor arg1, float & r, float & g, float & b, float & a)
    OEColorGet(OEColor arg1, double & r, double & g, double & b, double & a)
    """
    return _oechem.OEColorGet(*args)

def OEColorSet(*args) -> "void":
    r"""
    OEColorSet(OEColor arg1, double r, double g, double b)
    OEColorSet(OEColor arg1, double r, double g, double b, double a)
    """
    return _oechem.OEColorSet(*args)

def OEColorPacked(r: "unsigned int", g: "unsigned int", b: "unsigned int", a: "unsigned int"=255) -> "unsigned int":
    r"""OEColorPacked(unsigned int r, unsigned int g, unsigned int b, unsigned int a=255) -> unsigned int"""
    return _oechem.OEColorPacked(r, g, b, a)

def OEGetLightColors() -> "OESystem::OEIterBase< OESystem::OEColor > *":
    r"""OEGetLightColors() -> OESystem::OEIterBase< OESystem::OEColor > *"""
    return _oechem.OEGetLightColors()

def OEGetVividColors() -> "OESystem::OEIterBase< OESystem::OEColor > *":
    r"""OEGetVividColors() -> OESystem::OEIterBase< OESystem::OEColor > *"""
    return _oechem.OEGetVividColors()

def OEGetDeepColors() -> "OESystem::OEIterBase< OESystem::OEColor > *":
    r"""OEGetDeepColors() -> OESystem::OEIterBase< OESystem::OEColor > *"""
    return _oechem.OEGetDeepColors()

def OEGetContrastColors(whiteblack: "bool"=False) -> "OESystem::OEIterBase< OESystem::OEColor > *":
    r"""OEGetContrastColors(bool whiteblack=False) -> OESystem::OEIterBase< OESystem::OEColor >"""
    return _oechem.OEGetContrastColors(whiteblack)

def OEGetColors(fromcolor: "OEColor", tocolor: "OEColor", nrcolors: "unsigned int") -> "OESystem::OEIterBase< OESystem::OEColor > *":
    r"""OEGetColors(OEColor fromcolor, OEColor tocolor, unsigned int nrcolors) -> OESystem::OEIterBase< OESystem::OEColor > *"""
    return _oechem.OEGetColors(fromcolor, tocolor, nrcolors)
class OEColorIter(object):
    r"""Proxy of C++ OESystem::OEIter< OESystem::OEColor > 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__(OEColorIter self) -> OEColorIter
        __init__(OEColorIter self, OEColorIter rhs) -> OEColorIter
        __init__(OEColorIter self, OESystem::OEIterBase< OESystem::OEColor > * rhs) -> OEColorIter
        __init__(OEColorIter self, OESystem::OEIterBase< OESystem::OEIter< OESystem::OEColor >::NonConstA > * rhs) -> OEColorIter
        """
        _oechem.OEColorIter_swiginit(self, _oechem.new_OEColorIter(*args))
    __swig_destroy__ = _oechem.delete_OEColorIter

    def Copy(self) -> "OESystem::OEIterBase< OESystem::OEColor > *":
        r"""Copy(OEColorIter self) -> OESystem::OEIterBase< OESystem::OEColor > *"""
        return _oechem.OEColorIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEColorIter self, OESystem::OEIterBase< OESystem::OEColor > * ib)
        Push(OEColorIter self, OEColorIter iter)
        """
        return _oechem.OEColorIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OESystem::OEColor,OESystem::OEColor > const &") -> "void":
        r"""Sort(OEColorIter self, OESystem::OEBinaryPredicate< OESystem::OEColor,OESystem::OEColor > const & sort_criterion)"""
        return _oechem.OEColorIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OESystem::OEColor > &":
        r"""ToFirst(OEColorIter self) -> OEColorIter"""
        return _oechem.OEColorIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OESystem::OEColor > &":
        r"""ToLast(OEColorIter self) -> OEColorIter"""
        return _oechem.OEColorIter_ToLast(self)

    def __ref__(self) -> "OESystem::OEColor &":
        r"""__ref__(OEColorIter self) -> OEColor"""
        return _oechem.OEColorIter___ref__(self)

    def IsValid(self):
      return _oechem.OEColorIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEColorIter self) -> PyObject *"""
        return _oechem.OEColorIter_next(self)

    def Target(self) -> "OESystem::OEColor &":
        r"""Target(OEColorIter self) -> OEColor"""
        return _oechem.OEColorIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OESystem::OEColor > &":
        r"""
        Next(OEColorIter self) -> OEColorIter
        Next(OEColorIter self, int i) -> OEColorIter
        """
        return _oechem.OEColorIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OESystem::OEColor > &":
        r"""
        Prev(OEColorIter self) -> OEColorIter
        Prev(OEColorIter self, int i) -> OEColorIter
        """
        return _oechem.OEColorIter_Prev(self, *args)

# Register OEColorIter in _oechem:
_oechem.OEColorIter_swigregister(OEColorIter)
OEBlack = cvar.OEBlack
OEWhite = cvar.OEWhite
OERed = cvar.OERed
OEGreen = cvar.OEGreen
OEBlue = cvar.OEBlue
OEYellow = cvar.OEYellow
OECyan = cvar.OECyan
OEMagenta = cvar.OEMagenta
OEOrange = cvar.OEOrange
OEPink = cvar.OEPink
OEGrey = cvar.OEGrey
OEPurple = cvar.OEPurple
OERoyalBlue = cvar.OERoyalBlue
OEOliveBrown = cvar.OEOliveBrown
OEOliveGreen = cvar.OEOliveGreen
OEOliveGrey = cvar.OEOliveGrey
OELimeGreen = cvar.OELimeGreen
OEDarkRed = cvar.OEDarkRed
OEDarkGreen = cvar.OEDarkGreen
OEDarkBlue = cvar.OEDarkBlue
OEDarkYellow = cvar.OEDarkYellow
OEDarkCyan = cvar.OEDarkCyan
OEDarkMagenta = cvar.OEDarkMagenta
OEDarkOrange = cvar.OEDarkOrange
OEDarkGrey = cvar.OEDarkGrey
OEDarkRose = cvar.OEDarkRose
OEDarkBrown = cvar.OEDarkBrown
OEDarkSalmon = cvar.OEDarkSalmon
OEDarkPurple = cvar.OEDarkPurple
OEMediumBrown = cvar.OEMediumBrown
OEMediumBlue = cvar.OEMediumBlue
OEMediumYellow = cvar.OEMediumYellow
OEMediumGreen = cvar.OEMediumGreen
OEMediumOrange = cvar.OEMediumOrange
OEMediumPurple = cvar.OEMediumPurple
OEMediumSalmon = cvar.OEMediumSalmon
OELightBlue = cvar.OELightBlue
OELightGrey = cvar.OELightGrey
OELightPurple = cvar.OELightPurple
OELightSalmon = cvar.OELightSalmon
OELightBrown = cvar.OELightBrown
OELightOrange = cvar.OELightOrange
OELightGreen = cvar.OELightGreen
OEBlueTint = cvar.OEBlueTint
OEBrown = cvar.OEBrown
OEMandarin = cvar.OEMandarin
OEGreenBlue = cvar.OEGreenBlue
OEGreenTint = cvar.OEGreenTint
OEHotPink = cvar.OEHotPink
OEPinkTint = cvar.OEPinkTint
OERedOrange = cvar.OERedOrange
OESeaGreen = cvar.OESeaGreen
OESkyBlue = cvar.OESkyBlue
OEViolet = cvar.OEViolet
OEYellowTint = cvar.OEYellowTint
OETransparentColor = cvar.OETransparentColor
OECopper = cvar.OECopper
OEGold = cvar.OEGold
OESilver = cvar.OESilver
OEPewter = cvar.OEPewter
OEBrass = cvar.OEBrass

class OEColorStop(object):
    r"""Proxy of C++ OESystem::OEColorStop 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__(OEColorStop self, double value, OEColor color) -> OEColorStop
        __init__(OEColorStop self, OEColorStop rhs) -> OEColorStop
        """
        _oechem.OEColorStop_swiginit(self, _oechem.new_OEColorStop(*args))
    __swig_destroy__ = _oechem.delete_OEColorStop

    def GetValue(self) -> "double":
        r"""GetValue(OEColorStop self) -> double"""
        return _oechem.OEColorStop_GetValue(self)

    def GetColor(self) -> "OESystem::OEColor const &":
        r"""GetColor(OEColorStop self) -> OEColor"""
        return _oechem.OEColorStop_GetColor(self)

# Register OEColorStop in _oechem:
_oechem.OEColorStop_swigregister(OEColorStop)

class OEColorGradientBase(object):
    r"""Proxy of C++ OESystem::OEColorGradientBase 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__ = _oechem.delete_OEColorGradientBase

    def GetMinValue(self) -> "double":
        r"""GetMinValue(OEColorGradientBase self) -> double"""
        return _oechem.OEColorGradientBase_GetMinValue(self)

    def GetMaxValue(self) -> "double":
        r"""GetMaxValue(OEColorGradientBase self) -> double"""
        return _oechem.OEColorGradientBase_GetMaxValue(self)

    def GetMinColor(self) -> "OESystem::OEColor const &":
        r"""GetMinColor(OEColorGradientBase self) -> OEColor"""
        return _oechem.OEColorGradientBase_GetMinColor(self)

    def GetMaxColor(self) -> "OESystem::OEColor const &":
        r"""GetMaxColor(OEColorGradientBase self) -> OEColor"""
        return _oechem.OEColorGradientBase_GetMaxColor(self)

    def NumStops(self) -> "unsigned int":
        r"""NumStops(OEColorGradientBase self) -> unsigned int"""
        return _oechem.OEColorGradientBase_NumStops(self)

    def IsEmpty(self) -> "bool":
        r"""IsEmpty(OEColorGradientBase self) -> bool"""
        return _oechem.OEColorGradientBase_IsEmpty(self)

    def GetStops(self) -> "OESystem::OEIterBase< OESystem::OEColorStop > *":
        r"""GetStops(OEColorGradientBase self) -> OESystem::OEIterBase< OESystem::OEColorStop > *"""
        return _oechem.OEColorGradientBase_GetStops(self)

    def AddStop(self, stop: "OEColorStop") -> "bool":
        r"""AddStop(OEColorGradientBase self, OEColorStop stop) -> bool"""
        return _oechem.OEColorGradientBase_AddStop(self, stop)

    def DeleteStop(self, stopidx: "unsigned int") -> "bool":
        r"""DeleteStop(OEColorGradientBase self, unsigned int stopidx) -> bool"""
        return _oechem.OEColorGradientBase_DeleteStop(self, stopidx)

    def GetColorAt(self, value: "double") -> "OESystem::OEColor":
        r"""GetColorAt(OEColorGradientBase self, double value) -> OEColor"""
        return _oechem.OEColorGradientBase_GetColorAt(self, value)

    def TransformValue(self, value: "double") -> "double":
        r"""TransformValue(OEColorGradientBase self, double value) -> double"""
        return _oechem.OEColorGradientBase_TransformValue(self, value)

# Register OEColorGradientBase in _oechem:
_oechem.OEColorGradientBase_swigregister(OEColorGradientBase)

class OELinearColorGradient(OEColorGradientBase):
    r"""Proxy of C++ OESystem::OELinearColorGradient 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__(OELinearColorGradient self) -> OELinearColorGradient
        __init__(OELinearColorGradient self, OEColorStop oneStop) -> OELinearColorGradient
        __init__(OELinearColorGradient self, OEColorStop bgnStop, OEColorStop endStop) -> OELinearColorGradient
        __init__(OELinearColorGradient self, OELinearColorGradient rhs) -> OELinearColorGradient
        """
        _oechem.OELinearColorGradient_swiginit(self, _oechem.new_OELinearColorGradient(*args))
    __swig_destroy__ = _oechem.delete_OELinearColorGradient

    def TransformValue(self, value: "double") -> "double":
        r"""TransformValue(OELinearColorGradient self, double value) -> double"""
        return _oechem.OELinearColorGradient_TransformValue(self, value)

# Register OELinearColorGradient in _oechem:
_oechem.OELinearColorGradient_swigregister(OELinearColorGradient)

class OEExponentialColorGradient(OEColorGradientBase):
    r"""Proxy of C++ OESystem::OEExponentialColorGradient 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__(OEExponentialColorGradient self) -> OEExponentialColorGradient
        __init__(OEExponentialColorGradient self, OEColorStop oneStop) -> OEExponentialColorGradient
        __init__(OEExponentialColorGradient self, OEColorStop bgnStop, OEColorStop endStop) -> OEExponentialColorGradient
        __init__(OEExponentialColorGradient self, OEExponentialColorGradient rhs) -> OEExponentialColorGradient
        """
        _oechem.OEExponentialColorGradient_swiginit(self, _oechem.new_OEExponentialColorGradient(*args))
    __swig_destroy__ = _oechem.delete_OEExponentialColorGradient

    def TransformValue(self, value: "double") -> "double":
        r"""TransformValue(OEExponentialColorGradient self, double value) -> double"""
        return _oechem.OEExponentialColorGradient_TransformValue(self, value)

# Register OEExponentialColorGradient in _oechem:
_oechem.OEExponentialColorGradient_swigregister(OEExponentialColorGradient)

class OELogarithmicColorGradient(OEColorGradientBase):
    r"""Proxy of C++ OESystem::OELogarithmicColorGradient 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__(OELogarithmicColorGradient self) -> OELogarithmicColorGradient
        __init__(OELogarithmicColorGradient self, OEColorStop oneStop) -> OELogarithmicColorGradient
        __init__(OELogarithmicColorGradient self, OEColorStop bgnStop, OEColorStop endStop) -> OELogarithmicColorGradient
        __init__(OELogarithmicColorGradient self, OELogarithmicColorGradient rhs) -> OELogarithmicColorGradient
        """
        _oechem.OELogarithmicColorGradient_swiginit(self, _oechem.new_OELogarithmicColorGradient(*args))
    __swig_destroy__ = _oechem.delete_OELogarithmicColorGradient

    def TransformValue(self, value: "double") -> "double":
        r"""TransformValue(OELogarithmicColorGradient self, double value) -> double"""
        return _oechem.OELogarithmicColorGradient_TransformValue(self, value)

# Register OELogarithmicColorGradient in _oechem:
_oechem.OELogarithmicColorGradient_swigregister(OELogarithmicColorGradient)

class OEExponentColorGradient(OEColorGradientBase):
    r"""Proxy of C++ OESystem::OEExponentColorGradient 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__(OEExponentColorGradient self, double exponent) -> OEExponentColorGradient
        __init__(OEExponentColorGradient self, double exponent, OEColorStop oneStop) -> OEExponentColorGradient
        __init__(OEExponentColorGradient self, double exponent, OEColorStop bgnStop, OEColorStop endStop) -> OEExponentColorGradient
        __init__(OEExponentColorGradient self, OEExponentColorGradient rhs) -> OEExponentColorGradient
        """
        _oechem.OEExponentColorGradient_swiginit(self, _oechem.new_OEExponentColorGradient(*args))
    __swig_destroy__ = _oechem.delete_OEExponentColorGradient

    def SetExponent(self, exponent: "double") -> "void":
        r"""SetExponent(OEExponentColorGradient self, double exponent)"""
        return _oechem.OEExponentColorGradient_SetExponent(self, exponent)

    def GetExponent(self) -> "double":
        r"""GetExponent(OEExponentColorGradient self) -> double"""
        return _oechem.OEExponentColorGradient_GetExponent(self)

    def TransformValue(self, value: "double") -> "double":
        r"""TransformValue(OEExponentColorGradient self, double value) -> double"""
        return _oechem.OEExponentColorGradient_TransformValue(self, value)

# Register OEExponentColorGradient in _oechem:
_oechem.OEExponentColorGradient_swigregister(OEExponentColorGradient)

class OEColorStopIter(object):
    r"""Proxy of C++ OESystem::OEIter< OESystem::OEColorStop > 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__(OEColorStopIter self) -> OEColorStopIter
        __init__(OEColorStopIter self, OEColorStopIter rhs) -> OEColorStopIter
        __init__(OEColorStopIter self, OESystem::OEIterBase< OESystem::OEColorStop > * rhs) -> OEColorStopIter
        __init__(OEColorStopIter self, OESystem::OEIterBase< OESystem::OEIter< OESystem::OEColorStop >::NonConstA > * rhs) -> OEColorStopIter
        """
        _oechem.OEColorStopIter_swiginit(self, _oechem.new_OEColorStopIter(*args))
    __swig_destroy__ = _oechem.delete_OEColorStopIter

    def Copy(self) -> "OESystem::OEIterBase< OESystem::OEColorStop > *":
        r"""Copy(OEColorStopIter self) -> OESystem::OEIterBase< OESystem::OEColorStop > *"""
        return _oechem.OEColorStopIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEColorStopIter self, OESystem::OEIterBase< OESystem::OEColorStop > * ib)
        Push(OEColorStopIter self, OEColorStopIter iter)
        """
        return _oechem.OEColorStopIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OESystem::OEColorStop,OESystem::OEColorStop > const &") -> "void":
        r"""Sort(OEColorStopIter self, OESystem::OEBinaryPredicate< OESystem::OEColorStop,OESystem::OEColorStop > const & sort_criterion)"""
        return _oechem.OEColorStopIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OESystem::OEColorStop > &":
        r"""ToFirst(OEColorStopIter self) -> OEColorStopIter"""
        return _oechem.OEColorStopIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OESystem::OEColorStop > &":
        r"""ToLast(OEColorStopIter self) -> OEColorStopIter"""
        return _oechem.OEColorStopIter_ToLast(self)

    def __ref__(self) -> "OESystem::OEColorStop &":
        r"""__ref__(OEColorStopIter self) -> OEColorStop"""
        return _oechem.OEColorStopIter___ref__(self)

    def IsValid(self):
      return _oechem.OEColorStopIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEColorStopIter self) -> PyObject *"""
        return _oechem.OEColorStopIter_next(self)

    def Target(self) -> "OESystem::OEColorStop &":
        r"""Target(OEColorStopIter self) -> OEColorStop"""
        return _oechem.OEColorStopIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OESystem::OEColorStop > &":
        r"""
        Next(OEColorStopIter self) -> OEColorStopIter
        Next(OEColorStopIter self, int i) -> OEColorStopIter
        """
        return _oechem.OEColorStopIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OESystem::OEColorStop > &":
        r"""
        Prev(OEColorStopIter self) -> OEColorStopIter
        Prev(OEColorStopIter self, int i) -> OEColorStopIter
        """
        return _oechem.OEColorStopIter_Prev(self, *args)

# Register OEColorStopIter in _oechem:
_oechem.OEColorStopIter_swigregister(OEColorStopIter)

class OEHeader(OEContainer):
    r"""Proxy of C++ OESystem::OEHeader 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__(OEHeader self) -> OEHeader
        __init__(OEHeader self, int argc, char *[] argv, char const * appname, char const * version, char const * comment="", OEInterface const & itf=OEInterface(), OEHeader history=None) -> OEHeader
        __init__(OEHeader self, OEHeader rhs) -> OEHeader
        """
        _oechem.OEHeader_swiginit(self, _oechem.new_OEHeader(*args))

    def IsValid(self):
      return _oechem.OEHeader___nonzero__(self)



    def SetDate(self, *args) -> "void":
        r"""
        SetDate(OEHeader self)
        SetDate(OEHeader self, int day, int month, int year)
        SetDate(OEHeader self, int day, int month, int year, int hour, int minute, int seconds)
        """
        return _oechem.OEHeader_SetDate(self, *args)

    def GetDate(self, *args) -> "void":
        r"""
        GetDate(OEHeader self, int & day, int & month, int & year)
        GetDate(OEHeader self, int & day, int & month, int & year, int & hour, int & minute, int & seconds)
        """
        return _oechem.OEHeader_GetDate(self, *args)

    def SetProgram(self, program: "std::string const &") -> "void":
        r"""SetProgram(OEHeader self, std::string const & program)"""
        return _oechem.OEHeader_SetProgram(self, program)

    def GetProgram(self) -> "std::string":
        r"""GetProgram(OEHeader self) -> std::string"""
        return _oechem.OEHeader_GetProgram(self)

    def SetCommandLine(self, comment: "std::string const &") -> "void":
        r"""SetCommandLine(OEHeader self, std::string const & comment)"""
        return _oechem.OEHeader_SetCommandLine(self, comment)

    def GetCommandLine(self) -> "std::string":
        r"""GetCommandLine(OEHeader self) -> std::string"""
        return _oechem.OEHeader_GetCommandLine(self)

    def SetComment(self, comment: "std::string const &") -> "void":
        r"""SetComment(OEHeader self, std::string const & comment)"""
        return _oechem.OEHeader_SetComment(self, comment)

    def GetComment(self) -> "std::string":
        r"""GetComment(OEHeader self) -> std::string"""
        return _oechem.OEHeader_GetComment(self)

    def SetInterface(self, itf: "OEInterface const &") -> "void":
        r"""SetInterface(OEHeader self, OEInterface const & itf)"""
        return _oechem.OEHeader_SetInterface(self, itf)

    def GetInterface(self) -> "std::string":
        r"""GetInterface(OEHeader self) -> std::string"""
        return _oechem.OEHeader_GetInterface(self)

    def SetOEVersion(self, version: "int") -> "void":
        r"""SetOEVersion(OEHeader self, int version)"""
        return _oechem.OEHeader_SetOEVersion(self, version)

    def GetOEVersion(self) -> "int":
        r"""GetOEVersion(OEHeader self) -> int"""
        return _oechem.OEHeader_GetOEVersion(self)

    def SetOERelease(self, release: "std::string const &") -> "void":
        r"""SetOERelease(OEHeader self, std::string const & release)"""
        return _oechem.OEHeader_SetOERelease(self, release)

    def GetOERelease(self) -> "std::string":
        r"""GetOERelease(OEHeader self) -> std::string"""
        return _oechem.OEHeader_GetOERelease(self)

    def SetPlatform(self, platform: "std::string const &") -> "void":
        r"""SetPlatform(OEHeader self, std::string const & platform)"""
        return _oechem.OEHeader_SetPlatform(self, platform)

    def GetPlatform(self) -> "std::string":
        r"""GetPlatform(OEHeader self) -> std::string"""
        return _oechem.OEHeader_GetPlatform(self)

    def SetVersion(self, arg2: "std::string const &") -> "void":
        r"""SetVersion(OEHeader self, std::string const & arg2)"""
        return _oechem.OEHeader_SetVersion(self, arg2)

    def GetVersion(self) -> "std::string":
        r"""GetVersion(OEHeader self) -> std::string"""
        return _oechem.OEHeader_GetVersion(self)

    def AddHistory(self, header: "OEHeader") -> "void":
        r"""AddHistory(OEHeader self, OEHeader header)"""
        return _oechem.OEHeader_AddHistory(self, header)

    def GetHistory(self) -> "OESystem::OEIterBase< OESystem::OEHeader > *":
        r"""GetHistory(OEHeader self) -> OESystem::OEIterBase< OESystem::OEHeader > *"""
        return _oechem.OEHeader_GetHistory(self)
    __swig_destroy__ = _oechem.delete_OEHeader

# Register OEHeader in _oechem:
_oechem.OEHeader_swigregister(OEHeader)

class OEHalfFloat(object):
    r"""Proxy of C++ OEPlatform::OEHalfFloat 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__(OEHalfFloat self) -> OEHalfFloat
        __init__(OEHalfFloat self, oe_half data) -> OEHalfFloat
        __init__(OEHalfFloat self, int data) -> OEHalfFloat
        __init__(OEHalfFloat self, float arg2) -> OEHalfFloat
        __init__(OEHalfFloat self, double arg2) -> OEHalfFloat
        __init__(OEHalfFloat self, long double arg2) -> OEHalfFloat
        """
        _oechem.OEHalfFloat_swiginit(self, _oechem.new_OEHalfFloat(*args))

    def __float__(self) -> "double":
        r"""__float__(OEHalfFloat self) -> double"""
        return _oechem.OEHalfFloat___float__(self)

    def GetValue(self) -> "float":
        r"""GetValue(OEHalfFloat self) -> float"""
        return _oechem.OEHalfFloat_GetValue(self)

    def GetData(self) -> "oe_half":
        r"""GetData(OEHalfFloat self) -> oe_half"""
        return _oechem.OEHalfFloat_GetData(self)

    @staticmethod
    def posInf() -> "OEPlatform::OEHalfFloat":
        r"""posInf() -> OEHalfFloat"""
        return _oechem.OEHalfFloat_posInf()

    @staticmethod
    def qNan() -> "OEPlatform::OEHalfFloat":
        r"""qNan() -> OEHalfFloat"""
        return _oechem.OEHalfFloat_qNan()

    @staticmethod
    def sNan() -> "OEPlatform::OEHalfFloat":
        r"""sNan() -> OEHalfFloat"""
        return _oechem.OEHalfFloat_sNan()

    def __lt__(self, rhs: "OEHalfFloat") -> "bool":
        r"""__lt__(OEHalfFloat self, OEHalfFloat rhs) -> bool"""
        return _oechem.OEHalfFloat___lt__(self, rhs)

    def __eq__(self, rhs: "OEHalfFloat") -> "bool":
        r"""__eq__(OEHalfFloat self, OEHalfFloat rhs) -> bool"""
        return _oechem.OEHalfFloat___eq__(self, rhs)

    def GetDataTypeAsLong(self) -> "PyObject *":
        r"""GetDataTypeAsLong(OEHalfFloat self) -> PyObject *"""
        return _oechem.OEHalfFloat_GetDataTypeAsLong(self)
    __swig_destroy__ = _oechem.delete_OEHalfFloat

# Register OEHalfFloat in _oechem:
_oechem.OEHalfFloat_swigregister(OEHalfFloat)

def OEHalfFloat_posInf() -> "OEPlatform::OEHalfFloat":
    r"""OEHalfFloat_posInf() -> OEHalfFloat"""
    return _oechem.OEHalfFloat_posInf()

def OEHalfFloat_qNan() -> "OEPlatform::OEHalfFloat":
    r"""OEHalfFloat_qNan() -> OEHalfFloat"""
    return _oechem.OEHalfFloat_qNan()

def OEHalfFloat_sNan() -> "OEPlatform::OEHalfFloat":
    r"""OEHalfFloat_sNan() -> OEHalfFloat"""
    return _oechem.OEHalfFloat_sNan()

HALF_MIN = _oechem.HALF_MIN

HALF_NRM_MIN = _oechem.HALF_NRM_MIN

HALF_MAX = _oechem.HALF_MAX

HALF_EPSILON = _oechem.HALF_EPSILON

HALF_MANT_DIG = _oechem.HALF_MANT_DIG

HALF_DIG = _oechem.HALF_DIG

HALF_RADIX = _oechem.HALF_RADIX

HALF_MIN_EXP = _oechem.HALF_MIN_EXP

HALF_MAX_EXP = _oechem.HALF_MAX_EXP

HALF_MIN_10_EXP = _oechem.HALF_MIN_10_EXP

HALF_MAX_10_EXP = _oechem.HALF_MAX_10_EXP

class OEGroupBase(OEBase):
    r"""Proxy of C++ OEChem::OEGroupBase 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__ = _oechem.delete_OEGroupBase

    def Clear(self) -> "void":
        r"""Clear(OEGroupBase self)"""
        return _oechem.OEGroupBase_Clear(self)

    def SetGroupType(self, arg2: "unsigned int") -> "void":
        r"""SetGroupType(OEGroupBase self, unsigned int arg2)"""
        return _oechem.OEGroupBase_SetGroupType(self, arg2)

    def GetGroupType(self) -> "unsigned int":
        r"""GetGroupType(OEGroupBase self) -> unsigned int"""
        return _oechem.OEGroupBase_GetGroupType(self)

    def GetParent(self) -> "OEChem::OEMolBase const *":
        r"""GetParent(OEGroupBase self) -> OEMolBase"""
        return _oechem.OEGroupBase_GetParent(self)

    def NumAtoms(self) -> "unsigned int":
        r"""NumAtoms(OEGroupBase self) -> unsigned int"""
        return _oechem.OEGroupBase_NumAtoms(self)

    def NumBonds(self) -> "unsigned int":
        r"""NumBonds(OEGroupBase self) -> unsigned int"""
        return _oechem.OEGroupBase_NumBonds(self)

    def IsEmpty(self) -> "bool":
        r"""IsEmpty(OEGroupBase self) -> bool"""
        return _oechem.OEGroupBase_IsEmpty(self)

    def HasAtom(self, atom: "OEAtomBase") -> "bool":
        r"""HasAtom(OEGroupBase self, OEAtomBase atom) -> bool"""
        return _oechem.OEGroupBase_HasAtom(self, atom)

    def HasBond(self, bond: "OEBondBase") -> "bool":
        r"""HasBond(OEGroupBase self, OEBondBase bond) -> bool"""
        return _oechem.OEGroupBase_HasBond(self, bond)

    def AddAtom(self, atom: "OEAtomBase") -> "bool":
        r"""AddAtom(OEGroupBase self, OEAtomBase atom) -> bool"""
        return _oechem.OEGroupBase_AddAtom(self, atom)

    def AddBond(self, bond: "OEBondBase") -> "bool":
        r"""AddBond(OEGroupBase self, OEBondBase bond) -> bool"""
        return _oechem.OEGroupBase_AddBond(self, bond)

    def DeleteAtom(self, atom: "OEAtomBase") -> "bool":
        r"""DeleteAtom(OEGroupBase self, OEAtomBase atom) -> bool"""
        return _oechem.OEGroupBase_DeleteAtom(self, atom)

    def DeleteBond(self, bond: "OEBondBase") -> "bool":
        r"""DeleteBond(OEGroupBase self, OEBondBase bond) -> bool"""
        return _oechem.OEGroupBase_DeleteBond(self, bond)

    def GetAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""
        GetAtoms(OEGroupBase self) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAtoms(OEGroupBase self, OEUnaryAtomPred atompred) -> OESystem::OEIterBase< OEChem::OEAtomBase > *
        """
        return _oechem.OEGroupBase_GetAtoms(self, *args)

    def GetBonds(self, *args) -> "OESystem::OEIterBase< OEChem::OEBondBase > *":
        r"""
        GetBonds(OEGroupBase self) -> OESystem::OEIterBase< OEChem::OEBondBase >
        GetBonds(OEGroupBase self, OEUnaryBondPred bondpred) -> OESystem::OEIterBase< OEChem::OEBondBase > *
        """
        return _oechem.OEGroupBase_GetBonds(self, *args)

    def GetGroupDefinition(self, abset: "OEAtomBondSet") -> "bool":
        r"""GetGroupDefinition(OEGroupBase self, OEAtomBondSet abset) -> bool"""
        return _oechem.OEGroupBase_GetGroupDefinition(self, abset)

    def Sweep(self) -> "bool":
        r"""Sweep(OEGroupBase self) -> bool"""
        return _oechem.OEGroupBase_Sweep(self)

    def IsDeleted(self) -> "bool":
        r"""IsDeleted(OEGroupBase self) -> bool"""
        return _oechem.OEGroupBase_IsDeleted(self)

    def __str__(self) -> "std::string":
        r"""__str__(OEGroupBase self) -> std::string"""
        return _oechem.OEGroupBase___str__(self)

# Register OEGroupBase in _oechem:
_oechem.OEGroupBase_swigregister(OEGroupBase)

class OEGroupBaseIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OEGroupBase > 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__(OEGroupBaseIter self) -> OEGroupBaseIter
        __init__(OEGroupBaseIter self, OEGroupBaseIter rhs) -> OEGroupBaseIter
        __init__(OEGroupBaseIter self, OESystem::OEIterBase< OEChem::OEGroupBase > * rhs) -> OEGroupBaseIter
        __init__(OEGroupBaseIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEGroupBase >::NonConstA > * rhs) -> OEGroupBaseIter
        """
        _oechem.OEGroupBaseIter_swiginit(self, _oechem.new_OEGroupBaseIter(*args))
    __swig_destroy__ = _oechem.delete_OEGroupBaseIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEGroupBase > *":
        r"""Copy(OEGroupBaseIter self) -> OESystem::OEIterBase< OEChem::OEGroupBase > *"""
        return _oechem.OEGroupBaseIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEGroupBaseIter self, OESystem::OEIterBase< OEChem::OEGroupBase > * ib)
        Push(OEGroupBaseIter self, OEGroupBaseIter iter)
        """
        return _oechem.OEGroupBaseIter_Push(self, *args)

    def Sort(self, sort_criterion: "OEBinaryGroupPred") -> "void":
        r"""Sort(OEGroupBaseIter self, OEBinaryGroupPred sort_criterion)"""
        return _oechem.OEGroupBaseIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEGroupBase > &":
        r"""ToFirst(OEGroupBaseIter self) -> OEGroupBaseIter"""
        return _oechem.OEGroupBaseIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OEGroupBase > &":
        r"""ToLast(OEGroupBaseIter self) -> OEGroupBaseIter"""
        return _oechem.OEGroupBaseIter_ToLast(self)

    def __ref__(self) -> "OEChem::OEGroupBase &":
        r"""__ref__(OEGroupBaseIter self) -> OEGroupBase"""
        return _oechem.OEGroupBaseIter___ref__(self)

    def IsValid(self):
      return _oechem.OEGroupBaseIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEGroupBaseIter self) -> PyObject *"""
        return _oechem.OEGroupBaseIter_next(self)

    def Target(self) -> "OEChem::OEGroupBase &":
        r"""Target(OEGroupBaseIter self) -> OEGroupBase"""
        return _oechem.OEGroupBaseIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEGroupBase > &":
        r"""
        Next(OEGroupBaseIter self) -> OEGroupBaseIter
        Next(OEGroupBaseIter self, int i) -> OEGroupBaseIter
        """
        return _oechem.OEGroupBaseIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEGroupBase > &":
        r"""
        Prev(OEGroupBaseIter self) -> OEGroupBaseIter
        Prev(OEGroupBaseIter self, int i) -> OEGroupBaseIter
        """
        return _oechem.OEGroupBaseIter_Prev(self, *args)

# Register OEGroupBaseIter in _oechem:
_oechem.OEGroupBaseIter_swigregister(OEGroupBaseIter)


def OEAddMols(*args) -> "PyObject *":
    r"""OEAddMols(OEMolBase lhs, OEMolBase rhs, char const * delim="_") -> PyObject"""
    return _oechem.OEAddMols(*args)

def OEDetermineRingSystems(mol: "OEMolBase") -> "PyObject *":
    r"""OEDetermineRingSystems(OEMolBase mol) -> PyObject *"""
    return _oechem.OEDetermineRingSystems(mol)

def OEDetermineAromaticRingSystems(mol: "OEMolBase") -> "PyObject *":
    r"""OEDetermineAromaticRingSystems(OEMolBase mol) -> PyObject *"""
    return _oechem.OEDetermineAromaticRingSystems(mol)

def OEDetermineComponents(mol: "OEMolBase") -> "PyObject *":
    r"""OEDetermineComponents(OEMolBase mol) -> PyObject *"""
    return _oechem.OEDetermineComponents(mol)

def GetDoubleFromPyObject(outdouble: "double &", numberobj: "PyObject *") -> "bool":
    r"""GetDoubleFromPyObject(double & outdouble, PyObject * numberobj) -> bool"""
    return _oechem.GetDoubleFromPyObject(outdouble, numberobj)
class OEAtomBase(OEBase):
    r"""Proxy of C++ OEChem::OEAtomBase 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__ = _oechem.delete_OEAtomBase

    def Clear(self) -> "void":
        r"""Clear(OEAtomBase self)"""
        return _oechem.OEAtomBase_Clear(self)

    def IsDeleted(self) -> "bool":
        r"""IsDeleted(OEAtomBase self) -> bool"""
        return _oechem.OEAtomBase_IsDeleted(self)

    def SetHyb(self, arg2: "unsigned int") -> "bool":
        r"""SetHyb(OEAtomBase self, unsigned int arg2) -> bool"""
        return _oechem.OEAtomBase_SetHyb(self, arg2)

    def SetAtomicNum(self, arg2: "unsigned int") -> "bool":
        r"""SetAtomicNum(OEAtomBase self, unsigned int arg2) -> bool"""
        return _oechem.OEAtomBase_SetAtomicNum(self, arg2)

    def SetIsotope(self, arg2: "unsigned int") -> "bool":
        r"""SetIsotope(OEAtomBase self, unsigned int arg2) -> bool"""
        return _oechem.OEAtomBase_SetIsotope(self, arg2)

    def SetFormalCharge(self, arg2: "int") -> "bool":
        r"""SetFormalCharge(OEAtomBase self, int arg2) -> bool"""
        return _oechem.OEAtomBase_SetFormalCharge(self, arg2)

    def SetPartialCharge(self, arg2: "double") -> "bool":
        r"""SetPartialCharge(OEAtomBase self, double arg2) -> bool"""
        return _oechem.OEAtomBase_SetPartialCharge(self, arg2)

    def SetIntType(self, arg2: "int") -> "bool":
        r"""SetIntType(OEAtomBase self, int arg2) -> bool"""
        return _oechem.OEAtomBase_SetIntType(self, arg2)

    def SetType(self, arg2: "char const *") -> "bool":
        r"""SetType(OEAtomBase self, char const * arg2) -> bool"""
        return _oechem.OEAtomBase_SetType(self, arg2)

    def SetName(self, arg2: "char const *") -> "bool":
        r"""SetName(OEAtomBase self, char const * arg2) -> bool"""
        return _oechem.OEAtomBase_SetName(self, arg2)

    def SetImplicitHCount(self, arg2: "unsigned int") -> "bool":
        r"""SetImplicitHCount(OEAtomBase self, unsigned int arg2) -> bool"""
        return _oechem.OEAtomBase_SetImplicitHCount(self, arg2)

    def SetMapIdx(self, arg2: "unsigned int") -> "bool":
        r"""SetMapIdx(OEAtomBase self, unsigned int arg2) -> bool"""
        return _oechem.OEAtomBase_SetMapIdx(self, arg2)

    def SetSymmetryClass(self, arg2: "unsigned int") -> "bool":
        r"""SetSymmetryClass(OEAtomBase self, unsigned int arg2) -> bool"""
        return _oechem.OEAtomBase_SetSymmetryClass(self, arg2)

    def SetAromatic(self, arg2: "bool") -> "bool":
        r"""SetAromatic(OEAtomBase self, bool arg2) -> bool"""
        return _oechem.OEAtomBase_SetAromatic(self, arg2)

    def SetInRing(self, arg2: "bool") -> "bool":
        r"""SetInRing(OEAtomBase self, bool arg2) -> bool"""
        return _oechem.OEAtomBase_SetInRing(self, arg2)

    def SetChiral(self, arg2: "bool") -> "bool":
        r"""SetChiral(OEAtomBase self, bool arg2) -> bool"""
        return _oechem.OEAtomBase_SetChiral(self, arg2)

    def SetAxial(self, arg2: "OEBondBase", arg3: "bool") -> "bool":
        r"""SetAxial(OEAtomBase self, OEBondBase arg2, bool arg3) -> bool"""
        return _oechem.OEAtomBase_SetAxial(self, arg2, arg3)

    def SetStereo(self, arg2: "OEAtomVector", arg3: "unsigned int", arg4: "unsigned int") -> "bool":
        r"""SetStereo(OEAtomBase self, OEAtomVector arg2, unsigned int arg3, unsigned int arg4) -> bool"""
        return _oechem.OEAtomBase_SetStereo(self, arg2, arg3, arg4)

    def SetRxnRole(self, arg2: "unsigned int") -> "bool":
        r"""SetRxnRole(OEAtomBase self, unsigned int arg2) -> bool"""
        return _oechem.OEAtomBase_SetRxnRole(self, arg2)

    def SetRadius(self, arg2: "double") -> "bool":
        r"""SetRadius(OEAtomBase self, double arg2) -> bool"""
        return _oechem.OEAtomBase_SetRadius(self, arg2)

    def GetAxial(self, arg2: "OEBondBase") -> "bool":
        r"""GetAxial(OEAtomBase self, OEBondBase arg2) -> bool"""
        return _oechem.OEAtomBase_GetAxial(self, arg2)

    def GetFormalCharge(self) -> "int":
        r"""GetFormalCharge(OEAtomBase self) -> int"""
        return _oechem.OEAtomBase_GetFormalCharge(self)

    def GetPartialCharge(self) -> "double":
        r"""GetPartialCharge(OEAtomBase self) -> double"""
        return _oechem.OEAtomBase_GetPartialCharge(self)

    def GetIdx(self) -> "unsigned int":
        r"""GetIdx(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetIdx(self)

    def GetMapIdx(self) -> "unsigned int":
        r"""GetMapIdx(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetMapIdx(self)

    def GetAtomicNum(self) -> "unsigned int":
        r"""GetAtomicNum(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetAtomicNum(self)

    def GetIsotope(self) -> "unsigned int":
        r"""GetIsotope(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetIsotope(self)

    def GetHyb(self) -> "unsigned int":
        r"""GetHyb(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetHyb(self)

    def GetImplicitHCount(self) -> "unsigned int":
        r"""GetImplicitHCount(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetImplicitHCount(self)

    def GetSymmetryClass(self) -> "unsigned int":
        r"""GetSymmetryClass(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetSymmetryClass(self)

    def GetIntType(self) -> "int":
        r"""GetIntType(OEAtomBase self) -> int"""
        return _oechem.OEAtomBase_GetIntType(self)

    def GetRxnRole(self) -> "unsigned int":
        r"""GetRxnRole(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetRxnRole(self)

    def GetType(self) -> "char const *":
        r"""GetType(OEAtomBase self) -> char const *"""
        return _oechem.OEAtomBase_GetType(self)

    def GetParent(self) -> "OEChem::OEMolBase *":
        r"""GetParent(OEAtomBase self) -> OEMolBase"""
        return _oechem.OEAtomBase_GetParent(self)

    def GetName(self) -> "char const *":
        r"""GetName(OEAtomBase self) -> char const *"""
        return _oechem.OEAtomBase_GetName(self)

    def GetStereo(self, arg2: "OEAtomVector", arg3: "unsigned int") -> "unsigned int":
        r"""GetStereo(OEAtomBase self, OEAtomVector arg2, unsigned int arg3) -> unsigned int"""
        return _oechem.OEAtomBase_GetStereo(self, arg2, arg3)

    def GetValence(self) -> "unsigned int":
        r"""GetValence(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetValence(self)

    def GetHvyValence(self) -> "unsigned int":
        r"""GetHvyValence(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetHvyValence(self)

    def GetDegree(self) -> "unsigned int":
        r"""GetDegree(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetDegree(self)

    def GetHvyDegree(self) -> "unsigned int":
        r"""GetHvyDegree(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetHvyDegree(self)

    def GetExplicitValence(self) -> "unsigned int":
        r"""GetExplicitValence(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetExplicitValence(self)

    def GetExplicitDegree(self) -> "unsigned int":
        r"""GetExplicitDegree(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetExplicitDegree(self)

    def GetExplicitHCount(self) -> "unsigned int":
        r"""GetExplicitHCount(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetExplicitHCount(self)

    def GetTotalHCount(self) -> "unsigned int":
        r"""GetTotalHCount(OEAtomBase self) -> unsigned int"""
        return _oechem.OEAtomBase_GetTotalHCount(self)

    def GetBond(self, arg2: "OEAtomBase") -> "OEChem::OEBondBase *":
        r"""GetBond(OEAtomBase self, OEAtomBase arg2) -> OEBondBase"""
        return _oechem.OEAtomBase_GetBond(self, arg2)

    def GetRadius(self) -> "double":
        r"""GetRadius(OEAtomBase self) -> double"""
        return _oechem.OEAtomBase_GetRadius(self)

    def IsHydrogen(self) -> "bool":
        r"""IsHydrogen(OEAtomBase self) -> bool"""
        return _oechem.OEAtomBase_IsHydrogen(self)

    def IsPolar(self) -> "bool":
        r"""IsPolar(OEAtomBase self) -> bool"""
        return _oechem.OEAtomBase_IsPolar(self)

    def IsPolarHydrogen(self) -> "bool":
        r"""IsPolarHydrogen(OEAtomBase self) -> bool"""
        return _oechem.OEAtomBase_IsPolarHydrogen(self)

    def IsCarbon(self) -> "bool":
        r"""IsCarbon(OEAtomBase self) -> bool"""
        return _oechem.OEAtomBase_IsCarbon(self)

    def IsNitrogen(self) -> "bool":
        r"""IsNitrogen(OEAtomBase self) -> bool"""
        return _oechem.OEAtomBase_IsNitrogen(self)

    def IsOxygen(self) -> "bool":
        r"""IsOxygen(OEAtomBase self) -> bool"""
        return _oechem.OEAtomBase_IsOxygen(self)

    def IsHalogen(self) -> "bool":
        r"""IsHalogen(OEAtomBase self) -> bool"""
        return _oechem.OEAtomBase_IsHalogen(self)

    def IsMetal(self) -> "bool":
        r"""IsMetal(OEAtomBase self) -> bool"""
        return _oechem.OEAtomBase_IsMetal(self)

    def IsSulfur(self) -> "bool":
        r"""IsSulfur(OEAtomBase self) -> bool"""
        return _oechem.OEAtomBase_IsSulfur(self)

    def IsPhosphorus(self) -> "bool":
        r"""IsPhosphorus(OEAtomBase self) -> bool"""
        return _oechem.OEAtomBase_IsPhosphorus(self)

    def IsAromatic(self) -> "bool":
        r"""IsAromatic(OEAtomBase self) -> bool"""
        return _oechem.OEAtomBase_IsAromatic(self)

    def IsInRing(self) -> "bool":
        r"""IsInRing(OEAtomBase self) -> bool"""
        return _oechem.OEAtomBase_IsInRing(self)

    def IsConnected(self, arg2: "OEAtomBase") -> "bool":
        r"""IsConnected(OEAtomBase self, OEAtomBase arg2) -> bool"""
        return _oechem.OEAtomBase_IsConnected(self, arg2)

    def IsChiral(self) -> "bool":
        r"""IsChiral(OEAtomBase self) -> bool"""
        return _oechem.OEAtomBase_IsChiral(self)

    def HasStereoSpecified(self, *args) -> "bool":
        r"""HasStereoSpecified(OEAtomBase self, unsigned int v=) -> bool"""
        return _oechem.OEAtomBase_HasStereoSpecified(self, *args)

    def HasAlphaBetaUnsat(self, includePandS: "bool"=True) -> "bool":
        r"""HasAlphaBetaUnsat(OEAtomBase self, bool includePandS=True) -> bool"""
        return _oechem.OEAtomBase_HasAlphaBetaUnsat(self, includePandS)

    def OrderBonds(self, arg2: "OEBondVector") -> "bool":
        r"""OrderBonds(OEAtomBase self, OEBondVector arg2) -> bool"""
        return _oechem.OEAtomBase_OrderBonds(self, arg2)

    def GetAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""
        GetAtoms(OEAtomBase self) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAtoms(OEAtomBase self, OEUnaryAtomPred arg2) -> OESystem::OEIterBase< OEChem::OEAtomBase > *
        """
        return _oechem.OEAtomBase_GetAtoms(self, *args)

    def GetBonds(self, *args) -> "OESystem::OEIterBase< OEChem::OEBondBase > *":
        r"""
        GetBonds(OEAtomBase self) -> OESystem::OEIterBase< OEChem::OEBondBase >
        GetBonds(OEAtomBase self, OEUnaryBondPred arg2) -> OESystem::OEIterBase< OEChem::OEBondBase > *
        """
        return _oechem.OEAtomBase_GetBonds(self, *args)

    def IsDataType(self, arg2: "void const *") -> "bool":
        r"""IsDataType(OEAtomBase self, void const * arg2) -> bool"""
        return _oechem.OEAtomBase_IsDataType(self, arg2)

    def __str__(self) -> "std::string":
        r"""__str__(OEAtomBase self) -> std::string"""
        return _oechem.OEAtomBase___str__(self)

# Register OEAtomBase in _oechem:
_oechem.OEAtomBase_swigregister(OEAtomBase)

class OEBondBase(OEBase):
    r"""Proxy of C++ OEChem::OEBondBase 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__ = _oechem.delete_OEBondBase

    def Clear(self) -> "void":
        r"""Clear(OEBondBase self)"""
        return _oechem.OEBondBase_Clear(self)

    def Sweep(self) -> "bool":
        r"""Sweep(OEBondBase self) -> bool"""
        return _oechem.OEBondBase_Sweep(self)

    def SetInRing(self, arg2: "bool") -> "bool":
        r"""SetInRing(OEBondBase self, bool arg2) -> bool"""
        return _oechem.OEBondBase_SetInRing(self, arg2)

    def SetAromatic(self, arg2: "bool") -> "bool":
        r"""SetAromatic(OEBondBase self, bool arg2) -> bool"""
        return _oechem.OEBondBase_SetAromatic(self, arg2)

    def SetChiral(self, arg2: "bool") -> "bool":
        r"""SetChiral(OEBondBase self, bool arg2) -> bool"""
        return _oechem.OEBondBase_SetChiral(self, arg2)

    def SetStereo(self, arg2: "OEAtomVector", arg3: "unsigned int", arg4: "unsigned int") -> "bool":
        r"""SetStereo(OEBondBase self, OEAtomVector arg2, unsigned int arg3, unsigned int arg4) -> bool"""
        return _oechem.OEBondBase_SetStereo(self, arg2, arg3, arg4)

    def SetBgn(self, arg2: "OEAtomBase") -> "bool":
        r"""SetBgn(OEBondBase self, OEAtomBase arg2) -> bool"""
        return _oechem.OEBondBase_SetBgn(self, arg2)

    def SetEnd(self, arg2: "OEAtomBase") -> "bool":
        r"""SetEnd(OEBondBase self, OEAtomBase arg2) -> bool"""
        return _oechem.OEBondBase_SetEnd(self, arg2)

    def SetOrder(self, arg2: "unsigned int") -> "bool":
        r"""SetOrder(OEBondBase self, unsigned int arg2) -> bool"""
        return _oechem.OEBondBase_SetOrder(self, arg2)

    def SetIntType(self, arg2: "int") -> "bool":
        r"""SetIntType(OEBondBase self, int arg2) -> bool"""
        return _oechem.OEBondBase_SetIntType(self, arg2)

    def SetType(self, arg2: "char const *") -> "bool":
        r"""SetType(OEBondBase self, char const * arg2) -> bool"""
        return _oechem.OEBondBase_SetType(self, arg2)

    def GetIdx(self) -> "unsigned int":
        r"""GetIdx(OEBondBase self) -> unsigned int"""
        return _oechem.OEBondBase_GetIdx(self)

    def GetBgn(self) -> "OEChem::OEAtomBase *":
        r"""GetBgn(OEBondBase self) -> OEAtomBase"""
        return _oechem.OEBondBase_GetBgn(self)

    def GetEnd(self) -> "OEChem::OEAtomBase *":
        r"""GetEnd(OEBondBase self) -> OEAtomBase"""
        return _oechem.OEBondBase_GetEnd(self)

    def GetBgnIdx(self) -> "unsigned int":
        r"""GetBgnIdx(OEBondBase self) -> unsigned int"""
        return _oechem.OEBondBase_GetBgnIdx(self)

    def GetEndIdx(self) -> "unsigned int":
        r"""GetEndIdx(OEBondBase self) -> unsigned int"""
        return _oechem.OEBondBase_GetEndIdx(self)

    def GetOrder(self) -> "unsigned int":
        r"""GetOrder(OEBondBase self) -> unsigned int"""
        return _oechem.OEBondBase_GetOrder(self)

    def GetIntType(self) -> "int":
        r"""GetIntType(OEBondBase self) -> int"""
        return _oechem.OEBondBase_GetIntType(self)

    def GetType(self) -> "char const *":
        r"""GetType(OEBondBase self) -> char const *"""
        return _oechem.OEBondBase_GetType(self)

    def GetParent(self) -> "OEChem::OEMolBase *":
        r"""GetParent(OEBondBase self) -> OEMolBase"""
        return _oechem.OEBondBase_GetParent(self)

    def GetNbr(self, arg2: "OEAtomBase") -> "OEChem::OEAtomBase *":
        r"""GetNbr(OEBondBase self, OEAtomBase arg2) -> OEAtomBase"""
        return _oechem.OEBondBase_GetNbr(self, arg2)

    def GetStereo(self, arg2: "OEAtomVector", arg3: "unsigned int") -> "unsigned int":
        r"""GetStereo(OEBondBase self, OEAtomVector arg2, unsigned int arg3) -> unsigned int"""
        return _oechem.OEBondBase_GetStereo(self, arg2, arg3)

    def IsDeleted(self) -> "bool":
        r"""IsDeleted(OEBondBase self) -> bool"""
        return _oechem.OEBondBase_IsDeleted(self)

    def IsInRing(self) -> "bool":
        r"""IsInRing(OEBondBase self) -> bool"""
        return _oechem.OEBondBase_IsInRing(self)

    def IsAromatic(self) -> "bool":
        r"""IsAromatic(OEBondBase self) -> bool"""
        return _oechem.OEBondBase_IsAromatic(self)

    def IsRotor(self) -> "bool":
        r"""IsRotor(OEBondBase self) -> bool"""
        return _oechem.OEBondBase_IsRotor(self)

    def IsChiral(self) -> "bool":
        r"""IsChiral(OEBondBase self) -> bool"""
        return _oechem.OEBondBase_IsChiral(self)

    def HasStereoSpecified(self, *args) -> "bool":
        r"""HasStereoSpecified(OEBondBase self, unsigned int v=) -> bool"""
        return _oechem.OEBondBase_HasStereoSpecified(self, *args)

    def IsDataType(self, arg2: "void const *") -> "bool":
        r"""IsDataType(OEBondBase self, void const * arg2) -> bool"""
        return _oechem.OEBondBase_IsDataType(self, arg2)

    def SwapEnds(self) -> "bool":
        r"""SwapEnds(OEBondBase self) -> bool"""
        return _oechem.OEBondBase_SwapEnds(self)

    def __str__(self) -> "std::string":
        r"""__str__(OEBondBase self) -> std::string"""
        return _oechem.OEBondBase___str__(self)

# Register OEBondBase in _oechem:
_oechem.OEBondBase_swigregister(OEBondBase)

class OEMolBase(OEBase):
    r"""Proxy of C++ OEChem::OEMolBase 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__ = _oechem.delete_OEMolBase

    def Clear(self) -> "void":
        r"""Clear(OEMolBase self)"""
        return _oechem.OEMolBase_Clear(self)

    def ClearBase(self) -> "void":
        r"""ClearBase(OEMolBase self)"""
        return _oechem.OEMolBase_ClearBase(self)

    def Compress(self) -> "bool":
        r"""Compress(OEMolBase self) -> bool"""
        return _oechem.OEMolBase_Compress(self)

    def UnCompress(self) -> "bool":
        r"""UnCompress(OEMolBase self) -> bool"""
        return _oechem.OEMolBase_UnCompress(self)

    def NumAtoms(self) -> "unsigned int":
        r"""NumAtoms(OEMolBase self) -> unsigned int"""
        return _oechem.OEMolBase_NumAtoms(self)

    def NumBonds(self) -> "unsigned int":
        r"""NumBonds(OEMolBase self) -> unsigned int"""
        return _oechem.OEMolBase_NumBonds(self)

    def Count(self, arg2: "unsigned int") -> "unsigned int":
        r"""Count(OEMolBase self, unsigned int arg2) -> unsigned int"""
        return _oechem.OEMolBase_Count(self, arg2)

    def IsValid(self):
      return _oechem.OEMolBase___nonzero__(self)



    def SetEnergy(self, arg2: "double") -> "bool":
        r"""SetEnergy(OEMolBase self, double arg2) -> bool"""
        return _oechem.OEMolBase_SetEnergy(self, arg2)

    def SetTitle(self, arg2: "char const *") -> "bool":
        r"""SetTitle(OEMolBase self, char const * arg2) -> bool"""
        return _oechem.OEMolBase_SetTitle(self, arg2)

    def ClearCoords(self) -> "void":
        r"""ClearCoords(OEMolBase self)"""
        return _oechem.OEMolBase_ClearCoords(self)

    def GetEnergy(self) -> "double":
        r"""GetEnergy(OEMolBase self) -> double"""
        return _oechem.OEMolBase_GetEnergy(self)

    def GetMaxAtomIdx(self) -> "unsigned int":
        r"""GetMaxAtomIdx(OEMolBase self) -> unsigned int"""
        return _oechem.OEMolBase_GetMaxAtomIdx(self)

    def GetMaxBondIdx(self) -> "unsigned int":
        r"""GetMaxBondIdx(OEMolBase self) -> unsigned int"""
        return _oechem.OEMolBase_GetMaxBondIdx(self)

    def GetTitle(self) -> "char const *":
        r"""GetTitle(OEMolBase self) -> char const *"""
        return _oechem.OEMolBase_GetTitle(self)

    def GetAtom(self, arg2: "OEUnaryAtomPred") -> "OEChem::OEAtomBase *":
        r"""GetAtom(OEMolBase self, OEUnaryAtomPred arg2) -> OEAtomBase"""
        return _oechem.OEMolBase_GetAtom(self, arg2)

    def GetBond(self, *args) -> "OEChem::OEBondBase *":
        r"""
        GetBond(OEMolBase self, OEUnaryBondPred arg2) -> OEBondBase
        GetBond(OEMolBase self, OEAtomBase arg2, OEAtomBase arg3) -> OEBondBase
        """
        return _oechem.OEMolBase_GetBond(self, *args)

    def NewAtom(self, *args) -> "OEChem::OEAtomBase *":
        r"""
        NewAtom(OEMolBase self, unsigned int arg2) -> OEAtomBase
        NewAtom(OEMolBase self, OEAtomBase arg2) -> OEAtomBase
        """
        return _oechem.OEMolBase_NewAtom(self, *args)

    def NewBond(self, arg2: "OEAtomBase", arg3: "OEAtomBase", order: "unsigned int"=0) -> "OEChem::OEBondBase *":
        r"""NewBond(OEMolBase self, OEAtomBase arg2, OEAtomBase arg3, unsigned int order=0) -> OEBondBase"""
        return _oechem.OEMolBase_NewBond(self, arg2, arg3, order)

    def DeleteAtom(self, arg2: "OEAtomBase") -> "bool":
        r"""DeleteAtom(OEMolBase self, OEAtomBase arg2) -> bool"""
        return _oechem.OEMolBase_DeleteAtom(self, arg2)

    def DeleteBond(self, arg2: "OEBondBase") -> "bool":
        r"""DeleteBond(OEMolBase self, OEBondBase arg2) -> bool"""
        return _oechem.OEMolBase_DeleteBond(self, arg2)

    def IsDeleted(self, *args) -> "bool":
        r"""
        IsDeleted(OEMolBase self, OEAtomBase arg2) -> bool
        IsDeleted(OEMolBase self, OEBondBase arg2) -> bool
        """
        return _oechem.OEMolBase_IsDeleted(self, *args)

    def Sweep(self) -> "bool":
        r"""Sweep(OEMolBase self) -> bool"""
        return _oechem.OEMolBase_Sweep(self)

    def OrderAtoms(self, arg2: "OEAtomVector") -> "bool":
        r"""OrderAtoms(OEMolBase self, OEAtomVector arg2) -> bool"""
        return _oechem.OEMolBase_OrderAtoms(self, arg2)

    def OrderBonds(self, arg2: "OEBondVector") -> "bool":
        r"""OrderBonds(OEMolBase self, OEBondVector arg2) -> bool"""
        return _oechem.OEMolBase_OrderBonds(self, arg2)

    def SetRxn(self, arg2: "bool") -> "bool":
        r"""SetRxn(OEMolBase self, bool arg2) -> bool"""
        return _oechem.OEMolBase_SetRxn(self, arg2)

    def IsRxn(self) -> "bool":
        r"""IsRxn(OEMolBase self) -> bool"""
        return _oechem.OEMolBase_IsRxn(self)

    def GetAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""
        GetAtoms(OEMolBase self) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAtoms(OEMolBase self, OEUnaryAtomPred arg2) -> OESystem::OEIterBase< OEChem::OEAtomBase > *
        """
        return _oechem.OEMolBase_GetAtoms(self, *args)

    def GetBonds(self, *args) -> "OESystem::OEIterBase< OEChem::OEBondBase > *":
        r"""
        GetBonds(OEMolBase self) -> OESystem::OEIterBase< OEChem::OEBondBase >
        GetBonds(OEMolBase self, OEUnaryBondPred arg2) -> OESystem::OEIterBase< OEChem::OEBondBase > *
        """
        return _oechem.OEMolBase_GetBonds(self, *args)

    def SetDimension(self, arg2: "unsigned int") -> "bool":
        r"""SetDimension(OEMolBase self, unsigned int arg2) -> bool"""
        return _oechem.OEMolBase_SetDimension(self, arg2)

    def GetDimension(self) -> "unsigned int":
        r"""GetDimension(OEMolBase self) -> unsigned int"""
        return _oechem.OEMolBase_GetDimension(self)

    def HasPerceived(self, arg2: "unsigned int") -> "bool":
        r"""HasPerceived(OEMolBase self, unsigned int arg2) -> bool"""
        return _oechem.OEMolBase_HasPerceived(self, arg2)

    def SetPerceived(self, arg2: "unsigned int", arg3: "bool") -> "bool":
        r"""SetPerceived(OEMolBase self, unsigned int arg2, bool arg3) -> bool"""
        return _oechem.OEMolBase_SetPerceived(self, arg2, arg3)

    def ResetPerceived(self) -> "void":
        r"""ResetPerceived(OEMolBase self)"""
        return _oechem.OEMolBase_ResetPerceived(self)

    def IsDataType(self, arg2: "void const *") -> "bool":
        r"""IsDataType(OEMolBase self, void const * arg2) -> bool"""
        return _oechem.OEMolBase_IsDataType(self, arg2)

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEMolBase self) -> OEBase"""
        return _oechem.OEMolBase_CreateCopy(self)

    def NumGroups(self) -> "unsigned int":
        r"""NumGroups(OEMolBase self) -> unsigned int"""
        return _oechem.OEMolBase_NumGroups(self)

    def _NewGroup_Atoms(self, type: "unsigned int", atoms: "OEAtomVector") -> "OEChem::OEGroupBase *":
        r"""_NewGroup_Atoms(OEMolBase self, unsigned int type, OEAtomVector atoms) -> OEGroupBase"""
        return _oechem.OEMolBase__NewGroup_Atoms(self, type, atoms)

    def _NewGroup_Bonds(self, type: "unsigned int", bonds: "OEBondVector") -> "OEChem::OEGroupBase *":
        r"""_NewGroup_Bonds(OEMolBase self, unsigned int type, OEBondVector bonds) -> OEGroupBase"""
        return _oechem.OEMolBase__NewGroup_Bonds(self, type, bonds)

    def _NewGroup_AtomsBonds(self, type: "unsigned int", atoms: "OEAtomVector", bonds: "OEBondVector") -> "OEChem::OEGroupBase *":
        r"""_NewGroup_AtomsBonds(OEMolBase self, unsigned int type, OEAtomVector atoms, OEBondVector bonds) -> OEGroupBase"""
        return _oechem.OEMolBase__NewGroup_AtomsBonds(self, type, atoms, bonds)

    def _NewGroup_AtomBondSet(self, type: "unsigned int", abset: "OEAtomBondSet") -> "OEChem::OEGroupBase *":
        r"""_NewGroup_AtomBondSet(OEMolBase self, unsigned int type, OEAtomBondSet abset) -> OEGroupBase"""
        return _oechem.OEMolBase__NewGroup_AtomBondSet(self, type, abset)

    def DeleteGroup(self, group: "OEGroupBase") -> "bool":
        r"""DeleteGroup(OEMolBase self, OEGroupBase group) -> bool"""
        return _oechem.OEMolBase_DeleteGroup(self, group)

    def GetGroup(self, pred: "OEUnaryGroupPred") -> "OEChem::OEGroupBase *":
        r"""GetGroup(OEMolBase self, OEUnaryGroupPred pred) -> OEGroupBase"""
        return _oechem.OEMolBase_GetGroup(self, pred)

    def GetGroups(self, *args) -> "OESystem::OEIterBase< OEChem::OEGroupBase > *":
        r"""
        GetGroups(OEMolBase self) -> OESystem::OEIterBase< OEChem::OEGroupBase >
        GetGroups(OEMolBase self, OEUnaryGroupPred pred) -> OESystem::OEIterBase< OEChem::OEGroupBase > *
        """
        return _oechem.OEMolBase_GetGroups(self, *args)

    def ForEachAtom(self, fcn: "OESystem::OEUnaryFunction< OEChem::OEAtomBase,PyObject *,true,true > &") -> "PyObject *":
        r"""ForEachAtom(OEMolBase self, OESystem::OEUnaryFunction< OEChem::OEAtomBase,PyObject *,true,true > & fcn) -> PyObject *"""
        return _oechem.OEMolBase_ForEachAtom(self, fcn)

    def GetCoords(self, *args) -> "PyObject *":
        r"""
        GetCoords(OEMolBase self, OEAtomBase atom, OEHalfFloat crds) -> bool
        GetCoords(OEMolBase self, OEAtomBase arg2, float * arg3) -> bool
        GetCoords(OEMolBase self, OEAtomBase arg2, double * arg3) -> bool
        GetCoords(OEMolBase self, OEAtomBase arg2, long double * arg3) -> bool
        GetCoords(OEMolBase self, OEHalfFloat crds) -> bool
        GetCoords(OEMolBase self, float * arg2) -> bool
        GetCoords(OEMolBase self, double * arg2) -> bool
        GetCoords(OEMolBase self, long double * arg2) -> bool
        GetCoords(OEMolBase self, OEAtomBase atom) -> PyObject
        GetCoords(OEMolBase self) -> PyObject *
        """
        return _oechem.OEMolBase_GetCoords(self, *args)

    def SetCoords(self, *args) -> "PyObject *":
        r"""
        SetCoords(OEMolBase self, OEAtomBase atom, OEHalfFloat crds) -> bool
        SetCoords(OEMolBase self, OEAtomBase arg2, float const * arg3) -> bool
        SetCoords(OEMolBase self, OEAtomBase arg2, double const * arg3) -> bool
        SetCoords(OEMolBase self, OEAtomBase arg2, long double const * arg3) -> bool
        SetCoords(OEMolBase self, OEHalfFloat crds) -> bool
        SetCoords(OEMolBase self, float const * arg2) -> bool
        SetCoords(OEMolBase self, double const * arg2) -> bool
        SetCoords(OEMolBase self, long double const * arg2) -> bool
        SetCoords(OEMolBase self, OEAtomBase atom, PyObject * input) -> PyObject
        SetCoords(OEMolBase self, PyObject * input) -> PyObject *
        """
        return _oechem.OEMolBase_SetCoords(self, *args)

# Register OEMolBase in _oechem:
_oechem.OEMolBase_swigregister(OEMolBase)

class OEQBase(object):
    r"""Proxy of C++ OEChem::OEQBase 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__ = _oechem.delete_OEQBase

    def SetExpr(self, arg2: "OEExprBase") -> "bool":
        r"""SetExpr(OEQBase self, OEExprBase arg2) -> bool"""
        return _oechem.OEQBase_SetExpr(self, arg2)

    def GetExpr(self, *args) -> "OEChem::OEExprBase *":
        r"""
        GetExpr(OEQBase self) -> OEExprBase
        GetExpr(OEQBase self) -> OEExprBase
        """
        return _oechem.OEQBase_GetExpr(self, *args)

# Register OEQBase in _oechem:
_oechem.OEQBase_swigregister(OEQBase)

class OEQAtomBase(OEAtomBase, OEQBase):
    r"""Proxy of C++ OEChem::OEQAtomBase 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__ = _oechem.delete_OEQAtomBase

    def GetParentAtom(self) -> "OEChem::OEAtomBase *":
        r"""GetParentAtom(OEQAtomBase self) -> OEAtomBase"""
        return _oechem.OEQAtomBase_GetParentAtom(self)

    def GetQAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEQAtomBase > *":
        r"""
        GetQAtoms(OEQAtomBase self) -> OESystem::OEIterBase< OEChem::OEQAtomBase >
        GetQAtoms(OEQAtomBase self, OEUnaryAtomPred arg2) -> OESystem::OEIterBase< OEChem::OEQAtomBase > *
        """
        return _oechem.OEQAtomBase_GetQAtoms(self, *args)

    def GetQBonds(self, *args) -> "OESystem::OEIterBase< OEChem::OEQBondBase > *":
        r"""
        GetQBonds(OEQAtomBase self) -> OESystem::OEIterBase< OEChem::OEQBondBase >
        GetQBonds(OEQAtomBase self, OEUnaryBondPred arg2) -> OESystem::OEIterBase< OEChem::OEQBondBase > *
        """
        return _oechem.OEQAtomBase_GetQBonds(self, *args)

    def IsDataType(self, arg2: "void const *") -> "bool":
        r"""IsDataType(OEQAtomBase self, void const * arg2) -> bool"""
        return _oechem.OEQAtomBase_IsDataType(self, arg2)

# Register OEQAtomBase in _oechem:
_oechem.OEQAtomBase_swigregister(OEQAtomBase)

class OEQBondBase(OEBondBase, OEQBase):
    r"""Proxy of C++ OEChem::OEQBondBase 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__ = _oechem.delete_OEQBondBase

    def GetParentBond(self) -> "OEChem::OEBondBase *":
        r"""GetParentBond(OEQBondBase self) -> OEBondBase"""
        return _oechem.OEQBondBase_GetParentBond(self)

    def IsDataType(self, arg2: "void const *") -> "bool":
        r"""IsDataType(OEQBondBase self, void const * arg2) -> bool"""
        return _oechem.OEQBondBase_IsDataType(self, arg2)

# Register OEQBondBase in _oechem:
_oechem.OEQBondBase_swigregister(OEQBondBase)

class OEQMolBase(OEMolBase):
    r"""Proxy of C++ OEChem::OEQMolBase 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__ = _oechem.delete_OEQMolBase

    def BuildExpressions(self, *args) -> "bool":
        r"""
        BuildExpressions(OEQMolBase self, unsigned int atomopts, unsigned int bondopts) -> bool
        BuildExpressions(OEQMolBase self, OEChem::OEMatchPair< OEChem::OEExprBase > const & arg2) -> bool
        """
        return _oechem.OEQMolBase_BuildExpressions(self, *args)

    def GetQAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEQAtomBase > *":
        r"""
        GetQAtoms(OEQMolBase self) -> OESystem::OEIterBase< OEChem::OEQAtomBase >
        GetQAtoms(OEQMolBase self, OEUnaryAtomPred arg2) -> OESystem::OEIterBase< OEChem::OEQAtomBase > *
        """
        return _oechem.OEQMolBase_GetQAtoms(self, *args)

    def GetQBonds(self, *args) -> "OESystem::OEIterBase< OEChem::OEQBondBase > *":
        r"""
        GetQBonds(OEQMolBase self) -> OESystem::OEIterBase< OEChem::OEQBondBase >
        GetQBonds(OEQMolBase self, OEUnaryBondPred arg2) -> OESystem::OEIterBase< OEChem::OEQBondBase > *
        """
        return _oechem.OEQMolBase_GetQBonds(self, *args)

    def IsDataType(self, arg2: "void const *") -> "bool":
        r"""IsDataType(OEQMolBase self, void const * arg2) -> bool"""
        return _oechem.OEQMolBase_IsDataType(self, arg2)

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEQMolBase self) -> OEBase"""
        return _oechem.OEQMolBase_CreateCopy(self)

# Register OEQMolBase in _oechem:
_oechem.OEQMolBase_swigregister(OEQMolBase)


def OEString2OEAtomExpr(expression: "char const *") -> "unsigned int":
    r"""OEString2OEAtomExpr(char const * expression) -> unsigned int"""
    return _oechem.OEString2OEAtomExpr(expression)

def OEString2OEBondExpr(expression: "char const *") -> "unsigned int":
    r"""OEString2OEBondExpr(char const * expression) -> unsigned int"""
    return _oechem.OEString2OEBondExpr(expression)
class OEConfBase(OEMolBase):
    r"""Proxy of C++ OEChem::OEConfBase 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__ = _oechem.delete_OEConfBase

    def AddAtom(self, *args) -> "void":
        r"""
        AddAtom(OEConfBase self, OEAtomBase atom)
        AddAtom(OEConfBase self, OEAtomBase rhs, OEAtomBase atom)
        """
        return _oechem.OEConfBase_AddAtom(self, *args)

    def AddBond(self, bond: "OEBondBase") -> "void":
        r"""AddBond(OEConfBase self, OEBondBase bond)"""
        return _oechem.OEConfBase_AddBond(self, bond)

    def SetMCMol(self, arg2: "OEMCMolBase") -> "void":
        r"""SetMCMol(OEConfBase self, OEMCMolBase arg2)"""
        return _oechem.OEConfBase_SetMCMol(self, arg2)

    def GetMCMol(self, *args) -> "OEChem::OEMCMolBase &":
        r"""
        GetMCMol(OEConfBase self) -> OEMCMolBase
        GetMCMol(OEConfBase self) -> OEMCMolBase
        """
        return _oechem.OEConfBase_GetMCMol(self, *args)

    def GetIdx(self) -> "unsigned int":
        r"""GetIdx(OEConfBase self) -> unsigned int"""
        return _oechem.OEConfBase_GetIdx(self)

    def ClearCoords(self) -> "void":
        r"""ClearCoords(OEConfBase self)"""
        return _oechem.OEConfBase_ClearCoords(self)

    def Delete(self) -> "void":
        r"""Delete(OEConfBase self)"""
        return _oechem.OEConfBase_Delete(self)

    def GetTorsion(self, *args) -> "double":
        r"""
        GetTorsion(OEConfBase self, OETorsion arg2) -> double
        GetTorsion(OEConfBase self, OEAtomBase a, OEAtomBase b, OEAtomBase c, OEAtomBase d) -> double
        """
        return _oechem.OEConfBase_GetTorsion(self, *args)

    def SetTorsion(self, *args) -> "void":
        r"""
        SetTorsion(OEConfBase self, OETorsion arg2)
        SetTorsion(OEConfBase self, OEAtomBase a, OEAtomBase b, OEAtomBase c, OEAtomBase d, double radians)
        """
        return _oechem.OEConfBase_SetTorsion(self, *args)

    def GetTransform(self) -> "OEChem::OETrans const &":
        r"""GetTransform(OEConfBase self) -> OETrans"""
        return _oechem.OEConfBase_GetTransform(self)

    def Transform(self, *args) -> "void":
        r"""
        Transform(OEConfBase self, OETrans arg2)
        Transform(OEConfBase self, OETransBase arg2)
        """
        return _oechem.OEConfBase_Transform(self, *args)

    def HasTitle(self) -> "bool":
        r"""HasTitle(OEConfBase self) -> bool"""
        return _oechem.OEConfBase_HasTitle(self)

    def Clear(self) -> "void":
        r"""Clear(OEConfBase self)"""
        return _oechem.OEConfBase_Clear(self)

    def Compress(self) -> "bool":
        r"""Compress(OEConfBase self) -> bool"""
        return _oechem.OEConfBase_Compress(self)

    def UnCompress(self) -> "bool":
        r"""UnCompress(OEConfBase self) -> bool"""
        return _oechem.OEConfBase_UnCompress(self)

    def NumAtoms(self) -> "unsigned int":
        r"""NumAtoms(OEConfBase self) -> unsigned int"""
        return _oechem.OEConfBase_NumAtoms(self)

    def NumBonds(self) -> "unsigned int":
        r"""NumBonds(OEConfBase self) -> unsigned int"""
        return _oechem.OEConfBase_NumBonds(self)

    def Count(self, arg2: "unsigned int") -> "unsigned int":
        r"""Count(OEConfBase self, unsigned int arg2) -> unsigned int"""
        return _oechem.OEConfBase_Count(self, arg2)

    def IsValid(self):
      return _oechem.OEConfBase___nonzero__(self)



    def SetEnergy(self, arg2: "double") -> "bool":
        r"""SetEnergy(OEConfBase self, double arg2) -> bool"""
        return _oechem.OEConfBase_SetEnergy(self, arg2)

    def SetTitle(self, arg2: "char const *") -> "bool":
        r"""SetTitle(OEConfBase self, char const * arg2) -> bool"""
        return _oechem.OEConfBase_SetTitle(self, arg2)

    def GetEnergy(self) -> "double":
        r"""GetEnergy(OEConfBase self) -> double"""
        return _oechem.OEConfBase_GetEnergy(self)

    def GetMaxAtomIdx(self) -> "unsigned int":
        r"""GetMaxAtomIdx(OEConfBase self) -> unsigned int"""
        return _oechem.OEConfBase_GetMaxAtomIdx(self)

    def GetMaxBondIdx(self) -> "unsigned int":
        r"""GetMaxBondIdx(OEConfBase self) -> unsigned int"""
        return _oechem.OEConfBase_GetMaxBondIdx(self)

    def GetTitle(self) -> "char const *":
        r"""GetTitle(OEConfBase self) -> char const *"""
        return _oechem.OEConfBase_GetTitle(self)

    def GetAtom(self, arg2: "OEUnaryAtomPred") -> "OEChem::OEAtomBase *":
        r"""GetAtom(OEConfBase self, OEUnaryAtomPred arg2) -> OEAtomBase"""
        return _oechem.OEConfBase_GetAtom(self, arg2)

    def GetBond(self, *args) -> "OEChem::OEBondBase *":
        r"""
        GetBond(OEConfBase self, OEUnaryBondPred arg2) -> OEBondBase
        GetBond(OEConfBase self, OEAtomBase arg2, OEAtomBase arg3) -> OEBondBase
        """
        return _oechem.OEConfBase_GetBond(self, *args)

    def NewAtom(self, *args) -> "OEChem::OEAtomBase *":
        r"""
        NewAtom(OEConfBase self, unsigned int arg2) -> OEAtomBase
        NewAtom(OEConfBase self, OEAtomBase arg2) -> OEAtomBase
        """
        return _oechem.OEConfBase_NewAtom(self, *args)

    def NewBond(self, arg2: "OEAtomBase", arg3: "OEAtomBase", order: "unsigned int"=0) -> "OEChem::OEBondBase *":
        r"""NewBond(OEConfBase self, OEAtomBase arg2, OEAtomBase arg3, unsigned int order=0) -> OEBondBase"""
        return _oechem.OEConfBase_NewBond(self, arg2, arg3, order)

    def DeleteAtom(self, arg2: "OEAtomBase") -> "bool":
        r"""DeleteAtom(OEConfBase self, OEAtomBase arg2) -> bool"""
        return _oechem.OEConfBase_DeleteAtom(self, arg2)

    def DeleteBond(self, arg2: "OEBondBase") -> "bool":
        r"""DeleteBond(OEConfBase self, OEBondBase arg2) -> bool"""
        return _oechem.OEConfBase_DeleteBond(self, arg2)

    def IsDeleted(self, *args) -> "bool":
        r"""
        IsDeleted(OEConfBase self) -> bool
        IsDeleted(OEConfBase self, OEAtomBase arg2) -> bool
        IsDeleted(OEConfBase self, OEBondBase arg2) -> bool
        """
        return _oechem.OEConfBase_IsDeleted(self, *args)

    def Sweep(self, *args) -> "bool":
        r"""
        Sweep(OEConfBase self) -> bool
        Sweep(OEConfBase self, unsigned int const * arg2) -> bool
        """
        return _oechem.OEConfBase_Sweep(self, *args)

    def OrderAtoms(self, arg2: "OEAtomVector") -> "bool":
        r"""OrderAtoms(OEConfBase self, OEAtomVector arg2) -> bool"""
        return _oechem.OEConfBase_OrderAtoms(self, arg2)

    def OrderBonds(self, arg2: "OEBondVector") -> "bool":
        r"""OrderBonds(OEConfBase self, OEBondVector arg2) -> bool"""
        return _oechem.OEConfBase_OrderBonds(self, arg2)

    def SetRxn(self, arg2: "bool") -> "bool":
        r"""SetRxn(OEConfBase self, bool arg2) -> bool"""
        return _oechem.OEConfBase_SetRxn(self, arg2)

    def IsRxn(self) -> "bool":
        r"""IsRxn(OEConfBase self) -> bool"""
        return _oechem.OEConfBase_IsRxn(self)

    def GetAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""
        GetAtoms(OEConfBase self) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAtoms(OEConfBase self, OEUnaryAtomPred arg2) -> OESystem::OEIterBase< OEChem::OEAtomBase > *
        """
        return _oechem.OEConfBase_GetAtoms(self, *args)

    def GetBonds(self, *args) -> "OESystem::OEIterBase< OEChem::OEBondBase > *":
        r"""
        GetBonds(OEConfBase self) -> OESystem::OEIterBase< OEChem::OEBondBase >
        GetBonds(OEConfBase self, OEUnaryBondPred arg2) -> OESystem::OEIterBase< OEChem::OEBondBase > *
        """
        return _oechem.OEConfBase_GetBonds(self, *args)

    def SetDimension(self, arg2: "unsigned int") -> "bool":
        r"""SetDimension(OEConfBase self, unsigned int arg2) -> bool"""
        return _oechem.OEConfBase_SetDimension(self, arg2)

    def GetDimension(self) -> "unsigned int":
        r"""GetDimension(OEConfBase self) -> unsigned int"""
        return _oechem.OEConfBase_GetDimension(self)

    def HasPerceived(self, arg2: "unsigned int") -> "bool":
        r"""HasPerceived(OEConfBase self, unsigned int arg2) -> bool"""
        return _oechem.OEConfBase_HasPerceived(self, arg2)

    def SetPerceived(self, arg2: "unsigned int", arg3: "bool") -> "bool":
        r"""SetPerceived(OEConfBase self, unsigned int arg2, bool arg3) -> bool"""
        return _oechem.OEConfBase_SetPerceived(self, arg2, arg3)

    def ResetPerceived(self) -> "void":
        r"""ResetPerceived(OEConfBase self)"""
        return _oechem.OEConfBase_ResetPerceived(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEConfBase self) -> void const *"""
        return _oechem.OEConfBase_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEConfBase self, void const * type) -> bool"""
        return _oechem.OEConfBase_IsDataType(self, type)

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEConfBase self) -> OEBase"""
        return _oechem.OEConfBase_CreateCopy(self)

    def NumGroups(self) -> "unsigned int":
        r"""NumGroups(OEConfBase self) -> unsigned int"""
        return _oechem.OEConfBase_NumGroups(self)

    def _NewGroup_Atoms(self, type: "unsigned int", atoms: "OEAtomVector") -> "OEChem::OEGroupBase *":
        r"""_NewGroup_Atoms(OEConfBase self, unsigned int type, OEAtomVector atoms) -> OEGroupBase"""
        return _oechem.OEConfBase__NewGroup_Atoms(self, type, atoms)

    def _NewGroup_Bonds(self, type: "unsigned int", bonds: "OEBondVector") -> "OEChem::OEGroupBase *":
        r"""_NewGroup_Bonds(OEConfBase self, unsigned int type, OEBondVector bonds) -> OEGroupBase"""
        return _oechem.OEConfBase__NewGroup_Bonds(self, type, bonds)

    def _NewGroup_AtomsBonds(self, type: "unsigned int", atoms: "OEAtomVector", bonds: "OEBondVector") -> "OEChem::OEGroupBase *":
        r"""_NewGroup_AtomsBonds(OEConfBase self, unsigned int type, OEAtomVector atoms, OEBondVector bonds) -> OEGroupBase"""
        return _oechem.OEConfBase__NewGroup_AtomsBonds(self, type, atoms, bonds)

    def _NewGroup_AtomBondSet(self, type: "unsigned int", abset: "OEAtomBondSet") -> "OEChem::OEGroupBase *":
        r"""_NewGroup_AtomBondSet(OEConfBase self, unsigned int type, OEAtomBondSet abset) -> OEGroupBase"""
        return _oechem.OEConfBase__NewGroup_AtomBondSet(self, type, abset)

    def DeleteGroup(self, group: "OEGroupBase") -> "bool":
        r"""DeleteGroup(OEConfBase self, OEGroupBase group) -> bool"""
        return _oechem.OEConfBase_DeleteGroup(self, group)

    def GetGroup(self, pred: "OEUnaryGroupPred") -> "OEChem::OEGroupBase *":
        r"""GetGroup(OEConfBase self, OEUnaryGroupPred pred) -> OEGroupBase"""
        return _oechem.OEConfBase_GetGroup(self, pred)

    def GetGroups(self, *args) -> "OESystem::OEIterBase< OEChem::OEGroupBase > *":
        r"""
        GetGroups(OEConfBase self) -> OESystem::OEIterBase< OEChem::OEGroupBase >
        GetGroups(OEConfBase self, OEUnaryGroupPred pred) -> OESystem::OEIterBase< OEChem::OEGroupBase > *
        """
        return _oechem.OEConfBase_GetGroups(self, *args)

    def GetCoords(self, *args) -> "PyObject *":
        r"""
        GetCoords(OEConfBase self, OEAtomBase arg2, OEHalfFloat arg3) -> bool
        GetCoords(OEConfBase self, OEAtomBase arg2, float * arg3) -> bool
        GetCoords(OEConfBase self, OEAtomBase arg2, double * arg3) -> bool
        GetCoords(OEConfBase self, OEAtomBase arg2, long double * arg3) -> bool
        GetCoords(OEConfBase self, OEHalfFloat arg2) -> bool
        GetCoords(OEConfBase self, float * arg2) -> bool
        GetCoords(OEConfBase self, double * arg2) -> bool
        GetCoords(OEConfBase self, long double * arg2) -> bool
        GetCoords(OEConfBase self, OEAtomBase atom) -> PyObject
        GetCoords(OEConfBase self) -> PyObject *
        """
        return _oechem.OEConfBase_GetCoords(self, *args)

    def SetCoords(self, *args) -> "PyObject *":
        r"""
        SetCoords(OEConfBase self, OEAtomBase arg2, OEHalfFloat arg3) -> bool
        SetCoords(OEConfBase self, OEAtomBase arg2, float const * arg3) -> bool
        SetCoords(OEConfBase self, OEAtomBase arg2, double const * arg3) -> bool
        SetCoords(OEConfBase self, OEAtomBase arg2, long double const * arg3) -> bool
        SetCoords(OEConfBase self, OEHalfFloat arg2) -> bool
        SetCoords(OEConfBase self, float const * arg2) -> bool
        SetCoords(OEConfBase self, double const * arg2) -> bool
        SetCoords(OEConfBase self, long double const * arg2) -> bool
        SetCoords(OEConfBase self, OEAtomBase atom, PyObject * input) -> PyObject
        SetCoords(OEConfBase self, PyObject * input) -> PyObject *
        """
        return _oechem.OEConfBase_SetCoords(self, *args)

# Register OEConfBase in _oechem:
_oechem.OEConfBase_swigregister(OEConfBase)

class OEConfVector(object):
    r"""Proxy of C++ std::vector< OEChem::OEConfBase * > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEConfVector self) -> SwigPyIterator"""
        return _oechem.OEConfVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEConfVector self) -> bool"""
        return _oechem.OEConfVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEConfVector self) -> bool"""
        return _oechem.OEConfVector___bool__(self)

    def __len__(self) -> "std::vector< OEChem::OEConfBase * >::size_type":
        r"""__len__(OEConfVector self) -> std::vector< OEChem::OEConfBase * >::size_type"""
        return _oechem.OEConfVector___len__(self)

    def __getslice__(self, i: "std::vector< OEChem::OEConfBase * >::difference_type", j: "std::vector< OEChem::OEConfBase * >::difference_type") -> "std::vector< OEChem::OEConfBase *,std::allocator< OEChem::OEConfBase * > > *":
        r"""__getslice__(OEConfVector self, std::vector< OEChem::OEConfBase * >::difference_type i, std::vector< OEChem::OEConfBase * >::difference_type j) -> OEConfVector"""
        return _oechem.OEConfVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEConfVector self, std::vector< OEChem::OEConfBase * >::difference_type i, std::vector< OEChem::OEConfBase * >::difference_type j)
        __setslice__(OEConfVector self, std::vector< OEChem::OEConfBase * >::difference_type i, std::vector< OEChem::OEConfBase * >::difference_type j, OEConfVector v)
        """
        return _oechem.OEConfVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< OEChem::OEConfBase * >::difference_type", j: "std::vector< OEChem::OEConfBase * >::difference_type") -> "void":
        r"""__delslice__(OEConfVector self, std::vector< OEChem::OEConfBase * >::difference_type i, std::vector< OEChem::OEConfBase * >::difference_type j)"""
        return _oechem.OEConfVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEConfVector self, std::vector< OEChem::OEConfBase * >::difference_type i)
        __delitem__(OEConfVector self, PySliceObject * slice)
        """
        return _oechem.OEConfVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< OEChem::OEConfBase * >::value_type":
        r"""
        __getitem__(OEConfVector self, PySliceObject * slice) -> OEConfVector
        __getitem__(OEConfVector self, std::vector< OEChem::OEConfBase * >::difference_type i) -> OEConfBase
        """
        return _oechem.OEConfVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEConfVector self, PySliceObject * slice, OEConfVector v)
        __setitem__(OEConfVector self, PySliceObject * slice)
        __setitem__(OEConfVector self, std::vector< OEChem::OEConfBase * >::difference_type i, OEConfBase x)
        """
        return _oechem.OEConfVector___setitem__(self, *args)

    def pop(self) -> "std::vector< OEChem::OEConfBase * >::value_type":
        r"""pop(OEConfVector self) -> OEConfBase"""
        return _oechem.OEConfVector_pop(self)

    def append(self, x: "OEConfBase") -> "void":
        r"""append(OEConfVector self, OEConfBase x)"""
        return _oechem.OEConfVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEConfVector self) -> bool"""
        return _oechem.OEConfVector_empty(self)

    def size(self) -> "std::vector< OEChem::OEConfBase * >::size_type":
        r"""size(OEConfVector self) -> std::vector< OEChem::OEConfBase * >::size_type"""
        return _oechem.OEConfVector_size(self)

    def swap(self, v: "OEConfVector") -> "void":
        r"""swap(OEConfVector self, OEConfVector v)"""
        return _oechem.OEConfVector_swap(self, v)

    def begin(self) -> "std::vector< OEChem::OEConfBase * >::iterator":
        r"""begin(OEConfVector self) -> std::vector< OEChem::OEConfBase * >::iterator"""
        return _oechem.OEConfVector_begin(self)

    def end(self) -> "std::vector< OEChem::OEConfBase * >::iterator":
        r"""end(OEConfVector self) -> std::vector< OEChem::OEConfBase * >::iterator"""
        return _oechem.OEConfVector_end(self)

    def rbegin(self) -> "std::vector< OEChem::OEConfBase * >::reverse_iterator":
        r"""rbegin(OEConfVector self) -> std::vector< OEChem::OEConfBase * >::reverse_iterator"""
        return _oechem.OEConfVector_rbegin(self)

    def rend(self) -> "std::vector< OEChem::OEConfBase * >::reverse_iterator":
        r"""rend(OEConfVector self) -> std::vector< OEChem::OEConfBase * >::reverse_iterator"""
        return _oechem.OEConfVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OEConfVector self)"""
        return _oechem.OEConfVector_clear(self)

    def get_allocator(self) -> "std::vector< OEChem::OEConfBase * >::allocator_type":
        r"""get_allocator(OEConfVector self) -> std::vector< OEChem::OEConfBase * >::allocator_type"""
        return _oechem.OEConfVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEConfVector self)"""
        return _oechem.OEConfVector_pop_back(self)

    def erase(self, *args) -> "std::vector< OEChem::OEConfBase * >::iterator":
        r"""
        erase(OEConfVector self, std::vector< OEChem::OEConfBase * >::iterator pos) -> std::vector< OEChem::OEConfBase * >::iterator
        erase(OEConfVector self, std::vector< OEChem::OEConfBase * >::iterator first, std::vector< OEChem::OEConfBase * >::iterator last) -> std::vector< OEChem::OEConfBase * >::iterator
        """
        return _oechem.OEConfVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEConfVector self) -> OEConfVector
        __init__(OEConfVector self, OEConfVector other) -> OEConfVector
        __init__(OEConfVector self, std::vector< OEChem::OEConfBase * >::size_type size) -> OEConfVector
        __init__(OEConfVector self, std::vector< OEChem::OEConfBase * >::size_type size, OEConfBase value) -> OEConfVector
        """
        _oechem.OEConfVector_swiginit(self, _oechem.new_OEConfVector(*args))

    def push_back(self, x: "OEConfBase") -> "void":
        r"""push_back(OEConfVector self, OEConfBase x)"""
        return _oechem.OEConfVector_push_back(self, x)

    def front(self) -> "std::vector< OEChem::OEConfBase * >::value_type":
        r"""front(OEConfVector self) -> OEConfBase"""
        return _oechem.OEConfVector_front(self)

    def back(self) -> "std::vector< OEChem::OEConfBase * >::value_type":
        r"""back(OEConfVector self) -> OEConfBase"""
        return _oechem.OEConfVector_back(self)

    def assign(self, n: "std::vector< OEChem::OEConfBase * >::size_type", x: "OEConfBase") -> "void":
        r"""assign(OEConfVector self, std::vector< OEChem::OEConfBase * >::size_type n, OEConfBase x)"""
        return _oechem.OEConfVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEConfVector self, std::vector< OEChem::OEConfBase * >::size_type new_size)
        resize(OEConfVector self, std::vector< OEChem::OEConfBase * >::size_type new_size, OEConfBase x)
        """
        return _oechem.OEConfVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEConfVector self, std::vector< OEChem::OEConfBase * >::iterator pos, OEConfBase x) -> std::vector< OEChem::OEConfBase * >::iterator
        insert(OEConfVector self, std::vector< OEChem::OEConfBase * >::iterator pos, std::vector< OEChem::OEConfBase * >::size_type n, OEConfBase x)
        """
        return _oechem.OEConfVector_insert(self, *args)

    def reserve(self, n: "std::vector< OEChem::OEConfBase * >::size_type") -> "void":
        r"""reserve(OEConfVector self, std::vector< OEChem::OEConfBase * >::size_type n)"""
        return _oechem.OEConfVector_reserve(self, n)

    def capacity(self) -> "std::vector< OEChem::OEConfBase * >::size_type":
        r"""capacity(OEConfVector self) -> std::vector< OEChem::OEConfBase * >::size_type"""
        return _oechem.OEConfVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OEConfVector

# Register OEConfVector in _oechem:
_oechem.OEConfVector_swigregister(OEConfVector)

class OEMCMolBase(OEMolBase):
    r"""Proxy of C++ OEChem::OEMCMolBase 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__ = _oechem.delete_OEMCMolBase

    def SetActive(self, arg2: "OEConfBase") -> "bool":
        r"""SetActive(OEMCMolBase self, OEConfBase arg2) -> bool"""
        return _oechem.OEMCMolBase_SetActive(self, arg2)

    def GetActive(self) -> "OEChem::OEConfBase *":
        r"""GetActive(OEMCMolBase self) -> OEConfBase"""
        return _oechem.OEMCMolBase_GetActive(self)

    def PushActive(self, arg2: "OEConfBase") -> "bool":
        r"""PushActive(OEMCMolBase self, OEConfBase arg2) -> bool"""
        return _oechem.OEMCMolBase_PushActive(self, arg2)

    def PopActive(self) -> "void":
        r"""PopActive(OEMCMolBase self)"""
        return _oechem.OEMCMolBase_PopActive(self)

    def GetMaxConfIdx(self) -> "unsigned int":
        r"""GetMaxConfIdx(OEMCMolBase self) -> unsigned int"""
        return _oechem.OEMCMolBase_GetMaxConfIdx(self)

    def NewConf(self, *args) -> "OEChem::OEConfBase *":
        r"""
        NewConf(OEMCMolBase self) -> OEConfBase
        NewConf(OEMCMolBase self, OEHalfFloat arg2) -> OEConfBase
        NewConf(OEMCMolBase self, float const * arg2) -> OEConfBase
        NewConf(OEMCMolBase self, double const * arg2) -> OEConfBase
        NewConf(OEMCMolBase self, long double const * arg2) -> OEConfBase
        NewConf(OEMCMolBase self, OEMolBase arg2) -> OEConfBase
        NewConf(OEMCMolBase self, OEConfBase arg2) -> OEConfBase
        NewConf(OEMCMolBase self, OEConfBase arg2, std::vector< OEChem::OETorsion,std::allocator< OEChem::OETorsion > > & t) -> OEConfBase
        NewConf(OEMCMolBase self, OEConfBase arg2, OETrans arg3) -> OEConfBase
        """
        return _oechem.OEMCMolBase_NewConf(self, *args)

    def NumConfs(self) -> "unsigned int":
        r"""NumConfs(OEMCMolBase self) -> unsigned int"""
        return _oechem.OEMCMolBase_NumConfs(self)

    def GetConf(self, arg2: "OEUnaryConfPred") -> "OEChem::OEConfBase *":
        r"""GetConf(OEMCMolBase self, OEUnaryConfPred arg2) -> OEConfBase"""
        return _oechem.OEMCMolBase_GetConf(self, arg2)

    def DeleteConfs(self) -> "void":
        r"""DeleteConfs(OEMCMolBase self)"""
        return _oechem.OEMCMolBase_DeleteConfs(self)

    def DeleteConf(self, arg2: "OEConfBase") -> "bool":
        r"""DeleteConf(OEMCMolBase self, OEConfBase arg2) -> bool"""
        return _oechem.OEMCMolBase_DeleteConf(self, arg2)

    def SweepConfs(self) -> "bool":
        r"""SweepConfs(OEMCMolBase self) -> bool"""
        return _oechem.OEMCMolBase_SweepConfs(self)

    def OrderConfs(self, arg2: "OEConfVector") -> "bool":
        r"""OrderConfs(OEMCMolBase self, OEConfVector arg2) -> bool"""
        return _oechem.OEMCMolBase_OrderConfs(self, arg2)

    def GetConfs(self, *args) -> "OESystem::OEIterBase< OEChem::OEConfBase > *":
        r"""
        GetConfs(OEMCMolBase self) -> OESystem::OEIterBase< OEChem::OEConfBase >
        GetConfs(OEMCMolBase self, OEUnaryConfPred arg2) -> OESystem::OEIterBase< OEChem::OEConfBase > *
        """
        return _oechem.OEMCMolBase_GetConfs(self, *args)

    def Clear(self) -> "void":
        r"""Clear(OEMCMolBase self)"""
        return _oechem.OEMCMolBase_Clear(self)

    def ClearMolBase(self) -> "void":
        r"""ClearMolBase(OEMCMolBase self)"""
        return _oechem.OEMCMolBase_ClearMolBase(self)

    def ClearBase(self) -> "void":
        r"""ClearBase(OEMCMolBase self)"""
        return _oechem.OEMCMolBase_ClearBase(self)

    def ClearMCMol(self) -> "void":
        r"""ClearMCMol(OEMCMolBase self)"""
        return _oechem.OEMCMolBase_ClearMCMol(self)

    def Compress(self) -> "bool":
        r"""Compress(OEMCMolBase self) -> bool"""
        return _oechem.OEMCMolBase_Compress(self)

    def UnCompress(self) -> "bool":
        r"""UnCompress(OEMCMolBase self) -> bool"""
        return _oechem.OEMCMolBase_UnCompress(self)

    def NumAtoms(self) -> "unsigned int":
        r"""NumAtoms(OEMCMolBase self) -> unsigned int"""
        return _oechem.OEMCMolBase_NumAtoms(self)

    def NumBonds(self) -> "unsigned int":
        r"""NumBonds(OEMCMolBase self) -> unsigned int"""
        return _oechem.OEMCMolBase_NumBonds(self)

    def Count(self, arg2: "unsigned int") -> "unsigned int":
        r"""Count(OEMCMolBase self, unsigned int arg2) -> unsigned int"""
        return _oechem.OEMCMolBase_Count(self, arg2)

    def IsValid(self):
      return _oechem.OEMCMolBase___nonzero__(self)



    def SetEnergy(self, arg2: "double") -> "bool":
        r"""SetEnergy(OEMCMolBase self, double arg2) -> bool"""
        return _oechem.OEMCMolBase_SetEnergy(self, arg2)

    def SetTitle(self, arg2: "char const *") -> "bool":
        r"""SetTitle(OEMCMolBase self, char const * arg2) -> bool"""
        return _oechem.OEMCMolBase_SetTitle(self, arg2)

    def ClearCoords(self) -> "void":
        r"""ClearCoords(OEMCMolBase self)"""
        return _oechem.OEMCMolBase_ClearCoords(self)

    def GetEnergy(self) -> "double":
        r"""GetEnergy(OEMCMolBase self) -> double"""
        return _oechem.OEMCMolBase_GetEnergy(self)

    def GetMaxAtomIdx(self) -> "unsigned int":
        r"""GetMaxAtomIdx(OEMCMolBase self) -> unsigned int"""
        return _oechem.OEMCMolBase_GetMaxAtomIdx(self)

    def GetMaxBondIdx(self) -> "unsigned int":
        r"""GetMaxBondIdx(OEMCMolBase self) -> unsigned int"""
        return _oechem.OEMCMolBase_GetMaxBondIdx(self)

    def GetTitle(self) -> "char const *":
        r"""GetTitle(OEMCMolBase self) -> char const *"""
        return _oechem.OEMCMolBase_GetTitle(self)

    def GetMCMolTitle(self) -> "char const *":
        r"""GetMCMolTitle(OEMCMolBase self) -> char const *"""
        return _oechem.OEMCMolBase_GetMCMolTitle(self)

    def GetAtom(self, arg2: "OEUnaryAtomPred") -> "OEChem::OEAtomBase *":
        r"""GetAtom(OEMCMolBase self, OEUnaryAtomPred arg2) -> OEAtomBase"""
        return _oechem.OEMCMolBase_GetAtom(self, arg2)

    def GetBond(self, *args) -> "OEChem::OEBondBase *":
        r"""
        GetBond(OEMCMolBase self, OEUnaryBondPred arg2) -> OEBondBase
        GetBond(OEMCMolBase self, OEAtomBase arg2, OEAtomBase arg3) -> OEBondBase
        """
        return _oechem.OEMCMolBase_GetBond(self, *args)

    def NewAtom(self, *args) -> "OEChem::OEAtomBase *":
        r"""
        NewAtom(OEMCMolBase self, unsigned int arg2) -> OEAtomBase
        NewAtom(OEMCMolBase self, OEAtomBase arg2) -> OEAtomBase
        """
        return _oechem.OEMCMolBase_NewAtom(self, *args)

    def NewBond(self, arg2: "OEAtomBase", arg3: "OEAtomBase", order: "unsigned int"=0) -> "OEChem::OEBondBase *":
        r"""NewBond(OEMCMolBase self, OEAtomBase arg2, OEAtomBase arg3, unsigned int order=0) -> OEBondBase"""
        return _oechem.OEMCMolBase_NewBond(self, arg2, arg3, order)

    def DeleteAtom(self, arg2: "OEAtomBase") -> "bool":
        r"""DeleteAtom(OEMCMolBase self, OEAtomBase arg2) -> bool"""
        return _oechem.OEMCMolBase_DeleteAtom(self, arg2)

    def DeleteBond(self, arg2: "OEBondBase") -> "bool":
        r"""DeleteBond(OEMCMolBase self, OEBondBase arg2) -> bool"""
        return _oechem.OEMCMolBase_DeleteBond(self, arg2)

    def IsDeleted(self, *args) -> "bool":
        r"""
        IsDeleted(OEMCMolBase self, OEConfBase arg2) -> bool
        IsDeleted(OEMCMolBase self, OEAtomBase arg2) -> bool
        IsDeleted(OEMCMolBase self, OEBondBase arg2) -> bool
        """
        return _oechem.OEMCMolBase_IsDeleted(self, *args)

    def Sweep(self) -> "bool":
        r"""Sweep(OEMCMolBase self) -> bool"""
        return _oechem.OEMCMolBase_Sweep(self)

    def OrderAtoms(self, arg2: "OEAtomVector") -> "bool":
        r"""OrderAtoms(OEMCMolBase self, OEAtomVector arg2) -> bool"""
        return _oechem.OEMCMolBase_OrderAtoms(self, arg2)

    def OrderBonds(self, arg2: "OEBondVector") -> "bool":
        r"""OrderBonds(OEMCMolBase self, OEBondVector arg2) -> bool"""
        return _oechem.OEMCMolBase_OrderBonds(self, arg2)

    def GetAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""
        GetAtoms(OEMCMolBase self) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAtoms(OEMCMolBase self, OEUnaryAtomPred arg2) -> OESystem::OEIterBase< OEChem::OEAtomBase > *
        """
        return _oechem.OEMCMolBase_GetAtoms(self, *args)

    def GetBonds(self, *args) -> "OESystem::OEIterBase< OEChem::OEBondBase > *":
        r"""
        GetBonds(OEMCMolBase self) -> OESystem::OEIterBase< OEChem::OEBondBase >
        GetBonds(OEMCMolBase self, OEUnaryBondPred arg2) -> OESystem::OEIterBase< OEChem::OEBondBase > *
        """
        return _oechem.OEMCMolBase_GetBonds(self, *args)

    def SetDimension(self, arg2: "unsigned int") -> "bool":
        r"""SetDimension(OEMCMolBase self, unsigned int arg2) -> bool"""
        return _oechem.OEMCMolBase_SetDimension(self, arg2)

    def GetDimension(self) -> "unsigned int":
        r"""GetDimension(OEMCMolBase self) -> unsigned int"""
        return _oechem.OEMCMolBase_GetDimension(self)

    def HasPerceived(self, tag: "unsigned int") -> "bool":
        r"""HasPerceived(OEMCMolBase self, unsigned int tag) -> bool"""
        return _oechem.OEMCMolBase_HasPerceived(self, tag)

    def SetPerceived(self, tag: "unsigned int", arg3: "bool") -> "bool":
        r"""SetPerceived(OEMCMolBase self, unsigned int tag, bool arg3) -> bool"""
        return _oechem.OEMCMolBase_SetPerceived(self, tag, arg3)

    def ResetPerceived(self) -> "void":
        r"""ResetPerceived(OEMCMolBase self)"""
        return _oechem.OEMCMolBase_ResetPerceived(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEMCMolBase self) -> void const *"""
        return _oechem.OEMCMolBase_GetDataType(self)

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEMCMolBase self) -> OEBase"""
        return _oechem.OEMCMolBase_CreateCopy(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEMCMolBase self, void const * type) -> bool"""
        return _oechem.OEMCMolBase_IsDataType(self, type)

    def NumGroups(self) -> "unsigned int":
        r"""NumGroups(OEMCMolBase self) -> unsigned int"""
        return _oechem.OEMCMolBase_NumGroups(self)

    def _NewGroup_Atoms(self, type: "unsigned int", atoms: "OEAtomVector") -> "OEChem::OEGroupBase *":
        r"""_NewGroup_Atoms(OEMCMolBase self, unsigned int type, OEAtomVector atoms) -> OEGroupBase"""
        return _oechem.OEMCMolBase__NewGroup_Atoms(self, type, atoms)

    def _NewGroup_Bonds(self, type: "unsigned int", bonds: "OEBondVector") -> "OEChem::OEGroupBase *":
        r"""_NewGroup_Bonds(OEMCMolBase self, unsigned int type, OEBondVector bonds) -> OEGroupBase"""
        return _oechem.OEMCMolBase__NewGroup_Bonds(self, type, bonds)

    def _NewGroup_AtomsBonds(self, type: "unsigned int", atoms: "OEAtomVector", bonds: "OEBondVector") -> "OEChem::OEGroupBase *":
        r"""_NewGroup_AtomsBonds(OEMCMolBase self, unsigned int type, OEAtomVector atoms, OEBondVector bonds) -> OEGroupBase"""
        return _oechem.OEMCMolBase__NewGroup_AtomsBonds(self, type, atoms, bonds)

    def _NewGroup_AtomBondSet(self, type: "unsigned int", abset: "OEAtomBondSet") -> "OEChem::OEGroupBase *":
        r"""_NewGroup_AtomBondSet(OEMCMolBase self, unsigned int type, OEAtomBondSet abset) -> OEGroupBase"""
        return _oechem.OEMCMolBase__NewGroup_AtomBondSet(self, type, abset)

    def DeleteGroup(self, group: "OEGroupBase") -> "bool":
        r"""DeleteGroup(OEMCMolBase self, OEGroupBase group) -> bool"""
        return _oechem.OEMCMolBase_DeleteGroup(self, group)

    def GetGroup(self, pred: "OEUnaryGroupPred") -> "OEChem::OEGroupBase *":
        r"""GetGroup(OEMCMolBase self, OEUnaryGroupPred pred) -> OEGroupBase"""
        return _oechem.OEMCMolBase_GetGroup(self, pred)

    def GetGroups(self, *args) -> "OESystem::OEIterBase< OEChem::OEGroupBase > *":
        r"""
        GetGroups(OEMCMolBase self) -> OESystem::OEIterBase< OEChem::OEGroupBase >
        GetGroups(OEMCMolBase self, OEUnaryGroupPred pred) -> OESystem::OEIterBase< OEChem::OEGroupBase > *
        """
        return _oechem.OEMCMolBase_GetGroups(self, *args)

    def GetCoords(self, *args) -> "PyObject *":
        r"""
        GetCoords(OEMCMolBase self, OEAtomBase arg2, OEHalfFloat arg3) -> bool
        GetCoords(OEMCMolBase self, OEAtomBase arg2, float * arg3) -> bool
        GetCoords(OEMCMolBase self, OEAtomBase arg2, double * arg3) -> bool
        GetCoords(OEMCMolBase self, OEAtomBase arg2, long double * arg3) -> bool
        GetCoords(OEMCMolBase self, OEHalfFloat arg2) -> bool
        GetCoords(OEMCMolBase self, float * arg2) -> bool
        GetCoords(OEMCMolBase self, double * arg2) -> bool
        GetCoords(OEMCMolBase self, long double * arg2) -> bool
        GetCoords(OEMCMolBase self, OEAtomBase atom) -> PyObject
        GetCoords(OEMCMolBase self) -> PyObject *
        """
        return _oechem.OEMCMolBase_GetCoords(self, *args)

    def SetCoords(self, *args) -> "PyObject *":
        r"""
        SetCoords(OEMCMolBase self, OEAtomBase arg2, OEHalfFloat arg3) -> bool
        SetCoords(OEMCMolBase self, OEAtomBase arg2, float const * arg3) -> bool
        SetCoords(OEMCMolBase self, OEAtomBase arg2, double const * arg3) -> bool
        SetCoords(OEMCMolBase self, OEAtomBase arg2, long double const * arg3) -> bool
        SetCoords(OEMCMolBase self, OEHalfFloat arg2) -> bool
        SetCoords(OEMCMolBase self, float const * arg2) -> bool
        SetCoords(OEMCMolBase self, double const * arg2) -> bool
        SetCoords(OEMCMolBase self, long double const * arg2) -> bool
        SetCoords(OEMCMolBase self, OEAtomBase atom, PyObject * input) -> PyObject
        SetCoords(OEMCMolBase self, PyObject * input) -> PyObject *
        """
        return _oechem.OEMCMolBase_SetCoords(self, *args)

# Register OEMCMolBase in _oechem:
_oechem.OEMCMolBase_swigregister(OEMCMolBase)


def OESetOEGraphMol(obj: "OEBase", t: "char const *", s: "OEGraphMol") -> "bool":
    r"""OESetOEGraphMol(OEBase obj, char const * t, OEGraphMol s) -> bool"""
    return _oechem.OESetOEGraphMol(obj, t, s)

def OEGetOEGraphMol(obj: "OEBase", t: "char const *") -> "OEGraphMolWrapper":
    r"""OEGetOEGraphMol(OEBase obj, char const * t) -> OEGraphMol"""
    return _oechem.OEGetOEGraphMol(obj, t)

def OESetOEMol(obj: "OEBase", t: "char const *", s: "OEMol") -> "bool":
    r"""OESetOEMol(OEBase obj, char const * t, OEMol s) -> bool"""
    return _oechem.OESetOEMol(obj, t, s)

def OEGetOEMol(obj: "OEBase", t: "char const *") -> "OEMolWrapper":
    r"""OEGetOEMol(OEBase obj, char const * t) -> OEMol"""
    return _oechem.OEGetOEMol(obj, t)

def OESetOEQMol(obj: "OEBase", t: "char const *", s: "OEQMol") -> "bool":
    r"""OESetOEQMol(OEBase obj, char const * t, OEQMol s) -> bool"""
    return _oechem.OESetOEQMol(obj, t, s)

def OEGetOEQMol(obj: "OEBase", t: "char const *") -> "OEQMolWrapper":
    r"""OEGetOEQMol(OEBase obj, char const * t) -> OEQMol"""
    return _oechem.OEGetOEQMol(obj, t)

def OEGetOEContainer(obj: "OEBase", t: "char const *") -> "OESystem::OEContainer":
    r"""OEGetOEContainer(OEBase obj, char const * t) -> OEContainer"""
    return _oechem.OEGetOEContainer(obj, t)

def OESetOEContainer(obj: "OEBase", t: "char const *", c: "OEContainer") -> "bool":
    r"""OESetOEContainer(OEBase obj, char const * t, OEContainer c) -> bool"""
    return _oechem.OESetOEContainer(obj, t, c)
class OEGraphMol(OEMolBase):
    r"""Proxy of C++ OEGraphMolWrapper 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__(OEGraphMol self, unsigned int t=OEChem::OEGraphMolType::OEDefault) -> OEGraphMol
        __init__(OEGraphMol self, OEGraphMol mol, unsigned int t) -> OEGraphMol
        __init__(OEGraphMol self, OEGraphMol mol) -> OEGraphMol
        __init__(OEGraphMol self, OEMolBase mol, unsigned int t) -> OEGraphMol
        __init__(OEGraphMol self, OEMolBase mol) -> OEGraphMol
        __init__(OEGraphMol self, OEQMolBase mol, unsigned int t=OEChem::OEGraphMolType::OEDefault) -> OEGraphMol
        __init__(OEGraphMol self, OEMCMolBase mol, unsigned int t=OEChem::OEGraphMolType::OEDefault) -> OEGraphMol
        """
        _oechem.OEGraphMol_swiginit(self, _oechem.new_OEGraphMol(*args))
    __swig_destroy__ = _oechem.delete_OEGraphMol

    def Clear(self) -> "void":
        r"""Clear(OEGraphMol self)"""
        return _oechem.OEGraphMol_Clear(self)

    def Compress(self) -> "bool":
        r"""Compress(OEGraphMol self) -> bool"""
        return _oechem.OEGraphMol_Compress(self)

    def UnCompress(self) -> "bool":
        r"""UnCompress(OEGraphMol self) -> bool"""
        return _oechem.OEGraphMol_UnCompress(self)

    def NumAtoms(self) -> "unsigned int":
        r"""NumAtoms(OEGraphMol self) -> unsigned int"""
        return _oechem.OEGraphMol_NumAtoms(self)

    def NumBonds(self) -> "unsigned int":
        r"""NumBonds(OEGraphMol self) -> unsigned int"""
        return _oechem.OEGraphMol_NumBonds(self)

    def Count(self, i: "unsigned int") -> "unsigned int":
        r"""Count(OEGraphMol self, unsigned int i) -> unsigned int"""
        return _oechem.OEGraphMol_Count(self, i)

    def IsValid(self):
      return _oechem.OEGraphMol___nonzero__(self)



    def SetEnergy(self, e: "double") -> "bool":
        r"""SetEnergy(OEGraphMol self, double e) -> bool"""
        return _oechem.OEGraphMol_SetEnergy(self, e)

    def SetTitle(self, t: "char const *") -> "bool":
        r"""SetTitle(OEGraphMol self, char const * t) -> bool"""
        return _oechem.OEGraphMol_SetTitle(self, t)

    def ClearCoords(self) -> "void":
        r"""ClearCoords(OEGraphMol self)"""
        return _oechem.OEGraphMol_ClearCoords(self)

    def GetEnergy(self) -> "double":
        r"""GetEnergy(OEGraphMol self) -> double"""
        return _oechem.OEGraphMol_GetEnergy(self)

    def GetMaxAtomIdx(self) -> "unsigned int":
        r"""GetMaxAtomIdx(OEGraphMol self) -> unsigned int"""
        return _oechem.OEGraphMol_GetMaxAtomIdx(self)

    def GetMaxBondIdx(self) -> "unsigned int":
        r"""GetMaxBondIdx(OEGraphMol self) -> unsigned int"""
        return _oechem.OEGraphMol_GetMaxBondIdx(self)

    def GetTitle(self) -> "char const *":
        r"""GetTitle(OEGraphMol self) -> char const *"""
        return _oechem.OEGraphMol_GetTitle(self)

    def GetAtom(self, pred: "OEUnaryAtomPred") -> "OEChem::OEAtomBase *":
        r"""GetAtom(OEGraphMol self, OEUnaryAtomPred pred) -> OEAtomBase"""
        return _oechem.OEGraphMol_GetAtom(self, pred)

    def GetBond(self, *args) -> "OEChem::OEBondBase *":
        r"""
        GetBond(OEGraphMol self, OEUnaryBondPred pred) -> OEBondBase
        GetBond(OEGraphMol self, OEAtomBase a1, OEAtomBase a2) -> OEBondBase
        """
        return _oechem.OEGraphMol_GetBond(self, *args)

    def NewAtom(self, *args) -> "OEChem::OEAtomBase *":
        r"""
        NewAtom(OEGraphMol self, unsigned int element) -> OEAtomBase
        NewAtom(OEGraphMol self, OEAtomBase a) -> OEAtomBase
        """
        return _oechem.OEGraphMol_NewAtom(self, *args)

    def NewBond(self, a1: "OEAtomBase", a2: "OEAtomBase", order: "unsigned int"=0) -> "OEChem::OEBondBase *":
        r"""NewBond(OEGraphMol self, OEAtomBase a1, OEAtomBase a2, unsigned int order=0) -> OEBondBase"""
        return _oechem.OEGraphMol_NewBond(self, a1, a2, order)

    def DeleteAtom(self, a: "OEAtomBase") -> "bool":
        r"""DeleteAtom(OEGraphMol self, OEAtomBase a) -> bool"""
        return _oechem.OEGraphMol_DeleteAtom(self, a)

    def DeleteBond(self, b: "OEBondBase") -> "bool":
        r"""DeleteBond(OEGraphMol self, OEBondBase b) -> bool"""
        return _oechem.OEGraphMol_DeleteBond(self, b)

    def IsDeleted(self, *args) -> "bool":
        r"""
        IsDeleted(OEGraphMol self, OEAtomBase a) -> bool
        IsDeleted(OEGraphMol self, OEBondBase b) -> bool
        """
        return _oechem.OEGraphMol_IsDeleted(self, *args)

    def Sweep(self) -> "bool":
        r"""Sweep(OEGraphMol self) -> bool"""
        return _oechem.OEGraphMol_Sweep(self)

    def OrderAtoms(self, va: "OEAtomVector") -> "bool":
        r"""OrderAtoms(OEGraphMol self, OEAtomVector va) -> bool"""
        return _oechem.OEGraphMol_OrderAtoms(self, va)

    def OrderBonds(self, vb: "OEBondVector") -> "bool":
        r"""OrderBonds(OEGraphMol self, OEBondVector vb) -> bool"""
        return _oechem.OEGraphMol_OrderBonds(self, vb)

    def SetRxn(self, b: "bool") -> "bool":
        r"""SetRxn(OEGraphMol self, bool b) -> bool"""
        return _oechem.OEGraphMol_SetRxn(self, b)

    def IsRxn(self) -> "bool":
        r"""IsRxn(OEGraphMol self) -> bool"""
        return _oechem.OEGraphMol_IsRxn(self)

    def GetAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""
        GetAtoms(OEGraphMol self) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAtoms(OEGraphMol self, OEUnaryAtomPred pred) -> OESystem::OEIterBase< OEChem::OEAtomBase > *
        """
        return _oechem.OEGraphMol_GetAtoms(self, *args)

    def GetBonds(self, *args) -> "OESystem::OEIterBase< OEChem::OEBondBase > *":
        r"""
        GetBonds(OEGraphMol self) -> OESystem::OEIterBase< OEChem::OEBondBase >
        GetBonds(OEGraphMol self, OEUnaryBondPred pred) -> OESystem::OEIterBase< OEChem::OEBondBase > *
        """
        return _oechem.OEGraphMol_GetBonds(self, *args)

    def SetDimension(self, d: "unsigned int") -> "bool":
        r"""SetDimension(OEGraphMol self, unsigned int d) -> bool"""
        return _oechem.OEGraphMol_SetDimension(self, d)

    def GetDimension(self) -> "unsigned int":
        r"""GetDimension(OEGraphMol self) -> unsigned int"""
        return _oechem.OEGraphMol_GetDimension(self)

    def HasPerceived(self, flag: "unsigned int") -> "bool":
        r"""HasPerceived(OEGraphMol self, unsigned int flag) -> bool"""
        return _oechem.OEGraphMol_HasPerceived(self, flag)

    def SetPerceived(self, flag: "unsigned int", b: "bool") -> "bool":
        r"""SetPerceived(OEGraphMol self, unsigned int flag, bool b) -> bool"""
        return _oechem.OEGraphMol_SetPerceived(self, flag, b)

    def ResetPerceived(self) -> "void":
        r"""ResetPerceived(OEGraphMol self)"""
        return _oechem.OEGraphMol_ResetPerceived(self)

    def SCMol(self, *args) -> "OEChem::OEMolBase &":
        r"""
        SCMol(OEGraphMol self) -> OEMolBase
        SCMol(OEGraphMol self) -> OEMolBase
        """
        return _oechem.OEGraphMol_SCMol(self, *args)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEGraphMol self) -> void const *"""
        return _oechem.OEGraphMol_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEGraphMol self, void const * type) -> bool"""
        return _oechem.OEGraphMol_IsDataType(self, type)

    def GetCoords(self, *args) -> "PyObject *":
        r"""
        GetCoords(OEGraphMol self, OEAtomBase atom, OEHalfFloat xyz) -> bool
        GetCoords(OEGraphMol self, OEAtomBase atom, float * xyz) -> bool
        GetCoords(OEGraphMol self, OEAtomBase atom, double * xyz) -> bool
        GetCoords(OEGraphMol self, OEAtomBase atom, long double * xyz) -> bool
        GetCoords(OEGraphMol self, OEHalfFloat xyz) -> bool
        GetCoords(OEGraphMol self, float * xyz) -> bool
        GetCoords(OEGraphMol self, double * xyz) -> bool
        GetCoords(OEGraphMol self, long double * xyz) -> bool
        GetCoords(OEGraphMol self, OEAtomBase atom) -> PyObject
        GetCoords(OEGraphMol self) -> PyObject *
        """
        return _oechem.OEGraphMol_GetCoords(self, *args)

    def SetCoords(self, *args) -> "PyObject *":
        r"""
        SetCoords(OEGraphMol self, OEAtomBase atom, OEHalfFloat xyz) -> bool
        SetCoords(OEGraphMol self, OEAtomBase atom, float const * xyz) -> bool
        SetCoords(OEGraphMol self, OEAtomBase atom, double const * xyz) -> bool
        SetCoords(OEGraphMol self, OEAtomBase atom, long double const * xyz) -> bool
        SetCoords(OEGraphMol self, OEHalfFloat xyz) -> bool
        SetCoords(OEGraphMol self, float const * xyz) -> bool
        SetCoords(OEGraphMol self, double const * xyz) -> bool
        SetCoords(OEGraphMol self, long double const * xyz) -> bool
        SetCoords(OEGraphMol self, OEAtomBase atom, PyObject * input) -> PyObject
        SetCoords(OEGraphMol self, PyObject * input) -> PyObject *
        """
        return _oechem.OEGraphMol_SetCoords(self, *args)

    def __getstate__(self):
        return OEWriteMolToBytes(".oeb", self)



    def __setstate__(self, state):
        mol = OEGraphMol()
        if OEReadMolFromBytes(mol, ".oeb", state):
            self.__init__(mol)
        else:
            self.__init__()
        del mol



# Register OEGraphMol in _oechem:
_oechem.OEGraphMol_swigregister(OEGraphMol)

class OEMol(OEMCMolBase):
    r"""Proxy of C++ OEMolWrapper 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__(OEMol self, unsigned int t=OEChem::OEMolType::OEDefault) -> OEMol
        __init__(OEMol self, OEMol mol) -> OEMol
        __init__(OEMol self, OEMol mol, unsigned int t) -> OEMol
        __init__(OEMol self, OEBase b, unsigned int t=OEChem::OEMolType::OEDefault) -> OEMol
        __init__(OEMol self, OEMolBase m, unsigned int t=OEChem::OEMolType::OEDefault) -> OEMol
        __init__(OEMol self, OEQMolBase m, unsigned int t=OEChem::OEMolType::OEDefault) -> OEMol
        __init__(OEMol self, OEMCMolBase m) -> OEMol
        __init__(OEMol self, OEMCMolBase m, unsigned int t) -> OEMol
        """
        _oechem.OEMol_swiginit(self, _oechem.new_OEMol(*args))
    __swig_destroy__ = _oechem.delete_OEMol

    def ClearMolBase(self) -> "void":
        r"""ClearMolBase(OEMol self)"""
        return _oechem.OEMol_ClearMolBase(self)

    def ClearBase(self) -> "void":
        r"""ClearBase(OEMol self)"""
        return _oechem.OEMol_ClearBase(self)

    def ClearMCMol(self) -> "void":
        r"""ClearMCMol(OEMol self)"""
        return _oechem.OEMol_ClearMCMol(self)

    def SetActive(self, c: "OEConfBase") -> "bool":
        r"""SetActive(OEMol self, OEConfBase c) -> bool"""
        return _oechem.OEMol_SetActive(self, c)

    def GetActive(self) -> "OEChem::OEConfBase *":
        r"""GetActive(OEMol self) -> OEConfBase"""
        return _oechem.OEMol_GetActive(self)

    def PushActive(self, c: "OEConfBase") -> "bool":
        r"""PushActive(OEMol self, OEConfBase c) -> bool"""
        return _oechem.OEMol_PushActive(self, c)

    def PopActive(self) -> "void":
        r"""PopActive(OEMol self)"""
        return _oechem.OEMol_PopActive(self)

    def GetMaxConfIdx(self) -> "unsigned int":
        r"""GetMaxConfIdx(OEMol self) -> unsigned int"""
        return _oechem.OEMol_GetMaxConfIdx(self)

    def NewConf(self, *args) -> "OEChem::OEConfBase *":
        r"""
        NewConf(OEMol self) -> OEConfBase
        NewConf(OEMol self, OEHalfFloat coords) -> OEConfBase
        NewConf(OEMol self, float const * coords) -> OEConfBase
        NewConf(OEMol self, double const * coords) -> OEConfBase
        NewConf(OEMol self, long double const * coords) -> OEConfBase
        NewConf(OEMol self, OEMolBase m) -> OEConfBase
        NewConf(OEMol self, OEConfBase c) -> OEConfBase
        NewConf(OEMol self, OEConfBase c, std::vector< OEChem::OETorsion,std::allocator< OEChem::OETorsion > > & t) -> OEConfBase
        NewConf(OEMol self, OEConfBase c, OETrans t) -> OEConfBase
        """
        return _oechem.OEMol_NewConf(self, *args)

    def NumConfs(self) -> "unsigned int":
        r"""NumConfs(OEMol self) -> unsigned int"""
        return _oechem.OEMol_NumConfs(self)

    def GetConf(self, p: "OEUnaryConfPred") -> "OEChem::OEConfBase *":
        r"""GetConf(OEMol self, OEUnaryConfPred p) -> OEConfBase"""
        return _oechem.OEMol_GetConf(self, p)

    def DeleteConfs(self) -> "void":
        r"""DeleteConfs(OEMol self)"""
        return _oechem.OEMol_DeleteConfs(self)

    def DeleteConf(self, c: "OEConfBase") -> "bool":
        r"""DeleteConf(OEMol self, OEConfBase c) -> bool"""
        return _oechem.OEMol_DeleteConf(self, c)

    def SweepConfs(self) -> "bool":
        r"""SweepConfs(OEMol self) -> bool"""
        return _oechem.OEMol_SweepConfs(self)

    def OrderConfs(self, vc: "OEConfVector") -> "bool":
        r"""OrderConfs(OEMol self, OEConfVector vc) -> bool"""
        return _oechem.OEMol_OrderConfs(self, vc)

    def GetConfs(self, *args) -> "OESystem::OEIterBase< OEChem::OEConfBase > *":
        r"""
        GetConfs(OEMol self) -> OESystem::OEIterBase< OEChem::OEConfBase >
        GetConfs(OEMol self, OEUnaryConfPred pred) -> OESystem::OEIterBase< OEChem::OEConfBase > *
        """
        return _oechem.OEMol_GetConfs(self, *args)

    def Clear(self) -> "void":
        r"""Clear(OEMol self)"""
        return _oechem.OEMol_Clear(self)

    def Compress(self) -> "bool":
        r"""Compress(OEMol self) -> bool"""
        return _oechem.OEMol_Compress(self)

    def UnCompress(self) -> "bool":
        r"""UnCompress(OEMol self) -> bool"""
        return _oechem.OEMol_UnCompress(self)

    def NumAtoms(self) -> "unsigned int":
        r"""NumAtoms(OEMol self) -> unsigned int"""
        return _oechem.OEMol_NumAtoms(self)

    def NumBonds(self) -> "unsigned int":
        r"""NumBonds(OEMol self) -> unsigned int"""
        return _oechem.OEMol_NumBonds(self)

    def Count(self, i: "unsigned int") -> "unsigned int":
        r"""Count(OEMol self, unsigned int i) -> unsigned int"""
        return _oechem.OEMol_Count(self, i)

    def IsValid(self):
      return _oechem.OEMol___nonzero__(self)



    def SetEnergy(self, e: "double") -> "bool":
        r"""SetEnergy(OEMol self, double e) -> bool"""
        return _oechem.OEMol_SetEnergy(self, e)

    def SetTitle(self, t: "char const *") -> "bool":
        r"""SetTitle(OEMol self, char const * t) -> bool"""
        return _oechem.OEMol_SetTitle(self, t)

    def ClearCoords(self) -> "void":
        r"""ClearCoords(OEMol self)"""
        return _oechem.OEMol_ClearCoords(self)

    def GetEnergy(self) -> "double":
        r"""GetEnergy(OEMol self) -> double"""
        return _oechem.OEMol_GetEnergy(self)

    def GetMaxAtomIdx(self) -> "unsigned int":
        r"""GetMaxAtomIdx(OEMol self) -> unsigned int"""
        return _oechem.OEMol_GetMaxAtomIdx(self)

    def GetMaxBondIdx(self) -> "unsigned int":
        r"""GetMaxBondIdx(OEMol self) -> unsigned int"""
        return _oechem.OEMol_GetMaxBondIdx(self)

    def GetTitle(self) -> "char const *":
        r"""GetTitle(OEMol self) -> char const *"""
        return _oechem.OEMol_GetTitle(self)

    def GetMCMolTitle(self) -> "char const *":
        r"""GetMCMolTitle(OEMol self) -> char const *"""
        return _oechem.OEMol_GetMCMolTitle(self)

    def GetAtom(self, pred: "OEUnaryAtomPred") -> "OEChem::OEAtomBase *":
        r"""GetAtom(OEMol self, OEUnaryAtomPred pred) -> OEAtomBase"""
        return _oechem.OEMol_GetAtom(self, pred)

    def GetBond(self, *args) -> "OEChem::OEBondBase *":
        r"""
        GetBond(OEMol self, OEUnaryBondPred pred) -> OEBondBase
        GetBond(OEMol self, OEAtomBase a1, OEAtomBase a2) -> OEBondBase
        """
        return _oechem.OEMol_GetBond(self, *args)

    def NewAtom(self, *args) -> "OEChem::OEAtomBase *":
        r"""
        NewAtom(OEMol self, unsigned int element) -> OEAtomBase
        NewAtom(OEMol self, OEAtomBase a) -> OEAtomBase
        """
        return _oechem.OEMol_NewAtom(self, *args)

    def NewBond(self, a1: "OEAtomBase", a2: "OEAtomBase", order: "unsigned int"=0) -> "OEChem::OEBondBase *":
        r"""NewBond(OEMol self, OEAtomBase a1, OEAtomBase a2, unsigned int order=0) -> OEBondBase"""
        return _oechem.OEMol_NewBond(self, a1, a2, order)

    def DeleteAtom(self, a: "OEAtomBase") -> "bool":
        r"""DeleteAtom(OEMol self, OEAtomBase a) -> bool"""
        return _oechem.OEMol_DeleteAtom(self, a)

    def DeleteBond(self, b: "OEBondBase") -> "bool":
        r"""DeleteBond(OEMol self, OEBondBase b) -> bool"""
        return _oechem.OEMol_DeleteBond(self, b)

    def IsDeleted(self, *args) -> "bool":
        r"""
        IsDeleted(OEMol self, OEConfBase c) -> bool
        IsDeleted(OEMol self, OEAtomBase a) -> bool
        IsDeleted(OEMol self, OEBondBase b) -> bool
        """
        return _oechem.OEMol_IsDeleted(self, *args)

    def Sweep(self) -> "bool":
        r"""Sweep(OEMol self) -> bool"""
        return _oechem.OEMol_Sweep(self)

    def OrderAtoms(self, va: "OEAtomVector") -> "bool":
        r"""OrderAtoms(OEMol self, OEAtomVector va) -> bool"""
        return _oechem.OEMol_OrderAtoms(self, va)

    def OrderBonds(self, vb: "OEBondVector") -> "bool":
        r"""OrderBonds(OEMol self, OEBondVector vb) -> bool"""
        return _oechem.OEMol_OrderBonds(self, vb)

    def SetRxn(self, b: "bool") -> "bool":
        r"""SetRxn(OEMol self, bool b) -> bool"""
        return _oechem.OEMol_SetRxn(self, b)

    def IsRxn(self) -> "bool":
        r"""IsRxn(OEMol self) -> bool"""
        return _oechem.OEMol_IsRxn(self)

    def GetAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""
        GetAtoms(OEMol self) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAtoms(OEMol self, OEUnaryAtomPred pred) -> OESystem::OEIterBase< OEChem::OEAtomBase > *
        """
        return _oechem.OEMol_GetAtoms(self, *args)

    def GetBonds(self, *args) -> "OESystem::OEIterBase< OEChem::OEBondBase > *":
        r"""
        GetBonds(OEMol self) -> OESystem::OEIterBase< OEChem::OEBondBase >
        GetBonds(OEMol self, OEUnaryBondPred pred) -> OESystem::OEIterBase< OEChem::OEBondBase > *
        """
        return _oechem.OEMol_GetBonds(self, *args)

    def SetDimension(self, d: "unsigned int") -> "bool":
        r"""SetDimension(OEMol self, unsigned int d) -> bool"""
        return _oechem.OEMol_SetDimension(self, d)

    def GetDimension(self) -> "unsigned int":
        r"""GetDimension(OEMol self) -> unsigned int"""
        return _oechem.OEMol_GetDimension(self)

    def HasPerceived(self, flag: "unsigned int") -> "bool":
        r"""HasPerceived(OEMol self, unsigned int flag) -> bool"""
        return _oechem.OEMol_HasPerceived(self, flag)

    def SetPerceived(self, flag: "unsigned int", b: "bool") -> "bool":
        r"""SetPerceived(OEMol self, unsigned int flag, bool b) -> bool"""
        return _oechem.OEMol_SetPerceived(self, flag, b)

    def ResetPerceived(self) -> "void":
        r"""ResetPerceived(OEMol self)"""
        return _oechem.OEMol_ResetPerceived(self)

    def SCMol(self, *args) -> "OEChem::OEMolBase &":
        r"""
        SCMol(OEMol self) -> OEMolBase
        SCMol(OEMol self) -> OEMolBase
        """
        return _oechem.OEMol_SCMol(self, *args)

    def MCMol(self, *args) -> "OEChem::OEMCMolBase &":
        r"""
        MCMol(OEMol self) -> OEMCMolBase
        MCMol(OEMol self) -> OEMCMolBase
        """
        return _oechem.OEMol_MCMol(self, *args)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEMol self) -> void const *"""
        return _oechem.OEMol_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEMol self, void const * type) -> bool"""
        return _oechem.OEMol_IsDataType(self, type)

    def NumGroups(self) -> "unsigned int":
        r"""NumGroups(OEMol self) -> unsigned int"""
        return _oechem.OEMol_NumGroups(self)

    def NewGroup(self, *args) -> "OEChem::OEGroupBase *":
        r"""
        NewGroup(OEMol self, unsigned int type, OEAtomVector atoms) -> OEGroupBase
        NewGroup(OEMol self, unsigned int type, OEBondVector bonds) -> OEGroupBase
        NewGroup(OEMol self, unsigned int type, OEAtomVector atoms, OEBondVector bonds) -> OEGroupBase
        NewGroup(OEMol self, unsigned int type, OEAtomBondSet abset) -> OEGroupBase
        """
        return _oechem.OEMol_NewGroup(self, *args)

    def DeleteGroup(self, group: "OEGroupBase") -> "bool":
        r"""DeleteGroup(OEMol self, OEGroupBase group) -> bool"""
        return _oechem.OEMol_DeleteGroup(self, group)

    def GetGroup(self, pred: "OEUnaryGroupPred") -> "OEChem::OEGroupBase *":
        r"""GetGroup(OEMol self, OEUnaryGroupPred pred) -> OEGroupBase"""
        return _oechem.OEMol_GetGroup(self, pred)

    def GetGroups(self, *args) -> "OESystem::OEIterBase< OEChem::OEGroupBase > *":
        r"""
        GetGroups(OEMol self) -> OESystem::OEIterBase< OEChem::OEGroupBase >
        GetGroups(OEMol self, OEUnaryGroupPred pred) -> OESystem::OEIterBase< OEChem::OEGroupBase > *
        """
        return _oechem.OEMol_GetGroups(self, *args)

    def GetCoords(self, *args) -> "PyObject *":
        r"""
        GetCoords(OEMol self, OEAtomBase a, OEHalfFloat c) -> bool
        GetCoords(OEMol self, OEAtomBase a, float * c) -> bool
        GetCoords(OEMol self, OEAtomBase a, double * c) -> bool
        GetCoords(OEMol self, OEAtomBase a, long double * c) -> bool
        GetCoords(OEMol self, OEHalfFloat c) -> bool
        GetCoords(OEMol self, float * c) -> bool
        GetCoords(OEMol self, double * c) -> bool
        GetCoords(OEMol self, long double * c) -> bool
        GetCoords(OEMol self, OEAtomBase atom) -> PyObject
        GetCoords(OEMol self) -> PyObject *
        """
        return _oechem.OEMol_GetCoords(self, *args)

    def SetCoords(self, *args) -> "PyObject *":
        r"""
        SetCoords(OEMol self, OEAtomBase a, OEHalfFloat c) -> bool
        SetCoords(OEMol self, OEAtomBase a, float const * c) -> bool
        SetCoords(OEMol self, OEAtomBase a, double const * c) -> bool
        SetCoords(OEMol self, OEAtomBase a, long double const * c) -> bool
        SetCoords(OEMol self, OEHalfFloat c) -> bool
        SetCoords(OEMol self, float const * c) -> bool
        SetCoords(OEMol self, double const * c) -> bool
        SetCoords(OEMol self, long double const * c) -> bool
        SetCoords(OEMol self, OEAtomBase atom, PyObject * input) -> PyObject
        SetCoords(OEMol self, PyObject * input) -> PyObject *
        """
        return _oechem.OEMol_SetCoords(self, *args)

    def __getstate__(self):
        return OEWriteMolToBytes(".oeb", self)



    def __setstate__(self, state):
        mol = OEMol()
        if OEReadMolFromBytes(mol, ".oeb", state):
            self.__init__(mol)
        else:
            self.__init__()
        del mol



# Register OEMol in _oechem:
_oechem.OEMol_swigregister(OEMol)

class OEQMol(OEQMolBase):
    r"""Proxy of C++ OEQMolWrapper 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__(OEQMol self, unsigned int type=OEChem::OEQMolType::OEDefault) -> OEQMol
        __init__(OEQMol self, OEQMol qmol, unsigned int type=OEChem::OEQMolType::OEDefault) -> OEQMol
        __init__(OEQMol self, OEMolBase m, unsigned int t=OEChem::OEQMolType::OEDefault) -> OEQMol
        __init__(OEQMol self, OEQMolBase m, unsigned int t=OEChem::OEQMolType::OEDefault) -> OEQMol
        __init__(OEQMol self, OEMCMolBase m, unsigned int t=OEChem::OEQMolType::OEDefault) -> OEQMol
        """
        _oechem.OEQMol_swiginit(self, _oechem.new_OEQMol(*args))
    __swig_destroy__ = _oechem.delete_OEQMol

    def BuildExpressions(self, *args) -> "bool":
        r"""
        BuildExpressions(OEQMol self, unsigned int atomopts, unsigned int bondopts) -> bool
        BuildExpressions(OEQMol self, OEChem::OEMatchPair< OEChem::OEExprBase > const & mp) -> bool
        """
        return _oechem.OEQMol_BuildExpressions(self, *args)

    def Clear(self) -> "void":
        r"""Clear(OEQMol self)"""
        return _oechem.OEQMol_Clear(self)

    def Compress(self) -> "bool":
        r"""Compress(OEQMol self) -> bool"""
        return _oechem.OEQMol_Compress(self)

    def UnCompress(self) -> "bool":
        r"""UnCompress(OEQMol self) -> bool"""
        return _oechem.OEQMol_UnCompress(self)

    def NumAtoms(self) -> "unsigned int":
        r"""NumAtoms(OEQMol self) -> unsigned int"""
        return _oechem.OEQMol_NumAtoms(self)

    def NumBonds(self) -> "unsigned int":
        r"""NumBonds(OEQMol self) -> unsigned int"""
        return _oechem.OEQMol_NumBonds(self)

    def Count(self, i: "unsigned int") -> "unsigned int":
        r"""Count(OEQMol self, unsigned int i) -> unsigned int"""
        return _oechem.OEQMol_Count(self, i)

    def IsValid(self):
      return _oechem.OEQMol___nonzero__(self)



    def SetEnergy(self, e: "double") -> "bool":
        r"""SetEnergy(OEQMol self, double e) -> bool"""
        return _oechem.OEQMol_SetEnergy(self, e)

    def SetTitle(self, t: "char const *") -> "bool":
        r"""SetTitle(OEQMol self, char const * t) -> bool"""
        return _oechem.OEQMol_SetTitle(self, t)

    def ClearCoords(self) -> "void":
        r"""ClearCoords(OEQMol self)"""
        return _oechem.OEQMol_ClearCoords(self)

    def GetEnergy(self) -> "double":
        r"""GetEnergy(OEQMol self) -> double"""
        return _oechem.OEQMol_GetEnergy(self)

    def GetMaxAtomIdx(self) -> "unsigned int":
        r"""GetMaxAtomIdx(OEQMol self) -> unsigned int"""
        return _oechem.OEQMol_GetMaxAtomIdx(self)

    def GetMaxBondIdx(self) -> "unsigned int":
        r"""GetMaxBondIdx(OEQMol self) -> unsigned int"""
        return _oechem.OEQMol_GetMaxBondIdx(self)

    def GetTitle(self) -> "char const *":
        r"""GetTitle(OEQMol self) -> char const *"""
        return _oechem.OEQMol_GetTitle(self)

    def GetAtom(self, pred: "OEUnaryAtomPred") -> "OEChem::OEAtomBase *":
        r"""GetAtom(OEQMol self, OEUnaryAtomPred pred) -> OEAtomBase"""
        return _oechem.OEQMol_GetAtom(self, pred)

    def GetBond(self, *args) -> "OEChem::OEBondBase *":
        r"""
        GetBond(OEQMol self, OEUnaryBondPred pred) -> OEBondBase
        GetBond(OEQMol self, OEAtomBase a1, OEAtomBase a2) -> OEBondBase
        """
        return _oechem.OEQMol_GetBond(self, *args)

    def NewAtom(self, *args) -> "OEChem::OEAtomBase *":
        r"""
        NewAtom(OEQMol self, unsigned int element) -> OEAtomBase
        NewAtom(OEQMol self, OEAtomBase a) -> OEAtomBase
        """
        return _oechem.OEQMol_NewAtom(self, *args)

    def NewBond(self, a1: "OEAtomBase", a2: "OEAtomBase", order: "unsigned int"=0) -> "OEChem::OEBondBase *":
        r"""NewBond(OEQMol self, OEAtomBase a1, OEAtomBase a2, unsigned int order=0) -> OEBondBase"""
        return _oechem.OEQMol_NewBond(self, a1, a2, order)

    def DeleteAtom(self, a: "OEAtomBase") -> "bool":
        r"""DeleteAtom(OEQMol self, OEAtomBase a) -> bool"""
        return _oechem.OEQMol_DeleteAtom(self, a)

    def DeleteBond(self, b: "OEBondBase") -> "bool":
        r"""DeleteBond(OEQMol self, OEBondBase b) -> bool"""
        return _oechem.OEQMol_DeleteBond(self, b)

    def IsDeleted(self, *args) -> "bool":
        r"""
        IsDeleted(OEQMol self, OEAtomBase a) -> bool
        IsDeleted(OEQMol self, OEBondBase b) -> bool
        """
        return _oechem.OEQMol_IsDeleted(self, *args)

    def Sweep(self) -> "bool":
        r"""Sweep(OEQMol self) -> bool"""
        return _oechem.OEQMol_Sweep(self)

    def OrderAtoms(self, va: "OEAtomVector") -> "bool":
        r"""OrderAtoms(OEQMol self, OEAtomVector va) -> bool"""
        return _oechem.OEQMol_OrderAtoms(self, va)

    def OrderBonds(self, vb: "OEBondVector") -> "bool":
        r"""OrderBonds(OEQMol self, OEBondVector vb) -> bool"""
        return _oechem.OEQMol_OrderBonds(self, vb)

    def SetRxn(self, b: "bool") -> "bool":
        r"""SetRxn(OEQMol self, bool b) -> bool"""
        return _oechem.OEQMol_SetRxn(self, b)

    def IsRxn(self) -> "bool":
        r"""IsRxn(OEQMol self) -> bool"""
        return _oechem.OEQMol_IsRxn(self)

    def GetAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""
        GetAtoms(OEQMol self) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAtoms(OEQMol self, OEUnaryAtomPred pred) -> OESystem::OEIterBase< OEChem::OEAtomBase > *
        """
        return _oechem.OEQMol_GetAtoms(self, *args)

    def GetBonds(self, *args) -> "OESystem::OEIterBase< OEChem::OEBondBase > *":
        r"""
        GetBonds(OEQMol self) -> OESystem::OEIterBase< OEChem::OEBondBase >
        GetBonds(OEQMol self, OEUnaryBondPred pred) -> OESystem::OEIterBase< OEChem::OEBondBase > *
        """
        return _oechem.OEQMol_GetBonds(self, *args)

    def GetQAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEQAtomBase > *":
        r"""
        GetQAtoms(OEQMol self) -> OESystem::OEIterBase< OEChem::OEQAtomBase >
        GetQAtoms(OEQMol self, OEUnaryAtomPred pred) -> OESystem::OEIterBase< OEChem::OEQAtomBase > *
        """
        return _oechem.OEQMol_GetQAtoms(self, *args)

    def GetQBonds(self, *args) -> "OESystem::OEIterBase< OEChem::OEQBondBase > *":
        r"""
        GetQBonds(OEQMol self) -> OESystem::OEIterBase< OEChem::OEQBondBase >
        GetQBonds(OEQMol self, OEUnaryBondPred pred) -> OESystem::OEIterBase< OEChem::OEQBondBase > *
        """
        return _oechem.OEQMol_GetQBonds(self, *args)

    def SetDimension(self, d: "unsigned int") -> "bool":
        r"""SetDimension(OEQMol self, unsigned int d) -> bool"""
        return _oechem.OEQMol_SetDimension(self, d)

    def GetDimension(self) -> "unsigned int":
        r"""GetDimension(OEQMol self) -> unsigned int"""
        return _oechem.OEQMol_GetDimension(self)

    def HasPerceived(self, flag: "unsigned int") -> "bool":
        r"""HasPerceived(OEQMol self, unsigned int flag) -> bool"""
        return _oechem.OEQMol_HasPerceived(self, flag)

    def SetPerceived(self, flag: "unsigned int", b: "bool") -> "bool":
        r"""SetPerceived(OEQMol self, unsigned int flag, bool b) -> bool"""
        return _oechem.OEQMol_SetPerceived(self, flag, b)

    def ResetPerceived(self) -> "void":
        r"""ResetPerceived(OEQMol self)"""
        return _oechem.OEQMol_ResetPerceived(self)

    def SCMol(self, *args) -> "OEChem::OEMolBase &":
        r"""
        SCMol(OEQMol self) -> OEMolBase
        SCMol(OEQMol self) -> OEMolBase
        """
        return _oechem.OEQMol_SCMol(self, *args)

    def QMol(self, *args) -> "OEChem::OEQMolBase &":
        r"""
        QMol(OEQMol self) -> OEQMolBase
        QMol(OEQMol self) -> OEQMolBase
        """
        return _oechem.OEQMol_QMol(self, *args)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEQMol self) -> void const *"""
        return _oechem.OEQMol_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEQMol self, void const * type) -> bool"""
        return _oechem.OEQMol_IsDataType(self, type)

    def GetCoords(self, *args) -> "PyObject *":
        r"""
        GetCoords(OEQMol self, OEAtomBase atom, OEHalfFloat xyz) -> bool
        GetCoords(OEQMol self, OEAtomBase atom, float * xyz) -> bool
        GetCoords(OEQMol self, OEAtomBase atom, double * xyz) -> bool
        GetCoords(OEQMol self, OEAtomBase atom, long double * xyz) -> bool
        GetCoords(OEQMol self, OEHalfFloat xyz) -> bool
        GetCoords(OEQMol self, float * xyz) -> bool
        GetCoords(OEQMol self, double * xyz) -> bool
        GetCoords(OEQMol self, long double * xyz) -> bool
        GetCoords(OEQMol self, OEAtomBase atom) -> PyObject
        GetCoords(OEQMol self) -> PyObject *
        """
        return _oechem.OEQMol_GetCoords(self, *args)

    def SetCoords(self, *args) -> "PyObject *":
        r"""
        SetCoords(OEQMol self, OEAtomBase atom, OEHalfFloat xyz) -> bool
        SetCoords(OEQMol self, OEAtomBase atom, float const * xyz) -> bool
        SetCoords(OEQMol self, OEAtomBase atom, double const * xyz) -> bool
        SetCoords(OEQMol self, OEAtomBase atom, long double const * xyz) -> bool
        SetCoords(OEQMol self, OEHalfFloat xyz) -> bool
        SetCoords(OEQMol self, float const * xyz) -> bool
        SetCoords(OEQMol self, double const * xyz) -> bool
        SetCoords(OEQMol self, long double const * xyz) -> bool
        SetCoords(OEQMol self, OEAtomBase atom, PyObject * input) -> PyObject
        SetCoords(OEQMol self, PyObject * input) -> PyObject *
        """
        return _oechem.OEQMol_SetCoords(self, *args)

# Register OEQMol in _oechem:
_oechem.OEQMol_swigregister(OEQMol)


def OESetOEDesignUnit(obj: "OEBase", t: "char const *", du: "OEDesignUnit") -> "bool":
    r"""OESetOEDesignUnit(OEBase obj, char const * t, OEDesignUnit du) -> bool"""
    return _oechem.OESetOEDesignUnit(obj, t, du)

def OEGetOEDesignUnit(obj: "OEBase", t: "char const *") -> "OEBio::OEDesignUnit":
    r"""OEGetOEDesignUnit(OEBase obj, char const * t) -> OEDesignUnit"""
    return _oechem.OEGetOEDesignUnit(obj, t)
class OEResidue(object):
    r"""Proxy of C++ OEChem::OEResidue 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__(OEResidue self) -> OEResidue
        __init__(OEResidue self, OEResidue rhs) -> OEResidue
        """
        _oechem.OEResidue_swiginit(self, _oechem.new_OEResidue(*args))

    def IsValid(self):
      return _oechem.OEResidue___nonzero__(self)



    def __lt__(self, rhs: "OEResidue") -> "bool":
        r"""__lt__(OEResidue self, OEResidue rhs) -> bool"""
        return _oechem.OEResidue___lt__(self, rhs)

    def __le__(self, rhs: "OEResidue") -> "bool":
        r"""__le__(OEResidue self, OEResidue rhs) -> bool"""
        return _oechem.OEResidue___le__(self, rhs)

    def __gt__(self, rhs: "OEResidue") -> "bool":
        r"""__gt__(OEResidue self, OEResidue rhs) -> bool"""
        return _oechem.OEResidue___gt__(self, rhs)

    def __ge__(self, rhs: "OEResidue") -> "bool":
        r"""__ge__(OEResidue self, OEResidue rhs) -> bool"""
        return _oechem.OEResidue___ge__(self, rhs)

    def __ne__(self, rhs: "OEResidue") -> "bool":
        r"""__ne__(OEResidue self, OEResidue rhs) -> bool"""
        return _oechem.OEResidue___ne__(self, rhs)

    def GetName(self) -> "char const *":
        r"""GetName(OEResidue self) -> char const *"""
        return _oechem.OEResidue_GetName(self)

    def GetOccupancy(self) -> "float":
        r"""GetOccupancy(OEResidue self) -> float"""
        return _oechem.OEResidue_GetOccupancy(self)

    def GetBFactor(self) -> "float":
        r"""GetBFactor(OEResidue self) -> float"""
        return _oechem.OEResidue_GetBFactor(self)

    def GetResidueNumber(self) -> "int":
        r"""GetResidueNumber(OEResidue self) -> int"""
        return _oechem.OEResidue_GetResidueNumber(self)

    def GetSequenceID(self) -> "int":
        r"""GetSequenceID(OEResidue self) -> int"""
        return _oechem.OEResidue_GetSequenceID(self)

    def GetSerialNumber(self) -> "int":
        r"""GetSerialNumber(OEResidue self) -> int"""
        return _oechem.OEResidue_GetSerialNumber(self)

    def GetModelNumber(self) -> "int":
        r"""GetModelNumber(OEResidue self) -> int"""
        return _oechem.OEResidue_GetModelNumber(self)

    def GetFragmentNumber(self) -> "int":
        r"""GetFragmentNumber(OEResidue self) -> int"""
        return _oechem.OEResidue_GetFragmentNumber(self)

    def GetSecondaryStructure(self) -> "int":
        r"""GetSecondaryStructure(OEResidue self) -> int"""
        return _oechem.OEResidue_GetSecondaryStructure(self)

    def GetAlternateLocation(self) -> "char":
        r"""GetAlternateLocation(OEResidue self) -> char"""
        return _oechem.OEResidue_GetAlternateLocation(self)

    def GetChainID(self) -> "char":
        r"""GetChainID(OEResidue self) -> char"""
        return _oechem.OEResidue_GetChainID(self)

    def GetExtChainID(self) -> "std::string":
        r"""GetExtChainID(OEResidue self) -> std::string"""
        return _oechem.OEResidue_GetExtChainID(self)

    def GetSubChainID(self) -> "std::string":
        r"""GetSubChainID(OEResidue self) -> std::string"""
        return _oechem.OEResidue_GetSubChainID(self)

    def GetInsertCode(self) -> "char":
        r"""GetInsertCode(OEResidue self) -> char"""
        return _oechem.OEResidue_GetInsertCode(self)

    def IsHetAtom(self) -> "bool":
        r"""IsHetAtom(OEResidue self) -> bool"""
        return _oechem.OEResidue_IsHetAtom(self)

    def SetName(self, v: "char const *") -> "bool":
        r"""SetName(OEResidue self, char const * v) -> bool"""
        return _oechem.OEResidue_SetName(self, v)

    def SetOccupancy(self, v: "float") -> "bool":
        r"""SetOccupancy(OEResidue self, float v) -> bool"""
        return _oechem.OEResidue_SetOccupancy(self, v)

    def SetBFactor(self, v: "float") -> "bool":
        r"""SetBFactor(OEResidue self, float v) -> bool"""
        return _oechem.OEResidue_SetBFactor(self, v)

    def SetResidueNumber(self, v: "int") -> "bool":
        r"""SetResidueNumber(OEResidue self, int v) -> bool"""
        return _oechem.OEResidue_SetResidueNumber(self, v)

    def SetSequenceID(self, v: "int") -> "bool":
        r"""SetSequenceID(OEResidue self, int v) -> bool"""
        return _oechem.OEResidue_SetSequenceID(self, v)

    def SetSerialNumber(self, v: "int") -> "bool":
        r"""SetSerialNumber(OEResidue self, int v) -> bool"""
        return _oechem.OEResidue_SetSerialNumber(self, v)

    def SetModelNumber(self, v: "int") -> "bool":
        r"""SetModelNumber(OEResidue self, int v) -> bool"""
        return _oechem.OEResidue_SetModelNumber(self, v)

    def SetFragmentNumber(self, v: "int") -> "bool":
        r"""SetFragmentNumber(OEResidue self, int v) -> bool"""
        return _oechem.OEResidue_SetFragmentNumber(self, v)

    def SetSecondaryStructure(self, v: "int") -> "bool":
        r"""SetSecondaryStructure(OEResidue self, int v) -> bool"""
        return _oechem.OEResidue_SetSecondaryStructure(self, v)

    def SetAlternateLocation(self, v: "char") -> "bool":
        r"""SetAlternateLocation(OEResidue self, char v) -> bool"""
        return _oechem.OEResidue_SetAlternateLocation(self, v)

    def SetChainID(self, v: "char") -> "bool":
        r"""SetChainID(OEResidue self, char v) -> bool"""
        return _oechem.OEResidue_SetChainID(self, v)

    def SetExtChainID(self, v: "std::string const &") -> "bool":
        r"""SetExtChainID(OEResidue self, std::string const & v) -> bool"""
        return _oechem.OEResidue_SetExtChainID(self, v)

    def SetSubChainID(self, v: "std::string const &") -> "bool":
        r"""SetSubChainID(OEResidue self, std::string const & v) -> bool"""
        return _oechem.OEResidue_SetSubChainID(self, v)

    def SetInsertCode(self, v: "char") -> "bool":
        r"""SetInsertCode(OEResidue self, char v) -> bool"""
        return _oechem.OEResidue_SetInsertCode(self, v)

    def SetHetAtom(self, v: "bool") -> "bool":
        r"""SetHetAtom(OEResidue self, bool v) -> bool"""
        return _oechem.OEResidue_SetHetAtom(self, v)

    def __hash__(self) -> "PyObject *":
        r"""__hash__(OEResidue self) -> PyObject *"""
        return _oechem.OEResidue___hash__(self)

    def __eq__(self, *args) -> "bool":
        r"""
        __eq__(OEResidue self, OEResidue rhs) -> bool
        __eq__(OEResidue self, OEResidue rhs) -> bool
        """
        return _oechem.OEResidue___eq__(self, *args)

    def __str__(self) -> "std::string":
        r"""__str__(OEResidue self) -> std::string"""
        return _oechem.OEResidue___str__(self)
    __swig_destroy__ = _oechem.delete_OEResidue

# Register OEResidue in _oechem:
_oechem.OEResidue_swigregister(OEResidue)


def OEResidueToString(*args) -> "std::string":
    r"""OEResidueToString(OEResidue res, std::string const delimiter=" ") -> std::string"""
    return _oechem.OEResidueToString(*args)

def IsTrueDeprecated() -> "char const *":
    r"""IsTrueDeprecated() -> char const *"""
    return _oechem.IsTrueDeprecated()

def IsFalseDeprecated() -> "char const *":
    r"""IsFalseDeprecated() -> char const *"""
    return _oechem.IsFalseDeprecated()
class OEUnaryBaseBoolFunc(object):
    r"""Proxy of C++ OESystem::OEUnaryFunction< OESystem::OEBase,bool > class."""

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

    def __call__(self, arg0: "OEBase") -> "bool":
        r"""__call__(OEUnaryBaseBoolFunc self, OEBase arg0) -> bool"""
        return _oechem.OEUnaryBaseBoolFunc___call__(self, arg0)

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



    def __init__(self):
        r"""__init__(OEUnaryBaseBoolFunc self) -> OEUnaryBaseBoolFunc"""
        if self.__class__ == OEUnaryBaseBoolFunc:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryBaseBoolFunc_swiginit(self, _oechem.new_OEUnaryBaseBoolFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryBaseBoolFunc(self)
        return weakref.proxy(self)

# Register OEUnaryBaseBoolFunc in _oechem:
_oechem.OEUnaryBaseBoolFunc_swigregister(OEUnaryBaseBoolFunc)

class OEUnaryBasePred(OEUnaryBaseBoolFunc):
    r"""Proxy of C++ OESystem::OEUnaryPredicate< OESystem::OEBase > class."""

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

    def __call__(self, a: "OEBase") -> "bool":
        r"""__call__(OEUnaryBasePred self, OEBase a) -> bool"""
        return _oechem.OEUnaryBasePred___call__(self, a)

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



    def CreatePredicateCopy(self) -> "OESystem::OEUnaryPredicate< OESystem::OEBase > *":
        r"""CreatePredicateCopy(OEUnaryBasePred self) -> OEUnaryBasePred"""
        return _oechem.OEUnaryBasePred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEUnaryBasePred self) -> OEUnaryBasePred
        __init__(OEUnaryBasePred self, OEUnaryBasePred arg2) -> OEUnaryBasePred
        """
        if self.__class__ == OEUnaryBasePred:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryBasePred_swiginit(self, _oechem.new_OEUnaryBasePred(_self, *args))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryBasePred(self)
        return weakref.proxy(self)

# Register OEUnaryBasePred in _oechem:
_oechem.OEUnaryBasePred_swigregister(OEUnaryBasePred)

class OEBinaryBaseFunc(object):
    r"""Proxy of C++ OESystem::OEBinaryFunction< OESystem::OEBase,OESystem::OEBase,bool > class."""

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

    def __call__(self, a1: "OEBase", a2: "OEBase") -> "bool":
        r"""__call__(OEBinaryBaseFunc self, OEBase a1, OEBase a2) -> bool"""
        return _oechem.OEBinaryBaseFunc___call__(self, a1, a2)

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



    def __init__(self):
        r"""__init__(OEBinaryBaseFunc self) -> OEBinaryBaseFunc"""
        if self.__class__ == OEBinaryBaseFunc:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryBaseFunc_swiginit(self, _oechem.new_OEBinaryBaseFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryBaseFunc(self)
        return weakref.proxy(self)

# Register OEBinaryBaseFunc in _oechem:
_oechem.OEBinaryBaseFunc_swigregister(OEBinaryBaseFunc)

class OEBinaryBasePred(OEBinaryBaseFunc):
    r"""Proxy of C++ OESystem::OEBinaryPredicate< OESystem::OEBase,OESystem::OEBase > class."""

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

    def __call__(self, a1: "OEBase", a2: "OEBase") -> "bool":
        r"""__call__(OEBinaryBasePred self, OEBase a1, OEBase a2) -> bool"""
        return _oechem.OEBinaryBasePred___call__(self, a1, a2)

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



    def CreatePredicateCopy(self) -> "OESystem::OEBinaryPredicate< OESystem::OEBase,OESystem::OEBase > *":
        r"""CreatePredicateCopy(OEBinaryBasePred self) -> OEBinaryBasePred"""
        return _oechem.OEBinaryBasePred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEBinaryBasePred self) -> OEBinaryBasePred
        __init__(OEBinaryBasePred self, OEBinaryBasePred arg2) -> OEBinaryBasePred
        """
        if self.__class__ == OEBinaryBasePred:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryBasePred_swiginit(self, _oechem.new_OEBinaryBasePred(_self, *args))
    __swig_destroy__ = _oechem.delete_OEBinaryBasePred
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryBasePred(self)
        return weakref.proxy(self)

# Register OEBinaryBasePred in _oechem:
_oechem.OEBinaryBasePred_swigregister(OEBinaryBasePred)


class OENotBase(OEUnaryBasePred):
    """Negation of an OEUnary Base Pred"""
    def __init__(self, func):
        """__init__(self, OEUnary Base Pred func) -> OENotNAME"""
        OEUnaryBasePred.__init__(self)
        if not isinstance(func, OEUnaryBasePred):
            raise TypeError("Expected a OEUnary Base Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj):
        """__call__(self, OEBase obj) -> bool"""
        return not self._func(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func).__disown__()

class OEAndBase(OEUnaryBasePred):
    """Logical 'and' of two OEUnary Base Preds"""
    def __init__(self, func1, func2):
        """__init__(self, OEUnary Base Pred func1, OEUnary Base Pred func2) -> OEAnd Base"""
        OEUnaryBasePred.__init__(self)
        if not isinstance(func1, OEUnaryBasePred):
            raise TypeError("Expected a OEUnary Base Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryBasePred):
            raise TypeError("Expected a OEUnary Base Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEBase obj) -> bool"""
        return self._func1(obj) and self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEOrBase(OEUnaryBasePred):
    """Logical 'or' of two OEUnary Base Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Base"""
        OEUnaryBasePred.__init__(self)
        if not isinstance(func1, OEUnaryBasePred):
            raise TypeError("Expected a OEUnary Base Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryBasePred):
            raise TypeError("Expected a OEUnary Base Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEBase obj) -> bool"""
        return self._func1(obj) or self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()


class OEBinaryNotBase(OEBinaryBasePred):
    """Negation of an OEBinary Base Pred"""
    def __init__(self, func):
        """__init__(self, OEBinary Base Pred func) -> OENot Base"""
        OEBinaryBasePred.__init__(self)
        if not isinstance(func, OEBinaryBasePred):
            raise TypeError("Expected a OEBinary Base Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj1, obj2):
        """__call__(self, OEBase obj1, OEBase obj2) -> bool"""
        return not self._func(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func).__disown__()

class OEBinaryAndBase(OEBinaryBasePred):
    """Logical 'and' of two OEBinary Base Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Base"""
        OEBinaryBasePred.__init__(self)
        if not isinstance(func1, OEBinaryBasePred):
            raise TypeError("Expected a OEBinary Base Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryBasePred):
            raise TypeError("Expected a OEBinary Base Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEBase obj1, OEBase obj2) -> bool"""
        return self._func1(obj1, obj2) and self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEBinaryOrBase(OEBinaryBasePred):
    """Logical 'or' of two OEBinary Base Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Base"""
        OEBinaryBasePred.__init__(self)
        if not isinstance(func1, OEBinaryBasePred):
            raise TypeError("Expected a OEBinary Base Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryBasePred):
            raise TypeError("Expected a OEBinary Base Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEBase obj1, OEBase obj2) -> bool"""
        return self._func1(obj1, obj2) or self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEUnaryAtomBoolFunc(object):
    r"""Proxy of C++ OESystem::OEUnaryFunction< OEChem::OEAtomBase,bool > class."""

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

    def __call__(self, arg0: "OEAtomBase") -> "bool":
        r"""__call__(OEUnaryAtomBoolFunc self, OEAtomBase arg0) -> bool"""
        return _oechem.OEUnaryAtomBoolFunc___call__(self, arg0)

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



    def __init__(self):
        r"""__init__(OEUnaryAtomBoolFunc self) -> OEUnaryAtomBoolFunc"""
        if self.__class__ == OEUnaryAtomBoolFunc:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryAtomBoolFunc_swiginit(self, _oechem.new_OEUnaryAtomBoolFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryAtomBoolFunc(self)
        return weakref.proxy(self)

# Register OEUnaryAtomBoolFunc in _oechem:
_oechem.OEUnaryAtomBoolFunc_swigregister(OEUnaryAtomBoolFunc)

class OEUnaryAtomPred(OEUnaryAtomBoolFunc):
    r"""Proxy of C++ OESystem::OEUnaryPredicate< OEChem::OEAtomBase > class."""

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

    def __call__(self, a: "OEAtomBase") -> "bool":
        r"""__call__(OEUnaryAtomPred self, OEAtomBase a) -> bool"""
        return _oechem.OEUnaryAtomPred___call__(self, a)

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



    def CreatePredicateCopy(self) -> "OESystem::OEUnaryPredicate< OEChem::OEAtomBase > *":
        r"""CreatePredicateCopy(OEUnaryAtomPred self) -> OEUnaryAtomPred"""
        return _oechem.OEUnaryAtomPred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEUnaryAtomPred self) -> OEUnaryAtomPred
        __init__(OEUnaryAtomPred self, OEUnaryAtomPred arg2) -> OEUnaryAtomPred
        """
        if self.__class__ == OEUnaryAtomPred:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryAtomPred_swiginit(self, _oechem.new_OEUnaryAtomPred(_self, *args))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryAtomPred(self)
        return weakref.proxy(self)

# Register OEUnaryAtomPred in _oechem:
_oechem.OEUnaryAtomPred_swigregister(OEUnaryAtomPred)

class OEBinaryAtomFunc(object):
    r"""Proxy of C++ OESystem::OEBinaryFunction< OEChem::OEAtomBase,OEChem::OEAtomBase,bool > class."""

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

    def __call__(self, a1: "OEAtomBase", a2: "OEAtomBase") -> "bool":
        r"""__call__(OEBinaryAtomFunc self, OEAtomBase a1, OEAtomBase a2) -> bool"""
        return _oechem.OEBinaryAtomFunc___call__(self, a1, a2)

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



    def __init__(self):
        r"""__init__(OEBinaryAtomFunc self) -> OEBinaryAtomFunc"""
        if self.__class__ == OEBinaryAtomFunc:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryAtomFunc_swiginit(self, _oechem.new_OEBinaryAtomFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryAtomFunc(self)
        return weakref.proxy(self)

# Register OEBinaryAtomFunc in _oechem:
_oechem.OEBinaryAtomFunc_swigregister(OEBinaryAtomFunc)

class OEBinaryAtomPred(OEBinaryAtomFunc):
    r"""Proxy of C++ OESystem::OEBinaryPredicate< OEChem::OEAtomBase,OEChem::OEAtomBase > class."""

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

    def __call__(self, a1: "OEAtomBase", a2: "OEAtomBase") -> "bool":
        r"""__call__(OEBinaryAtomPred self, OEAtomBase a1, OEAtomBase a2) -> bool"""
        return _oechem.OEBinaryAtomPred___call__(self, a1, a2)

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



    def CreatePredicateCopy(self) -> "OESystem::OEBinaryPredicate< OEChem::OEAtomBase,OEChem::OEAtomBase > *":
        r"""CreatePredicateCopy(OEBinaryAtomPred self) -> OEBinaryAtomPred"""
        return _oechem.OEBinaryAtomPred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEBinaryAtomPred self) -> OEBinaryAtomPred
        __init__(OEBinaryAtomPred self, OEBinaryAtomPred arg2) -> OEBinaryAtomPred
        """
        if self.__class__ == OEBinaryAtomPred:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryAtomPred_swiginit(self, _oechem.new_OEBinaryAtomPred(_self, *args))
    __swig_destroy__ = _oechem.delete_OEBinaryAtomPred
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryAtomPred(self)
        return weakref.proxy(self)

# Register OEBinaryAtomPred in _oechem:
_oechem.OEBinaryAtomPred_swigregister(OEBinaryAtomPred)


class OENotAtom(OEUnaryAtomPred):
    """Negation of an OEUnary Atom Pred"""
    def __init__(self, func):
        """__init__(self, OEUnary Atom Pred func) -> OENotNAME"""
        OEUnaryAtomPred.__init__(self)
        if not isinstance(func, OEUnaryAtomPred):
            raise TypeError("Expected a OEUnary Atom Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj):
        """__call__(self, OEAtomBase obj) -> bool"""
        return not self._func(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func).__disown__()

class OEAndAtom(OEUnaryAtomPred):
    """Logical 'and' of two OEUnary Atom Preds"""
    def __init__(self, func1, func2):
        """__init__(self, OEUnary Atom Pred func1, OEUnary Atom Pred func2) -> OEAnd Atom"""
        OEUnaryAtomPred.__init__(self)
        if not isinstance(func1, OEUnaryAtomPred):
            raise TypeError("Expected a OEUnary Atom Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryAtomPred):
            raise TypeError("Expected a OEUnary Atom Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEAtomBase obj) -> bool"""
        return self._func1(obj) and self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEOrAtom(OEUnaryAtomPred):
    """Logical 'or' of two OEUnary Atom Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Atom"""
        OEUnaryAtomPred.__init__(self)
        if not isinstance(func1, OEUnaryAtomPred):
            raise TypeError("Expected a OEUnary Atom Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryAtomPred):
            raise TypeError("Expected a OEUnary Atom Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEAtomBase obj) -> bool"""
        return self._func1(obj) or self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()


class OEBinaryNotAtom(OEBinaryAtomPred):
    """Negation of an OEBinary Atom Pred"""
    def __init__(self, func):
        """__init__(self, OEBinary Atom Pred func) -> OENot Atom"""
        OEBinaryAtomPred.__init__(self)
        if not isinstance(func, OEBinaryAtomPred):
            raise TypeError("Expected a OEBinary Atom Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj1, obj2):
        """__call__(self, OEAtomBase obj1, OEAtomBase obj2) -> bool"""
        return not self._func(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func).__disown__()

class OEBinaryAndAtom(OEBinaryAtomPred):
    """Logical 'and' of two OEBinary Atom Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Atom"""
        OEBinaryAtomPred.__init__(self)
        if not isinstance(func1, OEBinaryAtomPred):
            raise TypeError("Expected a OEBinary Atom Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryAtomPred):
            raise TypeError("Expected a OEBinary Atom Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEAtomBase obj1, OEAtomBase obj2) -> bool"""
        return self._func1(obj1, obj2) and self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEBinaryOrAtom(OEBinaryAtomPred):
    """Logical 'or' of two OEBinary Atom Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Atom"""
        OEBinaryAtomPred.__init__(self)
        if not isinstance(func1, OEBinaryAtomPred):
            raise TypeError("Expected a OEBinary Atom Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryAtomPred):
            raise TypeError("Expected a OEBinary Atom Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEAtomBase obj1, OEAtomBase obj2) -> bool"""
        return self._func1(obj1, obj2) or self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEUnaryBondBoolFunc(object):
    r"""Proxy of C++ OESystem::OEUnaryFunction< OEChem::OEBondBase,bool > class."""

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

    def __call__(self, arg0: "OEBondBase") -> "bool":
        r"""__call__(OEUnaryBondBoolFunc self, OEBondBase arg0) -> bool"""
        return _oechem.OEUnaryBondBoolFunc___call__(self, arg0)

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



    def __init__(self):
        r"""__init__(OEUnaryBondBoolFunc self) -> OEUnaryBondBoolFunc"""
        if self.__class__ == OEUnaryBondBoolFunc:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryBondBoolFunc_swiginit(self, _oechem.new_OEUnaryBondBoolFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryBondBoolFunc(self)
        return weakref.proxy(self)

# Register OEUnaryBondBoolFunc in _oechem:
_oechem.OEUnaryBondBoolFunc_swigregister(OEUnaryBondBoolFunc)

class OEUnaryBondPred(OEUnaryBondBoolFunc):
    r"""Proxy of C++ OESystem::OEUnaryPredicate< OEChem::OEBondBase > class."""

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

    def __call__(self, a: "OEBondBase") -> "bool":
        r"""__call__(OEUnaryBondPred self, OEBondBase a) -> bool"""
        return _oechem.OEUnaryBondPred___call__(self, a)

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



    def CreatePredicateCopy(self) -> "OESystem::OEUnaryPredicate< OEChem::OEBondBase > *":
        r"""CreatePredicateCopy(OEUnaryBondPred self) -> OEUnaryBondPred"""
        return _oechem.OEUnaryBondPred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEUnaryBondPred self) -> OEUnaryBondPred
        __init__(OEUnaryBondPred self, OEUnaryBondPred arg2) -> OEUnaryBondPred
        """
        if self.__class__ == OEUnaryBondPred:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryBondPred_swiginit(self, _oechem.new_OEUnaryBondPred(_self, *args))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryBondPred(self)
        return weakref.proxy(self)

# Register OEUnaryBondPred in _oechem:
_oechem.OEUnaryBondPred_swigregister(OEUnaryBondPred)

class OEBinaryBondFunc(object):
    r"""Proxy of C++ OESystem::OEBinaryFunction< OEChem::OEBondBase,OEChem::OEBondBase,bool > class."""

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

    def __call__(self, a1: "OEBondBase", a2: "OEBondBase") -> "bool":
        r"""__call__(OEBinaryBondFunc self, OEBondBase a1, OEBondBase a2) -> bool"""
        return _oechem.OEBinaryBondFunc___call__(self, a1, a2)

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



    def __init__(self):
        r"""__init__(OEBinaryBondFunc self) -> OEBinaryBondFunc"""
        if self.__class__ == OEBinaryBondFunc:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryBondFunc_swiginit(self, _oechem.new_OEBinaryBondFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryBondFunc(self)
        return weakref.proxy(self)

# Register OEBinaryBondFunc in _oechem:
_oechem.OEBinaryBondFunc_swigregister(OEBinaryBondFunc)

class OEBinaryBondPred(OEBinaryBondFunc):
    r"""Proxy of C++ OESystem::OEBinaryPredicate< OEChem::OEBondBase,OEChem::OEBondBase > class."""

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

    def __call__(self, a1: "OEBondBase", a2: "OEBondBase") -> "bool":
        r"""__call__(OEBinaryBondPred self, OEBondBase a1, OEBondBase a2) -> bool"""
        return _oechem.OEBinaryBondPred___call__(self, a1, a2)

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



    def CreatePredicateCopy(self) -> "OESystem::OEBinaryPredicate< OEChem::OEBondBase,OEChem::OEBondBase > *":
        r"""CreatePredicateCopy(OEBinaryBondPred self) -> OEBinaryBondPred"""
        return _oechem.OEBinaryBondPred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEBinaryBondPred self) -> OEBinaryBondPred
        __init__(OEBinaryBondPred self, OEBinaryBondPred arg2) -> OEBinaryBondPred
        """
        if self.__class__ == OEBinaryBondPred:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryBondPred_swiginit(self, _oechem.new_OEBinaryBondPred(_self, *args))
    __swig_destroy__ = _oechem.delete_OEBinaryBondPred
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryBondPred(self)
        return weakref.proxy(self)

# Register OEBinaryBondPred in _oechem:
_oechem.OEBinaryBondPred_swigregister(OEBinaryBondPred)


class OENotBond(OEUnaryBondPred):
    """Negation of an OEUnary Bond Pred"""
    def __init__(self, func):
        """__init__(self, OEUnary Bond Pred func) -> OENotNAME"""
        OEUnaryBondPred.__init__(self)
        if not isinstance(func, OEUnaryBondPred):
            raise TypeError("Expected a OEUnary Bond Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj):
        """__call__(self, OEBondBase obj) -> bool"""
        return not self._func(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func).__disown__()

class OEAndBond(OEUnaryBondPred):
    """Logical 'and' of two OEUnary Bond Preds"""
    def __init__(self, func1, func2):
        """__init__(self, OEUnary Bond Pred func1, OEUnary Bond Pred func2) -> OEAnd Bond"""
        OEUnaryBondPred.__init__(self)
        if not isinstance(func1, OEUnaryBondPred):
            raise TypeError("Expected a OEUnary Bond Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryBondPred):
            raise TypeError("Expected a OEUnary Bond Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEBondBase obj) -> bool"""
        return self._func1(obj) and self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEOrBond(OEUnaryBondPred):
    """Logical 'or' of two OEUnary Bond Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Bond"""
        OEUnaryBondPred.__init__(self)
        if not isinstance(func1, OEUnaryBondPred):
            raise TypeError("Expected a OEUnary Bond Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryBondPred):
            raise TypeError("Expected a OEUnary Bond Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEBondBase obj) -> bool"""
        return self._func1(obj) or self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()


class OEBinaryNotBond(OEBinaryBondPred):
    """Negation of an OEBinary Bond Pred"""
    def __init__(self, func):
        """__init__(self, OEBinary Bond Pred func) -> OENot Bond"""
        OEBinaryBondPred.__init__(self)
        if not isinstance(func, OEBinaryBondPred):
            raise TypeError("Expected a OEBinary Bond Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj1, obj2):
        """__call__(self, OEBondBase obj1, OEBondBase obj2) -> bool"""
        return not self._func(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func).__disown__()

class OEBinaryAndBond(OEBinaryBondPred):
    """Logical 'and' of two OEBinary Bond Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Bond"""
        OEBinaryBondPred.__init__(self)
        if not isinstance(func1, OEBinaryBondPred):
            raise TypeError("Expected a OEBinary Bond Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryBondPred):
            raise TypeError("Expected a OEBinary Bond Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEBondBase obj1, OEBondBase obj2) -> bool"""
        return self._func1(obj1, obj2) and self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEBinaryOrBond(OEBinaryBondPred):
    """Logical 'or' of two OEBinary Bond Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Bond"""
        OEBinaryBondPred.__init__(self)
        if not isinstance(func1, OEBinaryBondPred):
            raise TypeError("Expected a OEBinary Bond Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryBondPred):
            raise TypeError("Expected a OEBinary Bond Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEBondBase obj1, OEBondBase obj2) -> bool"""
        return self._func1(obj1, obj2) or self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEUnaryConfBoolFunc(object):
    r"""Proxy of C++ OESystem::OEUnaryFunction< OEChem::OEConfBase,bool > class."""

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

    def __call__(self, arg0: "OEConfBase") -> "bool":
        r"""__call__(OEUnaryConfBoolFunc self, OEConfBase arg0) -> bool"""
        return _oechem.OEUnaryConfBoolFunc___call__(self, arg0)

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



    def __init__(self):
        r"""__init__(OEUnaryConfBoolFunc self) -> OEUnaryConfBoolFunc"""
        if self.__class__ == OEUnaryConfBoolFunc:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryConfBoolFunc_swiginit(self, _oechem.new_OEUnaryConfBoolFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryConfBoolFunc(self)
        return weakref.proxy(self)

# Register OEUnaryConfBoolFunc in _oechem:
_oechem.OEUnaryConfBoolFunc_swigregister(OEUnaryConfBoolFunc)

class OEUnaryConfPred(OEUnaryConfBoolFunc):
    r"""Proxy of C++ OESystem::OEUnaryPredicate< OEChem::OEConfBase > class."""

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

    def __call__(self, a: "OEConfBase") -> "bool":
        r"""__call__(OEUnaryConfPred self, OEConfBase a) -> bool"""
        return _oechem.OEUnaryConfPred___call__(self, a)

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



    def CreatePredicateCopy(self) -> "OESystem::OEUnaryPredicate< OEChem::OEConfBase > *":
        r"""CreatePredicateCopy(OEUnaryConfPred self) -> OEUnaryConfPred"""
        return _oechem.OEUnaryConfPred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEUnaryConfPred self) -> OEUnaryConfPred
        __init__(OEUnaryConfPred self, OEUnaryConfPred arg2) -> OEUnaryConfPred
        """
        if self.__class__ == OEUnaryConfPred:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryConfPred_swiginit(self, _oechem.new_OEUnaryConfPred(_self, *args))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryConfPred(self)
        return weakref.proxy(self)

# Register OEUnaryConfPred in _oechem:
_oechem.OEUnaryConfPred_swigregister(OEUnaryConfPred)

class OEBinaryConfFunc(object):
    r"""Proxy of C++ OESystem::OEBinaryFunction< OEChem::OEConfBase,OEChem::OEConfBase,bool > class."""

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

    def __call__(self, a1: "OEConfBase", a2: "OEConfBase") -> "bool":
        r"""__call__(OEBinaryConfFunc self, OEConfBase a1, OEConfBase a2) -> bool"""
        return _oechem.OEBinaryConfFunc___call__(self, a1, a2)

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



    def __init__(self):
        r"""__init__(OEBinaryConfFunc self) -> OEBinaryConfFunc"""
        if self.__class__ == OEBinaryConfFunc:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryConfFunc_swiginit(self, _oechem.new_OEBinaryConfFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryConfFunc(self)
        return weakref.proxy(self)

# Register OEBinaryConfFunc in _oechem:
_oechem.OEBinaryConfFunc_swigregister(OEBinaryConfFunc)

class OEBinaryConfPred(OEBinaryConfFunc):
    r"""Proxy of C++ OESystem::OEBinaryPredicate< OEChem::OEConfBase,OEChem::OEConfBase > class."""

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

    def __call__(self, a1: "OEConfBase", a2: "OEConfBase") -> "bool":
        r"""__call__(OEBinaryConfPred self, OEConfBase a1, OEConfBase a2) -> bool"""
        return _oechem.OEBinaryConfPred___call__(self, a1, a2)

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



    def CreatePredicateCopy(self) -> "OESystem::OEBinaryPredicate< OEChem::OEConfBase,OEChem::OEConfBase > *":
        r"""CreatePredicateCopy(OEBinaryConfPred self) -> OEBinaryConfPred"""
        return _oechem.OEBinaryConfPred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEBinaryConfPred self) -> OEBinaryConfPred
        __init__(OEBinaryConfPred self, OEBinaryConfPred arg2) -> OEBinaryConfPred
        """
        if self.__class__ == OEBinaryConfPred:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryConfPred_swiginit(self, _oechem.new_OEBinaryConfPred(_self, *args))
    __swig_destroy__ = _oechem.delete_OEBinaryConfPred
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryConfPred(self)
        return weakref.proxy(self)

# Register OEBinaryConfPred in _oechem:
_oechem.OEBinaryConfPred_swigregister(OEBinaryConfPred)


class OENotConf(OEUnaryConfPred):
    """Negation of an OEUnary Conf Pred"""
    def __init__(self, func):
        """__init__(self, OEUnary Conf Pred func) -> OENotNAME"""
        OEUnaryConfPred.__init__(self)
        if not isinstance(func, OEUnaryConfPred):
            raise TypeError("Expected a OEUnary Conf Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj):
        """__call__(self, OEConfBase obj) -> bool"""
        return not self._func(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func).__disown__()

class OEAndConf(OEUnaryConfPred):
    """Logical 'and' of two OEUnary Conf Preds"""
    def __init__(self, func1, func2):
        """__init__(self, OEUnary Conf Pred func1, OEUnary Conf Pred func2) -> OEAnd Conf"""
        OEUnaryConfPred.__init__(self)
        if not isinstance(func1, OEUnaryConfPred):
            raise TypeError("Expected a OEUnary Conf Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryConfPred):
            raise TypeError("Expected a OEUnary Conf Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEConfBase obj) -> bool"""
        return self._func1(obj) and self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEOrConf(OEUnaryConfPred):
    """Logical 'or' of two OEUnary Conf Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Conf"""
        OEUnaryConfPred.__init__(self)
        if not isinstance(func1, OEUnaryConfPred):
            raise TypeError("Expected a OEUnary Conf Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryConfPred):
            raise TypeError("Expected a OEUnary Conf Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEConfBase obj) -> bool"""
        return self._func1(obj) or self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()


class OEBinaryNotConf(OEBinaryConfPred):
    """Negation of an OEBinary Conf Pred"""
    def __init__(self, func):
        """__init__(self, OEBinary Conf Pred func) -> OENot Conf"""
        OEBinaryConfPred.__init__(self)
        if not isinstance(func, OEBinaryConfPred):
            raise TypeError("Expected a OEBinary Conf Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj1, obj2):
        """__call__(self, OEConfBase obj1, OEConfBase obj2) -> bool"""
        return not self._func(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func).__disown__()

class OEBinaryAndConf(OEBinaryConfPred):
    """Logical 'and' of two OEBinary Conf Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Conf"""
        OEBinaryConfPred.__init__(self)
        if not isinstance(func1, OEBinaryConfPred):
            raise TypeError("Expected a OEBinary Conf Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryConfPred):
            raise TypeError("Expected a OEBinary Conf Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEConfBase obj1, OEConfBase obj2) -> bool"""
        return self._func1(obj1, obj2) and self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEBinaryOrConf(OEBinaryConfPred):
    """Logical 'or' of two OEBinary Conf Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Conf"""
        OEBinaryConfPred.__init__(self)
        if not isinstance(func1, OEBinaryConfPred):
            raise TypeError("Expected a OEBinary Conf Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryConfPred):
            raise TypeError("Expected a OEBinary Conf Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEConfBase obj1, OEConfBase obj2) -> bool"""
        return self._func1(obj1, obj2) or self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEUnaryMolBaseBoolFunc(object):
    r"""Proxy of C++ OESystem::OEUnaryFunction< OEChem::OEMolBase,bool > class."""

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

    def __call__(self, arg0: "OEMolBase") -> "bool":
        r"""__call__(OEUnaryMolBaseBoolFunc self, OEMolBase arg0) -> bool"""
        return _oechem.OEUnaryMolBaseBoolFunc___call__(self, arg0)

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



    def __init__(self):
        r"""__init__(OEUnaryMolBaseBoolFunc self) -> OEUnaryMolBaseBoolFunc"""
        if self.__class__ == OEUnaryMolBaseBoolFunc:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryMolBaseBoolFunc_swiginit(self, _oechem.new_OEUnaryMolBaseBoolFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryMolBaseBoolFunc(self)
        return weakref.proxy(self)

# Register OEUnaryMolBaseBoolFunc in _oechem:
_oechem.OEUnaryMolBaseBoolFunc_swigregister(OEUnaryMolBaseBoolFunc)

class OEUnaryMolBasePred(OEUnaryMolBaseBoolFunc):
    r"""Proxy of C++ OESystem::OEUnaryPredicate< OEChem::OEMolBase > class."""

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

    def __call__(self, a: "OEMolBase") -> "bool":
        r"""__call__(OEUnaryMolBasePred self, OEMolBase a) -> bool"""
        return _oechem.OEUnaryMolBasePred___call__(self, a)

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



    def CreatePredicateCopy(self) -> "OESystem::OEUnaryPredicate< OEChem::OEMolBase > *":
        r"""CreatePredicateCopy(OEUnaryMolBasePred self) -> OEUnaryMolBasePred"""
        return _oechem.OEUnaryMolBasePred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEUnaryMolBasePred self) -> OEUnaryMolBasePred
        __init__(OEUnaryMolBasePred self, OEUnaryMolBasePred arg2) -> OEUnaryMolBasePred
        """
        if self.__class__ == OEUnaryMolBasePred:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryMolBasePred_swiginit(self, _oechem.new_OEUnaryMolBasePred(_self, *args))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryMolBasePred(self)
        return weakref.proxy(self)

# Register OEUnaryMolBasePred in _oechem:
_oechem.OEUnaryMolBasePred_swigregister(OEUnaryMolBasePred)

class OEBinaryMolBaseFunc(object):
    r"""Proxy of C++ OESystem::OEBinaryFunction< OEChem::OEMolBase,OEChem::OEMolBase,bool > class."""

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

    def __call__(self, a1: "OEMolBase", a2: "OEMolBase") -> "bool":
        r"""__call__(OEBinaryMolBaseFunc self, OEMolBase a1, OEMolBase a2) -> bool"""
        return _oechem.OEBinaryMolBaseFunc___call__(self, a1, a2)

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



    def __init__(self):
        r"""__init__(OEBinaryMolBaseFunc self) -> OEBinaryMolBaseFunc"""
        if self.__class__ == OEBinaryMolBaseFunc:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryMolBaseFunc_swiginit(self, _oechem.new_OEBinaryMolBaseFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryMolBaseFunc(self)
        return weakref.proxy(self)

# Register OEBinaryMolBaseFunc in _oechem:
_oechem.OEBinaryMolBaseFunc_swigregister(OEBinaryMolBaseFunc)

class OEBinaryMolBasePred(OEBinaryMolBaseFunc):
    r"""Proxy of C++ OESystem::OEBinaryPredicate< OEChem::OEMolBase,OEChem::OEMolBase > class."""

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

    def __call__(self, a1: "OEMolBase", a2: "OEMolBase") -> "bool":
        r"""__call__(OEBinaryMolBasePred self, OEMolBase a1, OEMolBase a2) -> bool"""
        return _oechem.OEBinaryMolBasePred___call__(self, a1, a2)

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



    def CreatePredicateCopy(self) -> "OESystem::OEBinaryPredicate< OEChem::OEMolBase,OEChem::OEMolBase > *":
        r"""CreatePredicateCopy(OEBinaryMolBasePred self) -> OEBinaryMolBasePred"""
        return _oechem.OEBinaryMolBasePred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEBinaryMolBasePred self) -> OEBinaryMolBasePred
        __init__(OEBinaryMolBasePred self, OEBinaryMolBasePred arg2) -> OEBinaryMolBasePred
        """
        if self.__class__ == OEBinaryMolBasePred:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryMolBasePred_swiginit(self, _oechem.new_OEBinaryMolBasePred(_self, *args))
    __swig_destroy__ = _oechem.delete_OEBinaryMolBasePred
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryMolBasePred(self)
        return weakref.proxy(self)

# Register OEBinaryMolBasePred in _oechem:
_oechem.OEBinaryMolBasePred_swigregister(OEBinaryMolBasePred)


class OENotMolBase(OEUnaryMolBasePred):
    """Negation of an OEUnary MolBase Pred"""
    def __init__(self, func):
        """__init__(self, OEUnary MolBase Pred func) -> OENotNAME"""
        OEUnaryMolBasePred.__init__(self)
        if not isinstance(func, OEUnaryMolBasePred):
            raise TypeError("Expected a OEUnary MolBase Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj):
        """__call__(self, OEMolBase obj) -> bool"""
        return not self._func(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func).__disown__()

class OEAndMolBase(OEUnaryMolBasePred):
    """Logical 'and' of two OEUnary MolBase Preds"""
    def __init__(self, func1, func2):
        """__init__(self, OEUnary MolBase Pred func1, OEUnary MolBase Pred func2) -> OEAnd MolBase"""
        OEUnaryMolBasePred.__init__(self)
        if not isinstance(func1, OEUnaryMolBasePred):
            raise TypeError("Expected a OEUnary MolBase Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryMolBasePred):
            raise TypeError("Expected a OEUnary MolBase Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEMolBase obj) -> bool"""
        return self._func1(obj) and self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEOrMolBase(OEUnaryMolBasePred):
    """Logical 'or' of two OEUnary MolBase Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd MolBase"""
        OEUnaryMolBasePred.__init__(self)
        if not isinstance(func1, OEUnaryMolBasePred):
            raise TypeError("Expected a OEUnary MolBase Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryMolBasePred):
            raise TypeError("Expected a OEUnary MolBase Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEMolBase obj) -> bool"""
        return self._func1(obj) or self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()


class OEBinaryNotMolBase(OEBinaryMolBasePred):
    """Negation of an OEBinary MolBase Pred"""
    def __init__(self, func):
        """__init__(self, OEBinary MolBase Pred func) -> OENot MolBase"""
        OEBinaryMolBasePred.__init__(self)
        if not isinstance(func, OEBinaryMolBasePred):
            raise TypeError("Expected a OEBinary MolBase Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj1, obj2):
        """__call__(self, OEMolBase obj1, OEMolBase obj2) -> bool"""
        return not self._func(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func).__disown__()

class OEBinaryAndMolBase(OEBinaryMolBasePred):
    """Logical 'and' of two OEBinary MolBase Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd MolBase"""
        OEBinaryMolBasePred.__init__(self)
        if not isinstance(func1, OEBinaryMolBasePred):
            raise TypeError("Expected a OEBinary MolBase Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryMolBasePred):
            raise TypeError("Expected a OEBinary MolBase Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEMolBase obj1, OEMolBase obj2) -> bool"""
        return self._func1(obj1, obj2) and self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEBinaryOrMolBase(OEBinaryMolBasePred):
    """Logical 'or' of two OEBinary MolBase Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd MolBase"""
        OEBinaryMolBasePred.__init__(self)
        if not isinstance(func1, OEBinaryMolBasePred):
            raise TypeError("Expected a OEBinary MolBase Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryMolBasePred):
            raise TypeError("Expected a OEBinary MolBase Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEMolBase obj1, OEMolBase obj2) -> bool"""
        return self._func1(obj1, obj2) or self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEUnaryGraphMolBoolFunc(object):
    r"""Proxy of C++ OESystem::OEUnaryFunction< OEGraphMolWrapper,bool > class."""

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

    def __call__(self, arg0: "OEGraphMol") -> "bool":
        r"""__call__(OEUnaryGraphMolBoolFunc self, OEGraphMol arg0) -> bool"""
        return _oechem.OEUnaryGraphMolBoolFunc___call__(self, arg0)

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



    def __init__(self):
        r"""__init__(OEUnaryGraphMolBoolFunc self) -> OEUnaryGraphMolBoolFunc"""
        if self.__class__ == OEUnaryGraphMolBoolFunc:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryGraphMolBoolFunc_swiginit(self, _oechem.new_OEUnaryGraphMolBoolFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryGraphMolBoolFunc(self)
        return weakref.proxy(self)

# Register OEUnaryGraphMolBoolFunc in _oechem:
_oechem.OEUnaryGraphMolBoolFunc_swigregister(OEUnaryGraphMolBoolFunc)

class OEUnaryGraphMolPred(OEUnaryGraphMolBoolFunc):
    r"""Proxy of C++ OESystem::OEUnaryPredicate< OEGraphMolWrapper > class."""

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

    def __call__(self, a: "OEGraphMol") -> "bool":
        r"""__call__(OEUnaryGraphMolPred self, OEGraphMol a) -> bool"""
        return _oechem.OEUnaryGraphMolPred___call__(self, a)

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



    def CreatePredicateCopy(self) -> "OESystem::OEUnaryPredicate< OEGraphMolWrapper > *":
        r"""CreatePredicateCopy(OEUnaryGraphMolPred self) -> OEUnaryGraphMolPred"""
        return _oechem.OEUnaryGraphMolPred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEUnaryGraphMolPred self) -> OEUnaryGraphMolPred
        __init__(OEUnaryGraphMolPred self, OEUnaryGraphMolPred arg2) -> OEUnaryGraphMolPred
        """
        if self.__class__ == OEUnaryGraphMolPred:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryGraphMolPred_swiginit(self, _oechem.new_OEUnaryGraphMolPred(_self, *args))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryGraphMolPred(self)
        return weakref.proxy(self)

# Register OEUnaryGraphMolPred in _oechem:
_oechem.OEUnaryGraphMolPred_swigregister(OEUnaryGraphMolPred)

class OEBinaryGraphMolFunc(object):
    r"""Proxy of C++ OESystem::OEBinaryFunction< OEGraphMolWrapper,OEGraphMolWrapper,bool > class."""

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

    def __call__(self, a1: "OEGraphMol", a2: "OEGraphMol") -> "bool":
        r"""__call__(OEBinaryGraphMolFunc self, OEGraphMol a1, OEGraphMol a2) -> bool"""
        return _oechem.OEBinaryGraphMolFunc___call__(self, a1, a2)

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



    def __init__(self):
        r"""__init__(OEBinaryGraphMolFunc self) -> OEBinaryGraphMolFunc"""
        if self.__class__ == OEBinaryGraphMolFunc:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryGraphMolFunc_swiginit(self, _oechem.new_OEBinaryGraphMolFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryGraphMolFunc(self)
        return weakref.proxy(self)

# Register OEBinaryGraphMolFunc in _oechem:
_oechem.OEBinaryGraphMolFunc_swigregister(OEBinaryGraphMolFunc)

class OEBinaryGraphMolPred(OEBinaryGraphMolFunc):
    r"""Proxy of C++ OESystem::OEBinaryPredicate< OEGraphMolWrapper,OEGraphMolWrapper > class."""

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

    def __call__(self, a1: "OEGraphMol", a2: "OEGraphMol") -> "bool":
        r"""__call__(OEBinaryGraphMolPred self, OEGraphMol a1, OEGraphMol a2) -> bool"""
        return _oechem.OEBinaryGraphMolPred___call__(self, a1, a2)

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



    def CreatePredicateCopy(self) -> "OESystem::OEBinaryPredicate< OEGraphMolWrapper,OEGraphMolWrapper > *":
        r"""CreatePredicateCopy(OEBinaryGraphMolPred self) -> OEBinaryGraphMolPred"""
        return _oechem.OEBinaryGraphMolPred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEBinaryGraphMolPred self) -> OEBinaryGraphMolPred
        __init__(OEBinaryGraphMolPred self, OEBinaryGraphMolPred arg2) -> OEBinaryGraphMolPred
        """
        if self.__class__ == OEBinaryGraphMolPred:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryGraphMolPred_swiginit(self, _oechem.new_OEBinaryGraphMolPred(_self, *args))
    __swig_destroy__ = _oechem.delete_OEBinaryGraphMolPred
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryGraphMolPred(self)
        return weakref.proxy(self)

# Register OEBinaryGraphMolPred in _oechem:
_oechem.OEBinaryGraphMolPred_swigregister(OEBinaryGraphMolPred)


class OENotGraphMol(OEUnaryGraphMolPred):
    """Negation of an OEUnary GraphMol Pred"""
    def __init__(self, func):
        """__init__(self, OEUnary GraphMol Pred func) -> OENotNAME"""
        OEUnaryGraphMolPred.__init__(self)
        if not isinstance(func, OEUnaryGraphMolPred):
            raise TypeError("Expected a OEUnary GraphMol Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj):
        """__call__(self, OEGraphMol obj) -> bool"""
        return not self._func(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func).__disown__()

class OEAndGraphMol(OEUnaryGraphMolPred):
    """Logical 'and' of two OEUnary GraphMol Preds"""
    def __init__(self, func1, func2):
        """__init__(self, OEUnary GraphMol Pred func1, OEUnary GraphMol Pred func2) -> OEAnd GraphMol"""
        OEUnaryGraphMolPred.__init__(self)
        if not isinstance(func1, OEUnaryGraphMolPred):
            raise TypeError("Expected a OEUnary GraphMol Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryGraphMolPred):
            raise TypeError("Expected a OEUnary GraphMol Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEGraphMol obj) -> bool"""
        return self._func1(obj) and self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEOrGraphMol(OEUnaryGraphMolPred):
    """Logical 'or' of two OEUnary GraphMol Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd GraphMol"""
        OEUnaryGraphMolPred.__init__(self)
        if not isinstance(func1, OEUnaryGraphMolPred):
            raise TypeError("Expected a OEUnary GraphMol Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryGraphMolPred):
            raise TypeError("Expected a OEUnary GraphMol Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEGraphMol obj) -> bool"""
        return self._func1(obj) or self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()


class OEBinaryNotGraphMol(OEBinaryGraphMolPred):
    """Negation of an OEBinary GraphMol Pred"""
    def __init__(self, func):
        """__init__(self, OEBinary GraphMol Pred func) -> OENot GraphMol"""
        OEBinaryGraphMolPred.__init__(self)
        if not isinstance(func, OEBinaryGraphMolPred):
            raise TypeError("Expected a OEBinary GraphMol Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj1, obj2):
        """__call__(self, OEGraphMol obj1, OEGraphMol obj2) -> bool"""
        return not self._func(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func).__disown__()

class OEBinaryAndGraphMol(OEBinaryGraphMolPred):
    """Logical 'and' of two OEBinary GraphMol Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd GraphMol"""
        OEBinaryGraphMolPred.__init__(self)
        if not isinstance(func1, OEBinaryGraphMolPred):
            raise TypeError("Expected a OEBinary GraphMol Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryGraphMolPred):
            raise TypeError("Expected a OEBinary GraphMol Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEGraphMol obj1, OEGraphMol obj2) -> bool"""
        return self._func1(obj1, obj2) and self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEBinaryOrGraphMol(OEBinaryGraphMolPred):
    """Logical 'or' of two OEBinary GraphMol Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd GraphMol"""
        OEBinaryGraphMolPred.__init__(self)
        if not isinstance(func1, OEBinaryGraphMolPred):
            raise TypeError("Expected a OEBinary GraphMol Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryGraphMolPred):
            raise TypeError("Expected a OEBinary GraphMol Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEGraphMol obj1, OEGraphMol obj2) -> bool"""
        return self._func1(obj1, obj2) or self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEUnaryGroupBoolFunc(object):
    r"""Proxy of C++ OESystem::OEUnaryFunction< OEChem::OEGroupBase,bool > class."""

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

    def __call__(self, arg0: "OEGroupBase") -> "bool":
        r"""__call__(OEUnaryGroupBoolFunc self, OEGroupBase arg0) -> bool"""
        return _oechem.OEUnaryGroupBoolFunc___call__(self, arg0)

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



    def __init__(self):
        r"""__init__(OEUnaryGroupBoolFunc self) -> OEUnaryGroupBoolFunc"""
        if self.__class__ == OEUnaryGroupBoolFunc:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryGroupBoolFunc_swiginit(self, _oechem.new_OEUnaryGroupBoolFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryGroupBoolFunc(self)
        return weakref.proxy(self)

# Register OEUnaryGroupBoolFunc in _oechem:
_oechem.OEUnaryGroupBoolFunc_swigregister(OEUnaryGroupBoolFunc)

class OEUnaryGroupPred(OEUnaryGroupBoolFunc):
    r"""Proxy of C++ OESystem::OEUnaryPredicate< OEChem::OEGroupBase > class."""

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

    def __call__(self, a: "OEGroupBase") -> "bool":
        r"""__call__(OEUnaryGroupPred self, OEGroupBase a) -> bool"""
        return _oechem.OEUnaryGroupPred___call__(self, a)

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



    def CreatePredicateCopy(self) -> "OESystem::OEUnaryPredicate< OEChem::OEGroupBase > *":
        r"""CreatePredicateCopy(OEUnaryGroupPred self) -> OEUnaryGroupPred"""
        return _oechem.OEUnaryGroupPred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEUnaryGroupPred self) -> OEUnaryGroupPred
        __init__(OEUnaryGroupPred self, OEUnaryGroupPred arg2) -> OEUnaryGroupPred
        """
        if self.__class__ == OEUnaryGroupPred:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryGroupPred_swiginit(self, _oechem.new_OEUnaryGroupPred(_self, *args))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryGroupPred(self)
        return weakref.proxy(self)

# Register OEUnaryGroupPred in _oechem:
_oechem.OEUnaryGroupPred_swigregister(OEUnaryGroupPred)

class OEBinaryGroupFunc(object):
    r"""Proxy of C++ OESystem::OEBinaryFunction< OEChem::OEGroupBase,OEChem::OEGroupBase,bool > class."""

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

    def __call__(self, a1: "OEGroupBase", a2: "OEGroupBase") -> "bool":
        r"""__call__(OEBinaryGroupFunc self, OEGroupBase a1, OEGroupBase a2) -> bool"""
        return _oechem.OEBinaryGroupFunc___call__(self, a1, a2)

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



    def __init__(self):
        r"""__init__(OEBinaryGroupFunc self) -> OEBinaryGroupFunc"""
        if self.__class__ == OEBinaryGroupFunc:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryGroupFunc_swiginit(self, _oechem.new_OEBinaryGroupFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryGroupFunc(self)
        return weakref.proxy(self)

# Register OEBinaryGroupFunc in _oechem:
_oechem.OEBinaryGroupFunc_swigregister(OEBinaryGroupFunc)

class OEBinaryGroupPred(OEBinaryGroupFunc):
    r"""Proxy of C++ OESystem::OEBinaryPredicate< OEChem::OEGroupBase,OEChem::OEGroupBase > class."""

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

    def __call__(self, a1: "OEGroupBase", a2: "OEGroupBase") -> "bool":
        r"""__call__(OEBinaryGroupPred self, OEGroupBase a1, OEGroupBase a2) -> bool"""
        return _oechem.OEBinaryGroupPred___call__(self, a1, a2)

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



    def CreatePredicateCopy(self) -> "OESystem::OEBinaryPredicate< OEChem::OEGroupBase,OEChem::OEGroupBase > *":
        r"""CreatePredicateCopy(OEBinaryGroupPred self) -> OEBinaryGroupPred"""
        return _oechem.OEBinaryGroupPred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEBinaryGroupPred self) -> OEBinaryGroupPred
        __init__(OEBinaryGroupPred self, OEBinaryGroupPred arg2) -> OEBinaryGroupPred
        """
        if self.__class__ == OEBinaryGroupPred:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryGroupPred_swiginit(self, _oechem.new_OEBinaryGroupPred(_self, *args))
    __swig_destroy__ = _oechem.delete_OEBinaryGroupPred
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryGroupPred(self)
        return weakref.proxy(self)

# Register OEBinaryGroupPred in _oechem:
_oechem.OEBinaryGroupPred_swigregister(OEBinaryGroupPred)


class OENotGroup(OEUnaryGroupPred):
    """Negation of an OEUnary Group Pred"""
    def __init__(self, func):
        """__init__(self, OEUnary Group Pred func) -> OENotNAME"""
        OEUnaryGroupPred.__init__(self)
        if not isinstance(func, OEUnaryGroupPred):
            raise TypeError("Expected a OEUnary Group Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj):
        """__call__(self, OEGroupBase obj) -> bool"""
        return not self._func(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func).__disown__()

class OEAndGroup(OEUnaryGroupPred):
    """Logical 'and' of two OEUnary Group Preds"""
    def __init__(self, func1, func2):
        """__init__(self, OEUnary Group Pred func1, OEUnary Group Pred func2) -> OEAnd Group"""
        OEUnaryGroupPred.__init__(self)
        if not isinstance(func1, OEUnaryGroupPred):
            raise TypeError("Expected a OEUnary Group Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryGroupPred):
            raise TypeError("Expected a OEUnary Group Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEGroupBase obj) -> bool"""
        return self._func1(obj) and self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEOrGroup(OEUnaryGroupPred):
    """Logical 'or' of two OEUnary Group Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Group"""
        OEUnaryGroupPred.__init__(self)
        if not isinstance(func1, OEUnaryGroupPred):
            raise TypeError("Expected a OEUnary Group Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryGroupPred):
            raise TypeError("Expected a OEUnary Group Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEGroupBase obj) -> bool"""
        return self._func1(obj) or self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()


class OEBinaryNotGroup(OEBinaryGroupPred):
    """Negation of an OEBinary Group Pred"""
    def __init__(self, func):
        """__init__(self, OEBinary Group Pred func) -> OENot Group"""
        OEBinaryGroupPred.__init__(self)
        if not isinstance(func, OEBinaryGroupPred):
            raise TypeError("Expected a OEBinary Group Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj1, obj2):
        """__call__(self, OEGroupBase obj1, OEGroupBase obj2) -> bool"""
        return not self._func(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func).__disown__()

class OEBinaryAndGroup(OEBinaryGroupPred):
    """Logical 'and' of two OEBinary Group Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Group"""
        OEBinaryGroupPred.__init__(self)
        if not isinstance(func1, OEBinaryGroupPred):
            raise TypeError("Expected a OEBinary Group Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryGroupPred):
            raise TypeError("Expected a OEBinary Group Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEGroupBase obj1, OEGroupBase obj2) -> bool"""
        return self._func1(obj1, obj2) and self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEBinaryOrGroup(OEBinaryGroupPred):
    """Logical 'or' of two OEBinary Group Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd Group"""
        OEBinaryGroupPred.__init__(self)
        if not isinstance(func1, OEBinaryGroupPred):
            raise TypeError("Expected a OEBinary Group Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryGroupPred):
            raise TypeError("Expected a OEBinary Group Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEGroupBase obj1, OEGroupBase obj2) -> bool"""
        return self._func1(obj1, obj2) or self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEUnaryFuncBondAtom(object):
    r"""Proxy of C++ OESystem::OEUnaryFunction< OEChem::OEBondBase *,OEChem::OEAtomBase * > class."""

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

    def __call__(self, arg0: "OEBondBase") -> "OEChem::OEAtomBase *":
        r"""__call__(OEUnaryFuncBondAtom self, OEBondBase arg0) -> OEAtomBase"""
        return _oechem.OEUnaryFuncBondAtom___call__(self, arg0)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEBondBase *,OEChem::OEAtomBase * >::base_type *":
        r"""CreateCopy(OEUnaryFuncBondAtom self) -> OEUnaryFuncBondAtom"""
        return _oechem.OEUnaryFuncBondAtom_CreateCopy(self)

    def __init__(self):
        r"""__init__(OEUnaryFuncBondAtom self) -> OEUnaryFuncBondAtom"""
        if self.__class__ == OEUnaryFuncBondAtom:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryFuncBondAtom_swiginit(self, _oechem.new_OEUnaryFuncBondAtom(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryFuncBondAtom(self)
        return weakref.proxy(self)

# Register OEUnaryFuncBondAtom in _oechem:
_oechem.OEUnaryFuncBondAtom_swigregister(OEUnaryFuncBondAtom)

class OEHasAtomName(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEHasAtomName 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, name: "char const *"):
        r"""__init__(OEHasAtomName self, char const * name) -> OEHasAtomName"""
        _oechem.OEHasAtomName_swiginit(self, _oechem.new_OEHasAtomName(name))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEHasAtomName self, OEAtomBase atom) -> bool"""
        return _oechem.OEHasAtomName___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEHasAtomName

# Register OEHasAtomName in _oechem:
_oechem.OEHasAtomName_swigregister(OEHasAtomName)

class OEHasChainID(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEHasChainID 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, id: "char const"):
        r"""__init__(OEHasChainID self, char const id) -> OEHasChainID"""
        _oechem.OEHasChainID_swiginit(self, _oechem.new_OEHasChainID(id))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEHasChainID self, OEAtomBase atom) -> bool"""
        return _oechem.OEHasChainID___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEHasChainID

# Register OEHasChainID in _oechem:
_oechem.OEHasChainID_swigregister(OEHasChainID)

class OEHasResidueNumber(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEHasResidueNumber 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, num: "int"):
        r"""__init__(OEHasResidueNumber self, int num) -> OEHasResidueNumber"""
        _oechem.OEHasResidueNumber_swiginit(self, _oechem.new_OEHasResidueNumber(num))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEHasResidueNumber self, OEAtomBase atom) -> bool"""
        return _oechem.OEHasResidueNumber___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEHasResidueNumber

# Register OEHasResidueNumber in _oechem:
_oechem.OEHasResidueNumber_swigregister(OEHasResidueNumber)

class OEHasFragmentNumber(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEHasFragmentNumber 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, num: "unsigned int"):
        r"""__init__(OEHasFragmentNumber self, unsigned int num) -> OEHasFragmentNumber"""
        _oechem.OEHasFragmentNumber_swiginit(self, _oechem.new_OEHasFragmentNumber(num))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEHasFragmentNumber self, OEAtomBase atom) -> bool"""
        return _oechem.OEHasFragmentNumber___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEHasFragmentNumber

# Register OEHasFragmentNumber in _oechem:
_oechem.OEHasFragmentNumber_swigregister(OEHasFragmentNumber)

class OEHasMapIdx(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEHasMapIdx 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, idx: "unsigned int"=0):
        r"""__init__(OEHasMapIdx self, unsigned int idx=0) -> OEHasMapIdx"""
        _oechem.OEHasMapIdx_swiginit(self, _oechem.new_OEHasMapIdx(idx))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEHasMapIdx self, OEAtomBase atom) -> bool"""
        return _oechem.OEHasMapIdx___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEHasMapIdx

# Register OEHasMapIdx in _oechem:
_oechem.OEHasMapIdx_swigregister(OEHasMapIdx)

class OEHasAtomicNum(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEHasAtomicNum 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, an: "unsigned int"):
        r"""__init__(OEHasAtomicNum self, unsigned int an) -> OEHasAtomicNum"""
        _oechem.OEHasAtomicNum_swiginit(self, _oechem.new_OEHasAtomicNum(an))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEHasAtomicNum self, OEAtomBase atom) -> bool"""
        return _oechem.OEHasAtomicNum___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEHasAtomicNum

# Register OEHasAtomicNum in _oechem:
_oechem.OEHasAtomicNum_swigregister(OEHasAtomicNum)

class OEHasHvyDegree(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEHasHvyDegree 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, h: "unsigned int"):
        r"""__init__(OEHasHvyDegree self, unsigned int h) -> OEHasHvyDegree"""
        _oechem.OEHasHvyDegree_swiginit(self, _oechem.new_OEHasHvyDegree(h))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEHasHvyDegree self, OEAtomBase atom) -> bool"""
        return _oechem.OEHasHvyDegree___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEHasHvyDegree

# Register OEHasHvyDegree in _oechem:
_oechem.OEHasHvyDegree_swigregister(OEHasHvyDegree)

class OEHasFormalCharge(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEHasFormalCharge 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, c: "int"):
        r"""__init__(OEHasFormalCharge self, int c) -> OEHasFormalCharge"""
        _oechem.OEHasFormalCharge_swiginit(self, _oechem.new_OEHasFormalCharge(c))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEHasFormalCharge self, OEAtomBase atom) -> bool"""
        return _oechem.OEHasFormalCharge___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEHasFormalCharge

# Register OEHasFormalCharge in _oechem:
_oechem.OEHasFormalCharge_swigregister(OEHasFormalCharge)

class OEIsRGroup(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsRGroup 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, idx: "unsigned int"=0):
        r"""__init__(OEIsRGroup self, unsigned int idx=0) -> OEIsRGroup"""
        _oechem.OEIsRGroup_swiginit(self, _oechem.new_OEIsRGroup(idx))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsRGroup self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsRGroup___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEIsRGroup

# Register OEIsRGroup in _oechem:
_oechem.OEIsRGroup_swigregister(OEIsRGroup)

class OENthAtom(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OENthAtom 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, n: "unsigned int", start: "unsigned int"=0):
        r"""__init__(OENthAtom self, unsigned int n, unsigned int start=0) -> OENthAtom"""
        _oechem.OENthAtom_swiginit(self, _oechem.new_OENthAtom(n, start))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OENthAtom self, OEAtomBase atom) -> bool"""
        return _oechem.OENthAtom___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OENthAtom

# Register OENthAtom in _oechem:
_oechem.OENthAtom_swigregister(OENthAtom)

class OEIsBridgeHead(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsBridgeHead 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__(OEIsBridgeHead self, OEMolBase mol) -> OEIsBridgeHead
        __init__(OEIsBridgeHead self, OEIsBridgeHead rhs) -> OEIsBridgeHead
        """
        _oechem.OEIsBridgeHead_swiginit(self, _oechem.new_OEIsBridgeHead(*args))
    __swig_destroy__ = _oechem.delete_OEIsBridgeHead

    def __call__(self, *args) -> "bool":
        r"""
        __call__(OEIsBridgeHead self, OEIsBridgeHead rhs) -> OEIsBridgeHead
        __call__(OEIsBridgeHead self, OEAtomBase atom) -> bool
        """
        return _oechem.OEIsBridgeHead___call__(self, *args)

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



# Register OEIsBridgeHead in _oechem:
_oechem.OEIsBridgeHead_swigregister(OEIsBridgeHead)

class OEIsHydrogen(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsHydrogen class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsHydrogen self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsHydrogen___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsHydrogen self) -> OEIsHydrogen"""
        _oechem.OEIsHydrogen_swiginit(self, _oechem.new_OEIsHydrogen())
    __swig_destroy__ = _oechem.delete_OEIsHydrogen

# Register OEIsHydrogen in _oechem:
_oechem.OEIsHydrogen_swigregister(OEIsHydrogen)

class OEIsHeavy(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsHeavy class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsHeavy self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsHeavy___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsHeavy self) -> OEIsHeavy"""
        _oechem.OEIsHeavy_swiginit(self, _oechem.new_OEIsHeavy())
    __swig_destroy__ = _oechem.delete_OEIsHeavy

# Register OEIsHeavy in _oechem:
_oechem.OEIsHeavy_swigregister(OEIsHeavy)

class OEIsHetero(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsHetero class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsHetero self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsHetero___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsHetero self) -> OEIsHetero"""
        _oechem.OEIsHetero_swiginit(self, _oechem.new_OEIsHetero())
    __swig_destroy__ = _oechem.delete_OEIsHetero

# Register OEIsHetero in _oechem:
_oechem.OEIsHetero_swigregister(OEIsHetero)

class OEIsMetal(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsMetal class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsMetal self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsMetal___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsMetal self) -> OEIsMetal"""
        _oechem.OEIsMetal_swiginit(self, _oechem.new_OEIsMetal())
    __swig_destroy__ = _oechem.delete_OEIsMetal

# Register OEIsMetal in _oechem:
_oechem.OEIsMetal_swigregister(OEIsMetal)

class OEIsPolar(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsPolar class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsPolar self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsPolar___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsPolar self) -> OEIsPolar"""
        _oechem.OEIsPolar_swiginit(self, _oechem.new_OEIsPolar())
    __swig_destroy__ = _oechem.delete_OEIsPolar

# Register OEIsPolar in _oechem:
_oechem.OEIsPolar_swigregister(OEIsPolar)

class OEIsPolarHydrogen(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsPolarHydrogen class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsPolarHydrogen self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsPolarHydrogen___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsPolarHydrogen self) -> OEIsPolarHydrogen"""
        _oechem.OEIsPolarHydrogen_swiginit(self, _oechem.new_OEIsPolarHydrogen())
    __swig_destroy__ = _oechem.delete_OEIsPolarHydrogen

# Register OEIsPolarHydrogen in _oechem:
_oechem.OEIsPolarHydrogen_swigregister(OEIsPolarHydrogen)

class OEIsCarbon(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsCarbon class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsCarbon self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsCarbon___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsCarbon self) -> OEIsCarbon"""
        _oechem.OEIsCarbon_swiginit(self, _oechem.new_OEIsCarbon())
    __swig_destroy__ = _oechem.delete_OEIsCarbon

# Register OEIsCarbon in _oechem:
_oechem.OEIsCarbon_swigregister(OEIsCarbon)

class OEIsCAlpha(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsCAlpha class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsCAlpha self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsCAlpha___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsCAlpha self) -> OEIsCAlpha"""
        _oechem.OEIsCAlpha_swiginit(self, _oechem.new_OEIsCAlpha())
    __swig_destroy__ = _oechem.delete_OEIsCAlpha

# Register OEIsCAlpha in _oechem:
_oechem.OEIsCAlpha_swigregister(OEIsCAlpha)

class OEIsNitrogen(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsNitrogen class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsNitrogen self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsNitrogen___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsNitrogen self) -> OEIsNitrogen"""
        _oechem.OEIsNitrogen_swiginit(self, _oechem.new_OEIsNitrogen())
    __swig_destroy__ = _oechem.delete_OEIsNitrogen

# Register OEIsNitrogen in _oechem:
_oechem.OEIsNitrogen_swigregister(OEIsNitrogen)

class OEIsInvertibleNitrogen(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsInvertibleNitrogen class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsInvertibleNitrogen self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsInvertibleNitrogen___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsInvertibleNitrogen self) -> OEIsInvertibleNitrogen"""
        _oechem.OEIsInvertibleNitrogen_swiginit(self, _oechem.new_OEIsInvertibleNitrogen())
    __swig_destroy__ = _oechem.delete_OEIsInvertibleNitrogen

# Register OEIsInvertibleNitrogen in _oechem:
_oechem.OEIsInvertibleNitrogen_swigregister(OEIsInvertibleNitrogen)

class OEIsOxygen(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsOxygen class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsOxygen self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsOxygen___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsOxygen self) -> OEIsOxygen"""
        _oechem.OEIsOxygen_swiginit(self, _oechem.new_OEIsOxygen())
    __swig_destroy__ = _oechem.delete_OEIsOxygen

# Register OEIsOxygen in _oechem:
_oechem.OEIsOxygen_swigregister(OEIsOxygen)

class OEIsHalogen(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsHalogen class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsHalogen self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsHalogen___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsHalogen self) -> OEIsHalogen"""
        _oechem.OEIsHalogen_swiginit(self, _oechem.new_OEIsHalogen())
    __swig_destroy__ = _oechem.delete_OEIsHalogen

# Register OEIsHalogen in _oechem:
_oechem.OEIsHalogen_swigregister(OEIsHalogen)

class OEIsSulfur(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsSulfur class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsSulfur self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsSulfur___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsSulfur self) -> OEIsSulfur"""
        _oechem.OEIsSulfur_swiginit(self, _oechem.new_OEIsSulfur())
    __swig_destroy__ = _oechem.delete_OEIsSulfur

# Register OEIsSulfur in _oechem:
_oechem.OEIsSulfur_swigregister(OEIsSulfur)

class OEIsPhosphorus(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsPhosphorus class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsPhosphorus self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsPhosphorus___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsPhosphorus self) -> OEIsPhosphorus"""
        _oechem.OEIsPhosphorus_swiginit(self, _oechem.new_OEIsPhosphorus())
    __swig_destroy__ = _oechem.delete_OEIsPhosphorus

# Register OEIsPhosphorus in _oechem:
_oechem.OEIsPhosphorus_swigregister(OEIsPhosphorus)

class OEIsAromaticAtom(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsAromaticAtom class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsAromaticAtom self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsAromaticAtom___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsAromaticAtom self) -> OEIsAromaticAtom"""
        _oechem.OEIsAromaticAtom_swiginit(self, _oechem.new_OEIsAromaticAtom())
    __swig_destroy__ = _oechem.delete_OEIsAromaticAtom

# Register OEIsAromaticAtom in _oechem:
_oechem.OEIsAromaticAtom_swigregister(OEIsAromaticAtom)

class OEIsHalide(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsHalide class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsHalide self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsHalide___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsHalide self) -> OEIsHalide"""
        _oechem.OEIsHalide_swiginit(self, _oechem.new_OEIsHalide())
    __swig_destroy__ = _oechem.delete_OEIsHalide

# Register OEIsHalide in _oechem:
_oechem.OEIsHalide_swigregister(OEIsHalide)

class OEAtomIsInRing(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEAtomIsInRing class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEAtomIsInRing self, OEAtomBase atom) -> bool"""
        return _oechem.OEAtomIsInRing___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEAtomIsInRing self) -> OEAtomIsInRing"""
        _oechem.OEAtomIsInRing_swiginit(self, _oechem.new_OEAtomIsInRing())
    __swig_destroy__ = _oechem.delete_OEAtomIsInRing

# Register OEAtomIsInRing in _oechem:
_oechem.OEAtomIsInRing_swigregister(OEAtomIsInRing)

class OEAtomIsInChain(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEAtomIsInChain class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEAtomIsInChain self, OEAtomBase atom) -> bool"""
        return _oechem.OEAtomIsInChain___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEAtomIsInChain self) -> OEAtomIsInChain"""
        _oechem.OEAtomIsInChain_swiginit(self, _oechem.new_OEAtomIsInChain())
    __swig_destroy__ = _oechem.delete_OEAtomIsInChain

# Register OEAtomIsInChain in _oechem:
_oechem.OEAtomIsInChain_swigregister(OEAtomIsInChain)

class OEIsChiralAtom(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsChiralAtom class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsChiralAtom self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsChiralAtom___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsChiralAtom self) -> OEIsChiralAtom"""
        _oechem.OEIsChiralAtom_swiginit(self, _oechem.new_OEIsChiralAtom())
    __swig_destroy__ = _oechem.delete_OEIsChiralAtom

# Register OEIsChiralAtom in _oechem:
_oechem.OEIsChiralAtom_swigregister(OEIsChiralAtom)

class OEIsTermHeavyAtom(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsTermHeavyAtom 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__(OEIsTermHeavyAtom self) -> OEIsTermHeavyAtom"""
        _oechem.OEIsTermHeavyAtom_swiginit(self, _oechem.new_OEIsTermHeavyAtom())

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsTermHeavyAtom self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsTermHeavyAtom___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEIsTermHeavyAtom

# Register OEIsTermHeavyAtom in _oechem:
_oechem.OEIsTermHeavyAtom_swigregister(OEIsTermHeavyAtom)

class OEHasAtomStereoSpecified(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEHasAtomStereoSpecified class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEHasAtomStereoSpecified self, OEAtomBase atom) -> bool"""
        return _oechem.OEHasAtomStereoSpecified___call__(self, atom)

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



    def __init__(self, *args):
        r"""
        __init__(OEHasAtomStereoSpecified self) -> OEHasAtomStereoSpecified
        __init__(OEHasAtomStereoSpecified self, unsigned int v) -> OEHasAtomStereoSpecified
        """
        _oechem.OEHasAtomStereoSpecified_swiginit(self, _oechem.new_OEHasAtomStereoSpecified(*args))
    __swig_destroy__ = _oechem.delete_OEHasAtomStereoSpecified

# Register OEHasAtomStereoSpecified in _oechem:
_oechem.OEHasAtomStereoSpecified_swigregister(OEHasAtomStereoSpecified)

class OEHasAlphaBetaUnsat(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEHasAlphaBetaUnsat 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, includePandS: "bool"=True):
        r"""__init__(OEHasAlphaBetaUnsat self, bool includePandS=True) -> OEHasAlphaBetaUnsat"""
        _oechem.OEHasAlphaBetaUnsat_swiginit(self, _oechem.new_OEHasAlphaBetaUnsat(includePandS))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEHasAlphaBetaUnsat self, OEAtomBase atom) -> bool"""
        return _oechem.OEHasAlphaBetaUnsat___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEHasAlphaBetaUnsat

# Register OEHasAlphaBetaUnsat in _oechem:
_oechem.OEHasAlphaBetaUnsat_swigregister(OEHasAlphaBetaUnsat)

class OEAtomIsInResidue(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEAtomIsInResidue 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__(OEAtomIsInResidue self, OEResidue r) -> OEAtomIsInResidue
        __init__(OEAtomIsInResidue self, OEAtomIsInResidue rhs) -> OEAtomIsInResidue
        """
        _oechem.OEAtomIsInResidue_swiginit(self, _oechem.new_OEAtomIsInResidue(*args))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEAtomIsInResidue self, OEAtomBase atom) -> bool"""
        return _oechem.OEAtomIsInResidue___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEAtomIsInResidue

# Register OEAtomIsInResidue in _oechem:
_oechem.OEAtomIsInResidue_swigregister(OEAtomIsInResidue)

class OEAtomIsInReactant(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEAtomIsInReactant class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEAtomIsInReactant self, OEAtomBase atom) -> bool"""
        return _oechem.OEAtomIsInReactant___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEAtomIsInReactant self) -> OEAtomIsInReactant"""
        _oechem.OEAtomIsInReactant_swiginit(self, _oechem.new_OEAtomIsInReactant())
    __swig_destroy__ = _oechem.delete_OEAtomIsInReactant

# Register OEAtomIsInReactant in _oechem:
_oechem.OEAtomIsInReactant_swigregister(OEAtomIsInReactant)

class OEAtomIsInAgent(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEAtomIsInAgent class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEAtomIsInAgent self, OEAtomBase atom) -> bool"""
        return _oechem.OEAtomIsInAgent___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEAtomIsInAgent self) -> OEAtomIsInAgent"""
        _oechem.OEAtomIsInAgent_swiginit(self, _oechem.new_OEAtomIsInAgent())
    __swig_destroy__ = _oechem.delete_OEAtomIsInAgent

# Register OEAtomIsInAgent in _oechem:
_oechem.OEAtomIsInAgent_swigregister(OEAtomIsInAgent)

class OEAtomIsInProduct(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEAtomIsInProduct class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEAtomIsInProduct self, OEAtomBase atom) -> bool"""
        return _oechem.OEAtomIsInProduct___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEAtomIsInProduct self) -> OEAtomIsInProduct"""
        _oechem.OEAtomIsInProduct_swiginit(self, _oechem.new_OEAtomIsInProduct())
    __swig_destroy__ = _oechem.delete_OEAtomIsInProduct

# Register OEAtomIsInProduct in _oechem:
_oechem.OEAtomIsInProduct_swigregister(OEAtomIsInProduct)

class OEIsNonRingAtomDoubleBondedToRing(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsNonRingAtomDoubleBondedToRing class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsNonRingAtomDoubleBondedToRing self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsNonRingAtomDoubleBondedToRing___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsNonRingAtomDoubleBondedToRing self) -> OEIsNonRingAtomDoubleBondedToRing"""
        _oechem.OEIsNonRingAtomDoubleBondedToRing_swiginit(self, _oechem.new_OEIsNonRingAtomDoubleBondedToRing())
    __swig_destroy__ = _oechem.delete_OEIsNonRingAtomDoubleBondedToRing

# Register OEIsNonRingAtomDoubleBondedToRing in _oechem:
_oechem.OEIsNonRingAtomDoubleBondedToRing_swigregister(OEIsNonRingAtomDoubleBondedToRing)

class OEIsAtomHybridization(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsAtomHybridization 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, h: "unsigned int"):
        r"""__init__(OEIsAtomHybridization self, unsigned int h) -> OEIsAtomHybridization"""
        _oechem.OEIsAtomHybridization_swiginit(self, _oechem.new_OEIsAtomHybridization(h))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsAtomHybridization self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsAtomHybridization___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEIsAtomHybridization

# Register OEIsAtomHybridization in _oechem:
_oechem.OEIsAtomHybridization_swigregister(OEIsAtomHybridization)

class OEHasOrder(OEUnaryBondPred):
    r"""Proxy of C++ OEChem::OEHasOrder 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, o: "unsigned int"):
        r"""__init__(OEHasOrder self, unsigned int o) -> OEHasOrder"""
        _oechem.OEHasOrder_swiginit(self, _oechem.new_OEHasOrder(o))

    def __call__(self, bond: "OEBondBase") -> "bool":
        r"""__call__(OEHasOrder self, OEBondBase bond) -> bool"""
        return _oechem.OEHasOrder___call__(self, bond)

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


    __swig_destroy__ = _oechem.delete_OEHasOrder

# Register OEHasOrder in _oechem:
_oechem.OEHasOrder_swigregister(OEHasOrder)

class OEBondIsInRing(OEUnaryBondPred):
    r"""Proxy of C++ OEChem::OEBondIsInRing class."""

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

    def __call__(self, bond: "OEBondBase") -> "bool":
        r"""__call__(OEBondIsInRing self, OEBondBase bond) -> bool"""
        return _oechem.OEBondIsInRing___call__(self, bond)

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



    def __init__(self):
        r"""__init__(OEBondIsInRing self) -> OEBondIsInRing"""
        _oechem.OEBondIsInRing_swiginit(self, _oechem.new_OEBondIsInRing())
    __swig_destroy__ = _oechem.delete_OEBondIsInRing

# Register OEBondIsInRing in _oechem:
_oechem.OEBondIsInRing_swigregister(OEBondIsInRing)

class OEBondIsInChain(OEUnaryBondPred):
    r"""Proxy of C++ OEChem::OEBondIsInChain class."""

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

    def __call__(self, bond: "OEBondBase") -> "bool":
        r"""__call__(OEBondIsInChain self, OEBondBase bond) -> bool"""
        return _oechem.OEBondIsInChain___call__(self, bond)

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



    def __init__(self):
        r"""__init__(OEBondIsInChain self) -> OEBondIsInChain"""
        _oechem.OEBondIsInChain_swiginit(self, _oechem.new_OEBondIsInChain())
    __swig_destroy__ = _oechem.delete_OEBondIsInChain

# Register OEBondIsInChain in _oechem:
_oechem.OEBondIsInChain_swigregister(OEBondIsInChain)

class OEIsRotor(OEUnaryBondPred):
    r"""Proxy of C++ OEChem::OEIsRotor 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, includeHydrogen: "bool"=False):
        r"""__init__(OEIsRotor self, bool includeHydrogen=False) -> OEIsRotor"""
        _oechem.OEIsRotor_swiginit(self, _oechem.new_OEIsRotor(includeHydrogen))

    def __call__(self, bond: "OEBondBase") -> "bool":
        r"""__call__(OEIsRotor self, OEBondBase bond) -> bool"""
        return _oechem.OEIsRotor___call__(self, bond)

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


    __swig_destroy__ = _oechem.delete_OEIsRotor

# Register OEIsRotor in _oechem:
_oechem.OEIsRotor_swigregister(OEIsRotor)

class OEIsChiralBond(OEUnaryBondPred):
    r"""Proxy of C++ OEChem::OEIsChiralBond class."""

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

    def __call__(self, bond: "OEBondBase") -> "bool":
        r"""__call__(OEIsChiralBond self, OEBondBase bond) -> bool"""
        return _oechem.OEIsChiralBond___call__(self, bond)

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



    def __init__(self):
        r"""__init__(OEIsChiralBond self) -> OEIsChiralBond"""
        _oechem.OEIsChiralBond_swiginit(self, _oechem.new_OEIsChiralBond())
    __swig_destroy__ = _oechem.delete_OEIsChiralBond

# Register OEIsChiralBond in _oechem:
_oechem.OEIsChiralBond_swigregister(OEIsChiralBond)

class OEHasBondStereoSpecified(OEUnaryBondPred):
    r"""Proxy of C++ OEChem::OEHasBondStereoSpecified class."""

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

    def __call__(self, bond: "OEBondBase") -> "bool":
        r"""__call__(OEHasBondStereoSpecified self, OEBondBase bond) -> bool"""
        return _oechem.OEHasBondStereoSpecified___call__(self, bond)

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



    def __init__(self, *args):
        r"""__init__(OEHasBondStereoSpecified self, unsigned int v=) -> OEHasBondStereoSpecified"""
        _oechem.OEHasBondStereoSpecified_swiginit(self, _oechem.new_OEHasBondStereoSpecified(*args))
    __swig_destroy__ = _oechem.delete_OEHasBondStereoSpecified

# Register OEHasBondStereoSpecified in _oechem:
_oechem.OEHasBondStereoSpecified_swigregister(OEHasBondStereoSpecified)

class OEIsAromaticBond(OEUnaryBondPred):
    r"""Proxy of C++ OEChem::OEIsAromaticBond class."""

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

    def __call__(self, bond: "OEBondBase") -> "bool":
        r"""__call__(OEIsAromaticBond self, OEBondBase bond) -> bool"""
        return _oechem.OEIsAromaticBond___call__(self, bond)

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



    def __init__(self):
        r"""__init__(OEIsAromaticBond self) -> OEIsAromaticBond"""
        _oechem.OEIsAromaticBond_swiginit(self, _oechem.new_OEIsAromaticBond())
    __swig_destroy__ = _oechem.delete_OEIsAromaticBond

# Register OEIsAromaticBond in _oechem:
_oechem.OEIsAromaticBond_swigregister(OEIsAromaticBond)

class OEGetNbrAtom(OEUnaryFuncBondAtom):
    r"""Proxy of C++ OEChem::OEGetNbrAtom 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, atom: "OEAtomBase"):
        r"""__init__(OEGetNbrAtom self, OEAtomBase atom) -> OEGetNbrAtom"""
        _oechem.OEGetNbrAtom_swiginit(self, _oechem.new_OEGetNbrAtom(atom))

    def __call__(self, arg2: "OEBondBase") -> "OESystem::OEUnaryFunction< OEChem::OEBondBase *,OEChem::OEAtomBase * >::result_type":
        r"""__call__(OEGetNbrAtom self, OEBondBase arg2) -> OEAtomBase"""
        return _oechem.OEGetNbrAtom___call__(self, arg2)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEBondBase *,OEChem::OEAtomBase *,true,true > *":
        r"""CreateCopy(OEGetNbrAtom self) -> OEUnaryFuncBondAtom"""
        return _oechem.OEGetNbrAtom_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEGetNbrAtom

# Register OEGetNbrAtom in _oechem:
_oechem.OEGetNbrAtom_swigregister(OEGetNbrAtom)

class OEInSamePart(OEBinaryAtomPred):
    r"""Proxy of C++ OEChem::OEInSamePart 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__(OEInSamePart self, unsigned int * parts, bool boolval=True) -> OEInSamePart
        __init__(OEInSamePart self, OEInSamePart rhs) -> OEInSamePart
        """
        _oechem.OEInSamePart_swiginit(self, _oechem.new_OEInSamePart(*args))
    __swig_destroy__ = _oechem.delete_OEInSamePart

    def __call__(self, a1: "OEAtomBase", a2: "OEAtomBase") -> "bool":
        r"""__call__(OEInSamePart self, OEAtomBase a1, OEAtomBase a2) -> bool"""
        return _oechem.OEInSamePart___call__(self, a1, a2)

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



# Register OEInSamePart in _oechem:
_oechem.OEInSamePart_swigregister(OEInSamePart)


def OERingBondCount(atom: "OEAtomBase") -> "unsigned int":
    r"""OERingBondCount(OEAtomBase atom) -> unsigned int"""
    return _oechem.OERingBondCount(atom)
class OEHasGroupType(OEUnaryGroupPred):
    r"""Proxy of C++ OEChem::OEHasGroupType 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, type: "unsigned int"):
        r"""__init__(OEHasGroupType self, unsigned int type) -> OEHasGroupType"""
        _oechem.OEHasGroupType_swiginit(self, _oechem.new_OEHasGroupType(type))

    def __call__(self, group: "OEGroupBase") -> "bool":
        r"""__call__(OEHasGroupType self, OEGroupBase group) -> bool"""
        return _oechem.OEHasGroupType___call__(self, group)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEGroupBase,bool,true,true > *":
        r"""CreateCopy(OEHasGroupType self) -> OEUnaryGroupBoolFunc"""
        return _oechem.OEHasGroupType_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEHasGroupType

# Register OEHasGroupType in _oechem:
_oechem.OEHasGroupType_swigregister(OEHasGroupType)

class OEIsMDLStereoGroup(OEUnaryGroupPred):
    r"""Proxy of C++ OEChem::OEIsMDLStereoGroup 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__(OEIsMDLStereoGroup self) -> OEIsMDLStereoGroup"""
        _oechem.OEIsMDLStereoGroup_swiginit(self, _oechem.new_OEIsMDLStereoGroup())

    def __call__(self, group: "OEGroupBase") -> "bool":
        r"""__call__(OEIsMDLStereoGroup self, OEGroupBase group) -> bool"""
        return _oechem.OEIsMDLStereoGroup___call__(self, group)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEGroupBase,bool,true,true > *":
        r"""CreateCopy(OEIsMDLStereoGroup self) -> OEUnaryGroupBoolFunc"""
        return _oechem.OEIsMDLStereoGroup_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEIsMDLStereoGroup

# Register OEIsMDLStereoGroup in _oechem:
_oechem.OEIsMDLStereoGroup_swigregister(OEIsMDLStereoGroup)

class OEIsRxnComponentGroup(OEUnaryGroupPred):
    r"""Proxy of C++ OEChem::OEIsRxnComponentGroup 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__(OEIsRxnComponentGroup self) -> OEIsRxnComponentGroup"""
        _oechem.OEIsRxnComponentGroup_swiginit(self, _oechem.new_OEIsRxnComponentGroup())

    def __call__(self, group: "OEGroupBase") -> "bool":
        r"""__call__(OEIsRxnComponentGroup self, OEGroupBase group) -> bool"""
        return _oechem.OEIsRxnComponentGroup___call__(self, group)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEGroupBase,bool,true,true > *":
        r"""CreateCopy(OEIsRxnComponentGroup self) -> OEUnaryGroupBoolFunc"""
        return _oechem.OEIsRxnComponentGroup_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEIsRxnComponentGroup

# Register OEIsRxnComponentGroup in _oechem:
_oechem.OEIsRxnComponentGroup_swigregister(OEIsRxnComponentGroup)

class OEIsReactantGroup(OEUnaryGroupPred):
    r"""Proxy of C++ OEChem::OEIsReactantGroup 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__(OEIsReactantGroup self) -> OEIsReactantGroup"""
        _oechem.OEIsReactantGroup_swiginit(self, _oechem.new_OEIsReactantGroup())

    def __call__(self, group: "OEGroupBase") -> "bool":
        r"""__call__(OEIsReactantGroup self, OEGroupBase group) -> bool"""
        return _oechem.OEIsReactantGroup___call__(self, group)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEGroupBase,bool,true,true > *":
        r"""CreateCopy(OEIsReactantGroup self) -> OEUnaryGroupBoolFunc"""
        return _oechem.OEIsReactantGroup_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEIsReactantGroup

# Register OEIsReactantGroup in _oechem:
_oechem.OEIsReactantGroup_swigregister(OEIsReactantGroup)

class OEIsProductGroup(OEUnaryGroupPred):
    r"""Proxy of C++ OEChem::OEIsProductGroup 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__(OEIsProductGroup self) -> OEIsProductGroup"""
        _oechem.OEIsProductGroup_swiginit(self, _oechem.new_OEIsProductGroup())

    def __call__(self, group: "OEGroupBase") -> "bool":
        r"""__call__(OEIsProductGroup self, OEGroupBase group) -> bool"""
        return _oechem.OEIsProductGroup___call__(self, group)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEGroupBase,bool,true,true > *":
        r"""CreateCopy(OEIsProductGroup self) -> OEUnaryGroupBoolFunc"""
        return _oechem.OEIsProductGroup_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEIsProductGroup

# Register OEIsProductGroup in _oechem:
_oechem.OEIsProductGroup_swigregister(OEIsProductGroup)

class OEHasAtomInGroup(OEUnaryGroupPred):
    r"""Proxy of C++ OEChem::OEHasAtomInGroup 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, atom: "OEAtomBase"):
        r"""__init__(OEHasAtomInGroup self, OEAtomBase atom) -> OEHasAtomInGroup"""
        _oechem.OEHasAtomInGroup_swiginit(self, _oechem.new_OEHasAtomInGroup(atom))

    def __call__(self, group: "OEGroupBase") -> "bool":
        r"""__call__(OEHasAtomInGroup self, OEGroupBase group) -> bool"""
        return _oechem.OEHasAtomInGroup___call__(self, group)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEGroupBase,bool,true,true > *":
        r"""CreateCopy(OEHasAtomInGroup self) -> OEUnaryGroupBoolFunc"""
        return _oechem.OEHasAtomInGroup_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEHasAtomInGroup

# Register OEHasAtomInGroup in _oechem:
_oechem.OEHasAtomInGroup_swigregister(OEHasAtomInGroup)

class OEHasBondInGroup(OEUnaryGroupPred):
    r"""Proxy of C++ OEChem::OEHasBondInGroup 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, bond: "OEBondBase"):
        r"""__init__(OEHasBondInGroup self, OEBondBase bond) -> OEHasBondInGroup"""
        _oechem.OEHasBondInGroup_swiginit(self, _oechem.new_OEHasBondInGroup(bond))

    def __call__(self, group: "OEGroupBase") -> "bool":
        r"""__call__(OEHasBondInGroup self, OEGroupBase group) -> bool"""
        return _oechem.OEHasBondInGroup___call__(self, group)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEGroupBase,bool,true,true > *":
        r"""CreateCopy(OEHasBondInGroup self) -> OEUnaryGroupBoolFunc"""
        return _oechem.OEHasBondInGroup_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEHasBondInGroup

# Register OEHasBondInGroup in _oechem:
_oechem.OEHasBondInGroup_swigregister(OEHasBondInGroup)

class HasAtomIdx(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::HasIdx< OEChem::OEAtomBase > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    _idx = property(_oechem.HasAtomIdx__idx_get, _oechem.HasAtomIdx__idx_set, doc=r"""_idx : unsigned int""")

    def __init__(self, idx: "unsigned int"):
        r"""__init__(HasAtomIdx self, unsigned int idx) -> HasAtomIdx"""
        _oechem.HasAtomIdx_swiginit(self, _oechem.new_HasAtomIdx(idx))

    def __call__(self, arg: "OEAtomBase") -> "bool":
        r"""__call__(HasAtomIdx self, OEAtomBase arg) -> bool"""
        return _oechem.HasAtomIdx___call__(self, arg)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEAtomBase,bool,true,true > *":
        r"""CreateCopy(HasAtomIdx self) -> OEUnaryAtomBoolFunc"""
        return _oechem.HasAtomIdx_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_HasAtomIdx

# Register HasAtomIdx in _oechem:
_oechem.HasAtomIdx_swigregister(HasAtomIdx)

class HasBondIdx(OEUnaryBondPred):
    r"""Proxy of C++ OEChem::HasIdx< OEChem::OEBondBase > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    _idx = property(_oechem.HasBondIdx__idx_get, _oechem.HasBondIdx__idx_set, doc=r"""_idx : unsigned int""")

    def __init__(self, idx: "unsigned int"):
        r"""__init__(HasBondIdx self, unsigned int idx) -> HasBondIdx"""
        _oechem.HasBondIdx_swiginit(self, _oechem.new_HasBondIdx(idx))

    def __call__(self, arg: "OEBondBase") -> "bool":
        r"""__call__(HasBondIdx self, OEBondBase arg) -> bool"""
        return _oechem.HasBondIdx___call__(self, arg)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEBondBase,bool,true,true > *":
        r"""CreateCopy(HasBondIdx self) -> OEUnaryBondBoolFunc"""
        return _oechem.HasBondIdx_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_HasBondIdx

# Register HasBondIdx in _oechem:
_oechem.HasBondIdx_swigregister(HasBondIdx)

class HasConfIdx(OEUnaryConfPred):
    r"""Proxy of C++ OEChem::HasIdx< OEChem::OEConfBase > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    _idx = property(_oechem.HasConfIdx__idx_get, _oechem.HasConfIdx__idx_set, doc=r"""_idx : unsigned int""")

    def __init__(self, idx: "unsigned int"):
        r"""__init__(HasConfIdx self, unsigned int idx) -> HasConfIdx"""
        _oechem.HasConfIdx_swiginit(self, _oechem.new_HasConfIdx(idx))

    def __call__(self, arg: "OEConfBase") -> "bool":
        r"""__call__(HasConfIdx self, OEConfBase arg) -> bool"""
        return _oechem.HasConfIdx___call__(self, arg)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEConfBase,bool,true,true > *":
        r"""CreateCopy(HasConfIdx self) -> OEUnaryConfBoolFunc"""
        return _oechem.HasConfIdx_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_HasConfIdx

# Register HasConfIdx in _oechem:
_oechem.HasConfIdx_swigregister(HasConfIdx)

class OEHasAtomIdx(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEHasIdx< OEChem::OEAtomBase > 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, idx: "unsigned int"):
        r"""__init__(OEHasAtomIdx self, unsigned int idx) -> OEHasAtomIdx"""
        _oechem.OEHasAtomIdx_swiginit(self, _oechem.new_OEHasAtomIdx(idx))

    def __call__(self, arg: "OEAtomBase") -> "bool":
        r"""__call__(OEHasAtomIdx self, OEAtomBase arg) -> bool"""
        return _oechem.OEHasAtomIdx___call__(self, arg)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEAtomBase,bool,true,true > *":
        r"""CreateCopy(OEHasAtomIdx self) -> OEUnaryAtomBoolFunc"""
        return _oechem.OEHasAtomIdx_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEHasAtomIdx

# Register OEHasAtomIdx in _oechem:
_oechem.OEHasAtomIdx_swigregister(OEHasAtomIdx)

class OEHasBondIdx(OEUnaryBondPred):
    r"""Proxy of C++ OEChem::OEHasIdx< OEChem::OEBondBase > 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, idx: "unsigned int"):
        r"""__init__(OEHasBondIdx self, unsigned int idx) -> OEHasBondIdx"""
        _oechem.OEHasBondIdx_swiginit(self, _oechem.new_OEHasBondIdx(idx))

    def __call__(self, arg: "OEBondBase") -> "bool":
        r"""__call__(OEHasBondIdx self, OEBondBase arg) -> bool"""
        return _oechem.OEHasBondIdx___call__(self, arg)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEBondBase,bool,true,true > *":
        r"""CreateCopy(OEHasBondIdx self) -> OEUnaryBondBoolFunc"""
        return _oechem.OEHasBondIdx_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEHasBondIdx

# Register OEHasBondIdx in _oechem:
_oechem.OEHasBondIdx_swigregister(OEHasBondIdx)

class OEHasConfIdx(OEUnaryConfPred):
    r"""Proxy of C++ OEChem::OEHasIdx< OEChem::OEConfBase > 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, idx: "unsigned int"):
        r"""__init__(OEHasConfIdx self, unsigned int idx) -> OEHasConfIdx"""
        _oechem.OEHasConfIdx_swiginit(self, _oechem.new_OEHasConfIdx(idx))

    def __call__(self, arg: "OEConfBase") -> "bool":
        r"""__call__(OEHasConfIdx self, OEConfBase arg) -> bool"""
        return _oechem.OEHasConfIdx___call__(self, arg)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEConfBase,bool,true,true > *":
        r"""CreateCopy(OEHasConfIdx self) -> OEUnaryConfBoolFunc"""
        return _oechem.OEHasConfIdx_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEHasConfIdx

# Register OEHasConfIdx in _oechem:
_oechem.OEHasConfIdx_swigregister(OEHasConfIdx)

class OEAtomIdxSelected(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIdxSelected< OEChem::OEAtomBase > 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, bv: "OEBitVector"):
        r"""__init__(OEAtomIdxSelected self, OEBitVector bv) -> OEAtomIdxSelected"""
        _oechem.OEAtomIdxSelected_swiginit(self, _oechem.new_OEAtomIdxSelected(bv))

    def __call__(self, a: "OEAtomBase") -> "bool":
        r"""__call__(OEAtomIdxSelected self, OEAtomBase a) -> bool"""
        return _oechem.OEAtomIdxSelected___call__(self, a)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEAtomBase,bool,true,true > *":
        r"""CreateCopy(OEAtomIdxSelected self) -> OEUnaryAtomBoolFunc"""
        return _oechem.OEAtomIdxSelected_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEAtomIdxSelected

# Register OEAtomIdxSelected in _oechem:
_oechem.OEAtomIdxSelected_swigregister(OEAtomIdxSelected)

class OEBondIdxSelected(OEUnaryBondPred):
    r"""Proxy of C++ OEChem::OEIdxSelected< OEChem::OEBondBase > 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, bv: "OEBitVector"):
        r"""__init__(OEBondIdxSelected self, OEBitVector bv) -> OEBondIdxSelected"""
        _oechem.OEBondIdxSelected_swiginit(self, _oechem.new_OEBondIdxSelected(bv))

    def __call__(self, a: "OEBondBase") -> "bool":
        r"""__call__(OEBondIdxSelected self, OEBondBase a) -> bool"""
        return _oechem.OEBondIdxSelected___call__(self, a)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEBondBase,bool,true,true > *":
        r"""CreateCopy(OEBondIdxSelected self) -> OEUnaryBondBoolFunc"""
        return _oechem.OEBondIdxSelected_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEBondIdxSelected

# Register OEBondIdxSelected in _oechem:
_oechem.OEBondIdxSelected_swigregister(OEBondIdxSelected)

class OEConfIdxSelected(OEUnaryConfPred):
    r"""Proxy of C++ OEChem::OEIdxSelected< OEChem::OEConfBase > 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, bv: "OEBitVector"):
        r"""__init__(OEConfIdxSelected self, OEBitVector bv) -> OEConfIdxSelected"""
        _oechem.OEConfIdxSelected_swiginit(self, _oechem.new_OEConfIdxSelected(bv))

    def __call__(self, a: "OEConfBase") -> "bool":
        r"""__call__(OEConfIdxSelected self, OEConfBase a) -> bool"""
        return _oechem.OEConfIdxSelected___call__(self, a)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEConfBase,bool,true,true > *":
        r"""CreateCopy(OEConfIdxSelected self) -> OEUnaryConfBoolFunc"""
        return _oechem.OEConfIdxSelected_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEConfIdxSelected

# Register OEConfIdxSelected in _oechem:
_oechem.OEConfIdxSelected_swigregister(OEConfIdxSelected)

class OEMatchAtom(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEMatchFunc< OEChem::OEAtomBase > 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__(OEMatchAtom self, char const * smarts) -> OEMatchAtom
        __init__(OEMatchAtom self, OEQMolBase qm) -> OEMatchAtom
        __init__(OEMatchAtom self, OEMolBase mol, unsigned int atomMap, unsigned int bondMap) -> OEMatchAtom
        """
        _oechem.OEMatchAtom_swiginit(self, _oechem.new_OEMatchAtom(*args))

    def IsValid(self):
      return _oechem.OEMatchAtom___nonzero__(self)



    def __call__(self, arg: "OEAtomBase") -> "bool":
        r"""__call__(OEMatchAtom self, OEAtomBase arg) -> bool"""
        return _oechem.OEMatchAtom___call__(self, arg)

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


    __swig_destroy__ = _oechem.delete_OEMatchAtom

# Register OEMatchAtom in _oechem:
_oechem.OEMatchAtom_swigregister(OEMatchAtom)

class OEMatchMolBase(OEUnaryMolBasePred):
    r"""Proxy of C++ OEChem::OEMatchFunc< OEChem::OEMolBase > 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__(OEMatchMolBase self, char const * smarts) -> OEMatchMolBase
        __init__(OEMatchMolBase self, OEQMolBase qm) -> OEMatchMolBase
        __init__(OEMatchMolBase self, OEMolBase mol, unsigned int aexpr, unsigned int bexpr) -> OEMatchMolBase
        """
        _oechem.OEMatchMolBase_swiginit(self, _oechem.new_OEMatchMolBase(*args))

    def IsValid(self):
      return _oechem.OEMatchMolBase___nonzero__(self)



    def __call__(self, arg: "OEMolBase") -> "bool":
        r"""__call__(OEMatchMolBase self, OEMolBase arg) -> bool"""
        return _oechem.OEMatchMolBase___call__(self, arg)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEMolBase,bool,true,true > *":
        r"""CreateCopy(OEMatchMolBase self) -> OEUnaryMolBaseBoolFunc"""
        return _oechem.OEMatchMolBase_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEMatchMolBase

# Register OEMatchMolBase in _oechem:
_oechem.OEMatchMolBase_swigregister(OEMatchMolBase)

class OEMatchGraphMol(OEUnaryGraphMolPred):
    r"""Proxy of C++ OEChem::OEMatchFunc< OEGraphMolWrapper > 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__(OEMatchGraphMol self, char const * smarts) -> OEMatchGraphMol
        __init__(OEMatchGraphMol self, OEQMolBase qm) -> OEMatchGraphMol
        __init__(OEMatchGraphMol self, OEMolBase mol, unsigned int aexpr, unsigned int bexpr) -> OEMatchGraphMol
        """
        _oechem.OEMatchGraphMol_swiginit(self, _oechem.new_OEMatchGraphMol(*args))

    def IsValid(self):
      return _oechem.OEMatchGraphMol___nonzero__(self)



    def __call__(self, arg: "OEGraphMol") -> "bool":
        r"""__call__(OEMatchGraphMol self, OEGraphMol arg) -> bool"""
        return _oechem.OEMatchGraphMol___call__(self, arg)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEGraphMolWrapper,bool,true,true > *":
        r"""CreateCopy(OEMatchGraphMol self) -> OEUnaryGraphMolBoolFunc"""
        return _oechem.OEMatchGraphMol_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEMatchGraphMol

# Register OEMatchGraphMol in _oechem:
_oechem.OEMatchGraphMol_swigregister(OEMatchGraphMol)

class IsTrueAtom(OEUnaryAtomPred):
    r"""Proxy of C++ OESystem::OEIsTrue< OEChem::OEAtomBase > class."""

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

    def __call__(self, arg2: "OEAtomBase") -> "bool":
        r"""__call__(IsTrueAtom self, OEAtomBase arg2) -> bool"""
        return _oechem.IsTrueAtom___call__(self, arg2)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEAtomBase,bool > *":
        r"""CreateCopy(IsTrueAtom self) -> OEUnaryAtomBoolFunc"""
        return _oechem.IsTrueAtom_CreateCopy(self)

    def __init__(self):
        r"""__init__(IsTrueAtom self) -> IsTrueAtom"""
        _oechem.IsTrueAtom_swiginit(self, _oechem.new_IsTrueAtom())
    __swig_destroy__ = _oechem.delete_IsTrueAtom

# Register IsTrueAtom in _oechem:
_oechem.IsTrueAtom_swigregister(IsTrueAtom)

class IsFalseAtom(OEUnaryAtomPred):
    r"""Proxy of C++ OESystem::OEIsFalse< OEChem::OEAtomBase > class."""

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

    def __call__(self, arg2: "OEAtomBase") -> "bool":
        r"""__call__(IsFalseAtom self, OEAtomBase arg2) -> bool"""
        return _oechem.IsFalseAtom___call__(self, arg2)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEAtomBase,bool > *":
        r"""CreateCopy(IsFalseAtom self) -> OEUnaryAtomBoolFunc"""
        return _oechem.IsFalseAtom_CreateCopy(self)

    def __init__(self):
        r"""__init__(IsFalseAtom self) -> IsFalseAtom"""
        _oechem.IsFalseAtom_swiginit(self, _oechem.new_IsFalseAtom())
    __swig_destroy__ = _oechem.delete_IsFalseAtom

# Register IsFalseAtom in _oechem:
_oechem.IsFalseAtom_swigregister(IsFalseAtom)

class IsTrueBond(OEUnaryBondPred):
    r"""Proxy of C++ OESystem::OEIsTrue< OEChem::OEBondBase > class."""

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

    def __call__(self, arg2: "OEBondBase") -> "bool":
        r"""__call__(IsTrueBond self, OEBondBase arg2) -> bool"""
        return _oechem.IsTrueBond___call__(self, arg2)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEBondBase,bool > *":
        r"""CreateCopy(IsTrueBond self) -> OEUnaryBondBoolFunc"""
        return _oechem.IsTrueBond_CreateCopy(self)

    def __init__(self):
        r"""__init__(IsTrueBond self) -> IsTrueBond"""
        _oechem.IsTrueBond_swiginit(self, _oechem.new_IsTrueBond())
    __swig_destroy__ = _oechem.delete_IsTrueBond

# Register IsTrueBond in _oechem:
_oechem.IsTrueBond_swigregister(IsTrueBond)

class IsFalseBond(OEUnaryBondPred):
    r"""Proxy of C++ OESystem::OEIsFalse< OEChem::OEBondBase > class."""

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

    def __call__(self, arg2: "OEBondBase") -> "bool":
        r"""__call__(IsFalseBond self, OEBondBase arg2) -> bool"""
        return _oechem.IsFalseBond___call__(self, arg2)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEBondBase,bool > *":
        r"""CreateCopy(IsFalseBond self) -> OEUnaryBondBoolFunc"""
        return _oechem.IsFalseBond_CreateCopy(self)

    def __init__(self):
        r"""__init__(IsFalseBond self) -> IsFalseBond"""
        _oechem.IsFalseBond_swiginit(self, _oechem.new_IsFalseBond())
    __swig_destroy__ = _oechem.delete_IsFalseBond

# Register IsFalseBond in _oechem:
_oechem.IsFalseBond_swigregister(IsFalseBond)

class IsTrueConf(OEUnaryConfPred):
    r"""Proxy of C++ OESystem::OEIsTrue< OEChem::OEConfBase > class."""

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

    def __call__(self, arg2: "OEConfBase") -> "bool":
        r"""__call__(IsTrueConf self, OEConfBase arg2) -> bool"""
        return _oechem.IsTrueConf___call__(self, arg2)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEConfBase,bool > *":
        r"""CreateCopy(IsTrueConf self) -> OEUnaryConfBoolFunc"""
        return _oechem.IsTrueConf_CreateCopy(self)

    def __init__(self):
        r"""__init__(IsTrueConf self) -> IsTrueConf"""
        _oechem.IsTrueConf_swiginit(self, _oechem.new_IsTrueConf())
    __swig_destroy__ = _oechem.delete_IsTrueConf

# Register IsTrueConf in _oechem:
_oechem.IsTrueConf_swigregister(IsTrueConf)

class IsFalseConf(OEUnaryConfPred):
    r"""Proxy of C++ OESystem::OEIsFalse< OEChem::OEConfBase > class."""

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

    def __call__(self, arg2: "OEConfBase") -> "bool":
        r"""__call__(IsFalseConf self, OEConfBase arg2) -> bool"""
        return _oechem.IsFalseConf___call__(self, arg2)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEConfBase,bool > *":
        r"""CreateCopy(IsFalseConf self) -> OEUnaryConfBoolFunc"""
        return _oechem.IsFalseConf_CreateCopy(self)

    def __init__(self):
        r"""__init__(IsFalseConf self) -> IsFalseConf"""
        _oechem.IsFalseConf_swiginit(self, _oechem.new_IsFalseConf())
    __swig_destroy__ = _oechem.delete_IsFalseConf

# Register IsFalseConf in _oechem:
_oechem.IsFalseConf_swigregister(IsFalseConf)

class IsTrueGroup(OEUnaryGroupPred):
    r"""Proxy of C++ OESystem::OEIsTrue< OEChem::OEGroupBase > class."""

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

    def __call__(self, arg2: "OEGroupBase") -> "bool":
        r"""__call__(IsTrueGroup self, OEGroupBase arg2) -> bool"""
        return _oechem.IsTrueGroup___call__(self, arg2)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEGroupBase,bool > *":
        r"""CreateCopy(IsTrueGroup self) -> OEUnaryGroupBoolFunc"""
        return _oechem.IsTrueGroup_CreateCopy(self)

    def __init__(self):
        r"""__init__(IsTrueGroup self) -> IsTrueGroup"""
        _oechem.IsTrueGroup_swiginit(self, _oechem.new_IsTrueGroup())
    __swig_destroy__ = _oechem.delete_IsTrueGroup

# Register IsTrueGroup in _oechem:
_oechem.IsTrueGroup_swigregister(IsTrueGroup)

class IsFalseGroup(OEUnaryGroupPred):
    r"""Proxy of C++ OESystem::OEIsFalse< OEChem::OEGroupBase > class."""

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

    def __call__(self, arg2: "OEGroupBase") -> "bool":
        r"""__call__(IsFalseGroup self, OEGroupBase arg2) -> bool"""
        return _oechem.IsFalseGroup___call__(self, arg2)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEGroupBase,bool > *":
        r"""CreateCopy(IsFalseGroup self) -> OEUnaryGroupBoolFunc"""
        return _oechem.IsFalseGroup_CreateCopy(self)

    def __init__(self):
        r"""__init__(IsFalseGroup self) -> IsFalseGroup"""
        _oechem.IsFalseGroup_swiginit(self, _oechem.new_IsFalseGroup())
    __swig_destroy__ = _oechem.delete_IsFalseGroup

# Register IsFalseGroup in _oechem:
_oechem.IsFalseGroup_swigregister(IsFalseGroup)

class OEIsTrueAtom(IsTrueAtom):
    r"""Proxy of C++ OESystem::OEUnaryTrue< OEChem::OEAtomBase > 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__(OEIsTrueAtom self) -> OEIsTrueAtom"""
        _oechem.OEIsTrueAtom_swiginit(self, _oechem.new_OEIsTrueAtom())
    __swig_destroy__ = _oechem.delete_OEIsTrueAtom

# Register OEIsTrueAtom in _oechem:
_oechem.OEIsTrueAtom_swigregister(OEIsTrueAtom)

class OEIsFalseAtom(IsFalseAtom):
    r"""Proxy of C++ OESystem::OEUnaryFalse< OEChem::OEAtomBase > 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__(OEIsFalseAtom self) -> OEIsFalseAtom"""
        _oechem.OEIsFalseAtom_swiginit(self, _oechem.new_OEIsFalseAtom())
    __swig_destroy__ = _oechem.delete_OEIsFalseAtom

# Register OEIsFalseAtom in _oechem:
_oechem.OEIsFalseAtom_swigregister(OEIsFalseAtom)

class OEIsTrueBond(IsTrueBond):
    r"""Proxy of C++ OESystem::OEUnaryTrue< OEChem::OEBondBase > 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__(OEIsTrueBond self) -> OEIsTrueBond"""
        _oechem.OEIsTrueBond_swiginit(self, _oechem.new_OEIsTrueBond())
    __swig_destroy__ = _oechem.delete_OEIsTrueBond

# Register OEIsTrueBond in _oechem:
_oechem.OEIsTrueBond_swigregister(OEIsTrueBond)

class OEIsFalseBond(IsFalseBond):
    r"""Proxy of C++ OESystem::OEUnaryFalse< OEChem::OEBondBase > 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__(OEIsFalseBond self) -> OEIsFalseBond"""
        _oechem.OEIsFalseBond_swiginit(self, _oechem.new_OEIsFalseBond())
    __swig_destroy__ = _oechem.delete_OEIsFalseBond

# Register OEIsFalseBond in _oechem:
_oechem.OEIsFalseBond_swigregister(OEIsFalseBond)

class OEIsTrueConf(IsTrueConf):
    r"""Proxy of C++ OESystem::OEUnaryTrue< OEChem::OEConfBase > 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__(OEIsTrueConf self) -> OEIsTrueConf"""
        _oechem.OEIsTrueConf_swiginit(self, _oechem.new_OEIsTrueConf())
    __swig_destroy__ = _oechem.delete_OEIsTrueConf

# Register OEIsTrueConf in _oechem:
_oechem.OEIsTrueConf_swigregister(OEIsTrueConf)

class OEIsFalseConf(IsFalseConf):
    r"""Proxy of C++ OESystem::OEUnaryFalse< OEChem::OEConfBase > 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__(OEIsFalseConf self) -> OEIsFalseConf"""
        _oechem.OEIsFalseConf_swiginit(self, _oechem.new_OEIsFalseConf())
    __swig_destroy__ = _oechem.delete_OEIsFalseConf

# Register OEIsFalseConf in _oechem:
_oechem.OEIsFalseConf_swigregister(OEIsFalseConf)

class OEIsTrueGroup(IsTrueGroup):
    r"""Proxy of C++ OESystem::OEUnaryTrue< OEChem::OEGroupBase > 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__(OEIsTrueGroup self) -> OEIsTrueGroup"""
        _oechem.OEIsTrueGroup_swiginit(self, _oechem.new_OEIsTrueGroup())
    __swig_destroy__ = _oechem.delete_OEIsTrueGroup

# Register OEIsTrueGroup in _oechem:
_oechem.OEIsTrueGroup_swigregister(OEIsTrueGroup)

class OEIsFalseGroup(IsFalseGroup):
    r"""Proxy of C++ OESystem::OEUnaryFalse< OEChem::OEGroupBase > 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__(OEIsFalseGroup self) -> OEIsFalseGroup"""
        _oechem.OEIsFalseGroup_swiginit(self, _oechem.new_OEIsFalseGroup())
    __swig_destroy__ = _oechem.delete_OEIsFalseGroup

# Register OEIsFalseGroup in _oechem:
_oechem.OEIsFalseGroup_swigregister(OEIsFalseGroup)

class OEPartPredAtom(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEPartPredT< OEChem::OEAtomBase > 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__(OEPartPredAtom self, unsigned int * parts) -> OEPartPredAtom
        __init__(OEPartPredAtom self, OEPartPredAtom rhs) -> OEPartPredAtom
        """
        _oechem.OEPartPredAtom_swiginit(self, _oechem.new_OEPartPredAtom(*args))
    __swig_destroy__ = _oechem.delete_OEPartPredAtom

    def SelectPart(self, part: "unsigned int") -> "void":
        r"""SelectPart(OEPartPredAtom self, unsigned int part)"""
        return _oechem.OEPartPredAtom_SelectPart(self, part)

    def __call__(self, t: "OEAtomBase") -> "bool":
        r"""__call__(OEPartPredAtom self, OEAtomBase t) -> bool"""
        return _oechem.OEPartPredAtom___call__(self, t)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEChem::OEAtomBase,bool,true,true > *":
        r"""CreateCopy(OEPartPredAtom self) -> OEUnaryAtomBoolFunc"""
        return _oechem.OEPartPredAtom_CreateCopy(self)

# Register OEPartPredAtom in _oechem:
_oechem.OEPartPredAtom_swigregister(OEPartPredAtom)

class OEIsAtomMember(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsMemberPtr< OEChem::OEAtomBase > 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__(OEIsAtomMember self) -> OEIsAtomMember
        __init__(OEIsAtomMember self, OEAtomIter i) -> OEIsAtomMember
        """
        _oechem.OEIsAtomMember_swiginit(self, _oechem.new_OEIsAtomMember(*args))

    def __call__(self, arg: "OEAtomBase") -> "bool":
        r"""__call__(OEIsAtomMember self, OEAtomBase arg) -> bool"""
        return _oechem.OEIsAtomMember___call__(self, arg)

    def CreateCopy(self) -> "OESystem::OEUnaryPredicate< OEChem::OEAtomBase > *":
        r"""CreateCopy(OEIsAtomMember self) -> OEUnaryAtomPred"""
        return _oechem.OEIsAtomMember_CreateCopy(self)

    def Add(self, item: "OEAtomBase") -> "bool":
        r"""Add(OEIsAtomMember self, OEAtomBase item) -> bool"""
        return _oechem.OEIsAtomMember_Add(self, item)
    __swig_destroy__ = _oechem.delete_OEIsAtomMember

# Register OEIsAtomMember in _oechem:
_oechem.OEIsAtomMember_swigregister(OEIsAtomMember)

class OEIsBondMember(OEUnaryBondPred):
    r"""Proxy of C++ OEChem::OEIsMemberPtr< OEChem::OEBondBase > 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__(OEIsBondMember self) -> OEIsBondMember
        __init__(OEIsBondMember self, OEBondIter i) -> OEIsBondMember
        """
        _oechem.OEIsBondMember_swiginit(self, _oechem.new_OEIsBondMember(*args))

    def __call__(self, arg: "OEBondBase") -> "bool":
        r"""__call__(OEIsBondMember self, OEBondBase arg) -> bool"""
        return _oechem.OEIsBondMember___call__(self, arg)

    def CreateCopy(self) -> "OESystem::OEUnaryPredicate< OEChem::OEBondBase > *":
        r"""CreateCopy(OEIsBondMember self) -> OEUnaryBondPred"""
        return _oechem.OEIsBondMember_CreateCopy(self)

    def Add(self, item: "OEBondBase") -> "bool":
        r"""Add(OEIsBondMember self, OEBondBase item) -> bool"""
        return _oechem.OEIsBondMember_Add(self, item)
    __swig_destroy__ = _oechem.delete_OEIsBondMember

# Register OEIsBondMember in _oechem:
_oechem.OEIsBondMember_swigregister(OEIsBondMember)


PartPredAtom = OEPartPredAtom

class PyFunction(object):
    """Base class for storing a python function to be used as a functor."""
    def __init__(self, func):
        self._func = func
    def __call__(self, obj):
        """__call__(self, obj) -> bool"""
        return self._func(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func).__disown__()

class PyAtomFunction(PyFunction, OEUnaryAtomBoolFunc):
    """Supports any callable python object (eg: def's and lambda's) being used as a OEChem functor on atoms"""
    def __init__(self, *args):
        """__init__(self, func) -> PyAtomFunction"""
        PyFunction.__init__(self, *args)
        OEUnaryAtomBoolFunc.__init__(self)
class PyBondFunction(PyFunction, OEUnaryBondBoolFunc):
    """Supports any callable python object (eg: def's and lambda's) being used as a OEChem functor on bonds"""
    def __init__(self, *args):
        """__init__(self, func) -> PyBondFunction"""
        PyFunction.__init__(self, *args)
        OEUnaryBondBoolFunc.__init__(self)
class PyConfFunction(PyFunction, OEUnaryConfBoolFunc):
    """Supports any callable python object (eg: def's and lambda's) being used as a OEChem functor on conformers"""
    def __init__(self, *args):
        """__init__(self, func) -> PyConfFunction"""
        PyFunction.__init__(self, *args)
        OEUnaryConfBoolFunc.__init__(self)
class PyGroupFunction(PyFunction, OEUnaryGroupBoolFunc):
    """Supports any callable python object (eg: def's and lambda's) being used as a OEChem functor on groupbase"""
    def __init__(self, *args):
        """__init__(self, func) -> PyGroupFunction"""
        PyFunction.__init__(self, *args)
        OEUnaryGroupBoolFunc.__init__(self)

PyPredicate = PyFunction

class PyAtomPredicate(PyPredicate, OEUnaryAtomPred):
    """Supports any callable python object (eg: def's and lambda's) being used as a OEChem predicate on atoms"""
    def __init__(self, *args):
        """__init__(self, func) -> PyAtomPredicate"""
        PyPredicate.__init__(self, *args)
        OEUnaryAtomPred.__init__(self)
class PyBondPredicate(PyPredicate, OEUnaryBondPred):
    """Supports any callable python object (eg: def's and lambda's) being used as a OEChem predicate on atoms"""
    def __init__(self, *args):
        """__init__(self, func) -> PyBondPredicate"""
        PyPredicate.__init__(self, *args)
        OEUnaryBondPred.__init__(self)
class PyConfPredicate(PyPredicate, OEUnaryConfPred):
    """Supports any callable python object (eg: def's and lambda's) being used as a OEChem predicate on atoms"""
    def __init__(self, *args):
        """__init__(self, func) -> PyConfPredicate"""
        PyPredicate.__init__(self, *args)
        OEUnaryConfPred.__init__(self)
class PyGroupPredicate(PyPredicate, OEUnaryGroupPred):
    """Supports any callable python object (eg: def's and lambda's) being used as a OEChem predicate on atoms"""
    def __init__(self, *args):
        """__init__(self, func) -> PyGroupPredicate"""
        PyPredicate.__init__(self, *args)
        OEUnaryGroupPred.__init__(self)


class OEUnaryRoleSetBoolFunc(object):
    r"""Proxy of C++ OESystem::OEUnaryFunction< OESystem::OERoleSet,bool > class."""

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

    def __call__(self, arg0: "OERoleSet") -> "bool":
        r"""__call__(OEUnaryRoleSetBoolFunc self, OERoleSet arg0) -> bool"""
        return _oechem.OEUnaryRoleSetBoolFunc___call__(self, arg0)

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



    def __init__(self):
        r"""__init__(OEUnaryRoleSetBoolFunc self) -> OEUnaryRoleSetBoolFunc"""
        if self.__class__ == OEUnaryRoleSetBoolFunc:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryRoleSetBoolFunc_swiginit(self, _oechem.new_OEUnaryRoleSetBoolFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryRoleSetBoolFunc(self)
        return weakref.proxy(self)

# Register OEUnaryRoleSetBoolFunc in _oechem:
_oechem.OEUnaryRoleSetBoolFunc_swigregister(OEUnaryRoleSetBoolFunc)

class OEUnaryRoleSetPred(OEUnaryRoleSetBoolFunc):
    r"""Proxy of C++ OESystem::OEUnaryPredicate< OESystem::OERoleSet > class."""

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

    def __call__(self, a: "OERoleSet") -> "bool":
        r"""__call__(OEUnaryRoleSetPred self, OERoleSet a) -> bool"""
        return _oechem.OEUnaryRoleSetPred___call__(self, a)

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



    def CreatePredicateCopy(self) -> "OESystem::OEUnaryPredicate< OESystem::OERoleSet > *":
        r"""CreatePredicateCopy(OEUnaryRoleSetPred self) -> OEUnaryRoleSetPred"""
        return _oechem.OEUnaryRoleSetPred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEUnaryRoleSetPred self) -> OEUnaryRoleSetPred
        __init__(OEUnaryRoleSetPred self, OEUnaryRoleSetPred arg2) -> OEUnaryRoleSetPred
        """
        if self.__class__ == OEUnaryRoleSetPred:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryRoleSetPred_swiginit(self, _oechem.new_OEUnaryRoleSetPred(_self, *args))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryRoleSetPred(self)
        return weakref.proxy(self)

# Register OEUnaryRoleSetPred in _oechem:
_oechem.OEUnaryRoleSetPred_swigregister(OEUnaryRoleSetPred)

class OEBinaryRoleSetFunc(object):
    r"""Proxy of C++ OESystem::OEBinaryFunction< OESystem::OERoleSet,OESystem::OERoleSet,bool > class."""

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

    def __call__(self, a1: "OERoleSet", a2: "OERoleSet") -> "bool":
        r"""__call__(OEBinaryRoleSetFunc self, OERoleSet a1, OERoleSet a2) -> bool"""
        return _oechem.OEBinaryRoleSetFunc___call__(self, a1, a2)

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



    def __init__(self):
        r"""__init__(OEBinaryRoleSetFunc self) -> OEBinaryRoleSetFunc"""
        if self.__class__ == OEBinaryRoleSetFunc:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryRoleSetFunc_swiginit(self, _oechem.new_OEBinaryRoleSetFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryRoleSetFunc(self)
        return weakref.proxy(self)

# Register OEBinaryRoleSetFunc in _oechem:
_oechem.OEBinaryRoleSetFunc_swigregister(OEBinaryRoleSetFunc)

class OEBinaryRoleSetPred(OEBinaryRoleSetFunc):
    r"""Proxy of C++ OESystem::OEBinaryPredicate< OESystem::OERoleSet,OESystem::OERoleSet > class."""

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

    def __call__(self, a1: "OERoleSet", a2: "OERoleSet") -> "bool":
        r"""__call__(OEBinaryRoleSetPred self, OERoleSet a1, OERoleSet a2) -> bool"""
        return _oechem.OEBinaryRoleSetPred___call__(self, a1, a2)

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



    def CreatePredicateCopy(self) -> "OESystem::OEBinaryPredicate< OESystem::OERoleSet,OESystem::OERoleSet > *":
        r"""CreatePredicateCopy(OEBinaryRoleSetPred self) -> OEBinaryRoleSetPred"""
        return _oechem.OEBinaryRoleSetPred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEBinaryRoleSetPred self) -> OEBinaryRoleSetPred
        __init__(OEBinaryRoleSetPred self, OEBinaryRoleSetPred arg2) -> OEBinaryRoleSetPred
        """
        if self.__class__ == OEBinaryRoleSetPred:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryRoleSetPred_swiginit(self, _oechem.new_OEBinaryRoleSetPred(_self, *args))
    __swig_destroy__ = _oechem.delete_OEBinaryRoleSetPred
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryRoleSetPred(self)
        return weakref.proxy(self)

# Register OEBinaryRoleSetPred in _oechem:
_oechem.OEBinaryRoleSetPred_swigregister(OEBinaryRoleSetPred)


class OENotRoleSet(OEUnaryRoleSetPred):
    """Negation of an OEUnary RoleSet Pred"""
    def __init__(self, func):
        """__init__(self, OEUnary RoleSet Pred func) -> OENotNAME"""
        OEUnaryRoleSetPred.__init__(self)
        if not isinstance(func, OEUnaryRoleSetPred):
            raise TypeError("Expected a OEUnary RoleSet Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj):
        """__call__(self, OERoleSet obj) -> bool"""
        return not self._func(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func).__disown__()

class OEAndRoleSet(OEUnaryRoleSetPred):
    """Logical 'and' of two OEUnary RoleSet Preds"""
    def __init__(self, func1, func2):
        """__init__(self, OEUnary RoleSet Pred func1, OEUnary RoleSet Pred func2) -> OEAnd RoleSet"""
        OEUnaryRoleSetPred.__init__(self)
        if not isinstance(func1, OEUnaryRoleSetPred):
            raise TypeError("Expected a OEUnary RoleSet Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryRoleSetPred):
            raise TypeError("Expected a OEUnary RoleSet Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OERoleSet obj) -> bool"""
        return self._func1(obj) and self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEOrRoleSet(OEUnaryRoleSetPred):
    """Logical 'or' of two OEUnary RoleSet Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd RoleSet"""
        OEUnaryRoleSetPred.__init__(self)
        if not isinstance(func1, OEUnaryRoleSetPred):
            raise TypeError("Expected a OEUnary RoleSet Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryRoleSetPred):
            raise TypeError("Expected a OEUnary RoleSet Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OERoleSet obj) -> bool"""
        return self._func1(obj) or self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()


class OEBinaryNotRoleSet(OEBinaryRoleSetPred):
    """Negation of an OEBinary RoleSet Pred"""
    def __init__(self, func):
        """__init__(self, OEBinary RoleSet Pred func) -> OENot RoleSet"""
        OEBinaryRoleSetPred.__init__(self)
        if not isinstance(func, OEBinaryRoleSetPred):
            raise TypeError("Expected a OEBinary RoleSet Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj1, obj2):
        """__call__(self, OERoleSet obj1, OERoleSet obj2) -> bool"""
        return not self._func(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func).__disown__()

class OEBinaryAndRoleSet(OEBinaryRoleSetPred):
    """Logical 'and' of two OEBinary RoleSet Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd RoleSet"""
        OEBinaryRoleSetPred.__init__(self)
        if not isinstance(func1, OEBinaryRoleSetPred):
            raise TypeError("Expected a OEBinary RoleSet Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryRoleSetPred):
            raise TypeError("Expected a OEBinary RoleSet Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OERoleSet obj1, OERoleSet obj2) -> bool"""
        return self._func1(obj1, obj2) and self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEBinaryOrRoleSet(OEBinaryRoleSetPred):
    """Logical 'or' of two OEBinary RoleSet Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd RoleSet"""
        OEBinaryRoleSetPred.__init__(self)
        if not isinstance(func1, OEBinaryRoleSetPred):
            raise TypeError("Expected a OEBinary RoleSet Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryRoleSetPred):
            raise TypeError("Expected a OEBinary RoleSet Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OERoleSet obj1, OERoleSet obj2) -> bool"""
        return self._func1(obj1, obj2) or self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OERole(object):
    r"""Proxy of C++ OESystem::OERole 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__(OERole self) -> OERole
        __init__(OERole self, OERole rhs) -> OERole
        __init__(OERole self, std::string const & name) -> OERole
        """
        _oechem.OERole_swiginit(self, _oechem.new_OERole(*args))

    def GetName(self) -> "char const *":
        r"""GetName(OERole self) -> char const *"""
        return _oechem.OERole_GetName(self)

    def __hash__(self) -> "PyObject *":
        r"""__hash__(OERole self) -> PyObject *"""
        return _oechem.OERole___hash__(self)

    def __eq__(self, *args) -> "bool":
        r"""
        __eq__(OERole self, OERole rhs) -> bool
        __eq__(OERole self, OERole rhs) -> bool
        """
        return _oechem.OERole___eq__(self, *args)

    def __ne__(self, rhs: "OERole") -> "bool":
        r"""__ne__(OERole self, OERole rhs) -> bool"""
        return _oechem.OERole___ne__(self, rhs)

    def __lt__(self, *args) -> "bool":
        r"""
        __lt__(OERole self, OERole rhs) -> bool
        __lt__(OERole self, OERole rhs) -> bool
        """
        return _oechem.OERole___lt__(self, *args)
    __swig_destroy__ = _oechem.delete_OERole

# Register OERole in _oechem:
_oechem.OERole_swigregister(OERole)

class OERoleSet(object):
    r"""Proxy of C++ OESystem::OERoleSet 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")
    __repr__ = _swig_repr
    __swig_destroy__ = _oechem.delete_OERoleSet

    def ClearRoles(self) -> "void":
        r"""ClearRoles(OERoleSet self)"""
        return _oechem.OERoleSet_ClearRoles(self)

    def AddRole(self, *args) -> "bool":
        r"""
        AddRole(OERoleSet self, OERole role) -> bool
        AddRole(OERoleSet self, std::string const & name) -> bool
        """
        return _oechem.OERoleSet_AddRole(self, *args)

    def DeleteRole(self, *args) -> "bool":
        r"""
        DeleteRole(OERoleSet self, OERole role) -> bool
        DeleteRole(OERoleSet self, std::string const & name) -> bool
        """
        return _oechem.OERoleSet_DeleteRole(self, *args)

    def HasRole(self, *args) -> "bool":
        r"""
        HasRole(OERoleSet self, OERole role) -> bool
        HasRole(OERoleSet self, std::string const & name) -> bool
        """
        return _oechem.OERoleSet_HasRole(self, *args)

    def GetRoles(self) -> "OESystem::OEIterBase< OESystem::OERole const > *":
        r"""GetRoles(OERoleSet self) -> OESystem::OEIterBase< OESystem::OERole const > *"""
        return _oechem.OERoleSet_GetRoles(self)

    def NumRoles(self) -> "unsigned int":
        r"""NumRoles(OERoleSet self) -> unsigned int"""
        return _oechem.OERoleSet_NumRoles(self)

# Register OERoleSet in _oechem:
_oechem.OERoleSet_swigregister(OERoleSet)

class OERoles(OERoleSet):
    r"""Proxy of C++ OESystem::OERoles 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__(OERoles self) -> OERoles
        __init__(OERoles self, OERoleSet rhs) -> OERoles
        """
        _oechem.OERoles_swiginit(self, _oechem.new_OERoles(*args))
    __swig_destroy__ = _oechem.delete_OERoles

    def CreateCopy(self) -> "OESystem::OERoles *":
        r"""CreateCopy(OERoles self) -> OERoles"""
        return _oechem.OERoles_CreateCopy(self)

# Register OERoles in _oechem:
_oechem.OERoles_swigregister(OERoles)

class OEHasRole(OEUnaryRoleSetPred):
    r"""Proxy of C++ OESystem::OEHasRole 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__(OEHasRole self, OERole role) -> OEHasRole
        __init__(OEHasRole self, std::string const & name) -> OEHasRole
        """
        _oechem.OEHasRole_swiginit(self, _oechem.new_OEHasRole(*args))

    def __call__(self, someObject: "OERoleSet") -> "bool":
        r"""__call__(OEHasRole self, OERoleSet someObject) -> bool"""
        return _oechem.OEHasRole___call__(self, someObject)

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


    __swig_destroy__ = _oechem.delete_OEHasRole

# Register OEHasRole in _oechem:
_oechem.OEHasRole_swigregister(OEHasRole)

class OEIsTrueRoleSet(OEUnaryRoleSetPred):
    r"""Proxy of C++ OESystem::OEIsTrue< OESystem::OERoleSet > class."""

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

    def __call__(self, arg2: "OERoleSet") -> "bool":
        r"""__call__(OEIsTrueRoleSet self, OERoleSet arg2) -> bool"""
        return _oechem.OEIsTrueRoleSet___call__(self, arg2)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OESystem::OERoleSet,bool > *":
        r"""CreateCopy(OEIsTrueRoleSet self) -> OEUnaryRoleSetBoolFunc"""
        return _oechem.OEIsTrueRoleSet_CreateCopy(self)

    def __init__(self):
        r"""__init__(OEIsTrueRoleSet self) -> OEIsTrueRoleSet"""
        _oechem.OEIsTrueRoleSet_swiginit(self, _oechem.new_OEIsTrueRoleSet())
    __swig_destroy__ = _oechem.delete_OEIsTrueRoleSet

# Register OEIsTrueRoleSet in _oechem:
_oechem.OEIsTrueRoleSet_swigregister(OEIsTrueRoleSet)

class OEIsFalseRoleSet(OEUnaryRoleSetPred):
    r"""Proxy of C++ OESystem::OEIsFalse< OESystem::OERoleSet > class."""

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

    def __call__(self, arg2: "OERoleSet") -> "bool":
        r"""__call__(OEIsFalseRoleSet self, OERoleSet arg2) -> bool"""
        return _oechem.OEIsFalseRoleSet___call__(self, arg2)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OESystem::OERoleSet,bool > *":
        r"""CreateCopy(OEIsFalseRoleSet self) -> OEUnaryRoleSetBoolFunc"""
        return _oechem.OEIsFalseRoleSet_CreateCopy(self)

    def __init__(self):
        r"""__init__(OEIsFalseRoleSet self) -> OEIsFalseRoleSet"""
        _oechem.OEIsFalseRoleSet_swiginit(self, _oechem.new_OEIsFalseRoleSet())
    __swig_destroy__ = _oechem.delete_OEIsFalseRoleSet

# Register OEIsFalseRoleSet in _oechem:
_oechem.OEIsFalseRoleSet_swigregister(OEIsFalseRoleSet)

class OERoleIter(object):
    r"""Proxy of C++ OESystem::OEIter< OESystem::OERole 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__(OERoleIter self) -> OERoleIter
        __init__(OERoleIter self, OERoleIter rhs) -> OERoleIter
        __init__(OERoleIter self, OESystem::OEIterBase< OESystem::OERole const > * rhs) -> OERoleIter
        __init__(OERoleIter self, OESystem::OEIterBase< OESystem::OEIter< OESystem::OERole const >::NonConstA > * rhs) -> OERoleIter
        """
        _oechem.OERoleIter_swiginit(self, _oechem.new_OERoleIter(*args))
    __swig_destroy__ = _oechem.delete_OERoleIter

    def Copy(self) -> "OESystem::OEIterBase< OESystem::OERole const > *":
        r"""Copy(OERoleIter self) -> OESystem::OEIterBase< OESystem::OERole const > *"""
        return _oechem.OERoleIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OERoleIter self, OESystem::OEIterBase< OESystem::OERole const > * ib)
        Push(OERoleIter self, OERoleIter iter)
        """
        return _oechem.OERoleIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OESystem::OERole const,OESystem::OERole const > const &") -> "void":
        r"""Sort(OERoleIter self, OESystem::OEBinaryPredicate< OESystem::OERole const,OESystem::OERole const > const & sort_criterion)"""
        return _oechem.OERoleIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OESystem::OERole const > &":
        r"""ToFirst(OERoleIter self) -> OERoleIter"""
        return _oechem.OERoleIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OESystem::OERole const > &":
        r"""ToLast(OERoleIter self) -> OERoleIter"""
        return _oechem.OERoleIter_ToLast(self)

    def __ref__(self) -> "OESystem::OERole const &":
        r"""__ref__(OERoleIter self) -> OERole"""
        return _oechem.OERoleIter___ref__(self)

    def IsValid(self):
      return _oechem.OERoleIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OERoleIter self) -> PyObject *"""
        return _oechem.OERoleIter_next(self)

    def Target(self) -> "OESystem::OERole const &":
        r"""Target(OERoleIter self) -> OERole"""
        return _oechem.OERoleIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OESystem::OERole const > &":
        r"""
        Next(OERoleIter self) -> OERoleIter
        Next(OERoleIter self, int i) -> OERoleIter
        """
        return _oechem.OERoleIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OESystem::OERole const > &":
        r"""
        Prev(OERoleIter self) -> OERoleIter
        Prev(OERoleIter self, int i) -> OERoleIter
        """
        return _oechem.OERoleIter_Prev(self, *args)

# Register OERoleIter in _oechem:
_oechem.OERoleIter_swigregister(OERoleIter)

class OEMatchBase(OERoleSet):
    r"""Proxy of C++ OEChem::OEMatchBase 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__ = _oechem.delete_OEMatchBase

    def Clear(self) -> "void":
        r"""Clear(OEMatchBase self)"""
        return _oechem.OEMatchBase_Clear(self)

    def IsValid(self) -> "bool":
        r"""IsValid(OEMatchBase self) -> bool"""
        return _oechem.OEMatchBase_IsValid(self)

    def IsValid(self):
      return _oechem.OEMatchBase___nonzero__(self)



    def NumAtoms(self) -> "unsigned int":
        r"""NumAtoms(OEMatchBase self) -> unsigned int"""
        return _oechem.OEMatchBase_NumAtoms(self)

    def NumBonds(self) -> "unsigned int":
        r"""NumBonds(OEMatchBase self) -> unsigned int"""
        return _oechem.OEMatchBase_NumBonds(self)

    def GetAtoms(self) -> "OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEAtomBase > > *":
        r"""GetAtoms(OEMatchBase self) -> OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEAtomBase > > *"""
        return _oechem.OEMatchBase_GetAtoms(self)

    def GetBonds(self) -> "OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEBondBase > > *":
        r"""GetBonds(OEMatchBase self) -> OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEBondBase > > *"""
        return _oechem.OEMatchBase_GetBonds(self)

    def GetPatternAtoms(self) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""GetPatternAtoms(OEMatchBase self) -> OESystem::OEIterBase< OEChem::OEAtomBase > *"""
        return _oechem.OEMatchBase_GetPatternAtoms(self)

    def GetPatternBonds(self) -> "OESystem::OEIterBase< OEChem::OEBondBase > *":
        r"""GetPatternBonds(OEMatchBase self) -> OESystem::OEIterBase< OEChem::OEBondBase > *"""
        return _oechem.OEMatchBase_GetPatternBonds(self)

    def GetTargetAtoms(self) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""GetTargetAtoms(OEMatchBase self) -> OESystem::OEIterBase< OEChem::OEAtomBase > *"""
        return _oechem.OEMatchBase_GetTargetAtoms(self)

    def GetTargetBonds(self) -> "OESystem::OEIterBase< OEChem::OEBondBase > *":
        r"""GetTargetBonds(OEMatchBase self) -> OESystem::OEIterBase< OEChem::OEBondBase > *"""
        return _oechem.OEMatchBase_GetTargetBonds(self)

    def CreateCopy(self) -> "OEChem::OEMatchBase *":
        r"""CreateCopy(OEMatchBase self) -> OEMatchBase"""
        return _oechem.OEMatchBase_CreateCopy(self)

# Register OEMatchBase in _oechem:
_oechem.OEMatchBase_swigregister(OEMatchBase)

class OEMatch(OEMatchBase):
    r"""Proxy of C++ OEChem::OEMatch 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__(OEMatch self) -> OEMatch
        __init__(OEMatch self, std::vector< OEChem::OEMatchPair< OEChem::OEAtomBase >,std::allocator< OEChem::OEMatchPair< OEChem::OEAtomBase > > > const & arg2) -> OEMatch
        __init__(OEMatch self, std::vector< OEChem::OEMatchPair< OEChem::OEBondBase >,std::allocator< OEChem::OEMatchPair< OEChem::OEBondBase > > > const & arg2) -> OEMatch
        __init__(OEMatch self, std::vector< OEChem::OEMatchPair< OEChem::OEAtomBase >,std::allocator< OEChem::OEMatchPair< OEChem::OEAtomBase > > > * arg2, std::vector< OEChem::OEMatchPair< OEChem::OEBondBase >,std::allocator< OEChem::OEMatchPair< OEChem::OEBondBase > > > * arg3) -> OEMatch
        __init__(OEMatch self, OEMatch arg2) -> OEMatch
        __init__(OEMatch self, OEMatchBase arg2) -> OEMatch
        """
        _oechem.OEMatch_swiginit(self, _oechem.new_OEMatch(*args))
    __swig_destroy__ = _oechem.delete_OEMatch

    def CreateCopy(self) -> "OEChem::OEMatchBase *":
        r"""CreateCopy(OEMatch self) -> OEMatchBase"""
        return _oechem.OEMatch_CreateCopy(self)

    def Clear(self) -> "void":
        r"""Clear(OEMatch self)"""
        return _oechem.OEMatch_Clear(self)

    def NumAtoms(self) -> "unsigned int":
        r"""NumAtoms(OEMatch self) -> unsigned int"""
        return _oechem.OEMatch_NumAtoms(self)

    def NumBonds(self) -> "unsigned int":
        r"""NumBonds(OEMatch self) -> unsigned int"""
        return _oechem.OEMatch_NumBonds(self)

    def AddPair(self, *args) -> "bool":
        r"""
        AddPair(OEMatch self, OEAtomBase arg2, OEAtomBase arg3) -> bool
        AddPair(OEMatch self, OEBondBase arg2, OEBondBase arg3) -> bool
        """
        return _oechem.OEMatch_AddPair(self, *args)

    def GetAtoms(self) -> "OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEAtomBase > > *":
        r"""GetAtoms(OEMatch self) -> OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEAtomBase > > *"""
        return _oechem.OEMatch_GetAtoms(self)

    def GetBonds(self) -> "OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEBondBase > > *":
        r"""GetBonds(OEMatch self) -> OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEBondBase > > *"""
        return _oechem.OEMatch_GetBonds(self)

# Register OEMatch in _oechem:
_oechem.OEMatch_swigregister(OEMatch)


OECreateOEGraphMol = OEGraphMol
OECreateOEMol = OEMol
OECreateOEQMol = OEQMol

class OEInChIOptions(object):
    r"""Proxy of C++ OEChem::OEInChIOptions 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__(OEInChIOptions self, unsigned int flavor=) -> OEInChIOptions
        __init__(OEInChIOptions self, OEInChIOptions arg2) -> OEInChIOptions
        """
        _oechem.OEInChIOptions_swiginit(self, _oechem.new_OEInChIOptions(*args))
    __swig_destroy__ = _oechem.delete_OEInChIOptions

    def SetHydrogens(self, val: "bool") -> "void":
        r"""SetHydrogens(OEInChIOptions self, bool val)"""
        return _oechem.OEInChIOptions_SetHydrogens(self, val)

    def GetHydrogens(self) -> "bool":
        r"""GetHydrogens(OEInChIOptions self) -> bool"""
        return _oechem.OEInChIOptions_GetHydrogens(self)

    def SetStereo(self, val: "bool") -> "void":
        r"""SetStereo(OEInChIOptions self, bool val)"""
        return _oechem.OEInChIOptions_SetStereo(self, val)

    def GetStereo(self) -> "bool":
        r"""GetStereo(OEInChIOptions self) -> bool"""
        return _oechem.OEInChIOptions_GetStereo(self)

    def SetRelativeStereo(self, val: "bool") -> "void":
        r"""SetRelativeStereo(OEInChIOptions self, bool val)"""
        return _oechem.OEInChIOptions_SetRelativeStereo(self, val)

    def GetRelativeStereo(self) -> "bool":
        r"""GetRelativeStereo(OEInChIOptions self) -> bool"""
        return _oechem.OEInChIOptions_GetRelativeStereo(self)

    def SetRacemicStereo(self, val: "bool") -> "void":
        r"""SetRacemicStereo(OEInChIOptions self, bool val)"""
        return _oechem.OEInChIOptions_SetRacemicStereo(self, val)

    def GetRacemicStereo(self) -> "bool":
        r"""GetRacemicStereo(OEInChIOptions self) -> bool"""
        return _oechem.OEInChIOptions_GetRacemicStereo(self)

    def SetUndefinedStereo(self, val: "bool") -> "void":
        r"""SetUndefinedStereo(OEInChIOptions self, bool val)"""
        return _oechem.OEInChIOptions_SetUndefinedStereo(self, val)

    def GetUndefinedStereo(self) -> "bool":
        r"""GetUndefinedStereo(OEInChIOptions self) -> bool"""
        return _oechem.OEInChIOptions_GetUndefinedStereo(self)

    def SetChiral(self, val: "bool") -> "void":
        r"""SetChiral(OEInChIOptions self, bool val)"""
        return _oechem.OEInChIOptions_SetChiral(self, val)

    def GetChiral(self) -> "bool":
        r"""GetChiral(OEInChIOptions self) -> bool"""
        return _oechem.OEInChIOptions_GetChiral(self)

    def SetFixedHLayer(self, val: "bool") -> "void":
        r"""SetFixedHLayer(OEInChIOptions self, bool val)"""
        return _oechem.OEInChIOptions_SetFixedHLayer(self, val)

    def GetFixedHLayer(self) -> "bool":
        r"""GetFixedHLayer(OEInChIOptions self) -> bool"""
        return _oechem.OEInChIOptions_GetFixedHLayer(self)

    def SetReconnectedMetals(self, val: "bool") -> "void":
        r"""SetReconnectedMetals(OEInChIOptions self, bool val)"""
        return _oechem.OEInChIOptions_SetReconnectedMetals(self, val)

    def GetReconnectedMetals(self) -> "bool":
        r"""GetReconnectedMetals(OEInChIOptions self) -> bool"""
        return _oechem.OEInChIOptions_GetReconnectedMetals(self)

    def SetNonPolymerPseudoAtoms(self, val: "bool") -> "void":
        r"""SetNonPolymerPseudoAtoms(OEInChIOptions self, bool val)"""
        return _oechem.OEInChIOptions_SetNonPolymerPseudoAtoms(self, val)

    def GetNonPolymerPseudoAtoms(self) -> "bool":
        r"""GetNonPolymerPseudoAtoms(OEInChIOptions self) -> bool"""
        return _oechem.OEInChIOptions_GetNonPolymerPseudoAtoms(self)

    def SetTimeout(self, val: "unsigned int") -> "void":
        r"""SetTimeout(OEInChIOptions self, unsigned int val)"""
        return _oechem.OEInChIOptions_SetTimeout(self, val)

    def GetTimeout(self) -> "unsigned int":
        r"""GetTimeout(OEInChIOptions self) -> unsigned int"""
        return _oechem.OEInChIOptions_GetTimeout(self)

# Register OEInChIOptions in _oechem:
_oechem.OEInChIOptions_swigregister(OEInChIOptions)


def OEParseInChI(mol: "OEMolBase", str: "std::string const &") -> "bool":
    r"""OEParseInChI(OEMolBase mol, std::string const & str) -> bool"""
    return _oechem.OEParseInChI(mol, str)

def OECreateSmartsString(*args) -> "std::string":
    r"""OECreateSmartsString(OEMolBase mol, char const * smartsTag=None, unsigned int flavor=(OESMILESFlag::DEFAULT&~OESMILESFlag::Canonical)) -> std::string"""
    return _oechem.OECreateSmartsString(*args)

def OECreateAtomSmartsString(*args) -> "std::string":
    r"""OECreateAtomSmartsString(OEAtomBase atm, unsigned int atomflags, bool delim=True) -> std::string"""
    return _oechem.OECreateAtomSmartsString(*args)

def OECreateBondSmartsString(*args) -> "std::string":
    r"""OECreateBondSmartsString(OEBondBase bnd, unsigned int bondflags, bool delim=False) -> std::string"""
    return _oechem.OECreateBondSmartsString(*args)

def OEMolecularFormula(mol: "OEMolBase", hydrogenisotopic: "bool"=False) -> "std::string":
    r"""OEMolecularFormula(OEMolBase mol, bool hydrogenisotopic=False) -> std::string"""
    return _oechem.OEMolecularFormula(mol, hydrogenisotopic)

def OECreateInChI(*args) -> "std::string":
    r"""
    OECreateInChI(std::string & str, OEMolBase mol, OEInChIOptions arg3=OEChem::OEInChIOptions())
    OECreateInChI(OEMolBase mol) -> std::string
    OECreateInChI(OEMolBase mol, OEInChIOptions opts) -> std::string
    """
    return _oechem.OECreateInChI(*args)

def OECreateInChIKey(*args) -> "std::string":
    r"""
    OECreateInChIKey(std::string & str, OEMolBase mol, OEInChIOptions arg3=OEChem::OEInChIOptions())
    OECreateInChIKey(OEMolBase mol) -> std::string
    OECreateInChIKey(OEMolBase mol, OEInChIOptions opts) -> std::string
    """
    return _oechem.OECreateInChIKey(*args)
class OEAtomIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OEAtomBase > 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__(OEAtomIter self) -> OEAtomIter
        __init__(OEAtomIter self, OEAtomIter rhs) -> OEAtomIter
        __init__(OEAtomIter self, OESystem::OEIterBase< OEChem::OEAtomBase > * rhs) -> OEAtomIter
        __init__(OEAtomIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEAtomBase >::NonConstA > * rhs) -> OEAtomIter
        """
        _oechem.OEAtomIter_swiginit(self, _oechem.new_OEAtomIter(*args))
    __swig_destroy__ = _oechem.delete_OEAtomIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""Copy(OEAtomIter self) -> OESystem::OEIterBase< OEChem::OEAtomBase > *"""
        return _oechem.OEAtomIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEAtomIter self, OESystem::OEIterBase< OEChem::OEAtomBase > * ib)
        Push(OEAtomIter self, OEAtomIter iter)
        """
        return _oechem.OEAtomIter_Push(self, *args)

    def Sort(self, sort_criterion: "OEBinaryAtomPred") -> "void":
        r"""Sort(OEAtomIter self, OEBinaryAtomPred sort_criterion)"""
        return _oechem.OEAtomIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEAtomBase > &":
        r"""ToFirst(OEAtomIter self) -> OEAtomIter"""
        return _oechem.OEAtomIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OEAtomBase > &":
        r"""ToLast(OEAtomIter self) -> OEAtomIter"""
        return _oechem.OEAtomIter_ToLast(self)

    def __ref__(self) -> "OEChem::OEAtomBase &":
        r"""__ref__(OEAtomIter self) -> OEAtomBase"""
        return _oechem.OEAtomIter___ref__(self)

    def IsValid(self):
      return _oechem.OEAtomIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEAtomIter self) -> PyObject *"""
        return _oechem.OEAtomIter_next(self)

    def Target(self) -> "OEChem::OEAtomBase &":
        r"""Target(OEAtomIter self) -> OEAtomBase"""
        return _oechem.OEAtomIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEAtomBase > &":
        r"""
        Next(OEAtomIter self) -> OEAtomIter
        Next(OEAtomIter self, int i) -> OEAtomIter
        """
        return _oechem.OEAtomIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEAtomBase > &":
        r"""
        Prev(OEAtomIter self) -> OEAtomIter
        Prev(OEAtomIter self, int i) -> OEAtomIter
        """
        return _oechem.OEAtomIter_Prev(self, *args)

# Register OEAtomIter in _oechem:
_oechem.OEAtomIter_swigregister(OEAtomIter)

class OEBondIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OEBondBase > 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__(OEBondIter self) -> OEBondIter
        __init__(OEBondIter self, OEBondIter rhs) -> OEBondIter
        __init__(OEBondIter self, OESystem::OEIterBase< OEChem::OEBondBase > * rhs) -> OEBondIter
        __init__(OEBondIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEBondBase >::NonConstA > * rhs) -> OEBondIter
        """
        _oechem.OEBondIter_swiginit(self, _oechem.new_OEBondIter(*args))
    __swig_destroy__ = _oechem.delete_OEBondIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEBondBase > *":
        r"""Copy(OEBondIter self) -> OESystem::OEIterBase< OEChem::OEBondBase > *"""
        return _oechem.OEBondIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEBondIter self, OESystem::OEIterBase< OEChem::OEBondBase > * ib)
        Push(OEBondIter self, OEBondIter iter)
        """
        return _oechem.OEBondIter_Push(self, *args)

    def Sort(self, sort_criterion: "OEBinaryBondPred") -> "void":
        r"""Sort(OEBondIter self, OEBinaryBondPred sort_criterion)"""
        return _oechem.OEBondIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEBondBase > &":
        r"""ToFirst(OEBondIter self) -> OEBondIter"""
        return _oechem.OEBondIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OEBondBase > &":
        r"""ToLast(OEBondIter self) -> OEBondIter"""
        return _oechem.OEBondIter_ToLast(self)

    def __ref__(self) -> "OEChem::OEBondBase &":
        r"""__ref__(OEBondIter self) -> OEBondBase"""
        return _oechem.OEBondIter___ref__(self)

    def IsValid(self):
      return _oechem.OEBondIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEBondIter self) -> PyObject *"""
        return _oechem.OEBondIter_next(self)

    def Target(self) -> "OEChem::OEBondBase &":
        r"""Target(OEBondIter self) -> OEBondBase"""
        return _oechem.OEBondIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEBondBase > &":
        r"""
        Next(OEBondIter self) -> OEBondIter
        Next(OEBondIter self, int i) -> OEBondIter
        """
        return _oechem.OEBondIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEBondBase > &":
        r"""
        Prev(OEBondIter self) -> OEBondIter
        Prev(OEBondIter self, int i) -> OEBondIter
        """
        return _oechem.OEBondIter_Prev(self, *args)

# Register OEBondIter in _oechem:
_oechem.OEBondIter_swigregister(OEBondIter)

class OEQAtomIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OEQAtomBase > 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__(OEQAtomIter self) -> OEQAtomIter
        __init__(OEQAtomIter self, OEQAtomIter rhs) -> OEQAtomIter
        __init__(OEQAtomIter self, OESystem::OEIterBase< OEChem::OEQAtomBase > * rhs) -> OEQAtomIter
        __init__(OEQAtomIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEQAtomBase >::NonConstA > * rhs) -> OEQAtomIter
        """
        _oechem.OEQAtomIter_swiginit(self, _oechem.new_OEQAtomIter(*args))
    __swig_destroy__ = _oechem.delete_OEQAtomIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEQAtomBase > *":
        r"""Copy(OEQAtomIter self) -> OESystem::OEIterBase< OEChem::OEQAtomBase > *"""
        return _oechem.OEQAtomIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEQAtomIter self, OESystem::OEIterBase< OEChem::OEQAtomBase > * ib)
        Push(OEQAtomIter self, OEQAtomIter iter)
        """
        return _oechem.OEQAtomIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEChem::OEQAtomBase,OEChem::OEQAtomBase > const &") -> "void":
        r"""Sort(OEQAtomIter self, OESystem::OEBinaryPredicate< OEChem::OEQAtomBase,OEChem::OEQAtomBase > const & sort_criterion)"""
        return _oechem.OEQAtomIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEQAtomBase > &":
        r"""ToFirst(OEQAtomIter self) -> OEQAtomIter"""
        return _oechem.OEQAtomIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OEQAtomBase > &":
        r"""ToLast(OEQAtomIter self) -> OEQAtomIter"""
        return _oechem.OEQAtomIter_ToLast(self)

    def __ref__(self) -> "OEChem::OEQAtomBase &":
        r"""__ref__(OEQAtomIter self) -> OEQAtomBase"""
        return _oechem.OEQAtomIter___ref__(self)

    def IsValid(self):
      return _oechem.OEQAtomIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEQAtomIter self) -> PyObject *"""
        return _oechem.OEQAtomIter_next(self)

    def Target(self) -> "OEChem::OEQAtomBase &":
        r"""Target(OEQAtomIter self) -> OEQAtomBase"""
        return _oechem.OEQAtomIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEQAtomBase > &":
        r"""
        Next(OEQAtomIter self) -> OEQAtomIter
        Next(OEQAtomIter self, int i) -> OEQAtomIter
        """
        return _oechem.OEQAtomIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEQAtomBase > &":
        r"""
        Prev(OEQAtomIter self) -> OEQAtomIter
        Prev(OEQAtomIter self, int i) -> OEQAtomIter
        """
        return _oechem.OEQAtomIter_Prev(self, *args)

# Register OEQAtomIter in _oechem:
_oechem.OEQAtomIter_swigregister(OEQAtomIter)

class OEQBondIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OEQBondBase > 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__(OEQBondIter self) -> OEQBondIter
        __init__(OEQBondIter self, OEQBondIter rhs) -> OEQBondIter
        __init__(OEQBondIter self, OESystem::OEIterBase< OEChem::OEQBondBase > * rhs) -> OEQBondIter
        __init__(OEQBondIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEQBondBase >::NonConstA > * rhs) -> OEQBondIter
        """
        _oechem.OEQBondIter_swiginit(self, _oechem.new_OEQBondIter(*args))
    __swig_destroy__ = _oechem.delete_OEQBondIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEQBondBase > *":
        r"""Copy(OEQBondIter self) -> OESystem::OEIterBase< OEChem::OEQBondBase > *"""
        return _oechem.OEQBondIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEQBondIter self, OESystem::OEIterBase< OEChem::OEQBondBase > * ib)
        Push(OEQBondIter self, OEQBondIter iter)
        """
        return _oechem.OEQBondIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEChem::OEQBondBase,OEChem::OEQBondBase > const &") -> "void":
        r"""Sort(OEQBondIter self, OESystem::OEBinaryPredicate< OEChem::OEQBondBase,OEChem::OEQBondBase > const & sort_criterion)"""
        return _oechem.OEQBondIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEQBondBase > &":
        r"""ToFirst(OEQBondIter self) -> OEQBondIter"""
        return _oechem.OEQBondIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OEQBondBase > &":
        r"""ToLast(OEQBondIter self) -> OEQBondIter"""
        return _oechem.OEQBondIter_ToLast(self)

    def __ref__(self) -> "OEChem::OEQBondBase &":
        r"""__ref__(OEQBondIter self) -> OEQBondBase"""
        return _oechem.OEQBondIter___ref__(self)

    def IsValid(self):
      return _oechem.OEQBondIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEQBondIter self) -> PyObject *"""
        return _oechem.OEQBondIter_next(self)

    def Target(self) -> "OEChem::OEQBondBase &":
        r"""Target(OEQBondIter self) -> OEQBondBase"""
        return _oechem.OEQBondIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEQBondBase > &":
        r"""
        Next(OEQBondIter self) -> OEQBondIter
        Next(OEQBondIter self, int i) -> OEQBondIter
        """
        return _oechem.OEQBondIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEQBondBase > &":
        r"""
        Prev(OEQBondIter self) -> OEQBondIter
        Prev(OEQBondIter self, int i) -> OEQBondIter
        """
        return _oechem.OEQBondIter_Prev(self, *args)

# Register OEQBondIter in _oechem:
_oechem.OEQBondIter_swigregister(OEQBondIter)

class OEConfIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OEConfBase > 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__(OEConfIter self) -> OEConfIter
        __init__(OEConfIter self, OEConfIter rhs) -> OEConfIter
        __init__(OEConfIter self, OESystem::OEIterBase< OEChem::OEConfBase > * rhs) -> OEConfIter
        __init__(OEConfIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEConfBase >::NonConstA > * rhs) -> OEConfIter
        """
        _oechem.OEConfIter_swiginit(self, _oechem.new_OEConfIter(*args))
    __swig_destroy__ = _oechem.delete_OEConfIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEConfBase > *":
        r"""Copy(OEConfIter self) -> OESystem::OEIterBase< OEChem::OEConfBase > *"""
        return _oechem.OEConfIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEConfIter self, OESystem::OEIterBase< OEChem::OEConfBase > * ib)
        Push(OEConfIter self, OEConfIter iter)
        """
        return _oechem.OEConfIter_Push(self, *args)

    def Sort(self, sort_criterion: "OEBinaryConfPred") -> "void":
        r"""Sort(OEConfIter self, OEBinaryConfPred sort_criterion)"""
        return _oechem.OEConfIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEConfBase > &":
        r"""ToFirst(OEConfIter self) -> OEConfIter"""
        return _oechem.OEConfIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OEConfBase > &":
        r"""ToLast(OEConfIter self) -> OEConfIter"""
        return _oechem.OEConfIter_ToLast(self)

    def __ref__(self) -> "OEChem::OEConfBase &":
        r"""__ref__(OEConfIter self) -> OEConfBase"""
        return _oechem.OEConfIter___ref__(self)

    def IsValid(self):
      return _oechem.OEConfIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEConfIter self) -> PyObject *"""
        return _oechem.OEConfIter_next(self)

    def Target(self) -> "OEChem::OEConfBase &":
        r"""Target(OEConfIter self) -> OEConfBase"""
        return _oechem.OEConfIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEConfBase > &":
        r"""
        Next(OEConfIter self) -> OEConfIter
        Next(OEConfIter self, int i) -> OEConfIter
        """
        return _oechem.OEConfIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEConfBase > &":
        r"""
        Prev(OEConfIter self) -> OEConfIter
        Prev(OEConfIter self, int i) -> OEConfIter
        """
        return _oechem.OEConfIter_Prev(self, *args)

# Register OEConfIter in _oechem:
_oechem.OEConfIter_swigregister(OEConfIter)

class OEMolBaseIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OEMolBase > 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__(OEMolBaseIter self) -> OEMolBaseIter
        __init__(OEMolBaseIter self, OEMolBaseIter rhs) -> OEMolBaseIter
        __init__(OEMolBaseIter self, OESystem::OEIterBase< OEChem::OEMolBase > * rhs) -> OEMolBaseIter
        __init__(OEMolBaseIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEMolBase >::NonConstA > * rhs) -> OEMolBaseIter
        """
        _oechem.OEMolBaseIter_swiginit(self, _oechem.new_OEMolBaseIter(*args))
    __swig_destroy__ = _oechem.delete_OEMolBaseIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
        r"""Copy(OEMolBaseIter self) -> OESystem::OEIterBase< OEChem::OEMolBase > *"""
        return _oechem.OEMolBaseIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEMolBaseIter self, OESystem::OEIterBase< OEChem::OEMolBase > * ib)
        Push(OEMolBaseIter self, OEMolBaseIter iter)
        """
        return _oechem.OEMolBaseIter_Push(self, *args)

    def Sort(self, sort_criterion: "OEBinaryMolBasePred") -> "void":
        r"""Sort(OEMolBaseIter self, OEBinaryMolBasePred sort_criterion)"""
        return _oechem.OEMolBaseIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEMolBase > &":
        r"""ToFirst(OEMolBaseIter self) -> OEMolBaseIter"""
        return _oechem.OEMolBaseIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OEMolBase > &":
        r"""ToLast(OEMolBaseIter self) -> OEMolBaseIter"""
        return _oechem.OEMolBaseIter_ToLast(self)

    def __ref__(self) -> "OEChem::OEMolBase &":
        r"""__ref__(OEMolBaseIter self) -> OEMolBase"""
        return _oechem.OEMolBaseIter___ref__(self)

    def IsValid(self):
      return _oechem.OEMolBaseIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEMolBaseIter self) -> PyObject *"""
        return _oechem.OEMolBaseIter_next(self)

    def Target(self) -> "OEChem::OEMolBase &":
        r"""Target(OEMolBaseIter self) -> OEMolBase"""
        return _oechem.OEMolBaseIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEMolBase > &":
        r"""
        Next(OEMolBaseIter self) -> OEMolBaseIter
        Next(OEMolBaseIter self, int i) -> OEMolBaseIter
        """
        return _oechem.OEMolBaseIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEMolBase > &":
        r"""
        Prev(OEMolBaseIter self) -> OEMolBaseIter
        Prev(OEMolBaseIter self, int i) -> OEMolBaseIter
        """
        return _oechem.OEMolBaseIter_Prev(self, *args)

# Register OEMolBaseIter in _oechem:
_oechem.OEMolBaseIter_swigregister(OEMolBaseIter)

class OEMCMolBaseIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OEMCMolBase > 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__(OEMCMolBaseIter self) -> OEMCMolBaseIter
        __init__(OEMCMolBaseIter self, OEMCMolBaseIter rhs) -> OEMCMolBaseIter
        __init__(OEMCMolBaseIter self, OESystem::OEIterBase< OEChem::OEMCMolBase > * rhs) -> OEMCMolBaseIter
        __init__(OEMCMolBaseIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEMCMolBase >::NonConstA > * rhs) -> OEMCMolBaseIter
        """
        _oechem.OEMCMolBaseIter_swiginit(self, _oechem.new_OEMCMolBaseIter(*args))
    __swig_destroy__ = _oechem.delete_OEMCMolBaseIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEMCMolBase > *":
        r"""Copy(OEMCMolBaseIter self) -> OESystem::OEIterBase< OEChem::OEMCMolBase > *"""
        return _oechem.OEMCMolBaseIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEMCMolBaseIter self, OESystem::OEIterBase< OEChem::OEMCMolBase > * ib)
        Push(OEMCMolBaseIter self, OEMCMolBaseIter iter)
        """
        return _oechem.OEMCMolBaseIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEChem::OEMCMolBase,OEChem::OEMCMolBase > const &") -> "void":
        r"""Sort(OEMCMolBaseIter self, OESystem::OEBinaryPredicate< OEChem::OEMCMolBase,OEChem::OEMCMolBase > const & sort_criterion)"""
        return _oechem.OEMCMolBaseIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEMCMolBase > &":
        r"""ToFirst(OEMCMolBaseIter self) -> OEMCMolBaseIter"""
        return _oechem.OEMCMolBaseIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OEMCMolBase > &":
        r"""ToLast(OEMCMolBaseIter self) -> OEMCMolBaseIter"""
        return _oechem.OEMCMolBaseIter_ToLast(self)

    def __ref__(self) -> "OEChem::OEMCMolBase &":
        r"""__ref__(OEMCMolBaseIter self) -> OEMCMolBase"""
        return _oechem.OEMCMolBaseIter___ref__(self)

    def IsValid(self):
      return _oechem.OEMCMolBaseIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEMCMolBaseIter self) -> PyObject *"""
        return _oechem.OEMCMolBaseIter_next(self)

    def Target(self) -> "OEChem::OEMCMolBase &":
        r"""Target(OEMCMolBaseIter self) -> OEMCMolBase"""
        return _oechem.OEMCMolBaseIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEMCMolBase > &":
        r"""
        Next(OEMCMolBaseIter self) -> OEMCMolBaseIter
        Next(OEMCMolBaseIter self, int i) -> OEMCMolBaseIter
        """
        return _oechem.OEMCMolBaseIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEMCMolBase > &":
        r"""
        Prev(OEMCMolBaseIter self) -> OEMCMolBaseIter
        Prev(OEMCMolBaseIter self, int i) -> OEMCMolBaseIter
        """
        return _oechem.OEMCMolBaseIter_Prev(self, *args)

# Register OEMCMolBaseIter in _oechem:
_oechem.OEMCMolBaseIter_swigregister(OEMCMolBaseIter)

class OEMatchBaseIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OEMatchBase > 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__(OEMatchBaseIter self) -> OEMatchBaseIter
        __init__(OEMatchBaseIter self, OEMatchBaseIter rhs) -> OEMatchBaseIter
        __init__(OEMatchBaseIter self, OESystem::OEIterBase< OEChem::OEMatchBase > * rhs) -> OEMatchBaseIter
        __init__(OEMatchBaseIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEMatchBase >::NonConstA > * rhs) -> OEMatchBaseIter
        """
        _oechem.OEMatchBaseIter_swiginit(self, _oechem.new_OEMatchBaseIter(*args))
    __swig_destroy__ = _oechem.delete_OEMatchBaseIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEMatchBase > *":
        r"""Copy(OEMatchBaseIter self) -> OESystem::OEIterBase< OEChem::OEMatchBase > *"""
        return _oechem.OEMatchBaseIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEMatchBaseIter self, OESystem::OEIterBase< OEChem::OEMatchBase > * ib)
        Push(OEMatchBaseIter self, OEMatchBaseIter iter)
        """
        return _oechem.OEMatchBaseIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEChem::OEMatchBase,OEChem::OEMatchBase > const &") -> "void":
        r"""Sort(OEMatchBaseIter self, OESystem::OEBinaryPredicate< OEChem::OEMatchBase,OEChem::OEMatchBase > const & sort_criterion)"""
        return _oechem.OEMatchBaseIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEMatchBase > &":
        r"""ToFirst(OEMatchBaseIter self) -> OEMatchBaseIter"""
        return _oechem.OEMatchBaseIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OEMatchBase > &":
        r"""ToLast(OEMatchBaseIter self) -> OEMatchBaseIter"""
        return _oechem.OEMatchBaseIter_ToLast(self)

    def __ref__(self) -> "OEChem::OEMatchBase &":
        r"""__ref__(OEMatchBaseIter self) -> OEMatchBase"""
        return _oechem.OEMatchBaseIter___ref__(self)

    def IsValid(self):
      return _oechem.OEMatchBaseIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEMatchBaseIter self) -> PyObject *"""
        return _oechem.OEMatchBaseIter_next(self)

    def Target(self) -> "OEChem::OEMatchBase &":
        r"""Target(OEMatchBaseIter self) -> OEMatchBase"""
        return _oechem.OEMatchBaseIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEMatchBase > &":
        r"""
        Next(OEMatchBaseIter self) -> OEMatchBaseIter
        Next(OEMatchBaseIter self, int i) -> OEMatchBaseIter
        """
        return _oechem.OEMatchBaseIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEMatchBase > &":
        r"""
        Prev(OEMatchBaseIter self) -> OEMatchBaseIter
        Prev(OEMatchBaseIter self, int i) -> OEMatchBaseIter
        """
        return _oechem.OEMatchBaseIter_Prev(self, *args)

# Register OEMatchBaseIter in _oechem:
_oechem.OEMatchBaseIter_swigregister(OEMatchBaseIter)

class OEMatchBaseAtomIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OEMatchPair< OEChem::OEAtomBase > > 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__(OEMatchBaseAtomIter self) -> OEMatchBaseAtomIter
        __init__(OEMatchBaseAtomIter self, OEMatchBaseAtomIter rhs) -> OEMatchBaseAtomIter
        __init__(OEMatchBaseAtomIter self, OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEAtomBase > > * rhs) -> OEMatchBaseAtomIter
        __init__(OEMatchBaseAtomIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEMatchPair< OEChem::OEAtomBase > >::NonConstA > * rhs) -> OEMatchBaseAtomIter
        """
        _oechem.OEMatchBaseAtomIter_swiginit(self, _oechem.new_OEMatchBaseAtomIter(*args))
    __swig_destroy__ = _oechem.delete_OEMatchBaseAtomIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEAtomBase > > *":
        r"""Copy(OEMatchBaseAtomIter self) -> OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEAtomBase > > *"""
        return _oechem.OEMatchBaseAtomIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEMatchBaseAtomIter self, OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEAtomBase > > * ib)
        Push(OEMatchBaseAtomIter self, OEMatchBaseAtomIter iter)
        """
        return _oechem.OEMatchBaseAtomIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEChem::OEMatchPair< OEChem::OEAtomBase >,OEChem::OEMatchPair< OEChem::OEAtomBase > > const &") -> "void":
        r"""Sort(OEMatchBaseAtomIter self, OESystem::OEBinaryPredicate< OEChem::OEMatchPair< OEChem::OEAtomBase >,OEChem::OEMatchPair< OEChem::OEAtomBase > > const & sort_criterion)"""
        return _oechem.OEMatchBaseAtomIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEMatchPair< OEChem::OEAtomBase > > &":
        r"""ToFirst(OEMatchBaseAtomIter self) -> OEMatchBaseAtomIter"""
        return _oechem.OEMatchBaseAtomIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OEMatchPair< OEChem::OEAtomBase > > &":
        r"""ToLast(OEMatchBaseAtomIter self) -> OEMatchBaseAtomIter"""
        return _oechem.OEMatchBaseAtomIter_ToLast(self)

    def __ref__(self) -> "OEChem::OEMatchPair< OEChem::OEAtomBase > &":
        r"""__ref__(OEMatchBaseAtomIter self) -> OEMatchPairAtom"""
        return _oechem.OEMatchBaseAtomIter___ref__(self)

    def IsValid(self):
      return _oechem.OEMatchBaseAtomIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEMatchBaseAtomIter self) -> PyObject *"""
        return _oechem.OEMatchBaseAtomIter_next(self)

    def Target(self) -> "OEChem::OEMatchPair< OEChem::OEAtomBase > &":
        r"""Target(OEMatchBaseAtomIter self) -> OEMatchPairAtom"""
        return _oechem.OEMatchBaseAtomIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEMatchPair< OEChem::OEAtomBase > > &":
        r"""
        Next(OEMatchBaseAtomIter self) -> OEMatchBaseAtomIter
        Next(OEMatchBaseAtomIter self, int i) -> OEMatchBaseAtomIter
        """
        return _oechem.OEMatchBaseAtomIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEMatchPair< OEChem::OEAtomBase > > &":
        r"""
        Prev(OEMatchBaseAtomIter self) -> OEMatchBaseAtomIter
        Prev(OEMatchBaseAtomIter self, int i) -> OEMatchBaseAtomIter
        """
        return _oechem.OEMatchBaseAtomIter_Prev(self, *args)

# Register OEMatchBaseAtomIter in _oechem:
_oechem.OEMatchBaseAtomIter_swigregister(OEMatchBaseAtomIter)

class OEMatchBaseBondIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OEMatchPair< OEChem::OEBondBase > > 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__(OEMatchBaseBondIter self) -> OEMatchBaseBondIter
        __init__(OEMatchBaseBondIter self, OEMatchBaseBondIter rhs) -> OEMatchBaseBondIter
        __init__(OEMatchBaseBondIter self, OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEBondBase > > * rhs) -> OEMatchBaseBondIter
        __init__(OEMatchBaseBondIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEMatchPair< OEChem::OEBondBase > >::NonConstA > * rhs) -> OEMatchBaseBondIter
        """
        _oechem.OEMatchBaseBondIter_swiginit(self, _oechem.new_OEMatchBaseBondIter(*args))
    __swig_destroy__ = _oechem.delete_OEMatchBaseBondIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEBondBase > > *":
        r"""Copy(OEMatchBaseBondIter self) -> OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEBondBase > > *"""
        return _oechem.OEMatchBaseBondIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEMatchBaseBondIter self, OESystem::OEIterBase< OEChem::OEMatchPair< OEChem::OEBondBase > > * ib)
        Push(OEMatchBaseBondIter self, OEMatchBaseBondIter iter)
        """
        return _oechem.OEMatchBaseBondIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEChem::OEMatchPair< OEChem::OEBondBase >,OEChem::OEMatchPair< OEChem::OEBondBase > > const &") -> "void":
        r"""Sort(OEMatchBaseBondIter self, OESystem::OEBinaryPredicate< OEChem::OEMatchPair< OEChem::OEBondBase >,OEChem::OEMatchPair< OEChem::OEBondBase > > const & sort_criterion)"""
        return _oechem.OEMatchBaseBondIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEMatchPair< OEChem::OEBondBase > > &":
        r"""ToFirst(OEMatchBaseBondIter self) -> OEMatchBaseBondIter"""
        return _oechem.OEMatchBaseBondIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OEMatchPair< OEChem::OEBondBase > > &":
        r"""ToLast(OEMatchBaseBondIter self) -> OEMatchBaseBondIter"""
        return _oechem.OEMatchBaseBondIter_ToLast(self)

    def __ref__(self) -> "OEChem::OEMatchPair< OEChem::OEBondBase > &":
        r"""__ref__(OEMatchBaseBondIter self) -> OEMatchPairBond"""
        return _oechem.OEMatchBaseBondIter___ref__(self)

    def IsValid(self):
      return _oechem.OEMatchBaseBondIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEMatchBaseBondIter self) -> PyObject *"""
        return _oechem.OEMatchBaseBondIter_next(self)

    def Target(self) -> "OEChem::OEMatchPair< OEChem::OEBondBase > &":
        r"""Target(OEMatchBaseBondIter self) -> OEMatchPairBond"""
        return _oechem.OEMatchBaseBondIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEMatchPair< OEChem::OEBondBase > > &":
        r"""
        Next(OEMatchBaseBondIter self) -> OEMatchBaseBondIter
        Next(OEMatchBaseBondIter self, int i) -> OEMatchBaseBondIter
        """
        return _oechem.OEMatchBaseBondIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEMatchPair< OEChem::OEBondBase > > &":
        r"""
        Prev(OEMatchBaseBondIter self) -> OEMatchBaseBondIter
        Prev(OEMatchBaseBondIter self, int i) -> OEMatchBaseBondIter
        """
        return _oechem.OEMatchBaseBondIter_Prev(self, *args)

# Register OEMatchBaseBondIter in _oechem:
_oechem.OEMatchBaseBondIter_swigregister(OEMatchBaseBondIter)

class OEMatchPairAtom(object):
    r"""Proxy of C++ OEChem::OEMatchPair< OEChem::OEAtomBase > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    pattern = property(_oechem.OEMatchPairAtom_pattern_get, _oechem.OEMatchPairAtom_pattern_set, doc=r"""pattern : p.OEChem::OEAtomBase""")
    target = property(_oechem.OEMatchPairAtom_target_get, _oechem.OEMatchPairAtom_target_set, doc=r"""target : p.OEChem::OEAtomBase""")

    def __init__(self, *args):
        r"""
        __init__(OEMatchPairAtom self) -> OEMatchPairAtom
        __init__(OEMatchPairAtom self, OEAtomBase p, OEAtomBase t) -> OEMatchPairAtom
        """
        _oechem.OEMatchPairAtom_swiginit(self, _oechem.new_OEMatchPairAtom(*args))
    __swig_destroy__ = _oechem.delete_OEMatchPairAtom

# Register OEMatchPairAtom in _oechem:
_oechem.OEMatchPairAtom_swigregister(OEMatchPairAtom)

class OEMatchPairBond(object):
    r"""Proxy of C++ OEChem::OEMatchPair< OEChem::OEBondBase > class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    pattern = property(_oechem.OEMatchPairBond_pattern_get, _oechem.OEMatchPairBond_pattern_set, doc=r"""pattern : p.OEChem::OEBondBase""")
    target = property(_oechem.OEMatchPairBond_target_get, _oechem.OEMatchPairBond_target_set, doc=r"""target : p.OEChem::OEBondBase""")

    def __init__(self, *args):
        r"""
        __init__(OEMatchPairBond self) -> OEMatchPairBond
        __init__(OEMatchPairBond self, OEBondBase p, OEBondBase t) -> OEMatchPairBond
        """
        _oechem.OEMatchPairBond_swiginit(self, _oechem.new_OEMatchPairBond(*args))
    __swig_destroy__ = _oechem.delete_OEMatchPairBond

# Register OEMatchPairBond in _oechem:
_oechem.OEMatchPairBond_swigregister(OEMatchPairBond)

class OESDDataIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OESDDataPair > 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__(OESDDataIter self) -> OESDDataIter
        __init__(OESDDataIter self, OESDDataIter rhs) -> OESDDataIter
        __init__(OESDDataIter self, OESystem::OEIterBase< OEChem::OESDDataPair > * rhs) -> OESDDataIter
        __init__(OESDDataIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OESDDataPair >::NonConstA > * rhs) -> OESDDataIter
        """
        _oechem.OESDDataIter_swiginit(self, _oechem.new_OESDDataIter(*args))
    __swig_destroy__ = _oechem.delete_OESDDataIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OESDDataPair > *":
        r"""Copy(OESDDataIter self) -> OESystem::OEIterBase< OEChem::OESDDataPair > *"""
        return _oechem.OESDDataIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OESDDataIter self, OESystem::OEIterBase< OEChem::OESDDataPair > * ib)
        Push(OESDDataIter self, OESDDataIter iter)
        """
        return _oechem.OESDDataIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEChem::OESDDataPair,OEChem::OESDDataPair > const &") -> "void":
        r"""Sort(OESDDataIter self, OESystem::OEBinaryPredicate< OEChem::OESDDataPair,OEChem::OESDDataPair > const & sort_criterion)"""
        return _oechem.OESDDataIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OESDDataPair > &":
        r"""ToFirst(OESDDataIter self) -> OESDDataIter"""
        return _oechem.OESDDataIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OESDDataPair > &":
        r"""ToLast(OESDDataIter self) -> OESDDataIter"""
        return _oechem.OESDDataIter_ToLast(self)

    def __ref__(self) -> "OEChem::OESDDataPair &":
        r"""__ref__(OESDDataIter self) -> OESDDataPair"""
        return _oechem.OESDDataIter___ref__(self)

    def IsValid(self):
      return _oechem.OESDDataIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OESDDataIter self) -> PyObject *"""
        return _oechem.OESDDataIter_next(self)

    def Target(self) -> "OEChem::OESDDataPair &":
        r"""Target(OESDDataIter self) -> OESDDataPair"""
        return _oechem.OESDDataIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OESDDataPair > &":
        r"""
        Next(OESDDataIter self) -> OESDDataIter
        Next(OESDDataIter self, int i) -> OESDDataIter
        """
        return _oechem.OESDDataIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OESDDataPair > &":
        r"""
        Prev(OESDDataIter self) -> OESDDataIter
        Prev(OESDDataIter self, int i) -> OESDDataIter
        """
        return _oechem.OESDDataIter_Prev(self, *args)

# Register OESDDataIter in _oechem:
_oechem.OESDDataIter_swigregister(OESDDataIter)

class OETransBaseIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OETransBase > 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__(OETransBaseIter self) -> OETransBaseIter
        __init__(OETransBaseIter self, OETransBaseIter rhs) -> OETransBaseIter
        __init__(OETransBaseIter self, OESystem::OEIterBase< OEChem::OETransBase > * rhs) -> OETransBaseIter
        __init__(OETransBaseIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OETransBase >::NonConstA > * rhs) -> OETransBaseIter
        """
        _oechem.OETransBaseIter_swiginit(self, _oechem.new_OETransBaseIter(*args))
    __swig_destroy__ = _oechem.delete_OETransBaseIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OETransBase > *":
        r"""Copy(OETransBaseIter self) -> OESystem::OEIterBase< OEChem::OETransBase > *"""
        return _oechem.OETransBaseIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OETransBaseIter self, OESystem::OEIterBase< OEChem::OETransBase > * ib)
        Push(OETransBaseIter self, OETransBaseIter iter)
        """
        return _oechem.OETransBaseIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEChem::OETransBase,OEChem::OETransBase > const &") -> "void":
        r"""Sort(OETransBaseIter self, OESystem::OEBinaryPredicate< OEChem::OETransBase,OEChem::OETransBase > const & sort_criterion)"""
        return _oechem.OETransBaseIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OETransBase > &":
        r"""ToFirst(OETransBaseIter self) -> OETransBaseIter"""
        return _oechem.OETransBaseIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OETransBase > &":
        r"""ToLast(OETransBaseIter self) -> OETransBaseIter"""
        return _oechem.OETransBaseIter_ToLast(self)

    def __ref__(self) -> "OEChem::OETransBase &":
        r"""__ref__(OETransBaseIter self) -> OETransBase"""
        return _oechem.OETransBaseIter___ref__(self)

    def IsValid(self):
      return _oechem.OETransBaseIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OETransBaseIter self) -> PyObject *"""
        return _oechem.OETransBaseIter_next(self)

    def Target(self) -> "OEChem::OETransBase &":
        r"""Target(OETransBaseIter self) -> OETransBase"""
        return _oechem.OETransBaseIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OETransBase > &":
        r"""
        Next(OETransBaseIter self) -> OETransBaseIter
        Next(OETransBaseIter self, int i) -> OETransBaseIter
        """
        return _oechem.OETransBaseIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OETransBase > &":
        r"""
        Prev(OETransBaseIter self) -> OETransBaseIter
        Prev(OETransBaseIter self, int i) -> OETransBaseIter
        """
        return _oechem.OETransBaseIter_Prev(self, *args)

# Register OETransBaseIter in _oechem:
_oechem.OETransBaseIter_swigregister(OETransBaseIter)

class OENbrsIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OENbrs > 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__(OENbrsIter self) -> OENbrsIter
        __init__(OENbrsIter self, OENbrsIter rhs) -> OENbrsIter
        __init__(OENbrsIter self, OESystem::OEIterBase< OEChem::OENbrs > * rhs) -> OENbrsIter
        __init__(OENbrsIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OENbrs >::NonConstA > * rhs) -> OENbrsIter
        """
        _oechem.OENbrsIter_swiginit(self, _oechem.new_OENbrsIter(*args))
    __swig_destroy__ = _oechem.delete_OENbrsIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OENbrs > *":
        r"""Copy(OENbrsIter self) -> OESystem::OEIterBase< OEChem::OENbrs > *"""
        return _oechem.OENbrsIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OENbrsIter self, OESystem::OEIterBase< OEChem::OENbrs > * ib)
        Push(OENbrsIter self, OENbrsIter iter)
        """
        return _oechem.OENbrsIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEChem::OENbrs,OEChem::OENbrs > const &") -> "void":
        r"""Sort(OENbrsIter self, OESystem::OEBinaryPredicate< OEChem::OENbrs,OEChem::OENbrs > const & sort_criterion)"""
        return _oechem.OENbrsIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OENbrs > &":
        r"""ToFirst(OENbrsIter self) -> OENbrsIter"""
        return _oechem.OENbrsIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OENbrs > &":
        r"""ToLast(OENbrsIter self) -> OENbrsIter"""
        return _oechem.OENbrsIter_ToLast(self)

    def __ref__(self) -> "OEChem::OENbrs &":
        r"""__ref__(OENbrsIter self) -> OENbrs"""
        return _oechem.OENbrsIter___ref__(self)

    def IsValid(self):
      return _oechem.OENbrsIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OENbrsIter self) -> PyObject *"""
        return _oechem.OENbrsIter_next(self)

    def Target(self) -> "OEChem::OENbrs &":
        r"""Target(OENbrsIter self) -> OENbrs"""
        return _oechem.OENbrsIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OENbrs > &":
        r"""
        Next(OENbrsIter self) -> OENbrsIter
        Next(OENbrsIter self, int i) -> OENbrsIter
        """
        return _oechem.OENbrsIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OENbrs > &":
        r"""
        Prev(OENbrsIter self) -> OENbrsIter
        Prev(OENbrsIter self, int i) -> OENbrsIter
        """
        return _oechem.OENbrsIter_Prev(self, *args)

# Register OENbrsIter in _oechem:
_oechem.OENbrsIter_swigregister(OENbrsIter)

class OEBaseDataIter(object):
    r"""Proxy of C++ OESystem::OEIter< OESystem::OEBaseData > 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__(OEBaseDataIter self) -> OEBaseDataIter
        __init__(OEBaseDataIter self, OEBaseDataIter rhs) -> OEBaseDataIter
        __init__(OEBaseDataIter self, OESystem::OEIterBase< OESystem::OEBaseData > * rhs) -> OEBaseDataIter
        __init__(OEBaseDataIter self, OESystem::OEIterBase< OESystem::OEIter< OESystem::OEBaseData >::NonConstA > * rhs) -> OEBaseDataIter
        """
        _oechem.OEBaseDataIter_swiginit(self, _oechem.new_OEBaseDataIter(*args))
    __swig_destroy__ = _oechem.delete_OEBaseDataIter

    def Copy(self) -> "OESystem::OEIterBase< OESystem::OEBaseData > *":
        r"""Copy(OEBaseDataIter self) -> OESystem::OEIterBase< OESystem::OEBaseData > *"""
        return _oechem.OEBaseDataIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEBaseDataIter self, OESystem::OEIterBase< OESystem::OEBaseData > * ib)
        Push(OEBaseDataIter self, OEBaseDataIter iter)
        """
        return _oechem.OEBaseDataIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OESystem::OEBaseData,OESystem::OEBaseData > const &") -> "void":
        r"""Sort(OEBaseDataIter self, OESystem::OEBinaryPredicate< OESystem::OEBaseData,OESystem::OEBaseData > const & sort_criterion)"""
        return _oechem.OEBaseDataIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OESystem::OEBaseData > &":
        r"""ToFirst(OEBaseDataIter self) -> OEBaseDataIter"""
        return _oechem.OEBaseDataIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OESystem::OEBaseData > &":
        r"""ToLast(OEBaseDataIter self) -> OEBaseDataIter"""
        return _oechem.OEBaseDataIter_ToLast(self)

    def __ref__(self) -> "OESystem::OEBaseData &":
        r"""__ref__(OEBaseDataIter self) -> OEBaseData"""
        return _oechem.OEBaseDataIter___ref__(self)

    def IsValid(self):
      return _oechem.OEBaseDataIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEBaseDataIter self) -> PyObject *"""
        return _oechem.OEBaseDataIter_next(self)

    def Target(self) -> "OESystem::OEBaseData &":
        r"""Target(OEBaseDataIter self) -> OEBaseData"""
        return _oechem.OEBaseDataIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OESystem::OEBaseData > &":
        r"""
        Next(OEBaseDataIter self) -> OEBaseDataIter
        Next(OEBaseDataIter self, int i) -> OEBaseDataIter
        """
        return _oechem.OEBaseDataIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OESystem::OEBaseData > &":
        r"""
        Prev(OEBaseDataIter self) -> OEBaseDataIter
        Prev(OEBaseDataIter self, int i) -> OEBaseDataIter
        """
        return _oechem.OEBaseDataIter_Prev(self, *args)

# Register OEBaseDataIter in _oechem:
_oechem.OEBaseDataIter_swigregister(OEBaseDataIter)

class OEParameterIter(object):
    r"""Proxy of C++ OESystem::OEIter< OESystem::OEParameter > 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__(OEParameterIter self) -> OEParameterIter
        __init__(OEParameterIter self, OEParameterIter rhs) -> OEParameterIter
        __init__(OEParameterIter self, OESystem::OEIterBase< OESystem::OEParameter > * rhs) -> OEParameterIter
        __init__(OEParameterIter self, OESystem::OEIterBase< OESystem::OEIter< OESystem::OEParameter >::NonConstA > * rhs) -> OEParameterIter
        """
        _oechem.OEParameterIter_swiginit(self, _oechem.new_OEParameterIter(*args))
    __swig_destroy__ = _oechem.delete_OEParameterIter

    def Copy(self) -> "OESystem::OEIterBase< OESystem::OEParameter > *":
        r"""Copy(OEParameterIter self) -> OESystem::OEIterBase< OESystem::OEParameter > *"""
        return _oechem.OEParameterIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEParameterIter self, OESystem::OEIterBase< OESystem::OEParameter > * ib)
        Push(OEParameterIter self, OEParameterIter iter)
        """
        return _oechem.OEParameterIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OESystem::OEParameter,OESystem::OEParameter > const &") -> "void":
        r"""Sort(OEParameterIter self, OESystem::OEBinaryPredicate< OESystem::OEParameter,OESystem::OEParameter > const & sort_criterion)"""
        return _oechem.OEParameterIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OESystem::OEParameter > &":
        r"""ToFirst(OEParameterIter self) -> OEParameterIter"""
        return _oechem.OEParameterIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OESystem::OEParameter > &":
        r"""ToLast(OEParameterIter self) -> OEParameterIter"""
        return _oechem.OEParameterIter_ToLast(self)

    def __ref__(self) -> "OESystem::OEParameter &":
        r"""__ref__(OEParameterIter self) -> OEParameter"""
        return _oechem.OEParameterIter___ref__(self)

    def IsValid(self):
      return _oechem.OEParameterIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEParameterIter self) -> PyObject *"""
        return _oechem.OEParameterIter_next(self)

    def Target(self) -> "OESystem::OEParameter &":
        r"""Target(OEParameterIter self) -> OEParameter"""
        return _oechem.OEParameterIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OESystem::OEParameter > &":
        r"""
        Next(OEParameterIter self) -> OEParameterIter
        Next(OEParameterIter self, int i) -> OEParameterIter
        """
        return _oechem.OEParameterIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OESystem::OEParameter > &":
        r"""
        Prev(OEParameterIter self) -> OEParameterIter
        Prev(OEParameterIter self, int i) -> OEParameterIter
        """
        return _oechem.OEParameterIter_Prev(self, *args)

# Register OEParameterIter in _oechem:
_oechem.OEParameterIter_swigregister(OEParameterIter)

class OEInterfaceIter(object):
    r"""Proxy of C++ OESystem::OEIter< OESystem::OEInterface > 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__(OEInterfaceIter self) -> OEInterfaceIter
        __init__(OEInterfaceIter self, OEInterfaceIter rhs) -> OEInterfaceIter
        __init__(OEInterfaceIter self, OESystem::OEIterBase< OESystem::OEInterface > * rhs) -> OEInterfaceIter
        __init__(OEInterfaceIter self, OESystem::OEIterBase< OESystem::OEIter< OESystem::OEInterface >::NonConstA > * rhs) -> OEInterfaceIter
        """
        _oechem.OEInterfaceIter_swiginit(self, _oechem.new_OEInterfaceIter(*args))
    __swig_destroy__ = _oechem.delete_OEInterfaceIter

    def Copy(self) -> "OESystem::OEIterBase< OESystem::OEInterface > *":
        r"""Copy(OEInterfaceIter self) -> OESystem::OEIterBase< OESystem::OEInterface > *"""
        return _oechem.OEInterfaceIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEInterfaceIter self, OESystem::OEIterBase< OESystem::OEInterface > * ib)
        Push(OEInterfaceIter self, OEInterfaceIter iter)
        """
        return _oechem.OEInterfaceIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OESystem::OEInterface,OESystem::OEInterface > const &") -> "void":
        r"""Sort(OEInterfaceIter self, OESystem::OEBinaryPredicate< OESystem::OEInterface,OESystem::OEInterface > const & sort_criterion)"""
        return _oechem.OEInterfaceIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OESystem::OEInterface > &":
        r"""ToFirst(OEInterfaceIter self) -> OEInterfaceIter"""
        return _oechem.OEInterfaceIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OESystem::OEInterface > &":
        r"""ToLast(OEInterfaceIter self) -> OEInterfaceIter"""
        return _oechem.OEInterfaceIter_ToLast(self)

    def __ref__(self) -> "OESystem::OEInterface &":
        r"""__ref__(OEInterfaceIter self) -> OEInterface"""
        return _oechem.OEInterfaceIter___ref__(self)

    def IsValid(self):
      return _oechem.OEInterfaceIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEInterfaceIter self) -> PyObject *"""
        return _oechem.OEInterfaceIter_next(self)

    def Target(self) -> "OESystem::OEInterface &":
        r"""Target(OEInterfaceIter self) -> OEInterface"""
        return _oechem.OEInterfaceIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OESystem::OEInterface > &":
        r"""
        Next(OEInterfaceIter self) -> OEInterfaceIter
        Next(OEInterfaceIter self, int i) -> OEInterfaceIter
        """
        return _oechem.OEInterfaceIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OESystem::OEInterface > &":
        r"""
        Prev(OEInterfaceIter self) -> OEInterfaceIter
        Prev(OEInterfaceIter self, int i) -> OEInterfaceIter
        """
        return _oechem.OEInterfaceIter_Prev(self, *args)

# Register OEInterfaceIter in _oechem:
_oechem.OEInterfaceIter_swigregister(OEInterfaceIter)

class OEAltLocationIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OEAltLocation > 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__(OEAltLocationIter self) -> OEAltLocationIter
        __init__(OEAltLocationIter self, OEAltLocationIter rhs) -> OEAltLocationIter
        __init__(OEAltLocationIter self, OESystem::OEIterBase< OEBio::OEAltLocation > * rhs) -> OEAltLocationIter
        __init__(OEAltLocationIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEAltLocation >::NonConstA > * rhs) -> OEAltLocationIter
        """
        _oechem.OEAltLocationIter_swiginit(self, _oechem.new_OEAltLocationIter(*args))
    __swig_destroy__ = _oechem.delete_OEAltLocationIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OEAltLocation > *":
        r"""Copy(OEAltLocationIter self) -> OESystem::OEIterBase< OEBio::OEAltLocation > *"""
        return _oechem.OEAltLocationIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEAltLocationIter self, OESystem::OEIterBase< OEBio::OEAltLocation > * ib)
        Push(OEAltLocationIter self, OEAltLocationIter iter)
        """
        return _oechem.OEAltLocationIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OEAltLocation,OEBio::OEAltLocation > const &") -> "void":
        r"""Sort(OEAltLocationIter self, OESystem::OEBinaryPredicate< OEBio::OEAltLocation,OEBio::OEAltLocation > const & sort_criterion)"""
        return _oechem.OEAltLocationIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OEAltLocation > &":
        r"""ToFirst(OEAltLocationIter self) -> OEAltLocationIter"""
        return _oechem.OEAltLocationIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OEAltLocation > &":
        r"""ToLast(OEAltLocationIter self) -> OEAltLocationIter"""
        return _oechem.OEAltLocationIter_ToLast(self)

    def __ref__(self) -> "OEBio::OEAltLocation &":
        r"""__ref__(OEAltLocationIter self) -> OEAltLocation"""
        return _oechem.OEAltLocationIter___ref__(self)

    def IsValid(self):
      return _oechem.OEAltLocationIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEAltLocationIter self) -> PyObject *"""
        return _oechem.OEAltLocationIter_next(self)

    def Target(self) -> "OEBio::OEAltLocation &":
        r"""Target(OEAltLocationIter self) -> OEAltLocation"""
        return _oechem.OEAltLocationIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OEAltLocation > &":
        r"""
        Next(OEAltLocationIter self) -> OEAltLocationIter
        Next(OEAltLocationIter self, int i) -> OEAltLocationIter
        """
        return _oechem.OEAltLocationIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OEAltLocation > &":
        r"""
        Prev(OEAltLocationIter self) -> OEAltLocationIter
        Prev(OEAltLocationIter self, int i) -> OEAltLocationIter
        """
        return _oechem.OEAltLocationIter_Prev(self, *args)

# Register OEAltLocationIter in _oechem:
_oechem.OEAltLocationIter_swigregister(OEAltLocationIter)

class OEAltGroupIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OEAltGroup > 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__(OEAltGroupIter self) -> OEAltGroupIter
        __init__(OEAltGroupIter self, OEAltGroupIter rhs) -> OEAltGroupIter
        __init__(OEAltGroupIter self, OESystem::OEIterBase< OEBio::OEAltGroup > * rhs) -> OEAltGroupIter
        __init__(OEAltGroupIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEAltGroup >::NonConstA > * rhs) -> OEAltGroupIter
        """
        _oechem.OEAltGroupIter_swiginit(self, _oechem.new_OEAltGroupIter(*args))
    __swig_destroy__ = _oechem.delete_OEAltGroupIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OEAltGroup > *":
        r"""Copy(OEAltGroupIter self) -> OESystem::OEIterBase< OEBio::OEAltGroup > *"""
        return _oechem.OEAltGroupIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEAltGroupIter self, OESystem::OEIterBase< OEBio::OEAltGroup > * ib)
        Push(OEAltGroupIter self, OEAltGroupIter iter)
        """
        return _oechem.OEAltGroupIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OEAltGroup,OEBio::OEAltGroup > const &") -> "void":
        r"""Sort(OEAltGroupIter self, OESystem::OEBinaryPredicate< OEBio::OEAltGroup,OEBio::OEAltGroup > const & sort_criterion)"""
        return _oechem.OEAltGroupIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OEAltGroup > &":
        r"""ToFirst(OEAltGroupIter self) -> OEAltGroupIter"""
        return _oechem.OEAltGroupIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OEAltGroup > &":
        r"""ToLast(OEAltGroupIter self) -> OEAltGroupIter"""
        return _oechem.OEAltGroupIter_ToLast(self)

    def __ref__(self) -> "OEBio::OEAltGroup &":
        r"""__ref__(OEAltGroupIter self) -> OEAltGroup"""
        return _oechem.OEAltGroupIter___ref__(self)

    def IsValid(self):
      return _oechem.OEAltGroupIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEAltGroupIter self) -> PyObject *"""
        return _oechem.OEAltGroupIter_next(self)

    def Target(self) -> "OEBio::OEAltGroup &":
        r"""Target(OEAltGroupIter self) -> OEAltGroup"""
        return _oechem.OEAltGroupIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OEAltGroup > &":
        r"""
        Next(OEAltGroupIter self) -> OEAltGroupIter
        Next(OEAltGroupIter self, int i) -> OEAltGroupIter
        """
        return _oechem.OEAltGroupIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OEAltGroup > &":
        r"""
        Prev(OEAltGroupIter self) -> OEAltGroupIter
        Prev(OEAltGroupIter self, int i) -> OEAltGroupIter
        """
        return _oechem.OEAltGroupIter_Prev(self, *args)

# Register OEAltGroupIter in _oechem:
_oechem.OEAltGroupIter_swigregister(OEAltGroupIter)

class OESequenceAlignmentIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OESequenceAlignment > 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__(OESequenceAlignmentIter self) -> OESequenceAlignmentIter
        __init__(OESequenceAlignmentIter self, OESequenceAlignmentIter rhs) -> OESequenceAlignmentIter
        __init__(OESequenceAlignmentIter self, OESystem::OEIterBase< OEBio::OESequenceAlignment > * rhs) -> OESequenceAlignmentIter
        __init__(OESequenceAlignmentIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OESequenceAlignment >::NonConstA > * rhs) -> OESequenceAlignmentIter
        """
        _oechem.OESequenceAlignmentIter_swiginit(self, _oechem.new_OESequenceAlignmentIter(*args))
    __swig_destroy__ = _oechem.delete_OESequenceAlignmentIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OESequenceAlignment > *":
        r"""Copy(OESequenceAlignmentIter self) -> OESystem::OEIterBase< OEBio::OESequenceAlignment > *"""
        return _oechem.OESequenceAlignmentIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OESequenceAlignmentIter self, OESystem::OEIterBase< OEBio::OESequenceAlignment > * ib)
        Push(OESequenceAlignmentIter self, OESequenceAlignmentIter iter)
        """
        return _oechem.OESequenceAlignmentIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OESequenceAlignment,OEBio::OESequenceAlignment > const &") -> "void":
        r"""Sort(OESequenceAlignmentIter self, OESystem::OEBinaryPredicate< OEBio::OESequenceAlignment,OEBio::OESequenceAlignment > const & sort_criterion)"""
        return _oechem.OESequenceAlignmentIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OESequenceAlignment > &":
        r"""ToFirst(OESequenceAlignmentIter self) -> OESequenceAlignmentIter"""
        return _oechem.OESequenceAlignmentIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OESequenceAlignment > &":
        r"""ToLast(OESequenceAlignmentIter self) -> OESequenceAlignmentIter"""
        return _oechem.OESequenceAlignmentIter_ToLast(self)

    def __ref__(self) -> "OEBio::OESequenceAlignment &":
        r"""__ref__(OESequenceAlignmentIter self) -> OESequenceAlignment"""
        return _oechem.OESequenceAlignmentIter___ref__(self)

    def IsValid(self):
      return _oechem.OESequenceAlignmentIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OESequenceAlignmentIter self) -> PyObject *"""
        return _oechem.OESequenceAlignmentIter_next(self)

    def Target(self) -> "OEBio::OESequenceAlignment &":
        r"""Target(OESequenceAlignmentIter self) -> OESequenceAlignment"""
        return _oechem.OESequenceAlignmentIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OESequenceAlignment > &":
        r"""
        Next(OESequenceAlignmentIter self) -> OESequenceAlignmentIter
        Next(OESequenceAlignmentIter self, int i) -> OESequenceAlignmentIter
        """
        return _oechem.OESequenceAlignmentIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OESequenceAlignment > &":
        r"""
        Prev(OESequenceAlignmentIter self) -> OESequenceAlignmentIter
        Prev(OESequenceAlignmentIter self, int i) -> OESequenceAlignmentIter
        """
        return _oechem.OESequenceAlignmentIter_Prev(self, *args)

# Register OESequenceAlignmentIter in _oechem:
_oechem.OESequenceAlignmentIter_swigregister(OESequenceAlignmentIter)

class OEResidueIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OEResidue > 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__(OEResidueIter self) -> OEResidueIter
        __init__(OEResidueIter self, OEResidueIter rhs) -> OEResidueIter
        __init__(OEResidueIter self, OESystem::OEIterBase< OEChem::OEResidue > * rhs) -> OEResidueIter
        __init__(OEResidueIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEResidue >::NonConstA > * rhs) -> OEResidueIter
        """
        _oechem.OEResidueIter_swiginit(self, _oechem.new_OEResidueIter(*args))
    __swig_destroy__ = _oechem.delete_OEResidueIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEResidue > *":
        r"""Copy(OEResidueIter self) -> OESystem::OEIterBase< OEChem::OEResidue > *"""
        return _oechem.OEResidueIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEResidueIter self, OESystem::OEIterBase< OEChem::OEResidue > * ib)
        Push(OEResidueIter self, OEResidueIter iter)
        """
        return _oechem.OEResidueIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEChem::OEResidue,OEChem::OEResidue > const &") -> "void":
        r"""Sort(OEResidueIter self, OESystem::OEBinaryPredicate< OEChem::OEResidue,OEChem::OEResidue > const & sort_criterion)"""
        return _oechem.OEResidueIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEResidue > &":
        r"""ToFirst(OEResidueIter self) -> OEResidueIter"""
        return _oechem.OEResidueIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OEResidue > &":
        r"""ToLast(OEResidueIter self) -> OEResidueIter"""
        return _oechem.OEResidueIter_ToLast(self)

    def __ref__(self) -> "OEChem::OEResidue &":
        r"""__ref__(OEResidueIter self) -> OEResidue"""
        return _oechem.OEResidueIter___ref__(self)

    def IsValid(self):
      return _oechem.OEResidueIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEResidueIter self) -> PyObject *"""
        return _oechem.OEResidueIter_next(self)

    def Target(self) -> "OEChem::OEResidue &":
        r"""Target(OEResidueIter self) -> OEResidue"""
        return _oechem.OEResidueIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEResidue > &":
        r"""
        Next(OEResidueIter self) -> OEResidueIter
        Next(OEResidueIter self, int i) -> OEResidueIter
        """
        return _oechem.OEResidueIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEResidue > &":
        r"""
        Prev(OEResidueIter self) -> OEResidueIter
        Prev(OEResidueIter self, int i) -> OEResidueIter
        """
        return _oechem.OEResidueIter_Prev(self, *args)

# Register OEResidueIter in _oechem:
_oechem.OEResidueIter_swigregister(OEResidueIter)

class OEConstStringIter(object):
    r"""Proxy of C++ OESystem::OEIter< std::string 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__(OEConstStringIter self) -> OEConstStringIter
        __init__(OEConstStringIter self, OEConstStringIter rhs) -> OEConstStringIter
        __init__(OEConstStringIter self, OESystem::OEIterBase< std::string const > * rhs) -> OEConstStringIter
        __init__(OEConstStringIter self, OESystem::OEIterBase< OESystem::OEIter< std::string const >::NonConstA > * rhs) -> OEConstStringIter
        """
        _oechem.OEConstStringIter_swiginit(self, _oechem.new_OEConstStringIter(*args))
    __swig_destroy__ = _oechem.delete_OEConstStringIter

    def Copy(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""Copy(OEConstStringIter self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEConstStringIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEConstStringIter self, OESystem::OEIterBase< std::string const > * ib)
        Push(OEConstStringIter self, OEConstStringIter iter)
        """
        return _oechem.OEConstStringIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< std::string const,std::string const > const &") -> "void":
        r"""Sort(OEConstStringIter self, OESystem::OEBinaryPredicate< std::string const,std::string const > const & sort_criterion)"""
        return _oechem.OEConstStringIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< std::string const > &":
        r"""ToFirst(OEConstStringIter self) -> OEConstStringIter"""
        return _oechem.OEConstStringIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< std::string const > &":
        r"""ToLast(OEConstStringIter self) -> OEConstStringIter"""
        return _oechem.OEConstStringIter_ToLast(self)

    def __ref__(self) -> "std::string const &":
        r"""__ref__(OEConstStringIter self) -> std::string const &"""
        return _oechem.OEConstStringIter___ref__(self)

    def IsValid(self):
      return _oechem.OEConstStringIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEConstStringIter self) -> PyObject *"""
        return _oechem.OEConstStringIter_next(self)

    def Target(self) -> "std::string const &":
        r"""Target(OEConstStringIter self) -> std::string const &"""
        return _oechem.OEConstStringIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< std::string const > &":
        r"""
        Next(OEConstStringIter self) -> OEConstStringIter
        Next(OEConstStringIter self, int i) -> OEConstStringIter
        """
        return _oechem.OEConstStringIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< std::string const > &":
        r"""
        Prev(OEConstStringIter self) -> OEConstStringIter
        Prev(OEConstStringIter self, int i) -> OEConstStringIter
        """
        return _oechem.OEConstStringIter_Prev(self, *args)

# Register OEConstStringIter in _oechem:
_oechem.OEConstStringIter_swigregister(OEConstStringIter)

class OEStringIter(object):
    r"""Proxy of C++ OESystem::OEIter< std::string > 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__(OEStringIter self) -> OEStringIter
        __init__(OEStringIter self, OEStringIter rhs) -> OEStringIter
        __init__(OEStringIter self, OESystem::OEIterBase< std::string > * rhs) -> OEStringIter
        __init__(OEStringIter self, OESystem::OEIterBase< OESystem::OEIter< std::string >::NonConstA > * rhs) -> OEStringIter
        """
        _oechem.OEStringIter_swiginit(self, _oechem.new_OEStringIter(*args))
    __swig_destroy__ = _oechem.delete_OEStringIter

    def Copy(self) -> "OESystem::OEIterBase< std::string > *":
        r"""Copy(OEStringIter self) -> OESystem::OEIterBase< std::string > *"""
        return _oechem.OEStringIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEStringIter self, OESystem::OEIterBase< std::string > * ib)
        Push(OEStringIter self, OEStringIter iter)
        """
        return _oechem.OEStringIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< std::string,std::string > const &") -> "void":
        r"""Sort(OEStringIter self, OESystem::OEBinaryPredicate< std::string,std::string > const & sort_criterion)"""
        return _oechem.OEStringIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< std::string > &":
        r"""ToFirst(OEStringIter self) -> OEStringIter"""
        return _oechem.OEStringIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< std::string > &":
        r"""ToLast(OEStringIter self) -> OEStringIter"""
        return _oechem.OEStringIter_ToLast(self)

    def __ref__(self) -> "std::string &":
        r"""__ref__(OEStringIter self) -> std::string &"""
        return _oechem.OEStringIter___ref__(self)

    def IsValid(self):
      return _oechem.OEStringIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEStringIter self) -> PyObject *"""
        return _oechem.OEStringIter_next(self)

    def Target(self) -> "std::string &":
        r"""Target(OEStringIter self) -> std::string &"""
        return _oechem.OEStringIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< std::string > &":
        r"""
        Next(OEStringIter self) -> OEStringIter
        Next(OEStringIter self, int i) -> OEStringIter
        """
        return _oechem.OEStringIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< std::string > &":
        r"""
        Prev(OEStringIter self) -> OEStringIter
        Prev(OEStringIter self, int i) -> OEStringIter
        """
        return _oechem.OEStringIter_Prev(self, *args)

# Register OEStringIter in _oechem:
_oechem.OEStringIter_swigregister(OEStringIter)


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

OEConstStringIter.__iter__ = str_iter
OEStringIter.__iter__ = str_iter

del str_iter


def OEClearAromaticFlags(mol: "OEMolBase") -> "void":
    r"""OEClearAromaticFlags(OEMolBase mol)"""
    return _oechem.OEClearAromaticFlags(mol)

def OEAssignAromaticFlags(*args) -> "void":
    r"""OEAssignAromaticFlags(OEMolBase mol, unsigned int aromodel=OEAroModelOpenEye, bool clearflags=True, unsigned int maxpath=0, bool prune=False)"""
    return _oechem.OEAssignAromaticFlags(*args)

def OEExactGraphMatch(mol1: "OEMolBase", mol2: "OEMolBase") -> "bool":
    r"""OEExactGraphMatch(OEMolBase mol1, OEMolBase mol2) -> bool"""
    return _oechem.OEExactGraphMatch(mol1, mol2)

def OECanonicalOrderAtoms(mol: "OEMolBase") -> "void":
    r"""OECanonicalOrderAtoms(OEMolBase mol)"""
    return _oechem.OECanonicalOrderAtoms(mol)

def OECanonicalOrderBonds(mol: "OEMolBase") -> "void":
    r"""OECanonicalOrderBonds(OEMolBase mol)"""
    return _oechem.OECanonicalOrderBonds(mol)

def OEClearPartialCharges(mol: "OEMolBase") -> "void":
    r"""OEClearPartialCharges(OEMolBase mol)"""
    return _oechem.OEClearPartialCharges(mol)

def OEFormalPartialCharges(mol: "OEMolBase") -> "void":
    r"""OEFormalPartialCharges(OEMolBase mol)"""
    return _oechem.OEFormalPartialCharges(mol)

def OEHasPartialCharges(mol: "OEMolBase") -> "bool":
    r"""OEHasPartialCharges(OEMolBase mol) -> bool"""
    return _oechem.OEHasPartialCharges(mol)

def OENetCharge(mol: "OEMolBase") -> "int":
    r"""OENetCharge(OEMolBase mol) -> int"""
    return _oechem.OENetCharge(mol)

def OEGasteigerInitialCharges(mol: "OEMolBase") -> "bool":
    r"""OEGasteigerInitialCharges(OEMolBase mol) -> bool"""
    return _oechem.OEGasteigerInitialCharges(mol)

def OEGasteigerPartialCharges(mol: "OEMolBase") -> "bool":
    r"""OEGasteigerPartialCharges(OEMolBase mol) -> bool"""
    return _oechem.OEGasteigerPartialCharges(mol)

def OEAssignFormalCharges(*args) -> "void":
    r"""
    OEAssignFormalCharges(OEAtomBase atm)
    OEAssignFormalCharges(OEMolBase mol)
    """
    return _oechem.OEAssignFormalCharges(*args)

def OEPerceiveCIPStereo(*args) -> "unsigned int":
    r"""
    OEPerceiveCIPStereo(OEMolBase mol, OEAtomBase atom) -> unsigned int
    OEPerceiveCIPStereo(OEMolBase mol, OEBondBase bond) -> unsigned int
    """
    return _oechem.OEPerceiveCIPStereo(*args)

def OESetCIPStereo(*args) -> "bool":
    r"""
    OESetCIPStereo(OEMolBase mol, OEAtomBase atom, unsigned int cipstereo) -> bool
    OESetCIPStereo(OEMolBase mol, OEBondBase bond, unsigned int cipstereo) -> bool
    """
    return _oechem.OESetCIPStereo(*args)

def OEApplyStateFromRef(*args) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
    r"""
    OEApplyStateFromRef(OEMolBase inputState, std::string const & refState) -> OESystem::OEIterBase< OEChem::OEMolBase >
    OEApplyStateFromRef(OEMolBase inputState, OEMolBase refState) -> OESystem::OEIterBase< OEChem::OEMolBase > *
    """
    return _oechem.OEApplyStateFromRef(*args)

def OEGetComment(mol: "OEMolBase") -> "char const *":
    r"""OEGetComment(OEMolBase mol) -> char const *"""
    return _oechem.OEGetComment(mol)

def OESetComment(mol: "OEMolBase", c: "char const *") -> "void":
    r"""OESetComment(OEMolBase mol, char const * c)"""
    return _oechem.OESetComment(mol, c)

def OEGetAtomComment(atm: "OEAtomBase") -> "char const *":
    r"""OEGetAtomComment(OEAtomBase atm) -> char const *"""
    return _oechem.OEGetAtomComment(atm)

def OESetAtomComment(atm: "OEAtomBase", c: "char const *") -> "void":
    r"""OESetAtomComment(OEAtomBase atm, char const * c)"""
    return _oechem.OESetAtomComment(atm, c)

def OEDetermineConnectivity(mol: "OEMolBase", same_altloc: "bool"=True) -> "void":
    r"""OEDetermineConnectivity(OEMolBase mol, bool same_altloc=True)"""
    return _oechem.OEDetermineConnectivity(mol, same_altloc)

def OEPerceiveBondOrders(mol: "OEMolBase") -> "void":
    r"""OEPerceiveBondOrders(OEMolBase mol)"""
    return _oechem.OEPerceiveBondOrders(mol)
class OENbrs(object):
    r"""Proxy of C++ OEChem::OENbrs 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, b: "OEAtomBase", e: "OEAtomBase", d: "double"):
        r"""__init__(OENbrs self, OEAtomBase b, OEAtomBase e, double d) -> OENbrs"""
        _oechem.OENbrs_swiginit(self, _oechem.new_OENbrs(b, e, d))

    def GetBgn(self) -> "OEChem::OEAtomBase const *":
        r"""GetBgn(OENbrs self) -> OEAtomBase"""
        return _oechem.OENbrs_GetBgn(self)

    def GetEnd(self) -> "OEChem::OEAtomBase const *":
        r"""GetEnd(OENbrs self) -> OEAtomBase"""
        return _oechem.OENbrs_GetEnd(self)

    def GetDist2(self) -> "double":
        r"""GetDist2(OENbrs self) -> double"""
        return _oechem.OENbrs_GetDist2(self)

    def GetDist(self) -> "double":
        r"""GetDist(OENbrs self) -> double"""
        return _oechem.OENbrs_GetDist(self)
    bgn = property(_oechem.OENbrs_bgn_get, _oechem.OENbrs_bgn_set, doc=r"""bgn : p.q(const).OEChem::OEAtomBase""")
    end = property(_oechem.OENbrs_end_get, _oechem.OENbrs_end_set, doc=r"""end : p.q(const).OEChem::OEAtomBase""")
    dist2 = property(_oechem.OENbrs_dist2_get, _oechem.OENbrs_dist2_set, doc=r"""dist2 : double""")
    __swig_destroy__ = _oechem.delete_OENbrs

# Register OENbrs in _oechem:
_oechem.OENbrs_swigregister(OENbrs)
OEAroModelUndefined = cvar.OEAroModelUndefined
OEAroModelDaylight = cvar.OEAroModelDaylight
OEAroModelOpenEye = cvar.OEAroModelOpenEye
OEAroModelTripos = cvar.OEAroModelTripos
OEAroModelMMFF = cvar.OEAroModelMMFF
OEAroModelMDL = cvar.OEAroModelMDL


def OEGetNearestNbrs(*args) -> "OESystem::OEIterBase< OEChem::OENbrs > *":
    r"""
    OEGetNearestNbrs(OEMolBase mol, double maxdist, unsigned int method=) -> OESystem::OEIterBase< OEChem::OENbrs >
    OEGetNearestNbrs(OEMolBase mol, OEAtomBase atom, double maxdist, unsigned int method=) -> OESystem::OEIterBase< OEChem::OENbrs >
    OEGetNearestNbrs(OEMolBase mol, float const * coords, double maxdist, unsigned int method=) -> OESystem::OEIterBase< OEChem::OENbrs >
    OEGetNearestNbrs(OEMolBase mol, double const * coords, double maxdist, unsigned int method=) -> OESystem::OEIterBase< OEChem::OENbrs >
    OEGetNearestNbrs(OEMolBase mol1, OEMolBase mol2, double maxdist, unsigned int method=, bool const sorting=False) -> OESystem::OEIterBase< OEChem::OENbrs >
    """
    return _oechem.OEGetNearestNbrs(*args)
class OENearestNbrs(object):
    r"""Proxy of C++ OEChem::OENearestNbrs 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__(OENearestNbrs self, OEMolBase mol, double maxdist, unsigned int method=) -> OENearestNbrs"""
        _oechem.OENearestNbrs_swiginit(self, _oechem.new_OENearestNbrs(*args))
    __swig_destroy__ = _oechem.delete_OENearestNbrs

    def GetNbrs(self, *args) -> "OESystem::OEIterBase< OEChem::OENbrs > *":
        r"""
        GetNbrs(OENearestNbrs self, OEMolBase mol) -> OESystem::OEIterBase< OEChem::OENbrs >
        GetNbrs(OENearestNbrs self, OEAtomBase atom) -> OESystem::OEIterBase< OEChem::OENbrs >
        GetNbrs(OENearestNbrs self, float const * coords) -> OESystem::OEIterBase< OEChem::OENbrs > *
        """
        return _oechem.OENearestNbrs_GetNbrs(self, *args)

# Register OENearestNbrs in _oechem:
_oechem.OENearestNbrs_swigregister(OENearestNbrs)

class OEMolDBException(object):
    r"""Proxy of C++ OEChem::OEMolDBException 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, msg: "std::string const &"):
        r"""__init__(OEMolDBException self, std::string const & msg) -> OEMolDBException"""
        _oechem.OEMolDBException_swiginit(self, _oechem.new_OEMolDBException(msg))
    __swig_destroy__ = _oechem.delete_OEMolDBException

    def what(self) -> "char const *":
        r"""what(OEMolDBException self) -> char const *"""
        return _oechem.OEMolDBException_what(self)

# Register OEMolDBException in _oechem:
_oechem.OEMolDBException_swigregister(OEMolDBException)

class OEMolDatabaseSaveOptions(object):
    r"""Proxy of C++ OEChem::OEMolDatabaseSaveOptions 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__(OEMolDatabaseSaveOptions self) -> OEMolDatabaseSaveOptions
        __init__(OEMolDatabaseSaveOptions self, unsigned int format, unsigned int flavor, bool writeIdx, std::string const & idxFileName) -> OEMolDatabaseSaveOptions
        """
        _oechem.OEMolDatabaseSaveOptions_swiginit(self, _oechem.new_OEMolDatabaseSaveOptions(*args))

    def GetFormat(self) -> "unsigned int":
        r"""GetFormat(OEMolDatabaseSaveOptions self) -> unsigned int"""
        return _oechem.OEMolDatabaseSaveOptions_GetFormat(self)

    def SetFormat(self, fmt: "unsigned int") -> "void":
        r"""SetFormat(OEMolDatabaseSaveOptions self, unsigned int fmt)"""
        return _oechem.OEMolDatabaseSaveOptions_SetFormat(self, fmt)

    def GetFlavor(self) -> "unsigned int":
        r"""GetFlavor(OEMolDatabaseSaveOptions self) -> unsigned int"""
        return _oechem.OEMolDatabaseSaveOptions_GetFlavor(self)

    def SetFlavor(self, flvr: "unsigned int") -> "void":
        r"""SetFlavor(OEMolDatabaseSaveOptions self, unsigned int flvr)"""
        return _oechem.OEMolDatabaseSaveOptions_SetFlavor(self, flvr)

    def GetWriteIdx(self) -> "bool":
        r"""GetWriteIdx(OEMolDatabaseSaveOptions self) -> bool"""
        return _oechem.OEMolDatabaseSaveOptions_GetWriteIdx(self)

    def SetWriteIdx(self, w: "bool") -> "void":
        r"""SetWriteIdx(OEMolDatabaseSaveOptions self, bool w)"""
        return _oechem.OEMolDatabaseSaveOptions_SetWriteIdx(self, w)

    def GetIdxFileName(self) -> "std::string const &":
        r"""GetIdxFileName(OEMolDatabaseSaveOptions self) -> std::string const &"""
        return _oechem.OEMolDatabaseSaveOptions_GetIdxFileName(self)

    def SetIdxFileName(self, f: "std::string const &") -> "void":
        r"""SetIdxFileName(OEMolDatabaseSaveOptions self, std::string const & f)"""
        return _oechem.OEMolDatabaseSaveOptions_SetIdxFileName(self, f)
    __swig_destroy__ = _oechem.delete_OEMolDatabaseSaveOptions

# Register OEMolDatabaseSaveOptions in _oechem:
_oechem.OEMolDatabaseSaveOptions_swigregister(OEMolDatabaseSaveOptions)

class OEMolDatabase(OEBase):
    r"""Proxy of C++ OEChem::OEMolDatabase class."""

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

    def GetImpl(self, *args) -> "OEChem::OEMolDatabaseImpl &":
        r"""
        GetImpl(OEMolDatabase self) -> OEChem::OEMolDatabaseImpl const
        GetImpl(OEMolDatabase self) -> OEChem::OEMolDatabaseImpl &
        """
        return _oechem.OEMolDatabase_GetImpl(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEMolDatabase self) -> OEMolDatabase
        __init__(OEMolDatabase self, std::string const & filename) -> OEMolDatabase
        __init__(OEMolDatabase self, std::string const & filename, unsigned int format) -> OEMolDatabase
        __init__(OEMolDatabase self, std::string const & filename, unsigned int format, unsigned int flavor) -> OEMolDatabase
        __init__(OEMolDatabase self, oemolistream ifs) -> OEMolDatabase
        __init__(OEMolDatabase self, oeistream istr, unsigned int format) -> OEMolDatabase
        __init__(OEMolDatabase self, oeistream istr, unsigned int format, unsigned int flavor) -> OEMolDatabase
        """
        _oechem.OEMolDatabase_swiginit(self, _oechem.new_OEMolDatabase(*args))
    __swig_destroy__ = _oechem.delete_OEMolDatabase

    def Open(self, *args) -> "bool":
        r"""
        Open(OEMolDatabase self, std::string const & filename) -> bool
        Open(OEMolDatabase self, std::string const & filename, unsigned int format) -> bool
        Open(OEMolDatabase self, std::string const & filename, unsigned int format, unsigned int flavor) -> bool
        Open(OEMolDatabase self, oemolistream ifs) -> bool
        Open(OEMolDatabase self, oeistream istr, unsigned int format) -> bool
        Open(OEMolDatabase self, oeistream istr, unsigned int format, unsigned int flavor) -> bool
        """
        return _oechem.OEMolDatabase_Open(self, *args)

    def Save(self, *args) -> "bool":
        r"""
        Save(OEMolDatabase self, std::string const & filename, OEMolDatabaseSaveOptions opts=OEChem::OEMolDatabaseSaveOptions()) -> bool
        Save(OEMolDatabase self, std::string const & filename, unsigned int format) -> bool
        Save(OEMolDatabase self, std::string const & filename, unsigned int format, unsigned int flavor) -> bool
        Save(OEMolDatabase self, oemolostream ofs, OEMolDatabaseSaveOptions opts=OEChem::OEMolDatabaseSaveOptions()) -> bool
        Save(OEMolDatabase self, oeostream ostr, unsigned int format) -> bool
        Save(OEMolDatabase self, oeostream ostr, unsigned int format, unsigned int flavor) -> bool
        """
        return _oechem.OEMolDatabase_Save(self, *args)

    def GetFormat(self) -> "unsigned int":
        r"""GetFormat(OEMolDatabase self) -> unsigned int"""
        return _oechem.OEMolDatabase_GetFormat(self)

    def GetFlavor(self) -> "unsigned int":
        r"""GetFlavor(OEMolDatabase self) -> unsigned int"""
        return _oechem.OEMolDatabase_GetFlavor(self)

    def GetMolecule(self, *args) -> "bool":
        r"""
        GetMolecule(OEMolDatabase self, OEMolBase mol, unsigned int idx) -> bool
        GetMolecule(OEMolDatabase self, OEMCMolBase mol, unsigned int idx) -> bool
        GetMolecule(OEMolDatabase self, oemolostream ofs, unsigned int idx) -> bool
        """
        return _oechem.OEMolDatabase_GetMolecule(self, *args)

    def WriteMolecule(self, ofs: "oemolostream", idx: "unsigned int") -> "bool":
        r"""WriteMolecule(OEMolDatabase self, oemolostream ofs, unsigned int idx) -> bool"""
        return _oechem.OEMolDatabase_WriteMolecule(self, ofs, idx)

    def GetMoleculeOffset(self, idx: "unsigned int") -> "oefpos_t":
        r"""GetMoleculeOffset(OEMolDatabase self, unsigned int idx) -> oefpos_t"""
        return _oechem.OEMolDatabase_GetMoleculeOffset(self, idx)

    def GetMoleculeSize(self, idx: "unsigned int") -> "oefpos_t":
        r"""GetMoleculeSize(OEMolDatabase self, unsigned int idx) -> oefpos_t"""
        return _oechem.OEMolDatabase_GetMoleculeSize(self, idx)

    def GetTitle(self, idx: "unsigned int") -> "std::string":
        r"""GetTitle(OEMolDatabase self, unsigned int idx) -> std::string"""
        return _oechem.OEMolDatabase_GetTitle(self, idx)

    def GetTitles(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetTitles(OEMolDatabase self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEMolDatabase_GetTitles(self)

    def Order(self, indices: "OEUIntVector") -> "bool":
        r"""Order(OEMolDatabase self, OEUIntVector indices) -> bool"""
        return _oechem.OEMolDatabase_Order(self, indices)

    def Delete(self, *args) -> "bool":
        r"""
        Delete(OEMolDatabase self, unsigned int idx) -> bool
        Delete(OEMolDatabase self, OEUnaryMolBasePred pred) -> bool
        Delete(OEMolDatabase self, OESystem::OEUnaryPredicate< OEChem::OEMCMolBase > const & pred) -> bool
        Delete(OEMolDatabase self, OEUIntVector indices) -> bool
        """
        return _oechem.OEMolDatabase_Delete(self, *args)

    def IsDeleted(self, idx: "unsigned int") -> "bool":
        r"""IsDeleted(OEMolDatabase self, unsigned int idx) -> bool"""
        return _oechem.OEMolDatabase_IsDeleted(self, idx)
    InvalidIdx = _oechem.OEMolDatabase_InvalidIdx
    

    def GetMaxMolIdx(self) -> "unsigned int":
        r"""GetMaxMolIdx(OEMolDatabase self) -> unsigned int"""
        return _oechem.OEMolDatabase_GetMaxMolIdx(self)

    def NumMols(self) -> "unsigned int":
        r"""NumMols(OEMolDatabase self) -> unsigned int"""
        return _oechem.OEMolDatabase_NumMols(self)

    def GetIdxs(self, *args) -> "bool":
        r"""
        GetIdxs(OEMolDatabase self) -> OESystem::OEIterBase< unsigned int >
        GetIdxs(OEMolDatabase self, OEUIntVector indices) -> bool
        """
        return _oechem.OEMolDatabase_GetIdxs(self, *args)

    def GetIdx(self, row: "unsigned int") -> "unsigned int":
        r"""GetIdx(OEMolDatabase self, unsigned int row) -> unsigned int"""
        return _oechem.OEMolDatabase_GetIdx(self, row)

    def GetRow(self, idx: "unsigned int") -> "unsigned int":
        r"""GetRow(OEMolDatabase self, unsigned int idx) -> unsigned int"""
        return _oechem.OEMolDatabase_GetRow(self, idx)

    def Clear(self) -> "void":
        r"""Clear(OEMolDatabase self)"""
        return _oechem.OEMolDatabase_Clear(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEMolDatabase self) -> void const *"""
        return _oechem.OEMolDatabase_GetDataType(self)

    def IsDataType(self, arg2: "void const *") -> "bool":
        r"""IsDataType(OEMolDatabase self, void const * arg2) -> bool"""
        return _oechem.OEMolDatabase_IsDataType(self, arg2)

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEMolDatabase self) -> OEBase"""
        return _oechem.OEMolDatabase_CreateCopy(self)

    def GetMoleculeString(self, idx: "unsigned int") -> "PyObject *":
        r"""GetMoleculeString(OEMolDatabase self, unsigned int idx) -> PyObject *"""
        return _oechem.OEMolDatabase_GetMoleculeString(self, idx)

    def GetOEGraphMols(self):
        for idx in self.GetIdxs():
            mol = OEGraphMol()
            if self.GetMolecule(mol, idx):
                yield mol



    def GetOEMols(self):
        for idx in self.GetIdxs():
            mol = OEMol()
            if self.GetMolecule(mol, idx):
                yield mol



# Register OEMolDatabase in _oechem:
_oechem.OEMolDatabase_swigregister(OEMolDatabase)


def OEHasMolDBIdx(mol: "OEBase") -> "bool":
    r"""OEHasMolDBIdx(OEBase mol) -> bool"""
    return _oechem.OEHasMolDBIdx(mol)

def OEGetMolDBIdx(mol: "OEBase") -> "unsigned int":
    r"""OEGetMolDBIdx(OEBase mol) -> unsigned int"""
    return _oechem.OEGetMolDBIdx(mol)

def OECreateMolDatabaseIdx(*args) -> "bool":
    r"""
    OECreateMolDatabaseIdx(std::string const & databaseFileName) -> bool
    OECreateMolDatabaseIdx(std::string const & databaseFileName, std::string const & indexFileName) -> bool
    """
    return _oechem.OECreateMolDatabaseIdx(*args)

def OEGetMolDatabaseIdxFileName(databaseFileName: "std::string const &") -> "std::string":
    r"""OEGetMolDatabaseIdxFileName(std::string const & databaseFileName) -> std::string"""
    return _oechem.OEGetMolDatabaseIdxFileName(databaseFileName)
class OEConfTestBase(object):
    r"""Proxy of C++ OEChem::OEConfTestBase 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

    def CompareMols(self, m1: "OEMolBase", m2: "OEMolBase") -> "bool":
        r"""CompareMols(OEConfTestBase self, OEMolBase m1, OEMolBase m2) -> bool"""
        return _oechem.OEConfTestBase_CompareMols(self, m1, m2)

    def HasCompareMols(self) -> "bool":
        r"""HasCompareMols(OEConfTestBase self) -> bool"""
        return _oechem.OEConfTestBase_HasCompareMols(self)

    def CombineMols(self, m1: "OEMCMolBase", m2: "OEMolBase") -> "bool":
        r"""CombineMols(OEConfTestBase self, OEMCMolBase m1, OEMolBase m2) -> bool"""
        return _oechem.OEConfTestBase_CombineMols(self, m1, m2)

    def CreateCopy(self) -> "OEChem::OEConfTestBase *":
        r"""CreateCopy(OEConfTestBase self) -> OEConfTestBase"""
        return _oechem.OEConfTestBase_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEConfTestBase

# Register OEConfTestBase in _oechem:
_oechem.OEConfTestBase_swigregister(OEConfTestBase)

class OEDefaultConfTest(OEConfTestBase):
    r"""Proxy of C++ OEChem::OEDefaultConfTest class."""

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

    def CompareMols(self, m1: "OEMolBase", m2: "OEMolBase") -> "bool":
        r"""CompareMols(OEDefaultConfTest self, OEMolBase m1, OEMolBase m2) -> bool"""
        return _oechem.OEDefaultConfTest_CompareMols(self, m1, m2)

    def HasCompareMols(self) -> "bool":
        r"""HasCompareMols(OEDefaultConfTest self) -> bool"""
        return _oechem.OEDefaultConfTest_HasCompareMols(self)

    def CombineMols(self, m1: "OEMCMolBase", m2: "OEMolBase") -> "bool":
        r"""CombineMols(OEDefaultConfTest self, OEMCMolBase m1, OEMolBase m2) -> bool"""
        return _oechem.OEDefaultConfTest_CombineMols(self, m1, m2)

    def CreateCopy(self) -> "OEChem::OEConfTestBase *":
        r"""CreateCopy(OEDefaultConfTest self) -> OEConfTestBase"""
        return _oechem.OEDefaultConfTest_CreateCopy(self)

    def __init__(self):
        r"""__init__(OEDefaultConfTest self) -> OEDefaultConfTest"""
        _oechem.OEDefaultConfTest_swiginit(self, _oechem.new_OEDefaultConfTest())
    __swig_destroy__ = _oechem.delete_OEDefaultConfTest

# Register OEDefaultConfTest in _oechem:
_oechem.OEDefaultConfTest_swigregister(OEDefaultConfTest)

class OEAbsCanonicalConfTest(OEConfTestBase):
    r"""Proxy of C++ OEChem::OEAbsCanonicalConfTest class."""

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

    def CompareMols(self, m1: "OEMolBase", m2: "OEMolBase") -> "bool":
        r"""CompareMols(OEAbsCanonicalConfTest self, OEMolBase m1, OEMolBase m2) -> bool"""
        return _oechem.OEAbsCanonicalConfTest_CompareMols(self, m1, m2)

    def CombineMols(self, m1: "OEMCMolBase", m2: "OEMolBase") -> "bool":
        r"""CombineMols(OEAbsCanonicalConfTest self, OEMCMolBase m1, OEMolBase m2) -> bool"""
        return _oechem.OEAbsCanonicalConfTest_CombineMols(self, m1, m2)

    def CreateCopy(self) -> "OEChem::OEConfTestBase *":
        r"""CreateCopy(OEAbsCanonicalConfTest self) -> OEConfTestBase"""
        return _oechem.OEAbsCanonicalConfTest_CreateCopy(self)

    def __init__(self):
        r"""__init__(OEAbsCanonicalConfTest self) -> OEAbsCanonicalConfTest"""
        _oechem.OEAbsCanonicalConfTest_swiginit(self, _oechem.new_OEAbsCanonicalConfTest())
    __swig_destroy__ = _oechem.delete_OEAbsCanonicalConfTest

# Register OEAbsCanonicalConfTest in _oechem:
_oechem.OEAbsCanonicalConfTest_swigregister(OEAbsCanonicalConfTest)

class OEIsomericConfTest(OEConfTestBase):
    r"""Proxy of C++ OEChem::OEIsomericConfTest 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, compTitles: "bool"=True):
        r"""__init__(OEIsomericConfTest self, bool compTitles=True) -> OEIsomericConfTest"""
        _oechem.OEIsomericConfTest_swiginit(self, _oechem.new_OEIsomericConfTest(compTitles))

    def CompareMols(self, m1: "OEMolBase", m2: "OEMolBase") -> "bool":
        r"""CompareMols(OEIsomericConfTest self, OEMolBase m1, OEMolBase m2) -> bool"""
        return _oechem.OEIsomericConfTest_CompareMols(self, m1, m2)

    def CombineMols(self, m1: "OEMCMolBase", m2: "OEMolBase") -> "bool":
        r"""CombineMols(OEIsomericConfTest self, OEMCMolBase m1, OEMolBase m2) -> bool"""
        return _oechem.OEIsomericConfTest_CombineMols(self, m1, m2)

    def CreateCopy(self) -> "OEChem::OEConfTestBase *":
        r"""CreateCopy(OEIsomericConfTest self) -> OEConfTestBase"""
        return _oechem.OEIsomericConfTest_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEIsomericConfTest

# Register OEIsomericConfTest in _oechem:
_oechem.OEIsomericConfTest_swigregister(OEIsomericConfTest)

class OEOmegaConfTest(OEConfTestBase):
    r"""Proxy of C++ OEChem::OEOmegaConfTest 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, compTitles: "bool"=True):
        r"""__init__(OEOmegaConfTest self, bool compTitles=True) -> OEOmegaConfTest"""
        _oechem.OEOmegaConfTest_swiginit(self, _oechem.new_OEOmegaConfTest(compTitles))

    def CompareMols(self, m1: "OEMolBase", m2: "OEMolBase") -> "bool":
        r"""CompareMols(OEOmegaConfTest self, OEMolBase m1, OEMolBase m2) -> bool"""
        return _oechem.OEOmegaConfTest_CompareMols(self, m1, m2)

    def CombineMols(self, m1: "OEMCMolBase", m2: "OEMolBase") -> "bool":
        r"""CombineMols(OEOmegaConfTest self, OEMCMolBase m1, OEMolBase m2) -> bool"""
        return _oechem.OEOmegaConfTest_CombineMols(self, m1, m2)

    def CreateCopy(self) -> "OEChem::OEConfTestBase *":
        r"""CreateCopy(OEOmegaConfTest self) -> OEConfTestBase"""
        return _oechem.OEOmegaConfTest_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEOmegaConfTest

# Register OEOmegaConfTest in _oechem:
_oechem.OEOmegaConfTest_swigregister(OEOmegaConfTest)

class OEAbsoluteConfTest(OEConfTestBase):
    r"""Proxy of C++ OEChem::OEAbsoluteConfTest 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, compTitles: "bool"=True):
        r"""__init__(OEAbsoluteConfTest self, bool compTitles=True) -> OEAbsoluteConfTest"""
        _oechem.OEAbsoluteConfTest_swiginit(self, _oechem.new_OEAbsoluteConfTest(compTitles))

    def CompareMols(self, m1: "OEMolBase", m2: "OEMolBase") -> "bool":
        r"""CompareMols(OEAbsoluteConfTest self, OEMolBase m1, OEMolBase m2) -> bool"""
        return _oechem.OEAbsoluteConfTest_CompareMols(self, m1, m2)

    def CombineMols(self, m1: "OEMCMolBase", m2: "OEMolBase") -> "bool":
        r"""CombineMols(OEAbsoluteConfTest self, OEMCMolBase m1, OEMolBase m2) -> bool"""
        return _oechem.OEAbsoluteConfTest_CombineMols(self, m1, m2)

    def CreateCopy(self) -> "OEChem::OEConfTestBase *":
        r"""CreateCopy(OEAbsoluteConfTest self) -> OEConfTestBase"""
        return _oechem.OEAbsoluteConfTest_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEAbsoluteConfTest

# Register OEAbsoluteConfTest in _oechem:
_oechem.OEAbsoluteConfTest_swigregister(OEAbsoluteConfTest)


def OESortConfsBySDTag(mol: "OEMCMolBase", sdtag: "std::string const &", biggerIsBetter: "bool") -> "bool":
    r"""OESortConfsBySDTag(OEMCMolBase mol, std::string const & sdtag, bool biggerIsBetter) -> bool"""
    return _oechem.OESortConfsBySDTag(mol, sdtag, biggerIsBetter)

def OESortConfsByTag(mol: "OEMCMolBase", tag: "std::string const &", biggerIsBetter: "bool") -> "bool":
    r"""OESortConfsByTag(OEMCMolBase mol, std::string const & tag, bool biggerIsBetter) -> bool"""
    return _oechem.OESortConfsByTag(mol, tag, biggerIsBetter)

def OETrimConformers(mol: "OEMCMolBase", N: "unsigned int") -> "bool":
    r"""OETrimConformers(OEMCMolBase mol, unsigned int N) -> bool"""
    return _oechem.OETrimConformers(mol, N)

def OEGetAtomicSymbol(elemno: "unsigned int") -> "char const *":
    r"""OEGetAtomicSymbol(unsigned int elemno) -> char const *"""
    return _oechem.OEGetAtomicSymbol(elemno)

def OEGetAtomicNum(sym: "char const *") -> "unsigned int":
    r"""OEGetAtomicNum(char const * sym) -> unsigned int"""
    return _oechem.OEGetAtomicNum(sym)

def OEGetDefaultMass(elemno: "unsigned int") -> "unsigned int":
    r"""OEGetDefaultMass(unsigned int elemno) -> unsigned int"""
    return _oechem.OEGetDefaultMass(elemno)

def OEGetCovalentRadius(elemno: "unsigned int") -> "double":
    r"""OEGetCovalentRadius(unsigned int elemno) -> double"""
    return _oechem.OEGetCovalentRadius(elemno)

def OEGetDelphiRadius(elemno: "unsigned int") -> "double":
    r"""OEGetDelphiRadius(unsigned int elemno) -> double"""
    return _oechem.OEGetDelphiRadius(elemno)

def OEGetBondiVdWRadius(elemno: "unsigned int") -> "double":
    r"""OEGetBondiVdWRadius(unsigned int elemno) -> double"""
    return _oechem.OEGetBondiVdWRadius(elemno)

def OEGetPaulingVdWRadius(elemno: "unsigned int") -> "double":
    r"""OEGetPaulingVdWRadius(unsigned int elemno) -> double"""
    return _oechem.OEGetPaulingVdWRadius(elemno)

def OEGetHonigIonicCavityRadius(elemno: "unsigned int") -> "double":
    r"""OEGetHonigIonicCavityRadius(unsigned int elemno) -> double"""
    return _oechem.OEGetHonigIonicCavityRadius(elemno)

def OEAssignCovalentRadii(mol: "OEMolBase") -> "void":
    r"""OEAssignCovalentRadii(OEMolBase mol)"""
    return _oechem.OEAssignCovalentRadii(mol)

def OEAssignDelphiRadii(mol: "OEMolBase") -> "void":
    r"""OEAssignDelphiRadii(OEMolBase mol)"""
    return _oechem.OEAssignDelphiRadii(mol)

def OEAssignBondiVdWRadii(mol: "OEMolBase") -> "void":
    r"""OEAssignBondiVdWRadii(OEMolBase mol)"""
    return _oechem.OEAssignBondiVdWRadii(mol)

def OEAssignPaulingVdWRadii(mol: "OEMolBase") -> "void":
    r"""OEAssignPaulingVdWRadii(OEMolBase mol)"""
    return _oechem.OEAssignPaulingVdWRadii(mol)

def OEAssignHonigIonicCavityRadii(mol: "OEMolBase") -> "void":
    r"""OEAssignHonigIonicCavityRadii(OEMolBase mol)"""
    return _oechem.OEAssignHonigIonicCavityRadii(mol)

def OEAssignZap9Radii(*args) -> "void":
    r"""OEAssignZap9Radii(OEMolBase mol, unsigned int version=)"""
    return _oechem.OEAssignZap9Radii(*args)

def OEAssignZap7Radii(*args) -> "void":
    r"""OEAssignZap7Radii(OEMolBase mol, unsigned int version=)"""
    return _oechem.OEAssignZap7Radii(*args)

def OEGetAverageWeight(elemno: "unsigned int") -> "double":
    r"""OEGetAverageWeight(unsigned int elemno) -> double"""
    return _oechem.OEGetAverageWeight(elemno)

def OEGetIsotopicWeight(elemno: "unsigned int", mass: "unsigned int") -> "double":
    r"""OEGetIsotopicWeight(unsigned int elemno, unsigned int mass) -> double"""
    return _oechem.OEGetIsotopicWeight(elemno, mass)

def OEIsCommonIsotope(elemno: "unsigned int", mass: "unsigned int") -> "bool":
    r"""OEIsCommonIsotope(unsigned int elemno, unsigned int mass) -> bool"""
    return _oechem.OEIsCommonIsotope(elemno, mass)

def OEGetRadiiTypeName(radiiType: "unsigned int") -> "char const *":
    r"""OEGetRadiiTypeName(unsigned int radiiType) -> char const *"""
    return _oechem.OEGetRadiiTypeName(radiiType)

def OEAssignRadii(*args) -> "bool":
    r"""OEAssignRadii(OEMolBase mol, unsigned int molRadiiType=, unsigned int ionRadiiType=) -> bool"""
    return _oechem.OEAssignRadii(*args)
class OEDefaultErrorLevel(object):
    r"""Proxy of C++ OESystem::OEDefaultErrorLevel 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__(OEDefaultErrorLevel self) -> OEDefaultErrorLevel"""
        _oechem.OEDefaultErrorLevel_swiginit(self, _oechem.new_OEDefaultErrorLevel())

    def SetLevel(self, level: "unsigned int") -> "void":
        r"""SetLevel(OEDefaultErrorLevel self, unsigned int level)"""
        return _oechem.OEDefaultErrorLevel_SetLevel(self, level)

    def GetLevel(self) -> "unsigned int":
        r"""GetLevel(OEDefaultErrorLevel self) -> unsigned int"""
        return _oechem.OEDefaultErrorLevel_GetLevel(self)
    __swig_destroy__ = _oechem.delete_OEDefaultErrorLevel

# Register OEDefaultErrorLevel in _oechem:
_oechem.OEDefaultErrorLevel_swigregister(OEDefaultErrorLevel)


def OEErrorLevelToString(level: "unsigned int") -> "std::string":
    r"""OEErrorLevelToString(unsigned int level) -> std::string"""
    return _oechem.OEErrorLevelToString(level)
class OEErrorHandlerImplBase(object):
    r"""Proxy of C++ OESystem::OEErrorHandlerImplBase 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__(OEErrorHandlerImplBase self) -> OEErrorHandlerImplBase
        __init__(OEErrorHandlerImplBase self, OEErrorHandlerImplBase arg2) -> OEErrorHandlerImplBase
        """
        if self.__class__ == OEErrorHandlerImplBase:
            _self = None
        else:
            _self = self
        _oechem.OEErrorHandlerImplBase_swiginit(self, _oechem.new_OEErrorHandlerImplBase(_self, *args))
    __swig_destroy__ = _oechem.delete_OEErrorHandlerImplBase

    def GetStrict(self) -> "bool":
        r"""GetStrict(OEErrorHandlerImplBase self) -> bool"""
        return _oechem.OEErrorHandlerImplBase_GetStrict(self)

    def GetLevel(self) -> "unsigned int":
        r"""GetLevel(OEErrorHandlerImplBase self) -> unsigned int"""
        return _oechem.OEErrorHandlerImplBase_GetLevel(self)

    def Count(self, level: "unsigned int"=0) -> "unsigned int":
        r"""Count(OEErrorHandlerImplBase self, unsigned int level=0) -> unsigned int"""
        return _oechem.OEErrorHandlerImplBase_Count(self, level)

    def SetStrict(self, strict: "bool") -> "void":
        r"""SetStrict(OEErrorHandlerImplBase self, bool strict)"""
        return _oechem.OEErrorHandlerImplBase_SetStrict(self, strict)

    def SetLevel(self, level: "unsigned int") -> "void":
        r"""SetLevel(OEErrorHandlerImplBase self, unsigned int level)"""
        return _oechem.OEErrorHandlerImplBase_SetLevel(self, level)

    def IncrementCount(self, level: "unsigned int") -> "void":
        r"""IncrementCount(OEErrorHandlerImplBase self, unsigned int level)"""
        return _oechem.OEErrorHandlerImplBase_IncrementCount(self, level)

    def Clear(self) -> "void":
        r"""Clear(OEErrorHandlerImplBase self)"""
        return _oechem.OEErrorHandlerImplBase_Clear(self)

    def Msg(self, level: "unsigned int", arg0: "std::string const &") -> "void":
        r"""Msg(OEErrorHandlerImplBase self, unsigned int level, std::string const & arg0)"""
        return _oechem.OEErrorHandlerImplBase_Msg(self, level, arg0)

    def CreateCopy(self) -> "OESystem::OEErrorHandlerImplBase *":
        r"""CreateCopy(OEErrorHandlerImplBase self) -> OEErrorHandlerImplBase"""
        return _oechem.OEErrorHandlerImplBase_CreateCopy(self)
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEErrorHandlerImplBase(self)
        return weakref.proxy(self)

# Register OEErrorHandlerImplBase in _oechem:
_oechem.OEErrorHandlerImplBase_swigregister(OEErrorHandlerImplBase)

class OEErrorHandler(object):
    r"""Proxy of C++ OESystem::OEErrorHandler class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEErrorHandler self) -> OEErrorHandler
        __init__(OEErrorHandler self, OEErrorHandler rhs) -> OEErrorHandler
        """
        _oechem.OEErrorHandler_swiginit(self, _oechem.new_OEErrorHandler(*args))

    def SetHandlerImpl(self, ptr: "OEErrorHandlerImplBase", owned: "bool") -> "void":
        r"""SetHandlerImpl(OEErrorHandler self, OEErrorHandlerImplBase ptr, bool owned)"""
        return _oechem.OEErrorHandler_SetHandlerImpl(self, ptr, owned)

    def GetHandlerImpl(self) -> "OESystem::OEErrorHandlerImplBase *":
        r"""GetHandlerImpl(OEErrorHandler self) -> OEErrorHandlerImplBase"""
        return _oechem.OEErrorHandler_GetHandlerImpl(self)

    def SetOutputStream(self, ofs: "oeostream") -> "void":
        r"""SetOutputStream(OEErrorHandler self, oeostream ofs)"""
        return _oechem.OEErrorHandler_SetOutputStream(self, ofs)

    def SetStrict(self, strict: "bool") -> "void":
        r"""SetStrict(OEErrorHandler self, bool strict)"""
        return _oechem.OEErrorHandler_SetStrict(self, strict)

    def GetStrict(self) -> "bool":
        r"""GetStrict(OEErrorHandler self) -> bool"""
        return _oechem.OEErrorHandler_GetStrict(self)

    def SetLevel(self, errLevel: "unsigned int") -> "void":
        r"""SetLevel(OEErrorHandler self, unsigned int errLevel)"""
        return _oechem.OEErrorHandler_SetLevel(self, errLevel)

    def GetLevel(self) -> "unsigned int":
        r"""GetLevel(OEErrorHandler self) -> unsigned int"""
        return _oechem.OEErrorHandler_GetLevel(self)

    def Clear(self) -> "void":
        r"""Clear(OEErrorHandler self)"""
        return _oechem.OEErrorHandler_Clear(self)

    def Count(self, level: "unsigned int"=0) -> "unsigned int":
        r"""Count(OEErrorHandler self, unsigned int level=0) -> unsigned int"""
        return _oechem.OEErrorHandler_Count(self, level)

    def Info(self, arg2: "std::string const &") -> "void":
        r"""Info(OEErrorHandler self, std::string const & arg2)"""
        return _oechem.OEErrorHandler_Info(self, arg2)

    def Warning(self, arg2: "std::string const &") -> "void":
        r"""Warning(OEErrorHandler self, std::string const & arg2)"""
        return _oechem.OEErrorHandler_Warning(self, arg2)

    def Error(self, arg2: "std::string const &") -> "void":
        r"""Error(OEErrorHandler self, std::string const & arg2)"""
        return _oechem.OEErrorHandler_Error(self, arg2)

    def Fatal(self, arg2: "std::string const &") -> "void":
        r"""Fatal(OEErrorHandler self, std::string const & arg2)"""
        return _oechem.OEErrorHandler_Fatal(self, arg2)

    def Usage(self, arg2: "std::string const &") -> "void":
        r"""Usage(OEErrorHandler self, std::string const & arg2)"""
        return _oechem.OEErrorHandler_Usage(self, arg2)

    def Debug(self, arg2: "std::string const &") -> "void":
        r"""Debug(OEErrorHandler self, std::string const & arg2)"""
        return _oechem.OEErrorHandler_Debug(self, arg2)

    def Verbose(self, arg2: "std::string const &") -> "void":
        r"""Verbose(OEErrorHandler self, std::string const & arg2)"""
        return _oechem.OEErrorHandler_Verbose(self, arg2)

    def Msg(self, level: "unsigned int", arg3: "std::string const &") -> "void":
        r"""Msg(OEErrorHandler self, unsigned int level, std::string const & arg3)"""
        return _oechem.OEErrorHandler_Msg(self, level, arg3)

# Register OEErrorHandler in _oechem:
_oechem.OEErrorHandler_swigregister(OEErrorHandler)

class OEScopedErrorLevelOverride(object):
    r"""Proxy of C++ OESystem::OEScopedErrorLevelOverride 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__(OEScopedErrorLevelOverride self, unsigned int level, OEErrorHandler hdlr=OEThrow) -> OEScopedErrorLevelOverride"""
        _oechem.OEScopedErrorLevelOverride_swiginit(self, _oechem.new_OEScopedErrorLevelOverride(*args))
    __swig_destroy__ = _oechem.delete_OEScopedErrorLevelOverride

# Register OEScopedErrorLevelOverride in _oechem:
_oechem.OEScopedErrorLevelOverride_swigregister(OEScopedErrorLevelOverride)


def OEHistogramFormula(str: "std::string &", hist: "unsigned int const *", charge: "int") -> "void":
    r"""OEHistogramFormula(std::string & str, unsigned int const * hist, int charge)"""
    return _oechem.OEHistogramFormula(str, hist, charge)

def OECalculateMolecularWeight(mol: "OEMolBase", isotopic: "bool"=False) -> "double":
    r"""OECalculateMolecularWeight(OEMolBase mol, bool isotopic=False) -> double"""
    return _oechem.OECalculateMolecularWeight(mol, isotopic)
class OECSVHeader(object):
    r"""Proxy of C++ OEChem::OECSVHeader 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__(OECSVHeader self) -> OECSVHeader
        __init__(OECSVHeader self, OECSVHeader rhs) -> OECSVHeader
        __init__(OECSVHeader self, OEStringVector columnNames) -> OECSVHeader
        """
        _oechem.OECSVHeader_swiginit(self, _oechem.new_OECSVHeader(*args))

    def IsValid(self):
      return _oechem.OECSVHeader___nonzero__(self)



    def IsValid(self) -> "bool":
        r"""IsValid(OECSVHeader self) -> bool"""
        return _oechem.OECSVHeader_IsValid(self)

    def Clear(self) -> "void":
        r"""Clear(OECSVHeader self)"""
        return _oechem.OECSVHeader_Clear(self)

    def GetNumColumns(self) -> "unsigned int":
        r"""GetNumColumns(OECSVHeader self) -> unsigned int"""
        return _oechem.OECSVHeader_GetNumColumns(self)

    def GetColumnNames(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetColumnNames(OECSVHeader self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OECSVHeader_GetColumnNames(self)

    def GetColumnName(self, fieldIdx: "unsigned int") -> "std::string const &":
        r"""GetColumnName(OECSVHeader self, unsigned int fieldIdx) -> std::string const &"""
        return _oechem.OECSVHeader_GetColumnName(self, fieldIdx)
    __swig_destroy__ = _oechem.delete_OECSVHeader

# Register OECSVHeader in _oechem:
_oechem.OECSVHeader_swigregister(OECSVHeader)


def OECreateCSVHeader(*args) -> "void":
    r"""
    OECreateCSVHeader(OECSVHeader header, OEMolBase mol)
    OECreateCSVHeader(OECSVHeader header, OEMCMolBase mol)
    """
    return _oechem.OECreateCSVHeader(*args)

def OEGetSubtree(*args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
    r"""
    OEGetSubtree(OEBondBase arg1, OEUnaryAtomPred excludeAtoms, unsigned int maxDepth=0) -> OESystem::OEIterBase< OEChem::OEAtomBase >
    OEGetSubtree(OEAtomBase bgn, OEAtomBase end, unsigned int maxDepth=0) -> OESystem::OEIterBase< OEChem::OEAtomBase >
    """
    return _oechem.OEGetSubtree(*args)

def OEGetSmallestSubtree(*args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
    r"""
    OEGetSmallestSubtree(OEBondBase bond, OEUnaryAtomPred excludeAtoms, unsigned int maxDepth=0) -> OESystem::OEIterBase< OEChem::OEAtomBase >
    OEGetSmallestSubtree(OEBondBase arg1, unsigned int maxDepth=0) -> OESystem::OEIterBase< OEChem::OEAtomBase >
    """
    return _oechem.OEGetSmallestSubtree(*args)

def OEGetAutomorphs(arg1: "OEMolBase", includeH: "bool"=False) -> "OESystem::OEIterBase< OEChem::OEMatchBase > *":
    r"""OEGetAutomorphs(OEMolBase arg1, bool includeH=False) -> OESystem::OEIterBase< OEChem::OEMatchBase >"""
    return _oechem.OEGetAutomorphs(arg1, includeH)

def OEGetPathLength(arg1: "OEAtomBase", arg2: "OEAtomBase", maxPath: "unsigned int"=0) -> "unsigned int":
    r"""OEGetPathLength(OEAtomBase arg1, OEAtomBase arg2, unsigned int maxPath=0) -> unsigned int"""
    return _oechem.OEGetPathLength(arg1, arg2, maxPath)

def OEScrambleMolecule(arg1: "OEMolBase") -> "bool":
    r"""OEScrambleMolecule(OEMolBase arg1) -> bool"""
    return _oechem.OEScrambleMolecule(arg1)

def OEDeleteEverythingExceptTheFirstLargestComponent(arg1: "OEMolBase") -> "bool":
    r"""OEDeleteEverythingExceptTheFirstLargestComponent(OEMolBase arg1) -> bool"""
    return _oechem.OEDeleteEverythingExceptTheFirstLargestComponent(arg1)

def OETheFunctionFormerlyKnownAsStripSalts(mol: "OEMolBase") -> "bool":
    r"""OETheFunctionFormerlyKnownAsStripSalts(OEMolBase mol) -> bool"""
    return _oechem.OETheFunctionFormerlyKnownAsStripSalts(mol)

def OEAcyclicPath(arg1: "OEAtomBase", arg2: "OEAtomBase") -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
    r"""OEAcyclicPath(OEAtomBase arg1, OEAtomBase arg2) -> OESystem::OEIterBase< OEChem::OEAtomBase > *"""
    return _oechem.OEAcyclicPath(arg1, arg2)

def OEShortestPath(*args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
    r"""
    OEShortestPath(OEAtomBase a, OEAtomBase b) -> OESystem::OEIterBase< OEChem::OEAtomBase >
    OEShortestPath(OEAtomBase a, OEAtomBase b, OEUnaryAtomPred excludeAtoms) -> OESystem::OEIterBase< OEChem::OEAtomBase >
    OEShortestPath(OEAtomBase a, OEAtomBase b, OEUnaryBondPred excludeBonds) -> OESystem::OEIterBase< OEChem::OEAtomBase > *
    """
    return _oechem.OEShortestPath(*args)

def OEMolToSmiles(mol: "OEMolBase") -> "std::string":
    r"""OEMolToSmiles(OEMolBase mol) -> std::string"""
    return _oechem.OEMolToSmiles(mol)

def OESmilesToMol(mol: "OEMolBase", str: "std::string const &") -> "bool":
    r"""OESmilesToMol(OEMolBase mol, std::string const & str) -> bool"""
    return _oechem.OESmilesToMol(mol, str)

def OEMolToInChI(mol: "OEMolBase") -> "std::string":
    r"""OEMolToInChI(OEMolBase mol) -> std::string"""
    return _oechem.OEMolToInChI(mol)

def OEMolToInChIKey(mol: "OEMolBase") -> "std::string":
    r"""OEMolToInChIKey(OEMolBase mol) -> std::string"""
    return _oechem.OEMolToInChIKey(mol)

def OEMolToSTDInChI(mol: "OEMolBase") -> "std::string":
    r"""OEMolToSTDInChI(OEMolBase mol) -> std::string"""
    return _oechem.OEMolToSTDInChI(mol)

def OEMolToSTDInChIKey(mol: "OEMolBase") -> "std::string":
    r"""OEMolToSTDInChIKey(OEMolBase mol) -> std::string"""
    return _oechem.OEMolToSTDInChIKey(mol)

def OEInChIToMol(mol: "OEMolBase", str: "std::string const &") -> "bool":
    r"""OEInChIToMol(OEMolBase mol, std::string const & str) -> bool"""
    return _oechem.OEInChIToMol(mol, str)

def OEReadRxnFile(*args) -> "bool":
    r"""OEReadRxnFile(oemolistream ifs, OEMolBase mol, char const * id="", bool query=False) -> bool"""
    return _oechem.OEReadRxnFile(*args)

def OEReadMol2File(ifs: "oemolistream", mol: "OEMolBase", m2h: "bool"=False) -> "bool":
    r"""OEReadMol2File(oemolistream ifs, OEMolBase mol, bool m2h=False) -> bool"""
    return _oechem.OEReadMol2File(ifs, mol, m2h)

def OEWriteMol2File(ofs: "oemolostream", mol: "OEMolBase", m2h: "bool"=True, substruct: "bool"=False) -> "void":
    r"""OEWriteMol2File(oemolostream ofs, OEMolBase mol, bool m2h=True, bool substruct=False)"""
    return _oechem.OEWriteMol2File(ofs, mol, m2h, substruct)

def OEReadXYZFile(ifs: "oemolistream", mol: "OEMolBase") -> "bool":
    r"""OEReadXYZFile(oemolistream ifs, OEMolBase mol) -> bool"""
    return _oechem.OEReadXYZFile(ifs, mol)

def OEWriteXYZFile(ofs: "oemolostream", mol: "OEMolBase", charges: "bool"=True, symbols: "bool"=True, doubleprecision: "bool"=False) -> "void":
    r"""OEWriteXYZFile(oemolostream ofs, OEMolBase mol, bool charges=True, bool symbols=True, bool doubleprecision=False)"""
    return _oechem.OEWriteXYZFile(ofs, mol, charges, symbols, doubleprecision)

def OEAddCustomFASTAResidue(code: "char const *", smiles: "char const *") -> "bool":
    r"""OEAddCustomFASTAResidue(char const * code, char const * smiles) -> bool"""
    return _oechem.OEAddCustomFASTAResidue(code, smiles)

def OEReadFASTAFile(ifs: "oemolistream", mol: "OEMolBase", customResidues: "bool"=False, embeddedSmiles: "bool"=False) -> "bool":
    r"""OEReadFASTAFile(oemolistream ifs, OEMolBase mol, bool customResidues=False, bool embeddedSmiles=False) -> bool"""
    return _oechem.OEReadFASTAFile(ifs, mol, customResidues, embeddedSmiles)

def OEWriteFASTAFile(ofs: "oemolostream", mol: "OEMolBase", ident: "char const *") -> "void":
    r"""OEWriteFASTAFile(oemolostream ofs, OEMolBase mol, char const * ident)"""
    return _oechem.OEWriteFASTAFile(ofs, mol, ident)

def OEWriteCDXFile(ofs: "oemolostream", mol: "OEMolBase") -> "bool":
    r"""OEWriteCDXFile(oemolostream ofs, OEMolBase mol) -> bool"""
    return _oechem.OEWriteCDXFile(ofs, mol)

def OEReadMacroModelFile(*args) -> "bool":
    r"""
    OEReadMacroModelFile(oemolistream ifs, OEMolBase mol) -> bool
    OEReadMacroModelFile(oemolistream ifs, OEMCMolBase mol) -> bool
    """
    return _oechem.OEReadMacroModelFile(*args)

def OEWriteMacroModelFile(*args) -> "void":
    r"""
    OEWriteMacroModelFile(oemolostream ofs, OEMolBase mol)
    OEWriteMacroModelFile(oemolostream ofs, OEMCMolBase mol)
    """
    return _oechem.OEWriteMacroModelFile(*args)

def OEReadSketchFile(ifs: "oemolistream", mol: "OEMolBase") -> "bool":
    r"""OEReadSketchFile(oemolistream ifs, OEMolBase mol) -> bool"""
    return _oechem.OEReadSketchFile(ifs, mol)

def OEFastaToMol(mol: "OEMolBase", str: "std::string const &") -> "bool":
    r"""OEFastaToMol(OEMolBase mol, std::string const & str) -> bool"""
    return _oechem.OEFastaToMol(mol, str)

def OEReadMDLQueryFile(*args) -> "bool":
    r"""
    OEReadMDLQueryFile(oemolistream ifs, OEMolBase mol) -> bool
    OEReadMDLQueryFile(oemolistream ifs, OEQMolBase qmol, unsigned int opts=) -> bool
    """
    return _oechem.OEReadMDLQueryFile(*args)

def OEReadMDLReactionQueryFile(*args) -> "bool":
    r"""
    OEReadMDLReactionQueryFile(oemolistream ifs, OEMolBase mol) -> bool
    OEReadMDLReactionQueryFile(oemolistream ifs, OEQMolBase qmol, unsigned int opts=) -> bool
    """
    return _oechem.OEReadMDLReactionQueryFile(*args)

def OEBuildMDLQueryExpressions(*args) -> "bool":
    r"""OEBuildMDLQueryExpressions(OEQMolBase qmol, OEMolBase mol, unsigned int opts=) -> bool"""
    return _oechem.OEBuildMDLQueryExpressions(*args)

def OEIsBinary(format: "unsigned int") -> "bool":
    r"""OEIsBinary(unsigned int format) -> bool"""
    return _oechem.OEIsBinary(format)

def OEIsGZip(arg1: "char const *") -> "bool":
    r"""OEIsGZip(char const * arg1) -> bool"""
    return _oechem.OEIsGZip(arg1)

def OEIs2DFormat(format: "unsigned int") -> "bool":
    r"""OEIs2DFormat(unsigned int format) -> bool"""
    return _oechem.OEIs2DFormat(format)

def OEIs3DFormat(format: "unsigned int") -> "bool":
    r"""OEIs3DFormat(unsigned int format) -> bool"""
    return _oechem.OEIs3DFormat(format)

def OEIsSDDataFormat(format: "unsigned int") -> "bool":
    r"""OEIsSDDataFormat(unsigned int format) -> bool"""
    return _oechem.OEIsSDDataFormat(format)

def OEGetFormatExtension(tag: "unsigned int") -> "char const *":
    r"""OEGetFormatExtension(unsigned int tag) -> char const *"""
    return _oechem.OEGetFormatExtension(tag)

def OEGetFormatString(tag: "unsigned int") -> "char const *":
    r"""OEGetFormatString(unsigned int tag) -> char const *"""
    return _oechem.OEGetFormatString(tag)

def OEGetDefaultIFlavor(format: "unsigned int") -> "unsigned int":
    r"""OEGetDefaultIFlavor(unsigned int format) -> unsigned int"""
    return _oechem.OEGetDefaultIFlavor(format)

def OEGetDefaultOFlavor(format: "unsigned int") -> "unsigned int":
    r"""OEGetDefaultOFlavor(unsigned int format) -> unsigned int"""
    return _oechem.OEGetDefaultOFlavor(format)

def OESetDefaultFlavors(*args) -> "bool":
    r"""
    OESetDefaultFlavors(oemolostream arg1) -> bool
    OESetDefaultFlavors(oemolistream arg1) -> bool
    """
    return _oechem.OESetDefaultFlavors(*args)

def OESetDefaultIFlavors(arg1: "oemolstreambase") -> "bool":
    r"""OESetDefaultIFlavors(oemolstreambase arg1) -> bool"""
    return _oechem.OESetDefaultIFlavors(arg1)

def OESetDefaultOFlavors(arg1: "oemolstreambase") -> "bool":
    r"""OESetDefaultOFlavors(oemolstreambase arg1) -> bool"""
    return _oechem.OESetDefaultOFlavors(arg1)

def OEIsReadable(*args) -> "bool":
    r"""
    OEIsReadable(unsigned int format) -> bool
    OEIsReadable(std::string const & filename) -> bool
    OEIsReadable(unsigned int format, unsigned int flavor) -> bool
    OEIsReadable(std::string const & filename, unsigned int flavor) -> bool
    """
    return _oechem.OEIsReadable(*args)

def OEIsWriteable(*args) -> "bool":
    r"""
    OEIsWriteable(unsigned int format) -> bool
    OEIsWriteable(std::string const & filename) -> bool
    OEIsWriteable(unsigned int format, unsigned int flavor) -> bool
    OEIsWriteable(std::string const & filename, unsigned int flavor) -> bool
    """
    return _oechem.OEIsWriteable(*args)

def OEIsSameFormat(iformat: "unsigned int", iflavor: "unsigned int", oformat: "unsigned int", oflavor: "unsigned int") -> "bool":
    r"""OEIsSameFormat(unsigned int iformat, unsigned int iflavor, unsigned int oformat, unsigned int oflavor) -> bool"""
    return _oechem.OEIsSameFormat(iformat, iflavor, oformat, oflavor)

def OEReadOEBFile(*args) -> "unsigned int":
    r"""
    OEReadOEBFile(oeistream ifs, OEMolBase mol, OEBinaryIOHandlerBase handler) -> unsigned int
    OEReadOEBFile(oeistream ifs, OEMCMolBase mol, OEBinaryIOHandlerBase handler) -> unsigned int
    """
    return _oechem.OEReadOEBFile(*args)

def OEReadMDLFile(*args) -> "bool":
    r"""OEReadMDLFile(oemolistream ifs, OEMolBase mol, char const * id="") -> bool"""
    return _oechem.OEReadMDLFile(*args)

def OEWriteMDLFile(*args) -> "void":
    r"""OEWriteMDLFile(oemolostream ofs, OEMolBase mol, unsigned int flavor=)"""
    return _oechem.OEWriteMDLFile(*args)

def OEReadCSVHeader(*args) -> "bool":
    r"""OEReadCSVHeader(oemolistream ifs, OECSVHeader header, unsigned int flavor=) -> bool"""
    return _oechem.OEReadCSVHeader(*args)

def OEWriteCSVHeader(*args) -> "void":
    r"""OEWriteCSVHeader(oemolostream ifs, OECSVHeader header, unsigned int flavor=)"""
    return _oechem.OEWriteCSVHeader(*args)

def OEReadCSVFile(*args) -> "bool":
    r"""OEReadCSVFile(oemolistream ifs, OEMolBase mol, unsigned int flavor=) -> bool"""
    return _oechem.OEReadCSVFile(*args)

def OEWriteCSVFile(*args) -> "void":
    r"""OEWriteCSVFile(oemolostream ofs, OEMolBase mol, unsigned int flavor=)"""
    return _oechem.OEWriteCSVFile(*args)

def OEReadPDBFile(*args) -> "bool":
    r"""OEReadPDBFile(oemolistream ifs, OEMolBase mol, unsigned int flavor=) -> bool"""
    return _oechem.OEReadPDBFile(*args)

def OEWritePDBFile(*args) -> "void":
    r"""OEWritePDBFile(oemolostream ofs, OEMolBase mol, unsigned int flavor=)"""
    return _oechem.OEWritePDBFile(*args)

def OEReadMOPACFile(ifs: "oemolistream", mol: "OEMolBase") -> "bool":
    r"""OEReadMOPACFile(oemolistream ifs, OEMolBase mol) -> bool"""
    return _oechem.OEReadMOPACFile(ifs, mol)

def OEWriteMOPACInputFile(*args) -> "void":
    r"""OEWriteMOPACInputFile(oemolostream ofs, OEMolBase mol, unsigned int flavor=)"""
    return _oechem.OEWriteMOPACInputFile(*args)

def OEReadCDXFile(*args) -> "bool":
    r"""OEReadCDXFile(oemolistream ifs, OEMolBase mol, unsigned int flavor=) -> bool"""
    return _oechem.OEReadCDXFile(*args)

def OEReadCIFFile(ifs: "oemolistream", mol: "OEMolBase", flavor: "unsigned int const") -> "bool":
    r"""OEReadCIFFile(oemolistream ifs, OEMolBase mol, unsigned int const flavor) -> bool"""
    return _oechem.OEReadCIFFile(ifs, mol, flavor)

def OEWriteCIFFile(ofs: "oemolostream", mol: "OEMolBase", flavor: "unsigned int const") -> "void":
    r"""OEWriteCIFFile(oemolostream ofs, OEMolBase mol, unsigned int const flavor)"""
    return _oechem.OEWriteCIFFile(ofs, mol, flavor)

def OEGetFileExtension(fname: "char const *") -> "char const *":
    r"""OEGetFileExtension(char const * fname) -> char const *"""
    return _oechem.OEGetFileExtension(fname)

def OEIsExtension(fname: "char const *") -> "bool":
    r"""OEIsExtension(char const * fname) -> bool"""
    return _oechem.OEIsExtension(fname)

def OEGetFileType(ext: "char const *") -> "unsigned int":
    r"""OEGetFileType(char const * ext) -> unsigned int"""
    return _oechem.OEGetFileType(ext)

def OEWriteConstMolecule(*args) -> "unsigned int":
    r"""
    OEWriteConstMolecule(oemolostream ofs, OEMCMolBase mol) -> unsigned int
    OEWriteConstMolecule(oemolostream ofs, OEQMolBase mol) -> unsigned int
    OEWriteConstMolecule(oemolostream ofs, OEMolBase mol) -> unsigned int
    OEWriteConstMolecule(oemolostream ofs, OEChem::OEMol const & mol) -> unsigned int
    OEWriteConstMolecule(oemolostream ofs, OEChem::OEQMol const & mol) -> unsigned int
    OEWriteConstMolecule(oemolostream ofs, OEChem::OEGraphMol const & mol) -> unsigned int
    """
    return _oechem.OEWriteConstMolecule(*args)

def OEAssignHybridization(arg1: "OEMolBase") -> "bool":
    r"""OEAssignHybridization(OEMolBase arg1) -> bool"""
    return _oechem.OEAssignHybridization(arg1)

def OEGetHybridization(arg1: "OEAtomBase") -> "unsigned int":
    r"""OEGetHybridization(OEAtomBase arg1) -> unsigned int"""
    return _oechem.OEGetHybridization(arg1)
class OEHydrogenCounter(object):
    r"""Proxy of C++ OEChem::OEHydrogenCounter 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, explicitHCount: "unsigned int"=0, implicitHCount: "unsigned int"=0):
        r"""__init__(OEHydrogenCounter self, unsigned int explicitHCount=0, unsigned int implicitHCount=0) -> OEHydrogenCounter"""
        _oechem.OEHydrogenCounter_swiginit(self, _oechem.new_OEHydrogenCounter(explicitHCount, implicitHCount))

    def GetExplicitHCount(self) -> "unsigned int":
        r"""GetExplicitHCount(OEHydrogenCounter self) -> unsigned int"""
        return _oechem.OEHydrogenCounter_GetExplicitHCount(self)

    def GetImplicitHCount(self) -> "unsigned int":
        r"""GetImplicitHCount(OEHydrogenCounter self) -> unsigned int"""
        return _oechem.OEHydrogenCounter_GetImplicitHCount(self)
    __swig_destroy__ = _oechem.delete_OEHydrogenCounter

# Register OEHydrogenCounter in _oechem:
_oechem.OEHydrogenCounter_swigregister(OEHydrogenCounter)


def OEGetHydrogenCounts(counter: "OEHydrogenCounter", mol: "OEMolBase") -> "bool":
    r"""OEGetHydrogenCounts(OEHydrogenCounter counter, OEMolBase mol) -> bool"""
    return _oechem.OEGetHydrogenCounts(counter, mol)

def OEHasExplicitHydrogens(mol: "OEMolBase") -> "bool":
    r"""OEHasExplicitHydrogens(OEMolBase mol) -> bool"""
    return _oechem.OEHasExplicitHydrogens(mol)

def OEHasImplicitHydrogens(mol: "OEMolBase") -> "bool":
    r"""OEHasImplicitHydrogens(OEMolBase mol) -> bool"""
    return _oechem.OEHasImplicitHydrogens(mol)

def OEDefaultImplicitHCount(atm: "OEAtomBase") -> "unsigned int":
    r"""OEDefaultImplicitHCount(OEAtomBase atm) -> unsigned int"""
    return _oechem.OEDefaultImplicitHCount(atm)

def OEAssignImplicitHydrogens(*args) -> "bool":
    r"""
    OEAssignImplicitHydrogens(OEAtomBase atm) -> bool
    OEAssignImplicitHydrogens(OEMolBase mol) -> bool
    """
    return _oechem.OEAssignImplicitHydrogens(*args)

def OEDefaultMDLHCount(atm: "OEAtomBase") -> "unsigned int":
    r"""OEDefaultMDLHCount(OEAtomBase atm) -> unsigned int"""
    return _oechem.OEDefaultMDLHCount(atm)

def OEAssignMDLHydrogens(*args) -> "bool":
    r"""
    OEAssignMDLHydrogens(OEAtomBase atm) -> bool
    OEAssignMDLHydrogens(OEMolBase mol) -> bool
    """
    return _oechem.OEAssignMDLHydrogens(*args)

def OEAddExplicitHydrogens(*args) -> "bool":
    r"""
    OEAddExplicitHydrogens(OEMolBase mol, OEAtomBase atm) -> bool
    OEAddExplicitHydrogens(OEChem::OEMol & mol, bool polarOnly=False, bool set3D=True) -> bool
    OEAddExplicitHydrogens(OEMCMolBase mol, bool polarOnly=False, bool set3D=True) -> bool
    OEAddExplicitHydrogens(OEMolBase mol, bool polarOnly=False, bool set3D=True) -> bool
    """
    return _oechem.OEAddExplicitHydrogens(*args)

def OESuppressHydrogens(*args) -> "bool":
    r"""
    OESuppressHydrogens(OEMolBase mol, bool retainPolar=False, bool retainStereo=False, bool retainIsotope=True) -> bool
    OESuppressHydrogens(OEAtomBase atm, bool retainPolar=False, bool retainStereo=False, bool retainIsotope=True) -> bool
    """
    return _oechem.OESuppressHydrogens(*args)

def OEHasStereoHydrogens(atm: "OEAtomBase") -> "bool":
    r"""OEHasStereoHydrogens(OEAtomBase atm) -> bool"""
    return _oechem.OEHasStereoHydrogens(atm)

def OEHasAtomStereoHydrogens(atm: "OEAtomBase") -> "bool":
    r"""OEHasAtomStereoHydrogens(OEAtomBase atm) -> bool"""
    return _oechem.OEHasAtomStereoHydrogens(atm)

def OEHasBondStereoHydrogens(atm: "OEAtomBase") -> "bool":
    r"""OEHasBondStereoHydrogens(OEAtomBase atm) -> bool"""
    return _oechem.OEHasBondStereoHydrogens(atm)

def OESet3DHydrogenGeom(*args) -> "bool":
    r"""
    OESet3DHydrogenGeom(OEMolBase mol) -> bool
    OESet3DHydrogenGeom(OEMolBase mol, OEAtomBase hatom) -> bool
    """
    return _oechem.OESet3DHydrogenGeom(*args)

def OESet2DHydrogenGeom(mol: "OEMolBase") -> "bool":
    r"""OESet2DHydrogenGeom(OEMolBase mol) -> bool"""
    return _oechem.OESet2DHydrogenGeom(mol)

def OECorrectAcidProtonGeometry(*args) -> "bool":
    r"""
    OECorrectAcidProtonGeometry(OEMolBase mol) -> bool
    OECorrectAcidProtonGeometry(OEMolBase mol, OEAtomBase atom) -> bool
    """
    return _oechem.OECorrectAcidProtonGeometry(*args)

def OEKekulize(arg1: "OEMolBase") -> "bool":
    r"""OEKekulize(OEMolBase arg1) -> bool"""
    return _oechem.OEKekulize(arg1)
class OEMCSFunc(object):
    r"""Proxy of C++ OEChem::OEMCSFunc class."""

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

    def __call__(self, pattern: "OEMolBase", target: "OEMolBase", amap: "OEChem::OEAtomBase **", bmap: "OEChem::OEBondBase **") -> "double":
        r"""__call__(OEMCSFunc self, OEMolBase pattern, OEMolBase target, OEChem::OEAtomBase ** amap, OEChem::OEBondBase ** bmap) -> double"""
        return _oechem.OEMCSFunc___call__(self, pattern, target, amap, bmap)

    def CreateCopy(self) -> "OEChem::OEMCSFunc *":
        r"""CreateCopy(OEMCSFunc self) -> OEMCSFunc"""
        return _oechem.OEMCSFunc_CreateCopy(self)

    def __init__(self):
        r"""__init__(OEMCSFunc self) -> OEMCSFunc"""
        if self.__class__ == OEMCSFunc:
            _self = None
        else:
            _self = self
        _oechem.OEMCSFunc_swiginit(self, _oechem.new_OEMCSFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEMCSFunc(self)
        return weakref.proxy(self)

# Register OEMCSFunc in _oechem:
_oechem.OEMCSFunc_swigregister(OEMCSFunc)

class OEMCSMaxAtoms(OEMCSFunc):
    r"""Proxy of C++ OEChem::OEMCSMaxAtoms class."""

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

    def __call__(self, arg2: "OEMolBase", arg3: "OEMolBase", arg4: "OEChem::OEAtomBase **", arg5: "OEChem::OEBondBase **") -> "double":
        r"""__call__(OEMCSMaxAtoms self, OEMolBase arg2, OEMolBase arg3, OEChem::OEAtomBase ** arg4, OEChem::OEBondBase ** arg5) -> double"""
        return _oechem.OEMCSMaxAtoms___call__(self, arg2, arg3, arg4, arg5)

    def CreateCopy(self) -> "OEChem::OEMCSFunc *":
        r"""CreateCopy(OEMCSMaxAtoms self) -> OEMCSFunc"""
        return _oechem.OEMCSMaxAtoms_CreateCopy(self)

    def __init__(self):
        r"""__init__(OEMCSMaxAtoms self) -> OEMCSMaxAtoms"""
        _oechem.OEMCSMaxAtoms_swiginit(self, _oechem.new_OEMCSMaxAtoms())
    __swig_destroy__ = _oechem.delete_OEMCSMaxAtoms

# Register OEMCSMaxAtoms in _oechem:
_oechem.OEMCSMaxAtoms_swigregister(OEMCSMaxAtoms)

class OEMCSMaxBonds(OEMCSFunc):
    r"""Proxy of C++ OEChem::OEMCSMaxBonds class."""

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

    def __call__(self, arg2: "OEMolBase", arg3: "OEMolBase", arg4: "OEChem::OEAtomBase **", arg5: "OEChem::OEBondBase **") -> "double":
        r"""__call__(OEMCSMaxBonds self, OEMolBase arg2, OEMolBase arg3, OEChem::OEAtomBase ** arg4, OEChem::OEBondBase ** arg5) -> double"""
        return _oechem.OEMCSMaxBonds___call__(self, arg2, arg3, arg4, arg5)

    def CreateCopy(self) -> "OEChem::OEMCSFunc *":
        r"""CreateCopy(OEMCSMaxBonds self) -> OEMCSFunc"""
        return _oechem.OEMCSMaxBonds_CreateCopy(self)

    def __init__(self):
        r"""__init__(OEMCSMaxBonds self) -> OEMCSMaxBonds"""
        _oechem.OEMCSMaxBonds_swiginit(self, _oechem.new_OEMCSMaxBonds())
    __swig_destroy__ = _oechem.delete_OEMCSMaxBonds

# Register OEMCSMaxBonds in _oechem:
_oechem.OEMCSMaxBonds_swigregister(OEMCSMaxBonds)

class OEMCSMaxAtomsCompleteCycles(OEMCSFunc):
    r"""Proxy of C++ OEChem::OEMCSMaxAtomsCompleteCycles 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, a: "double"=1.0):
        r"""__init__(OEMCSMaxAtomsCompleteCycles self, double a=1.0) -> OEMCSMaxAtomsCompleteCycles"""
        _oechem.OEMCSMaxAtomsCompleteCycles_swiginit(self, _oechem.new_OEMCSMaxAtomsCompleteCycles(a))

    def __call__(self, arg2: "OEMolBase", arg3: "OEMolBase", arg4: "OEChem::OEAtomBase **", arg5: "OEChem::OEBondBase **") -> "double":
        r"""__call__(OEMCSMaxAtomsCompleteCycles self, OEMolBase arg2, OEMolBase arg3, OEChem::OEAtomBase ** arg4, OEChem::OEBondBase ** arg5) -> double"""
        return _oechem.OEMCSMaxAtomsCompleteCycles___call__(self, arg2, arg3, arg4, arg5)

    def CreateCopy(self) -> "OEChem::OEMCSFunc *":
        r"""CreateCopy(OEMCSMaxAtomsCompleteCycles self) -> OEMCSFunc"""
        return _oechem.OEMCSMaxAtomsCompleteCycles_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEMCSMaxAtomsCompleteCycles

# Register OEMCSMaxAtomsCompleteCycles in _oechem:
_oechem.OEMCSMaxAtomsCompleteCycles_swigregister(OEMCSMaxAtomsCompleteCycles)

class OEMCSMaxBondsCompleteCycles(OEMCSFunc):
    r"""Proxy of C++ OEChem::OEMCSMaxBondsCompleteCycles 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, a: "double"=1.0):
        r"""__init__(OEMCSMaxBondsCompleteCycles self, double a=1.0) -> OEMCSMaxBondsCompleteCycles"""
        _oechem.OEMCSMaxBondsCompleteCycles_swiginit(self, _oechem.new_OEMCSMaxBondsCompleteCycles(a))

    def __call__(self, arg2: "OEMolBase", arg3: "OEMolBase", arg4: "OEChem::OEAtomBase **", arg5: "OEChem::OEBondBase **") -> "double":
        r"""__call__(OEMCSMaxBondsCompleteCycles self, OEMolBase arg2, OEMolBase arg3, OEChem::OEAtomBase ** arg4, OEChem::OEBondBase ** arg5) -> double"""
        return _oechem.OEMCSMaxBondsCompleteCycles___call__(self, arg2, arg3, arg4, arg5)

    def CreateCopy(self) -> "OEChem::OEMCSFunc *":
        r"""CreateCopy(OEMCSMaxBondsCompleteCycles self) -> OEMCSFunc"""
        return _oechem.OEMCSMaxBondsCompleteCycles_CreateCopy(self)
    __swig_destroy__ = _oechem.delete_OEMCSMaxBondsCompleteCycles

# Register OEMCSMaxBondsCompleteCycles in _oechem:
_oechem.OEMCSMaxBondsCompleteCycles_swigregister(OEMCSMaxBondsCompleteCycles)

class OEMCSSearch(object):
    r"""Proxy of C++ OEChem::OEMCSSearch 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__(OEMCSSearch self, unsigned int type=) -> OEMCSSearch
        __init__(OEMCSSearch self, char const * arg2, unsigned int type=) -> OEMCSSearch
        __init__(OEMCSSearch self, OEQMolBase arg2, bool makeCopy=True, unsigned int type=) -> OEMCSSearch
        __init__(OEMCSSearch self, OEMolBase arg2, unsigned int arg3, unsigned int arg4, unsigned int type=) -> OEMCSSearch
        __init__(OEMCSSearch self, OEMCSSearch arg2) -> OEMCSSearch
        """
        _oechem.OEMCSSearch_swiginit(self, _oechem.new_OEMCSSearch(*args))
    __swig_destroy__ = _oechem.delete_OEMCSSearch

    def IsValid(self):
      return _oechem.OEMCSSearch___nonzero__(self)



    def Init(self, *args) -> "bool":
        r"""
        Init(OEMCSSearch self, char const * arg2) -> bool
        Init(OEMCSSearch self, OEQMolBase arg2, bool makeCopy=True) -> bool
        Init(OEMCSSearch self, OEMolBase arg2, unsigned int arg3, unsigned int arg4) -> bool
        """
        return _oechem.OEMCSSearch_Init(self, *args)

    def SingleMatch(self, *args) -> "bool":
        r"""
        SingleMatch(OEMCSSearch self, OEMolBase arg2) -> bool
        SingleMatch(OEMCSSearch self, OEQMolBase arg2) -> bool
        """
        return _oechem.OEMCSSearch_SingleMatch(self, *args)

    def Match(self, *args) -> "OESystem::OEIterBase< OEChem::OEMatchBase > *":
        r"""
        Match(OEMCSSearch self, OEMolBase arg2, bool umatch=False) -> OESystem::OEIterBase< OEChem::OEMatchBase >
        Match(OEMCSSearch self, OEQMolBase arg2, bool umatch=False) -> OESystem::OEIterBase< OEChem::OEMatchBase >
        """
        return _oechem.OEMCSSearch_Match(self, *args)

    def AddConstraint(self, *args) -> "bool":
        r"""
        AddConstraint(OEMCSSearch self, OEMatchPairAtom arg2) -> bool
        AddConstraint(OEMCSSearch self, OEMatchPairBond arg2) -> bool
        """
        return _oechem.OEMCSSearch_AddConstraint(self, *args)

    def ClearConstraints(self) -> "void":
        r"""ClearConstraints(OEMCSSearch self)"""
        return _oechem.OEMCSSearch_ClearConstraints(self)

    def SetMinAtoms(self, arg2: "unsigned int") -> "bool":
        r"""SetMinAtoms(OEMCSSearch self, unsigned int arg2) -> bool"""
        return _oechem.OEMCSSearch_SetMinAtoms(self, arg2)

    def SetMaxMatches(self, arg2: "unsigned int") -> "bool":
        r"""SetMaxMatches(OEMCSSearch self, unsigned int arg2) -> bool"""
        return _oechem.OEMCSSearch_SetMaxMatches(self, arg2)

    def SetSaveRange(self, arg2: "unsigned int") -> "bool":
        r"""SetSaveRange(OEMCSSearch self, unsigned int arg2) -> bool"""
        return _oechem.OEMCSSearch_SetSaveRange(self, arg2)

    def GetMinAtoms(self) -> "unsigned int":
        r"""GetMinAtoms(OEMCSSearch self) -> unsigned int"""
        return _oechem.OEMCSSearch_GetMinAtoms(self)

    def GetMaxMatches(self) -> "unsigned int":
        r"""GetMaxMatches(OEMCSSearch self) -> unsigned int"""
        return _oechem.OEMCSSearch_GetMaxMatches(self)

    def GetSaveRange(self) -> "unsigned int":
        r"""GetSaveRange(OEMCSSearch self) -> unsigned int"""
        return _oechem.OEMCSSearch_GetSaveRange(self)

    def SetMCSFunc(self, arg2: "OEMCSFunc") -> "bool":
        r"""SetMCSFunc(OEMCSSearch self, OEMCSFunc arg2) -> bool"""
        return _oechem.OEMCSSearch_SetMCSFunc(self, arg2)

    def GetPattern(self) -> "OEChem::OEQMolBase const &":
        r"""GetPattern(OEMCSSearch self) -> OEQMolBase"""
        return _oechem.OEMCSSearch_GetPattern(self)

# Register OEMCSSearch in _oechem:
_oechem.OEMCSSearch_swigregister(OEMCSSearch)


def OEGetMCSExhaustiveSearchTruncationLimit() -> "unsigned int":
    r"""OEGetMCSExhaustiveSearchTruncationLimit() -> unsigned int"""
    return _oechem.OEGetMCSExhaustiveSearchTruncationLimit()

def OESetMCSExhaustiveSearchTruncationLimit(limit: "unsigned int") -> "void":
    r"""OESetMCSExhaustiveSearchTruncationLimit(unsigned int limit)"""
    return _oechem.OESetMCSExhaustiveSearchTruncationLimit(limit)
class OECliqueSearch(object):
    r"""Proxy of C++ OEChem::OECliqueSearch 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__(OECliqueSearch self, unsigned int type=) -> OECliqueSearch
        __init__(OECliqueSearch self, char const * arg2, unsigned int type=) -> OECliqueSearch
        __init__(OECliqueSearch self, OEQMolBase arg2, bool makeCopy=True, unsigned int type=) -> OECliqueSearch
        __init__(OECliqueSearch self, OEMolBase arg2, unsigned int arg3, unsigned int arg4, unsigned int type=) -> OECliqueSearch
        __init__(OECliqueSearch self, OECliqueSearch arg2) -> OECliqueSearch
        """
        _oechem.OECliqueSearch_swiginit(self, _oechem.new_OECliqueSearch(*args))
    __swig_destroy__ = _oechem.delete_OECliqueSearch

    def IsValid(self):
      return _oechem.OECliqueSearch___nonzero__(self)



    def Init(self, *args) -> "bool":
        r"""
        Init(OECliqueSearch self, char const * arg2) -> bool
        Init(OECliqueSearch self, OEQMolBase arg2, bool makeCopy=True) -> bool
        Init(OECliqueSearch self, OEMolBase arg2, unsigned int arg3, unsigned int arg4) -> bool
        """
        return _oechem.OECliqueSearch_Init(self, *args)

    def SingleMatch(self, *args) -> "bool":
        r"""
        SingleMatch(OECliqueSearch self, OEMolBase arg2) -> bool
        SingleMatch(OECliqueSearch self, OEQMolBase arg2) -> bool
        """
        return _oechem.OECliqueSearch_SingleMatch(self, *args)

    def Match(self, *args) -> "OESystem::OEIterBase< OEChem::OEMatchBase > *":
        r"""
        Match(OECliqueSearch self, OEMolBase arg2) -> OESystem::OEIterBase< OEChem::OEMatchBase >
        Match(OECliqueSearch self, OEQMolBase arg2) -> OESystem::OEIterBase< OEChem::OEMatchBase > *
        """
        return _oechem.OECliqueSearch_Match(self, *args)

    def AddConstraint(self, *args) -> "bool":
        r"""
        AddConstraint(OECliqueSearch self, OEMatchPairAtom arg2) -> bool
        AddConstraint(OECliqueSearch self, OEMatchPairBond arg2) -> bool
        """
        return _oechem.OECliqueSearch_AddConstraint(self, *args)

    def ClearConstraints(self) -> "void":
        r"""ClearConstraints(OECliqueSearch self)"""
        return _oechem.OECliqueSearch_ClearConstraints(self)

    def SetMinAtoms(self, arg2: "unsigned int") -> "bool":
        r"""SetMinAtoms(OECliqueSearch self, unsigned int arg2) -> bool"""
        return _oechem.OECliqueSearch_SetMinAtoms(self, arg2)

    def SetMaxMatches(self, arg2: "unsigned int") -> "bool":
        r"""SetMaxMatches(OECliqueSearch self, unsigned int arg2) -> bool"""
        return _oechem.OECliqueSearch_SetMaxMatches(self, arg2)

    def SetSaveRange(self, arg2: "unsigned int") -> "bool":
        r"""SetSaveRange(OECliqueSearch self, unsigned int arg2) -> bool"""
        return _oechem.OECliqueSearch_SetSaveRange(self, arg2)

    def GetMinAtoms(self) -> "unsigned int":
        r"""GetMinAtoms(OECliqueSearch self) -> unsigned int"""
        return _oechem.OECliqueSearch_GetMinAtoms(self)

    def GetMaxMatches(self) -> "unsigned int":
        r"""GetMaxMatches(OECliqueSearch self) -> unsigned int"""
        return _oechem.OECliqueSearch_GetMaxMatches(self)

    def GetSaveRange(self) -> "unsigned int":
        r"""GetSaveRange(OECliqueSearch self) -> unsigned int"""
        return _oechem.OECliqueSearch_GetSaveRange(self)

    def GetPattern(self) -> "OEChem::OEQMolBase const &":
        r"""GetPattern(OECliqueSearch self) -> OEQMolBase"""
        return _oechem.OECliqueSearch_GetPattern(self)

    def SetMCSFunc(self, arg2: "OEMCSFunc") -> "bool":
        r"""SetMCSFunc(OECliqueSearch self, OEMCSFunc arg2) -> bool"""
        return _oechem.OECliqueSearch_SetMCSFunc(self, arg2)

# Register OECliqueSearch in _oechem:
_oechem.OECliqueSearch_swigregister(OECliqueSearch)


def OEMDLPerceiveParity(mol: "OEMolBase") -> "void":
    r"""OEMDLPerceiveParity(OEMolBase mol)"""
    return _oechem.OEMDLPerceiveParity(mol)

def OEMDLStereoFromParity(mol: "OEMolBase") -> "void":
    r"""OEMDLStereoFromParity(OEMolBase mol)"""
    return _oechem.OEMDLStereoFromParity(mol)

def OEMDLHasParity(*args) -> "bool":
    r"""
    OEMDLHasParity(OEMolBase mol) -> bool
    OEMDLHasParity(OEMCMolBase mcmol) -> bool
    """
    return _oechem.OEMDLHasParity(*args)

def OEMDLGetParity(*args) -> "bool":
    r"""
    OEMDLGetParity(OEMolBase mol) -> bool
    OEMDLGetParity(OEMCMolBase mcmol) -> bool
    """
    return _oechem.OEMDLGetParity(*args)

def OEMDLSetParity(*args) -> "bool":
    r"""
    OEMDLSetParity(OEMolBase mol, bool value) -> bool
    OEMDLSetParity(OEMCMolBase mcmol, bool value) -> bool
    """
    return _oechem.OEMDLSetParity(*args)

def OEMDLClearParity(*args) -> "void":
    r"""
    OEMDLClearParity(OEMolBase mol)
    OEMDLClearParity(OEMCMolBase mcmol)
    """
    return _oechem.OEMDLClearParity(*args)

def OEAtomSetMDLParity(atm: "OEAtomBase", arg2: "unsigned int") -> "bool":
    r"""OEAtomSetMDLParity(OEAtomBase atm, unsigned int arg2) -> bool"""
    return _oechem.OEAtomSetMDLParity(atm, arg2)

def OEAtomGetMDLParity(atm: "OEAtomBase") -> "unsigned int":
    r"""OEAtomGetMDLParity(OEAtomBase atm) -> unsigned int"""
    return _oechem.OEAtomGetMDLParity(atm)

def OEMDLCorrectBondStereo(mol: "OEMolBase") -> "bool":
    r"""OEMDLCorrectBondStereo(OEMolBase mol) -> bool"""
    return _oechem.OEMDLCorrectBondStereo(mol)

def OEMDLHasIncorrectBondStereo(mol: "OEMolBase") -> "bool":
    r"""OEMDLHasIncorrectBondStereo(OEMolBase mol) -> bool"""
    return _oechem.OEMDLHasIncorrectBondStereo(mol)

def OEMDLClearBondStereo(mol: "OEMolBase") -> "bool":
    r"""OEMDLClearBondStereo(OEMolBase mol) -> bool"""
    return _oechem.OEMDLClearBondStereo(mol)

def OEMDLPerceiveBondStereo(mol: "OEMolBase") -> "bool":
    r"""OEMDLPerceiveBondStereo(OEMolBase mol) -> bool"""
    return _oechem.OEMDLPerceiveBondStereo(mol)

def OEMDLStereoFromBondStereo(mol: "OEMolBase", bAllowMarkCorrections: "bool"=False) -> "bool":
    r"""OEMDLStereoFromBondStereo(OEMolBase mol, bool bAllowMarkCorrections=False) -> bool"""
    return _oechem.OEMDLStereoFromBondStereo(mol, bAllowMarkCorrections)

def OEMDLGetValence(elemno: "unsigned int", charge: "int", minval: "unsigned int") -> "unsigned int":
    r"""OEMDLGetValence(unsigned int elemno, int charge, unsigned int minval) -> unsigned int"""
    return _oechem.OEMDLGetValence(elemno, charge, minval)

def OEMacroModelAtomTypes(mol: "OEMolBase") -> "bool":
    r"""OEMacroModelAtomTypes(OEMolBase mol) -> bool"""
    return _oechem.OEMacroModelAtomTypes(mol)

def OEMacroModelAtomTypeNames(mol: "OEMolBase") -> "bool":
    r"""OEMacroModelAtomTypeNames(OEMolBase mol) -> bool"""
    return _oechem.OEMacroModelAtomTypeNames(mol)

def OEMacroModelTypeNames(mol: "OEMolBase") -> "bool":
    r"""OEMacroModelTypeNames(OEMolBase mol) -> bool"""
    return _oechem.OEMacroModelTypeNames(mol)

def OEMacroModelTypeName(type: "unsigned int") -> "char const *":
    r"""OEMacroModelTypeName(unsigned int type) -> char const *"""
    return _oechem.OEMacroModelTypeName(type)

def OEMacroModelTypeElement(type: "unsigned int") -> "unsigned int":
    r"""OEMacroModelTypeElement(unsigned int type) -> unsigned int"""
    return _oechem.OEMacroModelTypeElement(type)

def OEIsForceFieldDummyAtom(atom: "OEAtomBase") -> "bool":
    r"""OEIsForceFieldDummyAtom(OEAtomBase atom) -> bool"""
    return _oechem.OEIsForceFieldDummyAtom(atom)

def OESetForceFieldDummyAtom(atom: "OEAtomBase") -> "void":
    r"""OESetForceFieldDummyAtom(OEAtomBase atom)"""
    return _oechem.OESetForceFieldDummyAtom(atom)

def OEClearForceFieldDummyAtom(atom: "OEAtomBase") -> "void":
    r"""OEClearForceFieldDummyAtom(OEAtomBase atom)"""
    return _oechem.OEClearForceFieldDummyAtom(atom)

def OEClearForceFieldDummyAtoms(mol: "OEMolBase") -> "void":
    r"""OEClearForceFieldDummyAtoms(OEMolBase mol)"""
    return _oechem.OEClearForceFieldDummyAtoms(mol)
class OEMMFFTypeResult(object):
    r"""Proxy of C++ OEChem::OEMMFFTypeResult 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__(OEMMFFTypeResult self, unsigned int type, bool failed) -> OEMMFFTypeResult
        __init__(OEMMFFTypeResult self, OEMMFFTypeResult rhs) -> OEMMFFTypeResult
        """
        _oechem.OEMMFFTypeResult_swiginit(self, _oechem.new_OEMMFFTypeResult(*args))

    def GetMMFFType(self) -> "unsigned int":
        r"""GetMMFFType(OEMMFFTypeResult self) -> unsigned int"""
        return _oechem.OEMMFFTypeResult_GetMMFFType(self)

    def GetFailed(self) -> "bool":
        r"""GetFailed(OEMMFFTypeResult self) -> bool"""
        return _oechem.OEMMFFTypeResult_GetFailed(self)
    _type = property(_oechem.OEMMFFTypeResult__type_get, _oechem.OEMMFFTypeResult__type_set, doc=r"""_type : unsigned int""")
    _failed = property(_oechem.OEMMFFTypeResult__failed_get, _oechem.OEMMFFTypeResult__failed_set, doc=r"""_failed : bool""")
    __swig_destroy__ = _oechem.delete_OEMMFFTypeResult

# Register OEMMFFTypeResult in _oechem:
_oechem.OEMMFFTypeResult_swigregister(OEMMFFTypeResult)


def OEMMFFAtomType(atm: "OEAtomBase") -> "OEChem::OEMMFFTypeResult":
    r"""OEMMFFAtomType(OEAtomBase atm) -> OEMMFFTypeResult"""
    return _oechem.OEMMFFAtomType(atm)

def OEMMFFAtomTypes(mol: "OEMolBase") -> "bool":
    r"""OEMMFFAtomTypes(OEMolBase mol) -> bool"""
    return _oechem.OEMMFFAtomTypes(mol)

def OEMMFFAtomTypeNames(mol: "OEMolBase") -> "bool":
    r"""OEMMFFAtomTypeNames(OEMolBase mol) -> bool"""
    return _oechem.OEMMFFAtomTypeNames(mol)

def OEMMFFTypeNames(mol: "OEMolBase") -> "bool":
    r"""OEMMFFTypeNames(OEMolBase mol) -> bool"""
    return _oechem.OEMMFFTypeNames(mol)

def OEMMFFTypeName(type: "unsigned int") -> "char const *":
    r"""OEMMFFTypeName(unsigned int type) -> char const *"""
    return _oechem.OEMMFFTypeName(type)

def OEMMFFTypeIndex(type: "unsigned int") -> "unsigned int":
    r"""OEMMFFTypeIndex(unsigned int type) -> unsigned int"""
    return _oechem.OEMMFFTypeIndex(type)

def OEMMFFRemapElement(from_element: "unsigned int", to_element: "unsigned int") -> "void":
    r"""OEMMFFRemapElement(unsigned int from_element, unsigned int to_element)"""
    return _oechem.OEMMFFRemapElement(from_element, to_element)

def OEMMFFClearRemappedElements() -> "void":
    r"""OEMMFFClearRemappedElements()"""
    return _oechem.OEMMFFClearRemappedElements()

def OEMMFF94InitialCharges(mol: "OEMolBase") -> "bool":
    r"""OEMMFF94InitialCharges(OEMolBase mol) -> bool"""
    return _oechem.OEMMFF94InitialCharges(mol)

def OEMMFF94PartialCharges(mol: "OEMolBase") -> "bool":
    r"""OEMMFF94PartialCharges(OEMolBase mol) -> bool"""
    return _oechem.OEMMFF94PartialCharges(mol)

def OEUncolorMol(*args) -> "bool":
    r"""
    OEUncolorMol(OEMolBase uncoloredcmol, OEMolBase mol, unsigned int uncolortype=) -> bool
    OEUncolorMol(OEMolBase moltouncolor, unsigned int uncolortype=) -> bool
    OEUncolorMol(OEMCMolBase uncoloredcmol, OEMCMolBase mol, unsigned int uncolortype=) -> bool
    OEUncolorMol(OEMCMolBase moltouncolor, unsigned int uncolortype=) -> bool
    """
    return _oechem.OEUncolorMol(*args)

def OEGetPackedCoords(*args) -> "void":
    r"""
    OEGetPackedCoords(OEMolBase mol, float * coords)
    OEGetPackedCoords(OEMolBase mol, double * coords)
    """
    return _oechem.OEGetPackedCoords(*args)

def OESetPackedCoords(*args) -> "void":
    r"""
    OESetPackedCoords(OEMolBase mol, float const * coords)
    OESetPackedCoords(OEMolBase mol, double const * coords)
    """
    return _oechem.OESetPackedCoords(*args)

def OEGetDistance(*args) -> "double":
    r"""
    OEGetDistance(OEMolBase arg1, OEAtomBase a, OEAtomBase b) -> double
    OEGetDistance(OEMolBase ma, OEAtomBase a, OEMolBase mb, OEAtomBase b) -> double
    OEGetDistance(OEConfBase conf, OEAtomBase a, OEAtomBase b) -> double
    OEGetDistance(OEConfBase ca, OEAtomBase a, OEConfBase cb, OEAtomBase b) -> double
    """
    return _oechem.OEGetDistance(*args)

def OEGetDistance2(*args) -> "double":
    r"""
    OEGetDistance2(OEMolBase arg1, OEAtomBase a, OEAtomBase b) -> double
    OEGetDistance2(OEMolBase ma, OEAtomBase a, OEMolBase mb, OEAtomBase b) -> double
    OEGetDistance2(OEConfBase conf, OEAtomBase a, OEAtomBase b) -> double
    OEGetDistance2(OEConfBase ca, OEAtomBase a, OEConfBase cb, OEAtomBase b) -> double
    """
    return _oechem.OEGetDistance2(*args)

def OEGetAngle(*args) -> "double":
    r"""
    OEGetAngle(OEMolBase arg1, OEAtomBase a, OEAtomBase b, OEAtomBase c) -> double
    OEGetAngle(OEMolBase ma, OEAtomBase a, OEMolBase mb, OEAtomBase b, OEMolBase mc, OEAtomBase c) -> double
    OEGetAngle(OEConfBase conf, OEAtomBase a, OEAtomBase b, OEAtomBase c) -> double
    OEGetAngle(OEConfBase ca, OEAtomBase a, OEConfBase cb, OEAtomBase b, OEConfBase cc, OEAtomBase c) -> double
    """
    return _oechem.OEGetAngle(*args)

def OEGetAbsTorsion(*args) -> "double":
    r"""
    OEGetAbsTorsion(OEMolBase arg1, OEAtomBase a, OEAtomBase b, OEAtomBase c, OEAtomBase d) -> double
    OEGetAbsTorsion(OEConfBase arg1, OEAtomBase a, OEAtomBase b, OEAtomBase c, OEAtomBase d) -> double
    """
    return _oechem.OEGetAbsTorsion(*args)

def OESetDistance(mol: "OEMolBase", a: "OEAtomBase", b: "OEAtomBase", dist: "double") -> "bool":
    r"""OESetDistance(OEMolBase mol, OEAtomBase a, OEAtomBase b, double dist) -> bool"""
    return _oechem.OESetDistance(mol, a, b, dist)

def OESetAngle(mol: "OEMolBase", a: "OEAtomBase", b: "OEAtomBase", c: "OEAtomBase", ang: "double", axis: "double *"=None) -> "bool":
    r"""OESetAngle(OEMolBase mol, OEAtomBase a, OEAtomBase b, OEAtomBase c, double ang, double * axis=None) -> bool"""
    return _oechem.OESetAngle(mol, a, b, c, ang, axis)

def OETranslate(*args) -> "void":
    r"""
    OETranslate(OEMolBase mol, double const * v)
    OETranslate(OEMolBase mol, float const * v)
    OETranslate(OEConfBase conf, double const * v)
    OETranslate(OEConfBase conf, float const * v)
    OETranslate(OEMCMolBase mcmol, double const * v)
    OETranslate(OEMCMolBase mcmol, float const * v)
    """
    return _oechem.OETranslate(*args)

def OERotate(*args) -> "void":
    r"""
    OERotate(OEMolBase mol, double const * m)
    OERotate(OEMolBase mol, float const * m)
    OERotate(OEConfBase conf, double const * m)
    OERotate(OEConfBase conf, float const * m)
    OERotate(OEMCMolBase mcmol, double const * m)
    OERotate(OEMCMolBase mcmol, float const * m)
    """
    return _oechem.OERotate(*args)

def OEEulerRotate(*args) -> "void":
    r"""
    OEEulerRotate(OEMolBase mol, double const * angles)
    OEEulerRotate(OEConfBase conf, double const * angles)
    OEEulerRotate(OEMCMolBase mcmol, double const * angles)
    """
    return _oechem.OEEulerRotate(*args)

def OECenter(*args) -> "void":
    r"""
    OECenter(OEMolBase arg1, double * t=None)
    OECenter(OEConfBase conf, double * t=None)
    OECenter(OEMCMolBase mcmol, double * t=None)
    """
    return _oechem.OECenter(*args)

def OEGetCenterOfMass(mol: "OEMolBase", com: "float *", weightAtoms: "bool"=False) -> "void":
    r"""OEGetCenterOfMass(OEMolBase mol, float * com, bool weightAtoms=False)"""
    return _oechem.OEGetCenterOfMass(mol, com, weightAtoms)

def OEWeightedRMSD(*args) -> "double":
    r"""
    OEWeightedRMSD(OEMolBase ref, OEMolBase fit, double const * weight, bool automorph=True, bool heavyOnly=True, bool overlay=False, double * rot=None, double * trans=None) -> double
    OEWeightedRMSD(OEMolBase ref, OEMolBase fit, double const * weight, OEMatchBase match, bool overlay=False, double * rot=None, double * trans=None) -> double
    OEWeightedRMSD(OEMolBase ref, OEMCMolBase fit, double const * weight, double * rmsdArray, bool automorph=True, bool heavyOnly=True, bool overlay=False, double * rot=None, double * trans=None) -> bool
    OEWeightedRMSD(OEMolBase ref, OEMCMolBase fit, double const * weight, double * rmsdArray, OEMatchBase match, bool overlay=False, double * rot=None, double * trans=None) -> bool
    OEWeightedRMSD(OEMolBase ref, OEMolBase fit, double const * weight, double * rmsdArray, OEMatchBase match, bool overlay=False, double * rot=None, double * trans=None) -> bool
    OEWeightedRMSD(float const * refcrds, float const * fitcrds, float const * weight, unsigned int size, bool overlay=False, double * rot=None, double * trans=None) -> double
    OEWeightedRMSD(double const * refcrds, double const * fitcrds, double const * weight, unsigned int size, bool overlay=False, double * rot=None, double * trans=None) -> double
    """
    return _oechem.OEWeightedRMSD(*args)

def OESymmetryNumber(*args) -> "bool":
    r"""
    OESymmetryNumber(OEMolBase mol, bool useH=True, double threshold=0.05) -> unsigned int
    OESymmetryNumber(OEMCMolBase mol, unsigned int * symCtArray, bool useH=True, double threshold=0.05) -> bool
    """
    return _oechem.OESymmetryNumber(*args)
class OETorsion(object):
    r"""Proxy of C++ OEChem::OETorsion class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    a = property(_oechem.OETorsion_a_get, _oechem.OETorsion_a_set, doc=r"""a : p.OEChem::OEAtomBase""")
    b = property(_oechem.OETorsion_b_get, _oechem.OETorsion_b_set, doc=r"""b : p.OEChem::OEAtomBase""")
    c = property(_oechem.OETorsion_c_get, _oechem.OETorsion_c_set, doc=r"""c : p.OEChem::OEAtomBase""")
    d = property(_oechem.OETorsion_d_get, _oechem.OETorsion_d_set, doc=r"""d : p.OEChem::OEAtomBase""")
    radians = property(_oechem.OETorsion_radians_get, _oechem.OETorsion_radians_set, doc=r"""radians : double""")

    def __init__(self, *args):
        r"""
        __init__(OETorsion self) -> OETorsion
        __init__(OETorsion self, OEAtomBase a1, OEAtomBase a2, OEAtomBase a3, OEAtomBase a4, double rads) -> OETorsion
        """
        _oechem.OETorsion_swiginit(self, _oechem.new_OETorsion(*args))
    __swig_destroy__ = _oechem.delete_OETorsion

# Register OETorsion in _oechem:
_oechem.OETorsion_swigregister(OETorsion)


def OEGetTorsions(*args) -> "OESystem::OEIterBase< OEChem::OETorsion > *":
    r"""OEGetTorsions(OEMolBase arg1, OEUnaryBondPred isRotor=static_cast< OESystem::OEUnaryPredicate< OEChem::OEBondBase > const & >(IsRotor())) -> OESystem::OEIterBase< OEChem::OETorsion >"""
    return _oechem.OEGetTorsions(*args)

def OERandomizeTorsions(*args) -> "bool":
    r"""
    OERandomizeTorsions(OEMolBase arg1, double maxRadians) -> bool
    OERandomizeTorsions(OEMolBase arg1, double maxRadians, OEUnaryBondPred isRotor) -> bool
    """
    return _oechem.OERandomizeTorsions(*args)

def OEInvertCenter(*args) -> "bool":
    r"""
    OEInvertCenter(OEMolBase mol, OEAtomBase atom) -> bool
    OEInvertCenter(OEMolBase mol, OEAtomBase atom, OEAtomBase ref1, OEAtomBase ref2) -> bool
    """
    return _oechem.OEInvertCenter(*args)

def OECalcPMI(*args) -> "bool":
    r"""
    OECalcPMI(double * pmi, OEMolBase mol) -> bool
    OECalcPMI(double * pmi, OEMolBase mol) -> bool
    OECalcPMI(double * pmi, OEConfBase mol) -> bool
    OECalcPMI(double * pmi, OEMCMolBase mol) -> bool
    """
    return _oechem.OECalcPMI(*args)

def OEGetRadiusOfGyration(*args) -> "bool":
    r"""
    OEGetRadiusOfGyration(double * rGyration, double const * pmi, OEMolBase mol) -> bool
    OEGetRadiusOfGyration(double * rGyration, double const * pmi, OEConfBase mol) -> bool
    OEGetRadiusOfGyration(double * rGyration, double const * pmi, OEMCMolBase mol) -> bool
    """
    return _oechem.OEGetRadiusOfGyration(*args)
class OETorsionIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OETorsion > 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__(OETorsionIter self) -> OETorsionIter
        __init__(OETorsionIter self, OETorsionIter rhs) -> OETorsionIter
        __init__(OETorsionIter self, OESystem::OEIterBase< OEChem::OETorsion > * rhs) -> OETorsionIter
        __init__(OETorsionIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OETorsion >::NonConstA > * rhs) -> OETorsionIter
        """
        _oechem.OETorsionIter_swiginit(self, _oechem.new_OETorsionIter(*args))
    __swig_destroy__ = _oechem.delete_OETorsionIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OETorsion > *":
        r"""Copy(OETorsionIter self) -> OESystem::OEIterBase< OEChem::OETorsion > *"""
        return _oechem.OETorsionIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OETorsionIter self, OESystem::OEIterBase< OEChem::OETorsion > * ib)
        Push(OETorsionIter self, OETorsionIter iter)
        """
        return _oechem.OETorsionIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEChem::OETorsion,OEChem::OETorsion > const &") -> "void":
        r"""Sort(OETorsionIter self, OESystem::OEBinaryPredicate< OEChem::OETorsion,OEChem::OETorsion > const & sort_criterion)"""
        return _oechem.OETorsionIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OETorsion > &":
        r"""ToFirst(OETorsionIter self) -> OETorsionIter"""
        return _oechem.OETorsionIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OETorsion > &":
        r"""ToLast(OETorsionIter self) -> OETorsionIter"""
        return _oechem.OETorsionIter_ToLast(self)

    def __ref__(self) -> "OEChem::OETorsion &":
        r"""__ref__(OETorsionIter self) -> OETorsion"""
        return _oechem.OETorsionIter___ref__(self)

    def IsValid(self):
      return _oechem.OETorsionIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OETorsionIter self) -> PyObject *"""
        return _oechem.OETorsionIter_next(self)

    def Target(self) -> "OEChem::OETorsion &":
        r"""Target(OETorsionIter self) -> OETorsion"""
        return _oechem.OETorsionIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OETorsion > &":
        r"""
        Next(OETorsionIter self) -> OETorsionIter
        Next(OETorsionIter self, int i) -> OETorsionIter
        """
        return _oechem.OETorsionIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OETorsion > &":
        r"""
        Prev(OETorsionIter self) -> OETorsionIter
        Prev(OETorsionIter self, int i) -> OETorsionIter
        """
        return _oechem.OETorsionIter_Prev(self, *args)

# Register OETorsionIter in _oechem:
_oechem.OETorsionIter_swigregister(OETorsionIter)

class oemolstreambase(object):
    r"""Proxy of C++ OEChem::oemolstreambase 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__ = _oechem.delete_oemolstreambase

    def SetFormat(self, format: "unsigned int") -> "bool":
        r"""SetFormat(oemolstreambase self, unsigned int format) -> bool"""
        return _oechem.oemolstreambase_SetFormat(self, format)

    def GetFormat(self) -> "unsigned int":
        r"""GetFormat(oemolstreambase self) -> unsigned int"""
        return _oechem.oemolstreambase_GetFormat(self)

    def SetFlavor(self, format: "unsigned int", flavor: "unsigned int") -> "bool":
        r"""SetFlavor(oemolstreambase self, unsigned int format, unsigned int flavor) -> bool"""
        return _oechem.oemolstreambase_SetFlavor(self, format, flavor)

    def GetFlavor(self, format: "unsigned int") -> "unsigned int":
        r"""GetFlavor(oemolstreambase self, unsigned int format) -> unsigned int"""
        return _oechem.oemolstreambase_GetFlavor(self, format)

    def HasBinaryIOHandler(self) -> "bool":
        r"""HasBinaryIOHandler(oemolstreambase self) -> bool"""
        return _oechem.oemolstreambase_HasBinaryIOHandler(self)

    def GetBinaryIOHandler(self) -> "OESystem::OEBinaryIOHandlerBase &":
        r"""GetBinaryIOHandler(oemolstreambase self) -> OEBinaryIOHandlerBase"""
        return _oechem.oemolstreambase_GetBinaryIOHandler(self)

    def InitializeBinaryIOHandler(self) -> "bool":
        r"""InitializeBinaryIOHandler(oemolstreambase self) -> bool"""
        return _oechem.oemolstreambase_InitializeBinaryIOHandler(self)

    def GetCSVHeader(self) -> "OEChem::OECSVHeader &":
        r"""GetCSVHeader(oemolstreambase self) -> OECSVHeader"""
        return _oechem.oemolstreambase_GetCSVHeader(self)

    def ClearCSVHeader(self) -> "void":
        r"""ClearCSVHeader(oemolstreambase self)"""
        return _oechem.oemolstreambase_ClearCSVHeader(self)

    def Getgz(self) -> "bool":
        r"""Getgz(oemolstreambase self) -> bool"""
        return _oechem.oemolstreambase_Getgz(self)

    def open(self, *args) -> "bool":
        r"""
        open(oemolstreambase self, char const * name) -> bool
        open(oemolstreambase self) -> bool
        """
        return _oechem.oemolstreambase_open(self, *args)

    def GetFileName(self) -> "std::string const &":
        r"""GetFileName(oemolstreambase self) -> std::string const &"""
        return _oechem.oemolstreambase_GetFileName(self)

    def close(self) -> "void":
        r"""close(oemolstreambase self)"""
        return _oechem.oemolstreambase_close(self)

# Register oemolstreambase in _oechem:
_oechem.oemolstreambase_swigregister(oemolstreambase)

class oemolistream(oemolstreambase):
    r"""Proxy of C++ OEChem::oemolistream 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__(oemolistream self) -> oemolistream
        __init__(oemolistream self, char const * arg2) -> oemolistream
        __init__(oemolistream self, std::string const & fn) -> oemolistream
        __init__(oemolistream self, oeistream arg2, bool owned=True) -> oemolistream
        """
        _oechem.oemolistream_swiginit(self, _oechem.new_oemolistream(*args))
    __swig_destroy__ = _oechem.delete_oemolistream

    def oeistreamref(self) -> "OEPlatform::oeistream &":
        r"""oeistreamref(oemolistream self) -> oeistream"""
        return _oechem.oemolistream_oeistreamref(self)

    def GetFileStream(self) -> "OEPlatform::oeifstream *":
        r"""GetFileStream(oemolistream self) -> oeifstream"""
        return _oechem.oemolistream_GetFileStream(self)

    def SetFormat(self, format: "unsigned int") -> "bool":
        r"""SetFormat(oemolistream self, unsigned int format) -> bool"""
        return _oechem.oemolistream_SetFormat(self, format)

    def SetFlavor(self, format: "unsigned int", flavor: "unsigned int") -> "bool":
        r"""SetFlavor(oemolistream self, unsigned int format, unsigned int flavor) -> bool"""
        return _oechem.oemolistream_SetFlavor(self, format, flavor)

    def Setgz(self, gz: "bool", sptr: "oeistream"=None, owned: "bool"=False) -> "bool":
        r"""Setgz(oemolistream self, bool gz, oeistream sptr=None, bool owned=False) -> bool"""
        return _oechem.oemolistream_Setgz(self, gz, sptr, owned)

    def close(self) -> "void":
        r"""close(oemolistream self)"""
        return _oechem.oemolistream_close(self)

    def getbyte(self) -> "int":
        r"""getbyte(oemolistream self) -> int"""
        return _oechem.oemolistream_getbyte(self)

    def skipbyte(self) -> "bool":
        r"""skipbyte(oemolistream self) -> bool"""
        return _oechem.oemolistream_skipbyte(self)

    def peekbyte(self) -> "int":
        r"""peekbyte(oemolistream self) -> int"""
        return _oechem.oemolistream_peekbyte(self)

    def skip(self, len: "oefpos_t") -> "bool":
        r"""skip(oemolistream self, oefpos_t len) -> bool"""
        return _oechem.oemolistream_skip(self, len)

    def skipline(self) -> "bool":
        r"""skipline(oemolistream self) -> bool"""
        return _oechem.oemolistream_skipline(self)

    def seek(self, pos: "oefpos_t") -> "void":
        r"""seek(oemolistream self, oefpos_t pos)"""
        return _oechem.oemolistream_seek(self, pos)

    def rewind(self) -> "void":
        r"""rewind(oemolistream self)"""
        return _oechem.oemolistream_rewind(self)

    def size(self) -> "oefpos_t":
        r"""size(oemolistream self) -> oefpos_t"""
        return _oechem.oemolistream_size(self)

    def tell(self) -> "oefpos_t":
        r"""tell(oemolistream self) -> oefpos_t"""
        return _oechem.oemolistream_tell(self)

    def eof(self) -> "bool":
        r"""eof(oemolistream self) -> bool"""
        return _oechem.oemolistream_eof(self)

    def IsValid(self):
      return _oechem.oemolistream___nonzero__(self)



    def getline(self, *args) -> "bool":
        r"""
        getline(oemolistream self, char * buffer, oesize_t max) -> bool
        getline(oemolistream self, std::string & buffer) -> bool
        """
        return _oechem.oemolistream_getline(self, *args)

    def read(self, buffer: "unsigned char *", len: "oesize_t") -> "bool":
        r"""read(oemolistream self, unsigned char * buffer, oesize_t len) -> bool"""
        return _oechem.oemolistream_read(self, buffer, len)

    def SetConfTest(self, arg2: "OEConfTestBase") -> "bool":
        r"""SetConfTest(oemolistream self, OEConfTestBase arg2) -> bool"""
        return _oechem.oemolistream_SetConfTest(self, arg2)

    def GetConfTest(self, *args) -> "OEChem::OEConfTestBase const &":
        r"""
        GetConfTest(oemolistream self) -> OEConfTestBase
        GetConfTest(oemolistream self) -> OEConfTestBase
        """
        return _oechem.oemolistream_GetConfTest(self, *args)

    def PeekNextMol(self) -> "OEChem::OEMolBase *":
        r"""PeekNextMol(oemolistream self) -> OEMolBase"""
        return _oechem.oemolistream_PeekNextMol(self)

    def GetNextMol(self) -> "OEChem::OEMolBase *":
        r"""GetNextMol(oemolistream self) -> OEMolBase"""
        return _oechem.oemolistream_GetNextMol(self)

    def PushNextMol(self, mol: "OEMolBase", pos: "oefpos_t"=0) -> "void":
        r"""PushNextMol(oemolistream self, OEMolBase mol, oefpos_t pos=0)"""
        return _oechem.oemolistream_PushNextMol(self, mol, pos)

    def HasNextMol(self) -> "bool":
        r"""HasNextMol(oemolistream self) -> bool"""
        return _oechem.oemolistream_HasNextMol(self)

    def ClearCache(self) -> "void":
        r"""ClearCache(oemolistream self)"""
        return _oechem.oemolistream_ClearCache(self)

    def GetMolBases(self) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
        r"""GetMolBases(oemolistream self) -> OESystem::OEIterBase< OEChem::OEMolBase > *"""
        return _oechem.oemolistream_GetMolBases(self)

    def GetMCMolBases(self, single: "bool"=False) -> "OESystem::OEIterBase< OEChem::OEMCMolBase > *":
        r"""GetMCMolBases(oemolistream self, bool single=False) -> OESystem::OEIterBase< OEChem::OEMCMolBase >"""
        return _oechem.oemolistream_GetMCMolBases(self, single)

    def GetReadFailureCt(self) -> "unsigned int":
        r"""GetReadFailureCt(oemolistream self) -> unsigned int"""
        return _oechem.oemolistream_GetReadFailureCt(self)

    def IncrementReadFailureCt(self) -> "void":
        r"""IncrementReadFailureCt(oemolistream self)"""
        return _oechem.oemolistream_IncrementReadFailureCt(self)

    def ResetReadFailureCt(self) -> "void":
        r"""ResetReadFailureCt(oemolistream self)"""
        return _oechem.oemolistream_ResetReadFailureCt(self)

    def SetTracer(self, tracer: "OETracerBase", owntracer: "bool") -> "bool":
        r"""SetTracer(oemolistream self, OETracerBase tracer, bool owntracer) -> bool"""
        return _oechem.oemolistream_SetTracer(self, tracer, owntracer)

    def GetMolBaseIter(self) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
        r"""GetMolBaseIter(oemolistream self) -> OESystem::OEIterBase< OEChem::OEMolBase > *"""
        return _oechem.oemolistream_GetMolBaseIter(self)

    def GetMCMolBaseIter(self, single: "bool"=False) -> "OESystem::OEIterBase< OEChem::OEMCMolBase > *":
        r"""GetMCMolBaseIter(oemolistream self, bool single=False) -> OESystem::OEIterBase< OEChem::OEMCMolBase >"""
        return _oechem.oemolistream_GetMCMolBaseIter(self, single)

    def GetOEGraphMols(self):
        mol=OEGraphMol()
        while OEReadMolecule(self, mol):
            yield mol



    def GetOEMols(self):
        mol=OEMol()
        while OEReadMolecule(self, mol):
            yield mol



    def __call__(self, *args):
        if not self.open(*args):
            raise IOError("Unable to open file %s" % args)
        return self



    def __enter__(self):
        return self



    def __exit__(self, *args, **kwargs):
        return self.close()



    def openstring(self, *args) -> "PyObject *":
        r"""
        openstring(oemolistream self, unsigned char const * buffer, oesize_t len) -> bool
        openstring(oemolistream self, PyObject * bytes) -> PyObject *
        """
        return _oechem.oemolistream_openstring(self, *args)

# Register oemolistream in _oechem:
_oechem.oemolistream_swigregister(oemolistream)

class oemolostream(oemolstreambase):
    r"""Proxy of C++ OEChem::oemolostream class."""

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

    def __init__(self, *args):
        r"""
        __init__(oemolostream self) -> oemolostream
        __init__(oemolostream self, char const * name) -> oemolostream
        __init__(oemolostream self, std::string const & fn) -> oemolostream
        __init__(oemolostream self, oeostream arg2, bool owned=True) -> oemolostream
        """
        _oechem.oemolostream_swiginit(self, _oechem.new_oemolostream(*args))

    def oeostreamref(self) -> "OEPlatform::oeostream &":
        r"""oeostreamref(oemolostream self) -> oeostream"""
        return _oechem.oemolostream_oeostreamref(self)

    def SetFormat(self, format: "unsigned int") -> "bool":
        r"""SetFormat(oemolostream self, unsigned int format) -> bool"""
        return _oechem.oemolostream_SetFormat(self, format)

    def SetFlavor(self, format: "unsigned int", flavor: "unsigned int") -> "bool":
        r"""SetFlavor(oemolostream self, unsigned int format, unsigned int flavor) -> bool"""
        return _oechem.oemolostream_SetFlavor(self, format, flavor)

    def Setgz(self, gz: "bool", sptr: "oeostream"=None, arg4: "bool"=False) -> "bool":
        r"""Setgz(oemolostream self, bool gz, oeostream sptr=None, bool arg4=False) -> bool"""
        return _oechem.oemolostream_Setgz(self, gz, sptr, arg4)

    def openstring(self, *args) -> "bool":
        r"""
        openstring(oemolostream self) -> bool
        openstring(oemolostream self, bool gzip) -> bool
        """
        return _oechem.oemolostream_openstring(self, *args)

    def close(self) -> "void":
        r"""close(oemolostream self)"""
        return _oechem.oemolostream_close(self)

    def IsValid(self):
      return _oechem.oemolostream___nonzero__(self)



    def tell(self) -> "oefpos_t":
        r"""tell(oemolostream self) -> oefpos_t"""
        return _oechem.oemolostream_tell(self)

    def put(self, c: "char") -> "OEChem::oemolostream &":
        r"""put(oemolostream self, char c) -> oemolostream"""
        return _oechem.oemolostream_put(self, c)

    def write(self, str: "char const *", size: "oesize_t") -> "OEChem::oemolostream &":
        r"""write(oemolostream self, char const * str, oesize_t size) -> oemolostream"""
        return _oechem.oemolostream_write(self, str, size)

    def flush(self) -> "OEChem::oemolostream &":
        r"""flush(oemolostream self) -> oemolostream"""
        return _oechem.oemolostream_flush(self)

    def SetString(self, *args) -> "void":
        r"""
        SetString(oemolostream self, char const * c)
        SetString(oemolostream self, unsigned char const * c, oesize_t size)
        """
        return _oechem.oemolostream_SetString(self, *args)

    def __call__(self, *args):
        if not self.open(*args):
            raise IOError("Unable to open file %s" % args)
        return self



    def __enter__(self):
        return self



    def __exit__(self, *args, **kwargs):
        return self.close()



    def GetString(self) -> "PyObject *":
        r"""GetString(oemolostream self) -> PyObject *"""
        return _oechem.oemolostream_GetString(self)

# Register oemolostream in _oechem:
_oechem.oemolostream_swigregister(oemolostream)


def OEWriteHeader(*args) -> "bool":
    r"""
    OEWriteHeader(oeostream str, OEHeader header, OEBinaryIOHandlerBase hand) -> bool
    OEWriteHeader(oemolostream str, OEHeader header) -> bool
    OEWriteHeader(oemolothread str, OEHeader header) -> bool
    """
    return _oechem.OEWriteHeader(*args)

def OEReadHeader(*args) -> "bool":
    r"""
    OEReadHeader(oeistream str, OEHeader header, OEBinaryIOHandlerBase hand) -> bool
    OEReadHeader(oemolistream str, OEHeader header) -> bool
    OEReadHeader(oemolithread str, OEHeader header) -> bool
    """
    return _oechem.OEReadHeader(*args)

def OEPreserveRotCompress(str: "oemolstreambase") -> "bool":
    r"""OEPreserveRotCompress(oemolstreambase str) -> bool"""
    return _oechem.OEPreserveRotCompress(str)

def OEReadMolFromString(*args) -> "bool":
    r"""
    OEReadMolFromString(OEMolBase outMol, std::string const & format, std::string const & input) -> bool
    OEReadMolFromString(OEMolBase outMol, unsigned int format, bool gzip, std::string const & input) -> bool
    OEReadMolFromString(OEMolBase outMol, unsigned int format, unsigned int flavor, bool gzip, std::string const & input) -> bool
    OEReadMolFromString(OEMCMolBase outMol, std::string const & format, std::string const & input) -> bool
    OEReadMolFromString(OEMCMolBase outMol, unsigned int format, bool gzip, std::string const & input) -> bool
    OEReadMolFromString(OEMCMolBase outMol, unsigned int format, unsigned int flavor, bool gzip, std::string const & input) -> bool
    """
    return _oechem.OEReadMolFromString(*args)

def OEWriteMolToString(*args) -> "bool":
    r"""
    OEWriteMolToString(std::string const & format, OEMolBase mol) -> std::string
    OEWriteMolToString(unsigned int format, bool gzip, OEMolBase mol) -> std::string
    OEWriteMolToString(unsigned int format, unsigned int flavor, bool gzip, OEMolBase mol) -> std::string
    OEWriteMolToString(std::string const & format, OEMCMolBase mol) -> std::string
    OEWriteMolToString(unsigned int format, bool gzip, OEMCMolBase mol) -> std::string
    OEWriteMolToString(unsigned int format, unsigned int flavor, bool gzip, OEMCMolBase mol) -> std::string
    OEWriteMolToString(std::string & data, unsigned int format, bool gzip, OEMolBase mol) -> bool
    OEWriteMolToString(std::string & data, unsigned int format, unsigned int flavor, bool gzip, OEMolBase mol) -> bool
    OEWriteMolToString(std::string & data, unsigned int format, bool gzip, OEMCMolBase mol) -> bool
    OEWriteMolToString(std::string & data, unsigned int format, unsigned int flavor, bool gzip, OEMCMolBase mol) -> bool
    """
    return _oechem.OEWriteMolToString(*args)

def OEReadJSONString(*args) -> "bool":
    r"""
    OEReadJSONString(OEMolBase mol, char const * json) -> bool
    OEReadJSONString(OEMCMolBase mol, char const * json) -> bool
    OEReadJSONString(OEMolBase mol, std::string const & json) -> bool
    OEReadJSONString(OEMCMolBase mol, std::string const & json) -> bool
    """
    return _oechem.OEReadJSONString(*args)

def OEWriteJSONString(*args) -> "std::string":
    r"""
    OEWriteJSONString(OEMolBase mol, unsigned int flavor=) -> std::string
    OEWriteJSONString(OEMCMolBase mol, unsigned int flavor=) -> std::string
    """
    return _oechem.OEWriteJSONString(*args)

def OEJSONToMol(*args) -> "bool":
    r"""
    OEJSONToMol(OEMolBase mol, char const * json) -> bool
    OEJSONToMol(OEMCMolBase mol, char const * json) -> bool
    OEJSONToMol(OEMolBase mol, std::string const & json) -> bool
    OEJSONToMol(OEMCMolBase mol, std::string const & json) -> bool
    """
    return _oechem.OEJSONToMol(*args)

def OEMolToJSON(*args) -> "std::string":
    r"""
    OEMolToJSON(OEMolBase mol, unsigned int flavor=) -> std::string
    OEMolToJSON(OEMCMolBase mol, unsigned int flavor=) -> std::string
    """
    return _oechem.OEMolToJSON(*args)

def OEWriteJSONFile(*args) -> "bool":
    r"""
    OEWriteJSONFile(oemolostream os, OEMolBase mol, unsigned int flavor=) -> bool
    OEWriteJSONFile(oemolostream os, OEMCMolBase mol, unsigned int flavor=) -> bool
    """
    return _oechem.OEWriteJSONFile(*args)

def OEReadJSONFile(*args) -> "bool":
    r"""
    OEReadJSONFile(oemolistream ifs, OEMolBase mol) -> bool
    OEReadJSONFile(oemolistream ifs, OEMCMolBase mol) -> bool
    """
    return _oechem.OEReadJSONFile(*args)

def GetFileFormat(format: "char const *") -> "unsigned int":
    r"""GetFileFormat(char const * format) -> unsigned int"""
    return _oechem.GetFileFormat(format)

def OEReadMolFromBytes(*args) -> "PyObject *":
    r"""
    OEReadMolFromBytes(OEMolBase mol, char const * format, PyObject * bytes) -> PyObject
    OEReadMolFromBytes(OEMCMolBase mol, char const * format, PyObject * bytes) -> PyObject
    OEReadMolFromBytes(OEMolBase mol, unsigned int format, bool gzip, PyObject * bytes) -> PyObject
    OEReadMolFromBytes(OEMolBase mol, unsigned int format, unsigned int flavor, bool gzip, PyObject * bytes) -> PyObject
    OEReadMolFromBytes(OEMCMolBase mol, unsigned int format, bool gzip, PyObject * bytes) -> PyObject
    OEReadMolFromBytes(OEMCMolBase mol, unsigned int format, unsigned int flavor, bool gzip, PyObject * bytes) -> PyObject *
    """
    return _oechem.OEReadMolFromBytes(*args)

def OEWriteMolToBytes(*args) -> "PyObject *":
    r"""
    OEWriteMolToBytes(char const * format, OEMolBase mol) -> PyObject
    OEWriteMolToBytes(char const * format, OEMCMolBase mol) -> PyObject
    OEWriteMolToBytes(unsigned int format, bool gzip, OEMolBase mol) -> PyObject
    OEWriteMolToBytes(unsigned int format, unsigned int flavor, bool gzip, OEMolBase mol) -> PyObject
    OEWriteMolToBytes(unsigned int format, bool gzip, OEMCMolBase mol) -> PyObject
    OEWriteMolToBytes(unsigned int format, unsigned int flavor, bool gzip, OEMCMolBase mol) -> PyObject *
    """
    return _oechem.OEWriteMolToBytes(*args)

def OEReadJSONBytes(*args) -> "PyObject *":
    r"""
    OEReadJSONBytes(OEMolBase mol, PyObject * bytes) -> PyObject
    OEReadJSONBytes(OEMCMolBase mol, PyObject * bytes) -> PyObject *
    """
    return _oechem.OEReadJSONBytes(*args)

def OEWriteJSONBytes(*args) -> "PyObject *":
    r"""
    OEWriteJSONBytes(OEMolBase mol, unsigned int flavor=) -> PyObject
    OEWriteJSONBytes(OEMCMolBase mol, unsigned int flavor=) -> PyObject
    """
    return _oechem.OEWriteJSONBytes(*args)

def OEJSONBytesToMol(*args) -> "PyObject *":
    r"""
    OEJSONBytesToMol(OEMolBase mol, PyObject * json) -> PyObject
    OEJSONBytesToMol(OEMCMolBase mol, PyObject * json) -> PyObject *
    """
    return _oechem.OEJSONBytesToMol(*args)

def OEMolToJSONBytes(*args) -> "PyObject *":
    r"""
    OEMolToJSONBytes(OEMCMolBase mol, unsigned int flavor=) -> PyObject
    OEMolToJSONBytes(OEMolBase mol, unsigned int flavor=) -> PyObject
    """
    return _oechem.OEMolToJSONBytes(*args)

def OEReadDesignUnitFromBytes(du: "OEDesignUnit", bytes: "PyObject *") -> "PyObject *":
    r"""OEReadDesignUnitFromBytes(OEDesignUnit du, PyObject * bytes) -> PyObject *"""
    return _oechem.OEReadDesignUnitFromBytes(du, bytes)

def OEWriteDesignUnitToBytes(du: "OEDesignUnit") -> "PyObject *":
    r"""OEWriteDesignUnitToBytes(OEDesignUnit du) -> PyObject *"""
    return _oechem.OEWriteDesignUnitToBytes(du)

def OEFixUnicode(*args) -> "void":
    r"""
    OEFixUnicode(OEMolBase mol)
    OEFixUnicode(OEMCMolBase mol)
    """
    return _oechem.OEFixUnicode(*args)

def OEJSONBytesToBase(c: "OEBase", json: "PyObject *") -> "PyObject *":
    r"""OEJSONBytesToBase(OEBase c, PyObject * json) -> PyObject *"""
    return _oechem.OEJSONBytesToBase(c, json)

def OEBaseToJSONBytes(c: "OEBase", flavor: "unsigned int"=0) -> "PyObject *":
    r"""OEBaseToJSONBytes(OEBase c, unsigned int flavor=0) -> PyObject"""
    return _oechem.OEBaseToJSONBytes(c, flavor)
class oemolthreadbase(oemolstreambase):
    r"""Proxy of C++ OEChem::oemolthreadbase 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
    PROTECTED_BUFFER_SIZE = _oechem.oemolthreadbase_PROTECTED_BUFFER_SIZE
    
    __swig_destroy__ = _oechem.delete_oemolthreadbase

    def IsValid(self):
      return _oechem.oemolthreadbase___nonzero__(self)



    def GetCSVHeaderMutex(self) -> "OEPlatform::OEMutex &":
        r"""GetCSVHeaderMutex(oemolthreadbase self) -> OEPlatform::OEMutex &"""
        return _oechem.oemolthreadbase_GetCSVHeaderMutex(self)

    def close(self) -> "void":
        r"""close(oemolthreadbase self)"""
        return _oechem.oemolthreadbase_close(self)

    def GetMol(self) -> "PyObject *":
        r"""GetMol(oemolthreadbase self) -> PyObject *"""
        return _oechem.oemolthreadbase_GetMol(self)

    def PeekMol(self) -> "PyObject *":
        r"""PeekMol(oemolthreadbase self) -> PyObject *"""
        return _oechem.oemolthreadbase_PeekMol(self)

    def PutMol(self, bytes: "PyObject *") -> "PyObject *":
        r"""PutMol(oemolthreadbase self, PyObject * bytes) -> PyObject *"""
        return _oechem.oemolthreadbase_PutMol(self, bytes)

# Register oemolthreadbase in _oechem:
_oechem.oemolthreadbase_swigregister(oemolthreadbase)

class oemolithread(oemolthreadbase):
    r"""Proxy of C++ OEChem::oemolithread 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__(oemolithread self) -> oemolithread
        __init__(oemolithread self, char const * fn) -> oemolithread
        __init__(oemolithread self, std::string const & fn) -> oemolithread
        """
        _oechem.oemolithread_swiginit(self, _oechem.new_oemolithread(*args))
    __swig_destroy__ = _oechem.delete_oemolithread

    def close(self) -> "void":
        r"""close(oemolithread self)"""
        return _oechem.oemolithread_close(self)

    def SetFormat(self, format: "unsigned int") -> "bool":
        r"""SetFormat(oemolithread self, unsigned int format) -> bool"""
        return _oechem.oemolithread_SetFormat(self, format)

    def SetFlavor(self, format: "unsigned int", flavor: "unsigned int") -> "bool":
        r"""SetFlavor(oemolithread self, unsigned int format, unsigned int flavor) -> bool"""
        return _oechem.oemolithread_SetFlavor(self, format, flavor)

    def GetIStream(self) -> "OEPlatform::oeistream *":
        r"""GetIStream(oemolithread self) -> oeistream"""
        return _oechem.oemolithread_GetIStream(self)

    def GetMolStream(self) -> "OEChem::oemolistream *":
        r"""GetMolStream(oemolithread self) -> oemolistream"""
        return _oechem.oemolithread_GetMolStream(self)

    def GetOEGraphMols(self):
        mol=OEGraphMol()
        while OEReadMolecule(self, mol):
            yield mol



    def GetOEMols(self):
        mol=OEMol()
        while OEReadMolecule(self, mol):
            yield mol



    def __call__(self, *args):
        if not self.open(*args):
            raise IOError("Unable to open file %s" % args)
        return self



    def __enter__(self):
        return self



    def __exit__(self, *args, **kwargs):
        return self.close()



    def GetMolData(self):
        data = self.GetMol()
        while data is not None:
            yield data
            data = self.GetMol()



    def openstring(self, *args) -> "PyObject *":
        r"""
        openstring(oemolithread self, unsigned char const * buffer, oesize_t len, bool gz=False) -> bool
        openstring(oemolithread self, PyObject * bytes, bool gz=False) -> PyObject
        """
        return _oechem.oemolithread_openstring(self, *args)

# Register oemolithread in _oechem:
_oechem.oemolithread_swigregister(oemolithread)

class oemolothread(oemolthreadbase):
    r"""Proxy of C++ OEChem::oemolothread 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__(oemolothread self) -> oemolothread
        __init__(oemolothread self, char const * fn) -> oemolothread
        __init__(oemolothread self, std::string const & fn) -> oemolothread
        """
        _oechem.oemolothread_swiginit(self, _oechem.new_oemolothread(*args))
    __swig_destroy__ = _oechem.delete_oemolothread

    def close(self) -> "void":
        r"""close(oemolothread self)"""
        return _oechem.oemolothread_close(self)

    def openstring(self, gz: "bool"=False) -> "bool":
        r"""openstring(oemolothread self, bool gz=False) -> bool"""
        return _oechem.oemolothread_openstring(self, gz)

    def SetFormat(self, format: "unsigned int") -> "bool":
        r"""SetFormat(oemolothread self, unsigned int format) -> bool"""
        return _oechem.oemolothread_SetFormat(self, format)

    def SetFlavor(self, format: "unsigned int", flavor: "unsigned int") -> "bool":
        r"""SetFlavor(oemolothread self, unsigned int format, unsigned int flavor) -> bool"""
        return _oechem.oemolothread_SetFlavor(self, format, flavor)

    def GetOStream(self) -> "OEPlatform::oeostream *":
        r"""GetOStream(oemolothread self) -> oeostream"""
        return _oechem.oemolothread_GetOStream(self)

    def GetMolStream(self) -> "OEChem::oemolostream *":
        r"""GetMolStream(oemolothread self) -> oemolostream"""
        return _oechem.oemolothread_GetMolStream(self)

    def __call__(self, *args):
        if not self.open(*args):
            raise IOError("Unable to open file %s" % args)
        return self



    def __enter__(self):
        return self



    def __exit__(self, *args, **kwargs):
        return self.close()



    def GetString(self) -> "PyObject *":
        r"""GetString(oemolothread self) -> PyObject *"""
        return _oechem.oemolothread_GetString(self)

# Register oemolothread in _oechem:
_oechem.oemolothread_swigregister(oemolothread)


def OEReadMolecule(*args) -> "bool":
    r"""
    OEReadMolecule(oemolistream ifs, OEMCMolBase mol) -> bool
    OEReadMolecule(oemolistream ifs, OEQMolBase mol) -> bool
    OEReadMolecule(oemolistream ifs, OEMolBase mol) -> bool
    OEReadMolecule(oemolistream ifs, OEChem::OEMol & mol) -> bool
    OEReadMolecule(oemolistream ifs, OEChem::OEQMol & mol) -> bool
    OEReadMolecule(oemolistream ifs, OEChem::OEGraphMol & mol) -> bool
    OEReadMolecule(oemolithread ifs, OEMolBase mol) -> bool
    OEReadMolecule(oemolithread ifs, OEMCMolBase mol) -> bool
    OEReadMolecule(oemolithread ifs, OEQMolBase mol) -> bool
    """
    return _oechem.OEReadMolecule(*args)

def OEWriteMolecule(*args) -> "unsigned int":
    r"""
    OEWriteMolecule(oemolostream ofs, OEMCMolBase mol) -> unsigned int
    OEWriteMolecule(oemolostream ofs, OEQMolBase mol) -> unsigned int
    OEWriteMolecule(oemolostream ofs, OEMolBase mol) -> unsigned int
    OEWriteMolecule(oemolostream ofs, OEChem::OEMol & mol) -> unsigned int
    OEWriteMolecule(oemolostream ofs, OEChem::OEQMol & mol) -> unsigned int
    OEWriteMolecule(oemolostream ofs, OEChem::OEGraphMol & mol) -> unsigned int
    OEWriteMolecule(oemolothread ofs, OEMolBase mol) -> unsigned int
    OEWriteMolecule(oemolothread arg1, OEMCMolBase arg2) -> unsigned int
    OEWriteMolecule(oemolothread arg1, OEQMolBase arg2) -> unsigned int
    """
    return _oechem.OEWriteMolecule(*args)
class OETokenizerBase(object):
    r"""Proxy of C++ OEChem::OETokenizerBase 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__ = _oechem.delete_OETokenizerBase

    def GetNextToken(self, ifs: "oeistream") -> "std::string *":
        r"""GetNextToken(OETokenizerBase self, oeistream ifs) -> std::string *"""
        return _oechem.OETokenizerBase_GetNextToken(self, ifs)

    def ParseTitle(self, data: "std::string const &") -> "std::string":
        r"""ParseTitle(OETokenizerBase self, std::string const & data) -> std::string"""
        return _oechem.OETokenizerBase_ParseTitle(self, data)

    def ReadNextToken(self, ifs: "oeistream", tags: "std::set< std::string > &") -> "bool":
        r"""ReadNextToken(OETokenizerBase self, oeistream ifs, std::set< std::string > & tags) -> bool"""
        return _oechem.OETokenizerBase_ReadNextToken(self, ifs, tags)

# Register OETokenizerBase in _oechem:
_oechem.OETokenizerBase_swigregister(OETokenizerBase)


def OEHasTokenizer(fmt: "unsigned int") -> "bool":
    r"""OEHasTokenizer(unsigned int fmt) -> bool"""
    return _oechem.OEHasTokenizer(fmt)

def OEGetTokenizer(fmt: "unsigned int", flavor: "unsigned int") -> "OEChem::OETokenizerBase *":
    r"""OEGetTokenizer(unsigned int fmt, unsigned int flavor) -> OETokenizerBase"""
    return _oechem.OEGetTokenizer(fmt, flavor)

def OECreateSmiString(*args) -> "void":
    r"""
    OECreateSmiString(OEMolBase mol, unsigned int flavor=) -> std::string
    OECreateSmiString(std::string & str, OEMolBase mol, unsigned int flavor=, std::pair< OEChem::OEAtomBase const *,OEChem::OEAtomBase const * > * atmord=(std::pair< OEAtomBase const *,OEAtomBase const * > *) 0)
    """
    return _oechem.OECreateSmiString(*args)

def OEGetSmiStringOrder(*args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
    r"""OEGetSmiStringOrder(OEMolBase mol, unsigned int flavor=) -> OESystem::OEIterBase< OEChem::OEAtomBase >"""
    return _oechem.OEGetSmiStringOrder(*args)

def OECreateCanSmiString(*args) -> "void":
    r"""
    OECreateCanSmiString(OEMolBase mol) -> std::string
    OECreateCanSmiString(std::string & str, OEMolBase mol)
    """
    return _oechem.OECreateCanSmiString(*args)

def OECreateIsoSmiString(*args) -> "void":
    r"""
    OECreateIsoSmiString(OEMolBase mol) -> std::string
    OECreateIsoSmiString(std::string & str, OEMolBase mol)
    """
    return _oechem.OECreateIsoSmiString(*args)

def OECreateAbsSmiString(*args) -> "void":
    r"""
    OECreateAbsSmiString(OEMolBase mol) -> std::string
    OECreateAbsSmiString(std::string & str, OEMolBase mol, std::pair< OEChem::OEAtomBase const *,OEChem::OEAtomBase const * > * atmord=(std::pair< OEAtomBase const *,OEAtomBase const * > *) 0)
    """
    return _oechem.OECreateAbsSmiString(*args)

def OECreateSlnString(*args) -> "void":
    r"""
    OECreateSlnString(OEMolBase mol, unsigned int flavor=) -> std::string
    OECreateSlnString(std::string & str, OEMolBase mol, unsigned int flavor=)
    """
    return _oechem.OECreateSlnString(*args)

def OENormalize(*args) -> "void":
    r"""OENormalize(OEMolBase mol, OEChem::OENormModel const model=OENormModelDefault)"""
    return _oechem.OENormalize(*args)

def OEInitDefaultHandler(hand: "OEBinaryIOHandlerBase", compressMCMol: "bool"=False, useZstd: "bool"=False) -> "bool":
    r"""OEInitDefaultHandler(OEBinaryIOHandlerBase hand, bool compressMCMol=False, bool useZstd=False) -> bool"""
    return _oechem.OEInitDefaultHandler(hand, compressMCMol, useZstd)

def OEInitHandler(hand: "OEBinaryIOHandlerBase", readOptHex: "char const *", writeOptHex: "char const *") -> "bool":
    r"""OEInitHandler(OEBinaryIOHandlerBase hand, char const * readOptHex, char const * writeOptHex) -> bool"""
    return _oechem.OEInitHandler(hand, readOptHex, writeOptHex)

def OEBDefaultOpts() -> "char const *":
    r"""OEBDefaultOpts() -> char const *"""
    return _oechem.OEBDefaultOpts()

def OEBGZipCompressOpts() -> "char const *":
    r"""OEBGZipCompressOpts() -> char const *"""
    return _oechem.OEBGZipCompressOpts()

def OEBRotCompressOpts() -> "char const *":
    r"""OEBRotCompressOpts() -> char const *"""
    return _oechem.OEBRotCompressOpts()

def OEBAtomIntTypeOpts() -> "char const *":
    r"""OEBAtomIntTypeOpts() -> char const *"""
    return _oechem.OEBAtomIntTypeOpts()

def OEBCompressConfTorsionsOpts() -> "char const *":
    r"""OEBCompressConfTorsionsOpts() -> char const *"""
    return _oechem.OEBCompressConfTorsionsOpts()

def OEClearRotorCompressData(mol: "OEMCMolBase") -> "bool":
    r"""OEClearRotorCompressData(OEMCMolBase mol) -> bool"""
    return _oechem.OEClearRotorCompressData(mol)

def OEPRECompress(*args) -> "bool":
    r"""
    OEPRECompress(oemolstreambase str) -> bool
    OEPRECompress(OEChem::OEMol & dst, OEMCMolBase src) -> bool
    """
    return _oechem.OEPRECompress(*args)

def OESweepRotorCompressHydrogens(mol: "OEMCMolBase", retainPolar: "bool"=False, retainStereo: "bool"=False, retainIsotope: "bool"=True) -> "bool":
    r"""OESweepRotorCompressHydrogens(OEMCMolBase mol, bool retainPolar=False, bool retainStereo=False, bool retainIsotope=True) -> bool"""
    return _oechem.OESweepRotorCompressHydrogens(mol, retainPolar, retainStereo, retainIsotope)
class OEMolBaseReadFxnT(OEReadFxnBase):
    r"""Proxy of C++ OESystem::OEReadFxn< OEChem::OEMolBase > 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

    def __call__(self, arg2: "oeistream", arg3: "OEMolBase", arg4: "OEULongLong", arg5: "OEBinaryIOHandlerBase") -> "unsigned int":
        r"""__call__(OEMolBaseReadFxnT self, oeistream arg2, OEMolBase arg3, OEULongLong arg4, OEBinaryIOHandlerBase arg5) -> unsigned int"""
        return _oechem.OEMolBaseReadFxnT___call__(self, arg2, arg3, arg4, arg5)
    __swig_destroy__ = _oechem.delete_OEMolBaseReadFxnT

# Register OEMolBaseReadFxnT in _oechem:
_oechem.OEMolBaseReadFxnT_swigregister(OEMolBaseReadFxnT)
OENormModelDefault = cvar.OENormModelDefault
OENormModelSymmetry = cvar.OENormModelSymmetry
OENormModelPhysical = cvar.OENormModelPhysical
OENormModelHyperVal = cvar.OENormModelHyperVal
OENormModelDative = cvar.OENormModelDative

class OEMolBaseWriteFxnT(OEWriteFxnBase):
    r"""Proxy of C++ OESystem::OEWriteFxn< OEChem::OEMolBase > 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

    def __call__(self, arg2: "oeostream", arg3: "OEMolBase", arg4: "OEBinaryIOHandlerBase") -> "bool":
        r"""__call__(OEMolBaseWriteFxnT self, oeostream arg2, OEMolBase arg3, OEBinaryIOHandlerBase arg4) -> bool"""
        return _oechem.OEMolBaseWriteFxnT___call__(self, arg2, arg3, arg4)
    __swig_destroy__ = _oechem.delete_OEMolBaseWriteFxnT

# Register OEMolBaseWriteFxnT in _oechem:
_oechem.OEMolBaseWriteFxnT_swigregister(OEMolBaseWriteFxnT)

class OEMCMolBaseReadFxnT(OEReadFxnBase):
    r"""Proxy of C++ OESystem::OEReadFxn< OEChem::OEMCMolBase > 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

    def __call__(self, arg2: "oeistream", arg3: "OEMCMolBase", arg4: "OEULongLong", arg5: "OEBinaryIOHandlerBase") -> "unsigned int":
        r"""__call__(OEMCMolBaseReadFxnT self, oeistream arg2, OEMCMolBase arg3, OEULongLong arg4, OEBinaryIOHandlerBase arg5) -> unsigned int"""
        return _oechem.OEMCMolBaseReadFxnT___call__(self, arg2, arg3, arg4, arg5)
    __swig_destroy__ = _oechem.delete_OEMCMolBaseReadFxnT

# Register OEMCMolBaseReadFxnT in _oechem:
_oechem.OEMCMolBaseReadFxnT_swigregister(OEMCMolBaseReadFxnT)

class OEMCMolBaseWriteFxnT(OEWriteFxnBase):
    r"""Proxy of C++ OESystem::OEWriteFxn< OEChem::OEMCMolBase > 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

    def __call__(self, arg2: "oeostream", arg3: "OEMCMolBase", arg4: "OEBinaryIOHandlerBase") -> "bool":
        r"""__call__(OEMCMolBaseWriteFxnT self, oeostream arg2, OEMCMolBase arg3, OEBinaryIOHandlerBase arg4) -> bool"""
        return _oechem.OEMCMolBaseWriteFxnT___call__(self, arg2, arg3, arg4)
    __swig_destroy__ = _oechem.delete_OEMCMolBaseWriteFxnT

# Register OEMCMolBaseWriteFxnT in _oechem:
_oechem.OEMCMolBaseWriteFxnT_swigregister(OEMCMolBaseWriteFxnT)


def OESmartsLexReplace(*args) -> "bool":
    r"""
    OESmartsLexReplace(std::string const & pattern, PyObject * input) -> PyObject
    OESmartsLexReplace(std::string & arg1, std::vector< std::pair< std::string,std::string >,std::allocator< std::pair< std::string,std::string > > > const & arg2) -> bool
    """
    return _oechem.OESmartsLexReplace(*args)

def OESetDimensionFromCoords(arg1: "OEMolBase") -> "void":
    r"""OESetDimensionFromCoords(OEMolBase arg1)"""
    return _oechem.OESetDimensionFromCoords(arg1)

def OEGetDimensionFromCoords(arg1: "OEMolBase") -> "unsigned int":
    r"""OEGetDimensionFromCoords(OEMolBase arg1) -> unsigned int"""
    return _oechem.OEGetDimensionFromCoords(arg1)

def OESetMDLDimensionFromCoords(arg1: "OEMolBase") -> "void":
    r"""OESetMDLDimensionFromCoords(OEMolBase arg1)"""
    return _oechem.OESetMDLDimensionFromCoords(arg1)

def OEGetMDLDimensionFromCoords(arg1: "OEMolBase") -> "unsigned int":
    r"""OEGetMDLDimensionFromCoords(OEMolBase arg1) -> unsigned int"""
    return _oechem.OEGetMDLDimensionFromCoords(arg1)

def OECopyMol(*args) -> "void":
    r"""
    OECopyMol(OEMolBase dst, OEMolBase src, OEChem::OEAtomBase ** atommap=None, OEChem::OEBondBase ** bondmap=None)
    OECopyMol(OEMCMolBase dst, OEMCMolBase src, OEChem::OEAtomBase ** atommap=None, OEChem::OEBondBase ** bondmap=None)
    """
    return _oechem.OECopyMol(*args)
class OEParseSmilesOptions(object):
    r"""Proxy of C++ OEChem::OEParseSmilesOptions 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, canon: "bool"=False, strict: "bool"=False, quiet: "bool"=False, cxsmiles: "bool"=False):
        r"""__init__(OEParseSmilesOptions self, bool canon=False, bool strict=False, bool quiet=False, bool cxsmiles=False) -> OEParseSmilesOptions"""
        _oechem.OEParseSmilesOptions_swiginit(self, _oechem.new_OEParseSmilesOptions(canon, strict, quiet, cxsmiles))

    def GetCanon(self) -> "bool":
        r"""GetCanon(OEParseSmilesOptions self) -> bool"""
        return _oechem.OEParseSmilesOptions_GetCanon(self)

    def SetCanon(self, c: "bool") -> "void":
        r"""SetCanon(OEParseSmilesOptions self, bool c)"""
        return _oechem.OEParseSmilesOptions_SetCanon(self, c)

    def GetStrict(self) -> "bool":
        r"""GetStrict(OEParseSmilesOptions self) -> bool"""
        return _oechem.OEParseSmilesOptions_GetStrict(self)

    def SetStrict(self, s: "bool") -> "void":
        r"""SetStrict(OEParseSmilesOptions self, bool s)"""
        return _oechem.OEParseSmilesOptions_SetStrict(self, s)

    def GetQuiet(self) -> "bool":
        r"""GetQuiet(OEParseSmilesOptions self) -> bool"""
        return _oechem.OEParseSmilesOptions_GetQuiet(self)

    def SetQuiet(self, q: "bool") -> "void":
        r"""SetQuiet(OEParseSmilesOptions self, bool q)"""
        return _oechem.OEParseSmilesOptions_SetQuiet(self, q)

    def GetCXSMILES(self) -> "bool":
        r"""GetCXSMILES(OEParseSmilesOptions self) -> bool"""
        return _oechem.OEParseSmilesOptions_GetCXSMILES(self)

    def SetCXSMILES(self, ste: "bool") -> "void":
        r"""SetCXSMILES(OEParseSmilesOptions self, bool ste)"""
        return _oechem.OEParseSmilesOptions_SetCXSMILES(self, ste)
    __swig_destroy__ = _oechem.delete_OEParseSmilesOptions

# Register OEParseSmilesOptions in _oechem:
_oechem.OEParseSmilesOptions_swigregister(OEParseSmilesOptions)


def OEParseSmiles(*args) -> "bool":
    r"""
    OEParseSmiles(OEMolBase mol, char const * str, bool canon=False, bool strict=False) -> bool
    OEParseSmiles(OEMolBase mol, std::string const & str, bool canon=False, bool strict=False) -> bool
    OEParseSmiles(OEMolBase mol, char const * str, OEParseSmilesOptions options) -> bool
    OEParseSmiles(OEMolBase mol, std::string const & str, OEParseSmilesOptions options) -> bool
    """
    return _oechem.OEParseSmiles(*args)

def OESmilesAtomCount(*args) -> "unsigned int":
    r"""
    OESmilesAtomCount(std::string const & str) -> unsigned int
    OESmilesAtomCount(char const * str) -> unsigned int
    """
    return _oechem.OESmilesAtomCount(*args)

def OEParseSmarts(*args) -> "bool":
    r"""
    OEParseSmarts(OEQMolBase arg1, char const * arg2, unsigned int opt=) -> bool
    OEParseSmarts(OEQMolBase arg1, char const * arg2, OEVectorBindings vb, unsigned int opt=) -> bool
    """
    return _oechem.OEParseSmarts(*args)

def OEParseSmirks(*args) -> "bool":
    r"""
    OEParseSmirks(OEQMolBase arg1, char const * arg2, unsigned int opt=) -> bool
    OEParseSmirks(OEQMolBase arg1, char const * arg2, OEVectorBindings vb, unsigned int opt=) -> bool
    """
    return _oechem.OEParseSmirks(*args)
class OEVectorBindings(object):
    r"""Proxy of C++ OEChem::OEVectorBindings class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEVectorBindings self) -> OEVectorBindings
        __init__(OEVectorBindings self, OEVectorBindings arg2) -> OEVectorBindings
        """
        _oechem.OEVectorBindings_swiginit(self, _oechem.new_OEVectorBindings(*args))

    def Add(self, label: "char const *", pattern: "char const *") -> "bool":
        r"""Add(OEVectorBindings self, char const * label, char const * pattern) -> bool"""
        return _oechem.OEVectorBindings_Add(self, label, pattern)

    def Get(self, expr: "OEChem::OEExprBase const *&", label: "char const *&", smarts: "char const *") -> "bool":
        r"""Get(OEVectorBindings self, OEChem::OEExprBase const *& expr, char const *& label, char const * smarts) -> bool"""
        return _oechem.OEVectorBindings_Get(self, expr, label, smarts)

# Register OEVectorBindings in _oechem:
_oechem.OEVectorBindings_swigregister(OEVectorBindings)


def OEDetermineReactants(mol: "OEMolBase", parts: "unsigned int *") -> "unsigned int":
    r"""OEDetermineReactants(OEMolBase mol, unsigned int * parts) -> unsigned int"""
    return _oechem.OEDetermineReactants(mol, parts)
class OEUniMolecularRxnOptions(object):
    r"""Proxy of C++ OEChem::OEUniMolecularRxnOptions 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__(OEUniMolecularRxnOptions self) -> OEUniMolecularRxnOptions
        __init__(OEUniMolecularRxnOptions self, OEUniMolecularRxnOptions arg2) -> OEUniMolecularRxnOptions
        """
        _oechem.OEUniMolecularRxnOptions_swiginit(self, _oechem.new_OEUniMolecularRxnOptions(*args))
    __swig_destroy__ = _oechem.delete_OEUniMolecularRxnOptions

    def SetStrictSmirks(self, arg2: "bool") -> "bool":
        r"""SetStrictSmirks(OEUniMolecularRxnOptions self, bool arg2) -> bool"""
        return _oechem.OEUniMolecularRxnOptions_SetStrictSmirks(self, arg2)

    def GetStrictSmirks(self) -> "bool":
        r"""GetStrictSmirks(OEUniMolecularRxnOptions self) -> bool"""
        return _oechem.OEUniMolecularRxnOptions_GetStrictSmirks(self)

    def SetValidateKekule(self, arg2: "bool") -> "bool":
        r"""SetValidateKekule(OEUniMolecularRxnOptions self, bool arg2) -> bool"""
        return _oechem.OEUniMolecularRxnOptions_SetValidateKekule(self, arg2)

    def GetValidateKekule(self) -> "bool":
        r"""GetValidateKekule(OEUniMolecularRxnOptions self) -> bool"""
        return _oechem.OEUniMolecularRxnOptions_GetValidateKekule(self)

    def SetClearCoordinates(self, arg2: "bool") -> "bool":
        r"""SetClearCoordinates(OEUniMolecularRxnOptions self, bool arg2) -> bool"""
        return _oechem.OEUniMolecularRxnOptions_SetClearCoordinates(self, arg2)

    def GetClearCoordinates(self) -> "bool":
        r"""GetClearCoordinates(OEUniMolecularRxnOptions self) -> bool"""
        return _oechem.OEUniMolecularRxnOptions_GetClearCoordinates(self)

    def SetFixValence(self, arg2: "unsigned int") -> "bool":
        r"""SetFixValence(OEUniMolecularRxnOptions self, unsigned int arg2) -> bool"""
        return _oechem.OEUniMolecularRxnOptions_SetFixValence(self, arg2)

    def GetFixValence(self) -> "unsigned int":
        r"""GetFixValence(OEUniMolecularRxnOptions self) -> unsigned int"""
        return _oechem.OEUniMolecularRxnOptions_GetFixValence(self)

    def SetAlteredTag(self, tag: "std::string const &") -> "bool":
        r"""SetAlteredTag(OEUniMolecularRxnOptions self, std::string const & tag) -> bool"""
        return _oechem.OEUniMolecularRxnOptions_SetAlteredTag(self, tag)

    def GetAlteredTag(self) -> "std::string":
        r"""GetAlteredTag(OEUniMolecularRxnOptions self) -> std::string"""
        return _oechem.OEUniMolecularRxnOptions_GetAlteredTag(self)

    def SetMaxMatches(self, maxMatches: "unsigned int") -> "bool":
        r"""SetMaxMatches(OEUniMolecularRxnOptions self, unsigned int maxMatches) -> bool"""
        return _oechem.OEUniMolecularRxnOptions_SetMaxMatches(self, maxMatches)

    def GetMaxMatches(self) -> "unsigned int":
        r"""GetMaxMatches(OEUniMolecularRxnOptions self) -> unsigned int"""
        return _oechem.OEUniMolecularRxnOptions_GetMaxMatches(self)

    def GetImpl(self, *args) -> "OEChem::OEUniMolecularRxnOptionsImpl const *":
        r"""
        GetImpl(OEUniMolecularRxnOptions self) -> OEChem::OEUniMolecularRxnOptionsImpl
        GetImpl(OEUniMolecularRxnOptions self) -> OEChem::OEUniMolecularRxnOptionsImpl const *
        """
        return _oechem.OEUniMolecularRxnOptions_GetImpl(self, *args)

# Register OEUniMolecularRxnOptions in _oechem:
_oechem.OEUniMolecularRxnOptions_swigregister(OEUniMolecularRxnOptions)

class OEUniMolecularRxn(object):
    r"""Proxy of C++ OEChem::OEUniMolecularRxn 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__(OEUniMolecularRxn self) -> OEUniMolecularRxn
        __init__(OEUniMolecularRxn self, char const * c, bool strictSmirks) -> OEUniMolecularRxn
        __init__(OEUniMolecularRxn self, char const * c, OEUniMolecularRxnOptions opts=OEChem::OEUniMolecularRxnOptions()) -> OEUniMolecularRxn
        __init__(OEUniMolecularRxn self, OEUniMolecularRxn arg2) -> OEUniMolecularRxn
        """
        _oechem.OEUniMolecularRxn_swiginit(self, _oechem.new_OEUniMolecularRxn(*args))
    __swig_destroy__ = _oechem.delete_OEUniMolecularRxn

    def Init(self, *args) -> "bool":
        r"""
        Init(OEUniMolecularRxn self, char const * c, bool strictSmirks) -> bool
        Init(OEUniMolecularRxn self, OEQMolBase arg2, bool strictSmirks) -> bool
        Init(OEUniMolecularRxn self, char const * c, OEUniMolecularRxnOptions opts=OEChem::OEUniMolecularRxnOptions()) -> bool
        Init(OEUniMolecularRxn self, OEQMolBase arg2, OEUniMolecularRxnOptions opts=OEChem::OEUniMolecularRxnOptions()) -> bool
        """
        return _oechem.OEUniMolecularRxn_Init(self, *args)

    def __call__(self, mol: "OEMolBase") -> "bool":
        r"""__call__(OEUniMolecularRxn self, OEMolBase mol) -> bool"""
        return _oechem.OEUniMolecularRxn___call__(self, mol)

    def IsValid(self):
      return _oechem.OEUniMolecularRxn___nonzero__(self)



    def SetValidateKekule(self, arg2: "bool") -> "bool":
        r"""SetValidateKekule(OEUniMolecularRxn self, bool arg2) -> bool"""
        return _oechem.OEUniMolecularRxn_SetValidateKekule(self, arg2)

    def GetValidateKekule(self) -> "bool":
        r"""GetValidateKekule(OEUniMolecularRxn self) -> bool"""
        return _oechem.OEUniMolecularRxn_GetValidateKekule(self)

    def SetClearCoordinates(self, arg2: "bool") -> "bool":
        r"""SetClearCoordinates(OEUniMolecularRxn self, bool arg2) -> bool"""
        return _oechem.OEUniMolecularRxn_SetClearCoordinates(self, arg2)

    def GetClearCoordinates(self) -> "bool":
        r"""GetClearCoordinates(OEUniMolecularRxn self) -> bool"""
        return _oechem.OEUniMolecularRxn_GetClearCoordinates(self)

    def GetOptions(self, *args) -> "OEChem::OEUniMolecularRxnOptions const &":
        r"""
        GetOptions(OEUniMolecularRxn self) -> OEUniMolecularRxnOptions
        GetOptions(OEUniMolecularRxn self) -> OEUniMolecularRxnOptions
        """
        return _oechem.OEUniMolecularRxn_GetOptions(self, *args)

# Register OEUniMolecularRxn in _oechem:
_oechem.OEUniMolecularRxn_swigregister(OEUniMolecularRxn)

class OELibraryGen(object):
    r"""Proxy of C++ OEChem::OELibraryGen 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__(OELibraryGen self) -> OELibraryGen
        __init__(OELibraryGen self, OELibraryGen rhs) -> OELibraryGen
        __init__(OELibraryGen self, char const * arg2, bool strictSmirks=True) -> OELibraryGen
        """
        _oechem.OELibraryGen_swiginit(self, _oechem.new_OELibraryGen(*args))
    __swig_destroy__ = _oechem.delete_OELibraryGen

    def Init(self, *args) -> "bool":
        r"""
        Init(OELibraryGen self, char const * c, bool strictSmirks=True) -> bool
        Init(OELibraryGen self, OEQMolBase arg2, bool strictSmirks=True) -> bool
        """
        return _oechem.OELibraryGen_Init(self, *args)

    def IsValid(self):
      return _oechem.OELibraryGen___nonzero__(self)



    def __call__(self, arg2: "OEMolBase") -> "bool":
        r"""__call__(OELibraryGen self, OEMolBase arg2) -> bool"""
        return _oechem.OELibraryGen___call__(self, arg2)

    def NumReactants(self) -> "unsigned int":
        r"""NumReactants(OELibraryGen self) -> unsigned int"""
        return _oechem.OELibraryGen_NumReactants(self)

    def NumPossibleProducts(self) -> "unsigned int":
        r"""NumPossibleProducts(OELibraryGen self) -> unsigned int"""
        return _oechem.OELibraryGen_NumPossibleProducts(self)

    def SetStartingMaterial(self, *args) -> "unsigned int":
        r"""
        SetStartingMaterial(OELibraryGen self, OEMolBaseIter arg2, unsigned int reacnum, bool umatch=True) -> unsigned int
        SetStartingMaterial(OELibraryGen self, OESystem::OEIterBase< OEChem::OEMolBase > * arg2, unsigned int reacnum, bool umatch=True) -> unsigned int
        SetStartingMaterial(OELibraryGen self, OEMolBase mol, unsigned int reacnum, bool umatch=True) -> unsigned int
        """
        return _oechem.OELibraryGen_SetStartingMaterial(self, *args)

    def AddStartingMaterial(self, *args) -> "unsigned int":
        r"""
        AddStartingMaterial(OELibraryGen self, OEMolBaseIter arg2, unsigned int reacnum, bool umatch=True) -> unsigned int
        AddStartingMaterial(OELibraryGen self, OESystem::OEIterBase< OEChem::OEMolBase > * arg2, unsigned int reacnum, bool umatch=True) -> unsigned int
        AddStartingMaterial(OELibraryGen self, OEMolBase mol, unsigned int reacnum, bool umatch=True) -> unsigned int
        """
        return _oechem.OELibraryGen_AddStartingMaterial(self, *args)

    def ClearStartingMaterial(self, reacnum: "unsigned int") -> "void":
        r"""ClearStartingMaterial(OELibraryGen self, unsigned int reacnum)"""
        return _oechem.OELibraryGen_ClearStartingMaterial(self, reacnum)

    def GetStartingMaterial(self,rnum):
      startiter = self.GetStartingMaterialIter(rnum)
      while startiter.IsValid():
        yield startiter.Target()
        startiter.Next()



    def GetProducts(self):
      proditer = self.GetProductsIter()
      while proditer.IsValid():
        yield proditer.Target()
        proditer.Next()



    def SetValenceCorrection(self, arg2: "bool") -> "bool":
        r"""SetValenceCorrection(OELibraryGen self, bool arg2) -> bool"""
        return _oechem.OELibraryGen_SetValenceCorrection(self, arg2)

    def GetValenceCorrection(self) -> "bool":
        r"""GetValenceCorrection(OELibraryGen self) -> bool"""
        return _oechem.OELibraryGen_GetValenceCorrection(self)

    def SetExplicitHydrogens(self, arg2: "bool") -> "bool":
        r"""SetExplicitHydrogens(OELibraryGen self, bool arg2) -> bool"""
        return _oechem.OELibraryGen_SetExplicitHydrogens(self, arg2)

    def GetExplicitHydrogens(self) -> "bool":
        r"""GetExplicitHydrogens(OELibraryGen self) -> bool"""
        return _oechem.OELibraryGen_GetExplicitHydrogens(self)

    def SetRemoveUnmappedFragments(self, arg2: "bool") -> "bool":
        r"""SetRemoveUnmappedFragments(OELibraryGen self, bool arg2) -> bool"""
        return _oechem.OELibraryGen_SetRemoveUnmappedFragments(self, arg2)

    def GetRemoveUnmappedFragments(self) -> "bool":
        r"""GetRemoveUnmappedFragments(OELibraryGen self) -> bool"""
        return _oechem.OELibraryGen_GetRemoveUnmappedFragments(self)

    def SetAssignMapIdx(self, arg2: "bool") -> "bool":
        r"""SetAssignMapIdx(OELibraryGen self, bool arg2) -> bool"""
        return _oechem.OELibraryGen_SetAssignMapIdx(self, arg2)

    def GetAssignMapIdx(self) -> "bool":
        r"""GetAssignMapIdx(OELibraryGen self) -> bool"""
        return _oechem.OELibraryGen_GetAssignMapIdx(self)

    def SetValidateKekule(self, arg2: "bool") -> "bool":
        r"""SetValidateKekule(OELibraryGen self, bool arg2) -> bool"""
        return _oechem.OELibraryGen_SetValidateKekule(self, arg2)

    def GetValidateKekule(self) -> "bool":
        r"""GetValidateKekule(OELibraryGen self) -> bool"""
        return _oechem.OELibraryGen_GetValidateKekule(self)

    def SetClearCoordinates(self, arg2: "bool") -> "bool":
        r"""SetClearCoordinates(OELibraryGen self, bool arg2) -> bool"""
        return _oechem.OELibraryGen_SetClearCoordinates(self, arg2)

    def GetClearCoordinates(self) -> "bool":
        r"""GetClearCoordinates(OELibraryGen self) -> bool"""
        return _oechem.OELibraryGen_GetClearCoordinates(self)

    def SetTitleSeparator(self, c: "char const *") -> "bool":
        r"""SetTitleSeparator(OELibraryGen self, char const * c) -> bool"""
        return _oechem.OELibraryGen_SetTitleSeparator(self, c)

    def GetTitleSeparator(self) -> "std::string const &":
        r"""GetTitleSeparator(OELibraryGen self) -> std::string const &"""
        return _oechem.OELibraryGen_GetTitleSeparator(self)

    def GetStartingMaterialIter(self, rnum: "unsigned int") -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
        r"""GetStartingMaterialIter(OELibraryGen self, unsigned int rnum) -> OESystem::OEIterBase< OEChem::OEMolBase > *"""
        return _oechem.OELibraryGen_GetStartingMaterialIter(self, rnum)

    def GetProductsIter(self) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
        r"""GetProductsIter(OELibraryGen self) -> OESystem::OEIterBase< OEChem::OEMolBase > *"""
        return _oechem.OELibraryGen_GetProductsIter(self)

# Register OELibraryGen in _oechem:
_oechem.OELibraryGen_swigregister(OELibraryGen)


def OEGetUniMolecularRxnIter(*args) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
    r"""
    OEGetUniMolecularRxnIter(OEMolBase mol, OEQMolBase rxn, bool strictSmirks=True, unsigned int maxMatches=10000, bool validateKekule=True) -> OESystem::OEIterBase< OEChem::OEMolBase >
    OEGetUniMolecularRxnIter(OEMolBase mol, OEQMolBase rxn, OEUniMolecularRxnOptions opts) -> OESystem::OEIterBase< OEChem::OEMolBase > *
    """
    return _oechem.OEGetUniMolecularRxnIter(*args)

def OEHasResidue(atm: "OEAtomBase") -> "bool":
    r"""OEHasResidue(OEAtomBase atm) -> bool"""
    return _oechem.OEHasResidue(atm)

def OEAtomSetResidue(atm: "OEAtomBase", res: "OEResidue") -> "bool":
    r"""OEAtomSetResidue(OEAtomBase atm, OEResidue res) -> bool"""
    return _oechem.OEAtomSetResidue(atm, res)

def OEAtomGetResidue(atm: "OEAtomBase") -> "OEChem::OEResidue const &":
    r"""OEAtomGetResidue(OEAtomBase atm) -> OEResidue"""
    return _oechem.OEAtomGetResidue(atm)

def OEHasResidues(mol: "OEMolBase") -> "bool":
    r"""OEHasResidues(OEMolBase mol) -> bool"""
    return _oechem.OEHasResidues(mol)

def OEClearResidues(mol: "OEMolBase") -> "void":
    r"""OEClearResidues(OEMolBase mol)"""
    return _oechem.OEClearResidues(mol)

def OEClearResidue(atom: "OEAtomBase") -> "void":
    r"""OEClearResidue(OEAtomBase atom)"""
    return _oechem.OEClearResidue(atom)

def OESameResidue(res1: "OEResidue", res2: "OEResidue") -> "bool":
    r"""OESameResidue(OEResidue res1, OEResidue res2) -> bool"""
    return _oechem.OESameResidue(res1, res2)

def OESameChain(res1: "OEResidue", res2: "OEResidue") -> "bool":
    r"""OESameChain(OEResidue res1, OEResidue res2) -> bool"""
    return _oechem.OESameChain(res1, res2)

def OEResidueHydrogens(*args) -> "void":
    r"""
    OEResidueHydrogens(OEAtomBase atm, unsigned int style=)
    OEResidueHydrogens(OEMolBase mol, unsigned int style=)
    """
    return _oechem.OEResidueHydrogens(*args)

def OEPDBOrderAtoms(mol: "OEMolBase", preserveResOrder: "bool"=False) -> "bool":
    r"""OEPDBOrderAtoms(OEMolBase mol, bool preserveResOrder=False) -> bool"""
    return _oechem.OEPDBOrderAtoms(mol, preserveResOrder)

def OEAssignResidueNumbers(mol: "OEMolBase") -> "void":
    r"""OEAssignResidueNumbers(OEMolBase mol)"""
    return _oechem.OEAssignResidueNumbers(mol)

def OEAssignSerialNumbers(mol: "OEMolBase") -> "void":
    r"""OEAssignSerialNumbers(OEMolBase mol)"""
    return _oechem.OEAssignSerialNumbers(mol)

def OEPerceiveResidues(*args) -> "void":
    r"""OEPerceiveResidues(OEMolBase mol, unsigned int stable=)"""
    return _oechem.OEPerceiveResidues(*args)

def OEGetAminoAcidCode(idx: "unsigned int") -> "char":
    r"""OEGetAminoAcidCode(unsigned int idx) -> char"""
    return _oechem.OEGetAminoAcidCode(idx)

def OEGetResidueIndexFromCode(name: "char const") -> "unsigned int":
    r"""OEGetResidueIndexFromCode(char const name) -> unsigned int"""
    return _oechem.OEGetResidueIndexFromCode(name)

def OEGetResidueIndex(*args) -> "unsigned int":
    r"""
    OEGetResidueIndex(char const * name) -> unsigned int
    OEGetResidueIndex(OEResidue res) -> unsigned int
    OEGetResidueIndex(OEAtomBase atm) -> unsigned int
    """
    return _oechem.OEGetResidueIndex(*args)

def OEGetResidueName(idx: "unsigned int") -> "char const *":
    r"""OEGetResidueName(unsigned int idx) -> char const *"""
    return _oechem.OEGetResidueName(idx)

def OEGetPDBAtomIndex(*args) -> "unsigned int":
    r"""
    OEGetPDBAtomIndex(char const * name) -> unsigned int
    OEGetPDBAtomIndex(OEAtomBase atm) -> unsigned int
    """
    return _oechem.OEGetPDBAtomIndex(*args)

def OEGetPDBAtomName(idx: "unsigned int") -> "char const *":
    r"""OEGetPDBAtomName(unsigned int idx) -> char const *"""
    return _oechem.OEGetPDBAtomName(idx)

def OEFindRingAtomsAndBonds(mol: "OEMolBase") -> "void":
    r"""OEFindRingAtomsAndBonds(OEMolBase mol)"""
    return _oechem.OEFindRingAtomsAndBonds(mol)

def OEAtomIsInRingSize(atm: "OEAtomBase", size: "unsigned int") -> "bool":
    r"""OEAtomIsInRingSize(OEAtomBase atm, unsigned int size) -> bool"""
    return _oechem.OEAtomIsInRingSize(atm, size)

def OEBondIsInRingSize(bnd: "OEBondBase", size: "unsigned int") -> "bool":
    r"""OEBondIsInRingSize(OEBondBase bnd, unsigned int size) -> bool"""
    return _oechem.OEBondIsInRingSize(bnd, size)

def OEAtomIsInAromaticRingSize(atm: "OEAtomBase", size: "unsigned int") -> "bool":
    r"""OEAtomIsInAromaticRingSize(OEAtomBase atm, unsigned int size) -> bool"""
    return _oechem.OEAtomIsInAromaticRingSize(atm, size)

def OEBondIsInAromaticRingSize(bnd: "OEBondBase", size: "unsigned int") -> "bool":
    r"""OEBondIsInAromaticRingSize(OEBondBase bnd, unsigned int size) -> bool"""
    return _oechem.OEBondIsInAromaticRingSize(bnd, size)

def OEAtomGetSmallestRingSize(atm: "OEAtomBase") -> "unsigned int":
    r"""OEAtomGetSmallestRingSize(OEAtomBase atm) -> unsigned int"""
    return _oechem.OEAtomGetSmallestRingSize(atm)

def OEBondGetSmallestRingSize(bnd: "OEBondBase") -> "unsigned int":
    r"""OEBondGetSmallestRingSize(OEBondBase bnd) -> unsigned int"""
    return _oechem.OEBondGetSmallestRingSize(bnd)

def OERGroupsToHydrogens(mol: "OEMolBase") -> "bool":
    r"""OERGroupsToHydrogens(OEMolBase mol) -> bool"""
    return _oechem.OERGroupsToHydrogens(mol)
class OESDDataPair(object):
    r"""Proxy of C++ OEChem::OESDDataPair 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__(OESDDataPair self) -> OESDDataPair
        __init__(OESDDataPair self, std::string t, std::string v) -> OESDDataPair
        """
        _oechem.OESDDataPair_swiginit(self, _oechem.new_OESDDataPair(*args))

    def SetTag(self, t: "char const *") -> "void":
        r"""SetTag(OESDDataPair self, char const * t)"""
        return _oechem.OESDDataPair_SetTag(self, t)

    def SetValue(self, v: "char const *") -> "void":
        r"""SetValue(OESDDataPair self, char const * v)"""
        return _oechem.OESDDataPair_SetValue(self, v)

    def GetTag(self) -> "char const *":
        r"""GetTag(OESDDataPair self) -> char const *"""
        return _oechem.OESDDataPair_GetTag(self)

    def GetValue(self) -> "char const *":
        r"""GetValue(OESDDataPair self) -> char const *"""
        return _oechem.OESDDataPair_GetValue(self)
    __swig_destroy__ = _oechem.delete_OESDDataPair

# Register OESDDataPair in _oechem:
_oechem.OESDDataPair_swigregister(OESDDataPair)


def OEHasSDData(*args) -> "bool":
    r"""
    OEHasSDData(OEMolBase mol) -> bool
    OEHasSDData(OEMolBase mol, std::string const & tag) -> bool
    """
    return _oechem.OEHasSDData(*args)

def OEDeleteSDData(mol: "OEMolBase", tag: "std::string const &") -> "bool":
    r"""OEDeleteSDData(OEMolBase mol, std::string const & tag) -> bool"""
    return _oechem.OEDeleteSDData(mol, tag)

def OEGetSDData(mol: "OEMolBase", tag: "std::string const &") -> "std::string":
    r"""OEGetSDData(OEMolBase mol, std::string const & tag) -> std::string"""
    return _oechem.OEGetSDData(mol, tag)

def OESetSDData(*args) -> "bool":
    r"""
    OESetSDData(OEMolBase mol, std::string const & tag, std::string const & value) -> bool
    OESetSDData(OEMolBase mol, OESDDataPair dp) -> bool
    """
    return _oechem.OESetSDData(*args)

def OEAddSDData(*args) -> "bool":
    r"""
    OEAddSDData(OEMolBase mol, std::string const & tag, std::string const & value) -> bool
    OEAddSDData(OEMolBase mol, OESDDataPair dp) -> bool
    """
    return _oechem.OEAddSDData(*args)

def OECopySDData(*args) -> "bool":
    r"""
    OECopySDData(OEMolBase dst, OEMolBase src) -> bool
    OECopySDData(OEMolBase dst, OEContainer src) -> bool
    """
    return _oechem.OECopySDData(*args)

def OEGetSDDataPairs(mol: "OEMolBase") -> "OESystem::OEIterBase< OEChem::OESDDataPair > *":
    r"""OEGetSDDataPairs(OEMolBase mol) -> OESystem::OEIterBase< OEChem::OESDDataPair > *"""
    return _oechem.OEGetSDDataPairs(mol)

def OEGetSDBaseData(mol: "OEBase") -> "OESystem::OEIterBase< OESystem::OEBaseDataT< std::string > > *":
    r"""OEGetSDBaseData(OEBase mol) -> OESystem::OEIterBase< OESystem::OEBaseDataT< std::string > > *"""
    return _oechem.OEGetSDBaseData(mol)

def OEClearSDData(*args) -> "bool":
    r"""
    OEClearSDData(OEMolBase mol) -> bool
    OEClearSDData(OEMCMolBase mol) -> bool
    """
    return _oechem.OEClearSDData(*args)
class OEAnisoUij(object):
    r"""Proxy of C++ OEChem::OEAnisoUij 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__(OEAnisoUij self) -> OEAnisoUij
        __init__(OEAnisoUij self, int u11, int u22, int u33, int u12, int u13, int u23) -> OEAnisoUij
        """
        _oechem.OEAnisoUij_swiginit(self, _oechem.new_OEAnisoUij(*args))

    def GetU11(self) -> "int":
        r"""GetU11(OEAnisoUij self) -> int"""
        return _oechem.OEAnisoUij_GetU11(self)

    def SetU11(self, val: "int") -> "void":
        r"""SetU11(OEAnisoUij self, int val)"""
        return _oechem.OEAnisoUij_SetU11(self, val)

    def GetU22(self) -> "int":
        r"""GetU22(OEAnisoUij self) -> int"""
        return _oechem.OEAnisoUij_GetU22(self)

    def SetU22(self, val: "int") -> "void":
        r"""SetU22(OEAnisoUij self, int val)"""
        return _oechem.OEAnisoUij_SetU22(self, val)

    def GetU33(self) -> "int":
        r"""GetU33(OEAnisoUij self) -> int"""
        return _oechem.OEAnisoUij_GetU33(self)

    def SetU33(self, val: "int") -> "void":
        r"""SetU33(OEAnisoUij self, int val)"""
        return _oechem.OEAnisoUij_SetU33(self, val)

    def GetU12(self) -> "int":
        r"""GetU12(OEAnisoUij self) -> int"""
        return _oechem.OEAnisoUij_GetU12(self)

    def SetU12(self, val: "int") -> "void":
        r"""SetU12(OEAnisoUij self, int val)"""
        return _oechem.OEAnisoUij_SetU12(self, val)

    def GetU13(self) -> "int":
        r"""GetU13(OEAnisoUij self) -> int"""
        return _oechem.OEAnisoUij_GetU13(self)

    def SetU13(self, val: "int") -> "void":
        r"""SetU13(OEAnisoUij self, int val)"""
        return _oechem.OEAnisoUij_SetU13(self, val)

    def GetU23(self) -> "int":
        r"""GetU23(OEAnisoUij self) -> int"""
        return _oechem.OEAnisoUij_GetU23(self)

    def SetU23(self, val: "int") -> "void":
        r"""SetU23(OEAnisoUij self, int val)"""
        return _oechem.OEAnisoUij_SetU23(self, val)
    __swig_destroy__ = _oechem.delete_OEAnisoUij

# Register OEAnisoUij in _oechem:
_oechem.OEAnisoUij_swigregister(OEAnisoUij)


def OEHasPDBData(*args) -> "bool":
    r"""
    OEHasPDBData(OEMolBase mol) -> bool
    OEHasPDBData(OEMolBase mol, std::string const & tag) -> bool
    """
    return _oechem.OEHasPDBData(*args)

def OEDeletePDBData(mol: "OEMolBase", tag: "std::string const &") -> "bool":
    r"""OEDeletePDBData(OEMolBase mol, std::string const & tag) -> bool"""
    return _oechem.OEDeletePDBData(mol, tag)

def OEGetPDBData(mol: "OEMolBase", tag: "std::string const &") -> "std::string":
    r"""OEGetPDBData(OEMolBase mol, std::string const & tag) -> std::string"""
    return _oechem.OEGetPDBData(mol, tag)

def OESetPDBData(*args) -> "bool":
    r"""
    OESetPDBData(OEMolBase mol, std::string const & tag, std::string const & value) -> bool
    OESetPDBData(OEMolBase mol, OESDDataPair dp) -> bool
    """
    return _oechem.OESetPDBData(*args)

def OEAddPDBData(*args) -> "bool":
    r"""
    OEAddPDBData(OEMolBase mol, std::string const & tag, std::string const & value) -> bool
    OEAddPDBData(OEMolBase mol, OESDDataPair dp) -> bool
    """
    return _oechem.OEAddPDBData(*args)

def OECopyPDBData(dst: "OEMolBase", src: "OEMolBase") -> "bool":
    r"""OECopyPDBData(OEMolBase dst, OEMolBase src) -> bool"""
    return _oechem.OECopyPDBData(dst, src)

def OEGetPDBDataPairs(mol: "OEMolBase") -> "OESystem::OEIterBase< OEChem::OEPDBDataPair > *":
    r"""OEGetPDBDataPairs(OEMolBase mol) -> OESystem::OEIterBase< OEChem::OEPDBDataPair > *"""
    return _oechem.OEGetPDBDataPairs(mol)

def OEGetPDBBaseData(mol: "OEBase") -> "OESystem::OEIterBase< OESystem::OEBaseDataT< std::string > > *":
    r"""OEGetPDBBaseData(OEBase mol) -> OESystem::OEIterBase< OESystem::OEBaseDataT< std::string > > *"""
    return _oechem.OEGetPDBBaseData(mol)

def OEClearPDBData(*args) -> "bool":
    r"""
    OEClearPDBData(OEMolBase mol) -> bool
    OEClearPDBData(OEMCMolBase mol) -> bool
    """
    return _oechem.OEClearPDBData(*args)
class OEHasAnisou(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEHasAnisou class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEHasAnisou self, OEAtomBase atom) -> bool"""
        return _oechem.OEHasAnisou___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEHasAnisou self) -> OEHasAnisou"""
        _oechem.OEHasAnisou_swiginit(self, _oechem.new_OEHasAnisou())
    __swig_destroy__ = _oechem.delete_OEHasAnisou

# Register OEHasAnisou in _oechem:
_oechem.OEHasAnisou_swigregister(OEHasAnisou)


def OESetAnisou(*args) -> "void":
    r"""
    OESetAnisou(OEAtomBase atom, int u11, int u22, int u33, int u12, int u13, int u23)
    OESetAnisou(OEAtomBase atom, OEAnisoUij uij)
    """
    return _oechem.OESetAnisou(*args)

def OEGetAnisou(*args) -> "bool":
    r"""
    OEGetAnisou(OEAtomBase atom, int & u11, int & u22, int & u33, int & u12, int & u13, int & u23) -> bool
    OEGetAnisou(OEAnisoUij uij, OEAtomBase atom) -> bool
    """
    return _oechem.OEGetAnisou(*args)

def OE3DToAtomStereo(mol: "OEMolBase") -> "bool":
    r"""OE3DToAtomStereo(OEMolBase mol) -> bool"""
    return _oechem.OE3DToAtomStereo(mol)

def OE3DToBondStereo(mol: "OEMolBase", bmask: "unsigned char *"=None) -> "bool":
    r"""OE3DToBondStereo(OEMolBase mol, unsigned char * bmask=None) -> bool"""
    return _oechem.OE3DToBondStereo(mol, bmask)

def OE3DToInternalStereo(mol: "OEMolBase") -> "bool":
    r"""OE3DToInternalStereo(OEMolBase mol) -> bool"""
    return _oechem.OE3DToInternalStereo(mol)

def OEPerceiveSymmetry(mol: "OEMolBase", includeH: "bool"=True, automorph: "bool"=False) -> "bool":
    r"""OEPerceiveSymmetry(OEMolBase mol, bool includeH=True, bool automorph=False) -> bool"""
    return _oechem.OEPerceiveSymmetry(mol, includeH, automorph)

def OEPerceiveChiral(mol: "OEMolBase", carbonOnly: "bool const"=False) -> "bool":
    r"""OEPerceiveChiral(OEMolBase mol, bool const carbonOnly=False) -> bool"""
    return _oechem.OEPerceiveChiral(mol, carbonOnly)

def OEClearChiralPerception(mol: "OEMolBase") -> "void":
    r"""OEClearChiralPerception(OEMolBase mol)"""
    return _oechem.OEClearChiralPerception(mol)
class OEAtomBondSet(OERoleSet):
    r"""Proxy of C++ OEChem::OEAtomBondSet 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__(OEAtomBondSet self) -> OEAtomBondSet
        __init__(OEAtomBondSet self, OEAtomBondSet rhs, OEChem::OEAtomBase ** amap=(OEAtomBase **) 0, OEChem::OEBondBase ** bmap=(OEBondBase **) 0) -> OEAtomBondSet
        __init__(OEAtomBondSet self, OESystem::OEIterBase< OEChem::OEAtomBase > * atoms) -> OEAtomBondSet
        __init__(OEAtomBondSet self, OESystem::OEIterBase< OEChem::OEBondBase > * bonds) -> OEAtomBondSet
        __init__(OEAtomBondSet self, OESystem::OEIterBase< OEChem::OEAtomBase > * atoms, OESystem::OEIterBase< OEChem::OEBondBase > * bonds) -> OEAtomBondSet
        __init__(OEAtomBondSet self, OEAtomIter atoms) -> OEAtomBondSet
        __init__(OEAtomBondSet self, OEBondIter bonds) -> OEAtomBondSet
        __init__(OEAtomBondSet self, OEAtomIter atoms, OEBondIter bonds) -> OEAtomBondSet
        """
        _oechem.OEAtomBondSet_swiginit(self, _oechem.new_OEAtomBondSet(*args))
    __swig_destroy__ = _oechem.delete_OEAtomBondSet

    def CreateCopy(self) -> "OEChem::OEAtomBondSet *":
        r"""CreateCopy(OEAtomBondSet self) -> OEAtomBondSet"""
        return _oechem.OEAtomBondSet_CreateCopy(self)

    def Clear(self) -> "void":
        r"""Clear(OEAtomBondSet self)"""
        return _oechem.OEAtomBondSet_Clear(self)

    def ClearAtomsAndBonds(self) -> "void":
        r"""ClearAtomsAndBonds(OEAtomBondSet self)"""
        return _oechem.OEAtomBondSet_ClearAtomsAndBonds(self)

    def ClearAtoms(self) -> "void":
        r"""ClearAtoms(OEAtomBondSet self)"""
        return _oechem.OEAtomBondSet_ClearAtoms(self)

    def ClearBonds(self) -> "void":
        r"""ClearBonds(OEAtomBondSet self)"""
        return _oechem.OEAtomBondSet_ClearBonds(self)

    def IsEmpty(self) -> "bool":
        r"""IsEmpty(OEAtomBondSet self) -> bool"""
        return _oechem.OEAtomBondSet_IsEmpty(self)

    def NumAtoms(self, *args) -> "unsigned int":
        r"""
        NumAtoms(OEAtomBondSet self) -> unsigned int
        NumAtoms(OEAtomBondSet self, OEUnaryAtomPred atompred) -> unsigned int
        """
        return _oechem.OEAtomBondSet_NumAtoms(self, *args)

    def NumBonds(self, *args) -> "unsigned int":
        r"""
        NumBonds(OEAtomBondSet self) -> unsigned int
        NumBonds(OEAtomBondSet self, OEUnaryBondPred bondpred) -> unsigned int
        """
        return _oechem.OEAtomBondSet_NumBonds(self, *args)

    def HasAtom(self, atom: "OEAtomBase") -> "bool":
        r"""HasAtom(OEAtomBondSet self, OEAtomBase atom) -> bool"""
        return _oechem.OEAtomBondSet_HasAtom(self, atom)

    def HasBond(self, bond: "OEBondBase") -> "bool":
        r"""HasBond(OEAtomBondSet self, OEBondBase bond) -> bool"""
        return _oechem.OEAtomBondSet_HasBond(self, bond)

    def AddAtom(self, atom: "OEAtomBase") -> "bool":
        r"""AddAtom(OEAtomBondSet self, OEAtomBase atom) -> bool"""
        return _oechem.OEAtomBondSet_AddAtom(self, atom)

    def AddBond(self, bond: "OEBondBase") -> "bool":
        r"""AddBond(OEAtomBondSet self, OEBondBase bond) -> bool"""
        return _oechem.OEAtomBondSet_AddBond(self, bond)

    def AddAtoms(self, atoms: "OEAtomVector") -> "bool":
        r"""AddAtoms(OEAtomBondSet self, OEAtomVector atoms) -> bool"""
        return _oechem.OEAtomBondSet_AddAtoms(self, atoms)

    def AddBonds(self, bonds: "OEBondVector") -> "bool":
        r"""AddBonds(OEAtomBondSet self, OEBondVector bonds) -> bool"""
        return _oechem.OEAtomBondSet_AddBonds(self, bonds)

    def Add(self, *args) -> "bool":
        r"""
        Add(OEAtomBondSet self, OEMolBase mol, OEUnaryAtomPred atompred, OEUnaryBondPred bondpred) -> bool
        Add(OEAtomBondSet self, OEMolBase mol, OEUnaryAtomPred atompred) -> bool
        Add(OEAtomBondSet self, OEMolBase mol, OEUnaryBondPred bondpred) -> bool
        Add(OEAtomBondSet self, OEAtomBondSet abset) -> bool
        """
        return _oechem.OEAtomBondSet_Add(self, *args)

    def RemoveAtom(self, atom: "OEAtomBase") -> "bool":
        r"""RemoveAtom(OEAtomBondSet self, OEAtomBase atom) -> bool"""
        return _oechem.OEAtomBondSet_RemoveAtom(self, atom)

    def RemoveBond(self, bond: "OEBondBase") -> "bool":
        r"""RemoveBond(OEAtomBondSet self, OEBondBase bond) -> bool"""
        return _oechem.OEAtomBondSet_RemoveBond(self, bond)

    def RemoveAtoms(self, atoms: "OEAtomVector") -> "bool":
        r"""RemoveAtoms(OEAtomBondSet self, OEAtomVector atoms) -> bool"""
        return _oechem.OEAtomBondSet_RemoveAtoms(self, atoms)

    def RemoveBonds(self, bonds: "OEBondVector") -> "bool":
        r"""RemoveBonds(OEAtomBondSet self, OEBondVector bonds) -> bool"""
        return _oechem.OEAtomBondSet_RemoveBonds(self, bonds)

    def Remove(self, *args) -> "bool":
        r"""
        Remove(OEAtomBondSet self, OEMolBase mol, OEUnaryAtomPred atompred, OEUnaryBondPred bondpred) -> bool
        Remove(OEAtomBondSet self, OEMolBase mol, OEUnaryAtomPred atompred) -> bool
        Remove(OEAtomBondSet self, OEMolBase mol, OEUnaryBondPred bondpred) -> bool
        Remove(OEAtomBondSet self, OEAtomBondSet abset) -> bool
        """
        return _oechem.OEAtomBondSet_Remove(self, *args)

    def Sweep(self) -> "bool":
        r"""Sweep(OEAtomBondSet self) -> bool"""
        return _oechem.OEAtomBondSet_Sweep(self)

    def Translate(self, amap: "OEChem::OEAtomBase **", bmap: "OEChem::OEBondBase **") -> "bool":
        r"""Translate(OEAtomBondSet self, OEChem::OEAtomBase ** amap, OEChem::OEBondBase ** bmap) -> bool"""
        return _oechem.OEAtomBondSet_Translate(self, amap, bmap)

    def GetAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""
        GetAtoms(OEAtomBondSet self) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAtoms(OEAtomBondSet self, OEUnaryAtomPred atompred) -> OESystem::OEIterBase< OEChem::OEAtomBase > *
        """
        return _oechem.OEAtomBondSet_GetAtoms(self, *args)

    def GetBonds(self, *args) -> "OESystem::OEIterBase< OEChem::OEBondBase > *":
        r"""
        GetBonds(OEAtomBondSet self) -> OESystem::OEIterBase< OEChem::OEBondBase >
        GetBonds(OEAtomBondSet self, OEUnaryBondPred bondpred) -> OESystem::OEIterBase< OEChem::OEBondBase > *
        """
        return _oechem.OEAtomBondSet_GetBonds(self, *args)

    def GetParent(self) -> "OEChem::OEMolBase const *":
        r"""GetParent(OEAtomBondSet self) -> OEMolBase"""
        return _oechem.OEAtomBondSet_GetParent(self)

    def __str__(self) -> "std::string":
        r"""__str__(OEAtomBondSet self) -> std::string"""
        return _oechem.OEAtomBondSet___str__(self)

# Register OEAtomBondSet in _oechem:
_oechem.OEAtomBondSet_swigregister(OEAtomBondSet)


def OESubsetMol(*args) -> "bool":
    r"""
    OESubsetMol(OEMCMolBase dst, OEMCMolBase src, OEUnaryAtomPred atomfcn, bool adjustHCount=False, bool RGroup=False, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None) -> bool
    OESubsetMol(OEMCMolBase dst, OEMCMolBase src, OEUnaryAtomPred atomfcn, OEUnaryBondPred bondfcn, bool adjustHCount=False, bool RGroup=False, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None) -> bool
    OESubsetMol(OEMCMolBase dst, OEMCMolBase src, OEMatchBase match, bool adjustHCount=False, bool RGroup=False, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None) -> bool
    OESubsetMol(OEQMolBase dst, OEQMolBase src, OEUnaryAtomPred atomfcn, bool adjustHCount=False, bool RGroup=False, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None) -> bool
    OESubsetMol(OEQMolBase dst, OEQMolBase src, OEUnaryAtomPred atomfcn, OEUnaryBondPred bondfcn, bool adjustHCount=False, bool RGroup=False, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None) -> bool
    OESubsetMol(OEMolBase dst, OEMolBase src, OEUnaryAtomPred atomfcn, bool adjustHCount=False, bool RGroup=False, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None) -> bool
    OESubsetMol(OEMolBase dst, OEMolBase src, OEUnaryAtomPred atomfcn, OEUnaryBondPred bondfcn, bool adjustHCount=False, bool RGroup=False, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None) -> bool
    OESubsetMol(OEMolBase dst, OEMatchBase match, bool adjustHCount=False, bool RGroup=False, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None) -> bool
    OESubsetMol(OEMCMolBase dst, OEMCMolBase src, OEAtomBondSet submol, bool adjustHCount=False, bool RGroup=False, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None) -> bool
    OESubsetMol(OEQMolBase dst, OEQMolBase src, OEAtomBondSet submol, bool adjustHCount=False, bool RGroup=False, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None) -> bool
    OESubsetMol(OEMolBase dst, OEMolBase src, OEAtomBondSet submol, bool adjustHCount=False, bool RGroup=False, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None) -> bool
    OESubsetMol(OEMolBase dst, OEAtomBondSet submol, bool adjustHCount=False, bool RGroup=False, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None) -> bool
    """
    return _oechem.OESubsetMol(*args)
class OEAtomBondSetIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OEAtomBondSet > 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__(OEAtomBondSetIter self) -> OEAtomBondSetIter
        __init__(OEAtomBondSetIter self, OEAtomBondSetIter rhs) -> OEAtomBondSetIter
        __init__(OEAtomBondSetIter self, OESystem::OEIterBase< OEChem::OEAtomBondSet > * rhs) -> OEAtomBondSetIter
        __init__(OEAtomBondSetIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEAtomBondSet >::NonConstA > * rhs) -> OEAtomBondSetIter
        """
        _oechem.OEAtomBondSetIter_swiginit(self, _oechem.new_OEAtomBondSetIter(*args))
    __swig_destroy__ = _oechem.delete_OEAtomBondSetIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEAtomBondSet > *":
        r"""Copy(OEAtomBondSetIter self) -> OESystem::OEIterBase< OEChem::OEAtomBondSet > *"""
        return _oechem.OEAtomBondSetIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEAtomBondSetIter self, OESystem::OEIterBase< OEChem::OEAtomBondSet > * ib)
        Push(OEAtomBondSetIter self, OEAtomBondSetIter iter)
        """
        return _oechem.OEAtomBondSetIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEChem::OEAtomBondSet,OEChem::OEAtomBondSet > const &") -> "void":
        r"""Sort(OEAtomBondSetIter self, OESystem::OEBinaryPredicate< OEChem::OEAtomBondSet,OEChem::OEAtomBondSet > const & sort_criterion)"""
        return _oechem.OEAtomBondSetIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEAtomBondSet > &":
        r"""ToFirst(OEAtomBondSetIter self) -> OEAtomBondSetIter"""
        return _oechem.OEAtomBondSetIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OEAtomBondSet > &":
        r"""ToLast(OEAtomBondSetIter self) -> OEAtomBondSetIter"""
        return _oechem.OEAtomBondSetIter_ToLast(self)

    def __ref__(self) -> "OEChem::OEAtomBondSet &":
        r"""__ref__(OEAtomBondSetIter self) -> OEAtomBondSet"""
        return _oechem.OEAtomBondSetIter___ref__(self)

    def IsValid(self):
      return _oechem.OEAtomBondSetIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEAtomBondSetIter self) -> PyObject *"""
        return _oechem.OEAtomBondSetIter_next(self)

    def Target(self) -> "OEChem::OEAtomBondSet &":
        r"""Target(OEAtomBondSetIter self) -> OEAtomBondSet"""
        return _oechem.OEAtomBondSetIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEAtomBondSet > &":
        r"""
        Next(OEAtomBondSetIter self) -> OEAtomBondSetIter
        Next(OEAtomBondSetIter self, int i) -> OEAtomBondSetIter
        """
        return _oechem.OEAtomBondSetIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEAtomBondSet > &":
        r"""
        Prev(OEAtomBondSetIter self) -> OEAtomBondSetIter
        Prev(OEAtomBondSetIter self, int i) -> OEAtomBondSetIter
        """
        return _oechem.OEAtomBondSetIter_Prev(self, *args)

# Register OEAtomBondSetIter in _oechem:
_oechem.OEAtomBondSetIter_swigregister(OEAtomBondSetIter)

class OESubSearch(object):
    r"""Proxy of C++ OEChem::OESubSearch 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__(OESubSearch self) -> OESubSearch
        __init__(OESubSearch self, char const * smarts, bool allowReorderAtoms=False) -> OESubSearch
        __init__(OESubSearch self, OEMolBase mol, unsigned int aexpr, unsigned int bexpr) -> OESubSearch
        __init__(OESubSearch self, OEQMolBase arg2) -> OESubSearch
        __init__(OESubSearch self, OESubSearch arg2) -> OESubSearch
        """
        _oechem.OESubSearch_swiginit(self, _oechem.new_OESubSearch(*args))
    __swig_destroy__ = _oechem.delete_OESubSearch

    def IsValid(self):
      return _oechem.OESubSearch___nonzero__(self)



    def Init(self, *args) -> "bool":
        r"""
        Init(OESubSearch self, char const * smarts, bool allowReorderAtoms=False) -> bool
        Init(OESubSearch self, OEQMolBase arg2) -> bool
        Init(OESubSearch self, OEMolBase mol, unsigned int aexpr, unsigned int bexpr) -> bool
        """
        return _oechem.OESubSearch_Init(self, *args)

    def AtomMatch(self, arg2: "OEAtomBase") -> "bool":
        r"""AtomMatch(OESubSearch self, OEAtomBase arg2) -> bool"""
        return _oechem.OESubSearch_AtomMatch(self, arg2)

    def SingleMatch(self, *args) -> "bool":
        r"""
        SingleMatch(OESubSearch self, OEMolBase arg2) -> bool
        SingleMatch(OESubSearch self, OEQMolBase arg2) -> bool
        """
        return _oechem.OESubSearch_SingleMatch(self, *args)

    def Match(self, *args) -> "OESystem::OEIterBase< OEChem::OEMatchBase > *":
        r"""
        Match(OESubSearch self, OEMolBase arg2, bool uniquematch=False) -> OESystem::OEIterBase< OEChem::OEMatchBase >
        Match(OESubSearch self, OEQMolBase arg2, bool uniquematch=False) -> OESystem::OEIterBase< OEChem::OEMatchBase >
        """
        return _oechem.OESubSearch_Match(self, *args)

    def GetPattern(self) -> "OEChem::OEQMolBase const &":
        r"""GetPattern(OESubSearch self) -> OEQMolBase"""
        return _oechem.OESubSearch_GetPattern(self)

    def GetMaxMatches(self) -> "unsigned int":
        r"""GetMaxMatches(OESubSearch self) -> unsigned int"""
        return _oechem.OESubSearch_GetMaxMatches(self)

    def SetMaxMatches(self, m: "unsigned int") -> "bool":
        r"""SetMaxMatches(OESubSearch self, unsigned int m) -> bool"""
        return _oechem.OESubSearch_SetMaxMatches(self, m)

    def AddConstraint(self, *args) -> "bool":
        r"""
        AddConstraint(OESubSearch self, OEMatchPairAtom arg2) -> bool
        AddConstraint(OESubSearch self, OEMatchPairBond arg2) -> bool
        """
        return _oechem.OESubSearch_AddConstraint(self, *args)

    def ClearConstraints(self) -> "void":
        r"""ClearConstraints(OESubSearch self)"""
        return _oechem.OESubSearch_ClearConstraints(self)

    def GetImpl(self, *args) -> "OEChem::OESearchImpl const *":
        r"""
        GetImpl(OESubSearch self) -> OEChem::OESearchImpl
        GetImpl(OESubSearch self) -> OEChem::OESearchImpl const *
        """
        return _oechem.OESubSearch_GetImpl(self, *args)

# Register OESubSearch in _oechem:
_oechem.OESubSearch_swigregister(OESubSearch)


def OEPrepareSearch(mol: "OEMolBase", subs: "OESubSearch", adjustH: "bool"=False) -> "void":
    r"""OEPrepareSearch(OEMolBase mol, OESubSearch subs, bool adjustH=False)"""
    return _oechem.OEPrepareSearch(mol, subs, adjustH)

def OECount(*args) -> "unsigned int":
    r"""
    OECount(OEMolBase arg1, OEUnaryAtomPred arg2) -> unsigned int
    OECount(OEMolBase arg1, OEUnaryBondPred arg2) -> unsigned int
    OECount(OEMolBase arg1, OEUnaryGroupPred arg2) -> unsigned int
    OECount(OEAtomBondSet abset, OEUnaryAtomPred atompred) -> unsigned int
    OECount(OEAtomBondSet abset, OEUnaryBondPred bondpred) -> unsigned int
    OECount(OEMolBase arg1, OESubSearch arg2, bool uniquematch=False) -> unsigned int
    """
    return _oechem.OECount(*args)
class OESubSearchIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OESubSearch > 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__(OESubSearchIter self) -> OESubSearchIter
        __init__(OESubSearchIter self, OESubSearchIter rhs) -> OESubSearchIter
        __init__(OESubSearchIter self, OESystem::OEIterBase< OEChem::OESubSearch > * rhs) -> OESubSearchIter
        __init__(OESubSearchIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OESubSearch >::NonConstA > * rhs) -> OESubSearchIter
        """
        _oechem.OESubSearchIter_swiginit(self, _oechem.new_OESubSearchIter(*args))
    __swig_destroy__ = _oechem.delete_OESubSearchIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OESubSearch > *":
        r"""Copy(OESubSearchIter self) -> OESystem::OEIterBase< OEChem::OESubSearch > *"""
        return _oechem.OESubSearchIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OESubSearchIter self, OESystem::OEIterBase< OEChem::OESubSearch > * ib)
        Push(OESubSearchIter self, OESubSearchIter iter)
        """
        return _oechem.OESubSearchIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEChem::OESubSearch,OEChem::OESubSearch > const &") -> "void":
        r"""Sort(OESubSearchIter self, OESystem::OEBinaryPredicate< OEChem::OESubSearch,OEChem::OESubSearch > const & sort_criterion)"""
        return _oechem.OESubSearchIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OESubSearch > &":
        r"""ToFirst(OESubSearchIter self) -> OESubSearchIter"""
        return _oechem.OESubSearchIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OESubSearch > &":
        r"""ToLast(OESubSearchIter self) -> OESubSearchIter"""
        return _oechem.OESubSearchIter_ToLast(self)

    def __ref__(self) -> "OEChem::OESubSearch &":
        r"""__ref__(OESubSearchIter self) -> OESubSearch"""
        return _oechem.OESubSearchIter___ref__(self)

    def IsValid(self):
      return _oechem.OESubSearchIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OESubSearchIter self) -> PyObject *"""
        return _oechem.OESubSearchIter_next(self)

    def Target(self) -> "OEChem::OESubSearch &":
        r"""Target(OESubSearchIter self) -> OESubSearch"""
        return _oechem.OESubSearchIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OESubSearch > &":
        r"""
        Next(OESubSearchIter self) -> OESubSearchIter
        Next(OESubSearchIter self, int i) -> OESubSearchIter
        """
        return _oechem.OESubSearchIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OESubSearch > &":
        r"""
        Prev(OESubSearchIter self) -> OESubSearchIter
        Prev(OESubSearchIter self, int i) -> OESubSearchIter
        """
        return _oechem.OESubSearchIter_Prev(self, *args)

# Register OESubSearchIter in _oechem:
_oechem.OESubSearchIter_swigregister(OESubSearchIter)


def OEExpandSuperAtoms(mol: "OEMolBase") -> "bool":
    r"""OEExpandSuperAtoms(OEMolBase mol) -> bool"""
    return _oechem.OEExpandSuperAtoms(mol)

def OETriposAtomNames(mol: "OEMolBase") -> "void":
    r"""OETriposAtomNames(OEMolBase mol)"""
    return _oechem.OETriposAtomNames(mol)

def OETriposAtomTypes(mol: "OEMolBase") -> "bool":
    r"""OETriposAtomTypes(OEMolBase mol) -> bool"""
    return _oechem.OETriposAtomTypes(mol)

def OETriposAtomTypeNames(mol: "OEMolBase") -> "bool":
    r"""OETriposAtomTypeNames(OEMolBase mol) -> bool"""
    return _oechem.OETriposAtomTypeNames(mol)

def OETriposBondTypeNames(mol: "OEMolBase") -> "void":
    r"""OETriposBondTypeNames(OEMolBase mol)"""
    return _oechem.OETriposBondTypeNames(mol)

def OETriposResonantTypeNames(mol: "OEMolBase") -> "void":
    r"""OETriposResonantTypeNames(OEMolBase mol)"""
    return _oechem.OETriposResonantTypeNames(mol)

def OETriposTypeNames(mol: "OEMolBase") -> "bool":
    r"""OETriposTypeNames(OEMolBase mol) -> bool"""
    return _oechem.OETriposTypeNames(mol)

def OETriposAtomType(atm: "OEAtomBase") -> "unsigned int":
    r"""OETriposAtomType(OEAtomBase atm) -> unsigned int"""
    return _oechem.OETriposAtomType(atm)

def OETriposTypeName(type: "unsigned int") -> "char const *":
    r"""OETriposTypeName(unsigned int type) -> char const *"""
    return _oechem.OETriposTypeName(type)

def OETriposTypeElement(type: "unsigned int") -> "unsigned int":
    r"""OETriposTypeElement(unsigned int type) -> unsigned int"""
    return _oechem.OETriposTypeElement(type)

def OETriposTypeIndex(name: "char const *") -> "unsigned int":
    r"""OETriposTypeIndex(char const * name) -> unsigned int"""
    return _oechem.OETriposTypeIndex(name)

def OETriposOrderAtoms(mol: "OEMolBase") -> "void":
    r"""OETriposOrderAtoms(OEMolBase mol)"""
    return _oechem.OETriposOrderAtoms(mol)

def OEGetSoleNeighbor(atm: "OEAtomBase") -> "OEChem::OEAtomBase *":
    r"""OEGetSoleNeighbor(OEAtomBase atm) -> OEAtomBase"""
    return _oechem.OEGetSoleNeighbor(atm)

def OEGetSingleBondNeighbor(atm: "OEAtomBase") -> "OEChem::OEAtomBase *":
    r"""OEGetSingleBondNeighbor(OEAtomBase atm) -> OEAtomBase"""
    return _oechem.OEGetSingleBondNeighbor(atm)

def OEGetDoubleBondNeighbor(atm: "OEAtomBase") -> "OEChem::OEAtomBase *":
    r"""OEGetDoubleBondNeighbor(OEAtomBase atm) -> OEAtomBase"""
    return _oechem.OEGetDoubleBondNeighbor(atm)

def OEGetTripleBondNeighbor(atm: "OEAtomBase") -> "OEChem::OEAtomBase *":
    r"""OEGetTripleBondNeighbor(OEAtomBase atm) -> OEAtomBase"""
    return _oechem.OEGetTripleBondNeighbor(atm)

def OEGetSoleBond(atm: "OEAtomBase") -> "OEChem::OEBondBase *":
    r"""OEGetSoleBond(OEAtomBase atm) -> OEBondBase"""
    return _oechem.OEGetSoleBond(atm)

def OEGetSoleSingleBond(atm: "OEAtomBase") -> "OEChem::OEBondBase *":
    r"""OEGetSoleSingleBond(OEAtomBase atm) -> OEBondBase"""
    return _oechem.OEGetSoleSingleBond(atm)

def OEGetSoleDoubleBond(atm: "OEAtomBase") -> "OEChem::OEBondBase *":
    r"""OEGetSoleDoubleBond(OEAtomBase atm) -> OEBondBase"""
    return _oechem.OEGetSoleDoubleBond(atm)

def OEGetSoleTripleBond(atm: "OEAtomBase") -> "OEChem::OEBondBase *":
    r"""OEGetSoleTripleBond(OEAtomBase atm) -> OEBondBase"""
    return _oechem.OEGetSoleTripleBond(atm)

def OEGetOtherNeighbor(*args) -> "OEChem::OEBondBase *":
    r"""
    OEGetOtherNeighbor(OEAtomBase atm, OEAtomBase nbr) -> OEAtomBase
    OEGetOtherNeighbor(OEAtomBase atm, OEBondBase nbr) -> OEBondBase
    """
    return _oechem.OEGetOtherNeighbor(*args)

def OEIsTerminalOxygen(atm: "OEAtomBase") -> "bool":
    r"""OEIsTerminalOxygen(OEAtomBase atm) -> bool"""
    return _oechem.OEIsTerminalOxygen(atm)

def OEIsTerminalSulfur(atm: "OEAtomBase") -> "bool":
    r"""OEIsTerminalSulfur(OEAtomBase atm) -> bool"""
    return _oechem.OEIsTerminalSulfur(atm)

def OEHasSingleBond(atm: "OEAtomBase") -> "bool":
    r"""OEHasSingleBond(OEAtomBase atm) -> bool"""
    return _oechem.OEHasSingleBond(atm)

def OEHasDoubleBond(atm: "OEAtomBase") -> "bool":
    r"""OEHasDoubleBond(OEAtomBase atm) -> bool"""
    return _oechem.OEHasDoubleBond(atm)

def OEHasTripleBond(atm: "OEAtomBase") -> "bool":
    r"""OEHasTripleBond(OEAtomBase atm) -> bool"""
    return _oechem.OEHasTripleBond(atm)

def OEHasMultipleBond(atm: "OEAtomBase") -> "bool":
    r"""OEHasMultipleBond(OEAtomBase atm) -> bool"""
    return _oechem.OEHasMultipleBond(atm)

def OEHasDoubleBondO(atm: "OEAtomBase") -> "bool":
    r"""OEHasDoubleBondO(OEAtomBase atm) -> bool"""
    return _oechem.OEHasDoubleBondO(atm)

def OESingleBondCount(atm: "OEAtomBase") -> "unsigned int":
    r"""OESingleBondCount(OEAtomBase atm) -> unsigned int"""
    return _oechem.OESingleBondCount(atm)

def OEDoubleBondCount(atm: "OEAtomBase") -> "unsigned int":
    r"""OEDoubleBondCount(OEAtomBase atm) -> unsigned int"""
    return _oechem.OEDoubleBondCount(atm)

def OETripleBondCount(atm: "OEAtomBase") -> "unsigned int":
    r"""OETripleBondCount(OEAtomBase atm) -> unsigned int"""
    return _oechem.OETripleBondCount(atm)

def OEMultipleBondCount(atm: "OEAtomBase") -> "unsigned int":
    r"""OEMultipleBondCount(OEAtomBase atm) -> unsigned int"""
    return _oechem.OEMultipleBondCount(atm)

def OEDoubleBondOCount(atm: "OEAtomBase") -> "unsigned int":
    r"""OEDoubleBondOCount(OEAtomBase atm) -> unsigned int"""
    return _oechem.OEDoubleBondOCount(atm)

def OETerminalOCount(atm: "OEAtomBase") -> "unsigned int":
    r"""OETerminalOCount(OEAtomBase atm) -> unsigned int"""
    return _oechem.OETerminalOCount(atm)

def OETerminalSCount(atm: "OEAtomBase") -> "unsigned int":
    r"""OETerminalSCount(OEAtomBase atm) -> unsigned int"""
    return _oechem.OETerminalSCount(atm)
OE_OECHEM_VERSION = _oechem.OE_OECHEM_VERSION


def OEChemGetRelease() -> "char const *":
    r"""OEChemGetRelease() -> char const *"""
    return _oechem.OEChemGetRelease()

def OEChemGetVersion() -> "unsigned int":
    r"""OEChemGetVersion() -> unsigned int"""
    return _oechem.OEChemGetVersion()

def OEChemGetArch() -> "char const *":
    r"""OEChemGetArch() -> char const *"""
    return _oechem.OEChemGetArch()

def OEChemGetPlatform() -> "char const *":
    r"""OEChemGetPlatform() -> char const *"""
    return _oechem.OEChemGetPlatform()

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

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

def OEChemGetSite(*args) -> "std::string":
    r"""
    OEChemGetSite(std::string & site) -> bool
    OEChemGetSite() -> std::string
    """
    return _oechem.OEChemGetSite(*args)
class OELingoSim(object):
    r"""Proxy of C++ OEChem::OELingoSim 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__(OELingoSim self, OEMolBase mol, unsigned int type=) -> OELingoSim
        __init__(OELingoSim self, char const * str=None, unsigned int type=) -> OELingoSim
        __init__(OELingoSim self, OELingoSim rhs) -> OELingoSim
        """
        _oechem.OELingoSim_swiginit(self, _oechem.new_OELingoSim(*args))
    __swig_destroy__ = _oechem.delete_OELingoSim

    def Similarity(self, *args) -> "float":
        r"""
        Similarity(OELingoSim self, OEMolBase mol) -> float
        Similarity(OELingoSim self, char const * str) -> float
        """
        return _oechem.OELingoSim_Similarity(self, *args)

    def Init(self, *args) -> "bool":
        r"""
        Init(OELingoSim self, OEMolBase mol) -> bool
        Init(OELingoSim self, char const * str) -> bool
        """
        return _oechem.OELingoSim_Init(self, *args)

    def IsValid(self) -> "bool":
        r"""IsValid(OELingoSim self) -> bool"""
        return _oechem.OELingoSim_IsValid(self)

    def GetType(self) -> "unsigned int":
        r"""GetType(OELingoSim self) -> unsigned int"""
        return _oechem.OELingoSim_GetType(self)

# Register OELingoSim in _oechem:
_oechem.OELingoSim_swigregister(OELingoSim)


def OEPrivateFNV1aHashValue(c: "char const", hash: "std::uint64_t") -> "std::uint64_t":
    r"""OEPrivateFNV1aHashValue(char const c, std::uint64_t hash) -> std::uint64_t"""
    return _oechem.OEPrivateFNV1aHashValue(c, hash)

def OEPrivateFNV1aHashRng(beg: "char const *", end: "char const *", hash: "std::uint64_t") -> "std::uint64_t":
    r"""OEPrivateFNV1aHashRng(char const * beg, char const * end, std::uint64_t hash) -> std::uint64_t"""
    return _oechem.OEPrivateFNV1aHashRng(beg, end, hash)

def OEPrivateFNV1aHashCstr(beg: "char const *", hash: "std::uint64_t") -> "std::uint64_t":
    r"""OEPrivateFNV1aHashCstr(char const * beg, std::uint64_t hash) -> std::uint64_t"""
    return _oechem.OEPrivateFNV1aHashCstr(beg, hash)
class OETransBase(object):
    r"""Proxy of C++ OEChem::OETransBase 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__ = _oechem.delete_OETransBase

    def CreateCopy(self) -> "OEChem::OETransBase *":
        r"""CreateCopy(OETransBase self) -> OETransBase"""
        return _oechem.OETransBase_CreateCopy(self)

    def GetInverse(self) -> "OEChem::OETransBase *":
        r"""GetInverse(OETransBase self) -> OETransBase"""
        return _oechem.OETransBase_GetInverse(self)

    def Extract(self, *args) -> "void":
        r"""
        Extract(OETransBase self, float * arg2, float * arg3)
        Extract(OETransBase self, float * arg2, double * arg3)
        Extract(OETransBase self, double * arg2, float * arg3)
        Extract(OETransBase self, double * arg2, double * arg3)
        """
        return _oechem.OETransBase_Extract(self, *args)

    def Transform(self, *args) -> "void":
        r"""
        Transform(OETransBase self, OEMolBase mol)
        Transform(OETransBase self, OEConfBase conf)
        Transform(OETransBase self, float * coords, unsigned int rows, unsigned int dim)
        Transform(OETransBase self, double * coords, unsigned int rows, unsigned int dim)
        """
        return _oechem.OETransBase_Transform(self, *args)

# Register OETransBase in _oechem:
_oechem.OETransBase_swigregister(OETransBase)

class OEQuaternion(OETransBase):
    r"""Proxy of C++ OEChem::OEQuaternion 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__(OEQuaternion self) -> OEQuaternion
        __init__(OEQuaternion self, double const w, double const x, double const y, double const z) -> OEQuaternion
        __init__(OEQuaternion self, float const w, float const x, float const y, float const z) -> OEQuaternion
        __init__(OEQuaternion self, double const * vec, double angle) -> OEQuaternion
        __init__(OEQuaternion self, float const * vec, float angle) -> OEQuaternion
        __init__(OEQuaternion self, double const * quat) -> OEQuaternion
        __init__(OEQuaternion self, float const * quat) -> OEQuaternion
        """
        _oechem.OEQuaternion_swiginit(self, _oechem.new_OEQuaternion(*args))

    def GetQuaternion(self, *args) -> "void":
        r"""
        GetQuaternion(OEQuaternion self, double * quat)
        GetQuaternion(OEQuaternion self, float * quat)
        """
        return _oechem.OEQuaternion_GetQuaternion(self, *args)

    def CreateCopy(self) -> "OEChem::OETransBase *":
        r"""CreateCopy(OEQuaternion self) -> OETransBase"""
        return _oechem.OEQuaternion_CreateCopy(self)

    def GetInverse(self) -> "OEChem::OETransBase *":
        r"""GetInverse(OEQuaternion self) -> OETransBase"""
        return _oechem.OEQuaternion_GetInverse(self)

    def Extract(self, *args) -> "void":
        r"""
        Extract(OEQuaternion self, float * r, float * t)
        Extract(OEQuaternion self, float * r, double * t)
        Extract(OEQuaternion self, double * r, float * t)
        Extract(OEQuaternion self, double * r, double * t)
        """
        return _oechem.OEQuaternion_Extract(self, *args)
    __swig_destroy__ = _oechem.delete_OEQuaternion

# Register OEQuaternion in _oechem:
_oechem.OEQuaternion_swigregister(OEQuaternion)

class OEEuler(OETransBase):
    r"""Proxy of C++ OEChem::OEEuler 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__(OEEuler self) -> OEEuler
        __init__(OEEuler self, double const * angles) -> OEEuler
        __init__(OEEuler self, float const * angles) -> OEEuler
        __init__(OEEuler self, double phi, double theta, double psi) -> OEEuler
        """
        _oechem.OEEuler_swiginit(self, _oechem.new_OEEuler(*args))

    def GetAngles(self, *args) -> "void":
        r"""
        GetAngles(OEEuler self, double * angles)
        GetAngles(OEEuler self, float * angles)
        """
        return _oechem.OEEuler_GetAngles(self, *args)

    def CreateCopy(self) -> "OEChem::OETransBase *":
        r"""CreateCopy(OEEuler self) -> OETransBase"""
        return _oechem.OEEuler_CreateCopy(self)

    def GetInverse(self) -> "OEChem::OETransBase *":
        r"""GetInverse(OEEuler self) -> OETransBase"""
        return _oechem.OEEuler_GetInverse(self)

    def GetPhi(self) -> "double":
        r"""GetPhi(OEEuler self) -> double"""
        return _oechem.OEEuler_GetPhi(self)

    def GetTheta(self) -> "double":
        r"""GetTheta(OEEuler self) -> double"""
        return _oechem.OEEuler_GetTheta(self)

    def GetPsi(self) -> "double":
        r"""GetPsi(OEEuler self) -> double"""
        return _oechem.OEEuler_GetPsi(self)

    def SetPhi(self, radians: "double") -> "void":
        r"""SetPhi(OEEuler self, double radians)"""
        return _oechem.OEEuler_SetPhi(self, radians)

    def SetTheta(self, radians: "double") -> "void":
        r"""SetTheta(OEEuler self, double radians)"""
        return _oechem.OEEuler_SetTheta(self, radians)

    def SetPsi(self, radians: "double") -> "void":
        r"""SetPsi(OEEuler self, double radians)"""
        return _oechem.OEEuler_SetPsi(self, radians)

    def Extract(self, *args) -> "void":
        r"""
        Extract(OEEuler self, float * r, float * t)
        Extract(OEEuler self, float * r, double * t)
        Extract(OEEuler self, double * r, float * t)
        Extract(OEEuler self, double * r, double * t)
        """
        return _oechem.OEEuler_Extract(self, *args)
    __swig_destroy__ = _oechem.delete_OEEuler

# Register OEEuler in _oechem:
_oechem.OEEuler_swigregister(OEEuler)

class OERotMatrix(OETransBase):
    r"""Proxy of C++ OEChem::OERotMatrix 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__(OERotMatrix self) -> OERotMatrix
        __init__(OERotMatrix self, double const * mat) -> OERotMatrix
        __init__(OERotMatrix self, float const * mat) -> OERotMatrix
        __init__(OERotMatrix self, OERotMatrix rhs) -> OERotMatrix
        """
        _oechem.OERotMatrix_swiginit(self, _oechem.new_OERotMatrix(*args))

    def GetRotMatrix(self, *args) -> "void":
        r"""
        GetRotMatrix(OERotMatrix self, double * mat)
        GetRotMatrix(OERotMatrix self, float * mat)
        """
        return _oechem.OERotMatrix_GetRotMatrix(self, *args)

    def CreateCopy(self) -> "OEChem::OETransBase *":
        r"""CreateCopy(OERotMatrix self) -> OETransBase"""
        return _oechem.OERotMatrix_CreateCopy(self)

    def GetInverse(self) -> "OEChem::OETransBase *":
        r"""GetInverse(OERotMatrix self) -> OETransBase"""
        return _oechem.OERotMatrix_GetInverse(self)

    def Extract(self, *args) -> "void":
        r"""
        Extract(OERotMatrix self, float * r, float * t)
        Extract(OERotMatrix self, float * r, double * t)
        Extract(OERotMatrix self, double * r, float * t)
        Extract(OERotMatrix self, double * r, double * t)
        """
        return _oechem.OERotMatrix_Extract(self, *args)
    __swig_destroy__ = _oechem.delete_OERotMatrix

# Register OERotMatrix in _oechem:
_oechem.OERotMatrix_swigregister(OERotMatrix)

class OETranslation(OETransBase):
    r"""Proxy of C++ OEChem::OETranslation 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__(OETranslation self) -> OETranslation
        __init__(OETranslation self, double const * vec) -> OETranslation
        __init__(OETranslation self, float const * vec) -> OETranslation
        __init__(OETranslation self, double dx, double dy, double dz) -> OETranslation
        """
        _oechem.OETranslation_swiginit(self, _oechem.new_OETranslation(*args))

    def __iadd__(self, rhs: "OETranslation") -> "OEChem::OETranslation &":
        r"""__iadd__(OETranslation self, OETranslation rhs) -> OETranslation"""
        return _oechem.OETranslation___iadd__(self, rhs)

    def GetTranslation(self, *args) -> "void":
        r"""
        GetTranslation(OETranslation self, double * vec)
        GetTranslation(OETranslation self, float * vec)
        """
        return _oechem.OETranslation_GetTranslation(self, *args)

    def CreateCopy(self) -> "OEChem::OETransBase *":
        r"""CreateCopy(OETranslation self) -> OETransBase"""
        return _oechem.OETranslation_CreateCopy(self)

    def GetInverse(self) -> "OEChem::OETransBase *":
        r"""GetInverse(OETranslation self) -> OETransBase"""
        return _oechem.OETranslation_GetInverse(self)

    def Extract(self, *args) -> "void":
        r"""
        Extract(OETranslation self, float * r, float * t)
        Extract(OETranslation self, float * r, double * t)
        Extract(OETranslation self, double * r, float * t)
        Extract(OETranslation self, double * r, double * t)
        """
        return _oechem.OETranslation_Extract(self, *args)
    __swig_destroy__ = _oechem.delete_OETranslation

# Register OETranslation in _oechem:
_oechem.OETranslation_swigregister(OETranslation)

class OETrans(object):
    r"""Proxy of C++ OEChem::OETrans 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__(OETrans self) -> OETrans
        __init__(OETrans self, OETransBase tr) -> OETrans
        __init__(OETrans self, OETrans rhs) -> OETrans
        """
        _oechem.OETrans_swiginit(self, _oechem.new_OETrans(*args))

    def __iadd__(self, rhs: "OETrans") -> "OEChem::OETrans &":
        r"""__iadd__(OETrans self, OETrans rhs) -> OETrans"""
        return _oechem.OETrans___iadd__(self, rhs)

    def Clear(self) -> "void":
        r"""Clear(OETrans self)"""
        return _oechem.OETrans_Clear(self)
    __swig_destroy__ = _oechem.delete_OETrans

    def GetInverse(self, inverse: "OETrans") -> "bool":
        r"""GetInverse(OETrans self, OETrans inverse) -> bool"""
        return _oechem.OETrans_GetInverse(self, inverse)

    def PushFront(self, t: "OETransBase") -> "void":
        r"""PushFront(OETrans self, OETransBase t)"""
        return _oechem.OETrans_PushFront(self, t)

    def PushBack(self, t: "OETransBase") -> "void":
        r"""PushBack(OETrans self, OETransBase t)"""
        return _oechem.OETrans_PushBack(self, t)

    def Compress(self) -> "void":
        r"""Compress(OETrans self)"""
        return _oechem.OETrans_Compress(self)

    def GetTransforms(self) -> "OESystem::OEIterBase< OEChem::OETransBase > *":
        r"""GetTransforms(OETrans self) -> OESystem::OEIterBase< OEChem::OETransBase > *"""
        return _oechem.OETrans_GetTransforms(self)

    def IsValid(self):
      return _oechem.OETrans___nonzero__(self)



    def Transform(self, *args) -> "void":
        r"""
        Transform(OETrans self, float * coords, unsigned int ncoords, unsigned int dim)
        Transform(OETrans self, double * coords, unsigned int ncoords, unsigned int dim)
        Transform(OETrans self, OEConfBase conf)
        Transform(OETrans self, OEMolBase mol)
        """
        return _oechem.OETrans_Transform(self, *args)

    def Extract(self, *args) -> "void":
        r"""
        Extract(OETrans self, float * rmat, float * trans, bool clobber=True)
        Extract(OETrans self, double * rmat, double * trans, bool clobber=True)
        """
        return _oechem.OETrans_Extract(self, *args)

# Register OETrans in _oechem:
_oechem.OETrans_swigregister(OETrans)



def OEAddLicenseFromHttp(url):
    """Retrieve a presumably valid license from url and add its permissions to the licensing system.
       Only HTTP and HTTPS protocols are supported.  Query parameters in url are ignored."""

    import sys
    if sys.version_info[0] >= 3:
        import http.client as httplib
        from urllib.parse import urlparse
    else:
        import httplib
        from urlparse import urlparse

    if not url:
        raise Exception("URL can't be None and must not be empty")

    parts = urlparse(url)
    conn = None
    try:
        if parts.scheme == "http":
            conn = httplib.HTTPConnection(parts.netloc, timeout=10)
        elif parts.scheme == "https":
            conn = httplib.HTTPSConnection(parts.netloc, timeout=10)
        else:
            raise Exception("Invalid url scheme: " + parts.scheme)

        conn.request("GET", parts.path)
        response = conn.getresponse()
        if response.status != httplib.OK:
           raise Exception("Can't download license: server response status: %d %s" % (response.status, response.reason))

        ctype = response.getheader("Content-type")
        if ctype not in ["text/plain", "text/html; charset=utf-8", "text/plain; charset=utf-8"]:
            raise Exception("Invalid Content-type encoding: " + ctype)

        licenseContent = response.read()
        if sys.version_info[0] >= 3:
            licenseContent = licenseContent.decode("UTF-8")
        OEAddLicenseData(licenseContent)
    finally:
        if conn:
            conn.close()


def OEAddLicenseData(data: "std::string const &") -> "void":
    r"""OEAddLicenseData(std::string const & data)"""
    return _oechem.OEAddLicenseData(data)

def OEAddLicenseKey(key: "char const *", licensee: "char const *", site: "char const *") -> "int":
    r"""OEAddLicenseKey(char const * key, char const * licensee, char const * site) -> int"""
    return _oechem.OEAddLicenseKey(key, licensee, site)

def OESetLicenseFile(fname: "char const *") -> "void":
    r"""OESetLicenseFile(char const * fname)"""
    return _oechem.OESetLicenseFile(fname)

def OESetLicenseFileCheck(state: "bool") -> "void":
    r"""OESetLicenseFileCheck(bool state)"""
    return _oechem.OESetLicenseFileCheck(state)

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

def OEGetIPAddress() -> "unsigned char *":
    r"""OEGetIPAddress() -> unsigned char *"""
    return _oechem.OEGetIPAddress()

def OEGetHostIdent() -> "unsigned int":
    r"""OEGetHostIdent() -> unsigned int"""
    return _oechem.OEGetHostIdent()

def OEGetDomainName() -> "char *":
    r"""OEGetDomainName() -> char *"""
    return _oechem.OEGetDomainName()

def OEGetHostName() -> "char *":
    r"""OEGetHostName() -> char *"""
    return _oechem.OEGetHostName()

def OEGetNumProcessors() -> "unsigned int":
    r"""OEGetNumProcessors() -> unsigned int"""
    return _oechem.OEGetNumProcessors()

def OEToolkitsGetRelease() -> "std::string":
    r"""OEToolkitsGetRelease() -> std::string"""
    return _oechem.OEToolkitsGetRelease()
OE_STREAM_BUFFER_SIZE = _oechem.OE_STREAM_BUFFER_SIZE

OE_FILE_SEP_CHAR = _oechem.OE_FILE_SEP_CHAR

OEEOF = _oechem.OEEOF

class OEIOError(object):
    r"""Proxy of C++ OEPlatform::OEIOError 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__(OEIOError self, char const * msg) -> OEIOError
        __init__(OEIOError self) -> OEIOError
        """
        _oechem.OEIOError_swiginit(self, _oechem.new_OEIOError(*args))

    def what(self) -> "char const *":
        r"""what(OEIOError self) -> char const *"""
        return _oechem.OEIOError_what(self)
    __swig_destroy__ = _oechem.delete_OEIOError

# Register OEIOError in _oechem:
_oechem.OEIOError_swigregister(OEIOError)

class oestream(object):
    r"""Proxy of C++ OEPlatform::oestream 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__(oestream self) -> oestream"""
        _oechem.oestream_swiginit(self, _oechem.new_oestream())
    __swig_destroy__ = _oechem.delete_oestream
    beg = _oechem.oestream_beg
    
    cur = _oechem.oestream_cur
    
    end = _oechem.oestream_end
    

    def eof(self) -> "bool":
        r"""eof(oestream self) -> bool"""
        return _oechem.oestream_eof(self)

    def length(self) -> "oefpos_t":
        r"""length(oestream self) -> oefpos_t"""
        return _oechem.oestream_length(self)

    def size(self) -> "oefpos_t":
        r"""size(oestream self) -> oefpos_t"""
        return _oechem.oestream_size(self)

    def tell(self) -> "oefpos_t":
        r"""tell(oestream self) -> oefpos_t"""
        return _oechem.oestream_tell(self)

    def seek(self, *args) -> "bool":
        r"""
        seek(oestream self, oefpos_t pos) -> bool
        seek(oestream self, oefpos_t offset, OEPlatform::oestream::seek_dir dir) -> bool
        """
        return _oechem.oestream_seek(self, *args)

    def rewind(self) -> "bool":
        r"""rewind(oestream self) -> bool"""
        return _oechem.oestream_rewind(self)

    def IsValid(self):
      return _oechem.oestream___nonzero__(self)



# Register oestream in _oechem:
_oechem.oestream_swigregister(oestream)

class oeistream(oestream):
    r"""Proxy of C++ OEPlatform::oeistream 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__(oeistream self) -> oeistream"""
        _oechem.oeistream_swiginit(self, _oechem.new_oeistream())

    def open(self, *args) -> "bool":
        r"""
        open(oeistream self, char const * name) -> bool
        open(oeistream self, unsigned char * buffer, oesize_t len) -> bool
        """
        return _oechem.oeistream_open(self, *args)

    def close(self) -> "void":
        r"""close(oeistream self)"""
        return _oechem.oeistream_close(self)

    def getbyte(self) -> "int":
        r"""getbyte(oeistream self) -> int"""
        return _oechem.oeistream_getbyte(self)

    def get(self, *args) -> "bool":
        r"""
        get(oeistream self, char & c) -> bool
        get(oeistream self, signed char & c) -> bool
        get(oeistream self, unsigned char & c) -> bool
        """
        return _oechem.oeistream_get(self, *args)

    def skipbyte(self) -> "bool":
        r"""skipbyte(oeistream self) -> bool"""
        return _oechem.oeistream_skipbyte(self)

    def peekbyte(self) -> "int":
        r"""peekbyte(oeistream self) -> int"""
        return _oechem.oeistream_peekbyte(self)

    def skip(self, len: "oefpos_t") -> "bool":
        r"""skip(oeistream self, oefpos_t len) -> bool"""
        return _oechem.oeistream_skip(self, len)

    def skipline(self) -> "bool":
        r"""skipline(oeistream self) -> bool"""
        return _oechem.oeistream_skipline(self)

    def getline(self, *args) -> "bool":
        r"""
        getline(oeistream self, std::string & sbuffer, oesize_t max) -> bool
        getline(oeistream self, std::string & sbuffer) -> bool
        """
        return _oechem.oeistream_getline(self, *args)

    def gettoken(self, sbuffer: "std::string &", max: "oesize_t") -> "bool":
        r"""gettoken(oeistream self, std::string & sbuffer, oesize_t max) -> bool"""
        return _oechem.oeistream_gettoken(self, sbuffer, max)

    def read(self, *args) -> "PyObject *":
        r"""
        read(oeistream self, std::string & sbuffer) -> oesize_t
        read(oeistream self, oesize_t size=(oesize_t) -1) -> PyObject
        """
        return _oechem.oeistream_read(self, *args)
    __swig_destroy__ = _oechem.delete_oeistream

# Register oeistream in _oechem:
_oechem.oeistream_swigregister(oeistream)

class oeostream(oestream):
    r"""Proxy of C++ OEPlatform::oeostream 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__(oeostream self) -> oeostream
        __init__(oeostream self, oeostream arg2) -> oeostream
        """
        _oechem.oeostream_swiginit(self, _oechem.new_oeostream(*args))

    def open(self, *args) -> "bool":
        r"""
        open(oeostream self, char const * name) -> bool
        open(oeostream self, unsigned char * buffer, oesize_t len) -> bool
        """
        return _oechem.oeostream_open(self, *args)

    def close(self) -> "void":
        r"""close(oeostream self)"""
        return _oechem.oeostream_close(self)

    def flush(self) -> "bool":
        r"""flush(oeostream self) -> bool"""
        return _oechem.oeostream_flush(self)

    def putbyte(self, c: "char") -> "bool":
        r"""putbyte(oeostream self, char c) -> bool"""
        return _oechem.oeostream_putbyte(self, c)

    def write(self, *args) -> "PyObject *":
        r"""
        write(oeostream self, char const * buffer, oesize_t len) -> oesize_t
        write(oeostream self, unsigned char const * buffer, oesize_t len) -> oesize_t
        write(oeostream self, signed char const * buffer, oesize_t len) -> oesize_t
        write(oeostream self, std::string const & buffer, oesize_t len) -> oesize_t
        write(oeostream self, std::string const & buffer) -> oesize_t
        write(oeostream self, PyObject * bytes) -> PyObject *
        """
        return _oechem.oeostream_write(self, *args)
    __swig_destroy__ = _oechem.delete_oeostream

# Register oeostream in _oechem:
_oechem.oeostream_swigregister(oeostream)


def OEOpenIStream(arg1: "char const *") -> "OEPlatform::oeistream *":
    r"""OEOpenIStream(char const * arg1) -> oeistream"""
    return _oechem.OEOpenIStream(arg1)

def OEOpenOStream(arg1: "char const *") -> "OEPlatform::oeostream *":
    r"""OEOpenOStream(char const * arg1) -> oeostream"""
    return _oechem.OEOpenOStream(arg1)

def OECloseIStream(arg1: "oeistream") -> "void":
    r"""OECloseIStream(oeistream arg1)"""
    return _oechem.OECloseIStream(arg1)

def OECloseOStream(arg1: "oeostream") -> "void":
    r"""OECloseOStream(oeostream arg1)"""
    return _oechem.OECloseOStream(arg1)

def OERegisterIStream(arg1: "char const *", arg2: "oeistream_alloc_t", arg3: "oeistream_dealloc_t") -> "bool":
    r"""OERegisterIStream(char const * arg1, oeistream_alloc_t arg2, oeistream_dealloc_t arg3) -> bool"""
    return _oechem.OERegisterIStream(arg1, arg2, arg3)

def OERegisterOStream(arg1: "char const *", arg2: "oeostream_alloc_t", arg3: "oeostream_dealloc_t") -> "bool":
    r"""OERegisterOStream(char const * arg1, oeostream_alloc_t arg2, oeostream_dealloc_t arg3) -> bool"""
    return _oechem.OERegisterOStream(arg1, arg2, arg3)
class oeisstream(oeistream):
    r"""Proxy of C++ OEPlatform::oeisstream class."""

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

    def clear(self) -> "void":
        r"""clear(oeisstream self)"""
        return _oechem.oeisstream_clear(self)
    __swig_destroy__ = _oechem.delete_oeisstream

    def reset(self) -> "bool":
        r"""reset(oeisstream self) -> bool"""
        return _oechem.oeisstream_reset(self)

    def getbuffer(self, buffer: "std::string &") -> "bool":
        r"""getbuffer(oeisstream self, std::string & buffer) -> bool"""
        return _oechem.oeisstream_getbuffer(self, buffer)

    def __str__(self) -> "std::string":
        r"""__str__(oeisstream self) -> std::string"""
        return _oechem.oeisstream___str__(self)

    def __init__(self, *args):
        r"""
        __init__(oeisstream self, char const * buffer, oesize_t len, bool copy=True) -> oeisstream
        __init__(oeisstream self, std::string const & buffer) -> oeisstream
        __init__(oeisstream self) -> oeisstream
        __init__(oeisstream self, oeisstream rhs) -> oeisstream
        __init__(oeisstream self, PyObject * bytes) -> oeisstream
        """
        _oechem.oeisstream_swiginit(self, _oechem.new_oeisstream(*args))

    def set(self, *args) -> "PyObject *":
        r"""
        set(oeisstream self, char const * arg2, oesize_t arg3, bool arg4) -> bool
        set(oeisstream self, std::string const & arg2) -> bool
        set(oeisstream self, PyObject * bytes) -> PyObject *
        """
        return _oechem.oeisstream_set(self, *args)

# Register oeisstream in _oechem:
_oechem.oeisstream_swigregister(oeisstream)

class oeosstream(oeostream):
    r"""Proxy of C++ OEPlatform::oeosstream 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__(oeosstream self) -> oeosstream
        __init__(oeosstream self, unsigned char const * arg2, oesize_t arg3) -> oeosstream
        __init__(oeosstream self, char const * arg2) -> oeosstream
        """
        _oechem.oeosstream_swiginit(self, _oechem.new_oeosstream(*args))
    __swig_destroy__ = _oechem.delete_oeosstream

    def clear(self) -> "void":
        r"""clear(oeosstream self)"""
        return _oechem.oeosstream_clear(self)

    def set(self, *args) -> "bool":
        r"""
        set(oeosstream self, char const * arg2) -> bool
        set(oeosstream self, unsigned char const * arg2, oesize_t arg3) -> bool
        """
        return _oechem.oeosstream_set(self, *args)

    def __str__(self) -> "std::string":
        r"""__str__(oeosstream self) -> std::string"""
        return _oechem.oeosstream___str__(self)

    def str(self) -> "PyObject *":
        r"""str(oeosstream self) -> PyObject *"""
        return _oechem.oeosstream_str(self)

# Register oeosstream in _oechem:
_oechem.oeosstream_swigregister(oeosstream)

class oeifstream(oeistream):
    r"""Proxy of C++ OEPlatform::oeifstream 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__(oeifstream self) -> oeifstream
        __init__(oeifstream self, int ifd) -> oeifstream
        __init__(oeifstream self, char const * filename) -> oeifstream
        """
        _oechem.oeifstream_swiginit(self, _oechem.new_oeifstream(*args))
    __swig_destroy__ = _oechem.delete_oeifstream

    def fd(self) -> "int":
        r"""fd(oeifstream self) -> int"""
        return _oechem.oeifstream_fd(self)

    def openfd(self, ifd: "int", closefd: "bool") -> "bool":
        r"""openfd(oeifstream self, int ifd, bool closefd) -> bool"""
        return _oechem.oeifstream_openfd(self, ifd, closefd)

    def pread(self, buffer: "char *", len: "oesize_t", offset: "oefpos_t") -> "oesize_t":
        r"""pread(oeifstream self, char * buffer, oesize_t len, oefpos_t offset) -> oesize_t"""
        return _oechem.oeifstream_pread(self, buffer, len, offset)

# Register oeifstream in _oechem:
_oechem.oeifstream_swigregister(oeifstream)

class oeofstream(oeostream):
    r"""Proxy of C++ OEPlatform::oeofstream 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__(oeofstream self) -> oeofstream
        __init__(oeofstream self, int ofd) -> oeofstream
        __init__(oeofstream self, char const * filename) -> oeofstream
        """
        _oechem.oeofstream_swiginit(self, _oechem.new_oeofstream(*args))
    __swig_destroy__ = _oechem.delete_oeofstream

    def fd(self) -> "int":
        r"""fd(oeofstream self) -> int"""
        return _oechem.oeofstream_fd(self)

    def openfd(self, ofd: "int", closefd: "bool") -> "bool":
        r"""openfd(oeofstream self, int ofd, bool closefd) -> bool"""
        return _oechem.oeofstream_openfd(self, ofd, closefd)

    def append(self, filename: "char const *") -> "bool":
        r"""append(oeofstream self, char const * filename) -> bool"""
        return _oechem.oeofstream_append(self, filename)

# Register oeofstream in _oechem:
_oechem.oeofstream_swigregister(oeofstream)

class oeiofstream(oeofstream):
    r"""Proxy of C++ OEPlatform::oeiofstream 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__(oeiofstream self) -> oeiofstream
        __init__(oeiofstream self, char const * filename) -> oeiofstream
        __init__(oeiofstream self, std::string const & filename) -> oeiofstream
        """
        _oechem.oeiofstream_swiginit(self, _oechem.new_oeiofstream(*args))
    __swig_destroy__ = _oechem.delete_oeiofstream

    def pread(self, buffer: "char *", len: "oesize_t", offset: "oefpos_t") -> "oesize_t":
        r"""pread(oeiofstream self, char * buffer, oesize_t len, oefpos_t offset) -> oesize_t"""
        return _oechem.oeiofstream_pread(self, buffer, len, offset)

# Register oeiofstream in _oechem:
_oechem.oeiofstream_swigregister(oeiofstream)

class oemultiostream(oeostream):
    r"""Proxy of C++ OEPlatform::oemultiostream 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__(oemultiostream self) -> oemultiostream"""
        _oechem.oemultiostream_swiginit(self, _oechem.new_oemultiostream())
    __swig_destroy__ = _oechem.delete_oemultiostream

    def addstream(self, ostr: "oeostream", owned: "bool"=False) -> "void":
        r"""addstream(oemultiostream self, oeostream ostr, bool owned=False)"""
        return _oechem.oemultiostream_addstream(self, ostr, owned)

    def clear(self) -> "void":
        r"""clear(oemultiostream self)"""
        return _oechem.oemultiostream_clear(self)

# Register oemultiostream in _oechem:
_oechem.oemultiostream_swigregister(oemultiostream)

class oeiwrapperstream(oeistream):
    r"""Proxy of C++ OEPlatform::oeiwrapperstream 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__(oeiwrapperstream self) -> oeiwrapperstream
        __init__(oeiwrapperstream self, oeistream isptr, bool deleteptr) -> oeiwrapperstream
        """
        _oechem.oeiwrapperstream_swiginit(self, _oechem.new_oeiwrapperstream(*args))
    __swig_destroy__ = _oechem.delete_oeiwrapperstream

    def stream(self) -> "OEPlatform::oeistream *":
        r"""stream(oeiwrapperstream self) -> oeistream"""
        return _oechem.oeiwrapperstream_stream(self)

    def clear(self) -> "void":
        r"""clear(oeiwrapperstream self)"""
        return _oechem.oeiwrapperstream_clear(self)

    def set(self, isptr: "oeistream", deleteptr: "bool") -> "bool":
        r"""set(oeiwrapperstream self, oeistream isptr, bool deleteptr) -> bool"""
        return _oechem.oeiwrapperstream_set(self, isptr, deleteptr)

# Register oeiwrapperstream in _oechem:
_oechem.oeiwrapperstream_swigregister(oeiwrapperstream)

class oeowrapperstream(oeostream):
    r"""Proxy of C++ OEPlatform::oeowrapperstream 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__(oeowrapperstream self) -> oeowrapperstream
        __init__(oeowrapperstream self, oeostream osptr, bool deleteptr) -> oeowrapperstream
        """
        _oechem.oeowrapperstream_swiginit(self, _oechem.new_oeowrapperstream(*args))
    __swig_destroy__ = _oechem.delete_oeowrapperstream

    def stream(self) -> "OEPlatform::oeostream *":
        r"""stream(oeowrapperstream self) -> oeostream"""
        return _oechem.oeowrapperstream_stream(self)

    def clear(self) -> "void":
        r"""clear(oeowrapperstream self)"""
        return _oechem.oeowrapperstream_clear(self)

    def set(self, osptr: "oeostream", deleteptr: "bool") -> "bool":
        r"""set(oeowrapperstream self, oeostream osptr, bool deleteptr) -> bool"""
        return _oechem.oeowrapperstream_set(self, osptr, deleteptr)

# Register oeowrapperstream in _oechem:
_oechem.oeowrapperstream_swigregister(oeowrapperstream)


def GetListValues(*args) -> "void":
    r"""
    GetListValues(PyObject * list, unsigned int size, float const * values)
    GetListValues(PyObject * list, unsigned int size, double const * values)
    GetListValues(PyObject * list, unsigned int size, int const * values)
    GetListValues(PyObject * list, unsigned int size, bool const * values)
    """
    return _oechem.GetListValues(*args)

def SetListValues(*args) -> "void":
    r"""
    SetListValues(float * v, unsigned int size, PyObject * p)
    SetListValues(double * v, unsigned int size, PyObject * p)
    SetListValues(int * v, unsigned int size, PyObject * p)
    SetListValues(bool * v, unsigned int size, PyObject * p)
    """
    return _oechem.SetListValues(*args)

def CheckListValues(*args) -> "bool":
    r"""
    CheckListValues(float * arg1, unsigned int size, PyObject * p) -> bool
    CheckListValues(double * arg1, unsigned int size, PyObject * p) -> bool
    CheckListValues(int * arg1, unsigned int size, PyObject * p) -> bool
    CheckListValues(bool * arg1, unsigned int size, PyObject * p) -> bool
    """
    return _oechem.CheckListValues(*args)
class OEGridAbstractBase(OEBase):
    r"""Proxy of C++ OESystem::OEGridAbstractBase 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

    def GetTitle(self) -> "std::string":
        r"""GetTitle(OEGridAbstractBase self) -> std::string"""
        return _oechem.OEGridAbstractBase_GetTitle(self)

    def SetTitle(self, title: "std::string const &") -> "bool":
        r"""SetTitle(OEGridAbstractBase self, std::string const & title) -> bool"""
        return _oechem.OEGridAbstractBase_SetTitle(self, title)

    def GetSpacing(self) -> "float":
        r"""GetSpacing(OEGridAbstractBase self) -> float"""
        return _oechem.OEGridAbstractBase_GetSpacing(self)

    def IsSpacingSet(self) -> "bool":
        r"""IsSpacingSet(OEGridAbstractBase self) -> bool"""
        return _oechem.OEGridAbstractBase_IsSpacingSet(self)

    def GetSize(self) -> "unsigned int":
        r"""GetSize(OEGridAbstractBase self) -> unsigned int"""
        return _oechem.OEGridAbstractBase_GetSize(self)

    def GetXDim(self) -> "unsigned int":
        r"""GetXDim(OEGridAbstractBase self) -> unsigned int"""
        return _oechem.OEGridAbstractBase_GetXDim(self)

    def GetYDim(self) -> "unsigned int":
        r"""GetYDim(OEGridAbstractBase self) -> unsigned int"""
        return _oechem.OEGridAbstractBase_GetYDim(self)

    def GetZDim(self) -> "unsigned int":
        r"""GetZDim(OEGridAbstractBase self) -> unsigned int"""
        return _oechem.OEGridAbstractBase_GetZDim(self)

    def GetXMid(self) -> "float":
        r"""GetXMid(OEGridAbstractBase self) -> float"""
        return _oechem.OEGridAbstractBase_GetXMid(self)

    def GetYMid(self) -> "float":
        r"""GetYMid(OEGridAbstractBase self) -> float"""
        return _oechem.OEGridAbstractBase_GetYMid(self)

    def GetZMid(self) -> "float":
        r"""GetZMid(OEGridAbstractBase self) -> float"""
        return _oechem.OEGridAbstractBase_GetZMid(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEGridAbstractBase self) -> void const *"""
        return _oechem.OEGridAbstractBase_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEGridAbstractBase self, void const * type) -> bool"""
        return _oechem.OEGridAbstractBase_IsDataType(self, type)

    def Clear(self) -> "void":
        r"""Clear(OEGridAbstractBase self)"""
        return _oechem.OEGridAbstractBase_Clear(self)

    def GetDim(self) -> "PyObject *":
        r"""GetDim(OEGridAbstractBase self) -> PyObject *"""
        return _oechem.OEGridAbstractBase_GetDim(self)

    def GetMid(self) -> "PyObject *":
        r"""GetMid(OEGridAbstractBase self) -> PyObject *"""
        return _oechem.OEGridAbstractBase_GetMid(self)
    __swig_destroy__ = _oechem.delete_OEGridAbstractBase

# Register OEGridAbstractBase in _oechem:
_oechem.OEGridAbstractBase_swigregister(OEGridAbstractBase)
oein = cvar.oein
oeout = cvar.oeout
oeerr = cvar.oeerr
oenul = cvar.oenul

class OEGridBase(OEGridAbstractBase):
    r"""Proxy of C++ OESystem::OEGridBase 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")
    __repr__ = _swig_repr

    def Clear(self) -> "void":
        r"""Clear(OEGridBase self)"""
        return _oechem.OEGridBase_Clear(self)

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEGridBase self) -> OEBase"""
        return _oechem.OEGridBase_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEGridBase self) -> void const *"""
        return _oechem.OEGridBase_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEGridBase self, void const * type) -> bool"""
        return _oechem.OEGridBase_IsDataType(self, type)

    def GetTitle(self) -> "std::string":
        r"""GetTitle(OEGridBase self) -> std::string"""
        return _oechem.OEGridBase_GetTitle(self)

    def IsTitleSet(self) -> "bool":
        r"""IsTitleSet(OEGridBase self) -> bool"""
        return _oechem.OEGridBase_IsTitleSet(self)

    def SetTitle(self, title: "std::string const &") -> "bool":
        r"""SetTitle(OEGridBase self, std::string const & title) -> bool"""
        return _oechem.OEGridBase_SetTitle(self, title)

    def GetSpacing(self) -> "float":
        r"""GetSpacing(OEGridBase self) -> float"""
        return _oechem.OEGridBase_GetSpacing(self)

    def IsSpacingSet(self) -> "bool":
        r"""IsSpacingSet(OEGridBase self) -> bool"""
        return _oechem.OEGridBase_IsSpacingSet(self)

    def GetSize(self) -> "unsigned int":
        r"""GetSize(OEGridBase self) -> unsigned int"""
        return _oechem.OEGridBase_GetSize(self)

    def GetXDim(self) -> "unsigned int":
        r"""GetXDim(OEGridBase self) -> unsigned int"""
        return _oechem.OEGridBase_GetXDim(self)

    def GetYDim(self) -> "unsigned int":
        r"""GetYDim(OEGridBase self) -> unsigned int"""
        return _oechem.OEGridBase_GetYDim(self)

    def GetZDim(self) -> "unsigned int":
        r"""GetZDim(OEGridBase self) -> unsigned int"""
        return _oechem.OEGridBase_GetZDim(self)

    def GetXMid(self) -> "float":
        r"""GetXMid(OEGridBase self) -> float"""
        return _oechem.OEGridBase_GetXMid(self)

    def GetYMid(self) -> "float":
        r"""GetYMid(OEGridBase self) -> float"""
        return _oechem.OEGridBase_GetYMid(self)

    def GetZMid(self) -> "float":
        r"""GetZMid(OEGridBase self) -> float"""
        return _oechem.OEGridBase_GetZMid(self)

    def IsXMidSet(self) -> "bool":
        r"""IsXMidSet(OEGridBase self) -> bool"""
        return _oechem.OEGridBase_IsXMidSet(self)

    def IsYMidSet(self) -> "bool":
        r"""IsYMidSet(OEGridBase self) -> bool"""
        return _oechem.OEGridBase_IsYMidSet(self)

    def IsZMidSet(self) -> "bool":
        r"""IsZMidSet(OEGridBase self) -> bool"""
        return _oechem.OEGridBase_IsZMidSet(self)

    def IsInGrid(self, *args) -> "bool":
        r"""
        IsInGrid(OEGridBase self, float x, float y, float z) -> bool
        IsInGrid(OEGridBase self, unsigned int ix, unsigned int iy, unsigned int iz) -> bool
        """
        return _oechem.OEGridBase_IsInGrid(self, *args)

    def GetXInc(self) -> "unsigned int":
        r"""GetXInc(OEGridBase self) -> unsigned int"""
        return _oechem.OEGridBase_GetXInc(self)

    def GetYInc(self) -> "unsigned int":
        r"""GetYInc(OEGridBase self) -> unsigned int"""
        return _oechem.OEGridBase_GetYInc(self)

    def GetZInc(self) -> "unsigned int":
        r"""GetZInc(OEGridBase self) -> unsigned int"""
        return _oechem.OEGridBase_GetZInc(self)

    def GetX(self, ix: "unsigned int") -> "float":
        r"""GetX(OEGridBase self, unsigned int ix) -> float"""
        return _oechem.OEGridBase_GetX(self, ix)

    def GetY(self, iy: "unsigned int") -> "float":
        r"""GetY(OEGridBase self, unsigned int iy) -> float"""
        return _oechem.OEGridBase_GetY(self, iy)

    def GetZ(self, iz: "unsigned int") -> "float":
        r"""GetZ(OEGridBase self, unsigned int iz) -> float"""
        return _oechem.OEGridBase_GetZ(self, iz)

    def GetXIdx(self, *args) -> "unsigned int":
        r"""
        GetXIdx(OEGridBase self, float x) -> unsigned int
        GetXIdx(OEGridBase self, unsigned int el) -> unsigned int
        """
        return _oechem.OEGridBase_GetXIdx(self, *args)

    def GetYIdx(self, *args) -> "unsigned int":
        r"""
        GetYIdx(OEGridBase self, float y) -> unsigned int
        GetYIdx(OEGridBase self, unsigned int el) -> unsigned int
        """
        return _oechem.OEGridBase_GetYIdx(self, *args)

    def GetZIdx(self, *args) -> "unsigned int":
        r"""
        GetZIdx(OEGridBase self, float z) -> unsigned int
        GetZIdx(OEGridBase self, unsigned int el) -> unsigned int
        """
        return _oechem.OEGridBase_GetZIdx(self, *args)

    def GetXMax(self) -> "float":
        r"""GetXMax(OEGridBase self) -> float"""
        return _oechem.OEGridBase_GetXMax(self)

    def GetXMin(self) -> "float":
        r"""GetXMin(OEGridBase self) -> float"""
        return _oechem.OEGridBase_GetXMin(self)

    def GetYMax(self) -> "float":
        r"""GetYMax(OEGridBase self) -> float"""
        return _oechem.OEGridBase_GetYMax(self)

    def GetYMin(self) -> "float":
        r"""GetYMin(OEGridBase self) -> float"""
        return _oechem.OEGridBase_GetYMin(self)

    def GetZMax(self) -> "float":
        r"""GetZMax(OEGridBase self) -> float"""
        return _oechem.OEGridBase_GetZMax(self)

    def GetZMin(self) -> "float":
        r"""GetZMin(OEGridBase self) -> float"""
        return _oechem.OEGridBase_GetZMin(self)

    def GridIdxToElement(self, ix: "unsigned int", iy: "unsigned int", iz: "unsigned int") -> "PyObject *":
        r"""GridIdxToElement(OEGridBase self, unsigned int ix, unsigned int iy, unsigned int iz) -> PyObject *"""
        return _oechem.OEGridBase_GridIdxToElement(self, ix, iy, iz)

    def SpatialCoordToElement(self, x: "float", y: "float", z: "float") -> "PyObject *":
        r"""SpatialCoordToElement(OEGridBase self, float x, float y, float z) -> PyObject *"""
        return _oechem.OEGridBase_SpatialCoordToElement(self, x, y, z)

    def ElementToSpatialCoord(self, el: "unsigned int") -> "PyObject *":
        r"""ElementToSpatialCoord(OEGridBase self, unsigned int el) -> PyObject *"""
        return _oechem.OEGridBase_ElementToSpatialCoord(self, el)

    def ElementToGridIdx(self, el: "unsigned int") -> "PyObject *":
        r"""ElementToGridIdx(OEGridBase self, unsigned int el) -> PyObject *"""
        return _oechem.OEGridBase_ElementToGridIdx(self, el)

    def GridIdxToSpatialCoord(self, ix: "unsigned int", iy: "unsigned int", iz: "unsigned int") -> "PyObject *":
        r"""GridIdxToSpatialCoord(OEGridBase self, unsigned int ix, unsigned int iy, unsigned int iz) -> PyObject *"""
        return _oechem.OEGridBase_GridIdxToSpatialCoord(self, ix, iy, iz)

    def SpatialCoordToGridIdx(self, x: "float", y: "float", z: "float") -> "PyObject *":
        r"""SpatialCoordToGridIdx(OEGridBase self, float x, float y, float z) -> PyObject *"""
        return _oechem.OEGridBase_SpatialCoordToGridIdx(self, x, y, z)
    __swig_destroy__ = _oechem.delete_OEGridBase

# Register OEGridBase in _oechem:
_oechem.OEGridBase_swigregister(OEGridBase)

class OEFixedDoubleGrid(OEGridBase):
    r"""Proxy of C++ OESystem::OEFixedGrid< double > 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")
    __repr__ = _swig_repr

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEFixedDoubleGrid self) -> OEBase"""
        return _oechem.OEFixedDoubleGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEFixedDoubleGrid self) -> void const *"""
        return _oechem.OEFixedDoubleGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEFixedDoubleGrid self, void const * type) -> bool"""
        return _oechem.OEFixedDoubleGrid_IsDataType(self, type)

    def GetValue(self, *args) -> "double":
        r"""
        GetValue(OEFixedDoubleGrid self, unsigned int el) -> double
        GetValue(OEFixedDoubleGrid self, unsigned int ix, unsigned int iy, unsigned int iz) -> double
        GetValue(OEFixedDoubleGrid self, float x, float y, float z) -> double
        """
        return _oechem.OEFixedDoubleGrid_GetValue(self, *args)

    def __getitem__(self, el: "unsigned int") -> "double":
        r"""__getitem__(OEFixedDoubleGrid self, unsigned int el) -> double"""
        return _oechem.OEFixedDoubleGrid___getitem__(self, el)

    def GetValues(self) -> "PyObject *":
        r"""GetValues(OEFixedDoubleGrid self) -> PyObject *"""
        return _oechem.OEFixedDoubleGrid_GetValues(self)

    def __iter__(self) -> "PyObject *":
        r"""__iter__(OEFixedDoubleGrid self) -> PyObject *"""
        return _oechem.OEFixedDoubleGrid___iter__(self)

    def SetValue(self, *args) -> "void":
        r"""
        SetValue(OEFixedDoubleGrid self, unsigned int el, double value)
        SetValue(OEFixedDoubleGrid self, unsigned int ix, unsigned int iy, unsigned int iz, double value)
        SetValue(OEFixedDoubleGrid self, float x, float y, float z, double value)
        """
        return _oechem.OEFixedDoubleGrid_SetValue(self, *args)

    def __setitem__(self, el: "unsigned int", value: "double") -> "void":
        r"""__setitem__(OEFixedDoubleGrid self, unsigned int el, double value)"""
        return _oechem.OEFixedDoubleGrid___setitem__(self, el, value)

    def SetValues(self, *args) -> "PyObject *":
        r"""
        SetValues(OEFixedDoubleGrid self, double const * dataptr, unsigned int length) -> PyObject
        SetValues(OEFixedDoubleGrid self, PyObject * list) -> PyObject *
        """
        return _oechem.OEFixedDoubleGrid_SetValues(self, *args)

    def CheckValues(self, list: "PyObject *") -> "PyObject *":
        r"""CheckValues(OEFixedDoubleGrid self, PyObject * list) -> PyObject *"""
        return _oechem.OEFixedDoubleGrid_CheckValues(self, list)
    __swig_destroy__ = _oechem.delete_OEFixedDoubleGrid

# Register OEFixedDoubleGrid in _oechem:
_oechem.OEFixedDoubleGrid_swigregister(OEFixedDoubleGrid)

class OEFixedFloatGrid(OEGridBase):
    r"""Proxy of C++ OESystem::OEFixedGrid< float > 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")
    __repr__ = _swig_repr

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEFixedFloatGrid self) -> OEBase"""
        return _oechem.OEFixedFloatGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEFixedFloatGrid self) -> void const *"""
        return _oechem.OEFixedFloatGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEFixedFloatGrid self, void const * type) -> bool"""
        return _oechem.OEFixedFloatGrid_IsDataType(self, type)

    def GetValue(self, *args) -> "float":
        r"""
        GetValue(OEFixedFloatGrid self, unsigned int el) -> float
        GetValue(OEFixedFloatGrid self, unsigned int ix, unsigned int iy, unsigned int iz) -> float
        GetValue(OEFixedFloatGrid self, float x, float y, float z) -> float
        """
        return _oechem.OEFixedFloatGrid_GetValue(self, *args)

    def __getitem__(self, el: "unsigned int") -> "float":
        r"""__getitem__(OEFixedFloatGrid self, unsigned int el) -> float"""
        return _oechem.OEFixedFloatGrid___getitem__(self, el)

    def GetValues(self) -> "PyObject *":
        r"""GetValues(OEFixedFloatGrid self) -> PyObject *"""
        return _oechem.OEFixedFloatGrid_GetValues(self)

    def __iter__(self) -> "PyObject *":
        r"""__iter__(OEFixedFloatGrid self) -> PyObject *"""
        return _oechem.OEFixedFloatGrid___iter__(self)

    def SetValue(self, *args) -> "void":
        r"""
        SetValue(OEFixedFloatGrid self, unsigned int el, float value)
        SetValue(OEFixedFloatGrid self, unsigned int ix, unsigned int iy, unsigned int iz, float value)
        SetValue(OEFixedFloatGrid self, float x, float y, float z, float value)
        """
        return _oechem.OEFixedFloatGrid_SetValue(self, *args)

    def __setitem__(self, el: "unsigned int", value: "float") -> "void":
        r"""__setitem__(OEFixedFloatGrid self, unsigned int el, float value)"""
        return _oechem.OEFixedFloatGrid___setitem__(self, el, value)

    def SetValues(self, *args) -> "PyObject *":
        r"""
        SetValues(OEFixedFloatGrid self, float const * dataptr, unsigned int length) -> PyObject
        SetValues(OEFixedFloatGrid self, PyObject * list) -> PyObject *
        """
        return _oechem.OEFixedFloatGrid_SetValues(self, *args)

    def CheckValues(self, list: "PyObject *") -> "PyObject *":
        r"""CheckValues(OEFixedFloatGrid self, PyObject * list) -> PyObject *"""
        return _oechem.OEFixedFloatGrid_CheckValues(self, list)
    __swig_destroy__ = _oechem.delete_OEFixedFloatGrid

# Register OEFixedFloatGrid in _oechem:
_oechem.OEFixedFloatGrid_swigregister(OEFixedFloatGrid)

class OEFixedIntGrid(OEGridBase):
    r"""Proxy of C++ OESystem::OEFixedGrid< int > 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")
    __repr__ = _swig_repr

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEFixedIntGrid self) -> OEBase"""
        return _oechem.OEFixedIntGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEFixedIntGrid self) -> void const *"""
        return _oechem.OEFixedIntGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEFixedIntGrid self, void const * type) -> bool"""
        return _oechem.OEFixedIntGrid_IsDataType(self, type)

    def GetValue(self, *args) -> "int":
        r"""
        GetValue(OEFixedIntGrid self, unsigned int el) -> int
        GetValue(OEFixedIntGrid self, unsigned int ix, unsigned int iy, unsigned int iz) -> int
        GetValue(OEFixedIntGrid self, float x, float y, float z) -> int
        """
        return _oechem.OEFixedIntGrid_GetValue(self, *args)

    def __getitem__(self, el: "unsigned int") -> "int":
        r"""__getitem__(OEFixedIntGrid self, unsigned int el) -> int"""
        return _oechem.OEFixedIntGrid___getitem__(self, el)

    def GetValues(self) -> "PyObject *":
        r"""GetValues(OEFixedIntGrid self) -> PyObject *"""
        return _oechem.OEFixedIntGrid_GetValues(self)

    def __iter__(self) -> "PyObject *":
        r"""__iter__(OEFixedIntGrid self) -> PyObject *"""
        return _oechem.OEFixedIntGrid___iter__(self)

    def SetValue(self, *args) -> "void":
        r"""
        SetValue(OEFixedIntGrid self, unsigned int el, int value)
        SetValue(OEFixedIntGrid self, unsigned int ix, unsigned int iy, unsigned int iz, int value)
        SetValue(OEFixedIntGrid self, float x, float y, float z, int value)
        """
        return _oechem.OEFixedIntGrid_SetValue(self, *args)

    def __setitem__(self, el: "unsigned int", value: "int") -> "void":
        r"""__setitem__(OEFixedIntGrid self, unsigned int el, int value)"""
        return _oechem.OEFixedIntGrid___setitem__(self, el, value)

    def SetValues(self, *args) -> "PyObject *":
        r"""
        SetValues(OEFixedIntGrid self, int const * dataptr, unsigned int length) -> PyObject
        SetValues(OEFixedIntGrid self, PyObject * list) -> PyObject *
        """
        return _oechem.OEFixedIntGrid_SetValues(self, *args)

    def CheckValues(self, list: "PyObject *") -> "PyObject *":
        r"""CheckValues(OEFixedIntGrid self, PyObject * list) -> PyObject *"""
        return _oechem.OEFixedIntGrid_CheckValues(self, list)
    __swig_destroy__ = _oechem.delete_OEFixedIntGrid

# Register OEFixedIntGrid in _oechem:
_oechem.OEFixedIntGrid_swigregister(OEFixedIntGrid)

class OEFixedBoolGrid(OEGridBase):
    r"""Proxy of C++ OESystem::OEFixedGrid< bool > 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")
    __repr__ = _swig_repr

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEFixedBoolGrid self) -> OEBase"""
        return _oechem.OEFixedBoolGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEFixedBoolGrid self) -> void const *"""
        return _oechem.OEFixedBoolGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEFixedBoolGrid self, void const * type) -> bool"""
        return _oechem.OEFixedBoolGrid_IsDataType(self, type)

    def GetValue(self, *args) -> "bool":
        r"""
        GetValue(OEFixedBoolGrid self, unsigned int el) -> bool
        GetValue(OEFixedBoolGrid self, unsigned int ix, unsigned int iy, unsigned int iz) -> bool
        GetValue(OEFixedBoolGrid self, float x, float y, float z) -> bool
        """
        return _oechem.OEFixedBoolGrid_GetValue(self, *args)

    def __getitem__(self, el: "unsigned int") -> "bool":
        r"""__getitem__(OEFixedBoolGrid self, unsigned int el) -> bool"""
        return _oechem.OEFixedBoolGrid___getitem__(self, el)

    def GetValues(self) -> "PyObject *":
        r"""GetValues(OEFixedBoolGrid self) -> PyObject *"""
        return _oechem.OEFixedBoolGrid_GetValues(self)

    def __iter__(self) -> "PyObject *":
        r"""__iter__(OEFixedBoolGrid self) -> PyObject *"""
        return _oechem.OEFixedBoolGrid___iter__(self)

    def SetValue(self, *args) -> "void":
        r"""
        SetValue(OEFixedBoolGrid self, unsigned int el, bool value)
        SetValue(OEFixedBoolGrid self, unsigned int ix, unsigned int iy, unsigned int iz, bool value)
        SetValue(OEFixedBoolGrid self, float x, float y, float z, bool value)
        """
        return _oechem.OEFixedBoolGrid_SetValue(self, *args)

    def __setitem__(self, el: "unsigned int", value: "bool") -> "void":
        r"""__setitem__(OEFixedBoolGrid self, unsigned int el, bool value)"""
        return _oechem.OEFixedBoolGrid___setitem__(self, el, value)

    def SetValues(self, *args) -> "PyObject *":
        r"""
        SetValues(OEFixedBoolGrid self, bool const * dataptr, unsigned int length) -> PyObject
        SetValues(OEFixedBoolGrid self, PyObject * list) -> PyObject *
        """
        return _oechem.OEFixedBoolGrid_SetValues(self, *args)

    def CheckValues(self, list: "PyObject *") -> "PyObject *":
        r"""CheckValues(OEFixedBoolGrid self, PyObject * list) -> PyObject *"""
        return _oechem.OEFixedBoolGrid_CheckValues(self, list)
    __swig_destroy__ = _oechem.delete_OEFixedBoolGrid

# Register OEFixedBoolGrid in _oechem:
_oechem.OEFixedBoolGrid_swigregister(OEFixedBoolGrid)

class OEDoubleGrid(OEFixedDoubleGrid):
    r"""Proxy of C++ OESystem::OEGrid< double > class."""

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

    def Clear(self) -> "void":
        r"""Clear(OEDoubleGrid self)"""
        return _oechem.OEDoubleGrid_Clear(self)

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEDoubleGrid self) -> OEBase"""
        return _oechem.OEDoubleGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEDoubleGrid self) -> void const *"""
        return _oechem.OEDoubleGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEDoubleGrid self, void const * type) -> bool"""
        return _oechem.OEDoubleGrid_IsDataType(self, type)

    def SetSpacing(self, spacing: "float") -> "bool":
        r"""SetSpacing(OEDoubleGrid self, float spacing) -> bool"""
        return _oechem.OEDoubleGrid_SetSpacing(self, spacing)

    def SetMid(self, x: "float", y: "float", z: "float") -> "bool":
        r"""SetMid(OEDoubleGrid self, float x, float y, float z) -> bool"""
        return _oechem.OEDoubleGrid_SetMid(self, x, y, z)

    def SetXMid(self, x: "float") -> "bool":
        r"""SetXMid(OEDoubleGrid self, float x) -> bool"""
        return _oechem.OEDoubleGrid_SetXMid(self, x)

    def SetYMid(self, y: "float") -> "bool":
        r"""SetYMid(OEDoubleGrid self, float y) -> bool"""
        return _oechem.OEDoubleGrid_SetYMid(self, y)

    def SetZMid(self, z: "float") -> "bool":
        r"""SetZMid(OEDoubleGrid self, float z) -> bool"""
        return _oechem.OEDoubleGrid_SetZMid(self, z)

    def SetDim(self, ixdim: "unsigned int", iydim: "unsigned int", izdim: "unsigned int") -> "bool":
        r"""SetDim(OEDoubleGrid self, unsigned int ixdim, unsigned int iydim, unsigned int izdim) -> bool"""
        return _oechem.OEDoubleGrid_SetDim(self, ixdim, iydim, izdim)

    def SetXDim(self, ixdim: "unsigned int") -> "bool":
        r"""SetXDim(OEDoubleGrid self, unsigned int ixdim) -> bool"""
        return _oechem.OEDoubleGrid_SetXDim(self, ixdim)

    def SetYDim(self, iydim: "unsigned int") -> "bool":
        r"""SetYDim(OEDoubleGrid self, unsigned int iydim) -> bool"""
        return _oechem.OEDoubleGrid_SetYDim(self, iydim)

    def SetZDim(self, izdim: "unsigned int") -> "bool":
        r"""SetZDim(OEDoubleGrid self, unsigned int izdim) -> bool"""
        return _oechem.OEDoubleGrid_SetZDim(self, izdim)

    def SetAll(self, xdim: "unsigned int", ydim: "unsigned int", zdim: "unsigned int", midx: "float", midy: "float", midz: "float", spacing: "float", title: "std::string", dataptr: "double *") -> "bool":
        r"""SetAll(OEDoubleGrid self, unsigned int xdim, unsigned int ydim, unsigned int zdim, float midx, float midy, float midz, float spacing, std::string title, double * dataptr) -> bool"""
        return _oechem.OEDoubleGrid_SetAll(self, xdim, ydim, zdim, midx, midy, midz, spacing, title, dataptr)

    def __init__(self, *args):
        r"""
        __init__(OEDoubleGrid self) -> OEDoubleGrid
        __init__(OEDoubleGrid self, OEDoubleGrid rhs) -> OEDoubleGrid
        __init__(OEDoubleGrid self, OEFixedDoubleGrid rhs) -> OEDoubleGrid
        __init__(OEDoubleGrid self, float const [6] minmax, float spacing, char const * title="") -> OEDoubleGrid
        __init__(OEDoubleGrid self, double const [6] minmax, double spacing, char const * title="") -> OEDoubleGrid
        __init__(OEDoubleGrid self, int xdim, int ydim, int zdim, float midx, float midy, float midz, float spacing, std::string title="", double * dataptr=None) -> OEDoubleGrid
        """
        _oechem.OEDoubleGrid_swiginit(self, _oechem.new_OEDoubleGrid(*args))
    __swig_destroy__ = _oechem.delete_OEDoubleGrid

# Register OEDoubleGrid in _oechem:
_oechem.OEDoubleGrid_swigregister(OEDoubleGrid)

class OEFloatGrid(OEFixedFloatGrid):
    r"""Proxy of C++ OESystem::OEGrid< float > class."""

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

    def Clear(self) -> "void":
        r"""Clear(OEFloatGrid self)"""
        return _oechem.OEFloatGrid_Clear(self)

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEFloatGrid self) -> OEBase"""
        return _oechem.OEFloatGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEFloatGrid self) -> void const *"""
        return _oechem.OEFloatGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEFloatGrid self, void const * type) -> bool"""
        return _oechem.OEFloatGrid_IsDataType(self, type)

    def SetSpacing(self, spacing: "float") -> "bool":
        r"""SetSpacing(OEFloatGrid self, float spacing) -> bool"""
        return _oechem.OEFloatGrid_SetSpacing(self, spacing)

    def SetMid(self, x: "float", y: "float", z: "float") -> "bool":
        r"""SetMid(OEFloatGrid self, float x, float y, float z) -> bool"""
        return _oechem.OEFloatGrid_SetMid(self, x, y, z)

    def SetXMid(self, x: "float") -> "bool":
        r"""SetXMid(OEFloatGrid self, float x) -> bool"""
        return _oechem.OEFloatGrid_SetXMid(self, x)

    def SetYMid(self, y: "float") -> "bool":
        r"""SetYMid(OEFloatGrid self, float y) -> bool"""
        return _oechem.OEFloatGrid_SetYMid(self, y)

    def SetZMid(self, z: "float") -> "bool":
        r"""SetZMid(OEFloatGrid self, float z) -> bool"""
        return _oechem.OEFloatGrid_SetZMid(self, z)

    def SetDim(self, ixdim: "unsigned int", iydim: "unsigned int", izdim: "unsigned int") -> "bool":
        r"""SetDim(OEFloatGrid self, unsigned int ixdim, unsigned int iydim, unsigned int izdim) -> bool"""
        return _oechem.OEFloatGrid_SetDim(self, ixdim, iydim, izdim)

    def SetXDim(self, ixdim: "unsigned int") -> "bool":
        r"""SetXDim(OEFloatGrid self, unsigned int ixdim) -> bool"""
        return _oechem.OEFloatGrid_SetXDim(self, ixdim)

    def SetYDim(self, iydim: "unsigned int") -> "bool":
        r"""SetYDim(OEFloatGrid self, unsigned int iydim) -> bool"""
        return _oechem.OEFloatGrid_SetYDim(self, iydim)

    def SetZDim(self, izdim: "unsigned int") -> "bool":
        r"""SetZDim(OEFloatGrid self, unsigned int izdim) -> bool"""
        return _oechem.OEFloatGrid_SetZDim(self, izdim)

    def SetAll(self, xdim: "unsigned int", ydim: "unsigned int", zdim: "unsigned int", midx: "float", midy: "float", midz: "float", spacing: "float", title: "std::string", dataptr: "float *") -> "bool":
        r"""SetAll(OEFloatGrid self, unsigned int xdim, unsigned int ydim, unsigned int zdim, float midx, float midy, float midz, float spacing, std::string title, float * dataptr) -> bool"""
        return _oechem.OEFloatGrid_SetAll(self, xdim, ydim, zdim, midx, midy, midz, spacing, title, dataptr)

    def __init__(self, *args):
        r"""
        __init__(OEFloatGrid self) -> OEFloatGrid
        __init__(OEFloatGrid self, OEFloatGrid rhs) -> OEFloatGrid
        __init__(OEFloatGrid self, OEFixedFloatGrid rhs) -> OEFloatGrid
        __init__(OEFloatGrid self, float const [6] minmax, float spacing, char const * title="") -> OEFloatGrid
        __init__(OEFloatGrid self, double const [6] minmax, double spacing, char const * title="") -> OEFloatGrid
        __init__(OEFloatGrid self, int xdim, int ydim, int zdim, float midx, float midy, float midz, float spacing, std::string title="", float * dataptr=None) -> OEFloatGrid
        """
        _oechem.OEFloatGrid_swiginit(self, _oechem.new_OEFloatGrid(*args))
    __swig_destroy__ = _oechem.delete_OEFloatGrid

# Register OEFloatGrid in _oechem:
_oechem.OEFloatGrid_swigregister(OEFloatGrid)

class OEIntGrid(OEFixedIntGrid):
    r"""Proxy of C++ OESystem::OEGrid< int > class."""

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

    def Clear(self) -> "void":
        r"""Clear(OEIntGrid self)"""
        return _oechem.OEIntGrid_Clear(self)

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEIntGrid self) -> OEBase"""
        return _oechem.OEIntGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEIntGrid self) -> void const *"""
        return _oechem.OEIntGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEIntGrid self, void const * type) -> bool"""
        return _oechem.OEIntGrid_IsDataType(self, type)

    def SetSpacing(self, spacing: "float") -> "bool":
        r"""SetSpacing(OEIntGrid self, float spacing) -> bool"""
        return _oechem.OEIntGrid_SetSpacing(self, spacing)

    def SetMid(self, x: "float", y: "float", z: "float") -> "bool":
        r"""SetMid(OEIntGrid self, float x, float y, float z) -> bool"""
        return _oechem.OEIntGrid_SetMid(self, x, y, z)

    def SetXMid(self, x: "float") -> "bool":
        r"""SetXMid(OEIntGrid self, float x) -> bool"""
        return _oechem.OEIntGrid_SetXMid(self, x)

    def SetYMid(self, y: "float") -> "bool":
        r"""SetYMid(OEIntGrid self, float y) -> bool"""
        return _oechem.OEIntGrid_SetYMid(self, y)

    def SetZMid(self, z: "float") -> "bool":
        r"""SetZMid(OEIntGrid self, float z) -> bool"""
        return _oechem.OEIntGrid_SetZMid(self, z)

    def SetDim(self, ixdim: "unsigned int", iydim: "unsigned int", izdim: "unsigned int") -> "bool":
        r"""SetDim(OEIntGrid self, unsigned int ixdim, unsigned int iydim, unsigned int izdim) -> bool"""
        return _oechem.OEIntGrid_SetDim(self, ixdim, iydim, izdim)

    def SetXDim(self, ixdim: "unsigned int") -> "bool":
        r"""SetXDim(OEIntGrid self, unsigned int ixdim) -> bool"""
        return _oechem.OEIntGrid_SetXDim(self, ixdim)

    def SetYDim(self, iydim: "unsigned int") -> "bool":
        r"""SetYDim(OEIntGrid self, unsigned int iydim) -> bool"""
        return _oechem.OEIntGrid_SetYDim(self, iydim)

    def SetZDim(self, izdim: "unsigned int") -> "bool":
        r"""SetZDim(OEIntGrid self, unsigned int izdim) -> bool"""
        return _oechem.OEIntGrid_SetZDim(self, izdim)

    def SetAll(self, xdim: "unsigned int", ydim: "unsigned int", zdim: "unsigned int", midx: "float", midy: "float", midz: "float", spacing: "float", title: "std::string", dataptr: "int *") -> "bool":
        r"""SetAll(OEIntGrid self, unsigned int xdim, unsigned int ydim, unsigned int zdim, float midx, float midy, float midz, float spacing, std::string title, int * dataptr) -> bool"""
        return _oechem.OEIntGrid_SetAll(self, xdim, ydim, zdim, midx, midy, midz, spacing, title, dataptr)

    def __init__(self, *args):
        r"""
        __init__(OEIntGrid self) -> OEIntGrid
        __init__(OEIntGrid self, OEIntGrid rhs) -> OEIntGrid
        __init__(OEIntGrid self, OEFixedIntGrid rhs) -> OEIntGrid
        __init__(OEIntGrid self, float const [6] minmax, float spacing, char const * title="") -> OEIntGrid
        __init__(OEIntGrid self, double const [6] minmax, double spacing, char const * title="") -> OEIntGrid
        __init__(OEIntGrid self, int xdim, int ydim, int zdim, float midx, float midy, float midz, float spacing, std::string title="", int * dataptr=None) -> OEIntGrid
        """
        _oechem.OEIntGrid_swiginit(self, _oechem.new_OEIntGrid(*args))
    __swig_destroy__ = _oechem.delete_OEIntGrid

# Register OEIntGrid in _oechem:
_oechem.OEIntGrid_swigregister(OEIntGrid)

class OEBoolGrid(OEFixedBoolGrid):
    r"""Proxy of C++ OESystem::OEGrid< bool > class."""

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

    def Clear(self) -> "void":
        r"""Clear(OEBoolGrid self)"""
        return _oechem.OEBoolGrid_Clear(self)

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEBoolGrid self) -> OEBase"""
        return _oechem.OEBoolGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEBoolGrid self) -> void const *"""
        return _oechem.OEBoolGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEBoolGrid self, void const * type) -> bool"""
        return _oechem.OEBoolGrid_IsDataType(self, type)

    def SetSpacing(self, spacing: "float") -> "bool":
        r"""SetSpacing(OEBoolGrid self, float spacing) -> bool"""
        return _oechem.OEBoolGrid_SetSpacing(self, spacing)

    def SetMid(self, x: "float", y: "float", z: "float") -> "bool":
        r"""SetMid(OEBoolGrid self, float x, float y, float z) -> bool"""
        return _oechem.OEBoolGrid_SetMid(self, x, y, z)

    def SetXMid(self, x: "float") -> "bool":
        r"""SetXMid(OEBoolGrid self, float x) -> bool"""
        return _oechem.OEBoolGrid_SetXMid(self, x)

    def SetYMid(self, y: "float") -> "bool":
        r"""SetYMid(OEBoolGrid self, float y) -> bool"""
        return _oechem.OEBoolGrid_SetYMid(self, y)

    def SetZMid(self, z: "float") -> "bool":
        r"""SetZMid(OEBoolGrid self, float z) -> bool"""
        return _oechem.OEBoolGrid_SetZMid(self, z)

    def SetDim(self, ixdim: "unsigned int", iydim: "unsigned int", izdim: "unsigned int") -> "bool":
        r"""SetDim(OEBoolGrid self, unsigned int ixdim, unsigned int iydim, unsigned int izdim) -> bool"""
        return _oechem.OEBoolGrid_SetDim(self, ixdim, iydim, izdim)

    def SetXDim(self, ixdim: "unsigned int") -> "bool":
        r"""SetXDim(OEBoolGrid self, unsigned int ixdim) -> bool"""
        return _oechem.OEBoolGrid_SetXDim(self, ixdim)

    def SetYDim(self, iydim: "unsigned int") -> "bool":
        r"""SetYDim(OEBoolGrid self, unsigned int iydim) -> bool"""
        return _oechem.OEBoolGrid_SetYDim(self, iydim)

    def SetZDim(self, izdim: "unsigned int") -> "bool":
        r"""SetZDim(OEBoolGrid self, unsigned int izdim) -> bool"""
        return _oechem.OEBoolGrid_SetZDim(self, izdim)

    def SetAll(self, xdim: "unsigned int", ydim: "unsigned int", zdim: "unsigned int", midx: "float", midy: "float", midz: "float", spacing: "float", title: "std::string", dataptr: "bool *") -> "bool":
        r"""SetAll(OEBoolGrid self, unsigned int xdim, unsigned int ydim, unsigned int zdim, float midx, float midy, float midz, float spacing, std::string title, bool * dataptr) -> bool"""
        return _oechem.OEBoolGrid_SetAll(self, xdim, ydim, zdim, midx, midy, midz, spacing, title, dataptr)

    def __init__(self, *args):
        r"""
        __init__(OEBoolGrid self) -> OEBoolGrid
        __init__(OEBoolGrid self, OEBoolGrid rhs) -> OEBoolGrid
        __init__(OEBoolGrid self, OEFixedBoolGrid rhs) -> OEBoolGrid
        __init__(OEBoolGrid self, float const [6] minmax, float spacing, char const * title="") -> OEBoolGrid
        __init__(OEBoolGrid self, double const [6] minmax, double spacing, char const * title="") -> OEBoolGrid
        __init__(OEBoolGrid self, int xdim, int ydim, int zdim, float midx, float midy, float midz, float spacing, std::string title="", bool * dataptr=None) -> OEBoolGrid
        """
        _oechem.OEBoolGrid_swiginit(self, _oechem.new_OEBoolGrid(*args))
    __swig_destroy__ = _oechem.delete_OEBoolGrid

# Register OEBoolGrid in _oechem:
_oechem.OEBoolGrid_swigregister(OEBoolGrid)

class OEFixedMultiDoubleGrid(OEGridBase):
    r"""Proxy of C++ OESystem::OEFixedMultiGrid< double > 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")
    __repr__ = _swig_repr

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEFixedMultiDoubleGrid self) -> OEBase"""
        return _oechem.OEFixedMultiDoubleGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEFixedMultiDoubleGrid self) -> void const *"""
        return _oechem.OEFixedMultiDoubleGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEFixedMultiDoubleGrid self, void const * type) -> bool"""
        return _oechem.OEFixedMultiDoubleGrid_IsDataType(self, type)

    def GetNumGrids(self) -> "unsigned int":
        r"""GetNumGrids(OEFixedMultiDoubleGrid self) -> unsigned int"""
        return _oechem.OEFixedMultiDoubleGrid_GetNumGrids(self)

    def SetNumGrids(self, n: "unsigned int") -> "bool":
        r"""SetNumGrids(OEFixedMultiDoubleGrid self, unsigned int n) -> bool"""
        return _oechem.OEFixedMultiDoubleGrid_SetNumGrids(self, n)
    __swig_destroy__ = _oechem.delete_OEFixedMultiDoubleGrid

    def __getitem__(self, igrid: "unsigned int") -> "OESystem::OEFixedGrid< double > &":
        r"""__getitem__(OEFixedMultiDoubleGrid self, unsigned int igrid) -> OEFixedDoubleGrid"""
        return _oechem.OEFixedMultiDoubleGrid___getitem__(self, igrid)

# Register OEFixedMultiDoubleGrid in _oechem:
_oechem.OEFixedMultiDoubleGrid_swigregister(OEFixedMultiDoubleGrid)

class OEFixedMultiFloatGrid(OEGridBase):
    r"""Proxy of C++ OESystem::OEFixedMultiGrid< float > 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")
    __repr__ = _swig_repr

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEFixedMultiFloatGrid self) -> OEBase"""
        return _oechem.OEFixedMultiFloatGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEFixedMultiFloatGrid self) -> void const *"""
        return _oechem.OEFixedMultiFloatGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEFixedMultiFloatGrid self, void const * type) -> bool"""
        return _oechem.OEFixedMultiFloatGrid_IsDataType(self, type)

    def GetNumGrids(self) -> "unsigned int":
        r"""GetNumGrids(OEFixedMultiFloatGrid self) -> unsigned int"""
        return _oechem.OEFixedMultiFloatGrid_GetNumGrids(self)

    def SetNumGrids(self, n: "unsigned int") -> "bool":
        r"""SetNumGrids(OEFixedMultiFloatGrid self, unsigned int n) -> bool"""
        return _oechem.OEFixedMultiFloatGrid_SetNumGrids(self, n)
    __swig_destroy__ = _oechem.delete_OEFixedMultiFloatGrid

    def __getitem__(self, igrid: "unsigned int") -> "OESystem::OEFixedGrid< float > &":
        r"""__getitem__(OEFixedMultiFloatGrid self, unsigned int igrid) -> OEFixedFloatGrid"""
        return _oechem.OEFixedMultiFloatGrid___getitem__(self, igrid)

# Register OEFixedMultiFloatGrid in _oechem:
_oechem.OEFixedMultiFloatGrid_swigregister(OEFixedMultiFloatGrid)

class OEFixedMultiIntGrid(OEGridBase):
    r"""Proxy of C++ OESystem::OEFixedMultiGrid< int > 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")
    __repr__ = _swig_repr

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEFixedMultiIntGrid self) -> OEBase"""
        return _oechem.OEFixedMultiIntGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEFixedMultiIntGrid self) -> void const *"""
        return _oechem.OEFixedMultiIntGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEFixedMultiIntGrid self, void const * type) -> bool"""
        return _oechem.OEFixedMultiIntGrid_IsDataType(self, type)

    def GetNumGrids(self) -> "unsigned int":
        r"""GetNumGrids(OEFixedMultiIntGrid self) -> unsigned int"""
        return _oechem.OEFixedMultiIntGrid_GetNumGrids(self)

    def SetNumGrids(self, n: "unsigned int") -> "bool":
        r"""SetNumGrids(OEFixedMultiIntGrid self, unsigned int n) -> bool"""
        return _oechem.OEFixedMultiIntGrid_SetNumGrids(self, n)
    __swig_destroy__ = _oechem.delete_OEFixedMultiIntGrid

    def __getitem__(self, igrid: "unsigned int") -> "OESystem::OEFixedGrid< int > &":
        r"""__getitem__(OEFixedMultiIntGrid self, unsigned int igrid) -> OEFixedIntGrid"""
        return _oechem.OEFixedMultiIntGrid___getitem__(self, igrid)

# Register OEFixedMultiIntGrid in _oechem:
_oechem.OEFixedMultiIntGrid_swigregister(OEFixedMultiIntGrid)

class OEFixedMultiBoolGrid(OEGridBase):
    r"""Proxy of C++ OESystem::OEFixedMultiGrid< bool > 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")
    __repr__ = _swig_repr

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEFixedMultiBoolGrid self) -> OEBase"""
        return _oechem.OEFixedMultiBoolGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEFixedMultiBoolGrid self) -> void const *"""
        return _oechem.OEFixedMultiBoolGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEFixedMultiBoolGrid self, void const * type) -> bool"""
        return _oechem.OEFixedMultiBoolGrid_IsDataType(self, type)

    def GetNumGrids(self) -> "unsigned int":
        r"""GetNumGrids(OEFixedMultiBoolGrid self) -> unsigned int"""
        return _oechem.OEFixedMultiBoolGrid_GetNumGrids(self)

    def SetNumGrids(self, n: "unsigned int") -> "bool":
        r"""SetNumGrids(OEFixedMultiBoolGrid self, unsigned int n) -> bool"""
        return _oechem.OEFixedMultiBoolGrid_SetNumGrids(self, n)
    __swig_destroy__ = _oechem.delete_OEFixedMultiBoolGrid

    def __getitem__(self, igrid: "unsigned int") -> "OESystem::OEFixedGrid< bool > &":
        r"""__getitem__(OEFixedMultiBoolGrid self, unsigned int igrid) -> OEFixedBoolGrid"""
        return _oechem.OEFixedMultiBoolGrid___getitem__(self, igrid)

# Register OEFixedMultiBoolGrid in _oechem:
_oechem.OEFixedMultiBoolGrid_swigregister(OEFixedMultiBoolGrid)

class OEMultiDoubleGrid(OEFixedMultiDoubleGrid):
    r"""Proxy of C++ OESystem::OEMultiGrid< double > class."""

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

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEMultiDoubleGrid self) -> OEBase"""
        return _oechem.OEMultiDoubleGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEMultiDoubleGrid self) -> void const *"""
        return _oechem.OEMultiDoubleGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEMultiDoubleGrid self, void const * type) -> bool"""
        return _oechem.OEMultiDoubleGrid_IsDataType(self, type)

    def SetSpacing(self, spacing: "float") -> "bool":
        r"""SetSpacing(OEMultiDoubleGrid self, float spacing) -> bool"""
        return _oechem.OEMultiDoubleGrid_SetSpacing(self, spacing)

    def SetMid(self, x: "float", y: "float", z: "float") -> "bool":
        r"""SetMid(OEMultiDoubleGrid self, float x, float y, float z) -> bool"""
        return _oechem.OEMultiDoubleGrid_SetMid(self, x, y, z)

    def SetXMid(self, x: "float") -> "bool":
        r"""SetXMid(OEMultiDoubleGrid self, float x) -> bool"""
        return _oechem.OEMultiDoubleGrid_SetXMid(self, x)

    def SetYMid(self, y: "float") -> "bool":
        r"""SetYMid(OEMultiDoubleGrid self, float y) -> bool"""
        return _oechem.OEMultiDoubleGrid_SetYMid(self, y)

    def SetZMid(self, z: "float") -> "bool":
        r"""SetZMid(OEMultiDoubleGrid self, float z) -> bool"""
        return _oechem.OEMultiDoubleGrid_SetZMid(self, z)

    def SetDim(self, ixdim: "unsigned int", iydim: "unsigned int", izdim: "unsigned int") -> "bool":
        r"""SetDim(OEMultiDoubleGrid self, unsigned int ixdim, unsigned int iydim, unsigned int izdim) -> bool"""
        return _oechem.OEMultiDoubleGrid_SetDim(self, ixdim, iydim, izdim)

    def SetXDim(self, ixdim: "unsigned int") -> "bool":
        r"""SetXDim(OEMultiDoubleGrid self, unsigned int ixdim) -> bool"""
        return _oechem.OEMultiDoubleGrid_SetXDim(self, ixdim)

    def SetYDim(self, iydim: "unsigned int") -> "bool":
        r"""SetYDim(OEMultiDoubleGrid self, unsigned int iydim) -> bool"""
        return _oechem.OEMultiDoubleGrid_SetYDim(self, iydim)

    def SetZDim(self, izdim: "unsigned int") -> "bool":
        r"""SetZDim(OEMultiDoubleGrid self, unsigned int izdim) -> bool"""
        return _oechem.OEMultiDoubleGrid_SetZDim(self, izdim)

    def Clear(self) -> "void":
        r"""Clear(OEMultiDoubleGrid self)"""
        return _oechem.OEMultiDoubleGrid_Clear(self)

    def __init__(self, *args):
        r"""
        __init__(OEMultiDoubleGrid self) -> OEMultiDoubleGrid
        __init__(OEMultiDoubleGrid self, int xdim, int ydim, int zdim, float midx, float midy, float midz, float spacing, int ngrids, std::string title, double * dataptr) -> OEMultiDoubleGrid
        __init__(OEMultiDoubleGrid self, OEMultiDoubleGrid rhs) -> OEMultiDoubleGrid
        __init__(OEMultiDoubleGrid self, OEFixedMultiDoubleGrid rhs) -> OEMultiDoubleGrid
        __init__(OEMultiDoubleGrid self, float const [6] minmax, float spacing, int ngrids, char const * title="") -> OEMultiDoubleGrid
        __init__(OEMultiDoubleGrid self, double const [6] minmax, double spacing, int ngrids, char const * title="") -> OEMultiDoubleGrid
        """
        _oechem.OEMultiDoubleGrid_swiginit(self, _oechem.new_OEMultiDoubleGrid(*args))
    __swig_destroy__ = _oechem.delete_OEMultiDoubleGrid

# Register OEMultiDoubleGrid in _oechem:
_oechem.OEMultiDoubleGrid_swigregister(OEMultiDoubleGrid)

class OEMultiFloatGrid(OEFixedMultiFloatGrid):
    r"""Proxy of C++ OESystem::OEMultiGrid< float > class."""

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

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEMultiFloatGrid self) -> OEBase"""
        return _oechem.OEMultiFloatGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEMultiFloatGrid self) -> void const *"""
        return _oechem.OEMultiFloatGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEMultiFloatGrid self, void const * type) -> bool"""
        return _oechem.OEMultiFloatGrid_IsDataType(self, type)

    def SetSpacing(self, spacing: "float") -> "bool":
        r"""SetSpacing(OEMultiFloatGrid self, float spacing) -> bool"""
        return _oechem.OEMultiFloatGrid_SetSpacing(self, spacing)

    def SetMid(self, x: "float", y: "float", z: "float") -> "bool":
        r"""SetMid(OEMultiFloatGrid self, float x, float y, float z) -> bool"""
        return _oechem.OEMultiFloatGrid_SetMid(self, x, y, z)

    def SetXMid(self, x: "float") -> "bool":
        r"""SetXMid(OEMultiFloatGrid self, float x) -> bool"""
        return _oechem.OEMultiFloatGrid_SetXMid(self, x)

    def SetYMid(self, y: "float") -> "bool":
        r"""SetYMid(OEMultiFloatGrid self, float y) -> bool"""
        return _oechem.OEMultiFloatGrid_SetYMid(self, y)

    def SetZMid(self, z: "float") -> "bool":
        r"""SetZMid(OEMultiFloatGrid self, float z) -> bool"""
        return _oechem.OEMultiFloatGrid_SetZMid(self, z)

    def SetDim(self, ixdim: "unsigned int", iydim: "unsigned int", izdim: "unsigned int") -> "bool":
        r"""SetDim(OEMultiFloatGrid self, unsigned int ixdim, unsigned int iydim, unsigned int izdim) -> bool"""
        return _oechem.OEMultiFloatGrid_SetDim(self, ixdim, iydim, izdim)

    def SetXDim(self, ixdim: "unsigned int") -> "bool":
        r"""SetXDim(OEMultiFloatGrid self, unsigned int ixdim) -> bool"""
        return _oechem.OEMultiFloatGrid_SetXDim(self, ixdim)

    def SetYDim(self, iydim: "unsigned int") -> "bool":
        r"""SetYDim(OEMultiFloatGrid self, unsigned int iydim) -> bool"""
        return _oechem.OEMultiFloatGrid_SetYDim(self, iydim)

    def SetZDim(self, izdim: "unsigned int") -> "bool":
        r"""SetZDim(OEMultiFloatGrid self, unsigned int izdim) -> bool"""
        return _oechem.OEMultiFloatGrid_SetZDim(self, izdim)

    def Clear(self) -> "void":
        r"""Clear(OEMultiFloatGrid self)"""
        return _oechem.OEMultiFloatGrid_Clear(self)

    def __init__(self, *args):
        r"""
        __init__(OEMultiFloatGrid self) -> OEMultiFloatGrid
        __init__(OEMultiFloatGrid self, int xdim, int ydim, int zdim, float midx, float midy, float midz, float spacing, int ngrids, std::string title, float * dataptr) -> OEMultiFloatGrid
        __init__(OEMultiFloatGrid self, OEMultiFloatGrid rhs) -> OEMultiFloatGrid
        __init__(OEMultiFloatGrid self, OEFixedMultiFloatGrid rhs) -> OEMultiFloatGrid
        __init__(OEMultiFloatGrid self, float const [6] minmax, float spacing, int ngrids, char const * title="") -> OEMultiFloatGrid
        __init__(OEMultiFloatGrid self, double const [6] minmax, double spacing, int ngrids, char const * title="") -> OEMultiFloatGrid
        """
        _oechem.OEMultiFloatGrid_swiginit(self, _oechem.new_OEMultiFloatGrid(*args))
    __swig_destroy__ = _oechem.delete_OEMultiFloatGrid

# Register OEMultiFloatGrid in _oechem:
_oechem.OEMultiFloatGrid_swigregister(OEMultiFloatGrid)

class OEMultiIntGrid(OEFixedMultiIntGrid):
    r"""Proxy of C++ OESystem::OEMultiGrid< int > class."""

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

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEMultiIntGrid self) -> OEBase"""
        return _oechem.OEMultiIntGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEMultiIntGrid self) -> void const *"""
        return _oechem.OEMultiIntGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEMultiIntGrid self, void const * type) -> bool"""
        return _oechem.OEMultiIntGrid_IsDataType(self, type)

    def SetSpacing(self, spacing: "float") -> "bool":
        r"""SetSpacing(OEMultiIntGrid self, float spacing) -> bool"""
        return _oechem.OEMultiIntGrid_SetSpacing(self, spacing)

    def SetMid(self, x: "float", y: "float", z: "float") -> "bool":
        r"""SetMid(OEMultiIntGrid self, float x, float y, float z) -> bool"""
        return _oechem.OEMultiIntGrid_SetMid(self, x, y, z)

    def SetXMid(self, x: "float") -> "bool":
        r"""SetXMid(OEMultiIntGrid self, float x) -> bool"""
        return _oechem.OEMultiIntGrid_SetXMid(self, x)

    def SetYMid(self, y: "float") -> "bool":
        r"""SetYMid(OEMultiIntGrid self, float y) -> bool"""
        return _oechem.OEMultiIntGrid_SetYMid(self, y)

    def SetZMid(self, z: "float") -> "bool":
        r"""SetZMid(OEMultiIntGrid self, float z) -> bool"""
        return _oechem.OEMultiIntGrid_SetZMid(self, z)

    def SetDim(self, ixdim: "unsigned int", iydim: "unsigned int", izdim: "unsigned int") -> "bool":
        r"""SetDim(OEMultiIntGrid self, unsigned int ixdim, unsigned int iydim, unsigned int izdim) -> bool"""
        return _oechem.OEMultiIntGrid_SetDim(self, ixdim, iydim, izdim)

    def SetXDim(self, ixdim: "unsigned int") -> "bool":
        r"""SetXDim(OEMultiIntGrid self, unsigned int ixdim) -> bool"""
        return _oechem.OEMultiIntGrid_SetXDim(self, ixdim)

    def SetYDim(self, iydim: "unsigned int") -> "bool":
        r"""SetYDim(OEMultiIntGrid self, unsigned int iydim) -> bool"""
        return _oechem.OEMultiIntGrid_SetYDim(self, iydim)

    def SetZDim(self, izdim: "unsigned int") -> "bool":
        r"""SetZDim(OEMultiIntGrid self, unsigned int izdim) -> bool"""
        return _oechem.OEMultiIntGrid_SetZDim(self, izdim)

    def Clear(self) -> "void":
        r"""Clear(OEMultiIntGrid self)"""
        return _oechem.OEMultiIntGrid_Clear(self)

    def __init__(self, *args):
        r"""
        __init__(OEMultiIntGrid self) -> OEMultiIntGrid
        __init__(OEMultiIntGrid self, int xdim, int ydim, int zdim, float midx, float midy, float midz, float spacing, int ngrids, std::string title, int * dataptr) -> OEMultiIntGrid
        __init__(OEMultiIntGrid self, OEMultiIntGrid rhs) -> OEMultiIntGrid
        __init__(OEMultiIntGrid self, OEFixedMultiIntGrid rhs) -> OEMultiIntGrid
        __init__(OEMultiIntGrid self, float const [6] minmax, float spacing, int ngrids, char const * title="") -> OEMultiIntGrid
        __init__(OEMultiIntGrid self, double const [6] minmax, double spacing, int ngrids, char const * title="") -> OEMultiIntGrid
        """
        _oechem.OEMultiIntGrid_swiginit(self, _oechem.new_OEMultiIntGrid(*args))
    __swig_destroy__ = _oechem.delete_OEMultiIntGrid

# Register OEMultiIntGrid in _oechem:
_oechem.OEMultiIntGrid_swigregister(OEMultiIntGrid)

class OEMultiBoolGrid(OEFixedMultiBoolGrid):
    r"""Proxy of C++ OESystem::OEMultiGrid< bool > class."""

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

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEMultiBoolGrid self) -> OEBase"""
        return _oechem.OEMultiBoolGrid_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEMultiBoolGrid self) -> void const *"""
        return _oechem.OEMultiBoolGrid_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEMultiBoolGrid self, void const * type) -> bool"""
        return _oechem.OEMultiBoolGrid_IsDataType(self, type)

    def SetSpacing(self, spacing: "float") -> "bool":
        r"""SetSpacing(OEMultiBoolGrid self, float spacing) -> bool"""
        return _oechem.OEMultiBoolGrid_SetSpacing(self, spacing)

    def SetMid(self, x: "float", y: "float", z: "float") -> "bool":
        r"""SetMid(OEMultiBoolGrid self, float x, float y, float z) -> bool"""
        return _oechem.OEMultiBoolGrid_SetMid(self, x, y, z)

    def SetXMid(self, x: "float") -> "bool":
        r"""SetXMid(OEMultiBoolGrid self, float x) -> bool"""
        return _oechem.OEMultiBoolGrid_SetXMid(self, x)

    def SetYMid(self, y: "float") -> "bool":
        r"""SetYMid(OEMultiBoolGrid self, float y) -> bool"""
        return _oechem.OEMultiBoolGrid_SetYMid(self, y)

    def SetZMid(self, z: "float") -> "bool":
        r"""SetZMid(OEMultiBoolGrid self, float z) -> bool"""
        return _oechem.OEMultiBoolGrid_SetZMid(self, z)

    def SetDim(self, ixdim: "unsigned int", iydim: "unsigned int", izdim: "unsigned int") -> "bool":
        r"""SetDim(OEMultiBoolGrid self, unsigned int ixdim, unsigned int iydim, unsigned int izdim) -> bool"""
        return _oechem.OEMultiBoolGrid_SetDim(self, ixdim, iydim, izdim)

    def SetXDim(self, ixdim: "unsigned int") -> "bool":
        r"""SetXDim(OEMultiBoolGrid self, unsigned int ixdim) -> bool"""
        return _oechem.OEMultiBoolGrid_SetXDim(self, ixdim)

    def SetYDim(self, iydim: "unsigned int") -> "bool":
        r"""SetYDim(OEMultiBoolGrid self, unsigned int iydim) -> bool"""
        return _oechem.OEMultiBoolGrid_SetYDim(self, iydim)

    def SetZDim(self, izdim: "unsigned int") -> "bool":
        r"""SetZDim(OEMultiBoolGrid self, unsigned int izdim) -> bool"""
        return _oechem.OEMultiBoolGrid_SetZDim(self, izdim)

    def Clear(self) -> "void":
        r"""Clear(OEMultiBoolGrid self)"""
        return _oechem.OEMultiBoolGrid_Clear(self)

    def __init__(self, *args):
        r"""
        __init__(OEMultiBoolGrid self) -> OEMultiBoolGrid
        __init__(OEMultiBoolGrid self, int xdim, int ydim, int zdim, float midx, float midy, float midz, float spacing, int ngrids, std::string title, bool * dataptr) -> OEMultiBoolGrid
        __init__(OEMultiBoolGrid self, OEMultiBoolGrid rhs) -> OEMultiBoolGrid
        __init__(OEMultiBoolGrid self, OEFixedMultiBoolGrid rhs) -> OEMultiBoolGrid
        __init__(OEMultiBoolGrid self, float const [6] minmax, float spacing, int ngrids, char const * title="") -> OEMultiBoolGrid
        __init__(OEMultiBoolGrid self, double const [6] minmax, double spacing, int ngrids, char const * title="") -> OEMultiBoolGrid
        """
        _oechem.OEMultiBoolGrid_swiginit(self, _oechem.new_OEMultiBoolGrid(*args))
    __swig_destroy__ = _oechem.delete_OEMultiBoolGrid

# Register OEMultiBoolGrid in _oechem:
_oechem.OEMultiBoolGrid_swigregister(OEMultiBoolGrid)


def OEReadOldStyleGrid(istr: "oeistream", grid: "OEMultiFloatGrid") -> "bool":
    r"""OEReadOldStyleGrid(oeistream istr, OEMultiFloatGrid grid) -> bool"""
    return _oechem.OEReadOldStyleGrid(istr, grid)

def OEWriteOldStyleGrid(*args) -> "bool":
    r"""
    OEWriteOldStyleGrid(oeostream ostr, OEFixedMultiFloatGrid grid, unsigned int cur_grid=0) -> bool
    OEWriteOldStyleGrid(oeostream ostr, OEFixedFloatGrid grid) -> bool
    """
    return _oechem.OEWriteOldStyleGrid(*args)

def OEDoubleGridMaxVal(grid: "OEFixedDoubleGrid") -> "double":
    r"""OEDoubleGridMaxVal(OEFixedDoubleGrid grid) -> double"""
    return _oechem.OEDoubleGridMaxVal(grid)

def OEFloatGridMaxVal(grid: "OEFixedFloatGrid") -> "float":
    r"""OEFloatGridMaxVal(OEFixedFloatGrid grid) -> float"""
    return _oechem.OEFloatGridMaxVal(grid)

def OEIntGridMaxVal(grid: "OEFixedIntGrid") -> "int":
    r"""OEIntGridMaxVal(OEFixedIntGrid grid) -> int"""
    return _oechem.OEIntGridMaxVal(grid)

def OEDoubleGridAvgVal(grid: "OEFixedDoubleGrid") -> "double":
    r"""OEDoubleGridAvgVal(OEFixedDoubleGrid grid) -> double"""
    return _oechem.OEDoubleGridAvgVal(grid)

def OEFloatGridAvgVal(grid: "OEFixedFloatGrid") -> "float":
    r"""OEFloatGridAvgVal(OEFixedFloatGrid grid) -> float"""
    return _oechem.OEFloatGridAvgVal(grid)

def OEIntGridAvgVal(grid: "OEFixedIntGrid") -> "int":
    r"""OEIntGridAvgVal(OEFixedIntGrid grid) -> int"""
    return _oechem.OEIntGridAvgVal(grid)

def OEDoubleGridMinVal(grid: "OEFixedDoubleGrid") -> "double":
    r"""OEDoubleGridMinVal(OEFixedDoubleGrid grid) -> double"""
    return _oechem.OEDoubleGridMinVal(grid)

def OEFloatGridMinVal(grid: "OEFixedFloatGrid") -> "float":
    r"""OEFloatGridMinVal(OEFixedFloatGrid grid) -> float"""
    return _oechem.OEFloatGridMinVal(grid)

def OEIntGridMinVal(grid: "OEFixedIntGrid") -> "int":
    r"""OEIntGridMinVal(OEFixedIntGrid grid) -> int"""
    return _oechem.OEIntGridMinVal(grid)

def OELinearInterpolate(grid: "OEFixedFloatGrid", x: "float", y: "float", z: "float", outside_grid_val: "float const &") -> "float":
    r"""OELinearInterpolate(OEFixedFloatGrid grid, float x, float y, float z, float const & outside_grid_val) -> float"""
    return _oechem.OELinearInterpolate(grid, x, y, z, outside_grid_val)

def OEFloatGridLinearInterpolate(grid: "OEFixedFloatGrid", x: "float", y: "float", z: "float", outside_grid_val: "float const &") -> "float":
    r"""OEFloatGridLinearInterpolate(OEFixedFloatGrid grid, float x, float y, float z, float const & outside_grid_val) -> float"""
    return _oechem.OEFloatGridLinearInterpolate(grid, x, y, z, outside_grid_val)

def OEDoubleGridLinearInterpolate(grid: "OEFixedDoubleGrid", x: "float", y: "float", z: "float", outside_grid_val: "double const &") -> "double":
    r"""OEDoubleGridLinearInterpolate(OEFixedDoubleGrid grid, float x, float y, float z, double const & outside_grid_val) -> double"""
    return _oechem.OEDoubleGridLinearInterpolate(grid, x, y, z, outside_grid_val)

def OEIntGridLinearInterpolate(grid: "OEFixedIntGrid", x: "float", y: "float", z: "float", outside_grid_val: "int const &") -> "int":
    r"""OEIntGridLinearInterpolate(OEFixedIntGrid grid, float x, float y, float z, int const & outside_grid_val) -> int"""
    return _oechem.OEIntGridLinearInterpolate(grid, x, y, z, outside_grid_val)

def OEZeroGridBoundary(grid: "OEFixedFloatGrid") -> "bool":
    r"""OEZeroGridBoundary(OEFixedFloatGrid grid) -> bool"""
    return _oechem.OEZeroGridBoundary(grid)

def OEZeroFloatGridBoundary(grid: "OEFixedFloatGrid") -> "bool":
    r"""OEZeroFloatGridBoundary(OEFixedFloatGrid grid) -> bool"""
    return _oechem.OEZeroFloatGridBoundary(grid)

def OEZeroDoubleGridBoundary(grid: "OEFixedDoubleGrid") -> "bool":
    r"""OEZeroDoubleGridBoundary(OEFixedDoubleGrid grid) -> bool"""
    return _oechem.OEZeroDoubleGridBoundary(grid)

def OEZeroIntGridBoundary(grid: "OEFixedIntGrid") -> "bool":
    r"""OEZeroIntGridBoundary(OEFixedIntGrid grid) -> bool"""
    return _oechem.OEZeroIntGridBoundary(grid)

def OEGetCenterAndExtents(*args) -> "void":
    r"""
    OEGetCenterAndExtents(OEMolBase mol, float * center, float * extents)
    OEGetCenterAndExtents(OEGridBase grid, float * center, float * extents)
    """
    return _oechem.OEGetCenterAndExtents(*args)

def OEGetBytesFromGrid(*args) -> "PyObject *":
    r"""
    OEGetBytesFromGrid(OESystem::OEScalarGrid & grid, int gType) -> PyObject
    OEGetBytesFromGrid(OESystem::OESkewGrid & grid, int gType) -> PyObject *
    """
    return _oechem.OEGetBytesFromGrid(*args)

def OEGetScalarGridFromBytes(bytes: "PyObject *", gType: "int") -> "PyObject *":
    r"""OEGetScalarGridFromBytes(PyObject * bytes, int gType) -> PyObject *"""
    return _oechem.OEGetScalarGridFromBytes(bytes, gType)

def OEGetSkewGridFromBytes(bytes: "PyObject *", gType: "int") -> "PyObject *":
    r"""OEGetSkewGridFromBytes(PyObject * bytes, int gType) -> PyObject *"""
    return _oechem.OEGetSkewGridFromBytes(bytes, gType)
class OEParameter(object):
    r"""Proxy of C++ OESystem::OEParameter 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__ = _oechem.delete_OEParameter

    def SetName(self, name: "std::string const &") -> "bool":
        r"""SetName(OEParameter self, std::string const & name) -> bool"""
        return _oechem.OEParameter_SetName(self, name)

    def SetBrief(self, brief: "std::string const &") -> "bool":
        r"""SetBrief(OEParameter self, std::string const & brief) -> bool"""
        return _oechem.OEParameter_SetBrief(self, brief)

    def SetRequired(self, required: "bool const") -> "bool":
        r"""SetRequired(OEParameter self, bool const required) -> bool"""
        return _oechem.OEParameter_SetRequired(self, required)

    def SetKeyless(self, keyless: "unsigned int const") -> "bool":
        r"""SetKeyless(OEParameter self, unsigned int const keyless) -> bool"""
        return _oechem.OEParameter_SetKeyless(self, keyless)

    def SetVisibility(self, visibility: "unsigned int const") -> "bool":
        r"""SetVisibility(OEParameter self, unsigned int const visibility) -> bool"""
        return _oechem.OEParameter_SetVisibility(self, visibility)

    def SetOrderPriority(self, order: "int const") -> "bool":
        r"""SetOrderPriority(OEParameter self, int const order) -> bool"""
        return _oechem.OEParameter_SetOrderPriority(self, order)

    def SetInput(self, chunksize: "unsigned int const") -> "bool":
        r"""SetInput(OEParameter self, unsigned int const chunksize) -> bool"""
        return _oechem.OEParameter_SetInput(self, chunksize)

    def SetOutput(self, isOutput: "bool const") -> "bool":
        r"""SetOutput(OEParameter self, bool const isOutput) -> bool"""
        return _oechem.OEParameter_SetOutput(self, isOutput)

    def AddDetail(self, detail: "std::string const &") -> "bool":
        r"""AddDetail(OEParameter self, std::string const & detail) -> bool"""
        return _oechem.OEParameter_AddDetail(self, detail)

    def AddAlias(self, alias: "std::string const &") -> "bool":
        r"""AddAlias(OEParameter self, std::string const & alias) -> bool"""
        return _oechem.OEParameter_AddAlias(self, alias)

    def SetElement(self, element: "std::string const &") -> "bool":
        r"""SetElement(OEParameter self, std::string const & element) -> bool"""
        return _oechem.OEParameter_SetElement(self, element)

    def SetCommand(self, cmd: "std::string const &") -> "bool":
        r"""SetCommand(OEParameter self, std::string const & cmd) -> bool"""
        return _oechem.OEParameter_SetCommand(self, cmd)

    def SetIsList(self, isList: "bool const") -> "bool":
        r"""SetIsList(OEParameter self, bool const isList) -> bool"""
        return _oechem.OEParameter_SetIsList(self, isList)

    def GetName(self) -> "std::string":
        r"""GetName(OEParameter self) -> std::string"""
        return _oechem.OEParameter_GetName(self)

    def GetBrief(self) -> "std::string":
        r"""GetBrief(OEParameter self) -> std::string"""
        return _oechem.OEParameter_GetBrief(self)

    def GetStringValue(self, idx: "unsigned int const"=0) -> "std::string":
        r"""GetStringValue(OEParameter self, unsigned int const idx=0) -> std::string"""
        return _oechem.OEParameter_GetStringValue(self, idx)

    def GetStringDefault(self, idx: "unsigned int const"=0) -> "std::string":
        r"""GetStringDefault(OEParameter self, unsigned int const idx=0) -> std::string"""
        return _oechem.OEParameter_GetStringDefault(self, idx)

    def GetStringValues(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetStringValues(OEParameter self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEParameter_GetStringValues(self)

    def GetStringDefaults(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetStringDefaults(OEParameter self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEParameter_GetStringDefaults(self)

    def GetRequired(self) -> "bool":
        r"""GetRequired(OEParameter self) -> bool"""
        return _oechem.OEParameter_GetRequired(self)

    def GetKeyless(self) -> "unsigned int":
        r"""GetKeyless(OEParameter self) -> unsigned int"""
        return _oechem.OEParameter_GetKeyless(self)

    def GetVisibility(self) -> "unsigned int":
        r"""GetVisibility(OEParameter self) -> unsigned int"""
        return _oechem.OEParameter_GetVisibility(self)

    def GetInput(self) -> "unsigned int":
        r"""GetInput(OEParameter self) -> unsigned int"""
        return _oechem.OEParameter_GetInput(self)

    def GetOutput(self) -> "bool":
        r"""GetOutput(OEParameter self) -> bool"""
        return _oechem.OEParameter_GetOutput(self)

    def GetOrderPriority(self) -> "int":
        r"""GetOrderPriority(OEParameter self) -> int"""
        return _oechem.OEParameter_GetOrderPriority(self)

    def GetDetail(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetDetail(OEParameter self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEParameter_GetDetail(self)

    def GetAliases(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetAliases(OEParameter self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEParameter_GetAliases(self)

    def GetLegalValues(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetLegalValues(OEParameter self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEParameter_GetLegalValues(self)

    def GetIllegalValues(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetIllegalValues(OEParameter self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEParameter_GetIllegalValues(self)

    def GetLegalRanges(self) -> "OESystem::OEIterBase< std::pair< std::string,std::string > const > *":
        r"""GetLegalRanges(OEParameter self) -> OESystem::OEIterBase< std::pair< std::string,std::string > const > *"""
        return _oechem.OEParameter_GetLegalRanges(self)

    def GetIllegalRanges(self) -> "OESystem::OEIterBase< std::pair< std::string,std::string > const > *":
        r"""GetIllegalRanges(OEParameter self) -> OESystem::OEIterBase< std::pair< std::string,std::string > const > *"""
        return _oechem.OEParameter_GetIllegalRanges(self)

    def GetElement(self) -> "std::string":
        r"""GetElement(OEParameter self) -> std::string"""
        return _oechem.OEParameter_GetElement(self)

    def GetCommand(self) -> "std::string":
        r"""GetCommand(OEParameter self) -> std::string"""
        return _oechem.OEParameter_GetCommand(self)

    def GetIsList(self) -> "bool":
        r"""GetIsList(OEParameter self) -> bool"""
        return _oechem.OEParameter_GetIsList(self)

    def GetPrettyLegalValues(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetPrettyLegalValues(OEParameter self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEParameter_GetPrettyLegalValues(self)

    def GetPrettyDefault(self, idx: "unsigned int const"=0) -> "std::string":
        r"""GetPrettyDefault(OEParameter self, unsigned int const idx=0) -> std::string"""
        return _oechem.OEParameter_GetPrettyDefault(self, idx)

    def SetStringValue(self, value: "std::string const &") -> "bool":
        r"""SetStringValue(OEParameter self, std::string const & value) -> bool"""
        return _oechem.OEParameter_SetStringValue(self, value)

    def SetStringDefault(self, value: "std::string const &") -> "bool":
        r"""SetStringDefault(OEParameter self, std::string const & value) -> bool"""
        return _oechem.OEParameter_SetStringDefault(self, value)

    def AddStringValue(self, value: "std::string const &") -> "bool":
        r"""AddStringValue(OEParameter self, std::string const & value) -> bool"""
        return _oechem.OEParameter_AddStringValue(self, value)

    def AddStringDefault(self, value: "std::string const &") -> "bool":
        r"""AddStringDefault(OEParameter self, std::string const & value) -> bool"""
        return _oechem.OEParameter_AddStringDefault(self, value)

    def ClearValues(self) -> "bool":
        r"""ClearValues(OEParameter self) -> bool"""
        return _oechem.OEParameter_ClearValues(self)

    def ClearDefaults(self) -> "bool":
        r"""ClearDefaults(OEParameter self) -> bool"""
        return _oechem.OEParameter_ClearDefaults(self)

    def SetStringValues(self, arg2: "std::string const &") -> "bool":
        r"""SetStringValues(OEParameter self, std::string const & arg2) -> bool"""
        return _oechem.OEParameter_SetStringValues(self, arg2)

    def AddLegalValue(self, val: "std::string const &") -> "bool":
        r"""AddLegalValue(OEParameter self, std::string const & val) -> bool"""
        return _oechem.OEParameter_AddLegalValue(self, val)

    def AddIllegalValue(self, val: "std::string const &") -> "bool":
        r"""AddIllegalValue(OEParameter self, std::string const & val) -> bool"""
        return _oechem.OEParameter_AddIllegalValue(self, val)

    def AddLegalRange(self, hi: "std::string const &", low: "std::string const &") -> "bool":
        r"""AddLegalRange(OEParameter self, std::string const & hi, std::string const & low) -> bool"""
        return _oechem.OEParameter_AddLegalRange(self, hi, low)

    def AddIllegalRange(self, hi: "std::string const &", low: "std::string const &") -> "bool":
        r"""AddIllegalRange(OEParameter self, std::string const & hi, std::string const & low) -> bool"""
        return _oechem.OEParameter_AddIllegalRange(self, hi, low)

    def IsLegalString(self, value: "std::string const &") -> "bool":
        r"""IsLegalString(OEParameter self, std::string const & value) -> bool"""
        return _oechem.OEParameter_IsLegalString(self, value)

    def IsSetToString(self, val: "std::string const &") -> "bool":
        r"""IsSetToString(OEParameter self, std::string const & val) -> bool"""
        return _oechem.OEParameter_IsSetToString(self, val)

    def Load(self) -> "bool":
        r"""Load(OEParameter self) -> bool"""
        return _oechem.OEParameter_Load(self)

    def LoadValue(self) -> "bool":
        r"""LoadValue(OEParameter self) -> bool"""
        return _oechem.OEParameter_LoadValue(self)

    def LoadDefault(self) -> "bool":
        r"""LoadDefault(OEParameter self) -> bool"""
        return _oechem.OEParameter_LoadDefault(self)

    def IsSet(self, idx: "unsigned int const"=0) -> "bool":
        r"""IsSet(OEParameter self, unsigned int const idx=0) -> bool"""
        return _oechem.OEParameter_IsSet(self, idx)

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(OEParameter self, unsigned int const idx=0) -> bool"""
        return _oechem.OEParameter_GetHasValue(self, idx)

    def GetHasDefault(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasDefault(OEParameter self, unsigned int const idx=0) -> bool"""
        return _oechem.OEParameter_GetHasDefault(self, idx)

    def TypedParameterTypeID(self) -> "void const *":
        r"""TypedParameterTypeID(OEParameter self) -> void const *"""
        return _oechem.OEParameter_TypedParameterTypeID(self)

    def ClassID(self) -> "std::string":
        r"""ClassID(OEParameter self) -> std::string"""
        return _oechem.OEParameter_ClassID(self)

    def WriteValueAndDefaultBinary(self, arg2: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(OEParameter self, unsigned char * arg2) -> size_t"""
        return _oechem.OEParameter_WriteValueAndDefaultBinary(self, arg2)

    def ReadValueAndDefaultBinary(self, arg2: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(OEParameter self, unsigned char const * arg2) -> size_t"""
        return _oechem.OEParameter_ReadValueAndDefaultBinary(self, arg2)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(OEParameter self) -> size_t"""
        return _oechem.OEParameter_ValueAndDefaultBinarySize(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEParameter self) -> OEParameter"""
        return _oechem.OEParameter_CreateCopy(self)

# Register OEParameter in _oechem:
_oechem.OEParameter_swigregister(OEParameter)

class FloatParameterTyped(OEParameter):
    r"""Proxy of C++ OESystem::OETypedParameter< float > 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__ = _oechem.delete_FloatParameterTyped

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(FloatParameterTyped self, unsigned int const idx=0) -> bool"""
        return _oechem.FloatParameterTyped_GetHasValue(self, idx)

    def GetHasDefault(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasDefault(FloatParameterTyped self, unsigned int const idx=0) -> bool"""
        return _oechem.FloatParameterTyped_GetHasDefault(self, idx)

    def GetValue(self, value: "float &", idx: "unsigned int const"=0) -> "bool":
        r"""GetValue(FloatParameterTyped self, float & value, unsigned int const idx=0) -> bool"""
        return _oechem.FloatParameterTyped_GetValue(self, value, idx)

    def GetDefault(self, dflt: "float &", idx: "unsigned int const"=0) -> "bool":
        r"""GetDefault(FloatParameterTyped self, float & dflt, unsigned int const idx=0) -> bool"""
        return _oechem.FloatParameterTyped_GetDefault(self, dflt, idx)

    def GetSetting(self, setting: "float &", idx: "unsigned int const"=0) -> "bool":
        r"""GetSetting(FloatParameterTyped self, float & setting, unsigned int const idx=0) -> bool"""
        return _oechem.FloatParameterTyped_GetSetting(self, setting, idx)

    def ClearValues(self) -> "bool":
        r"""ClearValues(FloatParameterTyped self) -> bool"""
        return _oechem.FloatParameterTyped_ClearValues(self)

    def ClearDefaults(self) -> "bool":
        r"""ClearDefaults(FloatParameterTyped self) -> bool"""
        return _oechem.FloatParameterTyped_ClearDefaults(self)

    def LoadValue(self) -> "bool":
        r"""LoadValue(FloatParameterTyped self) -> bool"""
        return _oechem.FloatParameterTyped_LoadValue(self)

    def LoadDefault(self) -> "bool":
        r"""LoadDefault(FloatParameterTyped self) -> bool"""
        return _oechem.FloatParameterTyped_LoadDefault(self)

    def AddValue(self, value: "float const &") -> "bool":
        r"""AddValue(FloatParameterTyped self, float const & value) -> bool"""
        return _oechem.FloatParameterTyped_AddValue(self, value)

    def AddDefault(self, dflt: "float const &") -> "bool":
        r"""AddDefault(FloatParameterTyped self, float const & dflt) -> bool"""
        return _oechem.FloatParameterTyped_AddDefault(self, dflt)

    def SetValue(self, value: "float const &") -> "bool":
        r"""SetValue(FloatParameterTyped self, float const & value) -> bool"""
        return _oechem.FloatParameterTyped_SetValue(self, value)

    def SetDefault(self, dflt: "float const &") -> "bool":
        r"""SetDefault(FloatParameterTyped self, float const & dflt) -> bool"""
        return _oechem.FloatParameterTyped_SetDefault(self, dflt)

    def TypedParameterTypeID(self) -> "void const *":
        r"""TypedParameterTypeID(FloatParameterTyped self) -> void const *"""
        return _oechem.FloatParameterTyped_TypedParameterTypeID(self)

# Register FloatParameterTyped in _oechem:
_oechem.FloatParameterTyped_swigregister(FloatParameterTyped)

class FloatParameterPOD(FloatParameterTyped):
    r"""Proxy of C++ OESystem::OEPODParameter< float > 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__ = _oechem.delete_FloatParameterPOD

    def IsLegalString(self, val: "std::string const &") -> "bool":
        r"""IsLegalString(FloatParameterPOD self, std::string const & val) -> bool"""
        return _oechem.FloatParameterPOD_IsLegalString(self, val)

    def IsSetToString(self, val: "std::string const &") -> "bool":
        r"""IsSetToString(FloatParameterPOD self, std::string const & val) -> bool"""
        return _oechem.FloatParameterPOD_IsSetToString(self, val)

    def SetValues(self, values: "OEFloatVector") -> "bool":
        r"""SetValues(FloatParameterPOD self, OEFloatVector values) -> bool"""
        return _oechem.FloatParameterPOD_SetValues(self, values)

    def SetDefaults(self, values: "OEFloatVector") -> "bool":
        r"""SetDefaults(FloatParameterPOD self, OEFloatVector values) -> bool"""
        return _oechem.FloatParameterPOD_SetDefaults(self, values)

    def SetStringValues(self, values: "std::string const &") -> "bool":
        r"""SetStringValues(FloatParameterPOD self, std::string const & values) -> bool"""
        return _oechem.FloatParameterPOD_SetStringValues(self, values)

    def SetStringDefaults(self, values: "std::string const &") -> "bool":
        r"""SetStringDefaults(FloatParameterPOD self, std::string const & values) -> bool"""
        return _oechem.FloatParameterPOD_SetStringDefaults(self, values)

    def GetValuesVector(self) -> "std::vector< float,std::allocator< float > >":
        r"""GetValuesVector(FloatParameterPOD self) -> OEFloatVector"""
        return _oechem.FloatParameterPOD_GetValuesVector(self)

    def GetDefaultsVector(self) -> "std::vector< float,std::allocator< float > >":
        r"""GetDefaultsVector(FloatParameterPOD self) -> OEFloatVector"""
        return _oechem.FloatParameterPOD_GetDefaultsVector(self)

    def GetSettingsVector(self) -> "std::vector< float,std::allocator< float > >":
        r"""GetSettingsVector(FloatParameterPOD self) -> OEFloatVector"""
        return _oechem.FloatParameterPOD_GetSettingsVector(self)

    def WriteValueAndDefaultBinary(self, ccc: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(FloatParameterPOD self, unsigned char * ccc) -> size_t"""
        return _oechem.FloatParameterPOD_WriteValueAndDefaultBinary(self, ccc)

    def ReadValueAndDefaultBinary(self, ccc: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(FloatParameterPOD self, unsigned char const * ccc) -> size_t"""
        return _oechem.FloatParameterPOD_ReadValueAndDefaultBinary(self, ccc)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(FloatParameterPOD self) -> size_t"""
        return _oechem.FloatParameterPOD_ValueAndDefaultBinarySize(self)

    def ClassID(self) -> "std::string":
        r"""ClassID(FloatParameterPOD self) -> std::string"""
        return _oechem.FloatParameterPOD_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(FloatParameterPOD self) -> void const *"""
        return _oechem.FloatParameterPOD_FactoryTypeID(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(FloatParameterPOD self) -> OEParameter"""
        return _oechem.FloatParameterPOD_CreateCopy(self)

# Register FloatParameterPOD in _oechem:
_oechem.FloatParameterPOD_swigregister(FloatParameterPOD)

class DoubleParameterTyped(OEParameter):
    r"""Proxy of C++ OESystem::OETypedParameter< double > 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__ = _oechem.delete_DoubleParameterTyped

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(DoubleParameterTyped self, unsigned int const idx=0) -> bool"""
        return _oechem.DoubleParameterTyped_GetHasValue(self, idx)

    def GetHasDefault(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasDefault(DoubleParameterTyped self, unsigned int const idx=0) -> bool"""
        return _oechem.DoubleParameterTyped_GetHasDefault(self, idx)

    def GetValue(self, value: "double &", idx: "unsigned int const"=0) -> "bool":
        r"""GetValue(DoubleParameterTyped self, double & value, unsigned int const idx=0) -> bool"""
        return _oechem.DoubleParameterTyped_GetValue(self, value, idx)

    def GetDefault(self, dflt: "double &", idx: "unsigned int const"=0) -> "bool":
        r"""GetDefault(DoubleParameterTyped self, double & dflt, unsigned int const idx=0) -> bool"""
        return _oechem.DoubleParameterTyped_GetDefault(self, dflt, idx)

    def GetSetting(self, setting: "double &", idx: "unsigned int const"=0) -> "bool":
        r"""GetSetting(DoubleParameterTyped self, double & setting, unsigned int const idx=0) -> bool"""
        return _oechem.DoubleParameterTyped_GetSetting(self, setting, idx)

    def ClearValues(self) -> "bool":
        r"""ClearValues(DoubleParameterTyped self) -> bool"""
        return _oechem.DoubleParameterTyped_ClearValues(self)

    def ClearDefaults(self) -> "bool":
        r"""ClearDefaults(DoubleParameterTyped self) -> bool"""
        return _oechem.DoubleParameterTyped_ClearDefaults(self)

    def LoadValue(self) -> "bool":
        r"""LoadValue(DoubleParameterTyped self) -> bool"""
        return _oechem.DoubleParameterTyped_LoadValue(self)

    def LoadDefault(self) -> "bool":
        r"""LoadDefault(DoubleParameterTyped self) -> bool"""
        return _oechem.DoubleParameterTyped_LoadDefault(self)

    def AddValue(self, value: "double const &") -> "bool":
        r"""AddValue(DoubleParameterTyped self, double const & value) -> bool"""
        return _oechem.DoubleParameterTyped_AddValue(self, value)

    def AddDefault(self, dflt: "double const &") -> "bool":
        r"""AddDefault(DoubleParameterTyped self, double const & dflt) -> bool"""
        return _oechem.DoubleParameterTyped_AddDefault(self, dflt)

    def SetValue(self, value: "double const &") -> "bool":
        r"""SetValue(DoubleParameterTyped self, double const & value) -> bool"""
        return _oechem.DoubleParameterTyped_SetValue(self, value)

    def SetDefault(self, dflt: "double const &") -> "bool":
        r"""SetDefault(DoubleParameterTyped self, double const & dflt) -> bool"""
        return _oechem.DoubleParameterTyped_SetDefault(self, dflt)

    def TypedParameterTypeID(self) -> "void const *":
        r"""TypedParameterTypeID(DoubleParameterTyped self) -> void const *"""
        return _oechem.DoubleParameterTyped_TypedParameterTypeID(self)

# Register DoubleParameterTyped in _oechem:
_oechem.DoubleParameterTyped_swigregister(DoubleParameterTyped)

class DoubleParameterPOD(DoubleParameterTyped):
    r"""Proxy of C++ OESystem::OEPODParameter< double > 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__ = _oechem.delete_DoubleParameterPOD

    def IsLegalString(self, val: "std::string const &") -> "bool":
        r"""IsLegalString(DoubleParameterPOD self, std::string const & val) -> bool"""
        return _oechem.DoubleParameterPOD_IsLegalString(self, val)

    def IsSetToString(self, val: "std::string const &") -> "bool":
        r"""IsSetToString(DoubleParameterPOD self, std::string const & val) -> bool"""
        return _oechem.DoubleParameterPOD_IsSetToString(self, val)

    def SetValues(self, values: "OEDoubleVector") -> "bool":
        r"""SetValues(DoubleParameterPOD self, OEDoubleVector values) -> bool"""
        return _oechem.DoubleParameterPOD_SetValues(self, values)

    def SetDefaults(self, values: "OEDoubleVector") -> "bool":
        r"""SetDefaults(DoubleParameterPOD self, OEDoubleVector values) -> bool"""
        return _oechem.DoubleParameterPOD_SetDefaults(self, values)

    def SetStringValues(self, values: "std::string const &") -> "bool":
        r"""SetStringValues(DoubleParameterPOD self, std::string const & values) -> bool"""
        return _oechem.DoubleParameterPOD_SetStringValues(self, values)

    def SetStringDefaults(self, values: "std::string const &") -> "bool":
        r"""SetStringDefaults(DoubleParameterPOD self, std::string const & values) -> bool"""
        return _oechem.DoubleParameterPOD_SetStringDefaults(self, values)

    def GetValuesVector(self) -> "std::vector< double,std::allocator< double > >":
        r"""GetValuesVector(DoubleParameterPOD self) -> OEDoubleVector"""
        return _oechem.DoubleParameterPOD_GetValuesVector(self)

    def GetDefaultsVector(self) -> "std::vector< double,std::allocator< double > >":
        r"""GetDefaultsVector(DoubleParameterPOD self) -> OEDoubleVector"""
        return _oechem.DoubleParameterPOD_GetDefaultsVector(self)

    def GetSettingsVector(self) -> "std::vector< double,std::allocator< double > >":
        r"""GetSettingsVector(DoubleParameterPOD self) -> OEDoubleVector"""
        return _oechem.DoubleParameterPOD_GetSettingsVector(self)

    def WriteValueAndDefaultBinary(self, ccc: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(DoubleParameterPOD self, unsigned char * ccc) -> size_t"""
        return _oechem.DoubleParameterPOD_WriteValueAndDefaultBinary(self, ccc)

    def ReadValueAndDefaultBinary(self, ccc: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(DoubleParameterPOD self, unsigned char const * ccc) -> size_t"""
        return _oechem.DoubleParameterPOD_ReadValueAndDefaultBinary(self, ccc)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(DoubleParameterPOD self) -> size_t"""
        return _oechem.DoubleParameterPOD_ValueAndDefaultBinarySize(self)

    def ClassID(self) -> "std::string":
        r"""ClassID(DoubleParameterPOD self) -> std::string"""
        return _oechem.DoubleParameterPOD_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(DoubleParameterPOD self) -> void const *"""
        return _oechem.DoubleParameterPOD_FactoryTypeID(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(DoubleParameterPOD self) -> OEParameter"""
        return _oechem.DoubleParameterPOD_CreateCopy(self)

# Register DoubleParameterPOD in _oechem:
_oechem.DoubleParameterPOD_swigregister(DoubleParameterPOD)

class BoolParameterTyped(OEParameter):
    r"""Proxy of C++ OESystem::OETypedParameter< bool > 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__ = _oechem.delete_BoolParameterTyped

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(BoolParameterTyped self, unsigned int const idx=0) -> bool"""
        return _oechem.BoolParameterTyped_GetHasValue(self, idx)

    def GetHasDefault(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasDefault(BoolParameterTyped self, unsigned int const idx=0) -> bool"""
        return _oechem.BoolParameterTyped_GetHasDefault(self, idx)

    def GetValue(self, value: "bool &", idx: "unsigned int const"=0) -> "bool":
        r"""GetValue(BoolParameterTyped self, bool & value, unsigned int const idx=0) -> bool"""
        return _oechem.BoolParameterTyped_GetValue(self, value, idx)

    def GetDefault(self, dflt: "bool &", idx: "unsigned int const"=0) -> "bool":
        r"""GetDefault(BoolParameterTyped self, bool & dflt, unsigned int const idx=0) -> bool"""
        return _oechem.BoolParameterTyped_GetDefault(self, dflt, idx)

    def GetSetting(self, setting: "bool &", idx: "unsigned int const"=0) -> "bool":
        r"""GetSetting(BoolParameterTyped self, bool & setting, unsigned int const idx=0) -> bool"""
        return _oechem.BoolParameterTyped_GetSetting(self, setting, idx)

    def ClearValues(self) -> "bool":
        r"""ClearValues(BoolParameterTyped self) -> bool"""
        return _oechem.BoolParameterTyped_ClearValues(self)

    def ClearDefaults(self) -> "bool":
        r"""ClearDefaults(BoolParameterTyped self) -> bool"""
        return _oechem.BoolParameterTyped_ClearDefaults(self)

    def LoadValue(self) -> "bool":
        r"""LoadValue(BoolParameterTyped self) -> bool"""
        return _oechem.BoolParameterTyped_LoadValue(self)

    def LoadDefault(self) -> "bool":
        r"""LoadDefault(BoolParameterTyped self) -> bool"""
        return _oechem.BoolParameterTyped_LoadDefault(self)

    def AddValue(self, value: "bool const &") -> "bool":
        r"""AddValue(BoolParameterTyped self, bool const & value) -> bool"""
        return _oechem.BoolParameterTyped_AddValue(self, value)

    def AddDefault(self, dflt: "bool const &") -> "bool":
        r"""AddDefault(BoolParameterTyped self, bool const & dflt) -> bool"""
        return _oechem.BoolParameterTyped_AddDefault(self, dflt)

    def SetValue(self, value: "bool const &") -> "bool":
        r"""SetValue(BoolParameterTyped self, bool const & value) -> bool"""
        return _oechem.BoolParameterTyped_SetValue(self, value)

    def SetDefault(self, dflt: "bool const &") -> "bool":
        r"""SetDefault(BoolParameterTyped self, bool const & dflt) -> bool"""
        return _oechem.BoolParameterTyped_SetDefault(self, dflt)

    def TypedParameterTypeID(self) -> "void const *":
        r"""TypedParameterTypeID(BoolParameterTyped self) -> void const *"""
        return _oechem.BoolParameterTyped_TypedParameterTypeID(self)

# Register BoolParameterTyped in _oechem:
_oechem.BoolParameterTyped_swigregister(BoolParameterTyped)

class BoolParameterPOD(BoolParameterTyped):
    r"""Proxy of C++ OESystem::OEPODParameter< bool > 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__ = _oechem.delete_BoolParameterPOD

    def IsLegalString(self, val: "std::string const &") -> "bool":
        r"""IsLegalString(BoolParameterPOD self, std::string const & val) -> bool"""
        return _oechem.BoolParameterPOD_IsLegalString(self, val)

    def IsSetToString(self, val: "std::string const &") -> "bool":
        r"""IsSetToString(BoolParameterPOD self, std::string const & val) -> bool"""
        return _oechem.BoolParameterPOD_IsSetToString(self, val)

    def SetValues(self, values: "std::vector< bool,std::allocator< bool > > const &") -> "bool":
        r"""SetValues(BoolParameterPOD self, std::vector< bool,std::allocator< bool > > const & values) -> bool"""
        return _oechem.BoolParameterPOD_SetValues(self, values)

    def SetDefaults(self, values: "std::vector< bool,std::allocator< bool > > const &") -> "bool":
        r"""SetDefaults(BoolParameterPOD self, std::vector< bool,std::allocator< bool > > const & values) -> bool"""
        return _oechem.BoolParameterPOD_SetDefaults(self, values)

    def SetStringValues(self, values: "std::string const &") -> "bool":
        r"""SetStringValues(BoolParameterPOD self, std::string const & values) -> bool"""
        return _oechem.BoolParameterPOD_SetStringValues(self, values)

    def SetStringDefaults(self, values: "std::string const &") -> "bool":
        r"""SetStringDefaults(BoolParameterPOD self, std::string const & values) -> bool"""
        return _oechem.BoolParameterPOD_SetStringDefaults(self, values)

    def GetValuesVector(self) -> "std::vector< bool,std::allocator< bool > >":
        r"""GetValuesVector(BoolParameterPOD self) -> std::vector< bool,std::allocator< bool > >"""
        return _oechem.BoolParameterPOD_GetValuesVector(self)

    def GetDefaultsVector(self) -> "std::vector< bool,std::allocator< bool > >":
        r"""GetDefaultsVector(BoolParameterPOD self) -> std::vector< bool,std::allocator< bool > >"""
        return _oechem.BoolParameterPOD_GetDefaultsVector(self)

    def GetSettingsVector(self) -> "std::vector< bool,std::allocator< bool > >":
        r"""GetSettingsVector(BoolParameterPOD self) -> std::vector< bool,std::allocator< bool > >"""
        return _oechem.BoolParameterPOD_GetSettingsVector(self)

    def WriteValueAndDefaultBinary(self, ccc: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(BoolParameterPOD self, unsigned char * ccc) -> size_t"""
        return _oechem.BoolParameterPOD_WriteValueAndDefaultBinary(self, ccc)

    def ReadValueAndDefaultBinary(self, ccc: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(BoolParameterPOD self, unsigned char const * ccc) -> size_t"""
        return _oechem.BoolParameterPOD_ReadValueAndDefaultBinary(self, ccc)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(BoolParameterPOD self) -> size_t"""
        return _oechem.BoolParameterPOD_ValueAndDefaultBinarySize(self)

    def ClassID(self) -> "std::string":
        r"""ClassID(BoolParameterPOD self) -> std::string"""
        return _oechem.BoolParameterPOD_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(BoolParameterPOD self) -> void const *"""
        return _oechem.BoolParameterPOD_FactoryTypeID(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(BoolParameterPOD self) -> OEParameter"""
        return _oechem.BoolParameterPOD_CreateCopy(self)

# Register BoolParameterPOD in _oechem:
_oechem.BoolParameterPOD_swigregister(BoolParameterPOD)

class IntParameterTyped(OEParameter):
    r"""Proxy of C++ OESystem::OETypedParameter< int > 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__ = _oechem.delete_IntParameterTyped

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(IntParameterTyped self, unsigned int const idx=0) -> bool"""
        return _oechem.IntParameterTyped_GetHasValue(self, idx)

    def GetHasDefault(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasDefault(IntParameterTyped self, unsigned int const idx=0) -> bool"""
        return _oechem.IntParameterTyped_GetHasDefault(self, idx)

    def GetValue(self, value: "int &", idx: "unsigned int const"=0) -> "bool":
        r"""GetValue(IntParameterTyped self, int & value, unsigned int const idx=0) -> bool"""
        return _oechem.IntParameterTyped_GetValue(self, value, idx)

    def GetDefault(self, dflt: "int &", idx: "unsigned int const"=0) -> "bool":
        r"""GetDefault(IntParameterTyped self, int & dflt, unsigned int const idx=0) -> bool"""
        return _oechem.IntParameterTyped_GetDefault(self, dflt, idx)

    def GetSetting(self, setting: "int &", idx: "unsigned int const"=0) -> "bool":
        r"""GetSetting(IntParameterTyped self, int & setting, unsigned int const idx=0) -> bool"""
        return _oechem.IntParameterTyped_GetSetting(self, setting, idx)

    def ClearValues(self) -> "bool":
        r"""ClearValues(IntParameterTyped self) -> bool"""
        return _oechem.IntParameterTyped_ClearValues(self)

    def ClearDefaults(self) -> "bool":
        r"""ClearDefaults(IntParameterTyped self) -> bool"""
        return _oechem.IntParameterTyped_ClearDefaults(self)

    def LoadValue(self) -> "bool":
        r"""LoadValue(IntParameterTyped self) -> bool"""
        return _oechem.IntParameterTyped_LoadValue(self)

    def LoadDefault(self) -> "bool":
        r"""LoadDefault(IntParameterTyped self) -> bool"""
        return _oechem.IntParameterTyped_LoadDefault(self)

    def AddValue(self, value: "int const &") -> "bool":
        r"""AddValue(IntParameterTyped self, int const & value) -> bool"""
        return _oechem.IntParameterTyped_AddValue(self, value)

    def AddDefault(self, dflt: "int const &") -> "bool":
        r"""AddDefault(IntParameterTyped self, int const & dflt) -> bool"""
        return _oechem.IntParameterTyped_AddDefault(self, dflt)

    def SetValue(self, value: "int const &") -> "bool":
        r"""SetValue(IntParameterTyped self, int const & value) -> bool"""
        return _oechem.IntParameterTyped_SetValue(self, value)

    def SetDefault(self, dflt: "int const &") -> "bool":
        r"""SetDefault(IntParameterTyped self, int const & dflt) -> bool"""
        return _oechem.IntParameterTyped_SetDefault(self, dflt)

    def TypedParameterTypeID(self) -> "void const *":
        r"""TypedParameterTypeID(IntParameterTyped self) -> void const *"""
        return _oechem.IntParameterTyped_TypedParameterTypeID(self)

# Register IntParameterTyped in _oechem:
_oechem.IntParameterTyped_swigregister(IntParameterTyped)

class IntParameterPOD(IntParameterTyped):
    r"""Proxy of C++ OESystem::OEPODParameter< int > 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__ = _oechem.delete_IntParameterPOD

    def IsLegalString(self, val: "std::string const &") -> "bool":
        r"""IsLegalString(IntParameterPOD self, std::string const & val) -> bool"""
        return _oechem.IntParameterPOD_IsLegalString(self, val)

    def IsSetToString(self, val: "std::string const &") -> "bool":
        r"""IsSetToString(IntParameterPOD self, std::string const & val) -> bool"""
        return _oechem.IntParameterPOD_IsSetToString(self, val)

    def SetValues(self, values: "OEIntVector") -> "bool":
        r"""SetValues(IntParameterPOD self, OEIntVector values) -> bool"""
        return _oechem.IntParameterPOD_SetValues(self, values)

    def SetDefaults(self, values: "OEIntVector") -> "bool":
        r"""SetDefaults(IntParameterPOD self, OEIntVector values) -> bool"""
        return _oechem.IntParameterPOD_SetDefaults(self, values)

    def SetStringValues(self, values: "std::string const &") -> "bool":
        r"""SetStringValues(IntParameterPOD self, std::string const & values) -> bool"""
        return _oechem.IntParameterPOD_SetStringValues(self, values)

    def SetStringDefaults(self, values: "std::string const &") -> "bool":
        r"""SetStringDefaults(IntParameterPOD self, std::string const & values) -> bool"""
        return _oechem.IntParameterPOD_SetStringDefaults(self, values)

    def GetValuesVector(self) -> "std::vector< int,std::allocator< int > >":
        r"""GetValuesVector(IntParameterPOD self) -> OEIntVector"""
        return _oechem.IntParameterPOD_GetValuesVector(self)

    def GetDefaultsVector(self) -> "std::vector< int,std::allocator< int > >":
        r"""GetDefaultsVector(IntParameterPOD self) -> OEIntVector"""
        return _oechem.IntParameterPOD_GetDefaultsVector(self)

    def GetSettingsVector(self) -> "std::vector< int,std::allocator< int > >":
        r"""GetSettingsVector(IntParameterPOD self) -> OEIntVector"""
        return _oechem.IntParameterPOD_GetSettingsVector(self)

    def WriteValueAndDefaultBinary(self, ccc: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(IntParameterPOD self, unsigned char * ccc) -> size_t"""
        return _oechem.IntParameterPOD_WriteValueAndDefaultBinary(self, ccc)

    def ReadValueAndDefaultBinary(self, ccc: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(IntParameterPOD self, unsigned char const * ccc) -> size_t"""
        return _oechem.IntParameterPOD_ReadValueAndDefaultBinary(self, ccc)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(IntParameterPOD self) -> size_t"""
        return _oechem.IntParameterPOD_ValueAndDefaultBinarySize(self)

    def ClassID(self) -> "std::string":
        r"""ClassID(IntParameterPOD self) -> std::string"""
        return _oechem.IntParameterPOD_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(IntParameterPOD self) -> void const *"""
        return _oechem.IntParameterPOD_FactoryTypeID(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(IntParameterPOD self) -> OEParameter"""
        return _oechem.IntParameterPOD_CreateCopy(self)

# Register IntParameterPOD in _oechem:
_oechem.IntParameterPOD_swigregister(IntParameterPOD)

class UIntParameterTyped(OEParameter):
    r"""Proxy of C++ OESystem::OETypedParameter< unsigned int > 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__ = _oechem.delete_UIntParameterTyped

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(UIntParameterTyped self, unsigned int const idx=0) -> bool"""
        return _oechem.UIntParameterTyped_GetHasValue(self, idx)

    def GetHasDefault(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasDefault(UIntParameterTyped self, unsigned int const idx=0) -> bool"""
        return _oechem.UIntParameterTyped_GetHasDefault(self, idx)

    def GetValue(self, value: "unsigned int &", idx: "unsigned int const"=0) -> "bool":
        r"""GetValue(UIntParameterTyped self, unsigned int & value, unsigned int const idx=0) -> bool"""
        return _oechem.UIntParameterTyped_GetValue(self, value, idx)

    def GetDefault(self, dflt: "unsigned int &", idx: "unsigned int const"=0) -> "bool":
        r"""GetDefault(UIntParameterTyped self, unsigned int & dflt, unsigned int const idx=0) -> bool"""
        return _oechem.UIntParameterTyped_GetDefault(self, dflt, idx)

    def GetSetting(self, setting: "unsigned int &", idx: "unsigned int const"=0) -> "bool":
        r"""GetSetting(UIntParameterTyped self, unsigned int & setting, unsigned int const idx=0) -> bool"""
        return _oechem.UIntParameterTyped_GetSetting(self, setting, idx)

    def ClearValues(self) -> "bool":
        r"""ClearValues(UIntParameterTyped self) -> bool"""
        return _oechem.UIntParameterTyped_ClearValues(self)

    def ClearDefaults(self) -> "bool":
        r"""ClearDefaults(UIntParameterTyped self) -> bool"""
        return _oechem.UIntParameterTyped_ClearDefaults(self)

    def LoadValue(self) -> "bool":
        r"""LoadValue(UIntParameterTyped self) -> bool"""
        return _oechem.UIntParameterTyped_LoadValue(self)

    def LoadDefault(self) -> "bool":
        r"""LoadDefault(UIntParameterTyped self) -> bool"""
        return _oechem.UIntParameterTyped_LoadDefault(self)

    def AddValue(self, value: "unsigned int const &") -> "bool":
        r"""AddValue(UIntParameterTyped self, unsigned int const & value) -> bool"""
        return _oechem.UIntParameterTyped_AddValue(self, value)

    def AddDefault(self, dflt: "unsigned int const &") -> "bool":
        r"""AddDefault(UIntParameterTyped self, unsigned int const & dflt) -> bool"""
        return _oechem.UIntParameterTyped_AddDefault(self, dflt)

    def SetValue(self, value: "unsigned int const &") -> "bool":
        r"""SetValue(UIntParameterTyped self, unsigned int const & value) -> bool"""
        return _oechem.UIntParameterTyped_SetValue(self, value)

    def SetDefault(self, dflt: "unsigned int const &") -> "bool":
        r"""SetDefault(UIntParameterTyped self, unsigned int const & dflt) -> bool"""
        return _oechem.UIntParameterTyped_SetDefault(self, dflt)

    def TypedParameterTypeID(self) -> "void const *":
        r"""TypedParameterTypeID(UIntParameterTyped self) -> void const *"""
        return _oechem.UIntParameterTyped_TypedParameterTypeID(self)

# Register UIntParameterTyped in _oechem:
_oechem.UIntParameterTyped_swigregister(UIntParameterTyped)

class UIntParameterPOD(UIntParameterTyped):
    r"""Proxy of C++ OESystem::OEPODParameter< unsigned int > 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__ = _oechem.delete_UIntParameterPOD

    def IsLegalString(self, val: "std::string const &") -> "bool":
        r"""IsLegalString(UIntParameterPOD self, std::string const & val) -> bool"""
        return _oechem.UIntParameterPOD_IsLegalString(self, val)

    def IsSetToString(self, val: "std::string const &") -> "bool":
        r"""IsSetToString(UIntParameterPOD self, std::string const & val) -> bool"""
        return _oechem.UIntParameterPOD_IsSetToString(self, val)

    def SetValues(self, values: "OEUIntVector") -> "bool":
        r"""SetValues(UIntParameterPOD self, OEUIntVector values) -> bool"""
        return _oechem.UIntParameterPOD_SetValues(self, values)

    def SetDefaults(self, values: "OEUIntVector") -> "bool":
        r"""SetDefaults(UIntParameterPOD self, OEUIntVector values) -> bool"""
        return _oechem.UIntParameterPOD_SetDefaults(self, values)

    def SetStringValues(self, values: "std::string const &") -> "bool":
        r"""SetStringValues(UIntParameterPOD self, std::string const & values) -> bool"""
        return _oechem.UIntParameterPOD_SetStringValues(self, values)

    def SetStringDefaults(self, values: "std::string const &") -> "bool":
        r"""SetStringDefaults(UIntParameterPOD self, std::string const & values) -> bool"""
        return _oechem.UIntParameterPOD_SetStringDefaults(self, values)

    def GetValuesVector(self) -> "std::vector< unsigned int,std::allocator< unsigned int > >":
        r"""GetValuesVector(UIntParameterPOD self) -> OEUIntVector"""
        return _oechem.UIntParameterPOD_GetValuesVector(self)

    def GetDefaultsVector(self) -> "std::vector< unsigned int,std::allocator< unsigned int > >":
        r"""GetDefaultsVector(UIntParameterPOD self) -> OEUIntVector"""
        return _oechem.UIntParameterPOD_GetDefaultsVector(self)

    def GetSettingsVector(self) -> "std::vector< unsigned int,std::allocator< unsigned int > >":
        r"""GetSettingsVector(UIntParameterPOD self) -> OEUIntVector"""
        return _oechem.UIntParameterPOD_GetSettingsVector(self)

    def WriteValueAndDefaultBinary(self, ccc: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(UIntParameterPOD self, unsigned char * ccc) -> size_t"""
        return _oechem.UIntParameterPOD_WriteValueAndDefaultBinary(self, ccc)

    def ReadValueAndDefaultBinary(self, ccc: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(UIntParameterPOD self, unsigned char const * ccc) -> size_t"""
        return _oechem.UIntParameterPOD_ReadValueAndDefaultBinary(self, ccc)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(UIntParameterPOD self) -> size_t"""
        return _oechem.UIntParameterPOD_ValueAndDefaultBinarySize(self)

    def ClassID(self) -> "std::string":
        r"""ClassID(UIntParameterPOD self) -> std::string"""
        return _oechem.UIntParameterPOD_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(UIntParameterPOD self) -> void const *"""
        return _oechem.UIntParameterPOD_FactoryTypeID(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(UIntParameterPOD self) -> OEParameter"""
        return _oechem.UIntParameterPOD_CreateCopy(self)

# Register UIntParameterPOD in _oechem:
_oechem.UIntParameterPOD_swigregister(UIntParameterPOD)

class StringParameterTyped(OEParameter):
    r"""Proxy of C++ OESystem::OETypedParameter< std::string > 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__ = _oechem.delete_StringParameterTyped

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(StringParameterTyped self, unsigned int const idx=0) -> bool"""
        return _oechem.StringParameterTyped_GetHasValue(self, idx)

    def GetHasDefault(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasDefault(StringParameterTyped self, unsigned int const idx=0) -> bool"""
        return _oechem.StringParameterTyped_GetHasDefault(self, idx)

    def GetValue(self, value: "std::string &", idx: "unsigned int const"=0) -> "bool":
        r"""GetValue(StringParameterTyped self, std::string & value, unsigned int const idx=0) -> bool"""
        return _oechem.StringParameterTyped_GetValue(self, value, idx)

    def GetDefault(self, dflt: "std::string &", idx: "unsigned int const"=0) -> "bool":
        r"""GetDefault(StringParameterTyped self, std::string & dflt, unsigned int const idx=0) -> bool"""
        return _oechem.StringParameterTyped_GetDefault(self, dflt, idx)

    def GetSetting(self, setting: "std::string &", idx: "unsigned int const"=0) -> "bool":
        r"""GetSetting(StringParameterTyped self, std::string & setting, unsigned int const idx=0) -> bool"""
        return _oechem.StringParameterTyped_GetSetting(self, setting, idx)

    def ClearValues(self) -> "bool":
        r"""ClearValues(StringParameterTyped self) -> bool"""
        return _oechem.StringParameterTyped_ClearValues(self)

    def ClearDefaults(self) -> "bool":
        r"""ClearDefaults(StringParameterTyped self) -> bool"""
        return _oechem.StringParameterTyped_ClearDefaults(self)

    def LoadValue(self) -> "bool":
        r"""LoadValue(StringParameterTyped self) -> bool"""
        return _oechem.StringParameterTyped_LoadValue(self)

    def LoadDefault(self) -> "bool":
        r"""LoadDefault(StringParameterTyped self) -> bool"""
        return _oechem.StringParameterTyped_LoadDefault(self)

    def AddValue(self, value: "std::string const &") -> "bool":
        r"""AddValue(StringParameterTyped self, std::string const & value) -> bool"""
        return _oechem.StringParameterTyped_AddValue(self, value)

    def AddDefault(self, dflt: "std::string const &") -> "bool":
        r"""AddDefault(StringParameterTyped self, std::string const & dflt) -> bool"""
        return _oechem.StringParameterTyped_AddDefault(self, dflt)

    def SetValue(self, value: "std::string const &") -> "bool":
        r"""SetValue(StringParameterTyped self, std::string const & value) -> bool"""
        return _oechem.StringParameterTyped_SetValue(self, value)

    def SetDefault(self, dflt: "std::string const &") -> "bool":
        r"""SetDefault(StringParameterTyped self, std::string const & dflt) -> bool"""
        return _oechem.StringParameterTyped_SetDefault(self, dflt)

    def TypedParameterTypeID(self) -> "void const *":
        r"""TypedParameterTypeID(StringParameterTyped self) -> void const *"""
        return _oechem.StringParameterTyped_TypedParameterTypeID(self)

# Register StringParameterTyped in _oechem:
_oechem.StringParameterTyped_swigregister(StringParameterTyped)

class StringParameterPOD(StringParameterTyped):
    r"""Proxy of C++ OESystem::OEPODParameter< std::string > 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__ = _oechem.delete_StringParameterPOD

    def IsLegalString(self, val: "std::string const &") -> "bool":
        r"""IsLegalString(StringParameterPOD self, std::string const & val) -> bool"""
        return _oechem.StringParameterPOD_IsLegalString(self, val)

    def IsSetToString(self, val: "std::string const &") -> "bool":
        r"""IsSetToString(StringParameterPOD self, std::string const & val) -> bool"""
        return _oechem.StringParameterPOD_IsSetToString(self, val)

    def SetValues(self, values: "OEStringVector") -> "bool":
        r"""SetValues(StringParameterPOD self, OEStringVector values) -> bool"""
        return _oechem.StringParameterPOD_SetValues(self, values)

    def SetDefaults(self, values: "OEStringVector") -> "bool":
        r"""SetDefaults(StringParameterPOD self, OEStringVector values) -> bool"""
        return _oechem.StringParameterPOD_SetDefaults(self, values)

    def SetStringValues(self, values: "std::string const &") -> "bool":
        r"""SetStringValues(StringParameterPOD self, std::string const & values) -> bool"""
        return _oechem.StringParameterPOD_SetStringValues(self, values)

    def SetStringDefaults(self, values: "std::string const &") -> "bool":
        r"""SetStringDefaults(StringParameterPOD self, std::string const & values) -> bool"""
        return _oechem.StringParameterPOD_SetStringDefaults(self, values)

    def GetValuesVector(self) -> "std::vector< std::string,std::allocator< std::string > >":
        r"""GetValuesVector(StringParameterPOD self) -> OEStringVector"""
        return _oechem.StringParameterPOD_GetValuesVector(self)

    def GetDefaultsVector(self) -> "std::vector< std::string,std::allocator< std::string > >":
        r"""GetDefaultsVector(StringParameterPOD self) -> OEStringVector"""
        return _oechem.StringParameterPOD_GetDefaultsVector(self)

    def GetSettingsVector(self) -> "std::vector< std::string,std::allocator< std::string > >":
        r"""GetSettingsVector(StringParameterPOD self) -> OEStringVector"""
        return _oechem.StringParameterPOD_GetSettingsVector(self)

    def WriteValueAndDefaultBinary(self, ccc: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(StringParameterPOD self, unsigned char * ccc) -> size_t"""
        return _oechem.StringParameterPOD_WriteValueAndDefaultBinary(self, ccc)

    def ReadValueAndDefaultBinary(self, ccc: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(StringParameterPOD self, unsigned char const * ccc) -> size_t"""
        return _oechem.StringParameterPOD_ReadValueAndDefaultBinary(self, ccc)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(StringParameterPOD self) -> size_t"""
        return _oechem.StringParameterPOD_ValueAndDefaultBinarySize(self)

    def ClassID(self) -> "std::string":
        r"""ClassID(StringParameterPOD self) -> std::string"""
        return _oechem.StringParameterPOD_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(StringParameterPOD self) -> void const *"""
        return _oechem.StringParameterPOD_FactoryTypeID(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(StringParameterPOD self) -> OEParameter"""
        return _oechem.StringParameterPOD_CreateCopy(self)

# Register StringParameterPOD in _oechem:
_oechem.StringParameterPOD_swigregister(StringParameterPOD)

class MCSPointerParameter(OEParameter):
    r"""Proxy of C++ OESystem::OEPointerParameter< OEChem::OEMCSFunc > 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__ = _oechem.delete_MCSPointerParameter

    def TypedParameterTypeID(self) -> "void const *":
        r"""TypedParameterTypeID(MCSPointerParameter self) -> void const *"""
        return _oechem.MCSPointerParameter_TypedParameterTypeID(self)

    def ClassID(self) -> "std::string":
        r"""ClassID(MCSPointerParameter self) -> std::string"""
        return _oechem.MCSPointerParameter_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(MCSPointerParameter self) -> void const *"""
        return _oechem.MCSPointerParameter_FactoryTypeID(self)

    def AddLegalValue(self, arg2: "std::string const &") -> "bool":
        r"""AddLegalValue(MCSPointerParameter self, std::string const & arg2) -> bool"""
        return _oechem.MCSPointerParameter_AddLegalValue(self, arg2)

    def AddIllegalValue(self, arg2: "std::string const &") -> "bool":
        r"""AddIllegalValue(MCSPointerParameter self, std::string const & arg2) -> bool"""
        return _oechem.MCSPointerParameter_AddIllegalValue(self, arg2)

    def AddLegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddLegalRange(MCSPointerParameter self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oechem.MCSPointerParameter_AddLegalRange(self, arg2, arg3)

    def AddIllegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddIllegalRange(MCSPointerParameter self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oechem.MCSPointerParameter_AddIllegalRange(self, arg2, arg3)

    def WriteValueAndDefaultBinary(self, arg2: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(MCSPointerParameter self, unsigned char * arg2) -> size_t"""
        return _oechem.MCSPointerParameter_WriteValueAndDefaultBinary(self, arg2)

    def ReadValueAndDefaultBinary(self, arg2: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(MCSPointerParameter self, unsigned char const * arg2) -> size_t"""
        return _oechem.MCSPointerParameter_ReadValueAndDefaultBinary(self, arg2)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(MCSPointerParameter self) -> size_t"""
        return _oechem.MCSPointerParameter_ValueAndDefaultBinarySize(self)

    def LoadDefault(self) -> "bool":
        r"""LoadDefault(MCSPointerParameter self) -> bool"""
        return _oechem.MCSPointerParameter_LoadDefault(self)

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(MCSPointerParameter self, unsigned int const idx=0) -> bool"""
        return _oechem.MCSPointerParameter_GetHasValue(self, idx)

    def GetHasDefault(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasDefault(MCSPointerParameter self, unsigned int const idx=0) -> bool"""
        return _oechem.MCSPointerParameter_GetHasDefault(self, idx)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(MCSPointerParameter self) -> OEParameter"""
        return _oechem.MCSPointerParameter_CreateCopy(self)

# Register MCSPointerParameter in _oechem:
_oechem.MCSPointerParameter_swigregister(MCSPointerParameter)

class OEFloatParameter(FloatParameterPOD):
    r"""Proxy of C++ OESystem::OEFloatParameter 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__(OEFloatParameter self, std::string const & name) -> OEFloatParameter
        __init__(OEFloatParameter self, std::string const & name, float const defValue) -> OEFloatParameter
        __init__(OEFloatParameter self) -> OEFloatParameter
        __init__(OEFloatParameter self, OEFloatParameter arg2) -> OEFloatParameter
        """
        _oechem.OEFloatParameter_swiginit(self, _oechem.new_OEFloatParameter(*args))
    __swig_destroy__ = _oechem.delete_OEFloatParameter

    @staticmethod
    def StaticClassID() -> "std::string":
        r"""StaticClassID() -> std::string"""
        return _oechem.OEFloatParameter_StaticClassID()

    def ClassID(self) -> "std::string":
        r"""ClassID(OEFloatParameter self) -> std::string"""
        return _oechem.OEFloatParameter_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(OEFloatParameter self) -> void const *"""
        return _oechem.OEFloatParameter_FactoryTypeID(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEFloatParameter self) -> OEParameter"""
        return _oechem.OEFloatParameter_CreateCopy(self)

    def GetDefault(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetDefault(OEFloatParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEFloatParameter_GetDefault(self, idx)

    def GetDefaults(self) -> "PyObject *":
        r"""GetDefaults(OEFloatParameter self) -> PyObject *"""
        return _oechem.OEFloatParameter_GetDefaults(self)

    def GetSetting(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetSetting(OEFloatParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEFloatParameter_GetSetting(self, idx)

    def GetSettings(self) -> "PyObject *":
        r"""GetSettings(OEFloatParameter self) -> PyObject *"""
        return _oechem.OEFloatParameter_GetSettings(self)

    def GetValue(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetValue(OEFloatParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEFloatParameter_GetValue(self, idx)

    def GetValues(self) -> "PyObject *":
        r"""GetValues(OEFloatParameter self) -> PyObject *"""
        return _oechem.OEFloatParameter_GetValues(self)

# Register OEFloatParameter in _oechem:
_oechem.OEFloatParameter_swigregister(OEFloatParameter)

def OEFloatParameter_StaticClassID() -> "std::string":
    r"""OEFloatParameter_StaticClassID() -> std::string"""
    return _oechem.OEFloatParameter_StaticClassID()

class OEDoubleParameter(DoubleParameterPOD):
    r"""Proxy of C++ OESystem::OEDoubleParameter 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__(OEDoubleParameter self, std::string const & name) -> OEDoubleParameter
        __init__(OEDoubleParameter self, std::string const & name, double const defValue) -> OEDoubleParameter
        __init__(OEDoubleParameter self) -> OEDoubleParameter
        __init__(OEDoubleParameter self, OEDoubleParameter arg2) -> OEDoubleParameter
        """
        _oechem.OEDoubleParameter_swiginit(self, _oechem.new_OEDoubleParameter(*args))
    __swig_destroy__ = _oechem.delete_OEDoubleParameter

    @staticmethod
    def StaticClassID() -> "std::string":
        r"""StaticClassID() -> std::string"""
        return _oechem.OEDoubleParameter_StaticClassID()

    def ClassID(self) -> "std::string":
        r"""ClassID(OEDoubleParameter self) -> std::string"""
        return _oechem.OEDoubleParameter_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(OEDoubleParameter self) -> void const *"""
        return _oechem.OEDoubleParameter_FactoryTypeID(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEDoubleParameter self) -> OEParameter"""
        return _oechem.OEDoubleParameter_CreateCopy(self)

    def GetDefault(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetDefault(OEDoubleParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEDoubleParameter_GetDefault(self, idx)

    def GetDefaults(self) -> "PyObject *":
        r"""GetDefaults(OEDoubleParameter self) -> PyObject *"""
        return _oechem.OEDoubleParameter_GetDefaults(self)

    def GetSetting(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetSetting(OEDoubleParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEDoubleParameter_GetSetting(self, idx)

    def GetSettings(self) -> "PyObject *":
        r"""GetSettings(OEDoubleParameter self) -> PyObject *"""
        return _oechem.OEDoubleParameter_GetSettings(self)

    def GetValue(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetValue(OEDoubleParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEDoubleParameter_GetValue(self, idx)

    def GetValues(self) -> "PyObject *":
        r"""GetValues(OEDoubleParameter self) -> PyObject *"""
        return _oechem.OEDoubleParameter_GetValues(self)

# Register OEDoubleParameter in _oechem:
_oechem.OEDoubleParameter_swigregister(OEDoubleParameter)

def OEDoubleParameter_StaticClassID() -> "std::string":
    r"""OEDoubleParameter_StaticClassID() -> std::string"""
    return _oechem.OEDoubleParameter_StaticClassID()

class OEIntParameter(IntParameterPOD):
    r"""Proxy of C++ OESystem::OEIntParameter 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__(OEIntParameter self, std::string const & name) -> OEIntParameter
        __init__(OEIntParameter self, std::string const & name, int const defValue) -> OEIntParameter
        __init__(OEIntParameter self) -> OEIntParameter
        __init__(OEIntParameter self, OEIntParameter arg2) -> OEIntParameter
        """
        _oechem.OEIntParameter_swiginit(self, _oechem.new_OEIntParameter(*args))
    __swig_destroy__ = _oechem.delete_OEIntParameter

    @staticmethod
    def StaticClassID() -> "std::string":
        r"""StaticClassID() -> std::string"""
        return _oechem.OEIntParameter_StaticClassID()

    def ClassID(self) -> "std::string":
        r"""ClassID(OEIntParameter self) -> std::string"""
        return _oechem.OEIntParameter_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(OEIntParameter self) -> void const *"""
        return _oechem.OEIntParameter_FactoryTypeID(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEIntParameter self) -> OEParameter"""
        return _oechem.OEIntParameter_CreateCopy(self)

    def GetDefault(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetDefault(OEIntParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEIntParameter_GetDefault(self, idx)

    def GetDefaults(self) -> "PyObject *":
        r"""GetDefaults(OEIntParameter self) -> PyObject *"""
        return _oechem.OEIntParameter_GetDefaults(self)

    def GetSetting(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetSetting(OEIntParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEIntParameter_GetSetting(self, idx)

    def GetSettings(self) -> "PyObject *":
        r"""GetSettings(OEIntParameter self) -> PyObject *"""
        return _oechem.OEIntParameter_GetSettings(self)

    def GetValue(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetValue(OEIntParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEIntParameter_GetValue(self, idx)

    def GetValues(self) -> "PyObject *":
        r"""GetValues(OEIntParameter self) -> PyObject *"""
        return _oechem.OEIntParameter_GetValues(self)

# Register OEIntParameter in _oechem:
_oechem.OEIntParameter_swigregister(OEIntParameter)

def OEIntParameter_StaticClassID() -> "std::string":
    r"""OEIntParameter_StaticClassID() -> std::string"""
    return _oechem.OEIntParameter_StaticClassID()

class OEUIntParameter(UIntParameterPOD):
    r"""Proxy of C++ OESystem::OEUIntParameter 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__(OEUIntParameter self, std::string const & name) -> OEUIntParameter
        __init__(OEUIntParameter self, std::string const & name, unsigned int const defValue) -> OEUIntParameter
        __init__(OEUIntParameter self) -> OEUIntParameter
        __init__(OEUIntParameter self, OEUIntParameter arg2) -> OEUIntParameter
        """
        _oechem.OEUIntParameter_swiginit(self, _oechem.new_OEUIntParameter(*args))
    __swig_destroy__ = _oechem.delete_OEUIntParameter

    @staticmethod
    def StaticClassID() -> "std::string":
        r"""StaticClassID() -> std::string"""
        return _oechem.OEUIntParameter_StaticClassID()

    def ClassID(self) -> "std::string":
        r"""ClassID(OEUIntParameter self) -> std::string"""
        return _oechem.OEUIntParameter_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(OEUIntParameter self) -> void const *"""
        return _oechem.OEUIntParameter_FactoryTypeID(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEUIntParameter self) -> OEParameter"""
        return _oechem.OEUIntParameter_CreateCopy(self)

    def GetDefault(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetDefault(OEUIntParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEUIntParameter_GetDefault(self, idx)

    def GetDefaults(self) -> "PyObject *":
        r"""GetDefaults(OEUIntParameter self) -> PyObject *"""
        return _oechem.OEUIntParameter_GetDefaults(self)

    def GetSetting(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetSetting(OEUIntParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEUIntParameter_GetSetting(self, idx)

    def GetSettings(self) -> "PyObject *":
        r"""GetSettings(OEUIntParameter self) -> PyObject *"""
        return _oechem.OEUIntParameter_GetSettings(self)

    def GetValue(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetValue(OEUIntParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEUIntParameter_GetValue(self, idx)

    def GetValues(self) -> "PyObject *":
        r"""GetValues(OEUIntParameter self) -> PyObject *"""
        return _oechem.OEUIntParameter_GetValues(self)

# Register OEUIntParameter in _oechem:
_oechem.OEUIntParameter_swigregister(OEUIntParameter)

def OEUIntParameter_StaticClassID() -> "std::string":
    r"""OEUIntParameter_StaticClassID() -> std::string"""
    return _oechem.OEUIntParameter_StaticClassID()

class OEBoolParameter(BoolParameterPOD):
    r"""Proxy of C++ OESystem::OEBoolParameter 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__(OEBoolParameter self, std::string const & name) -> OEBoolParameter
        __init__(OEBoolParameter self, std::string const & name, bool const defValue) -> OEBoolParameter
        __init__(OEBoolParameter self) -> OEBoolParameter
        __init__(OEBoolParameter self, OEBoolParameter arg2) -> OEBoolParameter
        """
        _oechem.OEBoolParameter_swiginit(self, _oechem.new_OEBoolParameter(*args))
    __swig_destroy__ = _oechem.delete_OEBoolParameter

    @staticmethod
    def StaticClassID() -> "std::string":
        r"""StaticClassID() -> std::string"""
        return _oechem.OEBoolParameter_StaticClassID()

    def ClassID(self) -> "std::string":
        r"""ClassID(OEBoolParameter self) -> std::string"""
        return _oechem.OEBoolParameter_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(OEBoolParameter self) -> void const *"""
        return _oechem.OEBoolParameter_FactoryTypeID(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEBoolParameter self) -> OEParameter"""
        return _oechem.OEBoolParameter_CreateCopy(self)

    def AddLegalValue(self, arg2: "std::string const &") -> "bool":
        r"""AddLegalValue(OEBoolParameter self, std::string const & arg2) -> bool"""
        return _oechem.OEBoolParameter_AddLegalValue(self, arg2)

    def AddIllegalValue(self, arg2: "std::string const &") -> "bool":
        r"""AddIllegalValue(OEBoolParameter self, std::string const & arg2) -> bool"""
        return _oechem.OEBoolParameter_AddIllegalValue(self, arg2)

    def AddLegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddLegalRange(OEBoolParameter self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oechem.OEBoolParameter_AddLegalRange(self, arg2, arg3)

    def AddIllegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddIllegalRange(OEBoolParameter self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oechem.OEBoolParameter_AddIllegalRange(self, arg2, arg3)

    def GetDefault(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetDefault(OEBoolParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEBoolParameter_GetDefault(self, idx)

    def GetDefaults(self) -> "PyObject *":
        r"""GetDefaults(OEBoolParameter self) -> PyObject *"""
        return _oechem.OEBoolParameter_GetDefaults(self)

    def GetSetting(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetSetting(OEBoolParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEBoolParameter_GetSetting(self, idx)

    def GetSettings(self) -> "PyObject *":
        r"""GetSettings(OEBoolParameter self) -> PyObject *"""
        return _oechem.OEBoolParameter_GetSettings(self)

    def GetValue(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetValue(OEBoolParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEBoolParameter_GetValue(self, idx)

    def GetValues(self) -> "PyObject *":
        r"""GetValues(OEBoolParameter self) -> PyObject *"""
        return _oechem.OEBoolParameter_GetValues(self)

# Register OEBoolParameter in _oechem:
_oechem.OEBoolParameter_swigregister(OEBoolParameter)

def OEBoolParameter_StaticClassID() -> "std::string":
    r"""OEBoolParameter_StaticClassID() -> std::string"""
    return _oechem.OEBoolParameter_StaticClassID()

class OEStringParameter(StringParameterPOD):
    r"""Proxy of C++ OESystem::OEStringParameter 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__(OEStringParameter self, std::string const & name) -> OEStringParameter
        __init__(OEStringParameter self, std::string const & name, std::string const & defValue) -> OEStringParameter
        __init__(OEStringParameter self) -> OEStringParameter
        __init__(OEStringParameter self, OEStringParameter arg2) -> OEStringParameter
        """
        _oechem.OEStringParameter_swiginit(self, _oechem.new_OEStringParameter(*args))
    __swig_destroy__ = _oechem.delete_OEStringParameter

    @staticmethod
    def StaticClassID() -> "std::string":
        r"""StaticClassID() -> std::string"""
        return _oechem.OEStringParameter_StaticClassID()

    def ClassID(self) -> "std::string":
        r"""ClassID(OEStringParameter self) -> std::string"""
        return _oechem.OEStringParameter_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(OEStringParameter self) -> void const *"""
        return _oechem.OEStringParameter_FactoryTypeID(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEStringParameter self) -> OEParameter"""
        return _oechem.OEStringParameter_CreateCopy(self)

    def AddLegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddLegalRange(OEStringParameter self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oechem.OEStringParameter_AddLegalRange(self, arg2, arg3)

    def AddIllegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddIllegalRange(OEStringParameter self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oechem.OEStringParameter_AddIllegalRange(self, arg2, arg3)

    def IsLegal(self, value: "std::string const &") -> "bool":
        r"""IsLegal(OEStringParameter self, std::string const & value) -> bool"""
        return _oechem.OEStringParameter_IsLegal(self, value)

    def IsLegalString(self, val: "std::string const &") -> "bool":
        r"""IsLegalString(OEStringParameter self, std::string const & val) -> bool"""
        return _oechem.OEStringParameter_IsLegalString(self, val)

    def GetDefault(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetDefault(OEStringParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEStringParameter_GetDefault(self, idx)

    def GetDefaults(self) -> "PyObject *":
        r"""GetDefaults(OEStringParameter self) -> PyObject *"""
        return _oechem.OEStringParameter_GetDefaults(self)

    def GetValue(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetValue(OEStringParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEStringParameter_GetValue(self, idx)

    def GetValues(self) -> "PyObject *":
        r"""GetValues(OEStringParameter self) -> PyObject *"""
        return _oechem.OEStringParameter_GetValues(self)

    def GetSetting(self, idx: "unsigned int"=0) -> "PyObject *":
        r"""GetSetting(OEStringParameter self, unsigned int idx=0) -> PyObject"""
        return _oechem.OEStringParameter_GetSetting(self, idx)

    def GetSettings(self) -> "PyObject *":
        r"""GetSettings(OEStringParameter self) -> PyObject *"""
        return _oechem.OEStringParameter_GetSettings(self)

# Register OEStringParameter in _oechem:
_oechem.OEStringParameter_swigregister(OEStringParameter)

def OEStringParameter_StaticClassID() -> "std::string":
    r"""OEStringParameter_StaticClassID() -> std::string"""
    return _oechem.OEStringParameter_StaticClassID()

class OEConstParameter(OEUIntParameter):
    r"""Proxy of C++ OESystem::OEConstParameter 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__(OEConstParameter self, std::string const & name) -> OEConstParameter
        __init__(OEConstParameter self, std::string const & name, unsigned int const defValue, std::string const & defKey) -> OEConstParameter
        __init__(OEConstParameter self) -> OEConstParameter
        __init__(OEConstParameter self, OEConstParameter arg2) -> OEConstParameter
        """
        _oechem.OEConstParameter_swiginit(self, _oechem.new_OEConstParameter(*args))
    __swig_destroy__ = _oechem.delete_OEConstParameter

    @staticmethod
    def StaticClassID() -> "std::string":
        r"""StaticClassID() -> std::string"""
        return _oechem.OEConstParameter_StaticClassID()

    def ClassID(self) -> "std::string":
        r"""ClassID(OEConstParameter self) -> std::string"""
        return _oechem.OEConstParameter_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(OEConstParameter self) -> void const *"""
        return _oechem.OEConstParameter_FactoryTypeID(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEConstParameter self) -> OEParameter"""
        return _oechem.OEConstParameter_CreateCopy(self)

    def IsLegalString(self, val: "std::string const &") -> "bool":
        r"""IsLegalString(OEConstParameter self, std::string const & val) -> bool"""
        return _oechem.OEConstParameter_IsLegalString(self, val)

    def AddLegalEntry(self, value: "unsigned int const", key: "std::string const &") -> "bool":
        r"""AddLegalEntry(OEConstParameter self, unsigned int const value, std::string const & key) -> bool"""
        return _oechem.OEConstParameter_AddLegalEntry(self, value, key)

    def AddValue(self, *args) -> "bool":
        r"""
        AddValue(OEConstParameter self, std::string const & value) -> bool
        AddValue(OEConstParameter self, unsigned int const & value) -> bool
        """
        return _oechem.OEConstParameter_AddValue(self, *args)

    def AddDefault(self, *args) -> "bool":
        r"""
        AddDefault(OEConstParameter self, std::string const & dflt) -> bool
        AddDefault(OEConstParameter self, unsigned int const & dflt) -> bool
        """
        return _oechem.OEConstParameter_AddDefault(self, *args)

    def SetValue(self, *args) -> "bool":
        r"""
        SetValue(OEConstParameter self, std::string const & value) -> bool
        SetValue(OEConstParameter self, unsigned int const & value) -> bool
        """
        return _oechem.OEConstParameter_SetValue(self, *args)

    def SetDefault(self, *args) -> "bool":
        r"""
        SetDefault(OEConstParameter self, std::string const & dflt) -> bool
        SetDefault(OEConstParameter self, unsigned int const & dflt) -> bool
        """
        return _oechem.OEConstParameter_SetDefault(self, *args)

    def GetPrettyDefault(self, idx: "unsigned int const"=0) -> "std::string":
        r"""GetPrettyDefault(OEConstParameter self, unsigned int const idx=0) -> std::string"""
        return _oechem.OEConstParameter_GetPrettyDefault(self, idx)

    def GetPrettyLegalValues(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetPrettyLegalValues(OEConstParameter self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEConstParameter_GetPrettyLegalValues(self)

# Register OEConstParameter in _oechem:
_oechem.OEConstParameter_swigregister(OEConstParameter)

def OEConstParameter_StaticClassID() -> "std::string":
    r"""OEConstParameter_StaticClassID() -> std::string"""
    return _oechem.OEConstParameter_StaticClassID()

class OEBitParameter(OEConstParameter):
    r"""Proxy of C++ OESystem::OEBitParameter 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__(OEBitParameter self, std::string const & name) -> OEBitParameter
        __init__(OEBitParameter self, std::string const & name, unsigned int const defValue, std::string const & defKey) -> OEBitParameter
        __init__(OEBitParameter self) -> OEBitParameter
        __init__(OEBitParameter self, OEBitParameter arg2) -> OEBitParameter
        """
        _oechem.OEBitParameter_swiginit(self, _oechem.new_OEBitParameter(*args))
    __swig_destroy__ = _oechem.delete_OEBitParameter

    @staticmethod
    def StaticClassID() -> "std::string":
        r"""StaticClassID() -> std::string"""
        return _oechem.OEBitParameter_StaticClassID()

    def ClassID(self) -> "std::string":
        r"""ClassID(OEBitParameter self) -> std::string"""
        return _oechem.OEBitParameter_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(OEBitParameter self) -> void const *"""
        return _oechem.OEBitParameter_FactoryTypeID(self)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEBitParameter self) -> OEParameter"""
        return _oechem.OEBitParameter_CreateCopy(self)

    def IsLegalString(self, val: "std::string const &") -> "bool":
        r"""IsLegalString(OEBitParameter self, std::string const & val) -> bool"""
        return _oechem.OEBitParameter_IsLegalString(self, val)

    def AddValue(self, *args) -> "bool":
        r"""
        AddValue(OEBitParameter self, unsigned int const & value) -> bool
        AddValue(OEBitParameter self, std::string const & value) -> bool
        """
        return _oechem.OEBitParameter_AddValue(self, *args)

    def AddDefault(self, *args) -> "bool":
        r"""
        AddDefault(OEBitParameter self, unsigned int const & dflt) -> bool
        AddDefault(OEBitParameter self, std::string const & dflt) -> bool
        """
        return _oechem.OEBitParameter_AddDefault(self, *args)

    def SetValue(self, *args) -> "bool":
        r"""
        SetValue(OEBitParameter self, unsigned int const & value) -> bool
        SetValue(OEBitParameter self, std::string const & value) -> bool
        """
        return _oechem.OEBitParameter_SetValue(self, *args)

    def SetDefault(self, *args) -> "bool":
        r"""
        SetDefault(OEBitParameter self, unsigned int const & dflt) -> bool
        SetDefault(OEBitParameter self, std::string const & dflt) -> bool
        """
        return _oechem.OEBitParameter_SetDefault(self, *args)

# Register OEBitParameter in _oechem:
_oechem.OEBitParameter_swigregister(OEBitParameter)

def OEBitParameter_StaticClassID() -> "std::string":
    r"""OEBitParameter_StaticClassID() -> std::string"""
    return _oechem.OEBitParameter_StaticClassID()


def OERegisterMolParameters() -> "bool":
    r"""OERegisterMolParameters() -> bool"""
    return _oechem.OERegisterMolParameters()
class OEOptionsIter(object):
    r"""Proxy of C++ OESystem::OEIter< OESystem::OEOptions > 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__(OEOptionsIter self) -> OEOptionsIter
        __init__(OEOptionsIter self, OEOptionsIter rhs) -> OEOptionsIter
        __init__(OEOptionsIter self, OESystem::OEIterBase< OESystem::OEOptions > * rhs) -> OEOptionsIter
        __init__(OEOptionsIter self, OESystem::OEIterBase< OESystem::OEIter< OESystem::OEOptions >::NonConstA > * rhs) -> OEOptionsIter
        """
        _oechem.OEOptionsIter_swiginit(self, _oechem.new_OEOptionsIter(*args))
    __swig_destroy__ = _oechem.delete_OEOptionsIter

    def Copy(self) -> "OESystem::OEIterBase< OESystem::OEOptions > *":
        r"""Copy(OEOptionsIter self) -> OESystem::OEIterBase< OESystem::OEOptions > *"""
        return _oechem.OEOptionsIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEOptionsIter self, OESystem::OEIterBase< OESystem::OEOptions > * ib)
        Push(OEOptionsIter self, OEOptionsIter iter)
        """
        return _oechem.OEOptionsIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OESystem::OEOptions,OESystem::OEOptions > const &") -> "void":
        r"""Sort(OEOptionsIter self, OESystem::OEBinaryPredicate< OESystem::OEOptions,OESystem::OEOptions > const & sort_criterion)"""
        return _oechem.OEOptionsIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OESystem::OEOptions > &":
        r"""ToFirst(OEOptionsIter self) -> OEOptionsIter"""
        return _oechem.OEOptionsIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OESystem::OEOptions > &":
        r"""ToLast(OEOptionsIter self) -> OEOptionsIter"""
        return _oechem.OEOptionsIter_ToLast(self)

    def __ref__(self) -> "OESystem::OEOptions &":
        r"""__ref__(OEOptionsIter self) -> OEOptions"""
        return _oechem.OEOptionsIter___ref__(self)

    def IsValid(self):
      return _oechem.OEOptionsIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEOptionsIter self) -> PyObject *"""
        return _oechem.OEOptionsIter_next(self)

    def Target(self) -> "OESystem::OEOptions &":
        r"""Target(OEOptionsIter self) -> OEOptions"""
        return _oechem.OEOptionsIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OESystem::OEOptions > &":
        r"""
        Next(OEOptionsIter self) -> OEOptionsIter
        Next(OEOptionsIter self, int i) -> OEOptionsIter
        """
        return _oechem.OEOptionsIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OESystem::OEOptions > &":
        r"""
        Prev(OEOptionsIter self) -> OEOptionsIter
        Prev(OEOptionsIter self, int i) -> OEOptionsIter
        """
        return _oechem.OEOptionsIter_Prev(self, *args)

# Register OEOptionsIter in _oechem:
_oechem.OEOptionsIter_swigregister(OEOptionsIter)

class OEOptions(object):
    r"""Proxy of C++ OESystem::OEOptions class."""

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

    def Validate(self) -> "bool":
        r"""Validate(OEOptions self) -> bool"""
        return _oechem.OEOptions_Validate(self)

    def CreateCopy(self) -> "OESystem::OEOptions *":
        r"""CreateCopy(OEOptions self) -> OEOptions"""
        return _oechem.OEOptions_CreateCopy(self)

    def GetOrderPriority(self) -> "int":
        r"""GetOrderPriority(OEOptions self) -> int"""
        return _oechem.OEOptions_GetOrderPriority(self)

    def SetOrderPriority(self, priority: "int const") -> "bool":
        r"""SetOrderPriority(OEOptions self, int const priority) -> bool"""
        return _oechem.OEOptions_SetOrderPriority(self, priority)

    def GetName(self) -> "std::string":
        r"""GetName(OEOptions self) -> std::string"""
        return _oechem.OEOptions_GetName(self)

    def SetName(self, name: "std::string const &") -> "bool":
        r"""SetName(OEOptions self, std::string const & name) -> bool"""
        return _oechem.OEOptions_SetName(self, name)

    def GetBrief(self) -> "std::string":
        r"""GetBrief(OEOptions self) -> std::string"""
        return _oechem.OEOptions_GetBrief(self)

    def SetBrief(self, brief: "std::string const &") -> "bool":
        r"""SetBrief(OEOptions self, std::string const & brief) -> bool"""
        return _oechem.OEOptions_SetBrief(self, brief)

    def GetDetail(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetDetail(OEOptions self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEOptions_GetDetail(self)

    def AddDetail(self, detail: "std::string const &") -> "bool":
        r"""AddDetail(OEOptions self, std::string const & detail) -> bool"""
        return _oechem.OEOptions_AddDetail(self, detail)

    def HasParameter(self, name: "std::string const &") -> "bool":
        r"""HasParameter(OEOptions self, std::string const & name) -> bool"""
        return _oechem.OEOptions_HasParameter(self, name)

    def GetParameter(self, *args) -> "OESystem::OEParameter const *":
        r"""
        GetParameter(OEOptions self, std::string const & name) -> OEParameter
        GetParameter(OEOptions self, std::string const & name) -> OEParameter
        """
        return _oechem.OEOptions_GetParameter(self, *args)

    def GetParameters(self, *args) -> "OESystem::OEIterBase< OESystem::OEParameter > *":
        r"""
        GetParameters(OEOptions self, bool const recursive=True) -> OESystem::OEIterBase< OESystem::OEParameter const >
        GetParameters(OEOptions self, bool const recursive=True) -> OESystem::OEIterBase< OESystem::OEParameter >
        GetParameters(OEOptions self, std::string const & name, bool const recursive=True) -> OESystem::OEIterBase< OESystem::OEParameter const >
        GetParameters(OEOptions self, std::string const & name, bool const recursive=True) -> OESystem::OEIterBase< OESystem::OEParameter >
        """
        return _oechem.OEOptions_GetParameters(self, *args)

    def AddParameter(self, param: "OEParameter") -> "OESystem::OEParameter *":
        r"""AddParameter(OEOptions self, OEParameter param) -> OEParameter"""
        return _oechem.OEOptions_AddParameter(self, param)

    def DeleteParameter(self, param: "OEParameter") -> "bool":
        r"""DeleteParameter(OEOptions self, OEParameter param) -> bool"""
        return _oechem.OEOptions_DeleteParameter(self, param)

    def SetParameterVisibility(self, *args) -> "bool":
        r"""
        SetParameterVisibility(OEOptions self, unsigned int const visibility) -> bool
        SetParameterVisibility(OEOptions self, std::string const & name, unsigned int const visibility) -> bool
        """
        return _oechem.OEOptions_SetParameterVisibility(self, *args)

    def FindDupParameters(self, *args) -> "OESystem::OEIterBase< OESystem::OEParameter const > *":
        r"""
        FindDupParameters(OEOptions self, bool const visibleOnly=True) -> OESystem::OEIterBase< OESystem::OEParameter >
        FindDupParameters(OEOptions self, bool const visibleOnly=True) -> OESystem::OEIterBase< OESystem::OEParameter const >
        """
        return _oechem.OEOptions_FindDupParameters(self, *args)

    def HasDupParameters(self, visibleOnly: "bool const"=True) -> "bool":
        r"""HasDupParameters(OEOptions self, bool const visibleOnly=True) -> bool"""
        return _oechem.OEOptions_HasDupParameters(self, visibleOnly)

    def AddParameterSuffix(self, suffix: "std::string const &") -> "bool":
        r"""AddParameterSuffix(OEOptions self, std::string const & suffix) -> bool"""
        return _oechem.OEOptions_AddParameterSuffix(self, suffix)

    def AddParameterPrefix(self, prefix: "std::string const &") -> "bool":
        r"""AddParameterPrefix(OEOptions self, std::string const & prefix) -> bool"""
        return _oechem.OEOptions_AddParameterPrefix(self, prefix)

    def Clear(self) -> "void":
        r"""Clear(OEOptions self)"""
        return _oechem.OEOptions_Clear(self)

    def AddOption(self, opts: "OEOptions") -> "OESystem::OEOptions *":
        r"""AddOption(OEOptions self, OEOptions opts) -> OEOptions"""
        return _oechem.OEOptions_AddOption(self, opts)

    def HasOption(self, name: "std::string const &") -> "bool":
        r"""HasOption(OEOptions self, std::string const & name) -> bool"""
        return _oechem.OEOptions_HasOption(self, name)

    def GetOption(self, *args) -> "OESystem::OEOptions const *":
        r"""
        GetOption(OEOptions self, std::string const & name) -> OEOptions
        GetOption(OEOptions self, std::string const & name) -> OEOptions
        """
        return _oechem.OEOptions_GetOption(self, *args)

    def GetOptions(self, *args) -> "OESystem::OEIterBase< OESystem::OEOptions > *":
        r"""
        GetOptions(OEOptions self, bool const recursive=True) -> OESystem::OEIterBase< OESystem::OEOptions const >
        GetOptions(OEOptions self, bool const recursive=True) -> OESystem::OEIterBase< OESystem::OEOptions >
        """
        return _oechem.OEOptions_GetOptions(self, *args)

    def DeleteOptions(self, arg2: "OEOptions") -> "bool":
        r"""DeleteOptions(OEOptions self, OEOptions arg2) -> bool"""
        return _oechem.OEOptions_DeleteOptions(self, arg2)

    def UpdateValues(self, opts: "OEOptions") -> "bool":
        r"""UpdateValues(OEOptions self, OEOptions opts) -> bool"""
        return _oechem.OEOptions_UpdateValues(self, opts)

    def __init__(self, *args):
        r"""
        __init__(OEOptions self, std::string const & name) -> OEOptions
        __init__(OEOptions self, OEOptions arg2) -> OEOptions
        __init__(OEOptions self, std::string const & name, size_t const numParams, size_t const numSubOpts) -> OEOptions
        """
        if self.__class__ == OEOptions:
            _self = None
        else:
            _self = self
        _oechem.OEOptions_swiginit(self, _oechem.new_OEOptions(_self, *args))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEOptions(self)
        return weakref.proxy(self)

# Register OEOptions in _oechem:
_oechem.OEOptions_swigregister(OEOptions)

class OEConfRMSDOptions(OEOptions):
    r"""Proxy of C++ OEChem::OEConfRMSDOptions 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__(OEConfRMSDOptions self) -> OEConfRMSDOptions
        __init__(OEConfRMSDOptions self, OEConfRMSDOptions arg2) -> OEConfRMSDOptions
        """
        _oechem.OEConfRMSDOptions_swiginit(self, _oechem.new_OEConfRMSDOptions(*args))
    __swig_destroy__ = _oechem.delete_OEConfRMSDOptions

    def Validate(self) -> "bool":
        r"""Validate(OEConfRMSDOptions self) -> bool"""
        return _oechem.OEConfRMSDOptions_Validate(self)

    def GetIgnoreHydrogens(self) -> "bool":
        r"""GetIgnoreHydrogens(OEConfRMSDOptions self) -> bool"""
        return _oechem.OEConfRMSDOptions_GetIgnoreHydrogens(self)

    def SetIgnoreHydrogens(self, value: "bool const") -> "bool":
        r"""SetIgnoreHydrogens(OEConfRMSDOptions self, bool const value) -> bool"""
        return _oechem.OEConfRMSDOptions_SetIgnoreHydrogens(self, value)

    def GetIgnoreTerminalHeavy(self) -> "bool":
        r"""GetIgnoreTerminalHeavy(OEConfRMSDOptions self) -> bool"""
        return _oechem.OEConfRMSDOptions_GetIgnoreTerminalHeavy(self)

    def SetIgnoreTerminalHeavy(self, value: "bool const") -> "bool":
        r"""SetIgnoreTerminalHeavy(OEConfRMSDOptions self, bool const value) -> bool"""
        return _oechem.OEConfRMSDOptions_SetIgnoreTerminalHeavy(self, value)

    def GetMaxMatches(self) -> "unsigned int":
        r"""GetMaxMatches(OEConfRMSDOptions self) -> unsigned int"""
        return _oechem.OEConfRMSDOptions_GetMaxMatches(self)

    def SetMaxMatches(self, value: "unsigned int const") -> "bool":
        r"""SetMaxMatches(OEConfRMSDOptions self, unsigned int const value) -> bool"""
        return _oechem.OEConfRMSDOptions_SetMaxMatches(self, value)

    def CreateCopy(self) -> "OEChem::OEConfRMSDOptions *":
        r"""CreateCopy(OEConfRMSDOptions self) -> OEConfRMSDOptions"""
        return _oechem.OEConfRMSDOptions_CreateCopy(self)

# Register OEConfRMSDOptions in _oechem:
_oechem.OEConfRMSDOptions_swigregister(OEConfRMSDOptions)

class OEConfRMSD(object):
    r"""Proxy of C++ OEChem::OEConfRMSD 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__(OEConfRMSD self, OEMolBase mol, OEConfRMSDOptions opts=OEChem::OEConfRMSDOptions()) -> OEConfRMSD"""
        _oechem.OEConfRMSD_swiginit(self, _oechem.new_OEConfRMSD(*args))
    __swig_destroy__ = _oechem.delete_OEConfRMSD

    def IsValid(self) -> "bool":
        r"""IsValid(OEConfRMSD self) -> bool"""
        return _oechem.OEConfRMSD_IsValid(self)

    def GetOptions(self) -> "OEChem::OEConfRMSDOptions":
        r"""GetOptions(OEConfRMSD self) -> OEConfRMSDOptions"""
        return _oechem.OEConfRMSD_GetOptions(self)

    def NumAutomorphs(self) -> "unsigned int":
        r"""NumAutomorphs(OEConfRMSD self) -> unsigned int"""
        return _oechem.OEConfRMSD_NumAutomorphs(self)

    def CalculateRMSD(self, *args) -> "double":
        r"""
        CalculateRMSD(OEConfRMSD self, OEConfBase refconf, OEConfBase fitconf) -> double
        CalculateRMSD(OEConfRMSD self, double const * refcoords, double const * fitcoords) -> double
        """
        return _oechem.OEConfRMSD_CalculateRMSD(self, *args)

    def MinimizeRMSD(self, *args) -> "double":
        r"""
        MinimizeRMSD(OEConfRMSD self, OEConfBase refconf, OEConfBase fitconf, OETrans trans) -> double
        MinimizeRMSD(OEConfRMSD self, double const * refcoords, double const * fitcoords, OETrans trans) -> double
        """
        return _oechem.OEConfRMSD_MinimizeRMSD(self, *args)

# Register OEConfRMSD in _oechem:
_oechem.OEConfRMSD_swigregister(OEConfRMSD)


def OEOverlayConfsByRMSD(mol: "OEMCMolBase", maxTermHeavyAtoms: "unsigned int const"=25) -> "bool":
    r"""OEOverlayConfsByRMSD(OEMCMolBase mol, unsigned int const maxTermHeavyAtoms=25) -> bool"""
    return _oechem.OEOverlayConfsByRMSD(mol, maxTermHeavyAtoms)

def GetArgVFromPythonSequence(argv: "std::vector< char *,std::allocator< char * > > &", input: "PyObject *") -> "bool":
    r"""GetArgVFromPythonSequence(std::vector< char *,std::allocator< char * > > & argv, PyObject * input) -> bool"""
    return _oechem.GetArgVFromPythonSequence(argv, input)
class OEInterface(object):
    r"""Proxy of C++ OESystem::OEInterface class."""

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

    @staticmethod
    def Factory() -> "OESimpleFactory< std::string,OESystem::OEParameter > &":
        r"""Factory() -> OESimpleFactory< std::string,OESystem::OEParameter > &"""
        return _oechem.OEInterface_Factory()

    def SetOrderPriority(self, priority: "int") -> "bool":
        r"""SetOrderPriority(OEInterface self, int priority) -> bool"""
        return _oechem.OEInterface_SetOrderPriority(self, priority)

    def SetName(self, name: "std::string") -> "bool":
        r"""SetName(OEInterface self, std::string name) -> bool"""
        return _oechem.OEInterface_SetName(self, name)

    def SetBrief(self, brief: "std::string") -> "bool":
        r"""SetBrief(OEInterface self, std::string brief) -> bool"""
        return _oechem.OEInterface_SetBrief(self, brief)

    def AddDetail(self, detail: "std::string const &") -> "bool":
        r"""AddDetail(OEInterface self, std::string const & detail) -> bool"""
        return _oechem.OEInterface_AddDetail(self, detail)

    def GetOrderPriority(self) -> "int":
        r"""GetOrderPriority(OEInterface self) -> int"""
        return _oechem.OEInterface_GetOrderPriority(self)

    def GetName(self) -> "std::string":
        r"""GetName(OEInterface self) -> std::string"""
        return _oechem.OEInterface_GetName(self)

    def GetBrief(self) -> "std::string":
        r"""GetBrief(OEInterface self) -> std::string"""
        return _oechem.OEInterface_GetBrief(self)

    def GetDetail(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetDetail(OEInterface self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEInterface_GetDetail(self)

    def AddParameter(self, *args) -> "OESystem::OEParameter *":
        r"""
        AddParameter(OEInterface self, std::string classid) -> OEParameter
        AddParameter(OEInterface self, OEParameter param) -> OEParameter
        """
        return _oechem.OEInterface_AddParameter(self, *args)

    def DeleteParameter(self, param: "OEParameter") -> "bool":
        r"""DeleteParameter(OEInterface self, OEParameter param) -> bool"""
        return _oechem.OEInterface_DeleteParameter(self, param)

    def GetParameter(self, *args) -> "OESystem::OEParameter const *":
        r"""
        GetParameter(OEInterface self, std::string name) -> OEParameter
        GetParameter(OEInterface self, std::string name) -> OEParameter
        """
        return _oechem.OEInterface_GetParameter(self, *args)

    def GetParameters(self, *args) -> "OESystem::OEIterBase< OESystem::OEParameter const > *":
        r"""
        GetParameters(OEInterface self, bool recursive=True) -> OESystem::OEIterBase< OESystem::OEParameter >
        GetParameters(OEInterface self, bool recursive=True) -> OESystem::OEIterBase< OESystem::OEParameter const >
        """
        return _oechem.OEInterface_GetParameters(self, *args)

    def AddInterface(self) -> "OESystem::OEInterface *":
        r"""AddInterface(OEInterface self) -> OEInterface"""
        return _oechem.OEInterface_AddInterface(self)

    def DeleteInterface(self, itf: "OEInterface") -> "bool":
        r"""DeleteInterface(OEInterface self, OEInterface itf) -> bool"""
        return _oechem.OEInterface_DeleteInterface(self, itf)

    def GetInterface(self, *args) -> "OESystem::OEInterface const *":
        r"""
        GetInterface(OEInterface self, std::string name) -> OEInterface
        GetInterface(OEInterface self, std::string name) -> OEInterface
        """
        return _oechem.OEInterface_GetInterface(self, *args)

    def GetInterfaces(self, *args) -> "OESystem::OEIterBase< OESystem::OEInterface const > *":
        r"""
        GetInterfaces(OEInterface self, bool recursive=False) -> OESystem::OEIterBase< OESystem::OEInterface >
        GetInterfaces(OEInterface self, bool recursive=False) -> OESystem::OEIterBase< OESystem::OEInterface const >
        """
        return _oechem.OEInterface_GetInterfaces(self, *args)

    def Parent(self, *args) -> "OESystem::OEInterface *":
        r"""
        Parent(OEInterface self) -> OEInterface
        Parent(OEInterface self) -> OEInterface
        """
        return _oechem.OEInterface_Parent(self, *args)

    def Clear(self) -> "bool":
        r"""Clear(OEInterface self) -> bool"""
        return _oechem.OEInterface_Clear(self)
    __swig_destroy__ = _oechem.delete_OEInterface

    def __init__(self, *args):
        r"""
        __init__(OEInterface self) -> OEInterface
        __init__(OEInterface self, OEInterface arg2) -> OEInterface
        __init__(OEInterface self, char const * dataptr, int argc, char ** argv) -> OEInterface
        __init__(OEInterface self, char const * dataptr) -> OEInterface
        __init__(OEInterface self, char const * dataptr, PyObject * input) -> OEInterface
        """
        _oechem.OEInterface_swiginit(self, _oechem.new_OEInterface(*args))

    def HasBool(self, name: "char const *", ilist: "unsigned int"=0) -> "bool":
        r"""HasBool(OEInterface self, char const * name, unsigned int ilist=0) -> bool"""
        return _oechem.OEInterface_HasBool(self, name, ilist)

    def GetBool(self, name: "char const *", ilist: "unsigned int"=0) -> "bool":
        r"""GetBool(OEInterface self, char const * name, unsigned int ilist=0) -> bool"""
        return _oechem.OEInterface_GetBool(self, name, ilist)

    def GetBoolList(self, name: "char const *") -> "OESystem::OEIterBase< bool const > *":
        r"""GetBoolList(OEInterface self, char const * name) -> OESystem::OEIterBase< bool const > *"""
        return _oechem.OEInterface_GetBoolList(self, name)

    def HasInt(self, name: "std::string", ilist: "unsigned int"=0) -> "bool":
        r"""HasInt(OEInterface self, std::string name, unsigned int ilist=0) -> bool"""
        return _oechem.OEInterface_HasInt(self, name, ilist)

    def GetInt(self, name: "std::string", ilist: "unsigned int"=0) -> "int":
        r"""GetInt(OEInterface self, std::string name, unsigned int ilist=0) -> int"""
        return _oechem.OEInterface_GetInt(self, name, ilist)

    def GetIntList(self, name: "std::string") -> "OESystem::OEIterBase< int const > *":
        r"""GetIntList(OEInterface self, std::string name) -> OESystem::OEIterBase< int const > *"""
        return _oechem.OEInterface_GetIntList(self, name)

    def HasUnsignedInt(self, name: "std::string", ilist: "unsigned int"=0) -> "bool":
        r"""HasUnsignedInt(OEInterface self, std::string name, unsigned int ilist=0) -> bool"""
        return _oechem.OEInterface_HasUnsignedInt(self, name, ilist)

    def GetUnsignedInt(self, name: "std::string", ilist: "unsigned int"=0) -> "int":
        r"""GetUnsignedInt(OEInterface self, std::string name, unsigned int ilist=0) -> int"""
        return _oechem.OEInterface_GetUnsignedInt(self, name, ilist)

    def HasFloat(self, name: "std::string", ilist: "unsigned int"=0) -> "bool":
        r"""HasFloat(OEInterface self, std::string name, unsigned int ilist=0) -> bool"""
        return _oechem.OEInterface_HasFloat(self, name, ilist)

    def GetFloat(self, name: "std::string", ilist: "unsigned int"=0) -> "float":
        r"""GetFloat(OEInterface self, std::string name, unsigned int ilist=0) -> float"""
        return _oechem.OEInterface_GetFloat(self, name, ilist)

    def GetFloatList(self, name: "std::string") -> "OESystem::OEIterBase< float const > *":
        r"""GetFloatList(OEInterface self, std::string name) -> OESystem::OEIterBase< float const > *"""
        return _oechem.OEInterface_GetFloatList(self, name)

    def HasDouble(self, name: "std::string", ilist: "unsigned int"=0) -> "bool":
        r"""HasDouble(OEInterface self, std::string name, unsigned int ilist=0) -> bool"""
        return _oechem.OEInterface_HasDouble(self, name, ilist)

    def GetDouble(self, name: "std::string", ilist: "unsigned int"=0) -> "double":
        r"""GetDouble(OEInterface self, std::string name, unsigned int ilist=0) -> double"""
        return _oechem.OEInterface_GetDouble(self, name, ilist)

    def GetDoubleList(self, name: "std::string") -> "OESystem::OEIterBase< double const > *":
        r"""GetDoubleList(OEInterface self, std::string name) -> OESystem::OEIterBase< double const > *"""
        return _oechem.OEInterface_GetDoubleList(self, name)

    def HasString(self, name: "std::string", ilist: "unsigned int"=0) -> "bool":
        r"""HasString(OEInterface self, std::string name, unsigned int ilist=0) -> bool"""
        return _oechem.OEInterface_HasString(self, name, ilist)

    def GetString(self, name: "std::string", ilist: "unsigned int"=0) -> "std::string":
        r"""GetString(OEInterface self, std::string name, unsigned int ilist=0) -> std::string"""
        return _oechem.OEInterface_GetString(self, name, ilist)

    def GetStringList(self, name: "std::string") -> "OESystem::OEIterBase< std::string const > *":
        r"""GetStringList(OEInterface self, std::string name) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEInterface_GetStringList(self, name)

    def HasOEMol(self, name: "std::string", ilist: "unsigned int"=0) -> "bool":
        r"""HasOEMol(OEInterface self, std::string name, unsigned int ilist=0) -> bool"""
        return _oechem.OEInterface_HasOEMol(self, name, ilist)

    def GetOEMol(self, name: "std::string", ilist: "unsigned int"=0) -> "OEMolWrapper *":
        r"""GetOEMol(OEInterface self, std::string name, unsigned int ilist=0) -> OEMol"""
        return _oechem.OEInterface_GetOEMol(self, name, ilist)

    def HasOEGraphMol(self, name: "std::string", ilist: "unsigned int") -> "bool":
        r"""HasOEGraphMol(OEInterface self, std::string name, unsigned int ilist) -> bool"""
        return _oechem.OEInterface_HasOEGraphMol(self, name, ilist)

    def GetOEGraphMol(self, name: "std::string", ilist: "unsigned int"=0) -> "OEGraphMolWrapper *":
        r"""GetOEGraphMol(OEInterface self, std::string name, unsigned int ilist=0) -> OEGraphMol"""
        return _oechem.OEInterface_GetOEGraphMol(self, name, ilist)

# Register OEInterface in _oechem:
_oechem.OEInterface_swigregister(OEInterface)

def OEInterface_Factory() -> "OESimpleFactory< std::string,OESystem::OEParameter > &":
    r"""OEInterface_Factory() -> OESimpleFactory< std::string,OESystem::OEParameter > &"""
    return _oechem.OEInterface_Factory()


def OEParseCommandLineLW(*args) -> "bool":
    r"""
    OEParseCommandLineLW(OEInterface itf, int argc, char ** argv, unsigned char const * requirements=None, unsigned int error_level=) -> bool
    OEParseCommandLineLW(OEInterface itf, char const * version, int argc, char ** argv, unsigned char const * requirements=None, unsigned int error_level=) -> bool
    """
    return _oechem.OEParseCommandLineLW(*args)

def OEWriteHtml(itf: "OEInterface", ostr: "oeostream", program_name: "std::string", program_version: "std::string") -> "bool":
    r"""OEWriteHtml(OEInterface itf, oeostream ostr, std::string program_name, std::string program_version) -> bool"""
    return _oechem.OEWriteHtml(itf, ostr, program_name, program_version)

def OEWriteSettings(*args) -> "bool":
    r"""OEWriteSettings(OEInterface itf, oeostream ostr=oeout, bool include_default=True, std::string mode="") -> bool"""
    return _oechem.OEWriteSettings(*args)

def OEParseParameterFile(*args) -> "bool":
    r"""OEParseParameterFile(OEInterface itf, oeistream istr, bool over_ride=True, unsigned int error_level=) -> bool"""
    return _oechem.OEParseParameterFile(*args)

def OEWriteInterfaceConfigurationFile(itf: "OEInterface", ostr: "oeostream") -> "bool":
    r"""OEWriteInterfaceConfigurationFile(OEInterface itf, oeostream ostr) -> bool"""
    return _oechem.OEWriteInterfaceConfigurationFile(itf, ostr)

def OEWriteJSON(itf: "OEInterface", ostr: "oeostream") -> "bool":
    r"""OEWriteJSON(OEInterface itf, oeostream ostr) -> bool"""
    return _oechem.OEWriteJSON(itf, ostr)

def OEConfigure(*args) -> "bool":
    r"""
    OEConfigure(OEInterface itf, oeistream istr) -> bool
    OEConfigure(OEInterface itf, char const * itfdata) -> bool
    """
    return _oechem.OEConfigure(*args)

def OECheckHelp(*args) -> "PyObject *":
    r"""OECheckHelp(OEInterface itf, PyObject * input, bool help_for_no_args=True, oeostream ostr=oeerr) -> PyObject"""
    return _oechem.OECheckHelp(*args)

def OEParseCommandLine(*args) -> "PyObject *":
    r"""
    OEParseCommandLine(OEInterface itf, int argc, char ** argv, unsigned char const * requirements=None, unsigned int error_level=, bool checkhelp=True) -> bool
    OEParseCommandLine(OEInterface itf, char const * version, int argc, char ** argv, unsigned char const * requirements=None, unsigned int error_level=, bool checkhelp=True) -> bool
    OEParseCommandLine(OEInterface itf, PyObject * input, char const * requirements=None, unsigned int error_level=) -> PyObject
    """
    return _oechem.OEParseCommandLine(*args)

def OEConfigureFromFile(itf: "OEInterface", filename: "std::string const &") -> "bool":
    r"""OEConfigureFromFile(OEInterface itf, std::string const & filename) -> bool"""
    return _oechem.OEConfigureFromFile(itf, filename)

def OEConfigureOpts(*args) -> "PyObject *":
    r"""
    OEConfigureOpts(OEOptions opts, int argc, char ** argv, bool const writeSettings=True) -> unsigned int
    OEConfigureOpts(OEOptions opts, PyObject * input, bool const writeSettings=True) -> PyObject
    """
    return _oechem.OEConfigureOpts(*args)
class OEInteractionHintComponentTypeBase(object):
    r"""Proxy of C++ OEBio::OEInteractionHintComponentTypeBase 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__ = _oechem.delete_OEInteractionHintComponentTypeBase

    def CreateCopy(self) -> "OEBio::OEInteractionHintComponentTypeBase *":
        r"""CreateCopy(OEInteractionHintComponentTypeBase self) -> OEInteractionHintComponentTypeBase"""
        return _oechem.OEInteractionHintComponentTypeBase_CreateCopy(self)

    def GetName(self) -> "std::string":
        r"""GetName(OEInteractionHintComponentTypeBase self) -> std::string"""
        return _oechem.OEInteractionHintComponentTypeBase_GetName(self)

    def __eq__(self, arg2: "OEInteractionHintComponentTypeBase") -> "bool":
        r"""__eq__(OEInteractionHintComponentTypeBase self, OEInteractionHintComponentTypeBase arg2) -> bool"""
        return _oechem.OEInteractionHintComponentTypeBase___eq__(self, arg2)

    def __ne__(self, arg2: "OEInteractionHintComponentTypeBase") -> "bool":
        r"""__ne__(OEInteractionHintComponentTypeBase self, OEInteractionHintComponentTypeBase arg2) -> bool"""
        return _oechem.OEInteractionHintComponentTypeBase___ne__(self, arg2)

    def IsValid(self, arg2: "OEMolBase") -> "bool":
        r"""IsValid(OEInteractionHintComponentTypeBase self, OEMolBase arg2) -> bool"""
        return _oechem.OEInteractionHintComponentTypeBase_IsValid(self, arg2)

    def GetImpl(self) -> "OEBio::OEInteractionHintComponentTypeBaseImpl const *":
        r"""GetImpl(OEInteractionHintComponentTypeBase self) -> OEBio::OEInteractionHintComponentTypeBaseImpl const *"""
        return _oechem.OEInteractionHintComponentTypeBase_GetImpl(self)

# Register OEInteractionHintComponentTypeBase in _oechem:
_oechem.OEInteractionHintComponentTypeBase_swigregister(OEInteractionHintComponentTypeBase)

class OEProteinInteractionHintComponent(OEInteractionHintComponentTypeBase):
    r"""Proxy of C++ OEBio::OEProteinInteractionHintComponent 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__(OEProteinInteractionHintComponent self) -> OEProteinInteractionHintComponent
        __init__(OEProteinInteractionHintComponent self, OEProteinInteractionHintComponent arg2) -> OEProteinInteractionHintComponent
        """
        _oechem.OEProteinInteractionHintComponent_swiginit(self, _oechem.new_OEProteinInteractionHintComponent(*args))
    __swig_destroy__ = _oechem.delete_OEProteinInteractionHintComponent

    def CreateCopy(self) -> "OEBio::OEInteractionHintComponentTypeBase *":
        r"""CreateCopy(OEProteinInteractionHintComponent self) -> OEInteractionHintComponentTypeBase"""
        return _oechem.OEProteinInteractionHintComponent_CreateCopy(self)

    def IsValid(self, arg2: "OEMolBase") -> "bool":
        r"""IsValid(OEProteinInteractionHintComponent self, OEMolBase arg2) -> bool"""
        return _oechem.OEProteinInteractionHintComponent_IsValid(self, arg2)

# Register OEProteinInteractionHintComponent in _oechem:
_oechem.OEProteinInteractionHintComponent_swigregister(OEProteinInteractionHintComponent)

class OELigandInteractionHintComponent(OEInteractionHintComponentTypeBase):
    r"""Proxy of C++ OEBio::OELigandInteractionHintComponent 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__(OELigandInteractionHintComponent self) -> OELigandInteractionHintComponent
        __init__(OELigandInteractionHintComponent self, OELigandInteractionHintComponent arg2) -> OELigandInteractionHintComponent
        """
        _oechem.OELigandInteractionHintComponent_swiginit(self, _oechem.new_OELigandInteractionHintComponent(*args))
    __swig_destroy__ = _oechem.delete_OELigandInteractionHintComponent

    def CreateCopy(self) -> "OEBio::OEInteractionHintComponentTypeBase *":
        r"""CreateCopy(OELigandInteractionHintComponent self) -> OEInteractionHintComponentTypeBase"""
        return _oechem.OELigandInteractionHintComponent_CreateCopy(self)

    def IsValid(self, arg2: "OEMolBase") -> "bool":
        r"""IsValid(OELigandInteractionHintComponent self, OEMolBase arg2) -> bool"""
        return _oechem.OELigandInteractionHintComponent_IsValid(self, arg2)

    def GetMaxHeavyAtom(self) -> "unsigned int":
        r"""GetMaxHeavyAtom(OELigandInteractionHintComponent self) -> unsigned int"""
        return _oechem.OELigandInteractionHintComponent_GetMaxHeavyAtom(self)

    def SetMaxHeavyAtom(self, maxhvy: "unsigned int") -> "void":
        r"""SetMaxHeavyAtom(OELigandInteractionHintComponent self, unsigned int maxhvy)"""
        return _oechem.OELigandInteractionHintComponent_SetMaxHeavyAtom(self, maxhvy)

# Register OELigandInteractionHintComponent in _oechem:
_oechem.OELigandInteractionHintComponent_swigregister(OELigandInteractionHintComponent)

class OEInteractionHintFragment(OEBase):
    r"""Proxy of C++ OEBio::OEInteractionHintFragment 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, rhs: "OEInteractionHintFragment"):
        r"""__init__(OEInteractionHintFragment self, OEInteractionHintFragment rhs) -> OEInteractionHintFragment"""
        _oechem.OEInteractionHintFragment_swiginit(self, _oechem.new_OEInteractionHintFragment(rhs))
    __swig_destroy__ = _oechem.delete_OEInteractionHintFragment

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEInteractionHintFragment self) -> OEBase"""
        return _oechem.OEInteractionHintFragment_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEInteractionHintFragment self) -> void const *"""
        return _oechem.OEInteractionHintFragment_GetDataType(self)

    def IsDataType(self, arg2: "void const *") -> "bool":
        r"""IsDataType(OEInteractionHintFragment self, void const * arg2) -> bool"""
        return _oechem.OEInteractionHintFragment_IsDataType(self, arg2)

    def AddAtom(self, arg2: "OEAtomBase") -> "bool":
        r"""AddAtom(OEInteractionHintFragment self, OEAtomBase arg2) -> bool"""
        return _oechem.OEInteractionHintFragment_AddAtom(self, arg2)

    def HasAtom(self, arg2: "OEAtomBase") -> "bool":
        r"""HasAtom(OEInteractionHintFragment self, OEAtomBase arg2) -> bool"""
        return _oechem.OEInteractionHintFragment_HasAtom(self, arg2)

    def GetAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase const > *":
        r"""
        GetAtoms(OEInteractionHintFragment self) -> OESystem::OEIterBase< OEChem::OEAtomBase const >
        GetAtoms(OEInteractionHintFragment self, OEUnaryAtomPred arg2) -> OESystem::OEIterBase< OEChem::OEAtomBase const > *
        """
        return _oechem.OEInteractionHintFragment_GetAtoms(self, *args)

    def GetAtom(self, arg2: "OEUnaryAtomPred") -> "OEChem::OEAtomBase const *":
        r"""GetAtom(OEInteractionHintFragment self, OEUnaryAtomPred arg2) -> OEAtomBase"""
        return _oechem.OEInteractionHintFragment_GetAtom(self, arg2)

    def NumAtoms(self) -> "unsigned int":
        r"""NumAtoms(OEInteractionHintFragment self) -> unsigned int"""
        return _oechem.OEInteractionHintFragment_NumAtoms(self)

    def GetComponentType(self) -> "OEBio::OEInteractionHintComponentTypeBase const &":
        r"""GetComponentType(OEInteractionHintFragment self) -> OEInteractionHintComponentTypeBase"""
        return _oechem.OEInteractionHintFragment_GetComponentType(self)

# Register OEInteractionHintFragment in _oechem:
_oechem.OEInteractionHintFragment_swigregister(OEInteractionHintFragment)


def OEGetCalculatedInteractionGeometries(itype: "OEInteractionHintTypeBase") -> "OESystem::OEIterBase< std::string const > *":
    r"""OEGetCalculatedInteractionGeometries(OEInteractionHintTypeBase itype) -> OESystem::OEIterBase< std::string const > *"""
    return _oechem.OEGetCalculatedInteractionGeometries(itype)
class OEConstAtomIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEChem::OEAtomBase 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__(OEConstAtomIter self) -> OEConstAtomIter
        __init__(OEConstAtomIter self, OEConstAtomIter rhs) -> OEConstAtomIter
        __init__(OEConstAtomIter self, OESystem::OEIterBase< OEChem::OEAtomBase const > * rhs) -> OEConstAtomIter
        __init__(OEConstAtomIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEAtomBase const >::NonConstA > * rhs) -> OEConstAtomIter
        """
        _oechem.OEConstAtomIter_swiginit(self, _oechem.new_OEConstAtomIter(*args))
    __swig_destroy__ = _oechem.delete_OEConstAtomIter

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEAtomBase const > *":
        r"""Copy(OEConstAtomIter self) -> OESystem::OEIterBase< OEChem::OEAtomBase const > *"""
        return _oechem.OEConstAtomIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEConstAtomIter self, OESystem::OEIterBase< OEChem::OEAtomBase const > * ib)
        Push(OEConstAtomIter self, OEConstAtomIter iter)
        """
        return _oechem.OEConstAtomIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEChem::OEAtomBase const,OEChem::OEAtomBase const > const &") -> "void":
        r"""Sort(OEConstAtomIter self, OESystem::OEBinaryPredicate< OEChem::OEAtomBase const,OEChem::OEAtomBase const > const & sort_criterion)"""
        return _oechem.OEConstAtomIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEAtomBase const > &":
        r"""ToFirst(OEConstAtomIter self) -> OEConstAtomIter"""
        return _oechem.OEConstAtomIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEChem::OEAtomBase const > &":
        r"""ToLast(OEConstAtomIter self) -> OEConstAtomIter"""
        return _oechem.OEConstAtomIter_ToLast(self)

    def __ref__(self) -> "OEChem::OEAtomBase const &":
        r"""__ref__(OEConstAtomIter self) -> OEAtomBase"""
        return _oechem.OEConstAtomIter___ref__(self)

    def IsValid(self):
      return _oechem.OEConstAtomIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEConstAtomIter self) -> PyObject *"""
        return _oechem.OEConstAtomIter_next(self)

    def Target(self) -> "OEChem::OEAtomBase const &":
        r"""Target(OEConstAtomIter self) -> OEAtomBase"""
        return _oechem.OEConstAtomIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEAtomBase const > &":
        r"""
        Next(OEConstAtomIter self) -> OEConstAtomIter
        Next(OEConstAtomIter self, int i) -> OEConstAtomIter
        """
        return _oechem.OEConstAtomIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEAtomBase const > &":
        r"""
        Prev(OEConstAtomIter self) -> OEConstAtomIter
        Prev(OEConstAtomIter self, int i) -> OEConstAtomIter
        """
        return _oechem.OEConstAtomIter_Prev(self, *args)

# Register OEConstAtomIter in _oechem:
_oechem.OEConstAtomIter_swigregister(OEConstAtomIter)

class OEInteractionHintTypeBase(object):
    r"""Proxy of C++ OEBio::OEInteractionHintTypeBase 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__ = _oechem.delete_OEInteractionHintTypeBase

    def CreateCopy(self) -> "OEBio::OEInteractionHintTypeBase *":
        r"""CreateCopy(OEInteractionHintTypeBase self) -> OEInteractionHintTypeBase"""
        return _oechem.OEInteractionHintTypeBase_CreateCopy(self)

    def GetName(self) -> "std::string":
        r"""GetName(OEInteractionHintTypeBase self) -> std::string"""
        return _oechem.OEInteractionHintTypeBase_GetName(self)

    def IsValid(self, *args) -> "bool":
        r"""
        IsValid(OEInteractionHintTypeBase self, OEInteractionHintFragment arg2, OEInteractionHintFragment arg3) -> bool
        IsValid(OEInteractionHintTypeBase self, OEInteractionHint arg2) -> bool
        """
        return _oechem.OEInteractionHintTypeBase_IsValid(self, *args)

    def __eq__(self, arg2: "OEInteractionHintTypeBase") -> "bool":
        r"""__eq__(OEInteractionHintTypeBase self, OEInteractionHintTypeBase arg2) -> bool"""
        return _oechem.OEInteractionHintTypeBase___eq__(self, arg2)

    def __ne__(self, arg2: "OEInteractionHintTypeBase") -> "bool":
        r"""__ne__(OEInteractionHintTypeBase self, OEInteractionHintTypeBase arg2) -> bool"""
        return _oechem.OEInteractionHintTypeBase___ne__(self, arg2)

# Register OEInteractionHintTypeBase in _oechem:
_oechem.OEInteractionHintTypeBase_swigregister(OEInteractionHintTypeBase)


def OEGetActiveSiteInteractionHintTypes() -> "OESystem::OEIterBase< OEBio::OEInteractionHintTypeBase const > *":
    r"""OEGetActiveSiteInteractionHintTypes() -> OESystem::OEIterBase< OEBio::OEInteractionHintTypeBase const > *"""
    return _oechem.OEGetActiveSiteInteractionHintTypes()
class OEContactInteractionHint(OEInteractionHintTypeBase):
    r"""Proxy of C++ OEBio::OEContactInteractionHint 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__(OEContactInteractionHint self) -> OEContactInteractionHint
        __init__(OEContactInteractionHint self, OEContactInteractionHint rhs) -> OEContactInteractionHint
        """
        _oechem.OEContactInteractionHint_swiginit(self, _oechem.new_OEContactInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEContactInteractionHint

    def CreateCopy(self) -> "OEBio::OEInteractionHintTypeBase *":
        r"""CreateCopy(OEContactInteractionHint self) -> OEInteractionHintTypeBase"""
        return _oechem.OEContactInteractionHint_CreateCopy(self)

    def IsValid(self, arg2: "OEInteractionHintFragment", arg3: "OEInteractionHintFragment") -> "bool":
        r"""IsValid(OEContactInteractionHint self, OEInteractionHintFragment arg2, OEInteractionHintFragment arg3) -> bool"""
        return _oechem.OEContactInteractionHint_IsValid(self, arg2, arg3)

# Register OEContactInteractionHint in _oechem:
_oechem.OEContactInteractionHint_swigregister(OEContactInteractionHint)

class OEHBondInteractionHint(OEInteractionHintTypeBase):
    r"""Proxy of C++ OEBio::OEHBondInteractionHint 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__(OEHBondInteractionHint self, unsigned int type, bool charged=False) -> OEHBondInteractionHint
        __init__(OEHBondInteractionHint self, OEHBondInteractionHint rhs) -> OEHBondInteractionHint
        """
        _oechem.OEHBondInteractionHint_swiginit(self, _oechem.new_OEHBondInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEHBondInteractionHint

    def CreateCopy(self) -> "OEBio::OEInteractionHintTypeBase *":
        r"""CreateCopy(OEHBondInteractionHint self) -> OEInteractionHintTypeBase"""
        return _oechem.OEHBondInteractionHint_CreateCopy(self)

    def IsValid(self, arg2: "OEInteractionHintFragment", arg3: "OEInteractionHintFragment") -> "bool":
        r"""IsValid(OEHBondInteractionHint self, OEInteractionHintFragment arg2, OEInteractionHintFragment arg3) -> bool"""
        return _oechem.OEHBondInteractionHint_IsValid(self, arg2, arg3)

    def IsCharged(self) -> "bool":
        r"""IsCharged(OEHBondInteractionHint self) -> bool"""
        return _oechem.OEHBondInteractionHint_IsCharged(self)

    def GetHBondType(self) -> "unsigned int":
        r"""GetHBondType(OEHBondInteractionHint self) -> unsigned int"""
        return _oechem.OEHBondInteractionHint_GetHBondType(self)

# Register OEHBondInteractionHint in _oechem:
_oechem.OEHBondInteractionHint_swigregister(OEHBondInteractionHint)

class OEChelatorInteractionHint(OEInteractionHintTypeBase):
    r"""Proxy of C++ OEBio::OEChelatorInteractionHint 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__(OEChelatorInteractionHint self, unsigned int type) -> OEChelatorInteractionHint
        __init__(OEChelatorInteractionHint self, OEChelatorInteractionHint rhs) -> OEChelatorInteractionHint
        """
        _oechem.OEChelatorInteractionHint_swiginit(self, _oechem.new_OEChelatorInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEChelatorInteractionHint

    def CreateCopy(self) -> "OEBio::OEInteractionHintTypeBase *":
        r"""CreateCopy(OEChelatorInteractionHint self) -> OEInteractionHintTypeBase"""
        return _oechem.OEChelatorInteractionHint_CreateCopy(self)

    def IsValid(self, arg2: "OEInteractionHintFragment", arg3: "OEInteractionHintFragment") -> "bool":
        r"""IsValid(OEChelatorInteractionHint self, OEInteractionHintFragment arg2, OEInteractionHintFragment arg3) -> bool"""
        return _oechem.OEChelatorInteractionHint_IsValid(self, arg2, arg3)

    def GetChelatorType(self) -> "unsigned int":
        r"""GetChelatorType(OEChelatorInteractionHint self) -> unsigned int"""
        return _oechem.OEChelatorInteractionHint_GetChelatorType(self)

# Register OEChelatorInteractionHint in _oechem:
_oechem.OEChelatorInteractionHint_swigregister(OEChelatorInteractionHint)

class OECovalentInteractionHint(OEInteractionHintTypeBase):
    r"""Proxy of C++ OEBio::OECovalentInteractionHint 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__(OECovalentInteractionHint self) -> OECovalentInteractionHint
        __init__(OECovalentInteractionHint self, OECovalentInteractionHint rhs) -> OECovalentInteractionHint
        """
        _oechem.OECovalentInteractionHint_swiginit(self, _oechem.new_OECovalentInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OECovalentInteractionHint

    def CreateCopy(self) -> "OEBio::OEInteractionHintTypeBase *":
        r"""CreateCopy(OECovalentInteractionHint self) -> OEInteractionHintTypeBase"""
        return _oechem.OECovalentInteractionHint_CreateCopy(self)

    def IsValid(self, arg2: "OEInteractionHintFragment", arg3: "OEInteractionHintFragment") -> "bool":
        r"""IsValid(OECovalentInteractionHint self, OEInteractionHintFragment arg2, OEInteractionHintFragment arg3) -> bool"""
        return _oechem.OECovalentInteractionHint_IsValid(self, arg2, arg3)

# Register OECovalentInteractionHint in _oechem:
_oechem.OECovalentInteractionHint_swigregister(OECovalentInteractionHint)

class OEClashInteractionHint(OEInteractionHintTypeBase):
    r"""Proxy of C++ OEBio::OEClashInteractionHint 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__(OEClashInteractionHint self) -> OEClashInteractionHint
        __init__(OEClashInteractionHint self, OEClashInteractionHint rhs) -> OEClashInteractionHint
        """
        _oechem.OEClashInteractionHint_swiginit(self, _oechem.new_OEClashInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEClashInteractionHint

    def CreateCopy(self) -> "OEBio::OEInteractionHintTypeBase *":
        r"""CreateCopy(OEClashInteractionHint self) -> OEInteractionHintTypeBase"""
        return _oechem.OEClashInteractionHint_CreateCopy(self)

    def IsValid(self, arg2: "OEInteractionHintFragment", arg3: "OEInteractionHintFragment") -> "bool":
        r"""IsValid(OEClashInteractionHint self, OEInteractionHintFragment arg2, OEInteractionHintFragment arg3) -> bool"""
        return _oechem.OEClashInteractionHint_IsValid(self, arg2, arg3)

# Register OEClashInteractionHint in _oechem:
_oechem.OEClashInteractionHint_swigregister(OEClashInteractionHint)

class OESaltBridgeInteractionHint(OEInteractionHintTypeBase):
    r"""Proxy of C++ OEBio::OESaltBridgeInteractionHint 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__(OESaltBridgeInteractionHint self, unsigned int type) -> OESaltBridgeInteractionHint
        __init__(OESaltBridgeInteractionHint self, OESaltBridgeInteractionHint rhs) -> OESaltBridgeInteractionHint
        """
        _oechem.OESaltBridgeInteractionHint_swiginit(self, _oechem.new_OESaltBridgeInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OESaltBridgeInteractionHint

    def CreateCopy(self) -> "OEBio::OEInteractionHintTypeBase *":
        r"""CreateCopy(OESaltBridgeInteractionHint self) -> OEInteractionHintTypeBase"""
        return _oechem.OESaltBridgeInteractionHint_CreateCopy(self)

    def IsValid(self, arg2: "OEInteractionHintFragment", arg3: "OEInteractionHintFragment") -> "bool":
        r"""IsValid(OESaltBridgeInteractionHint self, OEInteractionHintFragment arg2, OEInteractionHintFragment arg3) -> bool"""
        return _oechem.OESaltBridgeInteractionHint_IsValid(self, arg2, arg3)

    def GetSaltBridgeType(self) -> "unsigned int":
        r"""GetSaltBridgeType(OESaltBridgeInteractionHint self) -> unsigned int"""
        return _oechem.OESaltBridgeInteractionHint_GetSaltBridgeType(self)

# Register OESaltBridgeInteractionHint in _oechem:
_oechem.OESaltBridgeInteractionHint_swigregister(OESaltBridgeInteractionHint)

class OEStackingInteractionHint(OEInteractionHintTypeBase):
    r"""Proxy of C++ OEBio::OEStackingInteractionHint 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__(OEStackingInteractionHint self, unsigned int type) -> OEStackingInteractionHint
        __init__(OEStackingInteractionHint self, OEStackingInteractionHint rhs) -> OEStackingInteractionHint
        """
        _oechem.OEStackingInteractionHint_swiginit(self, _oechem.new_OEStackingInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEStackingInteractionHint

    def CreateCopy(self) -> "OEBio::OEInteractionHintTypeBase *":
        r"""CreateCopy(OEStackingInteractionHint self) -> OEInteractionHintTypeBase"""
        return _oechem.OEStackingInteractionHint_CreateCopy(self)

    def IsValid(self, arg2: "OEInteractionHintFragment", arg3: "OEInteractionHintFragment") -> "bool":
        r"""IsValid(OEStackingInteractionHint self, OEInteractionHintFragment arg2, OEInteractionHintFragment arg3) -> bool"""
        return _oechem.OEStackingInteractionHint_IsValid(self, arg2, arg3)

    def GetStackingType(self) -> "unsigned int":
        r"""GetStackingType(OEStackingInteractionHint self) -> unsigned int"""
        return _oechem.OEStackingInteractionHint_GetStackingType(self)

# Register OEStackingInteractionHint in _oechem:
_oechem.OEStackingInteractionHint_swigregister(OEStackingInteractionHint)

class OECationPiInteractionHint(OEInteractionHintTypeBase):
    r"""Proxy of C++ OEBio::OECationPiInteractionHint 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__(OECationPiInteractionHint self, unsigned int type) -> OECationPiInteractionHint
        __init__(OECationPiInteractionHint self, OECationPiInteractionHint rhs) -> OECationPiInteractionHint
        """
        _oechem.OECationPiInteractionHint_swiginit(self, _oechem.new_OECationPiInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OECationPiInteractionHint

    def CreateCopy(self) -> "OEBio::OEInteractionHintTypeBase *":
        r"""CreateCopy(OECationPiInteractionHint self) -> OEInteractionHintTypeBase"""
        return _oechem.OECationPiInteractionHint_CreateCopy(self)

    def IsValid(self, arg2: "OEInteractionHintFragment", arg3: "OEInteractionHintFragment") -> "bool":
        r"""IsValid(OECationPiInteractionHint self, OEInteractionHintFragment arg2, OEInteractionHintFragment arg3) -> bool"""
        return _oechem.OECationPiInteractionHint_IsValid(self, arg2, arg3)

    def GetCationPiType(self) -> "unsigned int":
        r"""GetCationPiType(OECationPiInteractionHint self) -> unsigned int"""
        return _oechem.OECationPiInteractionHint_GetCationPiType(self)

# Register OECationPiInteractionHint in _oechem:
_oechem.OECationPiInteractionHint_swigregister(OECationPiInteractionHint)

class OEHalogenBondInteractionHint(OEInteractionHintTypeBase):
    r"""Proxy of C++ OEBio::OEHalogenBondInteractionHint 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__(OEHalogenBondInteractionHint self, unsigned int type) -> OEHalogenBondInteractionHint
        __init__(OEHalogenBondInteractionHint self, OEHalogenBondInteractionHint rhs) -> OEHalogenBondInteractionHint
        """
        _oechem.OEHalogenBondInteractionHint_swiginit(self, _oechem.new_OEHalogenBondInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEHalogenBondInteractionHint

    def CreateCopy(self) -> "OEBio::OEInteractionHintTypeBase *":
        r"""CreateCopy(OEHalogenBondInteractionHint self) -> OEInteractionHintTypeBase"""
        return _oechem.OEHalogenBondInteractionHint_CreateCopy(self)

    def IsValid(self, arg2: "OEInteractionHintFragment", arg3: "OEInteractionHintFragment") -> "bool":
        r"""IsValid(OEHalogenBondInteractionHint self, OEInteractionHintFragment arg2, OEInteractionHintFragment arg3) -> bool"""
        return _oechem.OEHalogenBondInteractionHint_IsValid(self, arg2, arg3)

    def GetHalogenBondType(self) -> "unsigned int":
        r"""GetHalogenBondType(OEHalogenBondInteractionHint self) -> unsigned int"""
        return _oechem.OEHalogenBondInteractionHint_GetHalogenBondType(self)

# Register OEHalogenBondInteractionHint in _oechem:
_oechem.OEHalogenBondInteractionHint_swigregister(OEHalogenBondInteractionHint)

class OEInteractionHintTypeBaseIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OEInteractionHintTypeBase 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__(OEInteractionHintTypeBaseIter self) -> OEInteractionHintTypeBaseIter
        __init__(OEInteractionHintTypeBaseIter self, OEInteractionHintTypeBaseIter rhs) -> OEInteractionHintTypeBaseIter
        __init__(OEInteractionHintTypeBaseIter self, OESystem::OEIterBase< OEBio::OEInteractionHintTypeBase const > * rhs) -> OEInteractionHintTypeBaseIter
        __init__(OEInteractionHintTypeBaseIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEInteractionHintTypeBase const >::NonConstA > * rhs) -> OEInteractionHintTypeBaseIter
        """
        _oechem.OEInteractionHintTypeBaseIter_swiginit(self, _oechem.new_OEInteractionHintTypeBaseIter(*args))
    __swig_destroy__ = _oechem.delete_OEInteractionHintTypeBaseIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OEInteractionHintTypeBase const > *":
        r"""Copy(OEInteractionHintTypeBaseIter self) -> OESystem::OEIterBase< OEBio::OEInteractionHintTypeBase const > *"""
        return _oechem.OEInteractionHintTypeBaseIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEInteractionHintTypeBaseIter self, OESystem::OEIterBase< OEBio::OEInteractionHintTypeBase const > * ib)
        Push(OEInteractionHintTypeBaseIter self, OEInteractionHintTypeBaseIter iter)
        """
        return _oechem.OEInteractionHintTypeBaseIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OEInteractionHintTypeBase const,OEBio::OEInteractionHintTypeBase const > const &") -> "void":
        r"""Sort(OEInteractionHintTypeBaseIter self, OESystem::OEBinaryPredicate< OEBio::OEInteractionHintTypeBase const,OEBio::OEInteractionHintTypeBase const > const & sort_criterion)"""
        return _oechem.OEInteractionHintTypeBaseIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OEInteractionHintTypeBase const > &":
        r"""ToFirst(OEInteractionHintTypeBaseIter self) -> OEInteractionHintTypeBaseIter"""
        return _oechem.OEInteractionHintTypeBaseIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OEInteractionHintTypeBase const > &":
        r"""ToLast(OEInteractionHintTypeBaseIter self) -> OEInteractionHintTypeBaseIter"""
        return _oechem.OEInteractionHintTypeBaseIter_ToLast(self)

    def __ref__(self) -> "OEBio::OEInteractionHintTypeBase const &":
        r"""__ref__(OEInteractionHintTypeBaseIter self) -> OEInteractionHintTypeBase"""
        return _oechem.OEInteractionHintTypeBaseIter___ref__(self)

    def IsValid(self):
      return _oechem.OEInteractionHintTypeBaseIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEInteractionHintTypeBaseIter self) -> PyObject *"""
        return _oechem.OEInteractionHintTypeBaseIter_next(self)

    def Target(self) -> "OEBio::OEInteractionHintTypeBase const &":
        r"""Target(OEInteractionHintTypeBaseIter self) -> OEInteractionHintTypeBase"""
        return _oechem.OEInteractionHintTypeBaseIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OEInteractionHintTypeBase const > &":
        r"""
        Next(OEInteractionHintTypeBaseIter self) -> OEInteractionHintTypeBaseIter
        Next(OEInteractionHintTypeBaseIter self, int i) -> OEInteractionHintTypeBaseIter
        """
        return _oechem.OEInteractionHintTypeBaseIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OEInteractionHintTypeBase const > &":
        r"""
        Prev(OEInteractionHintTypeBaseIter self) -> OEInteractionHintTypeBaseIter
        Prev(OEInteractionHintTypeBaseIter self, int i) -> OEInteractionHintTypeBaseIter
        """
        return _oechem.OEInteractionHintTypeBaseIter_Prev(self, *args)

# Register OEInteractionHintTypeBaseIter in _oechem:
_oechem.OEInteractionHintTypeBaseIter_swigregister(OEInteractionHintTypeBaseIter)

class OEUnaryInteractionHintBoolFunc(object):
    r"""Proxy of C++ OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool > class."""

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

    def __call__(self, arg0: "OEInteractionHint") -> "bool":
        r"""__call__(OEUnaryInteractionHintBoolFunc self, OEInteractionHint arg0) -> bool"""
        return _oechem.OEUnaryInteractionHintBoolFunc___call__(self, arg0)

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



    def __init__(self):
        r"""__init__(OEUnaryInteractionHintBoolFunc self) -> OEUnaryInteractionHintBoolFunc"""
        if self.__class__ == OEUnaryInteractionHintBoolFunc:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryInteractionHintBoolFunc_swiginit(self, _oechem.new_OEUnaryInteractionHintBoolFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryInteractionHintBoolFunc(self)
        return weakref.proxy(self)

# Register OEUnaryInteractionHintBoolFunc in _oechem:
_oechem.OEUnaryInteractionHintBoolFunc_swigregister(OEUnaryInteractionHintBoolFunc)

class OEUnaryInteractionHintPred(OEUnaryInteractionHintBoolFunc):
    r"""Proxy of C++ OESystem::OEUnaryPredicate< OEBio::OEInteractionHint > class."""

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

    def __call__(self, a: "OEInteractionHint") -> "bool":
        r"""__call__(OEUnaryInteractionHintPred self, OEInteractionHint a) -> bool"""
        return _oechem.OEUnaryInteractionHintPred___call__(self, a)

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



    def CreatePredicateCopy(self) -> "OESystem::OEUnaryPredicate< OEBio::OEInteractionHint > *":
        r"""CreatePredicateCopy(OEUnaryInteractionHintPred self) -> OEUnaryInteractionHintPred"""
        return _oechem.OEUnaryInteractionHintPred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEUnaryInteractionHintPred self) -> OEUnaryInteractionHintPred
        __init__(OEUnaryInteractionHintPred self, OEUnaryInteractionHintPred arg2) -> OEUnaryInteractionHintPred
        """
        if self.__class__ == OEUnaryInteractionHintPred:
            _self = None
        else:
            _self = self
        _oechem.OEUnaryInteractionHintPred_swiginit(self, _oechem.new_OEUnaryInteractionHintPred(_self, *args))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEUnaryInteractionHintPred(self)
        return weakref.proxy(self)

# Register OEUnaryInteractionHintPred in _oechem:
_oechem.OEUnaryInteractionHintPred_swigregister(OEUnaryInteractionHintPred)

class OEBinaryInteractionHintFunc(object):
    r"""Proxy of C++ OESystem::OEBinaryFunction< OEBio::OEInteractionHint,OEBio::OEInteractionHint,bool > class."""

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

    def __call__(self, a1: "OEInteractionHint", a2: "OEInteractionHint") -> "bool":
        r"""__call__(OEBinaryInteractionHintFunc self, OEInteractionHint a1, OEInteractionHint a2) -> bool"""
        return _oechem.OEBinaryInteractionHintFunc___call__(self, a1, a2)

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



    def __init__(self):
        r"""__init__(OEBinaryInteractionHintFunc self) -> OEBinaryInteractionHintFunc"""
        if self.__class__ == OEBinaryInteractionHintFunc:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryInteractionHintFunc_swiginit(self, _oechem.new_OEBinaryInteractionHintFunc(_self, ))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryInteractionHintFunc(self)
        return weakref.proxy(self)

# Register OEBinaryInteractionHintFunc in _oechem:
_oechem.OEBinaryInteractionHintFunc_swigregister(OEBinaryInteractionHintFunc)

class OEBinaryInteractionHintPred(OEBinaryInteractionHintFunc):
    r"""Proxy of C++ OESystem::OEBinaryPredicate< OEBio::OEInteractionHint,OEBio::OEInteractionHint > class."""

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

    def __call__(self, a1: "OEInteractionHint", a2: "OEInteractionHint") -> "bool":
        r"""__call__(OEBinaryInteractionHintPred self, OEInteractionHint a1, OEInteractionHint a2) -> bool"""
        return _oechem.OEBinaryInteractionHintPred___call__(self, a1, a2)

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



    def CreatePredicateCopy(self) -> "OESystem::OEBinaryPredicate< OEBio::OEInteractionHint,OEBio::OEInteractionHint > *":
        r"""CreatePredicateCopy(OEBinaryInteractionHintPred self) -> OEBinaryInteractionHintPred"""
        return _oechem.OEBinaryInteractionHintPred_CreatePredicateCopy(self)

    def __init__(self, *args):
        r"""
        __init__(OEBinaryInteractionHintPred self) -> OEBinaryInteractionHintPred
        __init__(OEBinaryInteractionHintPred self, OEBinaryInteractionHintPred arg2) -> OEBinaryInteractionHintPred
        """
        if self.__class__ == OEBinaryInteractionHintPred:
            _self = None
        else:
            _self = self
        _oechem.OEBinaryInteractionHintPred_swiginit(self, _oechem.new_OEBinaryInteractionHintPred(_self, *args))
    __swig_destroy__ = _oechem.delete_OEBinaryInteractionHintPred
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEBinaryInteractionHintPred(self)
        return weakref.proxy(self)

# Register OEBinaryInteractionHintPred in _oechem:
_oechem.OEBinaryInteractionHintPred_swigregister(OEBinaryInteractionHintPred)


class OENotInteractionHint(OEUnaryInteractionHintPred):
    """Negation of an OEUnary InteractionHint Pred"""
    def __init__(self, func):
        """__init__(self, OEUnary InteractionHint Pred func) -> OENotNAME"""
        OEUnaryInteractionHintPred.__init__(self)
        if not isinstance(func, OEUnaryInteractionHintPred):
            raise TypeError("Expected a OEUnary InteractionHint Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj):
        """__call__(self, OEInteractionHint obj) -> bool"""
        return not self._func(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func).__disown__()

class OEAndInteractionHint(OEUnaryInteractionHintPred):
    """Logical 'and' of two OEUnary InteractionHint Preds"""
    def __init__(self, func1, func2):
        """__init__(self, OEUnary InteractionHint Pred func1, OEUnary InteractionHint Pred func2) -> OEAnd InteractionHint"""
        OEUnaryInteractionHintPred.__init__(self)
        if not isinstance(func1, OEUnaryInteractionHintPred):
            raise TypeError("Expected a OEUnary InteractionHint Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryInteractionHintPred):
            raise TypeError("Expected a OEUnary InteractionHint Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEInteractionHint obj) -> bool"""
        return self._func1(obj) and self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEOrInteractionHint(OEUnaryInteractionHintPred):
    """Logical 'or' of two OEUnary InteractionHint Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd InteractionHint"""
        OEUnaryInteractionHintPred.__init__(self)
        if not isinstance(func1, OEUnaryInteractionHintPred):
            raise TypeError("Expected a OEUnary InteractionHint Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEUnaryInteractionHintPred):
            raise TypeError("Expected a OEUnary InteractionHint Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj):
        """__call__(self, OEInteractionHint obj) -> bool"""
        return self._func1(obj) or self._func2(obj)
    def CreateCopy(self):
        """CreateCopy(self) -> OEUnaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()


class OEBinaryNotInteractionHint(OEBinaryInteractionHintPred):
    """Negation of an OEBinary InteractionHint Pred"""
    def __init__(self, func):
        """__init__(self, OEBinary InteractionHint Pred func) -> OENot InteractionHint"""
        OEBinaryInteractionHintPred.__init__(self)
        if not isinstance(func, OEBinaryInteractionHintPred):
            raise TypeError("Expected a OEBinary InteractionHint Pred, got a %s instead" % repr(func))
        self._func = func
    def __call__(self, obj1, obj2):
        """__call__(self, OEInteractionHint obj1, OEInteractionHint obj2) -> bool"""
        return not self._func(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func).__disown__()

class OEBinaryAndInteractionHint(OEBinaryInteractionHintPred):
    """Logical 'and' of two OEBinary InteractionHint Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd InteractionHint"""
        OEBinaryInteractionHintPred.__init__(self)
        if not isinstance(func1, OEBinaryInteractionHintPred):
            raise TypeError("Expected a OEBinary InteractionHint Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryInteractionHintPred):
            raise TypeError("Expected a OEBinary InteractionHint Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEInteractionHint obj1, OEInteractionHint obj2) -> bool"""
        return self._func1(obj1, obj2) and self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEBinaryOrInteractionHint(OEBinaryInteractionHintPred):
    """Logical 'or' of two OEBinary InteractionHint Preds"""
    def __init__(self, func1, func2):
        """__init__(self, func) -> OEAnd InteractionHint"""
        OEBinaryInteractionHintPred.__init__(self)
        if not isinstance(func1, OEBinaryInteractionHintPred):
            raise TypeError("Expected a OEBinary InteractionHint Pred, got a %s instead" % repr(func1))
        if not isinstance(func2, OEBinaryInteractionHintPred):
            raise TypeError("Expected a OEBinary InteractionHint Pred, got a %s instead" % repr(func2))
        self._func1 = func1
        self._func2 = func2
    def __call__(self, obj1, obj2):
        """__call__(self, OEInteractionHint obj1, OEInteractionHint obj2) -> bool"""
        return self._func1(obj1, obj2) or self._func2(obj1, obj2)
    def CreateCopy(self):
        """CreateCopy(self) -> OEBinaryFunction"""
        return self.__class__(self._func1, self._func2).__disown__()

class OEInteractionHint(OEBase):
    r"""Proxy of C++ OEBio::OEInteractionHint 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, rhs: "OEInteractionHint"):
        r"""__init__(OEInteractionHint self, OEInteractionHint rhs) -> OEInteractionHint"""
        _oechem.OEInteractionHint_swiginit(self, _oechem.new_OEInteractionHint(rhs))
    __swig_destroy__ = _oechem.delete_OEInteractionHint

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEInteractionHint self) -> OEBase"""
        return _oechem.OEInteractionHint_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEInteractionHint self) -> void const *"""
        return _oechem.OEInteractionHint_GetDataType(self)

    def IsDataType(self, arg2: "void const *") -> "bool":
        r"""IsDataType(OEInteractionHint self, void const * arg2) -> bool"""
        return _oechem.OEInteractionHint_IsDataType(self, arg2)

    def IsValid(self) -> "bool":
        r"""IsValid(OEInteractionHint self) -> bool"""
        return _oechem.OEInteractionHint_IsValid(self)

    def IsIntra(self) -> "bool":
        r"""IsIntra(OEInteractionHint self) -> bool"""
        return _oechem.OEInteractionHint_IsIntra(self)

    def IsInter(self) -> "bool":
        r"""IsInter(OEInteractionHint self) -> bool"""
        return _oechem.OEInteractionHint_IsInter(self)

    def SetDetails(self, details: "std::string const &") -> "void":
        r"""SetDetails(OEInteractionHint self, std::string const & details)"""
        return _oechem.OEInteractionHint_SetDetails(self, details)

    def GetDetails(self) -> "std::string":
        r"""GetDetails(OEInteractionHint self) -> std::string"""
        return _oechem.OEInteractionHint_GetDetails(self)

    def GetBgnFragment(self) -> "OEBio::OEInteractionHintFragment const *":
        r"""GetBgnFragment(OEInteractionHint self) -> OEInteractionHintFragment"""
        return _oechem.OEInteractionHint_GetBgnFragment(self)

    def GetEndFragment(self) -> "OEBio::OEInteractionHintFragment const *":
        r"""GetEndFragment(OEInteractionHint self) -> OEInteractionHintFragment"""
        return _oechem.OEInteractionHint_GetEndFragment(self)

    def GetFragment(self, arg2: "OEInteractionHintComponentTypeBase") -> "OEBio::OEInteractionHintFragment const *":
        r"""GetFragment(OEInteractionHint self, OEInteractionHintComponentTypeBase arg2) -> OEInteractionHintFragment"""
        return _oechem.OEInteractionHint_GetFragment(self, arg2)

    def GetInteractionType(self) -> "OEBio::OEInteractionHintTypeBase const &":
        r"""GetInteractionType(OEInteractionHint self) -> OEInteractionHintTypeBase"""
        return _oechem.OEInteractionHint_GetInteractionType(self)

    def SetWeight(self, arg2: "double") -> "void":
        r"""SetWeight(OEInteractionHint self, double arg2)"""
        return _oechem.OEInteractionHint_SetWeight(self, arg2)

    def GetWeight(self) -> "double":
        r"""GetWeight(OEInteractionHint self) -> double"""
        return _oechem.OEInteractionHint_GetWeight(self)

    def HasCalculatedGeometry(self, name: "std::string const &") -> "bool":
        r"""HasCalculatedGeometry(OEInteractionHint self, std::string const & name) -> bool"""
        return _oechem.OEInteractionHint_HasCalculatedGeometry(self, name)

    def GetCalculatedGeometry(self, name: "std::string const &") -> "double":
        r"""GetCalculatedGeometry(OEInteractionHint self, std::string const & name) -> double"""
        return _oechem.OEInteractionHint_GetCalculatedGeometry(self, name)

    def GetCalculatedGeometries(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetCalculatedGeometries(OEInteractionHint self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEInteractionHint_GetCalculatedGeometries(self)

# Register OEInteractionHint in _oechem:
_oechem.OEInteractionHint_swigregister(OEInteractionHint)

class OEInteractionHintIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OEInteractionHint 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__(OEInteractionHintIter self) -> OEInteractionHintIter
        __init__(OEInteractionHintIter self, OEInteractionHintIter rhs) -> OEInteractionHintIter
        __init__(OEInteractionHintIter self, OESystem::OEIterBase< OEBio::OEInteractionHint const > * rhs) -> OEInteractionHintIter
        __init__(OEInteractionHintIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEInteractionHint const >::NonConstA > * rhs) -> OEInteractionHintIter
        """
        _oechem.OEInteractionHintIter_swiginit(self, _oechem.new_OEInteractionHintIter(*args))
    __swig_destroy__ = _oechem.delete_OEInteractionHintIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OEInteractionHint const > *":
        r"""Copy(OEInteractionHintIter self) -> OESystem::OEIterBase< OEBio::OEInteractionHint const > *"""
        return _oechem.OEInteractionHintIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEInteractionHintIter self, OESystem::OEIterBase< OEBio::OEInteractionHint const > * ib)
        Push(OEInteractionHintIter self, OEInteractionHintIter iter)
        """
        return _oechem.OEInteractionHintIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OEInteractionHint const,OEBio::OEInteractionHint const > const &") -> "void":
        r"""Sort(OEInteractionHintIter self, OESystem::OEBinaryPredicate< OEBio::OEInteractionHint const,OEBio::OEInteractionHint const > const & sort_criterion)"""
        return _oechem.OEInteractionHintIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OEInteractionHint const > &":
        r"""ToFirst(OEInteractionHintIter self) -> OEInteractionHintIter"""
        return _oechem.OEInteractionHintIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OEInteractionHint const > &":
        r"""ToLast(OEInteractionHintIter self) -> OEInteractionHintIter"""
        return _oechem.OEInteractionHintIter_ToLast(self)

    def __ref__(self) -> "OEBio::OEInteractionHint const &":
        r"""__ref__(OEInteractionHintIter self) -> OEInteractionHint"""
        return _oechem.OEInteractionHintIter___ref__(self)

    def IsValid(self):
      return _oechem.OEInteractionHintIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEInteractionHintIter self) -> PyObject *"""
        return _oechem.OEInteractionHintIter_next(self)

    def Target(self) -> "OEBio::OEInteractionHint const &":
        r"""Target(OEInteractionHintIter self) -> OEInteractionHint"""
        return _oechem.OEInteractionHintIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OEInteractionHint const > &":
        r"""
        Next(OEInteractionHintIter self) -> OEInteractionHintIter
        Next(OEInteractionHintIter self, int i) -> OEInteractionHintIter
        """
        return _oechem.OEInteractionHintIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OEInteractionHint const > &":
        r"""
        Prev(OEInteractionHintIter self) -> OEInteractionHintIter
        Prev(OEInteractionHintIter self, int i) -> OEInteractionHintIter
        """
        return _oechem.OEInteractionHintIter_Prev(self, *args)

# Register OEInteractionHintIter in _oechem:
_oechem.OEInteractionHintIter_swigregister(OEInteractionHintIter)

class OEHasInteractionHintType(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEHasInteractionHintType 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__(OEHasInteractionHintType self, OEInteractionHintTypeBase itype) -> OEHasInteractionHintType
        __init__(OEHasInteractionHintType self, OEHasInteractionHintType arg2) -> OEHasInteractionHintType
        """
        _oechem.OEHasInteractionHintType_swiginit(self, _oechem.new_OEHasInteractionHintType(*args))
    __swig_destroy__ = _oechem.delete_OEHasInteractionHintType

    def __call__(self, i: "OEInteractionHint") -> "bool":
        r"""__call__(OEHasInteractionHintType self, OEInteractionHint i) -> bool"""
        return _oechem.OEHasInteractionHintType___call__(self, i)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEHasInteractionHintType self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEHasInteractionHintType_CreateCopy(self)

# Register OEHasInteractionHintType in _oechem:
_oechem.OEHasInteractionHintType_swigregister(OEHasInteractionHintType)

class OEHasInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEHasInteractionHint 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__(OEHasInteractionHint self, OEAtomBase arg2) -> OEHasInteractionHint
        __init__(OEHasInteractionHint self, OEHasInteractionHint arg2) -> OEHasInteractionHint
        """
        _oechem.OEHasInteractionHint_swiginit(self, _oechem.new_OEHasInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEHasInteractionHint

    def __call__(self, c: "OEInteractionHint") -> "bool":
        r"""__call__(OEHasInteractionHint self, OEInteractionHint c) -> bool"""
        return _oechem.OEHasInteractionHint___call__(self, c)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEHasInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEHasInteractionHint_CreateCopy(self)

# Register OEHasInteractionHint in _oechem:
_oechem.OEHasInteractionHint_swigregister(OEHasInteractionHint)

class OEIsContactInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsContactInteractionHint 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__(OEIsContactInteractionHint self) -> OEIsContactInteractionHint
        __init__(OEIsContactInteractionHint self, OEIsContactInteractionHint arg2) -> OEIsContactInteractionHint
        """
        _oechem.OEIsContactInteractionHint_swiginit(self, _oechem.new_OEIsContactInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsContactInteractionHint

    def __call__(self, c: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsContactInteractionHint self, OEInteractionHint c) -> bool"""
        return _oechem.OEIsContactInteractionHint___call__(self, c)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsContactInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsContactInteractionHint_CreateCopy(self)

# Register OEIsContactInteractionHint in _oechem:
_oechem.OEIsContactInteractionHint_swigregister(OEIsContactInteractionHint)

class OEIsHBondInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsHBondInteractionHint 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__(OEIsHBondInteractionHint self) -> OEIsHBondInteractionHint
        __init__(OEIsHBondInteractionHint self, OEIsHBondInteractionHint arg2) -> OEIsHBondInteractionHint
        """
        _oechem.OEIsHBondInteractionHint_swiginit(self, _oechem.new_OEIsHBondInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsHBondInteractionHint

    def __call__(self, c: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsHBondInteractionHint self, OEInteractionHint c) -> bool"""
        return _oechem.OEIsHBondInteractionHint___call__(self, c)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsHBondInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsHBondInteractionHint_CreateCopy(self)

# Register OEIsHBondInteractionHint in _oechem:
_oechem.OEIsHBondInteractionHint_swigregister(OEIsHBondInteractionHint)

class OEIsIntermolecularHBondInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsIntermolecularHBondInteractionHint 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__(OEIsIntermolecularHBondInteractionHint self) -> OEIsIntermolecularHBondInteractionHint
        __init__(OEIsIntermolecularHBondInteractionHint self, OEIsIntermolecularHBondInteractionHint arg2) -> OEIsIntermolecularHBondInteractionHint
        """
        _oechem.OEIsIntermolecularHBondInteractionHint_swiginit(self, _oechem.new_OEIsIntermolecularHBondInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsIntermolecularHBondInteractionHint

    def __call__(self, c: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsIntermolecularHBondInteractionHint self, OEInteractionHint c) -> bool"""
        return _oechem.OEIsIntermolecularHBondInteractionHint___call__(self, c)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsIntermolecularHBondInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsIntermolecularHBondInteractionHint_CreateCopy(self)

# Register OEIsIntermolecularHBondInteractionHint in _oechem:
_oechem.OEIsIntermolecularHBondInteractionHint_swigregister(OEIsIntermolecularHBondInteractionHint)

class OEIsIntramolecularHBondInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsIntramolecularHBondInteractionHint 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__(OEIsIntramolecularHBondInteractionHint self) -> OEIsIntramolecularHBondInteractionHint
        __init__(OEIsIntramolecularHBondInteractionHint self, OEIsIntramolecularHBondInteractionHint arg2) -> OEIsIntramolecularHBondInteractionHint
        """
        _oechem.OEIsIntramolecularHBondInteractionHint_swiginit(self, _oechem.new_OEIsIntramolecularHBondInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsIntramolecularHBondInteractionHint

    def __call__(self, c: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsIntramolecularHBondInteractionHint self, OEInteractionHint c) -> bool"""
        return _oechem.OEIsIntramolecularHBondInteractionHint___call__(self, c)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsIntramolecularHBondInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsIntramolecularHBondInteractionHint_CreateCopy(self)

# Register OEIsIntramolecularHBondInteractionHint in _oechem:
_oechem.OEIsIntramolecularHBondInteractionHint_swigregister(OEIsIntramolecularHBondInteractionHint)

class OEIsNonIdealHBondInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsNonIdealHBondInteractionHint class."""

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

    def __call__(self, c: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsNonIdealHBondInteractionHint self, OEInteractionHint c) -> bool"""
        return _oechem.OEIsNonIdealHBondInteractionHint___call__(self, c)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsNonIdealHBondInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsNonIdealHBondInteractionHint_CreateCopy(self)

    def __init__(self):
        r"""__init__(OEIsNonIdealHBondInteractionHint self) -> OEIsNonIdealHBondInteractionHint"""
        _oechem.OEIsNonIdealHBondInteractionHint_swiginit(self, _oechem.new_OEIsNonIdealHBondInteractionHint())
    __swig_destroy__ = _oechem.delete_OEIsNonIdealHBondInteractionHint

# Register OEIsNonIdealHBondInteractionHint in _oechem:
_oechem.OEIsNonIdealHBondInteractionHint_swigregister(OEIsNonIdealHBondInteractionHint)

class OEIsChelatorInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsChelatorInteractionHint 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__(OEIsChelatorInteractionHint self) -> OEIsChelatorInteractionHint
        __init__(OEIsChelatorInteractionHint self, OEIsChelatorInteractionHint arg2) -> OEIsChelatorInteractionHint
        """
        _oechem.OEIsChelatorInteractionHint_swiginit(self, _oechem.new_OEIsChelatorInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsChelatorInteractionHint

    def __call__(self, c: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsChelatorInteractionHint self, OEInteractionHint c) -> bool"""
        return _oechem.OEIsChelatorInteractionHint___call__(self, c)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsChelatorInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsChelatorInteractionHint_CreateCopy(self)

# Register OEIsChelatorInteractionHint in _oechem:
_oechem.OEIsChelatorInteractionHint_swigregister(OEIsChelatorInteractionHint)

class OEIsIntermolecularChelatorInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsIntermolecularChelatorInteractionHint 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__(OEIsIntermolecularChelatorInteractionHint self) -> OEIsIntermolecularChelatorInteractionHint
        __init__(OEIsIntermolecularChelatorInteractionHint self, OEIsIntermolecularChelatorInteractionHint arg2) -> OEIsIntermolecularChelatorInteractionHint
        """
        _oechem.OEIsIntermolecularChelatorInteractionHint_swiginit(self, _oechem.new_OEIsIntermolecularChelatorInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsIntermolecularChelatorInteractionHint

    def __call__(self, c: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsIntermolecularChelatorInteractionHint self, OEInteractionHint c) -> bool"""
        return _oechem.OEIsIntermolecularChelatorInteractionHint___call__(self, c)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsIntermolecularChelatorInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsIntermolecularChelatorInteractionHint_CreateCopy(self)

# Register OEIsIntermolecularChelatorInteractionHint in _oechem:
_oechem.OEIsIntermolecularChelatorInteractionHint_swigregister(OEIsIntermolecularChelatorInteractionHint)

class OEIsIntramolecularChelatorInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsIntramolecularChelatorInteractionHint 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__(OEIsIntramolecularChelatorInteractionHint self) -> OEIsIntramolecularChelatorInteractionHint
        __init__(OEIsIntramolecularChelatorInteractionHint self, OEIsIntramolecularChelatorInteractionHint arg2) -> OEIsIntramolecularChelatorInteractionHint
        """
        _oechem.OEIsIntramolecularChelatorInteractionHint_swiginit(self, _oechem.new_OEIsIntramolecularChelatorInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsIntramolecularChelatorInteractionHint

    def __call__(self, c: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsIntramolecularChelatorInteractionHint self, OEInteractionHint c) -> bool"""
        return _oechem.OEIsIntramolecularChelatorInteractionHint___call__(self, c)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsIntramolecularChelatorInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsIntramolecularChelatorInteractionHint_CreateCopy(self)

# Register OEIsIntramolecularChelatorInteractionHint in _oechem:
_oechem.OEIsIntramolecularChelatorInteractionHint_swigregister(OEIsIntramolecularChelatorInteractionHint)

class OEIsCovalentInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsCovalentInteractionHint 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__(OEIsCovalentInteractionHint self) -> OEIsCovalentInteractionHint
        __init__(OEIsCovalentInteractionHint self, OEIsCovalentInteractionHint arg2) -> OEIsCovalentInteractionHint
        """
        _oechem.OEIsCovalentInteractionHint_swiginit(self, _oechem.new_OEIsCovalentInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsCovalentInteractionHint

    def __call__(self, c: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsCovalentInteractionHint self, OEInteractionHint c) -> bool"""
        return _oechem.OEIsCovalentInteractionHint___call__(self, c)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsCovalentInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsCovalentInteractionHint_CreateCopy(self)

# Register OEIsCovalentInteractionHint in _oechem:
_oechem.OEIsCovalentInteractionHint_swigregister(OEIsCovalentInteractionHint)

class OEIsClashInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsClashInteractionHint 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__(OEIsClashInteractionHint self) -> OEIsClashInteractionHint
        __init__(OEIsClashInteractionHint self, OEIsClashInteractionHint arg2) -> OEIsClashInteractionHint
        """
        _oechem.OEIsClashInteractionHint_swiginit(self, _oechem.new_OEIsClashInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsClashInteractionHint

    def __call__(self, c: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsClashInteractionHint self, OEInteractionHint c) -> bool"""
        return _oechem.OEIsClashInteractionHint___call__(self, c)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsClashInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsClashInteractionHint_CreateCopy(self)

# Register OEIsClashInteractionHint in _oechem:
_oechem.OEIsClashInteractionHint_swigregister(OEIsClashInteractionHint)

class OEIsSaltBridgeInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsSaltBridgeInteractionHint 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__(OEIsSaltBridgeInteractionHint self) -> OEIsSaltBridgeInteractionHint
        __init__(OEIsSaltBridgeInteractionHint self, OEIsSaltBridgeInteractionHint arg2) -> OEIsSaltBridgeInteractionHint
        """
        _oechem.OEIsSaltBridgeInteractionHint_swiginit(self, _oechem.new_OEIsSaltBridgeInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsSaltBridgeInteractionHint

    def __call__(self, i: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsSaltBridgeInteractionHint self, OEInteractionHint i) -> bool"""
        return _oechem.OEIsSaltBridgeInteractionHint___call__(self, i)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsSaltBridgeInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsSaltBridgeInteractionHint_CreateCopy(self)

# Register OEIsSaltBridgeInteractionHint in _oechem:
_oechem.OEIsSaltBridgeInteractionHint_swigregister(OEIsSaltBridgeInteractionHint)

class OEIsStackingInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsStackingInteractionHint 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__(OEIsStackingInteractionHint self) -> OEIsStackingInteractionHint
        __init__(OEIsStackingInteractionHint self, OEIsStackingInteractionHint arg2) -> OEIsStackingInteractionHint
        """
        _oechem.OEIsStackingInteractionHint_swiginit(self, _oechem.new_OEIsStackingInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsStackingInteractionHint

    def __call__(self, i: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsStackingInteractionHint self, OEInteractionHint i) -> bool"""
        return _oechem.OEIsStackingInteractionHint___call__(self, i)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsStackingInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsStackingInteractionHint_CreateCopy(self)

# Register OEIsStackingInteractionHint in _oechem:
_oechem.OEIsStackingInteractionHint_swigregister(OEIsStackingInteractionHint)

class OEIsCationPiInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsCationPiInteractionHint 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__(OEIsCationPiInteractionHint self) -> OEIsCationPiInteractionHint
        __init__(OEIsCationPiInteractionHint self, OEIsCationPiInteractionHint arg2) -> OEIsCationPiInteractionHint
        """
        _oechem.OEIsCationPiInteractionHint_swiginit(self, _oechem.new_OEIsCationPiInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsCationPiInteractionHint

    def __call__(self, i: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsCationPiInteractionHint self, OEInteractionHint i) -> bool"""
        return _oechem.OEIsCationPiInteractionHint___call__(self, i)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsCationPiInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsCationPiInteractionHint_CreateCopy(self)

# Register OEIsCationPiInteractionHint in _oechem:
_oechem.OEIsCationPiInteractionHint_swigregister(OEIsCationPiInteractionHint)

class OEIsHalogenBondInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsHalogenBondInteractionHint 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__(OEIsHalogenBondInteractionHint self) -> OEIsHalogenBondInteractionHint
        __init__(OEIsHalogenBondInteractionHint self, OEIsHalogenBondInteractionHint arg2) -> OEIsHalogenBondInteractionHint
        """
        _oechem.OEIsHalogenBondInteractionHint_swiginit(self, _oechem.new_OEIsHalogenBondInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsHalogenBondInteractionHint

    def __call__(self, i: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsHalogenBondInteractionHint self, OEInteractionHint i) -> bool"""
        return _oechem.OEIsHalogenBondInteractionHint___call__(self, i)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsHalogenBondInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsHalogenBondInteractionHint_CreateCopy(self)

# Register OEIsHalogenBondInteractionHint in _oechem:
_oechem.OEIsHalogenBondInteractionHint_swigregister(OEIsHalogenBondInteractionHint)

class OEIsInterInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsInterInteractionHint 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__(OEIsInterInteractionHint self) -> OEIsInterInteractionHint
        __init__(OEIsInterInteractionHint self, OEIsInterInteractionHint arg2) -> OEIsInterInteractionHint
        """
        _oechem.OEIsInterInteractionHint_swiginit(self, _oechem.new_OEIsInterInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsInterInteractionHint

    def __call__(self, i: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsInterInteractionHint self, OEInteractionHint i) -> bool"""
        return _oechem.OEIsInterInteractionHint___call__(self, i)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsInterInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsInterInteractionHint_CreateCopy(self)

# Register OEIsInterInteractionHint in _oechem:
_oechem.OEIsInterInteractionHint_swigregister(OEIsInterInteractionHint)

class OEIsIntraInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsIntraInteractionHint 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__(OEIsIntraInteractionHint self) -> OEIsIntraInteractionHint
        __init__(OEIsIntraInteractionHint self, OEIsIntraInteractionHint arg2) -> OEIsIntraInteractionHint
        """
        _oechem.OEIsIntraInteractionHint_swiginit(self, _oechem.new_OEIsIntraInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsIntraInteractionHint

    def __call__(self, i: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsIntraInteractionHint self, OEInteractionHint i) -> bool"""
        return _oechem.OEIsIntraInteractionHint___call__(self, i)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsIntraInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsIntraInteractionHint_CreateCopy(self)

# Register OEIsIntraInteractionHint in _oechem:
_oechem.OEIsIntraInteractionHint_swigregister(OEIsIntraInteractionHint)

class OEIsUnpairedLigandInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsUnpairedLigandInteractionHint 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__(OEIsUnpairedLigandInteractionHint self) -> OEIsUnpairedLigandInteractionHint
        __init__(OEIsUnpairedLigandInteractionHint self, OEIsUnpairedLigandInteractionHint arg2) -> OEIsUnpairedLigandInteractionHint
        """
        _oechem.OEIsUnpairedLigandInteractionHint_swiginit(self, _oechem.new_OEIsUnpairedLigandInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsUnpairedLigandInteractionHint

    def __call__(self, i: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsUnpairedLigandInteractionHint self, OEInteractionHint i) -> bool"""
        return _oechem.OEIsUnpairedLigandInteractionHint___call__(self, i)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsUnpairedLigandInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsUnpairedLigandInteractionHint_CreateCopy(self)

# Register OEIsUnpairedLigandInteractionHint in _oechem:
_oechem.OEIsUnpairedLigandInteractionHint_swigregister(OEIsUnpairedLigandInteractionHint)

class OEIsUnpairedProteinInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEIsUnpairedProteinInteractionHint 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__(OEIsUnpairedProteinInteractionHint self) -> OEIsUnpairedProteinInteractionHint
        __init__(OEIsUnpairedProteinInteractionHint self, OEIsUnpairedProteinInteractionHint arg2) -> OEIsUnpairedProteinInteractionHint
        """
        _oechem.OEIsUnpairedProteinInteractionHint_swiginit(self, _oechem.new_OEIsUnpairedProteinInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEIsUnpairedProteinInteractionHint

    def __call__(self, i: "OEInteractionHint") -> "bool":
        r"""__call__(OEIsUnpairedProteinInteractionHint self, OEInteractionHint i) -> bool"""
        return _oechem.OEIsUnpairedProteinInteractionHint___call__(self, i)

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEIsUnpairedProteinInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEIsUnpairedProteinInteractionHint_CreateCopy(self)

# Register OEIsUnpairedProteinInteractionHint in _oechem:
_oechem.OEIsUnpairedProteinInteractionHint_swigregister(OEIsUnpairedProteinInteractionHint)

class OEHasResidueInteractionHint(OEUnaryInteractionHintPred):
    r"""Proxy of C++ OEBio::OEHasResidueInteractionHint 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__(OEHasResidueInteractionHint self, OEResidue arg2) -> OEHasResidueInteractionHint
        __init__(OEHasResidueInteractionHint self, OEResidue arg2, OEInteractionHintComponentTypeBase ctype) -> OEHasResidueInteractionHint
        __init__(OEHasResidueInteractionHint self, OEHasResidueInteractionHint rhs) -> OEHasResidueInteractionHint
        """
        _oechem.OEHasResidueInteractionHint_swiginit(self, _oechem.new_OEHasResidueInteractionHint(*args))
    __swig_destroy__ = _oechem.delete_OEHasResidueInteractionHint

    def CreateCopy(self) -> "OESystem::OEUnaryFunction< OEBio::OEInteractionHint,bool,true,true > *":
        r"""CreateCopy(OEHasResidueInteractionHint self) -> OEUnaryInteractionHintBoolFunc"""
        return _oechem.OEHasResidueInteractionHint_CreateCopy(self)

    def __call__(self, i: "OEInteractionHint") -> "bool":
        r"""__call__(OEHasResidueInteractionHint self, OEInteractionHint i) -> bool"""
        return _oechem.OEHasResidueInteractionHint___call__(self, i)

# Register OEHasResidueInteractionHint in _oechem:
_oechem.OEHasResidueInteractionHint_swigregister(OEHasResidueInteractionHint)

class OEInteractionHintContainer(object):
    r"""Proxy of C++ OEBio::OEInteractionHintContainer 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__(OEInteractionHintContainer self) -> OEInteractionHintContainer
        __init__(OEInteractionHintContainer self, OEMolBase protein, OEMolBase ligand) -> OEInteractionHintContainer
        """
        _oechem.OEInteractionHintContainer_swiginit(self, _oechem.new_OEInteractionHintContainer(*args))
    __swig_destroy__ = _oechem.delete_OEInteractionHintContainer

    def AddMolecule(self, mol: "OEMolBase", itype: "OEInteractionHintComponentTypeBase") -> "OEChem::OEMolBase const *":
        r"""AddMolecule(OEInteractionHintContainer self, OEMolBase mol, OEInteractionHintComponentTypeBase itype) -> OEMolBase"""
        return _oechem.OEInteractionHintContainer_AddMolecule(self, mol, itype)

    def GetMolecule(self, itype: "OEInteractionHintComponentTypeBase") -> "OEChem::OEMolBase const *":
        r"""GetMolecule(OEInteractionHintContainer self, OEInteractionHintComponentTypeBase itype) -> OEMolBase"""
        return _oechem.OEInteractionHintContainer_GetMolecule(self, itype)

    def GetMolecules(self, *args) -> "OESystem::OEIterBase< OEChem::OEMolBase const > *":
        r"""
        GetMolecules(OEInteractionHintContainer self) -> OESystem::OEIterBase< OEChem::OEMolBase const >
        GetMolecules(OEInteractionHintContainer self, OEInteractionHintComponentTypeBase itype) -> OESystem::OEIterBase< OEChem::OEMolBase const > *
        """
        return _oechem.OEInteractionHintContainer_GetMolecules(self, *args)

    def HasInteraction(self, pred: "OEUnaryInteractionHintPred") -> "bool":
        r"""HasInteraction(OEInteractionHintContainer self, OEUnaryInteractionHintPred pred) -> bool"""
        return _oechem.OEInteractionHintContainer_HasInteraction(self, pred)

    def GetInteractions(self, *args) -> "OESystem::OEIterBase< OEBio::OEInteractionHint const > *":
        r"""
        GetInteractions(OEInteractionHintContainer self) -> OESystem::OEIterBase< OEBio::OEInteractionHint const >
        GetInteractions(OEInteractionHintContainer self, OEUnaryInteractionHintPred pred) -> OESystem::OEIterBase< OEBio::OEInteractionHint const > *
        """
        return _oechem.OEInteractionHintContainer_GetInteractions(self, *args)

    def DeleteInteraction(self, arg2: "OEInteractionHint") -> "bool":
        r"""DeleteInteraction(OEInteractionHintContainer self, OEInteractionHint arg2) -> bool"""
        return _oechem.OEInteractionHintContainer_DeleteInteraction(self, arg2)

    def DeleteInteractions(self) -> "bool":
        r"""DeleteInteractions(OEInteractionHintContainer self) -> bool"""
        return _oechem.OEInteractionHintContainer_DeleteInteractions(self)

    def IsValid(self) -> "bool":
        r"""IsValid(OEInteractionHintContainer self) -> bool"""
        return _oechem.OEInteractionHintContainer_IsValid(self)

    def IsValid(self):
      return _oechem.OEInteractionHintContainer___nonzero__(self)



    def GetTitle(self) -> "std::string const &":
        r"""GetTitle(OEInteractionHintContainer self) -> std::string const &"""
        return _oechem.OEInteractionHintContainer_GetTitle(self)

    def SetTitle(self, title: "std::string const &") -> "void":
        r"""SetTitle(OEInteractionHintContainer self, std::string const & title)"""
        return _oechem.OEInteractionHintContainer_SetTitle(self, title)

    def NumMolecules(self) -> "unsigned int":
        r"""NumMolecules(OEInteractionHintContainer self) -> unsigned int"""
        return _oechem.OEInteractionHintContainer_NumMolecules(self)

    def NumFragments(self) -> "unsigned int":
        r"""NumFragments(OEInteractionHintContainer self) -> unsigned int"""
        return _oechem.OEInteractionHintContainer_NumFragments(self)

    def NumInteractions(self, *args) -> "unsigned int":
        r"""
        NumInteractions(OEInteractionHintContainer self) -> unsigned int
        NumInteractions(OEInteractionHintContainer self, OEUnaryInteractionHintPred pred) -> unsigned int
        """
        return _oechem.OEInteractionHintContainer_NumInteractions(self, *args)

# Register OEInteractionHintContainer in _oechem:
_oechem.OEInteractionHintContainer_swigregister(OEInteractionHintContainer)


def OEIsValidActiveSite(asite: "OEInteractionHintContainer") -> "bool":
    r"""OEIsValidActiveSite(OEInteractionHintContainer asite) -> bool"""
    return _oechem.OEIsValidActiveSite(asite)

def OEGetInteractions(*args) -> "OESystem::OEIterBase< OEBio::OEInteractionHint const > *":
    r"""
    OEGetInteractions(OEMolBase mol, OEInteractionHintContainer arg2) -> OESystem::OEIterBase< OEBio::OEInteractionHint const >
    OEGetInteractions(OEAtomBase atom, OEInteractionHintContainer arg2) -> OESystem::OEIterBase< OEBio::OEInteractionHint const > *
    """
    return _oechem.OEGetInteractions(*args)

def OESetInteractionsHintSerializationIds(mol: "OEMolBase") -> "void":
    r"""OESetInteractionsHintSerializationIds(OEMolBase mol)"""
    return _oechem.OESetInteractionsHintSerializationIds(mol)

def OEDeleteInteractionsHintSerializationIds(mol: "OEMolBase") -> "void":
    r"""OEDeleteInteractionsHintSerializationIds(OEMolBase mol)"""
    return _oechem.OEDeleteInteractionsHintSerializationIds(mol)

def OEDeleteInteractionsHintSerializationData(mol: "OEMolBase") -> "void":
    r"""OEDeleteInteractionsHintSerializationData(OEMolBase mol)"""
    return _oechem.OEDeleteInteractionsHintSerializationData(mol)

def OESerializeInteractionsHintContainer(protein: "OEMolBase", ligand: "OEMolBase", asite: "OEInteractionHintContainer") -> "bool":
    r"""OESerializeInteractionsHintContainer(OEMolBase protein, OEMolBase ligand, OEInteractionHintContainer asite) -> bool"""
    return _oechem.OESerializeInteractionsHintContainer(protein, ligand, asite)

def OEConstructInteractionHintContainer(asite: "OEInteractionHintContainer", protein: "OEMolBase", ligand: "OEMolBase") -> "bool":
    r"""OEConstructInteractionHintContainer(OEInteractionHintContainer asite, OEMolBase protein, OEMolBase ligand) -> bool"""
    return _oechem.OEConstructInteractionHintContainer(asite, protein, ligand)
class OEPerceiveInteractionOptions(object):
    r"""Proxy of C++ OEBio::OEPerceiveInteractionOptions 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__(OEPerceiveInteractionOptions self) -> OEPerceiveInteractionOptions
        __init__(OEPerceiveInteractionOptions self, OEPerceiveInteractionOptions arg2) -> OEPerceiveInteractionOptions
        """
        _oechem.OEPerceiveInteractionOptions_swiginit(self, _oechem.new_OEPerceiveInteractionOptions(*args))
    __swig_destroy__ = _oechem.delete_OEPerceiveInteractionOptions

    def SetMinCovalentFraction(self, frac: "double const") -> "void":
        r"""SetMinCovalentFraction(OEPerceiveInteractionOptions self, double const frac)"""
        return _oechem.OEPerceiveInteractionOptions_SetMinCovalentFraction(self, frac)

    def GetMinCovalentFraction(self) -> "double":
        r"""GetMinCovalentFraction(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMinCovalentFraction(self)

    def SetMaxCovalentFraction(self, frac: "double const") -> "void":
        r"""SetMaxCovalentFraction(OEPerceiveInteractionOptions self, double const frac)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxCovalentFraction(self, frac)

    def GetMaxCovalentFraction(self) -> "double":
        r"""GetMaxCovalentFraction(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxCovalentFraction(self)

    def SetMinContactFraction(self, frac: "double const") -> "void":
        r"""SetMinContactFraction(OEPerceiveInteractionOptions self, double const frac)"""
        return _oechem.OEPerceiveInteractionOptions_SetMinContactFraction(self, frac)

    def GetMinContactFraction(self) -> "double":
        r"""GetMinContactFraction(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMinContactFraction(self)

    def SetMaxContactFraction(self, frac: "double const") -> "void":
        r"""SetMaxContactFraction(OEPerceiveInteractionOptions self, double const frac)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxContactFraction(self, frac)

    def GetMaxContactFraction(self) -> "double":
        r"""GetMaxContactFraction(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxContactFraction(self)

    def SetMinHBondContactFraction(self, frac: "double const") -> "void":
        r"""SetMinHBondContactFraction(OEPerceiveInteractionOptions self, double const frac)"""
        return _oechem.OEPerceiveInteractionOptions_SetMinHBondContactFraction(self, frac)

    def GetMinHBondContactFraction(self) -> "double":
        r"""GetMinHBondContactFraction(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMinHBondContactFraction(self)

    def SetMaxPiStackDistance(self, dist: "double const") -> "void":
        r"""SetMaxPiStackDistance(OEPerceiveInteractionOptions self, double const dist)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxPiStackDistance(self, dist)

    def GetMaxPiStackDistance(self) -> "double":
        r"""GetMaxPiStackDistance(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxPiStackDistance(self)

    def SetMaxPiStackAngle(self, radians: "double const") -> "void":
        r"""SetMaxPiStackAngle(OEPerceiveInteractionOptions self, double const radians)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxPiStackAngle(self, radians)

    def GetMaxPiStackAngle(self) -> "double":
        r"""GetMaxPiStackAngle(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxPiStackAngle(self)

    def SetMaxTStackDistance(self, dist: "double const") -> "void":
        r"""SetMaxTStackDistance(OEPerceiveInteractionOptions self, double const dist)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxTStackDistance(self, dist)

    def GetMaxTStackDistance(self) -> "double":
        r"""GetMaxTStackDistance(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxTStackDistance(self)

    def SetMaxTStackAngle(self, radians: "double const") -> "void":
        r"""SetMaxTStackAngle(OEPerceiveInteractionOptions self, double const radians)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxTStackAngle(self, radians)

    def GetMaxTStackAngle(self) -> "double":
        r"""GetMaxTStackAngle(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxTStackAngle(self)

    def SetMaxHBondDistance(self, dist: "double const") -> "void":
        r"""SetMaxHBondDistance(OEPerceiveInteractionOptions self, double const dist)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxHBondDistance(self, dist)

    def GetMaxHBondDistance(self) -> "double":
        r"""GetMaxHBondDistance(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxHBondDistance(self)

    def SetMaxChargeAidedHBondDistance(self, dist: "double const") -> "void":
        r"""SetMaxChargeAidedHBondDistance(OEPerceiveInteractionOptions self, double const dist)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxChargeAidedHBondDistance(self, dist)

    def GetMaxChargeAidedHBondDistance(self) -> "double":
        r"""GetMaxChargeAidedHBondDistance(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxChargeAidedHBondDistance(self)

    def SetMaxNonIdealHBondDistance(self, dist: "double const") -> "void":
        r"""SetMaxNonIdealHBondDistance(OEPerceiveInteractionOptions self, double const dist)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxNonIdealHBondDistance(self, dist)

    def GetMaxNonIdealHBondDistance(self) -> "double":
        r"""GetMaxNonIdealHBondDistance(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxNonIdealHBondDistance(self)

    def SetMaxDonorAngle(self, radians: "double const") -> "void":
        r"""SetMaxDonorAngle(OEPerceiveInteractionOptions self, double const radians)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxDonorAngle(self, radians)

    def GetMaxDonorAngle(self) -> "double":
        r"""GetMaxDonorAngle(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxDonorAngle(self)

    def SetMaxAcceptorAngle(self, radians: "double const") -> "void":
        r"""SetMaxAcceptorAngle(OEPerceiveInteractionOptions self, double const radians)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxAcceptorAngle(self, radians)

    def GetMaxAcceptorAngle(self) -> "double":
        r"""GetMaxAcceptorAngle(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxAcceptorAngle(self)

    def SetMaxNonIdealDonorAngle(self, radians: "double const") -> "void":
        r"""SetMaxNonIdealDonorAngle(OEPerceiveInteractionOptions self, double const radians)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxNonIdealDonorAngle(self, radians)

    def GetMaxNonIdealDonorAngle(self) -> "double":
        r"""GetMaxNonIdealDonorAngle(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxNonIdealDonorAngle(self)

    def SetMaxNonIdealAcceptorAngle(self, radians: "double const") -> "void":
        r"""SetMaxNonIdealAcceptorAngle(OEPerceiveInteractionOptions self, double const radians)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxNonIdealAcceptorAngle(self, radians)

    def GetMaxNonIdealAcceptorAngle(self) -> "double":
        r"""GetMaxNonIdealAcceptorAngle(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxNonIdealAcceptorAngle(self)

    def SetMaxMetalBondDistance(self, dist: "double const") -> "void":
        r"""SetMaxMetalBondDistance(OEPerceiveInteractionOptions self, double const dist)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxMetalBondDistance(self, dist)

    def GetMaxMetalBondDistance(self) -> "double":
        r"""GetMaxMetalBondDistance(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxMetalBondDistance(self)

    def SetMaxSaltBridgeDistance(self, dist: "double const") -> "void":
        r"""SetMaxSaltBridgeDistance(OEPerceiveInteractionOptions self, double const dist)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxSaltBridgeDistance(self, dist)

    def GetMaxSaltBridgeDistance(self) -> "double":
        r"""GetMaxSaltBridgeDistance(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxSaltBridgeDistance(self)

    def GetExtendedSaltBridgeDistance(self) -> "double":
        r"""GetExtendedSaltBridgeDistance(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetExtendedSaltBridgeDistance(self)

    def SetMaxCationPiDistance(self, dist: "double const") -> "void":
        r"""SetMaxCationPiDistance(OEPerceiveInteractionOptions self, double const dist)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxCationPiDistance(self, dist)

    def GetMaxCationPiDistance(self) -> "double":
        r"""GetMaxCationPiDistance(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxCationPiDistance(self)

    def SetMaxCationPiAngle(self, radians: "double const") -> "void":
        r"""SetMaxCationPiAngle(OEPerceiveInteractionOptions self, double const radians)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxCationPiAngle(self, radians)

    def GetMaxCationPiAngle(self) -> "double":
        r"""GetMaxCationPiAngle(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxCationPiAngle(self)

    def SetMaxHalogenBondDistance(self, dist: "double const") -> "void":
        r"""SetMaxHalogenBondDistance(OEPerceiveInteractionOptions self, double const dist)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxHalogenBondDistance(self, dist)

    def GetMaxHalogenBondDistance(self) -> "double":
        r"""GetMaxHalogenBondDistance(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxHalogenBondDistance(self)

    def SetMaxHalogenAngle(self, radians: "double const") -> "void":
        r"""SetMaxHalogenAngle(OEPerceiveInteractionOptions self, double const radians)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxHalogenAngle(self, radians)

    def GetMaxHalogenAngle(self) -> "double":
        r"""GetMaxHalogenAngle(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxHalogenAngle(self)

    def SetMaxUnpairedDistance(self, dist: "double const") -> "void":
        r"""SetMaxUnpairedDistance(OEPerceiveInteractionOptions self, double const dist)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxUnpairedDistance(self, dist)

    def GetMaxUnpairedDistance(self) -> "double":
        r"""GetMaxUnpairedDistance(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxUnpairedDistance(self)

    def SetMaxUnpairedAngle(self, radians: "double const") -> "void":
        r"""SetMaxUnpairedAngle(OEPerceiveInteractionOptions self, double const radians)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxUnpairedAngle(self, radians)

    def GetMaxUnpairedAngle(self) -> "double":
        r"""GetMaxUnpairedAngle(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxUnpairedAngle(self)

    def GetMaxAtomPairDistance(self) -> "double":
        r"""GetMaxAtomPairDistance(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxAtomPairDistance(self)

    def SetMaxProteinIntraDistance(self, dist: "double const") -> "void":
        r"""SetMaxProteinIntraDistance(OEPerceiveInteractionOptions self, double const dist)"""
        return _oechem.OEPerceiveInteractionOptions_SetMaxProteinIntraDistance(self, dist)

    def GetMaxProteinIntraDistance(self) -> "double":
        r"""GetMaxProteinIntraDistance(OEPerceiveInteractionOptions self) -> double"""
        return _oechem.OEPerceiveInteractionOptions_GetMaxProteinIntraDistance(self)

# Register OEPerceiveInteractionOptions in _oechem:
_oechem.OEPerceiveInteractionOptions_swigregister(OEPerceiveInteractionOptions)


def OEPerceiveInteractionHints(*args) -> "bool":
    r"""
    OEPerceiveInteractionHints(OEInteractionHintContainer asite) -> bool
    OEPerceiveInteractionHints(OEInteractionHintContainer asite, OEPerceiveInteractionOptions opts) -> bool
    """
    return _oechem.OEPerceiveInteractionHints(*args)
class OEDesignUnitImpl(object):
    r"""Proxy of C++ OEBio::OEDesignUnitImpl class."""

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

    def IsValid(self):
      return _oechem.OEDesignUnitImpl___nonzero__(self)



    def Clear(self) -> "void":
        r"""Clear(OEDesignUnitImpl self)"""
        return _oechem.OEDesignUnitImpl_Clear(self)

    def GetTitle(self) -> "std::string":
        r"""GetTitle(OEDesignUnitImpl self) -> std::string"""
        return _oechem.OEDesignUnitImpl_GetTitle(self)

    def GetTargetComponentTag(self) -> "std::string":
        r"""GetTargetComponentTag(OEDesignUnitImpl self) -> std::string"""
        return _oechem.OEDesignUnitImpl_GetTargetComponentTag(self)

    def GetComponentTag(self, componentID: "unsigned int") -> "std::string":
        r"""GetComponentTag(OEDesignUnitImpl self, unsigned int componentID) -> std::string"""
        return _oechem.OEDesignUnitImpl_GetComponentTag(self, componentID)

    def GetTargetComponentID(self) -> "unsigned int":
        r"""GetTargetComponentID(OEDesignUnitImpl self) -> unsigned int"""
        return _oechem.OEDesignUnitImpl_GetTargetComponentID(self)

    def GetComponentID(self, componentTag: "std::string const &") -> "unsigned int":
        r"""GetComponentID(OEDesignUnitImpl self, std::string const & componentTag) -> unsigned int"""
        return _oechem.OEDesignUnitImpl_GetComponentID(self, componentTag)

    def GetSiteResidues(self) -> "std::vector< std::string,std::allocator< std::string > > const":
        r"""GetSiteResidues(OEDesignUnitImpl self) -> OEStringVector"""
        return _oechem.OEDesignUnitImpl_GetSiteResidues(self)

    def GetTags(self) -> "std::vector< std::string,std::allocator< std::string > > const":
        r"""GetTags(OEDesignUnitImpl self) -> OEStringVector"""
        return _oechem.OEDesignUnitImpl_GetTags(self)

    def GetIDs(self) -> "std::vector< unsigned int,std::allocator< unsigned int > > const":
        r"""GetIDs(OEDesignUnitImpl self) -> OEUIntVector"""
        return _oechem.OEDesignUnitImpl_GetIDs(self)

    def GetComponents(self, *args) -> "bool":
        r"""GetComponents(OEDesignUnitImpl self, OEMolBase mol, unsigned int const componentMask=, bool const setTmpTags=False, bool const includePDBData=False, bool const bondCovalent=True, OEUnaryAtomPred pred=OEChem::OEIsTrueAtom()) -> bool"""
        return _oechem.OEDesignUnitImpl_GetComponents(self, *args)

    def GetComponentsWithin(self, *args) -> "bool":
        r"""GetComponentsWithin(OEDesignUnitImpl self, OEMolBase mol, unsigned int const componentMask=, unsigned int const withinMask=, double const dist=5.0, bool const includeSelf=False, bool const includePDBData=True, bool const bondCovalent=True) -> bool"""
        return _oechem.OEDesignUnitImpl_GetComponentsWithin(self, *args)

    def SetTitle(self, title: "std::string const &") -> "bool":
        r"""SetTitle(OEDesignUnitImpl self, std::string const & title) -> bool"""
        return _oechem.OEDesignUnitImpl_SetTitle(self, title)

    def HasComponent(self, componentID: "unsigned int") -> "bool":
        r"""HasComponent(OEDesignUnitImpl self, unsigned int componentID) -> bool"""
        return _oechem.OEDesignUnitImpl_HasComponent(self, componentID)

    def HasTitle(self) -> "bool":
        r"""HasTitle(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasTitle(self)

    def HasProtein(self) -> "bool":
        r"""HasProtein(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasProtein(self)

    def HasLigand(self) -> "bool":
        r"""HasLigand(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasLigand(self)

    def HasSolvent(self) -> "bool":
        r"""HasSolvent(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasSolvent(self)

    def HasNucleicAcid(self) -> "bool":
        r"""HasNucleicAcid(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasNucleicAcid(self)

    def HasTarget(self) -> "bool":
        r"""HasTarget(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasTarget(self)

    def HasPackingResidues(self) -> "bool":
        r"""HasPackingResidues(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasPackingResidues(self)

    def HasSiteResidues(self) -> "bool":
        r"""HasSiteResidues(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasSiteResidues(self)

    def HasMetal(self) -> "bool":
        r"""HasMetal(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasMetal(self)

    def HasStructureQuality(self) -> "bool":
        r"""HasStructureQuality(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasStructureQuality(self)

    def HasReceptor(self) -> "bool":
        r"""HasReceptor(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasReceptor(self)

    def __init__(self, *args):
        r"""
        __init__(OEDesignUnitImpl self) -> OEDesignUnitImpl
        __init__(OEDesignUnitImpl self, OEDesignUnitImpl rhs) -> OEDesignUnitImpl
        """
        _oechem.OEDesignUnitImpl_swiginit(self, _oechem.new_OEDesignUnitImpl(*args))
    __swig_destroy__ = _oechem.delete_OEDesignUnitImpl

    def GetMetaData(self) -> "std::map< std::string,std::string > const":
        r"""GetMetaData(OEDesignUnitImpl self) -> std::map< std::string,std::string > const"""
        return _oechem.OEDesignUnitImpl_GetMetaData(self)

    def GetNewUserComponentID(self) -> "unsigned int":
        r"""GetNewUserComponentID(OEDesignUnitImpl self) -> unsigned int"""
        return _oechem.OEDesignUnitImpl_GetNewUserComponentID(self)

    def GetPDBMetaData(self, mol: "OEMolBase") -> "bool":
        r"""GetPDBMetaData(OEDesignUnitImpl self, OEMolBase mol) -> bool"""
        return _oechem.OEDesignUnitImpl_GetPDBMetaData(self, mol)

    def GetAltLoc(self) -> "std::string":
        r"""GetAltLoc(OEDesignUnitImpl self) -> std::string"""
        return _oechem.OEDesignUnitImpl_GetAltLoc(self)

    def GetSymAltNum(self) -> "unsigned int":
        r"""GetSymAltNum(OEDesignUnitImpl self) -> unsigned int"""
        return _oechem.OEDesignUnitImpl_GetSymAltNum(self)

    def GetMaxCovalentIdx(self) -> "unsigned int":
        r"""GetMaxCovalentIdx(OEDesignUnitImpl self) -> unsigned int"""
        return _oechem.OEDesignUnitImpl_GetMaxCovalentIdx(self)

    def GetListComponents(self, *args) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
        r"""
        GetListComponents(OEDesignUnitImpl self, unsigned int componentID) -> OESystem::OEIterBase< OEChem::OEMolBase const >
        GetListComponents(OEDesignUnitImpl self, unsigned int componentID) -> OESystem::OEIterBase< OEChem::OEMolBase > *
        """
        return _oechem.OEDesignUnitImpl_GetListComponents(self, *args)

    def GetComponent(self, *args) -> "OEChem::OEMolBase &":
        r"""
        GetComponent(OEDesignUnitImpl self, OEMolBase molecule, unsigned int componentID) -> bool
        GetComponent(OEDesignUnitImpl self, unsigned int componentID) -> OEMolBase
        GetComponent(OEDesignUnitImpl self, unsigned int componentID) -> OEMolBase
        """
        return _oechem.OEDesignUnitImpl_GetComponent(self, *args)

    def GetProtein(self, *args) -> "OEChem::OEMolBase &":
        r"""
        GetProtein(OEDesignUnitImpl self, OEMolBase molecule) -> bool
        GetProtein(OEDesignUnitImpl self) -> OEMolBase
        GetProtein(OEDesignUnitImpl self) -> OEMolBase
        """
        return _oechem.OEDesignUnitImpl_GetProtein(self, *args)

    def GetLigand(self, *args) -> "OEChem::OEMolBase &":
        r"""
        GetLigand(OEDesignUnitImpl self, OEMolBase molecule) -> bool
        GetLigand(OEDesignUnitImpl self) -> OEMolBase
        GetLigand(OEDesignUnitImpl self) -> OEMolBase
        """
        return _oechem.OEDesignUnitImpl_GetLigand(self, *args)

    def GetSolvent(self, *args) -> "OEChem::OEMolBase &":
        r"""
        GetSolvent(OEDesignUnitImpl self, OEMolBase molecule) -> bool
        GetSolvent(OEDesignUnitImpl self) -> OEMolBase
        GetSolvent(OEDesignUnitImpl self) -> OEMolBase
        """
        return _oechem.OEDesignUnitImpl_GetSolvent(self, *args)

    def GetMetal(self, *args) -> "OEChem::OEMolBase &":
        r"""
        GetMetal(OEDesignUnitImpl self, OEMolBase molecule) -> bool
        GetMetal(OEDesignUnitImpl self) -> OEMolBase
        GetMetal(OEDesignUnitImpl self) -> OEMolBase
        """
        return _oechem.OEDesignUnitImpl_GetMetal(self, *args)

    def GetTarget(self, *args) -> "OEChem::OEMolBase &":
        r"""
        GetTarget(OEDesignUnitImpl self, OEMolBase molecule) -> bool
        GetTarget(OEDesignUnitImpl self) -> OEMolBase
        GetTarget(OEDesignUnitImpl self) -> OEMolBase
        """
        return _oechem.OEDesignUnitImpl_GetTarget(self, *args)

    def GetNucleicAcid(self, *args) -> "OEChem::OEMolBase &":
        r"""
        GetNucleicAcid(OEDesignUnitImpl self, OEMolBase molecule) -> bool
        GetNucleicAcid(OEDesignUnitImpl self) -> OEMolBase
        GetNucleicAcid(OEDesignUnitImpl self) -> OEMolBase
        """
        return _oechem.OEDesignUnitImpl_GetNucleicAcid(self, *args)

    def GetPackingResidues(self, *args) -> "OEChem::OEMolBase &":
        r"""
        GetPackingResidues(OEDesignUnitImpl self, OEMolBase molecule) -> bool
        GetPackingResidues(OEDesignUnitImpl self) -> OEMolBase
        GetPackingResidues(OEDesignUnitImpl self) -> OEMolBase
        """
        return _oechem.OEDesignUnitImpl_GetPackingResidues(self, *args)

    def GetReceptor(self, *args) -> "OEBio::OEReceptor &":
        r"""
        GetReceptor(OEDesignUnitImpl self, OEReceptor receptor) -> bool
        GetReceptor(OEDesignUnitImpl self) -> OEReceptor
        GetReceptor(OEDesignUnitImpl self) -> OEReceptor
        """
        return _oechem.OEDesignUnitImpl_GetReceptor(self, *args)

    def GetStructureQuality(self, *args) -> "OEBio::OEStructureQuality":
        r"""
        GetStructureQuality(OEDesignUnitImpl self) -> OEStructureQuality
        GetStructureQuality(OEDesignUnitImpl self) -> OEStructureQuality
        """
        return _oechem.OEDesignUnitImpl_GetStructureQuality(self, *args)

    def GetTransform(self, *args) -> "OEChem::OETrans &":
        r"""
        GetTransform(OEDesignUnitImpl self, OETrans trans) -> bool
        GetTransform(OEDesignUnitImpl self) -> OETrans
        GetTransform(OEDesignUnitImpl self) -> OETrans
        """
        return _oechem.OEDesignUnitImpl_GetTransform(self, *args)

    def GetComponentMap(self) -> "std::map< unsigned int,std::unique_ptr< OEChem::OEMolBase > > const &":
        r"""GetComponentMap(OEDesignUnitImpl self) -> std::map< unsigned int,std::unique_ptr< OEChem::OEMolBase > > const &"""
        return _oechem.OEDesignUnitImpl_GetComponentMap(self)

    def GetContainerMap(self) -> "std::map< unsigned int,std::vector< std::unique_ptr< OEChem::OEMolBase >,std::allocator< std::unique_ptr< OEChem::OEMolBase > > > > const &":
        r"""GetContainerMap(OEDesignUnitImpl self) -> std::map< unsigned int,std::vector< std::unique_ptr< OEChem::OEMolBase >,std::allocator< std::unique_ptr< OEChem::OEMolBase > > > > const &"""
        return _oechem.OEDesignUnitImpl_GetContainerMap(self)

    def GetTagMap(self) -> "std::map< unsigned int,std::string > const &":
        r"""GetTagMap(OEDesignUnitImpl self) -> std::map< unsigned int,std::string > const &"""
        return _oechem.OEDesignUnitImpl_GetTagMap(self)

    def GetPDBMetaDataMol(self) -> "OEChem::OEMolBase const &":
        r"""GetPDBMetaDataMol(OEDesignUnitImpl self) -> OEMolBase"""
        return _oechem.OEDesignUnitImpl_GetPDBMetaDataMol(self)

    def SetAltLoc(self, altloc: "std::string const &") -> "bool":
        r"""SetAltLoc(OEDesignUnitImpl self, std::string const & altloc) -> bool"""
        return _oechem.OEDesignUnitImpl_SetAltLoc(self, altloc)

    def SetMaxCovalentIdx(self, maxCovIdx: "unsigned int") -> "bool":
        r"""SetMaxCovalentIdx(OEDesignUnitImpl self, unsigned int maxCovIdx) -> bool"""
        return _oechem.OEDesignUnitImpl_SetMaxCovalentIdx(self, maxCovIdx)

    def SetSymAltNum(self, symAltNum: "unsigned int const") -> "bool":
        r"""SetSymAltNum(OEDesignUnitImpl self, unsigned int const symAltNum) -> bool"""
        return _oechem.OEDesignUnitImpl_SetSymAltNum(self, symAltNum)

    def SetSymOp(self, symop: "bool") -> "bool":
        r"""SetSymOp(OEDesignUnitImpl self, bool symop) -> bool"""
        return _oechem.OEDesignUnitImpl_SetSymOp(self, symop)

    def SetTargetComponent(self, *args) -> "bool":
        r"""
        SetTargetComponent(OEDesignUnitImpl self, unsigned int componentID) -> bool
        SetTargetComponent(OEDesignUnitImpl self, std::string const & componentTag) -> bool
        """
        return _oechem.OEDesignUnitImpl_SetTargetComponent(self, *args)

    def SetComponent(self, *args) -> "bool":
        r"""
        SetComponent(OEDesignUnitImpl self, unsigned int componentID, OEMolBase mol, int const arg4=-1) -> bool
        SetComponent(OEDesignUnitImpl self, std::string const & componentTag, OEMolBase mol, int const arg4=-1) -> bool
        """
        return _oechem.OEDesignUnitImpl_SetComponent(self, *args)

    def SetUserComponent(self, componentTag: "std::string const &", mol: "OEMolBase") -> "bool":
        r"""SetUserComponent(OEDesignUnitImpl self, std::string const & componentTag, OEMolBase mol) -> bool"""
        return _oechem.OEDesignUnitImpl_SetUserComponent(self, componentTag, mol)

    def SetTarget(self, target: "OEMolBase") -> "bool":
        r"""SetTarget(OEDesignUnitImpl self, OEMolBase target) -> bool"""
        return _oechem.OEDesignUnitImpl_SetTarget(self, target)

    def SetProtein(self, protein: "OEMolBase") -> "bool":
        r"""SetProtein(OEDesignUnitImpl self, OEMolBase protein) -> bool"""
        return _oechem.OEDesignUnitImpl_SetProtein(self, protein)

    def SetNucleicAcid(self, nucleicAcid: "OEMolBase") -> "bool":
        r"""SetNucleicAcid(OEDesignUnitImpl self, OEMolBase nucleicAcid) -> bool"""
        return _oechem.OEDesignUnitImpl_SetNucleicAcid(self, nucleicAcid)

    def SetLigand(self, ligand: "OEMolBase") -> "bool":
        r"""SetLigand(OEDesignUnitImpl self, OEMolBase ligand) -> bool"""
        return _oechem.OEDesignUnitImpl_SetLigand(self, ligand)

    def SetSolvent(self, solvent: "OEMolBase") -> "bool":
        r"""SetSolvent(OEDesignUnitImpl self, OEMolBase solvent) -> bool"""
        return _oechem.OEDesignUnitImpl_SetSolvent(self, solvent)

    def SetMetal(self, metal: "OEMolBase") -> "bool":
        r"""SetMetal(OEDesignUnitImpl self, OEMolBase metal) -> bool"""
        return _oechem.OEDesignUnitImpl_SetMetal(self, metal)

    def SetLipid(self, lipid: "OEMolBase") -> "bool":
        r"""SetLipid(OEDesignUnitImpl self, OEMolBase lipid) -> bool"""
        return _oechem.OEDesignUnitImpl_SetLipid(self, lipid)

    def SetPackingResidues(self, packingResidues: "OEMolBase") -> "bool":
        r"""SetPackingResidues(OEDesignUnitImpl self, OEMolBase packingResidues) -> bool"""
        return _oechem.OEDesignUnitImpl_SetPackingResidues(self, packingResidues)

    def SetSiteResidues(self, siteResidues: "OEStringVector") -> "bool":
        r"""SetSiteResidues(OEDesignUnitImpl self, OEStringVector siteResidues) -> bool"""
        return _oechem.OEDesignUnitImpl_SetSiteResidues(self, siteResidues)

    def SetPDBMetaData(self, sourceMol: "OEMolBase") -> "bool":
        r"""SetPDBMetaData(OEDesignUnitImpl self, OEMolBase sourceMol) -> bool"""
        return _oechem.OEDesignUnitImpl_SetPDBMetaData(self, sourceMol)

    def SetMetaData(self, meta: "std::map< std::string,std::string > const &") -> "bool":
        r"""SetMetaData(OEDesignUnitImpl self, std::map< std::string,std::string > const & meta) -> bool"""
        return _oechem.OEDesignUnitImpl_SetMetaData(self, meta)

    def SetReceptor(self, receptor: "OEReceptor") -> "bool":
        r"""SetReceptor(OEDesignUnitImpl self, OEReceptor receptor) -> bool"""
        return _oechem.OEDesignUnitImpl_SetReceptor(self, receptor)

    def SetTransform(self, *args) -> "bool":
        r"""
        SetTransform(OEDesignUnitImpl self, OETrans transform) -> bool
        SetTransform(OEDesignUnitImpl self, OETransBase transform) -> bool
        """
        return _oechem.OEDesignUnitImpl_SetTransform(self, *args)

    def AddTransform(self, *args) -> "bool":
        r"""
        AddTransform(OEDesignUnitImpl self, OETrans transform) -> bool
        AddTransform(OEDesignUnitImpl self, OETransBase transform) -> bool
        """
        return _oechem.OEDesignUnitImpl_AddTransform(self, *args)

    def SetStructureQuality(self, structureQuality: "OEStructureQuality") -> "bool":
        r"""SetStructureQuality(OEDesignUnitImpl self, OEStructureQuality structureQuality) -> bool"""
        return _oechem.OEDesignUnitImpl_SetStructureQuality(self, structureQuality)

    def SetComponentsFromData(self, mol: "OEMolBase", updateAtomSerials: "bool"=True) -> "bool":
        r"""SetComponentsFromData(OEDesignUnitImpl self, OEMolBase mol, bool updateAtomSerials=True) -> bool"""
        return _oechem.OEDesignUnitImpl_SetComponentsFromData(self, mol, updateAtomSerials)

    def ClearComponent(self, *args) -> "bool":
        r"""
        ClearComponent(OEDesignUnitImpl self, std::string const & componentTag) -> bool
        ClearComponent(OEDesignUnitImpl self, unsigned int componentID) -> bool
        """
        return _oechem.OEDesignUnitImpl_ClearComponent(self, *args)

    def ClearReceptor(self) -> "bool":
        r"""ClearReceptor(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_ClearReceptor(self)

    def OECleanRGroupData(self, mol: "OEMolBase", tag: "std::string") -> "void":
        r"""OECleanRGroupData(OEDesignUnitImpl self, OEMolBase mol, std::string tag)"""
        return _oechem.OEDesignUnitImpl_OECleanRGroupData(self, mol, tag)

    def CleanAtomData(self, updateAtomSerials: "bool const"=True, rGroupRepos: "bool const"=True, orderAtoms: "bool const"=True) -> "void":
        r"""CleanAtomData(OEDesignUnitImpl self, bool const updateAtomSerials=True, bool const rGroupRepos=True, bool const orderAtoms=True)"""
        return _oechem.OEDesignUnitImpl_CleanAtomData(self, updateAtomSerials, rGroupRepos, orderAtoms)

    def OESetInternalComponentName(self, mol: "OEMolBase") -> "void":
        r"""OESetInternalComponentName(OEDesignUnitImpl self, OEMolBase mol)"""
        return _oechem.OEDesignUnitImpl_OESetInternalComponentName(self, mol)

    def HasTransform(self) -> "bool":
        r"""HasTransform(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasTransform(self)

    def HasPDBMetaData(self) -> "bool":
        r"""HasPDBMetaData(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasPDBMetaData(self)

    def HasMetaData(self) -> "bool":
        r"""HasMetaData(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasMetaData(self)

    def HasSymOp(self) -> "bool":
        r"""HasSymOp(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasSymOp(self)

    def HasAltLoc(self) -> "bool":
        r"""HasAltLoc(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasAltLoc(self)

    def HasSymAltNum(self) -> "bool":
        r"""HasSymAltNum(OEDesignUnitImpl self) -> bool"""
        return _oechem.OEDesignUnitImpl_HasSymAltNum(self)

# Register OEDesignUnitImpl in _oechem:
_oechem.OEDesignUnitImpl_swigregister(OEDesignUnitImpl)

class OESphereIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEMath::OESphere > 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__(OESphereIter self) -> OESphereIter
        __init__(OESphereIter self, OESphereIter rhs) -> OESphereIter
        __init__(OESphereIter self, OESystem::OEIterBase< OEMath::OESphere > * rhs) -> OESphereIter
        __init__(OESphereIter self, OESystem::OEIterBase< OESystem::OEIter< OEMath::OESphere >::NonConstA > * rhs) -> OESphereIter
        """
        _oechem.OESphereIter_swiginit(self, _oechem.new_OESphereIter(*args))
    __swig_destroy__ = _oechem.delete_OESphereIter

    def Copy(self) -> "OESystem::OEIterBase< OEMath::OESphere > *":
        r"""Copy(OESphereIter self) -> OESystem::OEIterBase< OEMath::OESphere > *"""
        return _oechem.OESphereIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OESphereIter self, OESystem::OEIterBase< OEMath::OESphere > * ib)
        Push(OESphereIter self, OESphereIter iter)
        """
        return _oechem.OESphereIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEMath::OESphere,OEMath::OESphere > const &") -> "void":
        r"""Sort(OESphereIter self, OESystem::OEBinaryPredicate< OEMath::OESphere,OEMath::OESphere > const & sort_criterion)"""
        return _oechem.OESphereIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEMath::OESphere > &":
        r"""ToFirst(OESphereIter self) -> OESphereIter"""
        return _oechem.OESphereIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEMath::OESphere > &":
        r"""ToLast(OESphereIter self) -> OESphereIter"""
        return _oechem.OESphereIter_ToLast(self)

    def __ref__(self) -> "OEMath::OESphere &":
        r"""__ref__(OESphereIter self) -> OESphere"""
        return _oechem.OESphereIter___ref__(self)

    def IsValid(self):
      return _oechem.OESphereIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OESphereIter self) -> PyObject *"""
        return _oechem.OESphereIter_next(self)

    def Target(self) -> "OEMath::OESphere &":
        r"""Target(OESphereIter self) -> OESphere"""
        return _oechem.OESphereIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEMath::OESphere > &":
        r"""
        Next(OESphereIter self) -> OESphereIter
        Next(OESphereIter self, int i) -> OESphereIter
        """
        return _oechem.OESphereIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEMath::OESphere > &":
        r"""
        Prev(OESphereIter self) -> OESphereIter
        Prev(OESphereIter self, int i) -> OESphereIter
        """
        return _oechem.OESphereIter_Prev(self, *args)

# Register OESphereIter in _oechem:
_oechem.OESphereIter_swigregister(OESphereIter)

class OEConstProteinConstraintIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OEReceptorProteinConstraint > 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__(OEConstProteinConstraintIter self) -> OEConstProteinConstraintIter
        __init__(OEConstProteinConstraintIter self, OEConstProteinConstraintIter rhs) -> OEConstProteinConstraintIter
        __init__(OEConstProteinConstraintIter self, OESystem::OEIterBase< OEBio::OEReceptorProteinConstraint > * rhs) -> OEConstProteinConstraintIter
        __init__(OEConstProteinConstraintIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEReceptorProteinConstraint >::NonConstA > * rhs) -> OEConstProteinConstraintIter
        """
        _oechem.OEConstProteinConstraintIter_swiginit(self, _oechem.new_OEConstProteinConstraintIter(*args))
    __swig_destroy__ = _oechem.delete_OEConstProteinConstraintIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OEReceptorProteinConstraint > *":
        r"""Copy(OEConstProteinConstraintIter self) -> OESystem::OEIterBase< OEBio::OEReceptorProteinConstraint > *"""
        return _oechem.OEConstProteinConstraintIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEConstProteinConstraintIter self, OESystem::OEIterBase< OEBio::OEReceptorProteinConstraint > * ib)
        Push(OEConstProteinConstraintIter self, OEConstProteinConstraintIter iter)
        """
        return _oechem.OEConstProteinConstraintIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OEReceptorProteinConstraint,OEBio::OEReceptorProteinConstraint > const &") -> "void":
        r"""Sort(OEConstProteinConstraintIter self, OESystem::OEBinaryPredicate< OEBio::OEReceptorProteinConstraint,OEBio::OEReceptorProteinConstraint > const & sort_criterion)"""
        return _oechem.OEConstProteinConstraintIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OEReceptorProteinConstraint > &":
        r"""ToFirst(OEConstProteinConstraintIter self) -> OEConstProteinConstraintIter"""
        return _oechem.OEConstProteinConstraintIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OEReceptorProteinConstraint > &":
        r"""ToLast(OEConstProteinConstraintIter self) -> OEConstProteinConstraintIter"""
        return _oechem.OEConstProteinConstraintIter_ToLast(self)

    def __ref__(self) -> "OEBio::OEReceptorProteinConstraint &":
        r"""__ref__(OEConstProteinConstraintIter self) -> OEReceptorProteinConstraint"""
        return _oechem.OEConstProteinConstraintIter___ref__(self)

    def IsValid(self):
      return _oechem.OEConstProteinConstraintIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEConstProteinConstraintIter self) -> PyObject *"""
        return _oechem.OEConstProteinConstraintIter_next(self)

    def Target(self) -> "OEBio::OEReceptorProteinConstraint &":
        r"""Target(OEConstProteinConstraintIter self) -> OEReceptorProteinConstraint"""
        return _oechem.OEConstProteinConstraintIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OEReceptorProteinConstraint > &":
        r"""
        Next(OEConstProteinConstraintIter self) -> OEConstProteinConstraintIter
        Next(OEConstProteinConstraintIter self, int i) -> OEConstProteinConstraintIter
        """
        return _oechem.OEConstProteinConstraintIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OEReceptorProteinConstraint > &":
        r"""
        Prev(OEConstProteinConstraintIter self) -> OEConstProteinConstraintIter
        Prev(OEConstProteinConstraintIter self, int i) -> OEConstProteinConstraintIter
        """
        return _oechem.OEConstProteinConstraintIter_Prev(self, *args)

# Register OEConstProteinConstraintIter in _oechem:
_oechem.OEConstProteinConstraintIter_swigregister(OEConstProteinConstraintIter)

class OEFeatureIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OEReceptorConstraintFeature > 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__(OEFeatureIter self) -> OEFeatureIter
        __init__(OEFeatureIter self, OEFeatureIter rhs) -> OEFeatureIter
        __init__(OEFeatureIter self, OESystem::OEIterBase< OEBio::OEReceptorConstraintFeature > * rhs) -> OEFeatureIter
        __init__(OEFeatureIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEReceptorConstraintFeature >::NonConstA > * rhs) -> OEFeatureIter
        """
        _oechem.OEFeatureIter_swiginit(self, _oechem.new_OEFeatureIter(*args))
    __swig_destroy__ = _oechem.delete_OEFeatureIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OEReceptorConstraintFeature > *":
        r"""Copy(OEFeatureIter self) -> OESystem::OEIterBase< OEBio::OEReceptorConstraintFeature > *"""
        return _oechem.OEFeatureIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEFeatureIter self, OESystem::OEIterBase< OEBio::OEReceptorConstraintFeature > * ib)
        Push(OEFeatureIter self, OEFeatureIter iter)
        """
        return _oechem.OEFeatureIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OEReceptorConstraintFeature,OEBio::OEReceptorConstraintFeature > const &") -> "void":
        r"""Sort(OEFeatureIter self, OESystem::OEBinaryPredicate< OEBio::OEReceptorConstraintFeature,OEBio::OEReceptorConstraintFeature > const & sort_criterion)"""
        return _oechem.OEFeatureIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OEReceptorConstraintFeature > &":
        r"""ToFirst(OEFeatureIter self) -> OEFeatureIter"""
        return _oechem.OEFeatureIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OEReceptorConstraintFeature > &":
        r"""ToLast(OEFeatureIter self) -> OEFeatureIter"""
        return _oechem.OEFeatureIter_ToLast(self)

    def __ref__(self) -> "OEBio::OEReceptorConstraintFeature &":
        r"""__ref__(OEFeatureIter self) -> OEReceptorConstraintFeature"""
        return _oechem.OEFeatureIter___ref__(self)

    def IsValid(self):
      return _oechem.OEFeatureIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEFeatureIter self) -> PyObject *"""
        return _oechem.OEFeatureIter_next(self)

    def Target(self) -> "OEBio::OEReceptorConstraintFeature &":
        r"""Target(OEFeatureIter self) -> OEReceptorConstraintFeature"""
        return _oechem.OEFeatureIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OEReceptorConstraintFeature > &":
        r"""
        Next(OEFeatureIter self) -> OEFeatureIter
        Next(OEFeatureIter self, int i) -> OEFeatureIter
        """
        return _oechem.OEFeatureIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OEReceptorConstraintFeature > &":
        r"""
        Prev(OEFeatureIter self) -> OEFeatureIter
        Prev(OEFeatureIter self, int i) -> OEFeatureIter
        """
        return _oechem.OEFeatureIter_Prev(self, *args)

# Register OEFeatureIter in _oechem:
_oechem.OEFeatureIter_swigregister(OEFeatureIter)

class OEMatrix(object):
    r"""Proxy of C++ OEMath::OEMatrix 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__(OEMatrix self) -> OEMatrix
        __init__(OEMatrix self, OEMatrix arg2) -> OEMatrix
        __init__(OEMatrix self, unsigned int const numRow, unsigned int const numCol, double const initialValue=0.0) -> OEMatrix
        """
        _oechem.OEMatrix_swiginit(self, _oechem.new_OEMatrix(*args))
    __swig_destroy__ = _oechem.delete_OEMatrix

    def Resize(self, numRow: "unsigned int const", numCol: "unsigned int const", initialValue: "double const"=0.0) -> "void":
        r"""Resize(OEMatrix self, unsigned int const numRow, unsigned int const numCol, double const initialValue=0.0)"""
        return _oechem.OEMatrix_Resize(self, numRow, numCol, initialValue)

    def AddRow(self, initialValue: "double const"=0.0) -> "void":
        r"""AddRow(OEMatrix self, double const initialValue=0.0)"""
        return _oechem.OEMatrix_AddRow(self, initialValue)

    def SetRowData(self, iRow: "unsigned int const", vecValues: "OEDoubleVector") -> "void":
        r"""SetRowData(OEMatrix self, unsigned int const iRow, OEDoubleVector vecValues)"""
        return _oechem.OEMatrix_SetRowData(self, iRow, vecValues)

    def GetData(self) -> "std::vector< double,std::allocator< double > > const &":
        r"""GetData(OEMatrix self) -> OEDoubleVector"""
        return _oechem.OEMatrix_GetData(self)

    def Clear(self) -> "void":
        r"""Clear(OEMatrix self)"""
        return _oechem.OEMatrix_Clear(self)

    def __call__(self, *args) -> "double const &":
        r"""
        __call__(OEMatrix self, unsigned int const iRow, unsigned int const iCol) -> double
        __call__(OEMatrix self, unsigned int const iRow, unsigned int const iCol) -> double const &
        """
        return _oechem.OEMatrix___call__(self, *args)

    def GetNumRows(self) -> "unsigned int":
        r"""GetNumRows(OEMatrix self) -> unsigned int"""
        return _oechem.OEMatrix_GetNumRows(self)

    def GetNumColumns(self) -> "unsigned int":
        r"""GetNumColumns(OEMatrix self) -> unsigned int"""
        return _oechem.OEMatrix_GetNumColumns(self)

    def __imul__(self, scale: "double") -> "OEMath::OEMatrix &":
        r"""__imul__(OEMatrix self, double scale) -> OEMatrix"""
        return _oechem.OEMatrix___imul__(self, scale)

    def __mul__(self, *args) -> "OEMath::OEMatrix":
        r"""
        __mul__(OEMatrix self, double const scale) -> OEMatrix
        __mul__(OEMatrix self, OEMatrix rhs) -> OEMatrix
        """
        return _oechem.OEMatrix___mul__(self, *args)

    def __iadd__(self, rhs: "OEMatrix") -> "OEMath::OEMatrix &":
        r"""__iadd__(OEMatrix self, OEMatrix rhs) -> OEMatrix"""
        return _oechem.OEMatrix___iadd__(self, rhs)

    def __add__(self, rhs: "OEMatrix") -> "OEMath::OEMatrix":
        r"""__add__(OEMatrix self, OEMatrix rhs) -> OEMatrix"""
        return _oechem.OEMatrix___add__(self, rhs)

    def __isub__(self, rhs: "OEMatrix") -> "OEMath::OEMatrix &":
        r"""__isub__(OEMatrix self, OEMatrix rhs) -> OEMatrix"""
        return _oechem.OEMatrix___isub__(self, rhs)

    def __sub__(self, rhs: "OEMatrix") -> "OEMath::OEMatrix":
        r"""__sub__(OEMatrix self, OEMatrix rhs) -> OEMatrix"""
        return _oechem.OEMatrix___sub__(self, rhs)

    def Transpose(self) -> "OEMath::OEMatrix":
        r"""Transpose(OEMatrix self) -> OEMatrix"""
        return _oechem.OEMatrix_Transpose(self)

# Register OEMatrix in _oechem:
_oechem.OEMatrix_swigregister(OEMatrix)

class OESquareMatrix(OEMatrix):
    r"""Proxy of C++ OEMath::OESquareMatrix 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__(OESquareMatrix self) -> OESquareMatrix
        __init__(OESquareMatrix self, unsigned int const numRows, double const initialValue=0.0) -> OESquareMatrix
        __init__(OESquareMatrix self, OESquareMatrix arg2) -> OESquareMatrix
        """
        _oechem.OESquareMatrix_swiginit(self, _oechem.new_OESquareMatrix(*args))
    __swig_destroy__ = _oechem.delete_OESquareMatrix

    def Resize(self, numRow: "unsigned int const", initialValue: "double const"=0.0) -> "void":
        r"""Resize(OESquareMatrix self, unsigned int const numRow, double const initialValue=0.0)"""
        return _oechem.OESquareMatrix_Resize(self, numRow, initialValue)

    def Minor(self, iRow: "unsigned int const", iCol: "unsigned int const") -> "OEMath::OESquareMatrix":
        r"""Minor(OESquareMatrix self, unsigned int const iRow, unsigned int const iCol) -> OESquareMatrix"""
        return _oechem.OESquareMatrix_Minor(self, iRow, iCol)

    def Determinant(self) -> "double":
        r"""Determinant(OESquareMatrix self) -> double"""
        return _oechem.OESquareMatrix_Determinant(self)

    def Invert(self) -> "OEMath::OESquareMatrix":
        r"""Invert(OESquareMatrix self) -> OESquareMatrix"""
        return _oechem.OESquareMatrix_Invert(self)

# Register OESquareMatrix in _oechem:
_oechem.OESquareMatrix_swigregister(OESquareMatrix)

class OEKernelPLS(object):
    r"""Proxy of C++ OEMath::OEKernelPLS 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__(OEKernelPLS self) -> OEKernelPLS
        __init__(OEKernelPLS self, OEKernelPLS arg2) -> OEKernelPLS
        """
        _oechem.OEKernelPLS_swiginit(self, _oechem.new_OEKernelPLS(*args))
    __swig_destroy__ = _oechem.delete_OEKernelPLS

    def Fit(self, kernel: "OESquareMatrix", vecResponse: "OEDoubleVector", maxFeatures: "unsigned int const") -> "bool":
        r"""Fit(OEKernelPLS self, OESquareMatrix kernel, OEDoubleVector vecResponse, unsigned int const maxFeatures) -> bool"""
        return _oechem.OEKernelPLS_Fit(self, kernel, vecResponse, maxFeatures)

    def GetBValues(self) -> "std::vector< double,std::allocator< double > > const &":
        r"""GetBValues(OEKernelPLS self) -> OEDoubleVector"""
        return _oechem.OEKernelPLS_GetBValues(self)

    def GetB0(self) -> "double":
        r"""GetB0(OEKernelPLS self) -> double"""
        return _oechem.OEKernelPLS_GetB0(self)

    def GetNumFeaturesUsed(self) -> "unsigned int":
        r"""GetNumFeaturesUsed(OEKernelPLS self) -> unsigned int"""
        return _oechem.OEKernelPLS_GetNumFeaturesUsed(self)

    def Predict(self, kernel: "OEDoubleVector") -> "double":
        r"""Predict(OEKernelPLS self, OEDoubleVector kernel) -> double"""
        return _oechem.OEKernelPLS_Predict(self, kernel)

# Register OEKernelPLS in _oechem:
_oechem.OEKernelPLS_swigregister(OEKernelPLS)

class OEBox(object):
    r"""Proxy of C++ OEMath::OEBox 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__(OEBox self) -> OEBox
        __init__(OEBox self, OEBox arg2) -> OEBox
        """
        _oechem.OEBox_swiginit(self, _oechem.new_OEBox(*args))
    __swig_destroy__ = _oechem.delete_OEBox

    def GetXMax(self) -> "float":
        r"""GetXMax(OEBox self) -> float"""
        return _oechem.OEBox_GetXMax(self)

    def GetYMax(self) -> "float":
        r"""GetYMax(OEBox self) -> float"""
        return _oechem.OEBox_GetYMax(self)

    def GetZMax(self) -> "float":
        r"""GetZMax(OEBox self) -> float"""
        return _oechem.OEBox_GetZMax(self)

    def GetXMin(self) -> "float":
        r"""GetXMin(OEBox self) -> float"""
        return _oechem.OEBox_GetXMin(self)

    def GetYMin(self) -> "float":
        r"""GetYMin(OEBox self) -> float"""
        return _oechem.OEBox_GetYMin(self)

    def GetZMin(self) -> "float":
        r"""GetZMin(OEBox self) -> float"""
        return _oechem.OEBox_GetZMin(self)

    def GetXMid(self) -> "float":
        r"""GetXMid(OEBox self) -> float"""
        return _oechem.OEBox_GetXMid(self)

    def GetYMid(self) -> "float":
        r"""GetYMid(OEBox self) -> float"""
        return _oechem.OEBox_GetYMid(self)

    def GetZMid(self) -> "float":
        r"""GetZMid(OEBox self) -> float"""
        return _oechem.OEBox_GetZMid(self)

    def GetXDim(self) -> "float":
        r"""GetXDim(OEBox self) -> float"""
        return _oechem.OEBox_GetXDim(self)

    def GetYDim(self) -> "float":
        r"""GetYDim(OEBox self) -> float"""
        return _oechem.OEBox_GetYDim(self)

    def GetZDim(self) -> "float":
        r"""GetZDim(OEBox self) -> float"""
        return _oechem.OEBox_GetZDim(self)

    def Setup(self, *args) -> "bool":
        r"""
        Setup(OEBox self, float const x1, float const y1, float const z1, float const x2, float const y2, float const z2) -> bool
        Setup(OEBox self, float const * xyz, unsigned int const numPoints, float const addbox=0.0) -> bool
        Setup(OEBox self, float const * center, float const * extents) -> bool
        """
        return _oechem.OEBox_Setup(self, *args)

    def Extend(self, *args) -> "bool":
        r"""
        Extend(OEBox self, float const x, float const y, float const z) -> bool
        Extend(OEBox self, float const value) -> bool
        """
        return _oechem.OEBox_Extend(self, *args)

    def Translate(self, x: "float const", y: "float const", z: "float const") -> "bool":
        r"""Translate(OEBox self, float const x, float const y, float const z) -> bool"""
        return _oechem.OEBox_Translate(self, x, y, z)

    def GetVolume(self) -> "float":
        r"""GetVolume(OEBox self) -> float"""
        return _oechem.OEBox_GetVolume(self)

    def GetArea(self) -> "float":
        r"""GetArea(OEBox self) -> float"""
        return _oechem.OEBox_GetArea(self)

    def IsInside(self, x: "float const", y: "float const", z: "float const") -> "bool":
        r"""IsInside(OEBox self, float const x, float const y, float const z) -> bool"""
        return _oechem.OEBox_IsInside(self, x, y, z)

# Register OEBox in _oechem:
_oechem.OEBox_swigregister(OEBox)

class OESphere(object):
    r"""Proxy of C++ OEMath::OESphere 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__(OESphere self) -> OESphere
        __init__(OESphere self, float const x, float const y, float const z, float const rad) -> OESphere
        __init__(OESphere self, OESphere arg2) -> OESphere
        """
        _oechem.OESphere_swiginit(self, _oechem.new_OESphere(*args))
    __swig_destroy__ = _oechem.delete_OESphere

    def GetX(self) -> "float":
        r"""GetX(OESphere self) -> float"""
        return _oechem.OESphere_GetX(self)

    def GetY(self) -> "float":
        r"""GetY(OESphere self) -> float"""
        return _oechem.OESphere_GetY(self)

    def GetZ(self) -> "float":
        r"""GetZ(OESphere self) -> float"""
        return _oechem.OESphere_GetZ(self)

    def GetRad(self) -> "float":
        r"""GetRad(OESphere self) -> float"""
        return _oechem.OESphere_GetRad(self)

    def SetRad(self, rad: "float const") -> "bool":
        r"""SetRad(OESphere self, float const rad) -> bool"""
        return _oechem.OESphere_SetRad(self, rad)

    def SetCenter(self, x: "float const", y: "float const", z: "float const") -> "bool":
        r"""SetCenter(OESphere self, float const x, float const y, float const z) -> bool"""
        return _oechem.OESphere_SetCenter(self, x, y, z)

    def GetVolume(self) -> "float":
        r"""GetVolume(OESphere self) -> float"""
        return _oechem.OESphere_GetVolume(self)

    def GetArea(self) -> "float":
        r"""GetArea(OESphere self) -> float"""
        return _oechem.OESphere_GetArea(self)

    def IsInside(self, x: "float const", y: "float const", z: "float const") -> "bool":
        r"""IsInside(OESphere self, float const x, float const y, float const z) -> bool"""
        return _oechem.OESphere_IsInside(self, x, y, z)

# Register OESphere in _oechem:
_oechem.OESphere_swigregister(OESphere)


def OEBoxExtend(*args) -> "bool":
    r"""
    OEBoxExtend(OEBox box, float const x, float const y, float const z) -> bool
    OEBoxExtend(OEBox box, float const value) -> bool
    """
    return _oechem.OEBoxExtend(*args)

def OEBoxTranslate(box: "OEBox", x: "float const", y: "float const", z: "float const") -> "bool":
    r"""OEBoxTranslate(OEBox box, float const x, float const y, float const z) -> bool"""
    return _oechem.OEBoxTranslate(box, x, y, z)

def OEBoxVolume(box: "OEBox") -> "float":
    r"""OEBoxVolume(OEBox box) -> float"""
    return _oechem.OEBoxVolume(box)

def OEBoxArea(box: "OEBox") -> "float":
    r"""OEBoxArea(OEBox box) -> float"""
    return _oechem.OEBoxArea(box)

def OEInBox(box: "OEBox", x: "float const", y: "float const", z: "float const") -> "bool":
    r"""OEInBox(OEBox box, float const x, float const y, float const z) -> bool"""
    return _oechem.OEInBox(box, x, y, z)

def OEBoxXMid(box: "OEBox") -> "float":
    r"""OEBoxXMid(OEBox box) -> float"""
    return _oechem.OEBoxXMid(box)

def OEBoxYMid(box: "OEBox") -> "float":
    r"""OEBoxYMid(OEBox box) -> float"""
    return _oechem.OEBoxYMid(box)

def OEBoxZMid(box: "OEBox") -> "float":
    r"""OEBoxZMid(OEBox box) -> float"""
    return _oechem.OEBoxZMid(box)

def OEBoxXDim(box: "OEBox") -> "float":
    r"""OEBoxXDim(OEBox box) -> float"""
    return _oechem.OEBoxXDim(box)

def OEBoxYDim(box: "OEBox") -> "float":
    r"""OEBoxYDim(OEBox box) -> float"""
    return _oechem.OEBoxYDim(box)

def OEBoxZDim(box: "OEBox") -> "float":
    r"""OEBoxZDim(OEBox box) -> float"""
    return _oechem.OEBoxZDim(box)

def OESetupBox(arg1: "OEBox", xyz: "float const *", numPoints: "unsigned int const", addbox: "float const"=0.0) -> "bool":
    r"""OESetupBox(OEBox arg1, float const * xyz, unsigned int const numPoints, float const addbox=0.0) -> bool"""
    return _oechem.OESetupBox(arg1, xyz, numPoints, addbox)

def OESetupBoxCenterAndExtents(arg1: "OEBox", center: "float const *", extents: "float const *") -> "bool":
    r"""OESetupBoxCenterAndExtents(OEBox arg1, float const * center, float const * extents) -> bool"""
    return _oechem.OESetupBoxCenterAndExtents(arg1, center, extents)

def OEGetSmallestEnclosingBoxRotation(euler: "float *", xyz: "float const *", numPoints: "unsigned int const", numSteps: "unsigned int const"=10) -> "bool":
    r"""OEGetSmallestEnclosingBoxRotation(float * euler, float const * xyz, unsigned int const numPoints, unsigned int const numSteps=10) -> bool"""
    return _oechem.OEGetSmallestEnclosingBoxRotation(euler, xyz, numPoints, numSteps)

def OESphereVolume(sphere: "OESphere") -> "float":
    r"""OESphereVolume(OESphere sphere) -> float"""
    return _oechem.OESphereVolume(sphere)

def OESphereArea(sphere: "OESphere") -> "float":
    r"""OESphereArea(OESphere sphere) -> float"""
    return _oechem.OESphereArea(sphere)

def OEInSphere(sphere: "OESphere", x: "float const", y: "float const", z: "float const") -> "bool":
    r"""OEInSphere(OESphere sphere, float const x, float const y, float const z) -> bool"""
    return _oechem.OEInSphere(sphere, x, y, z)
class OEReceptorConstraintFeature(object):
    r"""Proxy of C++ OEBio::OEReceptorConstraintFeature 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__(OEReceptorConstraintFeature self) -> OEReceptorConstraintFeature
        __init__(OEReceptorConstraintFeature self, OEReceptorConstraintFeature arg2) -> OEReceptorConstraintFeature
        """
        _oechem.OEReceptorConstraintFeature_swiginit(self, _oechem.new_OEReceptorConstraintFeature(*args))
    __swig_destroy__ = _oechem.delete_OEReceptorConstraintFeature

    def GetFeatureSpheres(self) -> "OESystem::OEIterBase< OEMath::OESphere > *":
        r"""GetFeatureSpheres(OEReceptorConstraintFeature self) -> OESystem::OEIterBase< OEMath::OESphere > *"""
        return _oechem.OEReceptorConstraintFeature_GetFeatureSpheres(self)

    def AddNewSphere(self, *args) -> "OEMath::OESphere *":
        r"""
        AddNewSphere(OEReceptorConstraintFeature self, OESphere arg2) -> OESphere
        AddNewSphere(OEReceptorConstraintFeature self) -> OESphere
        """
        return _oechem.OEReceptorConstraintFeature_AddNewSphere(self, *args)

    def DeleteSphere(self, arg2: "OESphere") -> "bool":
        r"""DeleteSphere(OEReceptorConstraintFeature self, OESphere arg2) -> bool"""
        return _oechem.OEReceptorConstraintFeature_DeleteSphere(self, arg2)

    def NumSpheres(self) -> "unsigned int":
        r"""NumSpheres(OEReceptorConstraintFeature self) -> unsigned int"""
        return _oechem.OEReceptorConstraintFeature_NumSpheres(self)

    def ClearSpheres(self) -> "bool":
        r"""ClearSpheres(OEReceptorConstraintFeature self) -> bool"""
        return _oechem.OEReceptorConstraintFeature_ClearSpheres(self)

    def GetSmarts(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetSmarts(OEReceptorConstraintFeature self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEReceptorConstraintFeature_GetSmarts(self)

    def AddSmarts(self, Smarts: "std::string const &") -> "bool":
        r"""AddSmarts(OEReceptorConstraintFeature self, std::string const & Smarts) -> bool"""
        return _oechem.OEReceptorConstraintFeature_AddSmarts(self, Smarts)

    def DeleteSmarts(self, smarts: "std::string const &") -> "bool":
        r"""DeleteSmarts(OEReceptorConstraintFeature self, std::string const & smarts) -> bool"""
        return _oechem.OEReceptorConstraintFeature_DeleteSmarts(self, smarts)

    def NumSmarts(self) -> "unsigned int":
        r"""NumSmarts(OEReceptorConstraintFeature self) -> unsigned int"""
        return _oechem.OEReceptorConstraintFeature_NumSmarts(self)

    def ClearSmarts(self) -> "bool":
        r"""ClearSmarts(OEReceptorConstraintFeature self) -> bool"""
        return _oechem.OEReceptorConstraintFeature_ClearSmarts(self)

    def SetFeatureName(self, arg2: "std::string const &") -> "void":
        r"""SetFeatureName(OEReceptorConstraintFeature self, std::string const & arg2)"""
        return _oechem.OEReceptorConstraintFeature_SetFeatureName(self, arg2)

    def GetFeatureName(self) -> "std::string":
        r"""GetFeatureName(OEReceptorConstraintFeature self) -> std::string"""
        return _oechem.OEReceptorConstraintFeature_GetFeatureName(self)

    def SetEnabled(self, enabled: "bool const") -> "void":
        r"""SetEnabled(OEReceptorConstraintFeature self, bool const enabled)"""
        return _oechem.OEReceptorConstraintFeature_SetEnabled(self, enabled)

    def GetEnabled(self) -> "bool":
        r"""GetEnabled(OEReceptorConstraintFeature self) -> bool"""
        return _oechem.OEReceptorConstraintFeature_GetEnabled(self)

    def CreateCopy(self) -> "OEBio::OEReceptorConstraintFeature *":
        r"""CreateCopy(OEReceptorConstraintFeature self) -> OEReceptorConstraintFeature"""
        return _oechem.OEReceptorConstraintFeature_CreateCopy(self)

# Register OEReceptorConstraintFeature in _oechem:
_oechem.OEReceptorConstraintFeature_swigregister(OEReceptorConstraintFeature)
Unknown = cvar.Unknown
Chelator = cvar.Chelator
Acceptor = cvar.Acceptor
Donor = cvar.Donor
Contact = cvar.Contact
Lipophilic = cvar.Lipophilic

class OEReceptorCustomConstraints(object):
    r"""Proxy of C++ OEBio::OEReceptorCustomConstraints 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__(OEReceptorCustomConstraints self) -> OEReceptorCustomConstraints
        __init__(OEReceptorCustomConstraints self, OEReceptorCustomConstraints arg2) -> OEReceptorCustomConstraints
        """
        _oechem.OEReceptorCustomConstraints_swiginit(self, _oechem.new_OEReceptorCustomConstraints(*args))
    __swig_destroy__ = _oechem.delete_OEReceptorCustomConstraints

    def GetConstraintFeatures(self, enabledOnly: "bool const"=True) -> "OESystem::OEIterBase< OEBio::OEReceptorConstraintFeature > *":
        r"""GetConstraintFeatures(OEReceptorCustomConstraints self, bool const enabledOnly=True) -> OESystem::OEIterBase< OEBio::OEReceptorConstraintFeature >"""
        return _oechem.OEReceptorCustomConstraints_GetConstraintFeatures(self, enabledOnly)

    def AddNewFeature(self) -> "OEBio::OEReceptorConstraintFeature *":
        r"""AddNewFeature(OEReceptorCustomConstraints self) -> OEReceptorConstraintFeature"""
        return _oechem.OEReceptorCustomConstraints_AddNewFeature(self)

    def DeleteFeature(self, arg2: "OEReceptorConstraintFeature") -> "bool":
        r"""DeleteFeature(OEReceptorCustomConstraints self, OEReceptorConstraintFeature arg2) -> bool"""
        return _oechem.OEReceptorCustomConstraints_DeleteFeature(self, arg2)

    def NumFeatures(self, enabledOnly: "bool const"=True) -> "unsigned int":
        r"""NumFeatures(OEReceptorCustomConstraints self, bool const enabledOnly=True) -> unsigned int"""
        return _oechem.OEReceptorCustomConstraints_NumFeatures(self, enabledOnly)

    def Clear(self) -> "bool":
        r"""Clear(OEReceptorCustomConstraints self) -> bool"""
        return _oechem.OEReceptorCustomConstraints_Clear(self)

# Register OEReceptorCustomConstraints in _oechem:
_oechem.OEReceptorCustomConstraints_swigregister(OEReceptorCustomConstraints)

class OEReceptorProteinConstraint(object):
    r"""Proxy of C++ OEBio::OEReceptorProteinConstraint 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__(OEReceptorProteinConstraint self) -> OEReceptorProteinConstraint
        __init__(OEReceptorProteinConstraint self, OEReceptorProteinConstraint arg2) -> OEReceptorProteinConstraint
        """
        _oechem.OEReceptorProteinConstraint_swiginit(self, _oechem.new_OEReceptorProteinConstraint(*args))
    __swig_destroy__ = _oechem.delete_OEReceptorProteinConstraint

    def SetAtom(self, atom: "OEAtomBase") -> "void":
        r"""SetAtom(OEReceptorProteinConstraint self, OEAtomBase atom)"""
        return _oechem.OEReceptorProteinConstraint_SetAtom(self, atom)

    def IsAtom(self, atom: "OEAtomBase") -> "bool":
        r"""IsAtom(OEReceptorProteinConstraint self, OEAtomBase atom) -> bool"""
        return _oechem.OEReceptorProteinConstraint_IsAtom(self, atom)

    def GetAtom(self, mol: "OEMolBase") -> "OEChem::OEAtomBase *":
        r"""GetAtom(OEReceptorProteinConstraint self, OEMolBase mol) -> OEAtomBase"""
        return _oechem.OEReceptorProteinConstraint_GetAtom(self, mol)

    def GetType(self) -> "unsigned int":
        r"""GetType(OEReceptorProteinConstraint self) -> unsigned int"""
        return _oechem.OEReceptorProteinConstraint_GetType(self)

    def GetEnabled(self) -> "bool":
        r"""GetEnabled(OEReceptorProteinConstraint self) -> bool"""
        return _oechem.OEReceptorProteinConstraint_GetEnabled(self)

    def GetName(self) -> "std::string":
        r"""GetName(OEReceptorProteinConstraint self) -> std::string"""
        return _oechem.OEReceptorProteinConstraint_GetName(self)

    def GetAtomName(self) -> "std::string":
        r"""GetAtomName(OEReceptorProteinConstraint self) -> std::string"""
        return _oechem.OEReceptorProteinConstraint_GetAtomName(self)

    def GetResidue(self) -> "OEChem::OEResidue const &":
        r"""GetResidue(OEReceptorProteinConstraint self) -> OEResidue"""
        return _oechem.OEReceptorProteinConstraint_GetResidue(self)

    def SetType(self, type: "unsigned int const") -> "bool":
        r"""SetType(OEReceptorProteinConstraint self, unsigned int const type) -> bool"""
        return _oechem.OEReceptorProteinConstraint_SetType(self, type)

    def SetEnabled(self, enabled: "bool const") -> "bool":
        r"""SetEnabled(OEReceptorProteinConstraint self, bool const enabled) -> bool"""
        return _oechem.OEReceptorProteinConstraint_SetEnabled(self, enabled)

    def SetName(self, name: "std::string const &") -> "bool":
        r"""SetName(OEReceptorProteinConstraint self, std::string const & name) -> bool"""
        return _oechem.OEReceptorProteinConstraint_SetName(self, name)

# Register OEReceptorProteinConstraint in _oechem:
_oechem.OEReceptorProteinConstraint_swigregister(OEReceptorProteinConstraint)

class OEReceptor(object):
    r"""Proxy of C++ OEBio::OEReceptor 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__(OEReceptor self) -> OEReceptor
        __init__(OEReceptor self, OEReceptor arg2) -> OEReceptor
        """
        _oechem.OEReceptor_swiginit(self, _oechem.new_OEReceptor(*args))
    __swig_destroy__ = _oechem.delete_OEReceptor

    def IsValid(self) -> "bool":
        r"""IsValid(OEReceptor self) -> bool"""
        return _oechem.OEReceptor_IsValid(self)

    def HasNegativeImageGrid(self) -> "bool":
        r"""HasNegativeImageGrid(OEReceptor self) -> bool"""
        return _oechem.OEReceptor_HasNegativeImageGrid(self)

    def HasInnerContourLevel(self) -> "bool":
        r"""HasInnerContourLevel(OEReceptor self) -> bool"""
        return _oechem.OEReceptor_HasInnerContourLevel(self)

    def HasOuterContourLevel(self) -> "bool":
        r"""HasOuterContourLevel(OEReceptor self) -> bool"""
        return _oechem.OEReceptor_HasOuterContourLevel(self)

    def HasCustomConstraints(self, enabledOnly: "bool const"=True) -> "bool":
        r"""HasCustomConstraints(OEReceptor self, bool const enabledOnly=True) -> bool"""
        return _oechem.OEReceptor_HasCustomConstraints(self, enabledOnly)

    def HasProteinConstraints(self, enabledOnly: "bool const"=True) -> "bool":
        r"""HasProteinConstraints(OEReceptor self, bool const enabledOnly=True) -> bool"""
        return _oechem.OEReceptor_HasProteinConstraints(self, enabledOnly)

    def GetTargetMask(self) -> "unsigned int":
        r"""GetTargetMask(OEReceptor self) -> unsigned int"""
        return _oechem.OEReceptor_GetTargetMask(self)

    def GetTargetPred(self) -> "OEBio::OEAtomMatchResidue":
        r"""GetTargetPred(OEReceptor self) -> OEAtomMatchResidue"""
        return _oechem.OEReceptor_GetTargetPred(self)

    def GetNegativeImageGrid(self) -> "OESystem::OEGrid< float >":
        r"""GetNegativeImageGrid(OEReceptor self) -> OEFloatGrid"""
        return _oechem.OEReceptor_GetNegativeImageGrid(self)

    def GetInnerContourLevel(self) -> "float":
        r"""GetInnerContourLevel(OEReceptor self) -> float"""
        return _oechem.OEReceptor_GetInnerContourLevel(self)

    def GetOuterContourLevel(self) -> "float":
        r"""GetOuterContourLevel(OEReceptor self) -> float"""
        return _oechem.OEReceptor_GetOuterContourLevel(self)

    def GetCustomConstraints(self) -> "OEBio::OEReceptorCustomConstraints &":
        r"""GetCustomConstraints(OEReceptor self) -> OEReceptorCustomConstraints"""
        return _oechem.OEReceptor_GetCustomConstraints(self)

    def GetProteinConstraints(self, enabledOnly: "bool"=True) -> "OESystem::OEIterBase< OEBio::OEReceptorProteinConstraint > *":
        r"""GetProteinConstraints(OEReceptor self, bool enabledOnly=True) -> OESystem::OEIterBase< OEBio::OEReceptorProteinConstraint >"""
        return _oechem.OEReceptor_GetProteinConstraints(self, enabledOnly)

    def NumProteinConstraints(self, enabledOnly: "bool const"=True) -> "unsigned int":
        r"""NumProteinConstraints(OEReceptor self, bool const enabledOnly=True) -> unsigned int"""
        return _oechem.OEReceptor_NumProteinConstraints(self, enabledOnly)

    def SetInnerContourLevel(self, level: "float const") -> "bool":
        r"""SetInnerContourLevel(OEReceptor self, float const level) -> bool"""
        return _oechem.OEReceptor_SetInnerContourLevel(self, level)

    def SetOuterContourLevel(self, level: "float const") -> "bool":
        r"""SetOuterContourLevel(OEReceptor self, float const level) -> bool"""
        return _oechem.OEReceptor_SetOuterContourLevel(self, level)

    def SetCustomConstraints(self, arg2: "OEReceptorCustomConstraints") -> "bool":
        r"""SetCustomConstraints(OEReceptor self, OEReceptorCustomConstraints arg2) -> bool"""
        return _oechem.OEReceptor_SetCustomConstraints(self, arg2)

    def AddProteinConstraint(self, arg2: "OEReceptorProteinConstraint") -> "bool":
        r"""AddProteinConstraint(OEReceptor self, OEReceptorProteinConstraint arg2) -> bool"""
        return _oechem.OEReceptor_AddProteinConstraint(self, arg2)

    def Clear(self) -> "bool":
        r"""Clear(OEReceptor self) -> bool"""
        return _oechem.OEReceptor_Clear(self)

    def ClearCustomConstraints(self) -> "bool":
        r"""ClearCustomConstraints(OEReceptor self) -> bool"""
        return _oechem.OEReceptor_ClearCustomConstraints(self)

    def ClearProteinConstraint(self, arg2: "OEReceptorProteinConstraint") -> "bool":
        r"""ClearProteinConstraint(OEReceptor self, OEReceptorProteinConstraint arg2) -> bool"""
        return _oechem.OEReceptor_ClearProteinConstraint(self, arg2)

    def ClearProteinConstraints(self) -> "bool":
        r"""ClearProteinConstraints(OEReceptor self) -> bool"""
        return _oechem.OEReceptor_ClearProteinConstraints(self)

    def HasGridScoreData(self) -> "bool":
        r"""HasGridScoreData(OEReceptor self) -> bool"""
        return _oechem.OEReceptor_HasGridScoreData(self)

    def ClearGridScoreData(self) -> "bool":
        r"""ClearGridScoreData(OEReceptor self) -> bool"""
        return _oechem.OEReceptor_ClearGridScoreData(self)

# Register OEReceptor in _oechem:
_oechem.OEReceptor_swigregister(OEReceptor)


def OEGetIridiumCategoryName(iridiumCategory: "unsigned int") -> "std::string":
    r"""OEGetIridiumCategoryName(unsigned int iridiumCategory) -> std::string"""
    return _oechem.OEGetIridiumCategoryName(iridiumCategory)

def OEGetIridiumCategoryFromName(categoryName: "std::string") -> "unsigned int":
    r"""OEGetIridiumCategoryFromName(std::string categoryName) -> unsigned int"""
    return _oechem.OEGetIridiumCategoryFromName(categoryName)
class OEIridiumData(object):
    r"""Proxy of C++ OEBio::OEIridiumData 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__(OEIridiumData self) -> OEIridiumData
        __init__(OEIridiumData self, OEIridiumData rhs) -> OEIridiumData
        """
        _oechem.OEIridiumData_swiginit(self, _oechem.new_OEIridiumData(*args))

    def IsValid(self):
      return _oechem.OEIridiumData___nonzero__(self)



    def Clear(self) -> "void":
        r"""Clear(OEIridiumData self)"""
        return _oechem.OEIridiumData_Clear(self)

    def DetermineCategory(self) -> "void":
        r"""DetermineCategory(OEIridiumData self)"""
        return _oechem.OEIridiumData_DetermineCategory(self)

    def GetLigandDensity(self) -> "double":
        r"""GetLigandDensity(OEIridiumData self) -> double"""
        return _oechem.OEIridiumData_GetLigandDensity(self)

    def GetAsDensity(self) -> "double":
        r"""GetAsDensity(OEIridiumData self) -> double"""
        return _oechem.OEIridiumData_GetAsDensity(self)

    def GetDPI(self) -> "double":
        r"""GetDPI(OEIridiumData self) -> double"""
        return _oechem.OEIridiumData_GetDPI(self)

    def GetRFree(self) -> "double":
        r"""GetRFree(OEIridiumData self) -> double"""
        return _oechem.OEIridiumData_GetRFree(self)

    def GetResolution(self) -> "double":
        r"""GetResolution(OEIridiumData self) -> double"""
        return _oechem.OEIridiumData_GetResolution(self)

    def GetPartOccupancyLigand(self) -> "bool":
        r"""GetPartOccupancyLigand(OEIridiumData self) -> bool"""
        return _oechem.OEIridiumData_GetPartOccupancyLigand(self)

    def GetPartOccupancyProtein(self) -> "bool":
        r"""GetPartOccupancyProtein(OEIridiumData self) -> bool"""
        return _oechem.OEIridiumData_GetPartOccupancyProtein(self)

    def GetAltConfs(self) -> "bool":
        r"""GetAltConfs(OEIridiumData self) -> bool"""
        return _oechem.OEIridiumData_GetAltConfs(self)

    def GetPackingResidues(self) -> "bool":
        r"""GetPackingResidues(OEIridiumData self) -> bool"""
        return _oechem.OEIridiumData_GetPackingResidues(self)

    def GetExcipients(self) -> "bool":
        r"""GetExcipients(OEIridiumData self) -> bool"""
        return _oechem.OEIridiumData_GetExcipients(self)

    def GetIrrationalRfree(self) -> "bool":
        r"""GetIrrationalRfree(OEIridiumData self) -> bool"""
        return _oechem.OEIridiumData_GetIrrationalRfree(self)

    def GetPossibleCovalent(self) -> "bool":
        r"""GetPossibleCovalent(OEIridiumData self) -> bool"""
        return _oechem.OEIridiumData_GetPossibleCovalent(self)

    def GetHasMTZ(self) -> "bool":
        r"""GetHasMTZ(OEIridiumData self) -> bool"""
        return _oechem.OEIridiumData_GetHasMTZ(self)

    def GetCategory(self) -> "unsigned int":
        r"""GetCategory(OEIridiumData self) -> unsigned int"""
        return _oechem.OEIridiumData_GetCategory(self)

    def SetLigandDensity(self, ligandDensity: "double") -> "bool":
        r"""SetLigandDensity(OEIridiumData self, double ligandDensity) -> bool"""
        return _oechem.OEIridiumData_SetLigandDensity(self, ligandDensity)

    def SetAsDensity(self, asDensity: "double") -> "bool":
        r"""SetAsDensity(OEIridiumData self, double asDensity) -> bool"""
        return _oechem.OEIridiumData_SetAsDensity(self, asDensity)

    def SetDPI(self, dpi: "double") -> "bool":
        r"""SetDPI(OEIridiumData self, double dpi) -> bool"""
        return _oechem.OEIridiumData_SetDPI(self, dpi)

    def SetPartOccupancyLigand(self, partOccupancyLigand: "bool") -> "bool":
        r"""SetPartOccupancyLigand(OEIridiumData self, bool partOccupancyLigand) -> bool"""
        return _oechem.OEIridiumData_SetPartOccupancyLigand(self, partOccupancyLigand)

    def SetPartOccupancyProtein(self, partOccupancyProtein: "bool") -> "bool":
        r"""SetPartOccupancyProtein(OEIridiumData self, bool partOccupancyProtein) -> bool"""
        return _oechem.OEIridiumData_SetPartOccupancyProtein(self, partOccupancyProtein)

    def SetAltConfs(self, altConfs: "bool") -> "bool":
        r"""SetAltConfs(OEIridiumData self, bool altConfs) -> bool"""
        return _oechem.OEIridiumData_SetAltConfs(self, altConfs)

    def SetPackingResidues(self, packingResidues: "bool") -> "bool":
        r"""SetPackingResidues(OEIridiumData self, bool packingResidues) -> bool"""
        return _oechem.OEIridiumData_SetPackingResidues(self, packingResidues)

    def SetExcipients(self, excipients: "bool") -> "bool":
        r"""SetExcipients(OEIridiumData self, bool excipients) -> bool"""
        return _oechem.OEIridiumData_SetExcipients(self, excipients)

    def SetIrrationalRfree(self, irrationalRfree: "bool") -> "bool":
        r"""SetIrrationalRfree(OEIridiumData self, bool irrationalRfree) -> bool"""
        return _oechem.OEIridiumData_SetIrrationalRfree(self, irrationalRfree)

    def SetPossibleCovalent(self, possibleCovalent: "bool") -> "bool":
        r"""SetPossibleCovalent(OEIridiumData self, bool possibleCovalent) -> bool"""
        return _oechem.OEIridiumData_SetPossibleCovalent(self, possibleCovalent)

    def SetRFree(self, rFree: "double") -> "bool":
        r"""SetRFree(OEIridiumData self, double rFree) -> bool"""
        return _oechem.OEIridiumData_SetRFree(self, rFree)

    def SetResolution(self, resolution: "double") -> "bool":
        r"""SetResolution(OEIridiumData self, double resolution) -> bool"""
        return _oechem.OEIridiumData_SetResolution(self, resolution)

    def SetHasMTZ(self, hasMTZ: "bool") -> "bool":
        r"""SetHasMTZ(OEIridiumData self, bool hasMTZ) -> bool"""
        return _oechem.OEIridiumData_SetHasMTZ(self, hasMTZ)

    def SetCategory(self, category: "unsigned int") -> "bool":
        r"""SetCategory(OEIridiumData self, unsigned int category) -> bool"""
        return _oechem.OEIridiumData_SetCategory(self, category)

    def Json(self) -> "std::string":
        r"""Json(OEIridiumData self) -> std::string"""
        return _oechem.OEIridiumData_Json(self)

    def Log(self) -> "std::string":
        r"""Log(OEIridiumData self) -> std::string"""
        return _oechem.OEIridiumData_Log(self)
    __swig_destroy__ = _oechem.delete_OEIridiumData

# Register OEIridiumData in _oechem:
_oechem.OEIridiumData_swigregister(OEIridiumData)


def OEIridiumDataFromJson(metadata: "OEIridiumData", json: "std::string const &") -> "bool":
    r"""OEIridiumDataFromJson(OEIridiumData metadata, std::string const & json) -> bool"""
    return _oechem.OEIridiumDataFromJson(metadata, json)

def OEIridiumDataToJson(metadata: "OEIridiumData", prettyPrint: "bool const"=True) -> "std::string":
    r"""OEIridiumDataToJson(OEIridiumData metadata, bool const prettyPrint=True) -> std::string"""
    return _oechem.OEIridiumDataToJson(metadata, prettyPrint)
class OEStructureQuality(object):
    r"""Proxy of C++ OEBio::OEStructureQuality 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__(OEStructureQuality self) -> OEStructureQuality
        __init__(OEStructureQuality self, OEIridiumData id) -> OEStructureQuality
        __init__(OEStructureQuality self, OEStructureQuality rhs) -> OEStructureQuality
        """
        _oechem.OEStructureQuality_swiginit(self, _oechem.new_OEStructureQuality(*args))

    def IsValid(self):
      return _oechem.OEStructureQuality___nonzero__(self)



    def Clear(self) -> "void":
        r"""Clear(OEStructureQuality self)"""
        return _oechem.OEStructureQuality_Clear(self)

    def HasIridiumData(self) -> "bool":
        r"""HasIridiumData(OEStructureQuality self) -> bool"""
        return _oechem.OEStructureQuality_HasIridiumData(self)

    def SetIridiumData(self, id: "OEIridiumData") -> "bool":
        r"""SetIridiumData(OEStructureQuality self, OEIridiumData id) -> bool"""
        return _oechem.OEStructureQuality_SetIridiumData(self, id)

    def GetIridiumData(self, *args) -> "OEBio::OEIridiumData":
        r"""
        GetIridiumData(OEStructureQuality self) -> OEIridiumData
        GetIridiumData(OEStructureQuality self) -> OEIridiumData
        """
        return _oechem.OEStructureQuality_GetIridiumData(self, *args)
    __swig_destroy__ = _oechem.delete_OEStructureQuality

# Register OEStructureQuality in _oechem:
_oechem.OEStructureQuality_swigregister(OEStructureQuality)


def OECalculateDPI(irid: "OEIridiumData", mol: "OEMolBase") -> "bool":
    r"""OECalculateDPI(OEIridiumData irid, OEMolBase mol) -> bool"""
    return _oechem.OECalculateDPI(irid, mol)
class OEDesignUnit(OEBase):
    r"""Proxy of C++ OEBio::OEDesignUnit 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__(OEDesignUnit self) -> OEDesignUnit
        __init__(OEDesignUnit self, OEMolBase target, OEMolBase ligand, OEMolBase solvent=OEChem::OEGraphMol(), OEMolBase cofactors=OEChem::OEGraphMol(), unsigned int const targetID=) -> OEDesignUnit
        __init__(OEDesignUnit self, OEMolBase target, OEStringVector siteResidues, OEMolBase solvent=OEChem::OEGraphMol(), OEMolBase cofactors=OEChem::OEGraphMol(), unsigned int const targetID=) -> OEDesignUnit
        __init__(OEDesignUnit self, OEDesignUnit rhs) -> OEDesignUnit
        """
        _oechem.OEDesignUnit_swiginit(self, _oechem.new_OEDesignUnit(*args))
    __swig_destroy__ = _oechem.delete_OEDesignUnit

    def CreateCopy(self) -> "OEBio::OEDesignUnit *":
        r"""CreateCopy(OEDesignUnit self) -> OEDesignUnit"""
        return _oechem.OEDesignUnit_CreateCopy(self)

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEDesignUnit self) -> void const *"""
        return _oechem.OEDesignUnit_GetDataType(self)

    def IsDataType(self, arg2: "void const *") -> "bool":
        r"""IsDataType(OEDesignUnit self, void const * arg2) -> bool"""
        return _oechem.OEDesignUnit_IsDataType(self, arg2)

    def IsValid(self):
      return _oechem.OEDesignUnit___nonzero__(self)



    def Clear(self) -> "void":
        r"""Clear(OEDesignUnit self)"""
        return _oechem.OEDesignUnit_Clear(self)

    def GetTitle(self) -> "std::string":
        r"""GetTitle(OEDesignUnit self) -> std::string"""
        return _oechem.OEDesignUnit_GetTitle(self)

    def GetTargetComponentTag(self) -> "std::string":
        r"""GetTargetComponentTag(OEDesignUnit self) -> std::string"""
        return _oechem.OEDesignUnit_GetTargetComponentTag(self)

    def GetComponentTag(self, componentID: "unsigned int") -> "std::string":
        r"""GetComponentTag(OEDesignUnit self, unsigned int componentID) -> std::string"""
        return _oechem.OEDesignUnit_GetComponentTag(self, componentID)

    def GetTargetComponentID(self) -> "unsigned int":
        r"""GetTargetComponentID(OEDesignUnit self) -> unsigned int"""
        return _oechem.OEDesignUnit_GetTargetComponentID(self)

    def GetComponentID(self, componentTag: "std::string const &") -> "unsigned int":
        r"""GetComponentID(OEDesignUnit self, std::string const & componentTag) -> unsigned int"""
        return _oechem.OEDesignUnit_GetComponentID(self, componentTag)

    def GetSiteResidues(self) -> "std::vector< std::string,std::allocator< std::string > > const":
        r"""GetSiteResidues(OEDesignUnit self) -> OEStringVector"""
        return _oechem.OEDesignUnit_GetSiteResidues(self)

    def GetPDBMetaData(self, mol: "OEMolBase") -> "bool":
        r"""GetPDBMetaData(OEDesignUnit self, OEMolBase mol) -> bool"""
        return _oechem.OEDesignUnit_GetPDBMetaData(self, mol)

    def GetTags(self) -> "std::vector< std::string,std::allocator< std::string > > const":
        r"""GetTags(OEDesignUnit self) -> OEStringVector"""
        return _oechem.OEDesignUnit_GetTags(self)

    def GetIDs(self) -> "std::vector< unsigned int,std::allocator< unsigned int > > const":
        r"""GetIDs(OEDesignUnit self) -> OEUIntVector"""
        return _oechem.OEDesignUnit_GetIDs(self)

    def GetComponents(self, *args) -> "bool":
        r"""GetComponents(OEDesignUnit self, OEMolBase mol, unsigned int const componentMask=, bool const bondCovalent=True, OEUnaryAtomPred pred=OEChem::OEIsTrueAtom()) -> bool"""
        return _oechem.OEDesignUnit_GetComponents(self, *args)

    def GetComponentsWithin(self, *args) -> "bool":
        r"""GetComponentsWithin(OEDesignUnit self, OEMolBase mol, unsigned int const componentMask=, unsigned int const withinMask=, double const dist=5.0, bool const includeSelf=False, bool const bondCovalent=True) -> bool"""
        return _oechem.OEDesignUnit_GetComponentsWithin(self, *args)

    def GetProtein(self, molecule: "OEMolBase") -> "bool":
        r"""GetProtein(OEDesignUnit self, OEMolBase molecule) -> bool"""
        return _oechem.OEDesignUnit_GetProtein(self, molecule)

    def GetNucleicAcid(self, molecule: "OEMolBase") -> "bool":
        r"""GetNucleicAcid(OEDesignUnit self, OEMolBase molecule) -> bool"""
        return _oechem.OEDesignUnit_GetNucleicAcid(self, molecule)

    def GetLigand(self, molecule: "OEMolBase") -> "bool":
        r"""GetLigand(OEDesignUnit self, OEMolBase molecule) -> bool"""
        return _oechem.OEDesignUnit_GetLigand(self, molecule)

    def GetSolvent(self, molecule: "OEMolBase") -> "bool":
        r"""GetSolvent(OEDesignUnit self, OEMolBase molecule) -> bool"""
        return _oechem.OEDesignUnit_GetSolvent(self, molecule)

    def GetMetal(self, molecule: "OEMolBase") -> "bool":
        r"""GetMetal(OEDesignUnit self, OEMolBase molecule) -> bool"""
        return _oechem.OEDesignUnit_GetMetal(self, molecule)

    def GetTarget(self, molecule: "OEMolBase") -> "bool":
        r"""GetTarget(OEDesignUnit self, OEMolBase molecule) -> bool"""
        return _oechem.OEDesignUnit_GetTarget(self, molecule)

    def GetPackingResidues(self, molecule: "OEMolBase") -> "bool":
        r"""GetPackingResidues(OEDesignUnit self, OEMolBase molecule) -> bool"""
        return _oechem.OEDesignUnit_GetPackingResidues(self, molecule)

    def GetComponent(self, molecule: "OEMolBase", componentID: "unsigned int") -> "bool":
        r"""GetComponent(OEDesignUnit self, OEMolBase molecule, unsigned int componentID) -> bool"""
        return _oechem.OEDesignUnit_GetComponent(self, molecule, componentID)

    def GetTransform(self, trans: "OETrans") -> "bool":
        r"""GetTransform(OEDesignUnit self, OETrans trans) -> bool"""
        return _oechem.OEDesignUnit_GetTransform(self, trans)

    def GetReceptor(self, *args) -> "OEBio::OEReceptor &":
        r"""
        GetReceptor(OEDesignUnit self, OEReceptor receptor) -> bool
        GetReceptor(OEDesignUnit self) -> OEReceptor
        """
        return _oechem.OEDesignUnit_GetReceptor(self, *args)

    def GetStructureQuality(self) -> "OEBio::OEStructureQuality const":
        r"""GetStructureQuality(OEDesignUnit self) -> OEStructureQuality"""
        return _oechem.OEDesignUnit_GetStructureQuality(self)

    def SetTitle(self, title: "std::string const &") -> "bool":
        r"""SetTitle(OEDesignUnit self, std::string const & title) -> bool"""
        return _oechem.OEDesignUnit_SetTitle(self, title)

    def HasPDBMetaData(self) -> "bool":
        r"""HasPDBMetaData(OEDesignUnit self) -> bool"""
        return _oechem.OEDesignUnit_HasPDBMetaData(self)

    def HasComponent(self, componentID: "unsigned int") -> "bool":
        r"""HasComponent(OEDesignUnit self, unsigned int componentID) -> bool"""
        return _oechem.OEDesignUnit_HasComponent(self, componentID)

    def HasTitle(self) -> "bool":
        r"""HasTitle(OEDesignUnit self) -> bool"""
        return _oechem.OEDesignUnit_HasTitle(self)

    def HasProtein(self) -> "bool":
        r"""HasProtein(OEDesignUnit self) -> bool"""
        return _oechem.OEDesignUnit_HasProtein(self)

    def HasLigand(self) -> "bool":
        r"""HasLigand(OEDesignUnit self) -> bool"""
        return _oechem.OEDesignUnit_HasLigand(self)

    def HasSolvent(self) -> "bool":
        r"""HasSolvent(OEDesignUnit self) -> bool"""
        return _oechem.OEDesignUnit_HasSolvent(self)

    def HasNucleicAcid(self) -> "bool":
        r"""HasNucleicAcid(OEDesignUnit self) -> bool"""
        return _oechem.OEDesignUnit_HasNucleicAcid(self)

    def HasTarget(self) -> "bool":
        r"""HasTarget(OEDesignUnit self) -> bool"""
        return _oechem.OEDesignUnit_HasTarget(self)

    def HasPackingResidues(self) -> "bool":
        r"""HasPackingResidues(OEDesignUnit self) -> bool"""
        return _oechem.OEDesignUnit_HasPackingResidues(self)

    def HasSiteResidues(self) -> "bool":
        r"""HasSiteResidues(OEDesignUnit self) -> bool"""
        return _oechem.OEDesignUnit_HasSiteResidues(self)

    def HasMetal(self) -> "bool":
        r"""HasMetal(OEDesignUnit self) -> bool"""
        return _oechem.OEDesignUnit_HasMetal(self)

    def HasStructureQuality(self) -> "bool":
        r"""HasStructureQuality(OEDesignUnit self) -> bool"""
        return _oechem.OEDesignUnit_HasStructureQuality(self)

    def HasReceptor(self) -> "bool":
        r"""HasReceptor(OEDesignUnit self) -> bool"""
        return _oechem.OEDesignUnit_HasReceptor(self)

    def HasTransform(self) -> "bool":
        r"""HasTransform(OEDesignUnit self) -> bool"""
        return _oechem.OEDesignUnit_HasTransform(self)

    def ClearReceptor(self) -> "bool":
        r"""ClearReceptor(OEDesignUnit self) -> bool"""
        return _oechem.OEDesignUnit_ClearReceptor(self)

    def GetImpl(self, *args) -> "OEBio::OEDesignUnitImpl const &":
        r"""
        GetImpl(OEDesignUnit self) -> OEDesignUnitImpl
        GetImpl(OEDesignUnit self) -> OEDesignUnitImpl
        """
        return _oechem.OEDesignUnit_GetImpl(self, *args)

    def GetTaggedComponents(self, *args) -> "PyObject *":
        r"""GetTaggedComponents(OEDesignUnit self, unsigned int componentMask=) -> PyObject"""
        return _oechem.OEDesignUnit_GetTaggedComponents(self, *args)

    def __getstate__(self):
        return OEWriteDesignUnitToBytes(self)



    def __setstate__(self, state):
        du = OEDesignUnit()
        if OEReadDesignUnitFromBytes(du, state):
            self.__init__(du)
        else:
            self.__init__()
        del du



# Register OEDesignUnit in _oechem:
_oechem.OEDesignUnit_swigregister(OEDesignUnit)


def OESubsetDesignUnit(*args) -> "bool":
    r"""OESubsetDesignUnit(OEDesignUnit du, OEDesignUnit refDu, unsigned int const componentMask, OEUnaryAtomPred pred=OEChem::OEIsTrueAtom()) -> bool"""
    return _oechem.OESubsetDesignUnit(*args)

def OEUpdateDesignUnit(du: "OEDesignUnit", mol: "OEMolBase", componentId: "unsigned int const", retainStyle: "bool const"=False) -> "bool":
    r"""OEUpdateDesignUnit(OEDesignUnit du, OEMolBase mol, unsigned int const componentId, bool const retainStyle=False) -> bool"""
    return _oechem.OEUpdateDesignUnit(du, mol, componentId, retainStyle)

def OETransformDesignUnit(*args) -> "void":
    r"""
    OETransformDesignUnit(OEDesignUnit du, double const * rmat, double const * trns)
    OETransformDesignUnit(OEDesignUnit du, OETrans trans)
    """
    return _oechem.OETransformDesignUnit(*args)

def OEClearDesignUnitStyle(du: "OEDesignUnit") -> "void":
    r"""OEClearDesignUnitStyle(OEDesignUnit du)"""
    return _oechem.OEClearDesignUnitStyle(du)

def OEIsReadableDesignUnit(filename: "std::string const &") -> "bool":
    r"""OEIsReadableDesignUnit(std::string const & filename) -> bool"""
    return _oechem.OEIsReadableDesignUnit(filename)

def OEIsWriteableDesignUnit(filename: "std::string const &") -> "bool":
    r"""OEIsWriteableDesignUnit(std::string const & filename) -> bool"""
    return _oechem.OEIsWriteableDesignUnit(filename)

def OEReadDesignUnit(*args) -> "bool":
    r"""
    OEReadDesignUnit(std::string const & fname, OEDesignUnit du) -> bool
    OEReadDesignUnit(oeistream ifs, OEDesignUnit du, unsigned int type=) -> bool
    """
    return _oechem.OEReadDesignUnit(*args)

def OEWriteDesignUnit(*args) -> "bool":
    r"""
    OEWriteDesignUnit(std::string const & fname, OEDesignUnit du) -> bool
    OEWriteDesignUnit(oeostream ofs, OEDesignUnit du) -> bool
    """
    return _oechem.OEWriteDesignUnit(*args)

def OEWriteDesignUnitToString(du: "OEDesignUnit") -> "std::string":
    r"""OEWriteDesignUnitToString(OEDesignUnit du) -> std::string"""
    return _oechem.OEWriteDesignUnitToString(du)

def OEReadDesignUnitFromString(du: "OEDesignUnit", input: "std::string const &") -> "bool":
    r"""OEReadDesignUnitFromString(OEDesignUnit du, std::string const & input) -> bool"""
    return _oechem.OEReadDesignUnitFromString(du, input)

def OEGetDesignUnitComponentName(componentID: "unsigned int const") -> "std::string":
    r"""OEGetDesignUnitComponentName(unsigned int const componentID) -> std::string"""
    return _oechem.OEGetDesignUnitComponentName(componentID)

def OEGetDesignUnitComponentID(componentName: "std::string const &") -> "unsigned int":
    r"""OEGetDesignUnitComponentID(std::string const & componentName) -> unsigned int"""
    return _oechem.OEGetDesignUnitComponentID(componentName)

def OEGetDesignUnitComponentNamesFromMask(*args) -> "std::string":
    r"""OEGetDesignUnitComponentNamesFromMask(unsigned int const componentMask, std::string const & delimiter="|") -> std::string"""
    return _oechem.OEGetDesignUnitComponentNamesFromMask(*args)
class OEDesignUnitVector(object):
    r"""Proxy of C++ std::vector< OEBio::OEDesignUnit * > class."""

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

    def iterator(self) -> "swig::SwigPyIterator *":
        r"""iterator(OEDesignUnitVector self) -> SwigPyIterator"""
        return _oechem.OEDesignUnitVector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEDesignUnitVector self) -> bool"""
        return _oechem.OEDesignUnitVector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEDesignUnitVector self) -> bool"""
        return _oechem.OEDesignUnitVector___bool__(self)

    def __len__(self) -> "std::vector< OEBio::OEDesignUnit * >::size_type":
        r"""__len__(OEDesignUnitVector self) -> std::vector< OEBio::OEDesignUnit * >::size_type"""
        return _oechem.OEDesignUnitVector___len__(self)

    def __getslice__(self, i: "std::vector< OEBio::OEDesignUnit * >::difference_type", j: "std::vector< OEBio::OEDesignUnit * >::difference_type") -> "std::vector< OEBio::OEDesignUnit *,std::allocator< OEBio::OEDesignUnit * > > *":
        r"""__getslice__(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::difference_type i, std::vector< OEBio::OEDesignUnit * >::difference_type j) -> OEDesignUnitVector"""
        return _oechem.OEDesignUnitVector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::difference_type i, std::vector< OEBio::OEDesignUnit * >::difference_type j)
        __setslice__(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::difference_type i, std::vector< OEBio::OEDesignUnit * >::difference_type j, OEDesignUnitVector v)
        """
        return _oechem.OEDesignUnitVector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< OEBio::OEDesignUnit * >::difference_type", j: "std::vector< OEBio::OEDesignUnit * >::difference_type") -> "void":
        r"""__delslice__(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::difference_type i, std::vector< OEBio::OEDesignUnit * >::difference_type j)"""
        return _oechem.OEDesignUnitVector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::difference_type i)
        __delitem__(OEDesignUnitVector self, PySliceObject * slice)
        """
        return _oechem.OEDesignUnitVector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< OEBio::OEDesignUnit * >::value_type":
        r"""
        __getitem__(OEDesignUnitVector self, PySliceObject * slice) -> OEDesignUnitVector
        __getitem__(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::difference_type i) -> OEDesignUnit
        """
        return _oechem.OEDesignUnitVector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEDesignUnitVector self, PySliceObject * slice, OEDesignUnitVector v)
        __setitem__(OEDesignUnitVector self, PySliceObject * slice)
        __setitem__(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::difference_type i, OEDesignUnit x)
        """
        return _oechem.OEDesignUnitVector___setitem__(self, *args)

    def pop(self) -> "std::vector< OEBio::OEDesignUnit * >::value_type":
        r"""pop(OEDesignUnitVector self) -> OEDesignUnit"""
        return _oechem.OEDesignUnitVector_pop(self)

    def append(self, x: "OEDesignUnit") -> "void":
        r"""append(OEDesignUnitVector self, OEDesignUnit x)"""
        return _oechem.OEDesignUnitVector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEDesignUnitVector self) -> bool"""
        return _oechem.OEDesignUnitVector_empty(self)

    def size(self) -> "std::vector< OEBio::OEDesignUnit * >::size_type":
        r"""size(OEDesignUnitVector self) -> std::vector< OEBio::OEDesignUnit * >::size_type"""
        return _oechem.OEDesignUnitVector_size(self)

    def swap(self, v: "OEDesignUnitVector") -> "void":
        r"""swap(OEDesignUnitVector self, OEDesignUnitVector v)"""
        return _oechem.OEDesignUnitVector_swap(self, v)

    def begin(self) -> "std::vector< OEBio::OEDesignUnit * >::iterator":
        r"""begin(OEDesignUnitVector self) -> std::vector< OEBio::OEDesignUnit * >::iterator"""
        return _oechem.OEDesignUnitVector_begin(self)

    def end(self) -> "std::vector< OEBio::OEDesignUnit * >::iterator":
        r"""end(OEDesignUnitVector self) -> std::vector< OEBio::OEDesignUnit * >::iterator"""
        return _oechem.OEDesignUnitVector_end(self)

    def rbegin(self) -> "std::vector< OEBio::OEDesignUnit * >::reverse_iterator":
        r"""rbegin(OEDesignUnitVector self) -> std::vector< OEBio::OEDesignUnit * >::reverse_iterator"""
        return _oechem.OEDesignUnitVector_rbegin(self)

    def rend(self) -> "std::vector< OEBio::OEDesignUnit * >::reverse_iterator":
        r"""rend(OEDesignUnitVector self) -> std::vector< OEBio::OEDesignUnit * >::reverse_iterator"""
        return _oechem.OEDesignUnitVector_rend(self)

    def clear(self) -> "void":
        r"""clear(OEDesignUnitVector self)"""
        return _oechem.OEDesignUnitVector_clear(self)

    def get_allocator(self) -> "std::vector< OEBio::OEDesignUnit * >::allocator_type":
        r"""get_allocator(OEDesignUnitVector self) -> std::vector< OEBio::OEDesignUnit * >::allocator_type"""
        return _oechem.OEDesignUnitVector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEDesignUnitVector self)"""
        return _oechem.OEDesignUnitVector_pop_back(self)

    def erase(self, *args) -> "std::vector< OEBio::OEDesignUnit * >::iterator":
        r"""
        erase(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::iterator pos) -> std::vector< OEBio::OEDesignUnit * >::iterator
        erase(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::iterator first, std::vector< OEBio::OEDesignUnit * >::iterator last) -> std::vector< OEBio::OEDesignUnit * >::iterator
        """
        return _oechem.OEDesignUnitVector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEDesignUnitVector self) -> OEDesignUnitVector
        __init__(OEDesignUnitVector self, OEDesignUnitVector other) -> OEDesignUnitVector
        __init__(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::size_type size) -> OEDesignUnitVector
        __init__(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::size_type size, OEDesignUnit value) -> OEDesignUnitVector
        """
        _oechem.OEDesignUnitVector_swiginit(self, _oechem.new_OEDesignUnitVector(*args))

    def push_back(self, x: "OEDesignUnit") -> "void":
        r"""push_back(OEDesignUnitVector self, OEDesignUnit x)"""
        return _oechem.OEDesignUnitVector_push_back(self, x)

    def front(self) -> "std::vector< OEBio::OEDesignUnit * >::value_type":
        r"""front(OEDesignUnitVector self) -> OEDesignUnit"""
        return _oechem.OEDesignUnitVector_front(self)

    def back(self) -> "std::vector< OEBio::OEDesignUnit * >::value_type":
        r"""back(OEDesignUnitVector self) -> OEDesignUnit"""
        return _oechem.OEDesignUnitVector_back(self)

    def assign(self, n: "std::vector< OEBio::OEDesignUnit * >::size_type", x: "OEDesignUnit") -> "void":
        r"""assign(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::size_type n, OEDesignUnit x)"""
        return _oechem.OEDesignUnitVector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::size_type new_size)
        resize(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::size_type new_size, OEDesignUnit x)
        """
        return _oechem.OEDesignUnitVector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::iterator pos, OEDesignUnit x) -> std::vector< OEBio::OEDesignUnit * >::iterator
        insert(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::iterator pos, std::vector< OEBio::OEDesignUnit * >::size_type n, OEDesignUnit x)
        """
        return _oechem.OEDesignUnitVector_insert(self, *args)

    def reserve(self, n: "std::vector< OEBio::OEDesignUnit * >::size_type") -> "void":
        r"""reserve(OEDesignUnitVector self, std::vector< OEBio::OEDesignUnit * >::size_type n)"""
        return _oechem.OEDesignUnitVector_reserve(self, n)

    def capacity(self) -> "std::vector< OEBio::OEDesignUnit * >::size_type":
        r"""capacity(OEDesignUnitVector self) -> std::vector< OEBio::OEDesignUnit * >::size_type"""
        return _oechem.OEDesignUnitVector_capacity(self)
    __swig_destroy__ = _oechem.delete_OEDesignUnitVector

# Register OEDesignUnitVector in _oechem:
_oechem.OEDesignUnitVector_swigregister(OEDesignUnitVector)

class OEHierResidue(object):
    r"""Proxy of C++ OEBio::OEHierResidue class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEHierResidue self, OEBio::OEHierResImpl * i) -> OEHierResidue
        __init__(OEHierResidue self) -> OEHierResidue
        __init__(OEHierResidue self, OEHierResidue arg2) -> OEHierResidue
        """
        _oechem.OEHierResidue_swiginit(self, _oechem.new_OEHierResidue(*args))

    def GetImpl(self) -> "OEBio::OEHierResImpl *":
        r"""GetImpl(OEHierResidue self) -> OEBio::OEHierResImpl *"""
        return _oechem.OEHierResidue_GetImpl(self)

    def GetResidueNumber(self) -> "int":
        r"""GetResidueNumber(OEHierResidue self) -> int"""
        return _oechem.OEHierResidue_GetResidueNumber(self)

    def GetResidueName(self) -> "char const *":
        r"""GetResidueName(OEHierResidue self) -> char const *"""
        return _oechem.OEHierResidue_GetResidueName(self)

    def GetOEResidue(self) -> "OEChem::OEResidue const &":
        r"""GetOEResidue(OEHierResidue self) -> OEResidue"""
        return _oechem.OEHierResidue_GetOEResidue(self)

    def GetAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase const > *":
        r"""
        GetAtoms(OEHierResidue self) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAtoms(OEHierResidue self) -> OESystem::OEIterBase< OEChem::OEAtomBase const > *
        """
        return _oechem.OEHierResidue_GetAtoms(self, *args)

    def GetAtom(self, *args) -> "OEChem::OEAtomBase const *":
        r"""
        GetAtom(OEHierResidue self, unsigned int pdbAtomIdx) -> OEAtomBase
        GetAtom(OEHierResidue self, unsigned int pdbAtomIdx) -> OEAtomBase
        """
        return _oechem.OEHierResidue_GetAtom(self, *args)

# Register OEHierResidue in _oechem:
_oechem.OEHierResidue_swigregister(OEHierResidue)

class OEHierFragment(object):
    r"""Proxy of C++ OEBio::OEHierFragment class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEHierFragment self, OEBio::OEHierFragImpl * i) -> OEHierFragment
        __init__(OEHierFragment self) -> OEHierFragment
        __init__(OEHierFragment self, OEHierFragment arg2) -> OEHierFragment
        """
        _oechem.OEHierFragment_swiginit(self, _oechem.new_OEHierFragment(*args))

    def GetImpl(self) -> "OEBio::OEHierFragImpl *":
        r"""GetImpl(OEHierFragment self) -> OEBio::OEHierFragImpl *"""
        return _oechem.OEHierFragment_GetImpl(self)

    def GetFragmentNumber(self) -> "int":
        r"""GetFragmentNumber(OEHierFragment self) -> int"""
        return _oechem.OEHierFragment_GetFragmentNumber(self)

    def GetOEResidue(self) -> "OEChem::OEResidue const &":
        r"""GetOEResidue(OEHierFragment self) -> OEResidue"""
        return _oechem.OEHierFragment_GetOEResidue(self)

    def GetResidues(self, *args) -> "OESystem::OEIterBase< OEBio::OEHierResidue const > *":
        r"""
        GetResidues(OEHierFragment self) -> OESystem::OEIterBase< OEBio::OEHierResidue >
        GetResidues(OEHierFragment self) -> OESystem::OEIterBase< OEBio::OEHierResidue const > *
        """
        return _oechem.OEHierFragment_GetResidues(self, *args)

    def GetResidue(self, *args) -> "OEBio::OEHierResidue const &":
        r"""
        GetResidue(OEHierFragment self, char const * resName, int resIdx) -> OEHierResidue
        GetResidue(OEHierFragment self, char const * resName, int resIdx) -> OEHierResidue
        """
        return _oechem.OEHierFragment_GetResidue(self, *args)

    def GetAtom(self, *args) -> "OEChem::OEAtomBase const *":
        r"""
        GetAtom(OEHierFragment self, char const * resName, int resIdx, unsigned int pdbAtomIdx) -> OEAtomBase
        GetAtom(OEHierFragment self, char const * resName, int resIdx, unsigned int pdbAtomIdx) -> OEAtomBase
        """
        return _oechem.OEHierFragment_GetAtom(self, *args)

# Register OEHierFragment in _oechem:
_oechem.OEHierFragment_swigregister(OEHierFragment)

class OEHierChain(object):
    r"""Proxy of C++ OEBio::OEHierChain class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEHierChain self, OEBio::OEHierChainImpl * i) -> OEHierChain
        __init__(OEHierChain self) -> OEHierChain
        __init__(OEHierChain self, OEHierChain arg2) -> OEHierChain
        """
        _oechem.OEHierChain_swiginit(self, _oechem.new_OEHierChain(*args))

    def GetImpl(self) -> "OEBio::OEHierChainImpl *":
        r"""GetImpl(OEHierChain self) -> OEBio::OEHierChainImpl *"""
        return _oechem.OEHierChain_GetImpl(self)

    def GetChainID(self) -> "char":
        r"""GetChainID(OEHierChain self) -> char"""
        return _oechem.OEHierChain_GetChainID(self)

    def GetOEResidue(self) -> "OEChem::OEResidue const &":
        r"""GetOEResidue(OEHierChain self) -> OEResidue"""
        return _oechem.OEHierChain_GetOEResidue(self)

    def GetFragments(self, *args) -> "OESystem::OEIterBase< OEBio::OEHierFragment const > *":
        r"""
        GetFragments(OEHierChain self) -> OESystem::OEIterBase< OEBio::OEHierFragment >
        GetFragments(OEHierChain self) -> OESystem::OEIterBase< OEBio::OEHierFragment const > *
        """
        return _oechem.OEHierChain_GetFragments(self, *args)

    def GetResidue(self, *args) -> "OEBio::OEHierResidue const &":
        r"""
        GetResidue(OEHierChain self, char const * resName, int resIdx) -> OEHierResidue
        GetResidue(OEHierChain self, char const * resName, int resIdx) -> OEHierResidue
        """
        return _oechem.OEHierChain_GetResidue(self, *args)

    def GetAtom(self, *args) -> "OEChem::OEAtomBase const *":
        r"""
        GetAtom(OEHierChain self, char const * resName, int resIdx, unsigned int pdbAtomIdx) -> OEAtomBase
        GetAtom(OEHierChain self, char const * resName, int resIdx, unsigned int pdbAtomIdx) -> OEAtomBase
        """
        return _oechem.OEHierChain_GetAtom(self, *args)

# Register OEHierChain in _oechem:
_oechem.OEHierChain_swigregister(OEHierChain)

class OEHierView(object):
    r"""Proxy of C++ OEBio::OEHierView class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEHierView self, OEBio::OEHierViewImpl * i) -> OEHierView
        __init__(OEHierView self) -> OEHierView
        __init__(OEHierView self, OEHierView arg2) -> OEHierView
        __init__(OEHierView self, OEMolBase arg2, unsigned int assume=) -> OEHierView
        """
        _oechem.OEHierView_swiginit(self, _oechem.new_OEHierView(*args))

    def GetImpl(self) -> "OEBio::OEHierViewImpl *":
        r"""GetImpl(OEHierView self) -> OEBio::OEHierViewImpl *"""
        return _oechem.OEHierView_GetImpl(self)

    def GetChains(self, *args) -> "OESystem::OEIterBase< OEBio::OEHierChain const > *":
        r"""
        GetChains(OEHierView self) -> OESystem::OEIterBase< OEBio::OEHierChain >
        GetChains(OEHierView self) -> OESystem::OEIterBase< OEBio::OEHierChain const > *
        """
        return _oechem.OEHierView_GetChains(self, *args)

    def GetFragments(self, *args) -> "OESystem::OEIterBase< OEBio::OEHierFragment const > *":
        r"""
        GetFragments(OEHierView self) -> OESystem::OEIterBase< OEBio::OEHierFragment >
        GetFragments(OEHierView self) -> OESystem::OEIterBase< OEBio::OEHierFragment const > *
        """
        return _oechem.OEHierView_GetFragments(self, *args)

    def GetResidues(self, *args) -> "OESystem::OEIterBase< OEBio::OEHierResidue const > *":
        r"""
        GetResidues(OEHierView self) -> OESystem::OEIterBase< OEBio::OEHierResidue >
        GetResidues(OEHierView self) -> OESystem::OEIterBase< OEBio::OEHierResidue const > *
        """
        return _oechem.OEHierView_GetResidues(self, *args)

    def GetAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase const > *":
        r"""
        GetAtoms(OEHierView self) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAtoms(OEHierView self) -> OESystem::OEIterBase< OEChem::OEAtomBase const > *
        """
        return _oechem.OEHierView_GetAtoms(self, *args)

    def GetResidue(self, *args) -> "OEBio::OEHierResidue const &":
        r"""
        GetResidue(OEHierView self, char chainID, char const * resName, int resIdx) -> OEHierResidue
        GetResidue(OEHierView self, char chainID, char const * resName, int resIdx) -> OEHierResidue
        """
        return _oechem.OEHierView_GetResidue(self, *args)

    def GetAtom(self, *args) -> "OEChem::OEAtomBase const *":
        r"""
        GetAtom(OEHierView self, char chainID, char const * resName, int resIdx, unsigned int pdbAtomIdx) -> OEAtomBase
        GetAtom(OEHierView self, char chainID, char const * resName, int resIdx, unsigned int pdbAtomIdx) -> OEAtomBase
        """
        return _oechem.OEHierView_GetAtom(self, *args)

# Register OEHierView in _oechem:
_oechem.OEHierView_swigregister(OEHierView)

class OEHierResidueIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OEHierResidue > 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__(OEHierResidueIter self) -> OEHierResidueIter
        __init__(OEHierResidueIter self, OEHierResidueIter rhs) -> OEHierResidueIter
        __init__(OEHierResidueIter self, OESystem::OEIterBase< OEBio::OEHierResidue > * rhs) -> OEHierResidueIter
        __init__(OEHierResidueIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEHierResidue >::NonConstA > * rhs) -> OEHierResidueIter
        """
        _oechem.OEHierResidueIter_swiginit(self, _oechem.new_OEHierResidueIter(*args))
    __swig_destroy__ = _oechem.delete_OEHierResidueIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OEHierResidue > *":
        r"""Copy(OEHierResidueIter self) -> OESystem::OEIterBase< OEBio::OEHierResidue > *"""
        return _oechem.OEHierResidueIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEHierResidueIter self, OESystem::OEIterBase< OEBio::OEHierResidue > * ib)
        Push(OEHierResidueIter self, OEHierResidueIter iter)
        """
        return _oechem.OEHierResidueIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OEHierResidue,OEBio::OEHierResidue > const &") -> "void":
        r"""Sort(OEHierResidueIter self, OESystem::OEBinaryPredicate< OEBio::OEHierResidue,OEBio::OEHierResidue > const & sort_criterion)"""
        return _oechem.OEHierResidueIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OEHierResidue > &":
        r"""ToFirst(OEHierResidueIter self) -> OEHierResidueIter"""
        return _oechem.OEHierResidueIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OEHierResidue > &":
        r"""ToLast(OEHierResidueIter self) -> OEHierResidueIter"""
        return _oechem.OEHierResidueIter_ToLast(self)

    def __ref__(self) -> "OEBio::OEHierResidue &":
        r"""__ref__(OEHierResidueIter self) -> OEHierResidue"""
        return _oechem.OEHierResidueIter___ref__(self)

    def IsValid(self):
      return _oechem.OEHierResidueIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEHierResidueIter self) -> PyObject *"""
        return _oechem.OEHierResidueIter_next(self)

    def Target(self) -> "OEBio::OEHierResidue &":
        r"""Target(OEHierResidueIter self) -> OEHierResidue"""
        return _oechem.OEHierResidueIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OEHierResidue > &":
        r"""
        Next(OEHierResidueIter self) -> OEHierResidueIter
        Next(OEHierResidueIter self, int i) -> OEHierResidueIter
        """
        return _oechem.OEHierResidueIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OEHierResidue > &":
        r"""
        Prev(OEHierResidueIter self) -> OEHierResidueIter
        Prev(OEHierResidueIter self, int i) -> OEHierResidueIter
        """
        return _oechem.OEHierResidueIter_Prev(self, *args)

# Register OEHierResidueIter in _oechem:
_oechem.OEHierResidueIter_swigregister(OEHierResidueIter)

class OEHierFragmentIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OEHierFragment > 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__(OEHierFragmentIter self) -> OEHierFragmentIter
        __init__(OEHierFragmentIter self, OEHierFragmentIter rhs) -> OEHierFragmentIter
        __init__(OEHierFragmentIter self, OESystem::OEIterBase< OEBio::OEHierFragment > * rhs) -> OEHierFragmentIter
        __init__(OEHierFragmentIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEHierFragment >::NonConstA > * rhs) -> OEHierFragmentIter
        """
        _oechem.OEHierFragmentIter_swiginit(self, _oechem.new_OEHierFragmentIter(*args))
    __swig_destroy__ = _oechem.delete_OEHierFragmentIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OEHierFragment > *":
        r"""Copy(OEHierFragmentIter self) -> OESystem::OEIterBase< OEBio::OEHierFragment > *"""
        return _oechem.OEHierFragmentIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEHierFragmentIter self, OESystem::OEIterBase< OEBio::OEHierFragment > * ib)
        Push(OEHierFragmentIter self, OEHierFragmentIter iter)
        """
        return _oechem.OEHierFragmentIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OEHierFragment,OEBio::OEHierFragment > const &") -> "void":
        r"""Sort(OEHierFragmentIter self, OESystem::OEBinaryPredicate< OEBio::OEHierFragment,OEBio::OEHierFragment > const & sort_criterion)"""
        return _oechem.OEHierFragmentIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OEHierFragment > &":
        r"""ToFirst(OEHierFragmentIter self) -> OEHierFragmentIter"""
        return _oechem.OEHierFragmentIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OEHierFragment > &":
        r"""ToLast(OEHierFragmentIter self) -> OEHierFragmentIter"""
        return _oechem.OEHierFragmentIter_ToLast(self)

    def __ref__(self) -> "OEBio::OEHierFragment &":
        r"""__ref__(OEHierFragmentIter self) -> OEHierFragment"""
        return _oechem.OEHierFragmentIter___ref__(self)

    def IsValid(self):
      return _oechem.OEHierFragmentIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEHierFragmentIter self) -> PyObject *"""
        return _oechem.OEHierFragmentIter_next(self)

    def Target(self) -> "OEBio::OEHierFragment &":
        r"""Target(OEHierFragmentIter self) -> OEHierFragment"""
        return _oechem.OEHierFragmentIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OEHierFragment > &":
        r"""
        Next(OEHierFragmentIter self) -> OEHierFragmentIter
        Next(OEHierFragmentIter self, int i) -> OEHierFragmentIter
        """
        return _oechem.OEHierFragmentIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OEHierFragment > &":
        r"""
        Prev(OEHierFragmentIter self) -> OEHierFragmentIter
        Prev(OEHierFragmentIter self, int i) -> OEHierFragmentIter
        """
        return _oechem.OEHierFragmentIter_Prev(self, *args)

# Register OEHierFragmentIter in _oechem:
_oechem.OEHierFragmentIter_swigregister(OEHierFragmentIter)

class OEHierChainIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OEHierChain > 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__(OEHierChainIter self) -> OEHierChainIter
        __init__(OEHierChainIter self, OEHierChainIter rhs) -> OEHierChainIter
        __init__(OEHierChainIter self, OESystem::OEIterBase< OEBio::OEHierChain > * rhs) -> OEHierChainIter
        __init__(OEHierChainIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEHierChain >::NonConstA > * rhs) -> OEHierChainIter
        """
        _oechem.OEHierChainIter_swiginit(self, _oechem.new_OEHierChainIter(*args))
    __swig_destroy__ = _oechem.delete_OEHierChainIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OEHierChain > *":
        r"""Copy(OEHierChainIter self) -> OESystem::OEIterBase< OEBio::OEHierChain > *"""
        return _oechem.OEHierChainIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEHierChainIter self, OESystem::OEIterBase< OEBio::OEHierChain > * ib)
        Push(OEHierChainIter self, OEHierChainIter iter)
        """
        return _oechem.OEHierChainIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OEHierChain,OEBio::OEHierChain > const &") -> "void":
        r"""Sort(OEHierChainIter self, OESystem::OEBinaryPredicate< OEBio::OEHierChain,OEBio::OEHierChain > const & sort_criterion)"""
        return _oechem.OEHierChainIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OEHierChain > &":
        r"""ToFirst(OEHierChainIter self) -> OEHierChainIter"""
        return _oechem.OEHierChainIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OEHierChain > &":
        r"""ToLast(OEHierChainIter self) -> OEHierChainIter"""
        return _oechem.OEHierChainIter_ToLast(self)

    def __ref__(self) -> "OEBio::OEHierChain &":
        r"""__ref__(OEHierChainIter self) -> OEHierChain"""
        return _oechem.OEHierChainIter___ref__(self)

    def IsValid(self):
      return _oechem.OEHierChainIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEHierChainIter self) -> PyObject *"""
        return _oechem.OEHierChainIter_next(self)

    def Target(self) -> "OEBio::OEHierChain &":
        r"""Target(OEHierChainIter self) -> OEHierChain"""
        return _oechem.OEHierChainIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OEHierChain > &":
        r"""
        Next(OEHierChainIter self) -> OEHierChainIter
        Next(OEHierChainIter self, int i) -> OEHierChainIter
        """
        return _oechem.OEHierChainIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OEHierChain > &":
        r"""
        Prev(OEHierChainIter self) -> OEHierChainIter
        Prev(OEHierChainIter self, int i) -> OEHierChainIter
        """
        return _oechem.OEHierChainIter_Prev(self, *args)

# Register OEHierChainIter in _oechem:
_oechem.OEHierChainIter_swigregister(OEHierChainIter)

class OERotamerIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OERotamer > 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__(OERotamerIter self) -> OERotamerIter
        __init__(OERotamerIter self, OERotamerIter rhs) -> OERotamerIter
        __init__(OERotamerIter self, OESystem::OEIterBase< OEBio::OERotamer > * rhs) -> OERotamerIter
        __init__(OERotamerIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OERotamer >::NonConstA > * rhs) -> OERotamerIter
        """
        _oechem.OERotamerIter_swiginit(self, _oechem.new_OERotamerIter(*args))
    __swig_destroy__ = _oechem.delete_OERotamerIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OERotamer > *":
        r"""Copy(OERotamerIter self) -> OESystem::OEIterBase< OEBio::OERotamer > *"""
        return _oechem.OERotamerIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OERotamerIter self, OESystem::OEIterBase< OEBio::OERotamer > * ib)
        Push(OERotamerIter self, OERotamerIter iter)
        """
        return _oechem.OERotamerIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OERotamer,OEBio::OERotamer > const &") -> "void":
        r"""Sort(OERotamerIter self, OESystem::OEBinaryPredicate< OEBio::OERotamer,OEBio::OERotamer > const & sort_criterion)"""
        return _oechem.OERotamerIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OERotamer > &":
        r"""ToFirst(OERotamerIter self) -> OERotamerIter"""
        return _oechem.OERotamerIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OERotamer > &":
        r"""ToLast(OERotamerIter self) -> OERotamerIter"""
        return _oechem.OERotamerIter_ToLast(self)

    def __ref__(self) -> "OEBio::OERotamer &":
        r"""__ref__(OERotamerIter self) -> OERotamer"""
        return _oechem.OERotamerIter___ref__(self)

    def IsValid(self):
      return _oechem.OERotamerIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OERotamerIter self) -> PyObject *"""
        return _oechem.OERotamerIter_next(self)

    def Target(self) -> "OEBio::OERotamer &":
        r"""Target(OERotamerIter self) -> OERotamer"""
        return _oechem.OERotamerIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OERotamer > &":
        r"""
        Next(OERotamerIter self) -> OERotamerIter
        Next(OERotamerIter self, int i) -> OERotamerIter
        """
        return _oechem.OERotamerIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OERotamer > &":
        r"""
        Prev(OERotamerIter self) -> OERotamerIter
        Prev(OERotamerIter self, int i) -> OERotamerIter
        """
        return _oechem.OERotamerIter_Prev(self, *args)

# Register OERotamerIter in _oechem:
_oechem.OERotamerIter_swigregister(OERotamerIter)

class ConstOEHierResidueIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OEHierResidue 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__(ConstOEHierResidueIter self) -> ConstOEHierResidueIter
        __init__(ConstOEHierResidueIter self, ConstOEHierResidueIter rhs) -> ConstOEHierResidueIter
        __init__(ConstOEHierResidueIter self, OESystem::OEIterBase< OEBio::OEHierResidue const > * rhs) -> ConstOEHierResidueIter
        __init__(ConstOEHierResidueIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEHierResidue const >::NonConstA > * rhs) -> ConstOEHierResidueIter
        """
        _oechem.ConstOEHierResidueIter_swiginit(self, _oechem.new_ConstOEHierResidueIter(*args))
    __swig_destroy__ = _oechem.delete_ConstOEHierResidueIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OEHierResidue const > *":
        r"""Copy(ConstOEHierResidueIter self) -> OESystem::OEIterBase< OEBio::OEHierResidue const > *"""
        return _oechem.ConstOEHierResidueIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(ConstOEHierResidueIter self, OESystem::OEIterBase< OEBio::OEHierResidue const > * ib)
        Push(ConstOEHierResidueIter self, ConstOEHierResidueIter iter)
        """
        return _oechem.ConstOEHierResidueIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OEHierResidue const,OEBio::OEHierResidue const > const &") -> "void":
        r"""Sort(ConstOEHierResidueIter self, OESystem::OEBinaryPredicate< OEBio::OEHierResidue const,OEBio::OEHierResidue const > const & sort_criterion)"""
        return _oechem.ConstOEHierResidueIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OEHierResidue const > &":
        r"""ToFirst(ConstOEHierResidueIter self) -> ConstOEHierResidueIter"""
        return _oechem.ConstOEHierResidueIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OEHierResidue const > &":
        r"""ToLast(ConstOEHierResidueIter self) -> ConstOEHierResidueIter"""
        return _oechem.ConstOEHierResidueIter_ToLast(self)

    def __ref__(self) -> "OEBio::OEHierResidue const &":
        r"""__ref__(ConstOEHierResidueIter self) -> OEHierResidue"""
        return _oechem.ConstOEHierResidueIter___ref__(self)

    def IsValid(self):
      return _oechem.ConstOEHierResidueIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(ConstOEHierResidueIter self) -> PyObject *"""
        return _oechem.ConstOEHierResidueIter_next(self)

    def Target(self) -> "OEBio::OEHierResidue const &":
        r"""Target(ConstOEHierResidueIter self) -> OEHierResidue"""
        return _oechem.ConstOEHierResidueIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OEHierResidue const > &":
        r"""
        Next(ConstOEHierResidueIter self) -> ConstOEHierResidueIter
        Next(ConstOEHierResidueIter self, int i) -> ConstOEHierResidueIter
        """
        return _oechem.ConstOEHierResidueIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OEHierResidue const > &":
        r"""
        Prev(ConstOEHierResidueIter self) -> ConstOEHierResidueIter
        Prev(ConstOEHierResidueIter self, int i) -> ConstOEHierResidueIter
        """
        return _oechem.ConstOEHierResidueIter_Prev(self, *args)

# Register ConstOEHierResidueIter in _oechem:
_oechem.ConstOEHierResidueIter_swigregister(ConstOEHierResidueIter)

class ConstOEHierFragmentIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OEHierFragment 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__(ConstOEHierFragmentIter self) -> ConstOEHierFragmentIter
        __init__(ConstOEHierFragmentIter self, ConstOEHierFragmentIter rhs) -> ConstOEHierFragmentIter
        __init__(ConstOEHierFragmentIter self, OESystem::OEIterBase< OEBio::OEHierFragment const > * rhs) -> ConstOEHierFragmentIter
        __init__(ConstOEHierFragmentIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEHierFragment const >::NonConstA > * rhs) -> ConstOEHierFragmentIter
        """
        _oechem.ConstOEHierFragmentIter_swiginit(self, _oechem.new_ConstOEHierFragmentIter(*args))
    __swig_destroy__ = _oechem.delete_ConstOEHierFragmentIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OEHierFragment const > *":
        r"""Copy(ConstOEHierFragmentIter self) -> OESystem::OEIterBase< OEBio::OEHierFragment const > *"""
        return _oechem.ConstOEHierFragmentIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(ConstOEHierFragmentIter self, OESystem::OEIterBase< OEBio::OEHierFragment const > * ib)
        Push(ConstOEHierFragmentIter self, ConstOEHierFragmentIter iter)
        """
        return _oechem.ConstOEHierFragmentIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OEHierFragment const,OEBio::OEHierFragment const > const &") -> "void":
        r"""Sort(ConstOEHierFragmentIter self, OESystem::OEBinaryPredicate< OEBio::OEHierFragment const,OEBio::OEHierFragment const > const & sort_criterion)"""
        return _oechem.ConstOEHierFragmentIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OEHierFragment const > &":
        r"""ToFirst(ConstOEHierFragmentIter self) -> ConstOEHierFragmentIter"""
        return _oechem.ConstOEHierFragmentIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OEHierFragment const > &":
        r"""ToLast(ConstOEHierFragmentIter self) -> ConstOEHierFragmentIter"""
        return _oechem.ConstOEHierFragmentIter_ToLast(self)

    def __ref__(self) -> "OEBio::OEHierFragment const &":
        r"""__ref__(ConstOEHierFragmentIter self) -> OEHierFragment"""
        return _oechem.ConstOEHierFragmentIter___ref__(self)

    def IsValid(self):
      return _oechem.ConstOEHierFragmentIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(ConstOEHierFragmentIter self) -> PyObject *"""
        return _oechem.ConstOEHierFragmentIter_next(self)

    def Target(self) -> "OEBio::OEHierFragment const &":
        r"""Target(ConstOEHierFragmentIter self) -> OEHierFragment"""
        return _oechem.ConstOEHierFragmentIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OEHierFragment const > &":
        r"""
        Next(ConstOEHierFragmentIter self) -> ConstOEHierFragmentIter
        Next(ConstOEHierFragmentIter self, int i) -> ConstOEHierFragmentIter
        """
        return _oechem.ConstOEHierFragmentIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OEHierFragment const > &":
        r"""
        Prev(ConstOEHierFragmentIter self) -> ConstOEHierFragmentIter
        Prev(ConstOEHierFragmentIter self, int i) -> ConstOEHierFragmentIter
        """
        return _oechem.ConstOEHierFragmentIter_Prev(self, *args)

# Register ConstOEHierFragmentIter in _oechem:
_oechem.ConstOEHierFragmentIter_swigregister(ConstOEHierFragmentIter)

class ConstOEHierChainIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OEHierChain 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__(ConstOEHierChainIter self) -> ConstOEHierChainIter
        __init__(ConstOEHierChainIter self, ConstOEHierChainIter rhs) -> ConstOEHierChainIter
        __init__(ConstOEHierChainIter self, OESystem::OEIterBase< OEBio::OEHierChain const > * rhs) -> ConstOEHierChainIter
        __init__(ConstOEHierChainIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEHierChain const >::NonConstA > * rhs) -> ConstOEHierChainIter
        """
        _oechem.ConstOEHierChainIter_swiginit(self, _oechem.new_ConstOEHierChainIter(*args))
    __swig_destroy__ = _oechem.delete_ConstOEHierChainIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OEHierChain const > *":
        r"""Copy(ConstOEHierChainIter self) -> OESystem::OEIterBase< OEBio::OEHierChain const > *"""
        return _oechem.ConstOEHierChainIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(ConstOEHierChainIter self, OESystem::OEIterBase< OEBio::OEHierChain const > * ib)
        Push(ConstOEHierChainIter self, ConstOEHierChainIter iter)
        """
        return _oechem.ConstOEHierChainIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OEHierChain const,OEBio::OEHierChain const > const &") -> "void":
        r"""Sort(ConstOEHierChainIter self, OESystem::OEBinaryPredicate< OEBio::OEHierChain const,OEBio::OEHierChain const > const & sort_criterion)"""
        return _oechem.ConstOEHierChainIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OEHierChain const > &":
        r"""ToFirst(ConstOEHierChainIter self) -> ConstOEHierChainIter"""
        return _oechem.ConstOEHierChainIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OEHierChain const > &":
        r"""ToLast(ConstOEHierChainIter self) -> ConstOEHierChainIter"""
        return _oechem.ConstOEHierChainIter_ToLast(self)

    def __ref__(self) -> "OEBio::OEHierChain const &":
        r"""__ref__(ConstOEHierChainIter self) -> OEHierChain"""
        return _oechem.ConstOEHierChainIter___ref__(self)

    def IsValid(self):
      return _oechem.ConstOEHierChainIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(ConstOEHierChainIter self) -> PyObject *"""
        return _oechem.ConstOEHierChainIter_next(self)

    def Target(self) -> "OEBio::OEHierChain const &":
        r"""Target(ConstOEHierChainIter self) -> OEHierChain"""
        return _oechem.ConstOEHierChainIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OEHierChain const > &":
        r"""
        Next(ConstOEHierChainIter self) -> ConstOEHierChainIter
        Next(ConstOEHierChainIter self, int i) -> ConstOEHierChainIter
        """
        return _oechem.ConstOEHierChainIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OEHierChain const > &":
        r"""
        Prev(ConstOEHierChainIter self) -> ConstOEHierChainIter
        Prev(ConstOEHierChainIter self, int i) -> ConstOEHierChainIter
        """
        return _oechem.ConstOEHierChainIter_Prev(self, *args)

# Register ConstOEHierChainIter in _oechem:
_oechem.ConstOEHierChainIter_swigregister(ConstOEHierChainIter)


def OERMSD(*args) -> "double":
    r"""
    OERMSD(OEMolBase ref, OEMolBase fit, bool automorph=True, bool heavyOnly=True, bool overlay=False, double * rot=None, double * trans=None) -> double
    OERMSD(OEMolBase ref, OEMolBase fit, OEMatchBase match, bool overlay=False, double * rot=None, double * trans=None) -> double
    OERMSD(OEMolBase ref, OEMCMolBase fit, double * rmsdArray, bool automorph=True, bool heavyOnly=True, bool overlay=False, double * rot=None, double * trans=None) -> bool
    OERMSD(OEMolBase ref, OEMCMolBase fit, double * rmsdArray, OEMatchBase match, bool overlay=False, double * rot=None, double * trans=None) -> bool
    OERMSD(OEMolBase ref, OEMolBase fit, double * rmsdArray, OEMatchBase match, bool overlay=False, double * rot=None, double * trans=None) -> bool
    OERMSD(float const * refcrds, float const * fitcrds, unsigned int size, bool overlay=False, double * rot=None, double * trans=None) -> double
    OERMSD(double const * refcrds, double const * fitcrds, unsigned int size, bool overlay=False, double * rot=None, double * trans=None) -> double
    OERMSD(OEMolBase ref, OEMolBase fit, OESequenceAlignment align, bool onlyCAlpha=True, bool overlay=False, double * rot=None, double * trans=None) -> double
    """
    return _oechem.OERMSD(*args)

def OEGetTorsion(*args) -> "double":
    r"""
    OEGetTorsion(OEMolBase arg1, OEAtomBase a, OEAtomBase b, OEAtomBase c, OEAtomBase d) -> double
    OEGetTorsion(OEConfBase arg1, OEAtomBase a, OEAtomBase b, OEAtomBase c, OEAtomBase d) -> double
    OEGetTorsion(OEHierResidue res, unsigned int torType) -> double
    OEGetTorsion(OEAtomBase atom, unsigned int torType, unsigned int assume=OEAssumption::Default) -> double
    """
    return _oechem.OEGetTorsion(*args)

def OESetTorsion(*args) -> "bool":
    r"""
    OESetTorsion(OEMolBase arg1, OEAtomBase a, OEAtomBase b, OEAtomBase c, OEAtomBase d, double ang) -> bool
    OESetTorsion(OEConfBase arg1, OEAtomBase a, OEAtomBase b, OEAtomBase c, OEAtomBase d, double ang) -> bool
    OESetTorsion(OEHierResidue res, unsigned int torType, double radians) -> bool
    OESetTorsion(OEAtomBase atom, unsigned int torType, double radians, unsigned int assume=OEAssumption::Default) -> bool
    """
    return _oechem.OESetTorsion(*args)

def OEGetChis(*args) -> "PyObject *":
    r"""
    OEGetChis(OEHierResidue res) -> PyObject
    OEGetChis(OEAtomBase atom, unsigned int assume=OEAssumption::Default) -> PyObject
    """
    return _oechem.OEGetChis(*args)

def OEGetResidues(mol: "OEMolBase") -> "OESystem::OEIterBase< OEChem::OEResidue > *":
    r"""OEGetResidues(OEMolBase mol) -> OESystem::OEIterBase< OEChem::OEResidue > *"""
    return _oechem.OEGetResidues(mol)

def OEGetProteinTorsionName(torType: "unsigned int") -> "char const *":
    r"""OEGetProteinTorsionName(unsigned int torType) -> char const *"""
    return _oechem.OEGetProteinTorsionName(torType)

def OEGetPhi(*args) -> "double":
    r"""
    OEGetPhi(OEHierResidue res) -> double
    OEGetPhi(OEAtomBase atom, unsigned int assume=) -> double
    """
    return _oechem.OEGetPhi(*args)

def OEGetPsi(*args) -> "double":
    r"""
    OEGetPsi(OEHierResidue res) -> double
    OEGetPsi(OEAtomBase atom, unsigned int assume=) -> double
    """
    return _oechem.OEGetPsi(*args)

def OESwapAIEResidueAtoms(*args) -> "bool":
    r"""
    OESwapAIEResidueAtoms(OEMolBase mol, OEHierResidue res) -> bool
    OESwapAIEResidueAtoms(OEMCMolBase mol, OEHierResidue res) -> bool
    OESwapAIEResidueAtoms(OEMolBase mol, OEAtomBase atom, unsigned int assume=) -> bool
    OESwapAIEResidueAtoms(OEMCMolBase mol, OEAtomBase atom, unsigned int assume=) -> bool
    """
    return _oechem.OESwapAIEResidueAtoms(*args)

def OEIsStandardProteinResidue(*args) -> "bool":
    r"""
    OEIsStandardProteinResidue(OEAtomBase atom) -> bool
    OEIsStandardProteinResidue(OEHierResidue hres) -> bool
    OEIsStandardProteinResidue(OEResidue res) -> bool
    OEIsStandardProteinResidue(unsigned int resIdx) -> bool
    OEIsStandardProteinResidue(OEHierResidueIter hit) -> bool
    """
    return _oechem.OEIsStandardProteinResidue(*args)

def OEIsStandardNucleicAcidResidue(*args) -> "bool":
    r"""
    OEIsStandardNucleicAcidResidue(OEAtomBase atom) -> bool
    OEIsStandardNucleicAcidResidue(OEHierResidue hres) -> bool
    OEIsStandardNucleicAcidResidue(OEResidue res) -> bool
    OEIsStandardNucleicAcidResidue(unsigned int resIdx) -> bool
    OEIsStandardNucleicAcidResidue(OEHierResidueIter hit) -> bool
    """
    return _oechem.OEIsStandardNucleicAcidResidue(*args)
class OERamachandranAnalysis(object):
    r"""Proxy of C++ OEBio::OERamachandranAnalysis 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__(OERamachandranAnalysis self, double phi, double psi, unsigned int const ramaType) -> OERamachandranAnalysis
        __init__(OERamachandranAnalysis self, OEAtomBase atom) -> OERamachandranAnalysis
        __init__(OERamachandranAnalysis self, OEHierResidue res) -> OERamachandranAnalysis
        __init__(OERamachandranAnalysis self, OEMolBase mol, OEResidue res) -> OERamachandranAnalysis
        __init__(OERamachandranAnalysis self, OERamachandranAnalysis arg2) -> OERamachandranAnalysis
        """
        _oechem.OERamachandranAnalysis_swiginit(self, _oechem.new_OERamachandranAnalysis(*args))
    __swig_destroy__ = _oechem.delete_OERamachandranAnalysis

    def GetRamaScore(self) -> "double":
        r"""GetRamaScore(OERamachandranAnalysis self) -> double"""
        return _oechem.OERamachandranAnalysis_GetRamaScore(self)

    def GetPhi(self) -> "double":
        r"""GetPhi(OERamachandranAnalysis self) -> double"""
        return _oechem.OERamachandranAnalysis_GetPhi(self)

    def GetPsi(self) -> "double":
        r"""GetPsi(OERamachandranAnalysis self) -> double"""
        return _oechem.OERamachandranAnalysis_GetPsi(self)

    def GetRamaType(self) -> "unsigned int":
        r"""GetRamaType(OERamachandranAnalysis self) -> unsigned int"""
        return _oechem.OERamachandranAnalysis_GetRamaType(self)

    def GetRamaCategory(self) -> "unsigned int":
        r"""GetRamaCategory(OERamachandranAnalysis self) -> unsigned int"""
        return _oechem.OERamachandranAnalysis_GetRamaCategory(self)

# Register OERamachandranAnalysis in _oechem:
_oechem.OERamachandranAnalysis_swigregister(OERamachandranAnalysis)


def OEGetRamachandranTypeName(ramaType: "unsigned int const") -> "std::string":
    r"""OEGetRamachandranTypeName(unsigned int const ramaType) -> std::string"""
    return _oechem.OEGetRamachandranTypeName(ramaType)

def OEGetRamachandranCategoryName(ramaCategory: "unsigned int const") -> "std::string":
    r"""OEGetRamachandranCategoryName(unsigned int const ramaCategory) -> std::string"""
    return _oechem.OEGetRamachandranCategoryName(ramaCategory)

def OEPerceiveSecondaryStructure(mol: "OEMolBase", force: "bool"=False) -> "bool":
    r"""OEPerceiveSecondaryStructure(OEMolBase mol, bool force=False) -> bool"""
    return _oechem.OEPerceiveSecondaryStructure(mol, force)

def OEGetSecondaryStructureName(ssValue: "int") -> "std::string":
    r"""OEGetSecondaryStructureName(int ssValue) -> std::string"""
    return _oechem.OEGetSecondaryStructureName(ssValue)

def OEGetSecondaryStructureID(ssValue: "int") -> "int":
    r"""OEGetSecondaryStructureID(int ssValue) -> int"""
    return _oechem.OEGetSecondaryStructureID(ssValue)

def OEGetSecondaryStructureStrandID(ssValue: "int") -> "int":
    r"""OEGetSecondaryStructureStrandID(int ssValue) -> int"""
    return _oechem.OEGetSecondaryStructureStrandID(ssValue)

def OEGetSecondaryStructureType(ssValue: "int") -> "int":
    r"""OEGetSecondaryStructureType(int ssValue) -> int"""
    return _oechem.OEGetSecondaryStructureType(ssValue)

def OESecondaryStructurePacked(ssType: "int", ssIDNumber: "int", strandID: "int"=0) -> "int":
    r"""OESecondaryStructurePacked(int ssType, int ssIDNumber, int strandID=0) -> int"""
    return _oechem.OESecondaryStructurePacked(ssType, ssIDNumber, strandID)
class OEHasSecondaryStructure(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEHasSecondaryStructure 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__(OEHasSecondaryStructure self, int ssType=) -> OEHasSecondaryStructure
        __init__(OEHasSecondaryStructure self, OEHasSecondaryStructure rhs) -> OEHasSecondaryStructure
        """
        _oechem.OEHasSecondaryStructure_swiginit(self, _oechem.new_OEHasSecondaryStructure(*args))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEHasSecondaryStructure self, OEAtomBase atom) -> bool"""
        return _oechem.OEHasSecondaryStructure___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEHasSecondaryStructure

# Register OEHasSecondaryStructure in _oechem:
_oechem.OEHasSecondaryStructure_swigregister(OEHasSecondaryStructure)


def OEGetColorSchemeName(colorScheme: "unsigned int") -> "char const *":
    r"""OEGetColorSchemeName(unsigned int colorScheme) -> char const *"""
    return _oechem.OEGetColorSchemeName(colorScheme)
class OEMolStyleColorer(object):
    r"""Proxy of C++ OEChem::OEMolStyleColorer 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__(OEMolStyleColorer self) -> OEMolStyleColorer
        __init__(OEMolStyleColorer self, OEColor col) -> OEMolStyleColorer
        __init__(OEMolStyleColorer self, OEMolStyleColorer other) -> OEMolStyleColorer
        __init__(OEMolStyleColorer self, unsigned int colorScheme) -> OEMolStyleColorer
        __init__(OEMolStyleColorer self, unsigned int colorScheme, OEColor defaultColor) -> OEMolStyleColorer
        __init__(OEMolStyleColorer self, std::string const & propertyName) -> OEMolStyleColorer
        __init__(OEMolStyleColorer self, std::string const & propertyName, OEColor defaultColor) -> OEMolStyleColorer
        __init__(OEMolStyleColorer self, char const * propertyName) -> OEMolStyleColorer
        __init__(OEMolStyleColorer self, char const * propertyName, OEColor defaultColor) -> OEMolStyleColorer
        """
        _oechem.OEMolStyleColorer_swiginit(self, _oechem.new_OEMolStyleColorer(*args))
    __swig_destroy__ = _oechem.delete_OEMolStyleColorer

    def GetColorScheme(self) -> "unsigned int":
        r"""GetColorScheme(OEMolStyleColorer self) -> unsigned int"""
        return _oechem.OEMolStyleColorer_GetColorScheme(self)

    def GetPropertyName(self) -> "std::string":
        r"""GetPropertyName(OEMolStyleColorer self) -> std::string"""
        return _oechem.OEMolStyleColorer_GetPropertyName(self)

    def AddColor(self, *args) -> "bool":
        r"""
        AddColor(OEMolStyleColorer self, double value, OEColor col) -> bool
        AddColor(OEMolStyleColorer self, std::string const & value, OEColor col) -> bool
        AddColor(OEMolStyleColorer self, int value, OEColor col) -> bool
        AddColor(OEMolStyleColorer self, unsigned int value, OEColor col) -> bool
        """
        return _oechem.OEMolStyleColorer_AddColor(self, *args)

    def ClearColors(self) -> "void":
        r"""ClearColors(OEMolStyleColorer self)"""
        return _oechem.OEMolStyleColorer_ClearColors(self)

    def GetNumColors(self) -> "unsigned int":
        r"""GetNumColors(OEMolStyleColorer self) -> unsigned int"""
        return _oechem.OEMolStyleColorer_GetNumColors(self)

    def GetValues(self, *args) -> "bool":
        r"""
        GetValues(OEMolStyleColorer self, OEDoubleVector vals) -> bool
        GetValues(OEMolStyleColorer self, OEStringVector vals) -> bool
        GetValues(OEMolStyleColorer self, OEIntVector vals) -> bool
        """
        return _oechem.OEMolStyleColorer_GetValues(self, *args)

    def GetColor(self, *args) -> "OESystem::OEColor":
        r"""
        GetColor(OEMolStyleColorer self, double val) -> OEColor
        GetColor(OEMolStyleColorer self, double val, double scaleMin, double scaleMax) -> OEColor
        GetColor(OEMolStyleColorer self, std::string const & val) -> OEColor
        GetColor(OEMolStyleColorer self, int val) -> OEColor
        GetColor(OEMolStyleColorer self, unsigned int val) -> OEColor
        GetColor(OEMolStyleColorer self) -> OEColor
        """
        return _oechem.OEMolStyleColorer_GetColor(self, *args)

    def GetDefaultColor(self) -> "OESystem::OEColor":
        r"""GetDefaultColor(OEMolStyleColorer self) -> OEColor"""
        return _oechem.OEMolStyleColorer_GetDefaultColor(self)

    def SetDefaultColor(self, col: "OEColor") -> "void":
        r"""SetDefaultColor(OEMolStyleColorer self, OEColor col)"""
        return _oechem.OEMolStyleColorer_SetDefaultColor(self, col)

    def GetDataTypes(self) -> "unsigned int":
        r"""GetDataTypes(OEMolStyleColorer self) -> unsigned int"""
        return _oechem.OEMolStyleColorer_GetDataTypes(self)

    def __lt__(self, rhs: "OEMolStyleColorer") -> "bool":
        r"""__lt__(OEMolStyleColorer self, OEMolStyleColorer rhs) -> bool"""
        return _oechem.OEMolStyleColorer___lt__(self, rhs)

    def __eq__(self, rhs: "OEMolStyleColorer") -> "bool":
        r"""__eq__(OEMolStyleColorer self, OEMolStyleColorer rhs) -> bool"""
        return _oechem.OEMolStyleColorer___eq__(self, rhs)

    def GetImpl(self, *args) -> "OEChem::OEMolStyleColorerImpl *":
        r"""
        GetImpl(OEMolStyleColorer self) -> OEChem::OEMolStyleColorerImpl const
        GetImpl(OEMolStyleColorer self) -> OEChem::OEMolStyleColorerImpl *
        """
        return _oechem.OEMolStyleColorer_GetImpl(self, *args)

# Register OEMolStyleColorer in _oechem:
_oechem.OEMolStyleColorer_swigregister(OEMolStyleColorer)

class OE3DMolStyle(object):
    r"""Proxy of C++ OEChem::OE3DMolStyle 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__(OE3DMolStyle self) -> OE3DMolStyle
        __init__(OE3DMolStyle self, OE3DMolStyle other) -> OE3DMolStyle
        """
        _oechem.OE3DMolStyle_swiginit(self, _oechem.new_OE3DMolStyle(*args))
    __swig_destroy__ = _oechem.delete_OE3DMolStyle

    def __eq__(self, rhs: "OE3DMolStyle") -> "bool":
        r"""__eq__(OE3DMolStyle self, OE3DMolStyle rhs) -> bool"""
        return _oechem.OE3DMolStyle___eq__(self, rhs)

    def __lt__(self, rhs: "OE3DMolStyle") -> "bool":
        r"""__lt__(OE3DMolStyle self, OE3DMolStyle rhs) -> bool"""
        return _oechem.OE3DMolStyle___lt__(self, rhs)

    def SetAtomStyle(self, displayStyle: "unsigned int") -> "OEChem::OE3DMolStyle &":
        r"""SetAtomStyle(OE3DMolStyle self, unsigned int displayStyle) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetAtomStyle(self, displayStyle)

    def GetAtomStyle(self) -> "unsigned int":
        r"""GetAtomStyle(OE3DMolStyle self) -> unsigned int"""
        return _oechem.OE3DMolStyle_GetAtomStyle(self)

    def HasAtomStyle(self) -> "bool":
        r"""HasAtomStyle(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasAtomStyle(self)

    def ClearAtomStyle(self) -> "void":
        r"""ClearAtomStyle(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearAtomStyle(self)

    def SetAtomColorer(self, colorer: "OEMolStyleColorer") -> "OEChem::OE3DMolStyle &":
        r"""SetAtomColorer(OE3DMolStyle self, OEMolStyleColorer colorer) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetAtomColorer(self, colorer)

    def GetAtomColorer(self) -> "OEChem::OEMolStyleColorer const &":
        r"""GetAtomColorer(OE3DMolStyle self) -> OEMolStyleColorer"""
        return _oechem.OE3DMolStyle_GetAtomColorer(self)

    def HasAtomColorer(self) -> "bool":
        r"""HasAtomColorer(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasAtomColorer(self)

    def ClearAtomColorer(self) -> "void":
        r"""ClearAtomColorer(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearAtomColorer(self)

    def SetHydrogenVisibility(self, mode: "unsigned int") -> "OEChem::OE3DMolStyle &":
        r"""SetHydrogenVisibility(OE3DMolStyle self, unsigned int mode) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetHydrogenVisibility(self, mode)

    def GetHydrogenVisibility(self) -> "unsigned int":
        r"""GetHydrogenVisibility(OE3DMolStyle self) -> unsigned int"""
        return _oechem.OE3DMolStyle_GetHydrogenVisibility(self)

    def HasHydrogenVisibility(self) -> "bool":
        r"""HasHydrogenVisibility(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasHydrogenVisibility(self)

    def ClearHydrogenVisibility(self) -> "void":
        r"""ClearHydrogenVisibility(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearHydrogenVisibility(self)

    def SetInteractionStyle(self, mode: "unsigned int") -> "OEChem::OE3DMolStyle &":
        r"""SetInteractionStyle(OE3DMolStyle self, unsigned int mode) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetInteractionStyle(self, mode)

    def GetInteractionStyle(self) -> "unsigned int":
        r"""GetInteractionStyle(OE3DMolStyle self) -> unsigned int"""
        return _oechem.OE3DMolStyle_GetInteractionStyle(self)

    def HasInteractionStyle(self) -> "bool":
        r"""HasInteractionStyle(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasInteractionStyle(self)

    def ClearInteractionStyle(self) -> "void":
        r"""ClearInteractionStyle(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearInteractionStyle(self)

    def SetProteinStyle(self, displayStyle: "unsigned int") -> "OEChem::OE3DMolStyle &":
        r"""SetProteinStyle(OE3DMolStyle self, unsigned int displayStyle) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetProteinStyle(self, displayStyle)

    def GetProteinStyle(self) -> "unsigned int":
        r"""GetProteinStyle(OE3DMolStyle self) -> unsigned int"""
        return _oechem.OE3DMolStyle_GetProteinStyle(self)

    def HasProteinStyle(self) -> "bool":
        r"""HasProteinStyle(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasProteinStyle(self)

    def ClearProteinStyle(self) -> "void":
        r"""ClearProteinStyle(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearProteinStyle(self)

    def SetProteinColorer(self, colorer: "OEMolStyleColorer") -> "OEChem::OE3DMolStyle &":
        r"""SetProteinColorer(OE3DMolStyle self, OEMolStyleColorer colorer) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetProteinColorer(self, colorer)

    def GetProteinColorer(self) -> "OEChem::OEMolStyleColorer const &":
        r"""GetProteinColorer(OE3DMolStyle self) -> OEMolStyleColorer"""
        return _oechem.OE3DMolStyle_GetProteinColorer(self)

    def HasProteinColorer(self) -> "bool":
        r"""HasProteinColorer(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasProteinColorer(self)

    def ClearProteinColorer(self) -> "void":
        r"""ClearProteinColorer(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearProteinColorer(self)

    def SetSurfaceType(self, surfaceType: "unsigned int") -> "OEChem::OE3DMolStyle &":
        r"""SetSurfaceType(OE3DMolStyle self, unsigned int surfaceType) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetSurfaceType(self, surfaceType)

    def GetSurfaceType(self) -> "unsigned int":
        r"""GetSurfaceType(OE3DMolStyle self) -> unsigned int"""
        return _oechem.OE3DMolStyle_GetSurfaceType(self)

    def HasSurfaceType(self) -> "bool":
        r"""HasSurfaceType(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasSurfaceType(self)

    def ClearSurfaceType(self) -> "void":
        r"""ClearSurfaceType(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearSurfaceType(self)

    def SetSurfaceStyle(self, displayStyle: "unsigned int") -> "OEChem::OE3DMolStyle &":
        r"""SetSurfaceStyle(OE3DMolStyle self, unsigned int displayStyle) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetSurfaceStyle(self, displayStyle)

    def GetSurfaceStyle(self) -> "unsigned int":
        r"""GetSurfaceStyle(OE3DMolStyle self) -> unsigned int"""
        return _oechem.OE3DMolStyle_GetSurfaceStyle(self)

    def HasSurfaceStyle(self) -> "bool":
        r"""HasSurfaceStyle(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasSurfaceStyle(self)

    def ClearSurfaceStyle(self) -> "void":
        r"""ClearSurfaceStyle(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearSurfaceStyle(self)

    def SetSurfaceColorer(self, colorer: "OEMolStyleColorer") -> "OEChem::OE3DMolStyle &":
        r"""SetSurfaceColorer(OE3DMolStyle self, OEMolStyleColorer colorer) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetSurfaceColorer(self, colorer)

    def GetSurfaceColorer(self) -> "OEChem::OEMolStyleColorer const &":
        r"""GetSurfaceColorer(OE3DMolStyle self) -> OEMolStyleColorer"""
        return _oechem.OE3DMolStyle_GetSurfaceColorer(self)

    def HasSurfaceColorer(self) -> "bool":
        r"""HasSurfaceColorer(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasSurfaceColorer(self)

    def ClearSurfaceColorer(self) -> "void":
        r"""ClearSurfaceColorer(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearSurfaceColorer(self)

    def SetSurfaceAlpha(self, alpha: "unsigned int") -> "OEChem::OE3DMolStyle &":
        r"""SetSurfaceAlpha(OE3DMolStyle self, unsigned int alpha) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetSurfaceAlpha(self, alpha)

    def GetSurfaceAlpha(self) -> "unsigned int":
        r"""GetSurfaceAlpha(OE3DMolStyle self) -> unsigned int"""
        return _oechem.OE3DMolStyle_GetSurfaceAlpha(self)

    def HasSurfaceAlpha(self) -> "bool":
        r"""HasSurfaceAlpha(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasSurfaceAlpha(self)

    def ClearSurfaceAlpha(self) -> "void":
        r"""ClearSurfaceAlpha(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearSurfaceAlpha(self)

    def SetGridType(self, gridType: "unsigned int") -> "OEChem::OE3DMolStyle &":
        r"""SetGridType(OE3DMolStyle self, unsigned int gridType) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetGridType(self, gridType)

    def GetGridType(self) -> "unsigned int":
        r"""GetGridType(OE3DMolStyle self) -> unsigned int"""
        return _oechem.OE3DMolStyle_GetGridType(self)

    def HasGridType(self) -> "bool":
        r"""HasGridType(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasGridType(self)

    def ClearGridType(self) -> "void":
        r"""ClearGridType(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearGridType(self)

    def SetContourStyle(self, displayStyle: "unsigned int") -> "OEChem::OE3DMolStyle &":
        r"""SetContourStyle(OE3DMolStyle self, unsigned int displayStyle) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetContourStyle(self, displayStyle)

    def GetContourStyle(self) -> "unsigned int":
        r"""GetContourStyle(OE3DMolStyle self) -> unsigned int"""
        return _oechem.OE3DMolStyle_GetContourStyle(self)

    def HasContourStyle(self) -> "bool":
        r"""HasContourStyle(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasContourStyle(self)

    def ClearContourStyle(self) -> "void":
        r"""ClearContourStyle(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearContourStyle(self)

    def SetGridContourColorer(self, colorer: "OEMolStyleColorer") -> "OEChem::OE3DMolStyle &":
        r"""SetGridContourColorer(OE3DMolStyle self, OEMolStyleColorer colorer) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetGridContourColorer(self, colorer)

    def GetGridContourColorer(self) -> "OEChem::OEMolStyleColorer const &":
        r"""GetGridContourColorer(OE3DMolStyle self) -> OEMolStyleColorer"""
        return _oechem.OE3DMolStyle_GetGridContourColorer(self)

    def HasGridContourColorer(self) -> "bool":
        r"""HasGridContourColorer(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasGridContourColorer(self)

    def ClearGridContourColorer(self) -> "void":
        r"""ClearGridContourColorer(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearGridContourColorer(self)

    def SetAtomLabelType(self, labelData: "unsigned int", precision: "unsigned int"=0) -> "OEChem::OE3DMolStyle &":
        r"""SetAtomLabelType(OE3DMolStyle self, unsigned int labelData, unsigned int precision=0) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetAtomLabelType(self, labelData, precision)

    def GetAtomLabelType(self) -> "unsigned int":
        r"""GetAtomLabelType(OE3DMolStyle self) -> unsigned int"""
        return _oechem.OE3DMolStyle_GetAtomLabelType(self)

    def HasAtomLabelType(self) -> "bool":
        r"""HasAtomLabelType(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasAtomLabelType(self)

    def ClearAtomLabelType(self) -> "void":
        r"""ClearAtomLabelType(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearAtomLabelType(self)

    def GetAtomLabelPrecision(self) -> "unsigned int":
        r"""GetAtomLabelPrecision(OE3DMolStyle self) -> unsigned int"""
        return _oechem.OE3DMolStyle_GetAtomLabelPrecision(self)

    def SetAtomLabelText(self, label: "std::string const &") -> "OEChem::OE3DMolStyle &":
        r"""SetAtomLabelText(OE3DMolStyle self, std::string const & label) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetAtomLabelText(self, label)

    def GetAtomLabelText(self) -> "std::string":
        r"""GetAtomLabelText(OE3DMolStyle self) -> std::string"""
        return _oechem.OE3DMolStyle_GetAtomLabelText(self)

    def HasAtomLabelText(self) -> "bool":
        r"""HasAtomLabelText(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasAtomLabelText(self)

    def ClearAtomLabelText(self) -> "void":
        r"""ClearAtomLabelText(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearAtomLabelText(self)

    def SetAtomLabelDataTag(self, tag: "std::string const &", precision: "unsigned int"=0) -> "OEChem::OE3DMolStyle &":
        r"""SetAtomLabelDataTag(OE3DMolStyle self, std::string const & tag, unsigned int precision=0) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetAtomLabelDataTag(self, tag, precision)

    def GetAtomLabelDataTag(self) -> "std::string":
        r"""GetAtomLabelDataTag(OE3DMolStyle self) -> std::string"""
        return _oechem.OE3DMolStyle_GetAtomLabelDataTag(self)

    def HasAtomLabelDataTag(self) -> "bool":
        r"""HasAtomLabelDataTag(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasAtomLabelDataTag(self)

    def ClearAtomLabelDataTag(self) -> "void":
        r"""ClearAtomLabelDataTag(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearAtomLabelDataTag(self)

    def SetAtomLabelColorer(self, colorer: "OEMolStyleColorer") -> "OEChem::OE3DMolStyle &":
        r"""SetAtomLabelColorer(OE3DMolStyle self, OEMolStyleColorer colorer) -> OE3DMolStyle"""
        return _oechem.OE3DMolStyle_SetAtomLabelColorer(self, colorer)

    def GetAtomLabelColorer(self) -> "OEChem::OEMolStyleColorer const &":
        r"""GetAtomLabelColorer(OE3DMolStyle self) -> OEMolStyleColorer"""
        return _oechem.OE3DMolStyle_GetAtomLabelColorer(self)

    def HasAtomLabelColorer(self) -> "bool":
        r"""HasAtomLabelColorer(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_HasAtomLabelColorer(self)

    def ClearAtomLabelColorer(self) -> "void":
        r"""ClearAtomLabelColorer(OE3DMolStyle self)"""
        return _oechem.OE3DMolStyle_ClearAtomLabelColorer(self)

    def GetString(self) -> "std::string":
        r"""GetString(OE3DMolStyle self) -> std::string"""
        return _oechem.OE3DMolStyle_GetString(self)

    def FromString(self, str: "std::string const &") -> "bool":
        r"""FromString(OE3DMolStyle self, std::string const & str) -> bool"""
        return _oechem.OE3DMolStyle_FromString(self, str)

    def IsValid(self) -> "bool":
        r"""IsValid(OE3DMolStyle self) -> bool"""
        return _oechem.OE3DMolStyle_IsValid(self)

    def GetImpl(self, *args) -> "OEChem::OE3DMolStyleImpl *":
        r"""
        GetImpl(OE3DMolStyle self) -> OEChem::OE3DMolStyleImpl const
        GetImpl(OE3DMolStyle self) -> OEChem::OE3DMolStyleImpl *
        """
        return _oechem.OE3DMolStyle_GetImpl(self, *args)

# Register OE3DMolStyle in _oechem:
_oechem.OE3DMolStyle_swigregister(OE3DMolStyle)


def OEHasStyle(mol: "OEMolBase") -> "bool":
    r"""OEHasStyle(OEMolBase mol) -> bool"""
    return _oechem.OEHasStyle(mol)

def OEGetStyle(*args) -> "OEChem::OE3DMolStyle":
    r"""
    OEGetStyle(OEMolBase mol) -> OE3DMolStyle
    OEGetStyle(OEAtomBase atom) -> OE3DMolStyle
    OEGetStyle(OEAtomBase atom, OEConfBase c) -> OE3DMolStyle
    OEGetStyle(OEAtomBase atom, OE3DMolStyle dflt) -> OE3DMolStyle
    """
    return _oechem.OEGetStyle(*args)

def OESetStyle(*args) -> "void":
    r"""
    OESetStyle(OEMolBase mol, OE3DMolStyle style)
    OESetStyle(OEAtomBase atom, OE3DMolStyle style)
    OESetStyle(OEAtomIter atoms, OE3DMolStyle style)
    """
    return _oechem.OESetStyle(*args)

def OEClearStyle(*args) -> "void":
    r"""
    OEClearStyle(OEContainer cont)
    OEClearStyle(OEMolBase mol)
    OEClearStyle(OEAtomBase atom)
    OEClearStyle(OEAtomIter atoms)
    """
    return _oechem.OEClearStyle(*args)

def OESweepStyles(mol: "OEMolBase") -> "void":
    r"""OESweepStyles(OEMolBase mol)"""
    return _oechem.OESweepStyles(mol)

def OEAddMolStyles(lhs: "OEMolBase", rhs: "OEMolBase", aa: "OEChem::OEAtomBase **", arg4: "OEChem::OEBondBase **") -> "void":
    r"""OEAddMolStyles(OEMolBase lhs, OEMolBase rhs, OEChem::OEAtomBase ** aa, OEChem::OEBondBase ** arg4)"""
    return _oechem.OEAddMolStyles(lhs, rhs, aa, arg4)

def OEGetStyleChange(initialStyle: "OE3DMolStyle", finalStyle: "OE3DMolStyle") -> "OEChem::OE3DMolStyle":
    r"""OEGetStyleChange(OE3DMolStyle initialStyle, OE3DMolStyle finalStyle) -> OE3DMolStyle"""
    return _oechem.OEGetStyleChange(initialStyle, finalStyle)

def OEApplyStyleChange(initialStyle: "OE3DMolStyle", deltaStyle: "OE3DMolStyle") -> "OEChem::OE3DMolStyle":
    r"""OEApplyStyleChange(OE3DMolStyle initialStyle, OE3DMolStyle deltaStyle) -> OE3DMolStyle"""
    return _oechem.OEApplyStyleChange(initialStyle, deltaStyle)

def OEGetAtomColor(atom: "OEAtomBase") -> "OESystem::OEColor":
    r"""OEGetAtomColor(OEAtomBase atom) -> OEColor"""
    return _oechem.OEGetAtomColor(atom)

def OEGetAtomLabelColor(atom: "OEAtomBase") -> "OESystem::OEColor":
    r"""OEGetAtomLabelColor(OEAtomBase atom) -> OEColor"""
    return _oechem.OEGetAtomLabelColor(atom)

def OEGetAtomLabelText(atom: "OEAtomBase") -> "std::string":
    r"""OEGetAtomLabelText(OEAtomBase atom) -> std::string"""
    return _oechem.OEGetAtomLabelText(atom)

def OESerializeMolStyles(mol: "OEMolBase") -> "std::string":
    r"""OESerializeMolStyles(OEMolBase mol) -> std::string"""
    return _oechem.OESerializeMolStyles(mol)

def OEDeserializeMolStyles(mol: "OEMolBase", str: "std::string const &", clear: "bool"=False) -> "bool":
    r"""OEDeserializeMolStyles(OEMolBase mol, std::string const & str, bool clear=False) -> bool"""
    return _oechem.OEDeserializeMolStyles(mol, str, clear)

def OEGetStyleIndex(*args) -> "unsigned int":
    r"""
    OEGetStyleIndex(OEAtomBase atom) -> unsigned int
    OEGetStyleIndex(OEConfBase conf) -> unsigned int
    """
    return _oechem.OEGetStyleIndex(*args)

def OESetStyleIndex(*args) -> "void":
    r"""
    OESetStyleIndex(OEAtomBase atom, unsigned int idx)
    OESetStyleIndex(OEConfBase conf, unsigned int idx)
    """
    return _oechem.OESetStyleIndex(*args)

def OEHasBondedResidues(*args) -> "bool":
    r"""OEHasBondedResidues(OEMolBase mol, unsigned int assume=) -> bool"""
    return _oechem.OEHasBondedResidues(*args)
class OERotamer(object):
    r"""Proxy of C++ OEBio::OERotamer class."""

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

    def GetResidueIndex(self) -> "unsigned int":
        r"""GetResidueIndex(OERotamer self) -> unsigned int"""
        return _oechem.OERotamer_GetResidueIndex(self)

    def GetProbability(self) -> "float":
        r"""GetProbability(OERotamer self) -> float"""
        return _oechem.OERotamer_GetProbability(self)

    def GetChi1(self) -> "float":
        r"""GetChi1(OERotamer self) -> float"""
        return _oechem.OERotamer_GetChi1(self)

    def GetChi2(self) -> "float":
        r"""GetChi2(OERotamer self) -> float"""
        return _oechem.OERotamer_GetChi2(self)

    def GetChi3(self) -> "float":
        r"""GetChi3(OERotamer self) -> float"""
        return _oechem.OERotamer_GetChi3(self)

    def GetChi4(self) -> "float":
        r"""GetChi4(OERotamer self) -> float"""
        return _oechem.OERotamer_GetChi4(self)
    ridx = property(_oechem.OERotamer_ridx_get, _oechem.OERotamer_ridx_set, doc=r"""ridx : unsigned int""")
    prob = property(_oechem.OERotamer_prob_get, _oechem.OERotamer_prob_set, doc=r"""prob : float""")
    chi1 = property(_oechem.OERotamer_chi1_get, _oechem.OERotamer_chi1_set, doc=r"""chi1 : float""")
    chi2 = property(_oechem.OERotamer_chi2_get, _oechem.OERotamer_chi2_set, doc=r"""chi2 : float""")
    chi3 = property(_oechem.OERotamer_chi3_get, _oechem.OERotamer_chi3_set, doc=r"""chi3 : float""")
    chi4 = property(_oechem.OERotamer_chi4_get, _oechem.OERotamer_chi4_set, doc=r"""chi4 : float""")

    def __init__(self):
        r"""__init__(OERotamer self) -> OERotamer"""
        _oechem.OERotamer_swiginit(self, _oechem.new_OERotamer())
    __swig_destroy__ = _oechem.delete_OERotamer

# Register OERotamer in _oechem:
_oechem.OERotamer_swigregister(OERotamer)


def OEGetRotamers(*args) -> "OESystem::OEIterBase< OEBio::OERotamer > *":
    r"""
    OEGetRotamers(unsigned int residueIndex, unsigned int library=) -> OESystem::OEIterBase< OEBio::OERotamer >
    OEGetRotamers(OEResidue residue, unsigned int library=) -> OESystem::OEIterBase< OEBio::OERotamer >
    OEGetRotamers(OEHierResidue residue, unsigned int library=) -> OESystem::OEIterBase< OEBio::OERotamer >
    OEGetRotamers(OEHierResidueIter hit, unsigned int library=) -> OESystem::OEIterBase< OEBio::OERotamer >
    """
    return _oechem.OEGetRotamers(*args)

def OESetRotamer(*args) -> "bool":
    r"""
    OESetRotamer(OEHierResidue residue, OERotamer rotamer) -> bool
    OESetRotamer(OEAtomBase atom, OERotamer rotamer) -> bool
    """
    return _oechem.OESetRotamer(*args)

def OEGetResidueAtoms(*args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
    r"""
    OEGetResidueAtoms(OEAtomBase atom, unsigned int assume=) -> OESystem::OEIterBase< OEChem::OEAtomBase >
    OEGetResidueAtoms(OEMolBase mol, OEResidue residue, unsigned int assume=) -> OESystem::OEIterBase< OEChem::OEAtomBase >
    """
    return _oechem.OEGetResidueAtoms(*args)

def OEGetResidueAtom(*args) -> "OEChem::OEAtomBase *":
    r"""
    OEGetResidueAtom(OEAtomBase atom, unsigned int const pdbAtomIdx, unsigned int assume=) -> OEAtomBase
    OEGetResidueAtom(OEMolBase mol, OEResidue residue, unsigned int const pdbAtomIdx, unsigned int assume=) -> OEAtomBase
    """
    return _oechem.OEGetResidueAtom(*args)

def OEGetLazyIterCls(baseclass):
    class OETestLazyIterator(baseclass):
        """
        This class wraps around an OpenEye iterator to force an object copy
        during iteration.
        """
        def __init__(self, iter=None):
            if iter is not None:
                baseclass.__init__(self, iter)
            else:
                baseclass.__init__(self)

        def __iter__(self):
#the iterator is lazy so yield a copy instead
            for obj in baseclass.__iter__(self):
                copy = obj.__class__(obj)
                yield copy

        def next(self):
            try:
                obj = self.Target()
            except IndexError:
                raise StopIteration("Attempting to get past end of OELazyIterator")
            self.Next()
            return obj

        def prev(self):
            try:
                obj = self.Target()
            except IndexError:
                raise StopIteration("Attempting to get past beginning of OELazyIterator")
            self.Prev()
            return obj

        def Copy(self):
            return self.__class__(self)

        def Target(self):
            obj = baseclass.Target(self)
            return obj.__class__(obj)

    return OETestLazyIterator

class OEAltLocationState(object):
    r"""Proxy of C++ OEBio::OEAltLocationState 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__(OEAltLocationState self) -> OEAltLocationState
        __init__(OEAltLocationState self, std::string const & hex) -> OEAltLocationState
        __init__(OEAltLocationState self, OEAltLocationState state) -> OEAltLocationState
        """
        _oechem.OEAltLocationState_swiginit(self, _oechem.new_OEAltLocationState(*args))
    __swig_destroy__ = _oechem.delete_OEAltLocationState

    def IsValid(self):
      return _oechem.OEAltLocationState___nonzero__(self)



    def GetImpl(self, *args) -> "OEChem::OEAltLocationStateImpl *":
        r"""
        GetImpl(OEAltLocationState self) -> OEChem::OEAltLocationStateImpl const
        GetImpl(OEAltLocationState self) -> OEChem::OEAltLocationStateImpl *
        """
        return _oechem.OEAltLocationState_GetImpl(self, *args)

    def ToHexString(self) -> "std::string":
        r"""ToHexString(OEAltLocationState self) -> std::string"""
        return _oechem.OEAltLocationState_ToHexString(self)

# Register OEAltLocationState in _oechem:
_oechem.OEAltLocationState_swigregister(OEAltLocationState)

class OEAltLocation(object):
    r"""Proxy of C++ OEBio::OEAltLocation 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__(OEAltLocation self) -> OEAltLocation
        __init__(OEAltLocation self, int grpID, int locID, unsigned int numLocs) -> OEAltLocation
        __init__(OEAltLocation self, OEAltLocation loc) -> OEAltLocation
        """
        _oechem.OEAltLocation_swiginit(self, _oechem.new_OEAltLocation(*args))
    __swig_destroy__ = _oechem.delete_OEAltLocation

    def GetGroupID(self) -> "int":
        r"""GetGroupID(OEAltLocation self) -> int"""
        return _oechem.OEAltLocation_GetGroupID(self)

    def GetLocationCount(self) -> "unsigned int":
        r"""GetLocationCount(OEAltLocation self) -> unsigned int"""
        return _oechem.OEAltLocation_GetLocationCount(self)

    def GetLocationID(self) -> "int":
        r"""GetLocationID(OEAltLocation self) -> int"""
        return _oechem.OEAltLocation_GetLocationID(self)

    def IsValid(self):
      return _oechem.OEAltLocation___nonzero__(self)



    def SetLocationID(self, newLoc: "int") -> "OEBio::OEAltLocation &":
        r"""SetLocationID(OEAltLocation self, int newLoc) -> OEAltLocation"""
        return _oechem.OEAltLocation_SetLocationID(self, newLoc)

    def __lt__(self, rhs: "OEAltLocation") -> "int":
        r"""__lt__(OEAltLocation self, OEAltLocation rhs) -> int"""
        return _oechem.OEAltLocation___lt__(self, rhs)

    def __le__(self, rhs: "OEAltLocation") -> "int":
        r"""__le__(OEAltLocation self, OEAltLocation rhs) -> int"""
        return _oechem.OEAltLocation___le__(self, rhs)

    def __gt__(self, rhs: "OEAltLocation") -> "int":
        r"""__gt__(OEAltLocation self, OEAltLocation rhs) -> int"""
        return _oechem.OEAltLocation___gt__(self, rhs)

    def __ge__(self, rhs: "OEAltLocation") -> "int":
        r"""__ge__(OEAltLocation self, OEAltLocation rhs) -> int"""
        return _oechem.OEAltLocation___ge__(self, rhs)

    def __eq__(self, rhs: "OEAltLocation") -> "bool":
        r"""__eq__(OEAltLocation self, OEAltLocation rhs) -> bool"""
        return _oechem.OEAltLocation___eq__(self, rhs)

    def __ne__(self, rhs: "OEAltLocation") -> "bool":
        r"""__ne__(OEAltLocation self, OEAltLocation rhs) -> bool"""
        return _oechem.OEAltLocation___ne__(self, rhs)

    def __hash__(self) -> "int":
        r"""__hash__(OEAltLocation self) -> int"""
        return _oechem.OEAltLocation___hash__(self)

# Register OEAltLocation in _oechem:
_oechem.OEAltLocation_swigregister(OEAltLocation)

class OEAltGroup(object):
    r"""Proxy of C++ OEBio::OEAltGroup 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__(OEAltGroup self) -> OEAltGroup
        __init__(OEAltGroup self, unsigned int const * counts) -> OEAltGroup
        __init__(OEAltGroup self, OEAltGroup grp) -> OEAltGroup
        """
        _oechem.OEAltGroup_swiginit(self, _oechem.new_OEAltGroup(*args))
    __swig_destroy__ = _oechem.delete_OEAltGroup

    def GetGroupCount(self) -> "unsigned int":
        r"""GetGroupCount(OEAltGroup self) -> unsigned int"""
        return _oechem.OEAltGroup_GetGroupCount(self)

    def GetGroupID(self) -> "int":
        r"""GetGroupID(OEAltGroup self) -> int"""
        return _oechem.OEAltGroup_GetGroupID(self)

    def GetLocationCount(self) -> "unsigned int":
        r"""GetLocationCount(OEAltGroup self) -> unsigned int"""
        return _oechem.OEAltGroup_GetLocationCount(self)

    def GetLocations(*args):
        return OEGetLazyIterCls(OEAltLocationIter)(_oechem.OEAltGroup_GetLocations(*args))



    def IsValid(self):
      return _oechem.OEAltGroup___nonzero__(self)



    def SetGroupID(self, newGrp: "int") -> "OEBio::OEAltGroup &":
        r"""SetGroupID(OEAltGroup self, int newGrp) -> OEAltGroup"""
        return _oechem.OEAltGroup_SetGroupID(self, newGrp)

    def __lt__(self, rhs: "OEAltGroup") -> "int":
        r"""__lt__(OEAltGroup self, OEAltGroup rhs) -> int"""
        return _oechem.OEAltGroup___lt__(self, rhs)

    def __le__(self, rhs: "OEAltGroup") -> "int":
        r"""__le__(OEAltGroup self, OEAltGroup rhs) -> int"""
        return _oechem.OEAltGroup___le__(self, rhs)

    def __gt__(self, rhs: "OEAltGroup") -> "int":
        r"""__gt__(OEAltGroup self, OEAltGroup rhs) -> int"""
        return _oechem.OEAltGroup___gt__(self, rhs)

    def __ge__(self, rhs: "OEAltGroup") -> "int":
        r"""__ge__(OEAltGroup self, OEAltGroup rhs) -> int"""
        return _oechem.OEAltGroup___ge__(self, rhs)

    def __eq__(self, rhs: "OEAltGroup") -> "bool":
        r"""__eq__(OEAltGroup self, OEAltGroup rhs) -> bool"""
        return _oechem.OEAltGroup___eq__(self, rhs)

    def __ne__(self, rhs: "OEAltGroup") -> "bool":
        r"""__ne__(OEAltGroup self, OEAltGroup rhs) -> bool"""
        return _oechem.OEAltGroup___ne__(self, rhs)

    def __hash__(self) -> "int":
        r"""__hash__(OEAltGroup self) -> int"""
        return _oechem.OEAltGroup___hash__(self)

# Register OEAltGroup in _oechem:
_oechem.OEAltGroup_swigregister(OEAltGroup)

class OEAltLocationFactory(object):
    r"""Proxy of C++ OEBio::OEAltLocationFactory 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__(OEAltLocationFactory self, OEMolBase src, unsigned int options=) -> OEAltLocationFactory
        __init__(OEAltLocationFactory self, OEChem::OEAltLocationFactoryImpl * impl) -> OEAltLocationFactory
        __init__(OEAltLocationFactory self, OEAltLocationFactory fact) -> OEAltLocationFactory
        """
        _oechem.OEAltLocationFactory_swiginit(self, _oechem.new_OEAltLocationFactory(*args))
    __swig_destroy__ = _oechem.delete_OEAltLocationFactory

    def GetGroupCount(self) -> "unsigned int":
        r"""GetGroupCount(OEAltLocationFactory self) -> unsigned int"""
        return _oechem.OEAltLocationFactory_GetGroupCount(self)

    def GetGroups(*args):
        return OEGetLazyIterCls(OEAltGroupIter)(_oechem.OEAltLocationFactory_GetGroups(*args))



    def GetGroup(self, *args) -> "OEBio::OEAltGroup":
        r"""
        GetGroup(OEAltLocationFactory self, OEAtomBase selAtom) -> OEAltGroup
        GetGroup(OEAltLocationFactory self, OEAltLocation loc) -> OEAltGroup
        """
        return _oechem.OEAltLocationFactory_GetGroup(self, *args)

    def GetLocation(self, selAtom: "OEAtomBase", confCode: "char", caseSensitive: "bool"=True) -> "OEBio::OEAltLocation":
        r"""GetLocation(OEAltLocationFactory self, OEAtomBase selAtom, char confCode, bool caseSensitive=True) -> OEAltLocation"""
        return _oechem.OEAltLocationFactory_GetLocation(self, selAtom, confCode, caseSensitive)

    def GetLocationCodes(self, *args) -> "std::string":
        r"""
        GetLocationCodes(OEAltLocationFactory self, OEAltGroup grp) -> std::string
        GetLocationCodes(OEAltLocationFactory self, OEAltLocation loc) -> std::string
        """
        return _oechem.OEAltLocationFactory_GetLocationCodes(self, *args)

    def GetAtomMapSize(self) -> "unsigned int":
        r"""GetAtomMapSize(OEAltLocationFactory self) -> unsigned int"""
        return _oechem.OEAltLocationFactory_GetAtomMapSize(self)

    def GetBondMapSize(self) -> "unsigned int":
        r"""GetBondMapSize(OEAltLocationFactory self) -> unsigned int"""
        return _oechem.OEAltLocationFactory_GetBondMapSize(self)

    def MakePrimaryAltMol(self, *args) -> "void":
        r"""MakePrimaryAltMol(OEAltLocationFactory self, OEMolBase dst, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None, unsigned int options=)"""
        return _oechem.OEAltLocationFactory_MakePrimaryAltMol(self, *args)

    def MakeCurrentAltMol(self, *args) -> "void":
        r"""MakeCurrentAltMol(OEAltLocationFactory self, OEMolBase dst, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None, unsigned int options=)"""
        return _oechem.OEAltLocationFactory_MakeCurrentAltMol(self, *args)

    def MakeAltMol(self, *args) -> "bool":
        r"""
        MakeAltMol(OEAltLocationFactory self, OEMolBase dst, OEAtomBase selAtom, char confCode, bool caseSensitive=True, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None, unsigned int options=) -> bool
        MakeAltMol(OEAltLocationFactory self, OEMolBase dst, OEAltLocation loc, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None, unsigned int options=) -> bool
        MakeAltMol(OEAltLocationFactory self, OEMolBase dst, OEAltLocationState state, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None, unsigned int options=) -> bool
        """
        return _oechem.OEAltLocationFactory_MakeAltMol(self, *args)

    def SetPrimaryAlt(self) -> "void":
        r"""SetPrimaryAlt(OEAltLocationFactory self)"""
        return _oechem.OEAltLocationFactory_SetPrimaryAlt(self)

    def SetAlt(self, *args) -> "bool":
        r"""
        SetAlt(OEAltLocationFactory self, OEAtomBase selAtom, char confCode, bool caseSensitive=True) -> bool
        SetAlt(OEAltLocationFactory self, OEAltLocation loc, bool multiLoc=False) -> bool
        """
        return _oechem.OEAltLocationFactory_SetAlt(self, *args)

    def SetState(self, state: "OEAltLocationState") -> "bool":
        r"""SetState(OEAltLocationFactory self, OEAltLocationState state) -> bool"""
        return _oechem.OEAltLocationFactory_SetState(self, state)

    def GetState(self, *args) -> "void":
        r"""
        GetState(OEAltLocationFactory self) -> OEAltLocationState
        GetState(OEAltLocationFactory self, OEAltLocationState state)
        """
        return _oechem.OEAltLocationFactory_GetState(self, *args)

    def GetCurrentLocations(self, *args) -> "OESystem::OEIterBase< OEBio::OEAltLocation const > *":
        r"""
        GetCurrentLocations(OEAltLocationFactory self) -> OESystem::OEIterBase< OEBio::OEAltLocation const >
        GetCurrentLocations(OEAltLocationFactory self, OEAltGroup grp) -> OESystem::OEIterBase< OEBio::OEAltLocation const >
        GetCurrentLocations(OEAltLocationFactory self, int grpNum) -> OESystem::OEIterBase< OEBio::OEAltLocation const > *
        """
        return _oechem.OEAltLocationFactory_GetCurrentLocations(self, *args)

    def GetCurrentAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""
        GetCurrentAtoms(OEAltLocationFactory self) -> OESystem::OEIterBase< OEChem::OEAtomBase const >
        GetCurrentAtoms(OEAltLocationFactory self) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetCurrentAtoms(OEAltLocationFactory self, OEUnaryAtomPred pred) -> OESystem::OEIterBase< OEChem::OEAtomBase const >
        GetCurrentAtoms(OEAltLocationFactory self, OEUnaryAtomPred pred) -> OESystem::OEIterBase< OEChem::OEAtomBase > *
        """
        return _oechem.OEAltLocationFactory_GetCurrentAtoms(self, *args)

    def GetAltAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""
        GetAltAtoms(OEAltLocationFactory self) -> OESystem::OEIterBase< OEChem::OEAtomBase const >
        GetAltAtoms(OEAltLocationFactory self) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAltAtoms(OEAltLocationFactory self, OEUnaryAtomPred pred) -> OESystem::OEIterBase< OEChem::OEAtomBase const >
        GetAltAtoms(OEAltLocationFactory self, OEUnaryAtomPred pred) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAltAtoms(OEAltLocationFactory self, OEAltGroup grp) -> OESystem::OEIterBase< OEChem::OEAtomBase const >
        GetAltAtoms(OEAltLocationFactory self, OEAltGroup grp) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAltAtoms(OEAltLocationFactory self, OEAltGroup grp, OEUnaryAtomPred pred) -> OESystem::OEIterBase< OEChem::OEAtomBase const >
        GetAltAtoms(OEAltLocationFactory self, OEAltGroup grp, OEUnaryAtomPred pred) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAltAtoms(OEAltLocationFactory self, OEAltLocation loc) -> OESystem::OEIterBase< OEChem::OEAtomBase const >
        GetAltAtoms(OEAltLocationFactory self, OEAltLocation loc) -> OESystem::OEIterBase< OEChem::OEAtomBase >
        GetAltAtoms(OEAltLocationFactory self, OEAltLocation loc, OEUnaryAtomPred pred) -> OESystem::OEIterBase< OEChem::OEAtomBase const >
        GetAltAtoms(OEAltLocationFactory self, OEAltLocation loc, OEUnaryAtomPred pred) -> OESystem::OEIterBase< OEChem::OEAtomBase > *
        """
        return _oechem.OEAltLocationFactory_GetAltAtoms(self, *args)

    def GetSourceMol(self) -> "OEChem::OEMolBase const &":
        r"""GetSourceMol(OEAltLocationFactory self) -> OEMolBase"""
        return _oechem.OEAltLocationFactory_GetSourceMol(self)

    def GetImpl(self, *args) -> "OEChem::OEAltLocationFactoryImpl *":
        r"""
        GetImpl(OEAltLocationFactory self) -> OEChem::OEAltLocationFactoryImpl const
        GetImpl(OEAltLocationFactory self) -> OEChem::OEAltLocationFactoryImpl *
        """
        return _oechem.OEAltLocationFactory_GetImpl(self, *args)

# Register OEAltLocationFactory in _oechem:
_oechem.OEAltLocationFactory_swigregister(OEAltLocationFactory)


def OEIsTypicalPrimaryLocationCode(confCode: "char") -> "bool":
    r"""OEIsTypicalPrimaryLocationCode(char confCode) -> bool"""
    return _oechem.OEIsTypicalPrimaryLocationCode(confCode)
class OEHasAlternateLocation(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEHasAlternateLocation 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__(OEHasAlternateLocation self, char confCode='\0', bool acceptBlanks=False, bool caseSensitive=True) -> OEHasAlternateLocation
        __init__(OEHasAlternateLocation self, OEHasAlternateLocation rhs) -> OEHasAlternateLocation
        """
        _oechem.OEHasAlternateLocation_swiginit(self, _oechem.new_OEHasAlternateLocation(*args))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEHasAlternateLocation self, OEAtomBase atom) -> bool"""
        return _oechem.OEHasAlternateLocation___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEHasAlternateLocation

# Register OEHasAlternateLocation in _oechem:
_oechem.OEHasAlternateLocation_swigregister(OEHasAlternateLocation)


def OEGetAtomMatchResidueIDs(mol: "OEMolBase") -> "PyObject *":
    r"""OEGetAtomMatchResidueIDs(OEMolBase mol) -> PyObject *"""
    return _oechem.OEGetAtomMatchResidueIDs(mol)
class OEHasPDBAtomIndex(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEHasPDBAtomIndex 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, pdbatomidx: "unsigned int"):
        r"""__init__(OEHasPDBAtomIndex self, unsigned int pdbatomidx) -> OEHasPDBAtomIndex"""
        _oechem.OEHasPDBAtomIndex_swiginit(self, _oechem.new_OEHasPDBAtomIndex(pdbatomidx))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEHasPDBAtomIndex self, OEAtomBase atom) -> bool"""
        return _oechem.OEHasPDBAtomIndex___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEHasPDBAtomIndex

# Register OEHasPDBAtomIndex in _oechem:
_oechem.OEHasPDBAtomIndex_swigregister(OEHasPDBAtomIndex)

class OEIsHetAtom(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEIsHetAtom class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsHetAtom self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsHetAtom___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsHetAtom self) -> OEIsHetAtom"""
        _oechem.OEIsHetAtom_swiginit(self, _oechem.new_OEIsHetAtom())
    __swig_destroy__ = _oechem.delete_OEIsHetAtom

# Register OEIsHetAtom in _oechem:
_oechem.OEIsHetAtom_swigregister(OEIsHetAtom)

class OEIsDisulfideBond(OEUnaryBondPred):
    r"""Proxy of C++ OEBio::OEIsDisulfideBond class."""

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

    def __call__(self, bond: "OEBondBase") -> "bool":
        r"""__call__(OEIsDisulfideBond self, OEBondBase bond) -> bool"""
        return _oechem.OEIsDisulfideBond___call__(self, bond)

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



    def __init__(self):
        r"""__init__(OEIsDisulfideBond self) -> OEIsDisulfideBond"""
        _oechem.OEIsDisulfideBond_swiginit(self, _oechem.new_OEIsDisulfideBond())
    __swig_destroy__ = _oechem.delete_OEIsDisulfideBond

# Register OEIsDisulfideBond in _oechem:
_oechem.OEIsDisulfideBond_swigregister(OEIsDisulfideBond)

class OEIsWater(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEIsWater 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, checkHydrogens: "bool"=False, allowIons: "bool"=False):
        r"""__init__(OEIsWater self, bool checkHydrogens=False, bool allowIons=False) -> OEIsWater"""
        _oechem.OEIsWater_swiginit(self, _oechem.new_OEIsWater(checkHydrogens, allowIons))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsWater self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsWater___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEIsWater

# Register OEIsWater in _oechem:
_oechem.OEIsWater_swigregister(OEIsWater)

class OEIsAlphaCarbon(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEIsAlphaCarbon class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsAlphaCarbon self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsAlphaCarbon___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsAlphaCarbon self) -> OEIsAlphaCarbon"""
        _oechem.OEIsAlphaCarbon_swiginit(self, _oechem.new_OEIsAlphaCarbon())
    __swig_destroy__ = _oechem.delete_OEIsAlphaCarbon

# Register OEIsAlphaCarbon in _oechem:
_oechem.OEIsAlphaCarbon_swigregister(OEIsAlphaCarbon)

class OEIsBackboneAtom(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEIsBackboneAtom 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, o: "bool"=True, includeTerminalOxygen: "bool"=False):
        r"""__init__(OEIsBackboneAtom self, bool o=True, bool includeTerminalOxygen=False) -> OEIsBackboneAtom"""
        _oechem.OEIsBackboneAtom_swiginit(self, _oechem.new_OEIsBackboneAtom(o, includeTerminalOxygen))

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsBackboneAtom self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsBackboneAtom___call__(self, atom)

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


    __swig_destroy__ = _oechem.delete_OEIsBackboneAtom

# Register OEIsBackboneAtom in _oechem:
_oechem.OEIsBackboneAtom_swigregister(OEIsBackboneAtom)

class OEIsNTerminalAtom(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEIsNTerminalAtom class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsNTerminalAtom self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsNTerminalAtom___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsNTerminalAtom self) -> OEIsNTerminalAtom"""
        _oechem.OEIsNTerminalAtom_swiginit(self, _oechem.new_OEIsNTerminalAtom())
    __swig_destroy__ = _oechem.delete_OEIsNTerminalAtom

# Register OEIsNTerminalAtom in _oechem:
_oechem.OEIsNTerminalAtom_swigregister(OEIsNTerminalAtom)

class OEIsCTerminalAtom(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEIsCTerminalAtom class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsCTerminalAtom self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsCTerminalAtom___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsCTerminalAtom self) -> OEIsCTerminalAtom"""
        _oechem.OEIsCTerminalAtom_swiginit(self, _oechem.new_OEIsCTerminalAtom())
    __swig_destroy__ = _oechem.delete_OEIsCTerminalAtom

# Register OEIsCTerminalAtom in _oechem:
_oechem.OEIsCTerminalAtom_swigregister(OEIsCTerminalAtom)

class OEIsStandardAminoAcid(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEIsStandardAminoAcid class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsStandardAminoAcid self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsStandardAminoAcid___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsStandardAminoAcid self) -> OEIsStandardAminoAcid"""
        _oechem.OEIsStandardAminoAcid_swiginit(self, _oechem.new_OEIsStandardAminoAcid())
    __swig_destroy__ = _oechem.delete_OEIsStandardAminoAcid

# Register OEIsStandardAminoAcid in _oechem:
_oechem.OEIsStandardAminoAcid_swigregister(OEIsStandardAminoAcid)

class OEIsStandardNucleicAcid(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEIsStandardNucleicAcid class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsStandardNucleicAcid self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsStandardNucleicAcid___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsStandardNucleicAcid self) -> OEIsStandardNucleicAcid"""
        _oechem.OEIsStandardNucleicAcid_swiginit(self, _oechem.new_OEIsStandardNucleicAcid())
    __swig_destroy__ = _oechem.delete_OEIsStandardNucleicAcid

# Register OEIsStandardNucleicAcid in _oechem:
_oechem.OEIsStandardNucleicAcid_swigregister(OEIsStandardNucleicAcid)

class OEIsNucleicAcidBase(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEIsNucleicAcidBase class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsNucleicAcidBase self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsNucleicAcidBase___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsNucleicAcidBase self) -> OEIsNucleicAcidBase"""
        _oechem.OEIsNucleicAcidBase_swiginit(self, _oechem.new_OEIsNucleicAcidBase())
    __swig_destroy__ = _oechem.delete_OEIsNucleicAcidBase

# Register OEIsNucleicAcidBase in _oechem:
_oechem.OEIsNucleicAcidBase_swigregister(OEIsNucleicAcidBase)

class OEIsNucleicAcidSugar(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEIsNucleicAcidSugar class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsNucleicAcidSugar self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsNucleicAcidSugar___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsNucleicAcidSugar self) -> OEIsNucleicAcidSugar"""
        _oechem.OEIsNucleicAcidSugar_swiginit(self, _oechem.new_OEIsNucleicAcidSugar())
    __swig_destroy__ = _oechem.delete_OEIsNucleicAcidSugar

# Register OEIsNucleicAcidSugar in _oechem:
_oechem.OEIsNucleicAcidSugar_swigregister(OEIsNucleicAcidSugar)

class OEIsNucleicAcidPhosphate(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEIsNucleicAcidPhosphate class."""

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

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEIsNucleicAcidPhosphate self, OEAtomBase atom) -> bool"""
        return _oechem.OEIsNucleicAcidPhosphate___call__(self, atom)

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



    def __init__(self):
        r"""__init__(OEIsNucleicAcidPhosphate self) -> OEIsNucleicAcidPhosphate"""
        _oechem.OEIsNucleicAcidPhosphate_swiginit(self, _oechem.new_OEIsNucleicAcidPhosphate())
    __swig_destroy__ = _oechem.delete_OEIsNucleicAcidPhosphate

# Register OEIsNucleicAcidPhosphate in _oechem:
_oechem.OEIsNucleicAcidPhosphate_swigregister(OEIsNucleicAcidPhosphate)

class OEAtomMatchResidueID(object):
    r"""Proxy of C++ OEBio::OEAtomMatchResidueID class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    name = property(_oechem.OEAtomMatchResidueID_name_get, _oechem.OEAtomMatchResidueID_name_set, doc=r"""name : std::string""")
    residueNumber = property(_oechem.OEAtomMatchResidueID_residueNumber_get, _oechem.OEAtomMatchResidueID_residueNumber_set, doc=r"""residueNumber : std::string""")
    insertCode = property(_oechem.OEAtomMatchResidueID_insertCode_get, _oechem.OEAtomMatchResidueID_insertCode_set, doc=r"""insertCode : std::string""")
    chainID = property(_oechem.OEAtomMatchResidueID_chainID_get, _oechem.OEAtomMatchResidueID_chainID_set, doc=r"""chainID : std::string""")
    fragmentNumber = property(_oechem.OEAtomMatchResidueID_fragmentNumber_get, _oechem.OEAtomMatchResidueID_fragmentNumber_set, doc=r"""fragmentNumber : std::string""")
    alternateLocation = property(_oechem.OEAtomMatchResidueID_alternateLocation_get, _oechem.OEAtomMatchResidueID_alternateLocation_set, doc=r"""alternateLocation : std::string""")

    def __init__(self, *args):
        r"""
        __init__(OEAtomMatchResidueID self) -> OEAtomMatchResidueID
        __init__(OEAtomMatchResidueID self, OEResidue res) -> OEAtomMatchResidueID
        """
        _oechem.OEAtomMatchResidueID_swiginit(self, _oechem.new_OEAtomMatchResidueID(*args))

    def GetName(self) -> "std::string":
        r"""GetName(OEAtomMatchResidueID self) -> std::string"""
        return _oechem.OEAtomMatchResidueID_GetName(self)

    def GetResidueNumber(self) -> "std::string":
        r"""GetResidueNumber(OEAtomMatchResidueID self) -> std::string"""
        return _oechem.OEAtomMatchResidueID_GetResidueNumber(self)

    def GetInsertCode(self) -> "std::string":
        r"""GetInsertCode(OEAtomMatchResidueID self) -> std::string"""
        return _oechem.OEAtomMatchResidueID_GetInsertCode(self)

    def GetChainID(self) -> "std::string":
        r"""GetChainID(OEAtomMatchResidueID self) -> std::string"""
        return _oechem.OEAtomMatchResidueID_GetChainID(self)

    def GetFragmentNumber(self) -> "std::string":
        r"""GetFragmentNumber(OEAtomMatchResidueID self) -> std::string"""
        return _oechem.OEAtomMatchResidueID_GetFragmentNumber(self)

    def GetAlternateLocation(self) -> "std::string":
        r"""GetAlternateLocation(OEAtomMatchResidueID self) -> std::string"""
        return _oechem.OEAtomMatchResidueID_GetAlternateLocation(self)

    def SetName(self, n: "std::string const &") -> "void":
        r"""SetName(OEAtomMatchResidueID self, std::string const & n)"""
        return _oechem.OEAtomMatchResidueID_SetName(self, n)

    def SetResidueNumber(self, n: "std::string const &") -> "void":
        r"""SetResidueNumber(OEAtomMatchResidueID self, std::string const & n)"""
        return _oechem.OEAtomMatchResidueID_SetResidueNumber(self, n)

    def SetInsertCode(self, i: "std::string const &") -> "void":
        r"""SetInsertCode(OEAtomMatchResidueID self, std::string const & i)"""
        return _oechem.OEAtomMatchResidueID_SetInsertCode(self, i)

    def SetChainID(self, c: "std::string const &") -> "void":
        r"""SetChainID(OEAtomMatchResidueID self, std::string const & c)"""
        return _oechem.OEAtomMatchResidueID_SetChainID(self, c)

    def SetFragmentNumber(self, f: "std::string const &") -> "void":
        r"""SetFragmentNumber(OEAtomMatchResidueID self, std::string const & f)"""
        return _oechem.OEAtomMatchResidueID_SetFragmentNumber(self, f)

    def SetAlternateLocation(self, a: "std::string const &") -> "void":
        r"""SetAlternateLocation(OEAtomMatchResidueID self, std::string const & a)"""
        return _oechem.OEAtomMatchResidueID_SetAlternateLocation(self, a)

    def __lt__(self, rhs: "OEAtomMatchResidueID") -> "bool":
        r"""__lt__(OEAtomMatchResidueID self, OEAtomMatchResidueID rhs) -> bool"""
        return _oechem.OEAtomMatchResidueID___lt__(self, rhs)
    __swig_destroy__ = _oechem.delete_OEAtomMatchResidueID

# Register OEAtomMatchResidueID in _oechem:
_oechem.OEAtomMatchResidueID_swigregister(OEAtomMatchResidueID)


def OEAtomMatchResidueIDToString(res: "OEAtomMatchResidueID") -> "std::string":
    r"""OEAtomMatchResidueIDToString(OEAtomMatchResidueID res) -> std::string"""
    return _oechem.OEAtomMatchResidueIDToString(res)
class OEAtomMatchResidue(OEUnaryAtomPred):
    r"""Proxy of C++ OEBio::OEAtomMatchResidue class."""

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

    def IsValid(self):
      return _oechem.OEAtomMatchResidue___nonzero__(self)



    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__call__(OEAtomMatchResidue self, OEAtomBase atom) -> bool"""
        return _oechem.OEAtomMatchResidue___call__(self, atom)

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



    def __init__(self, *args):
        r"""
        __init__(OEAtomMatchResidue self, OEMolBase protein, OEMolBase ligand, double dist, bool excludeHydrogens=True) -> OEAtomMatchResidue
        __init__(OEAtomMatchResidue self, OEResidueVector resIds) -> OEAtomMatchResidue
        __init__(OEAtomMatchResidue self, OEResidue resId) -> OEAtomMatchResidue
        __init__(OEAtomMatchResidue self, PyObject * strOrAtmMatchVec) -> OEAtomMatchResidue
        """
        _oechem.OEAtomMatchResidue_swiginit(self, _oechem.new_OEAtomMatchResidue(*args))
    __swig_destroy__ = _oechem.delete_OEAtomMatchResidue

# Register OEAtomMatchResidue in _oechem:
_oechem.OEAtomMatchResidue_swigregister(OEAtomMatchResidue)

class OESequenceAlignment(object):
    r"""Proxy of C++ OEBio::OESequenceAlignment 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__(OESequenceAlignment self) -> OESequenceAlignment
        __init__(OESequenceAlignment self, OESequenceAlignment rhs) -> OESequenceAlignment
        """
        _oechem.OESequenceAlignment_swiginit(self, _oechem.new_OESequenceAlignment(*args))
    __swig_destroy__ = _oechem.delete_OESequenceAlignment

    def GetImpl(self, *args) -> "OEBio::OESeqAlignImpl const *":
        r"""
        GetImpl(OESequenceAlignment self) -> OEBio::OESeqAlignImpl
        GetImpl(OESequenceAlignment self) -> OEBio::OESeqAlignImpl const *
        """
        return _oechem.OESequenceAlignment_GetImpl(self, *args)

    def Clear(self) -> "void":
        r"""Clear(OESequenceAlignment self)"""
        return _oechem.OESequenceAlignment_Clear(self)

    def IsValid(self):
      return _oechem.OESequenceAlignment___nonzero__(self)



    def GetMethod(self) -> "unsigned int":
        r"""GetMethod(OESequenceAlignment self) -> unsigned int"""
        return _oechem.OESequenceAlignment_GetMethod(self)

    def GetGap(self) -> "int":
        r"""GetGap(OESequenceAlignment self) -> int"""
        return _oechem.OESequenceAlignment_GetGap(self)

    def GetExtend(self) -> "int":
        r"""GetExtend(OESequenceAlignment self) -> int"""
        return _oechem.OESequenceAlignment_GetExtend(self)

    def GetScore(self) -> "int":
        r"""GetScore(OESequenceAlignment self) -> int"""
        return _oechem.OESequenceAlignment_GetScore(self)

    def GetSequenceIdentity(self) -> "double":
        r"""GetSequenceIdentity(OESequenceAlignment self) -> double"""
        return _oechem.OESequenceAlignment_GetSequenceIdentity(self)

    def GetSequenceSimilarity(self) -> "double":
        r"""GetSequenceSimilarity(OESequenceAlignment self) -> double"""
        return _oechem.OESequenceAlignment_GetSequenceSimilarity(self)

    def GetChainID(self, idx: "unsigned int") -> "char":
        r"""GetChainID(OESequenceAlignment self, unsigned int idx) -> char"""
        return _oechem.OESequenceAlignment_GetChainID(self, idx)

    def GetMaxSeqIdx(self) -> "unsigned int":
        r"""GetMaxSeqIdx(OESequenceAlignment self) -> unsigned int"""
        return _oechem.OESequenceAlignment_GetMaxSeqIdx(self)

    def GetBackboneMatch(self, idx1: "unsigned int"=0, idx2: "unsigned int"=1) -> "OEChem::OEMatchBase const &":
        r"""GetBackboneMatch(OESequenceAlignment self, unsigned int idx1=0, unsigned int idx2=1) -> OEMatchBase"""
        return _oechem.OESequenceAlignment_GetBackboneMatch(self, idx1, idx2)

    def GetCAlphaMatch(self, idx1: "unsigned int"=0, idx2: "unsigned int"=1) -> "OEChem::OEMatchBase const &":
        r"""GetCAlphaMatch(OESequenceAlignment self, unsigned int idx1=0, unsigned int idx2=1) -> OEMatchBase"""
        return _oechem.OESequenceAlignment_GetCAlphaMatch(self, idx1, idx2)

# Register OESequenceAlignment in _oechem:
_oechem.OESequenceAlignment_swigregister(OESequenceAlignment)


def OEGetAlignment(*args) -> "OEBio::OESequenceAlignment":
    r"""OEGetAlignment(OEMolBase m1, OEMolBase m2, unsigned int assume=, unsigned int method=, int gap=-10, int extend=-2) -> OESequenceAlignment"""
    return _oechem.OEGetAlignment(*args)

def OEGetAlignments(*args) -> "OESystem::OEIterBase< OEBio::OESequenceAlignment > *":
    r"""OEGetAlignments(OEMolBase m1, OEMolBase m2, unsigned int assume=, unsigned int method=, int gap=-10, int extend=-2) -> OESystem::OEIterBase< OEBio::OESequenceAlignment >"""
    return _oechem.OEGetAlignments(*args)

def OEGetSimpleAlignment(*args) -> "OEBio::OESequenceAlignment":
    r"""OEGetSimpleAlignment(OEMolBase m1, OEMolBase m2, unsigned int assume=, unsigned int method=, int gap=-10, int extend=-2) -> OESequenceAlignment"""
    return _oechem.OEGetSimpleAlignment(*args)

def OEWriteAlignment(ofs: "oeostream", align: "OESequenceAlignment", width: "unsigned int"=50) -> "bool":
    r"""OEWriteAlignment(oeostream ofs, OESequenceAlignment align, unsigned int width=50) -> bool"""
    return _oechem.OEWriteAlignment(ofs, align, width)

def OEGetAlignmentMethodName(methodIdx: "unsigned int") -> "char const *":
    r"""OEGetAlignmentMethodName(unsigned int methodIdx) -> char const *"""
    return _oechem.OEGetAlignmentMethodName(methodIdx)

def OEGetSpaceGroup(sgnumber: "unsigned int", shortname: "bool"=False) -> "PyObject *":
    r"""OEGetSpaceGroup(unsigned int sgnumber, bool shortname=False) -> PyObject"""
    return _oechem.OEGetSpaceGroup(sgnumber, shortname)

def OEGetCrystalSymmetry(*args) -> "PyObject *":
    r"""
    OEGetCrystalSymmetry(OEMolBase mol) -> PyObject
    OEGetCrystalSymmetry(OECrystalSymmetryParams params, OEMolBase mol) -> PyObject *
    """
    return _oechem.OEGetCrystalSymmetry(*args)

def OEGetSpaceGroupNumber(ccp4Name: "std::string const &") -> "int":
    r"""OEGetSpaceGroupNumber(std::string const & ccp4Name) -> int"""
    return _oechem.OEGetSpaceGroupNumber(ccp4Name)

def OEHasCrystalSymmetry(mol: "OEMolBase") -> "bool":
    r"""OEHasCrystalSymmetry(OEMolBase mol) -> bool"""
    return _oechem.OEHasCrystalSymmetry(mol)

def OECopyCrystalSymmetry(dst: "OEMolBase", src: "OEMolBase") -> "bool":
    r"""OECopyCrystalSymmetry(OEMolBase dst, OEMolBase src) -> bool"""
    return _oechem.OECopyCrystalSymmetry(dst, src)

def OEBuildUnitCell(cell: "OEMCMolBase", mol: "OEMolBase") -> "bool":
    r"""OEBuildUnitCell(OEMCMolBase cell, OEMolBase mol) -> bool"""
    return _oechem.OEBuildUnitCell(cell, mol)

def OEExpandCrystalSymmetry(*args) -> "bool":
    r"""
    OEExpandCrystalSymmetry(OEMCMolBase operators, OEMolBase src) -> bool
    OEExpandCrystalSymmetry(OEMolBase mol, float radius, float * center=None) -> bool
    OEExpandCrystalSymmetry(OEMCMolBase expanded, OEMolBase mol, float radius, float * center=None) -> bool
    """
    return _oechem.OEExpandCrystalSymmetry(*args)
class OECrystalSymmetryParams(object):
    r"""Proxy of C++ OEBio::OECrystalSymmetryParams 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__(OECrystalSymmetryParams self) -> OECrystalSymmetryParams
        __init__(OECrystalSymmetryParams self, float a, float b, float c, float alpha, float beta, float gamma, unsigned int sgnumber, unsigned int zvalue=0) -> OECrystalSymmetryParams
        """
        _oechem.OECrystalSymmetryParams_swiginit(self, _oechem.new_OECrystalSymmetryParams(*args))

    def SetA(self, a: "float") -> "void":
        r"""SetA(OECrystalSymmetryParams self, float a)"""
        return _oechem.OECrystalSymmetryParams_SetA(self, a)

    def SetB(self, b: "float") -> "void":
        r"""SetB(OECrystalSymmetryParams self, float b)"""
        return _oechem.OECrystalSymmetryParams_SetB(self, b)

    def SetC(self, c: "float") -> "void":
        r"""SetC(OECrystalSymmetryParams self, float c)"""
        return _oechem.OECrystalSymmetryParams_SetC(self, c)

    def SetAlpha(self, alpha: "float") -> "void":
        r"""SetAlpha(OECrystalSymmetryParams self, float alpha)"""
        return _oechem.OECrystalSymmetryParams_SetAlpha(self, alpha)

    def SetBeta(self, beta: "float") -> "void":
        r"""SetBeta(OECrystalSymmetryParams self, float beta)"""
        return _oechem.OECrystalSymmetryParams_SetBeta(self, beta)

    def SetGamma(self, gamma: "float") -> "void":
        r"""SetGamma(OECrystalSymmetryParams self, float gamma)"""
        return _oechem.OECrystalSymmetryParams_SetGamma(self, gamma)

    def SetSpaceGroup(self, sgnumber: "unsigned int") -> "void":
        r"""SetSpaceGroup(OECrystalSymmetryParams self, unsigned int sgnumber)"""
        return _oechem.OECrystalSymmetryParams_SetSpaceGroup(self, sgnumber)

    def SetZValue(self, zvalue: "unsigned int") -> "void":
        r"""SetZValue(OECrystalSymmetryParams self, unsigned int zvalue)"""
        return _oechem.OECrystalSymmetryParams_SetZValue(self, zvalue)

    def GetA(self) -> "float":
        r"""GetA(OECrystalSymmetryParams self) -> float"""
        return _oechem.OECrystalSymmetryParams_GetA(self)

    def GetB(self) -> "float":
        r"""GetB(OECrystalSymmetryParams self) -> float"""
        return _oechem.OECrystalSymmetryParams_GetB(self)

    def GetC(self) -> "float":
        r"""GetC(OECrystalSymmetryParams self) -> float"""
        return _oechem.OECrystalSymmetryParams_GetC(self)

    def GetAlpha(self) -> "float":
        r"""GetAlpha(OECrystalSymmetryParams self) -> float"""
        return _oechem.OECrystalSymmetryParams_GetAlpha(self)

    def GetBeta(self) -> "float":
        r"""GetBeta(OECrystalSymmetryParams self) -> float"""
        return _oechem.OECrystalSymmetryParams_GetBeta(self)

    def GetGamma(self) -> "float":
        r"""GetGamma(OECrystalSymmetryParams self) -> float"""
        return _oechem.OECrystalSymmetryParams_GetGamma(self)

    def GetSpaceGroup(self) -> "unsigned int":
        r"""GetSpaceGroup(OECrystalSymmetryParams self) -> unsigned int"""
        return _oechem.OECrystalSymmetryParams_GetSpaceGroup(self)

    def GetZValue(self) -> "unsigned int":
        r"""GetZValue(OECrystalSymmetryParams self) -> unsigned int"""
        return _oechem.OECrystalSymmetryParams_GetZValue(self)
    __swig_destroy__ = _oechem.delete_OECrystalSymmetryParams

# Register OECrystalSymmetryParams in _oechem:
_oechem.OECrystalSymmetryParams_swigregister(OECrystalSymmetryParams)


def OESetCrystalSymmetry(*args) -> "bool":
    r"""
    OESetCrystalSymmetry(OEMolBase mol, float a, float b, float c, float alpha, float beta, float gamma, unsigned int sgnumber, bool force=False) -> bool
    OESetCrystalSymmetry(OEMolBase mol, OECrystalSymmetryParams params, bool force=False) -> bool
    """
    return _oechem.OESetCrystalSymmetry(*args)

def OESymmetryCartesianToFractional(mol: "OEMolBase") -> "bool":
    r"""OESymmetryCartesianToFractional(OEMolBase mol) -> bool"""
    return _oechem.OESymmetryCartesianToFractional(mol)

def OESymmetryFractionalToCartesian(mol: "OEMolBase") -> "bool":
    r"""OESymmetryFractionalToCartesian(OEMolBase mol) -> bool"""
    return _oechem.OESymmetryFractionalToCartesian(mol)
class OEResidueCategoryData(object):
    r"""Proxy of C++ OEBio::OEResidueCategoryData class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEResidueCategoryData self) -> OEResidueCategoryData
        __init__(OEResidueCategoryData self, OEResidueCategoryData rhs) -> OEResidueCategoryData
        """
        _oechem.OEResidueCategoryData_swiginit(self, _oechem.new_OEResidueCategoryData(*args))

    def Size(self, category: "unsigned int const") -> "unsigned int":
        r"""Size(OEResidueCategoryData self, unsigned int const category) -> unsigned int"""
        return _oechem.OEResidueCategoryData_Size(self, category)

    def GetEntries(self, category: "unsigned int const") -> "OESystem::OEIterBase< std::string const > *":
        r"""GetEntries(OEResidueCategoryData self, unsigned int const category) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEResidueCategoryData_GetEntries(self, category)

    def FoundInDB(self, category: "unsigned int const", resName: "std::string const &") -> "bool":
        r"""FoundInDB(OEResidueCategoryData self, unsigned int const category, std::string const & resName) -> bool"""
        return _oechem.OEResidueCategoryData_FoundInDB(self, category, resName)

    def AllInDB(self, category: "unsigned int const", resNames: "OEStringVector") -> "bool":
        r"""AllInDB(OEResidueCategoryData self, unsigned int const category, OEStringVector resNames) -> bool"""
        return _oechem.OEResidueCategoryData_AllInDB(self, category, resNames)

    def AddToDB(self, *args) -> "bool":
        r"""
        AddToDB(OEResidueCategoryData self, unsigned int const category, std::string const & resName) -> bool
        AddToDB(OEResidueCategoryData self, unsigned int const category, OEStringVector list) -> bool
        """
        return _oechem.OEResidueCategoryData_AddToDB(self, *args)

    def RemoveFromDB(self, *args) -> "bool":
        r"""
        RemoveFromDB(OEResidueCategoryData self, unsigned int const category, std::string const & resName) -> bool
        RemoveFromDB(OEResidueCategoryData self, unsigned int const category, OEStringVector list) -> bool
        """
        return _oechem.OEResidueCategoryData_RemoveFromDB(self, *args)

    def ClearDBCategory(self, category: "unsigned int const") -> "bool":
        r"""ClearDBCategory(OEResidueCategoryData self, unsigned int const category) -> bool"""
        return _oechem.OEResidueCategoryData_ClearDBCategory(self, category)

# Register OEResidueCategoryData in _oechem:
_oechem.OEResidueCategoryData_swigregister(OEResidueCategoryData)


def OEGetResidueDatabaseCategoryName(category: "unsigned int const") -> "char const *":
    r"""OEGetResidueDatabaseCategoryName(unsigned int const category) -> char const *"""
    return _oechem.OEGetResidueDatabaseCategoryName(category)

def OEMolComplexRoleFactory(category: "unsigned int") -> "OESystem::OERole":
    r"""OEMolComplexRoleFactory(unsigned int category) -> OERole"""
    return _oechem.OEMolComplexRoleFactory(category)

def OEMolComplexOrderRoleFactory(order: "unsigned int") -> "OESystem::OERole":
    r"""OEMolComplexOrderRoleFactory(unsigned int order) -> OERole"""
    return _oechem.OEMolComplexOrderRoleFactory(order)

def OEMolComplexSiteRoleFactory(site: "unsigned int") -> "OESystem::OERole":
    r"""OEMolComplexSiteRoleFactory(unsigned int site) -> OERole"""
    return _oechem.OEMolComplexSiteRoleFactory(site)

def OEMolComplexSurfaceWatersRoleFactory(site: "unsigned int") -> "OESystem::OERole":
    r"""OEMolComplexSurfaceWatersRoleFactory(unsigned int site) -> OERole"""
    return _oechem.OEMolComplexSurfaceWatersRoleFactory(site)

def OEMolComplexModelRoleFactory(model: "unsigned int") -> "OESystem::OERole":
    r"""OEMolComplexModelRoleFactory(unsigned int model) -> OERole"""
    return _oechem.OEMolComplexModelRoleFactory(model)

def OEMolComplexChainRoleFactory(chain: "char") -> "OESystem::OERole":
    r"""OEMolComplexChainRoleFactory(char chain) -> OERole"""
    return _oechem.OEMolComplexChainRoleFactory(chain)

def OEGetMolComplexFilterCategoryName(category: "unsigned int") -> "char const *":
    r"""OEGetMolComplexFilterCategoryName(unsigned int category) -> char const *"""
    return _oechem.OEGetMolComplexFilterCategoryName(category)
class OEMolComplexFilter(OEUnaryRoleSetPred):
    r"""Proxy of C++ OEBio::OEMolComplexFilter 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__(OEMolComplexFilter self) -> OEMolComplexFilter
        __init__(OEMolComplexFilter self, OEMolComplexFilter rhs) -> OEMolComplexFilter
        __init__(OEMolComplexFilter self, OEBio::OEMolComplexFilterImpl * impl) -> OEMolComplexFilter
        """
        _oechem.OEMolComplexFilter_swiginit(self, _oechem.new_OEMolComplexFilter(*args))
    __swig_destroy__ = _oechem.delete_OEMolComplexFilter

    def __call__(self, roles: "OERoleSet") -> "bool":
        r"""__call__(OEMolComplexFilter self, OERoleSet roles) -> bool"""
        return _oechem.OEMolComplexFilter___call__(self, roles)

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



# Register OEMolComplexFilter in _oechem:
_oechem.OEMolComplexFilter_swigregister(OEMolComplexFilter)


def OEMolComplexFilterFactory(category: "unsigned int") -> "OEBio::OEMolComplexFilter":
    r"""OEMolComplexFilterFactory(unsigned int category) -> OEMolComplexFilter"""
    return _oechem.OEMolComplexFilterFactory(category)

def OERoleMolComplexFilterFactory(r: "OERole") -> "OEBio::OEMolComplexFilter":
    r"""OERoleMolComplexFilterFactory(OERole r) -> OEMolComplexFilter"""
    return _oechem.OERoleMolComplexFilterFactory(r)
class OEMolComplexCategorizerBase(object):
    r"""Proxy of C++ OEBio::OEMolComplexCategorizerBase 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__ = _oechem.delete_OEMolComplexCategorizerBase

    def CreateCopy(self) -> "OEBio::OEMolComplexCategorizerBase *":
        r"""CreateCopy(OEMolComplexCategorizerBase self) -> OEMolComplexCategorizerBase"""
        return _oechem.OEMolComplexCategorizerBase_CreateCopy(self)

    def __call__(self, roles: "OERoleSet", counts: "OEBio::OEMolComplexResCounts &", frag: "OEAtomBondSet", isCovalent: "bool"=False) -> "std::string":
        r"""__call__(OEMolComplexCategorizerBase self, OERoleSet roles, OEBio::OEMolComplexResCounts & counts, OEAtomBondSet frag, bool isCovalent=False) -> std::string"""
        return _oechem.OEMolComplexCategorizerBase___call__(self, roles, counts, frag, isCovalent)

    def GetBundleCofactors(self) -> "bool":
        r"""GetBundleCofactors(OEMolComplexCategorizerBase self) -> bool"""
        return _oechem.OEMolComplexCategorizerBase_GetBundleCofactors(self)

    def UsingExplicitLigandName(self) -> "bool":
        r"""UsingExplicitLigandName(OEMolComplexCategorizerBase self) -> bool"""
        return _oechem.OEMolComplexCategorizerBase_UsingExplicitLigandName(self)

    def GetResidueCategoryData(self) -> "OEBio::OEResidueCategoryData &":
        r"""GetResidueCategoryData(OEMolComplexCategorizerBase self) -> OEResidueCategoryData"""
        return _oechem.OEMolComplexCategorizerBase_GetResidueCategoryData(self)

# Register OEMolComplexCategorizerBase in _oechem:
_oechem.OEMolComplexCategorizerBase_swigregister(OEMolComplexCategorizerBase)

class OEMolComplexCategorizer(OEMolComplexCategorizerBase):
    r"""Proxy of C++ OEBio::OEMolComplexCategorizer class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMolComplexCategorizer self, std::string const & ligName=std::string()) -> OEMolComplexCategorizer
        __init__(OEMolComplexCategorizer self, OEMolComplexCategorizer rhs) -> OEMolComplexCategorizer
        """
        _oechem.OEMolComplexCategorizer_swiginit(self, _oechem.new_OEMolComplexCategorizer(*args))

    def CreateCopy(self) -> "OEBio::OEMolComplexCategorizerBase *":
        r"""CreateCopy(OEMolComplexCategorizer self) -> OEMolComplexCategorizerBase"""
        return _oechem.OEMolComplexCategorizer_CreateCopy(self)

    def GetBundleCofactors(self) -> "bool":
        r"""GetBundleCofactors(OEMolComplexCategorizer self) -> bool"""
        return _oechem.OEMolComplexCategorizer_GetBundleCofactors(self)

    def SetBundleCofactors(self, bundle: "bool"=True) -> "void":
        r"""SetBundleCofactors(OEMolComplexCategorizer self, bool bundle=True)"""
        return _oechem.OEMolComplexCategorizer_SetBundleCofactors(self, bundle)

    def GetMinLigAtoms(self) -> "unsigned int":
        r"""GetMinLigAtoms(OEMolComplexCategorizer self) -> unsigned int"""
        return _oechem.OEMolComplexCategorizer_GetMinLigAtoms(self)

    def SetMinLigAtoms(self, n: "unsigned int") -> "void":
        r"""SetMinLigAtoms(OEMolComplexCategorizer self, unsigned int n)"""
        return _oechem.OEMolComplexCategorizer_SetMinLigAtoms(self, n)

    def GetMaxLigAtoms(self) -> "unsigned int":
        r"""GetMaxLigAtoms(OEMolComplexCategorizer self) -> unsigned int"""
        return _oechem.OEMolComplexCategorizer_GetMaxLigAtoms(self)

    def SetMaxLigAtoms(self, n: "unsigned int") -> "void":
        r"""SetMaxLigAtoms(OEMolComplexCategorizer self, unsigned int n)"""
        return _oechem.OEMolComplexCategorizer_SetMaxLigAtoms(self, n)

    def GetMaxProteinAtoms(self) -> "unsigned int":
        r"""GetMaxProteinAtoms(OEMolComplexCategorizer self) -> unsigned int"""
        return _oechem.OEMolComplexCategorizer_GetMaxProteinAtoms(self)

    def SetMaxProteinAtoms(self, n: "unsigned int") -> "void":
        r"""SetMaxProteinAtoms(OEMolComplexCategorizer self, unsigned int n)"""
        return _oechem.OEMolComplexCategorizer_SetMaxProteinAtoms(self, n)

    def GetMaxLigResidues(self) -> "unsigned int":
        r"""GetMaxLigResidues(OEMolComplexCategorizer self) -> unsigned int"""
        return _oechem.OEMolComplexCategorizer_GetMaxLigResidues(self)

    def SetMaxLigResidues(self, n: "unsigned int") -> "void":
        r"""SetMaxLigResidues(OEMolComplexCategorizer self, unsigned int n)"""
        return _oechem.OEMolComplexCategorizer_SetMaxLigResidues(self, n)

    def GetMaxPeptideResidues(self) -> "unsigned int":
        r"""GetMaxPeptideResidues(OEMolComplexCategorizer self) -> unsigned int"""
        return _oechem.OEMolComplexCategorizer_GetMaxPeptideResidues(self)

    def SetMaxPeptideResidues(self, n: "unsigned int") -> "void":
        r"""SetMaxPeptideResidues(OEMolComplexCategorizer self, unsigned int n)"""
        return _oechem.OEMolComplexCategorizer_SetMaxPeptideResidues(self, n)

    def AddLigandName(self, ligName: "std::string const &") -> "void":
        r"""AddLigandName(OEMolComplexCategorizer self, std::string const & ligName)"""
        return _oechem.OEMolComplexCategorizer_AddLigandName(self, ligName)

    def UsingExplicitLigandName(self) -> "bool":
        r"""UsingExplicitLigandName(OEMolComplexCategorizer self) -> bool"""
        return _oechem.OEMolComplexCategorizer_UsingExplicitLigandName(self)

    def GetLigandSubSearch(self) -> "OEChem::OESubSearch":
        r"""GetLigandSubSearch(OEMolComplexCategorizer self) -> OESubSearch"""
        return _oechem.OEMolComplexCategorizer_GetLigandSubSearch(self)

    def SetLigandSubSearch(self, *args) -> "void":
        r"""
        SetLigandSubSearch(OEMolComplexCategorizer self, OESubSearch ss)
        SetLigandSubSearch(OEMolComplexCategorizer self, char const * smarts)
        """
        return _oechem.OEMolComplexCategorizer_SetLigandSubSearch(self, *args)

    def ClearLigandSubSearch(self) -> "void":
        r"""ClearLigandSubSearch(OEMolComplexCategorizer self)"""
        return _oechem.OEMolComplexCategorizer_ClearLigandSubSearch(self)

    def __call__(self, roles: "OERoleSet", counts: "OEBio::OEMolComplexResCounts &", frag: "OEAtomBondSet", isCovalent: "bool"=False) -> "std::string":
        r"""__call__(OEMolComplexCategorizer self, OERoleSet roles, OEBio::OEMolComplexResCounts & counts, OEAtomBondSet frag, bool isCovalent=False) -> std::string"""
        return _oechem.OEMolComplexCategorizer___call__(self, roles, counts, frag, isCovalent)

    def GetResidueCategoryData(self) -> "OEBio::OEResidueCategoryData &":
        r"""GetResidueCategoryData(OEMolComplexCategorizer self) -> OEResidueCategoryData"""
        return _oechem.OEMolComplexCategorizer_GetResidueCategoryData(self)

    def SetResidueCategoryData(self, db: "OEResidueCategoryData") -> "void":
        r"""SetResidueCategoryData(OEMolComplexCategorizer self, OEResidueCategoryData db)"""
        return _oechem.OEMolComplexCategorizer_SetResidueCategoryData(self, db)

# Register OEMolComplexCategorizer in _oechem:
_oechem.OEMolComplexCategorizer_swigregister(OEMolComplexCategorizer)

class OESplitMolComplexOptions(object):
    r"""Proxy of C++ OEBio::OESplitMolComplexOptions class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESplitMolComplexOptions self, std::string const & ligName=std::string()) -> OESplitMolComplexOptions
        __init__(OESplitMolComplexOptions self, OESplitMolComplexOptions rhs) -> OESplitMolComplexOptions
        """
        _oechem.OESplitMolComplexOptions_swiginit(self, _oechem.new_OESplitMolComplexOptions(*args))

    def __eq__(self, rhs: "OESplitMolComplexOptions") -> "bool":
        r"""__eq__(OESplitMolComplexOptions self, OESplitMolComplexOptions rhs) -> bool"""
        return _oechem.OESplitMolComplexOptions___eq__(self, rhs)

    def __ne__(self, rhs: "OESplitMolComplexOptions") -> "bool":
        r"""__ne__(OESplitMolComplexOptions self, OESplitMolComplexOptions rhs) -> bool"""
        return _oechem.OESplitMolComplexOptions___ne__(self, rhs)

    def ResetFilters(self, *args) -> "void":
        r"""ResetFilters(OESplitMolComplexOptions self, unsigned int site=1, bool surfaceWaters=False, unsigned int ligCategory=, unsigned int protCategory=, unsigned int waterCategory=, unsigned int modelNo=1)"""
        return _oechem.OESplitMolComplexOptions_ResetFilters(self, *args)

    def GetSplitCovalent(self) -> "bool":
        r"""GetSplitCovalent(OESplitMolComplexOptions self) -> bool"""
        return _oechem.OESplitMolComplexOptions_GetSplitCovalent(self)

    def SetSplitCovalent(self, split: "bool"=True) -> "void":
        r"""SetSplitCovalent(OESplitMolComplexOptions self, bool split=True)"""
        return _oechem.OESplitMolComplexOptions_SetSplitCovalent(self, split)

    def GetSplitCovalentCofactors(self) -> "bool":
        r"""GetSplitCovalentCofactors(OESplitMolComplexOptions self) -> bool"""
        return _oechem.OESplitMolComplexOptions_GetSplitCovalentCofactors(self)

    def SetSplitCovalentCofactors(self, split: "bool"=True) -> "void":
        r"""SetSplitCovalentCofactors(OESplitMolComplexOptions self, bool split=True)"""
        return _oechem.OESplitMolComplexOptions_SetSplitCovalentCofactors(self, split)

    def GetMaxBindingSiteDist(self) -> "double":
        r"""GetMaxBindingSiteDist(OESplitMolComplexOptions self) -> double"""
        return _oechem.OESplitMolComplexOptions_GetMaxBindingSiteDist(self)

    def SetMaxBindingSiteDist(self, dist: "double") -> "void":
        r"""SetMaxBindingSiteDist(OESplitMolComplexOptions self, double dist)"""
        return _oechem.OESplitMolComplexOptions_SetMaxBindingSiteDist(self, dist)

    def GetMaxSurfaceWaterDist(self) -> "double":
        r"""GetMaxSurfaceWaterDist(OESplitMolComplexOptions self) -> double"""
        return _oechem.OESplitMolComplexOptions_GetMaxSurfaceWaterDist(self)

    def SetMaxSurfaceWaterDist(self, dist: "double") -> "void":
        r"""SetMaxSurfaceWaterDist(OESplitMolComplexOptions self, double dist)"""
        return _oechem.OESplitMolComplexOptions_SetMaxSurfaceWaterDist(self, dist)

    def GetSeparateResidues(self) -> "bool":
        r"""GetSeparateResidues(OESplitMolComplexOptions self) -> bool"""
        return _oechem.OESplitMolComplexOptions_GetSeparateResidues(self)

    def SetSeparateResidues(self, separate: "bool"=True) -> "void":
        r"""SetSeparateResidues(OESplitMolComplexOptions self, bool separate=True)"""
        return _oechem.OESplitMolComplexOptions_SetSeparateResidues(self, separate)

    def GetCollectProteinByChain(self) -> "bool":
        r"""GetCollectProteinByChain(OESplitMolComplexOptions self) -> bool"""
        return _oechem.OESplitMolComplexOptions_GetCollectProteinByChain(self)

    def SetCollectProteinByChain(self, collect: "bool"=True) -> "void":
        r"""SetCollectProteinByChain(OESplitMolComplexOptions self, bool collect=True)"""
        return _oechem.OESplitMolComplexOptions_SetCollectProteinByChain(self, collect)

    def GetPromoteUnknowns(self) -> "bool":
        r"""GetPromoteUnknowns(OESplitMolComplexOptions self) -> bool"""
        return _oechem.OESplitMolComplexOptions_GetPromoteUnknowns(self)

    def SetPromoteUnknowns(self, promote: "bool"=True) -> "void":
        r"""SetPromoteUnknowns(OESplitMolComplexOptions self, bool promote=True)"""
        return _oechem.OESplitMolComplexOptions_SetPromoteUnknowns(self, promote)

    def GetAdjustHCount(self) -> "bool":
        r"""GetAdjustHCount(OESplitMolComplexOptions self) -> bool"""
        return _oechem.OESplitMolComplexOptions_GetAdjustHCount(self)

    def SetAdjustHCount(self, adjust: "bool"=True) -> "void":
        r"""SetAdjustHCount(OESplitMolComplexOptions self, bool adjust=True)"""
        return _oechem.OESplitMolComplexOptions_SetAdjustHCount(self, adjust)

    def GetAddRGroup(self) -> "bool":
        r"""GetAddRGroup(OESplitMolComplexOptions self) -> bool"""
        return _oechem.OESplitMolComplexOptions_GetAddRGroup(self)

    def SetAddRGroup(self, addR: "bool"=True) -> "void":
        r"""SetAddRGroup(OESplitMolComplexOptions self, bool addR=True)"""
        return _oechem.OESplitMolComplexOptions_SetAddRGroup(self, addR)

    def GetAssumptions(self) -> "unsigned int":
        r"""GetAssumptions(OESplitMolComplexOptions self) -> unsigned int"""
        return _oechem.OESplitMolComplexOptions_GetAssumptions(self)

    def SetAssumptions(self, assume: "unsigned int") -> "void":
        r"""SetAssumptions(OESplitMolComplexOptions self, unsigned int assume)"""
        return _oechem.OESplitMolComplexOptions_SetAssumptions(self, assume)

    def GetWarnNoLigand(self) -> "bool":
        r"""GetWarnNoLigand(OESplitMolComplexOptions self) -> bool"""
        return _oechem.OESplitMolComplexOptions_GetWarnNoLigand(self)

    def SetWarnNoLigand(self, warn: "bool"=True) -> "void":
        r"""SetWarnNoLigand(OESplitMolComplexOptions self, bool warn=True)"""
        return _oechem.OESplitMolComplexOptions_SetWarnNoLigand(self, warn)

    def GetCategorizer(self) -> "OEBio::OEMolComplexCategorizerBase &":
        r"""GetCategorizer(OESplitMolComplexOptions self) -> OEMolComplexCategorizerBase"""
        return _oechem.OESplitMolComplexOptions_GetCategorizer(self)

    def SetCategorizer(self, cat: "OEMolComplexCategorizerBase") -> "void":
        r"""SetCategorizer(OESplitMolComplexOptions self, OEMolComplexCategorizerBase cat)"""
        return _oechem.OESplitMolComplexOptions_SetCategorizer(self, cat)

    def GetLigandFilter(self) -> "OESystem::OEUnaryPredicate< OESystem::OERoleSet > *":
        r"""GetLigandFilter(OESplitMolComplexOptions self) -> OEUnaryRoleSetPred"""
        return _oechem.OESplitMolComplexOptions_GetLigandFilter(self)

    def GetProteinFilter(self) -> "OESystem::OEUnaryPredicate< OESystem::OERoleSet > *":
        r"""GetProteinFilter(OESplitMolComplexOptions self) -> OEUnaryRoleSetPred"""
        return _oechem.OESplitMolComplexOptions_GetProteinFilter(self)

    def GetWaterFilter(self) -> "OESystem::OEUnaryPredicate< OESystem::OERoleSet > *":
        r"""GetWaterFilter(OESplitMolComplexOptions self) -> OEUnaryRoleSetPred"""
        return _oechem.OESplitMolComplexOptions_GetWaterFilter(self)

    def GetOtherFilter(self) -> "OESystem::OEUnaryPredicate< OESystem::OERoleSet > *":
        r"""GetOtherFilter(OESplitMolComplexOptions self) -> OEUnaryRoleSetPred"""
        return _oechem.OESplitMolComplexOptions_GetOtherFilter(self)

    def GetCombinedFilter(self) -> "OESystem::OEUnaryPredicate< OESystem::OERoleSet > *":
        r"""GetCombinedFilter(OESplitMolComplexOptions self) -> OEUnaryRoleSetPred"""
        return _oechem.OESplitMolComplexOptions_GetCombinedFilter(self)

    def SetLigandFilter(self, f: "OEUnaryRoleSetPred") -> "void":
        r"""SetLigandFilter(OESplitMolComplexOptions self, OEUnaryRoleSetPred f)"""
        return _oechem.OESplitMolComplexOptions_SetLigandFilter(self, f)

    def SetProteinFilter(self, f: "OEUnaryRoleSetPred") -> "void":
        r"""SetProteinFilter(OESplitMolComplexOptions self, OEUnaryRoleSetPred f)"""
        return _oechem.OESplitMolComplexOptions_SetProteinFilter(self, f)

    def SetWaterFilter(self, f: "OEUnaryRoleSetPred") -> "void":
        r"""SetWaterFilter(OESplitMolComplexOptions self, OEUnaryRoleSetPred f)"""
        return _oechem.OESplitMolComplexOptions_SetWaterFilter(self, f)

# Register OESplitMolComplexOptions in _oechem:
_oechem.OESplitMolComplexOptions_swigregister(OESplitMolComplexOptions)


def OESplitMolComplex(*args) -> "bool":
    r"""OESplitMolComplex(OEMolBase lig, OEMolBase prot, OEMolBase waters, OEMolBase other, OEMolBase mol, OESplitMolComplexOptions opt=OEBio::OESplitMolComplexOptions()) -> bool"""
    return _oechem.OESplitMolComplex(*args)

def OEGetMolComplexComponents(*args) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
    r"""
    OEGetMolComplexComponents(OEMolBase mol, OESplitMolComplexOptions opt=OEBio::OESplitMolComplexOptions()) -> OESystem::OEIterBase< OEChem::OEMolBase >
    OEGetMolComplexComponents(OEMolBase mol, OESplitMolComplexOptions opt, OEUnaryRoleSetPred filter) -> OESystem::OEIterBase< OEChem::OEMolBase > *
    """
    return _oechem.OEGetMolComplexComponents(*args)

def OEClearMolComplexSDData(*args) -> "void":
    r"""OEClearMolComplexSDData(OEMolBase mol, std::string const & prefix=std::string(OEMolComplexData::SDTagPrefix))"""
    return _oechem.OEClearMolComplexSDData(*args)

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

def OESetupSplitMolComplexOptions(*args) -> "bool":
    r"""OESetupSplitMolComplexOptions(OESplitMolComplexOptions opts, OEInterface itf, unsigned int siteOverride=, unsigned int modelOverride=) -> bool"""
    return _oechem.OESetupSplitMolComplexOptions(*args)

def OEGetMolComplexFragments(*args) -> "bool":
    r"""OEGetMolComplexFragments(OEAtomBondSetVector frags, OEMolBase mol, OESplitMolComplexOptions opt=OEBio::OESplitMolComplexOptions()) -> bool"""
    return _oechem.OEGetMolComplexFragments(*args)

def OECountMolComplexSites(*args) -> "unsigned int":
    r"""
    OECountMolComplexSites(OEMolBase mol, OESplitMolComplexOptions opt=OEBio::OESplitMolComplexOptions()) -> unsigned int
    OECountMolComplexSites(OEAtomBondSetVector frags) -> unsigned int
    """
    return _oechem.OECountMolComplexSites(*args)

def OECombineMolComplexFragments(*args) -> "bool":
    r"""
    OECombineMolComplexFragments(OEMolBase dst, OEAtomBondSetVector frags, OESplitMolComplexOptions opt=OEBio::OESplitMolComplexOptions()) -> bool
    OECombineMolComplexFragments(OEMolBase dst, OEAtomBondSetVector frags, OESplitMolComplexOptions opt, OEUnaryRoleSetPred filter, OEChem::OEAtomBase ** atomMap=None, OEChem::OEBondBase ** bondMap=None) -> bool
    """
    return _oechem.OECombineMolComplexFragments(*args)

def OEFilterMolComplexFragments(*args) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
    r"""
    OEFilterMolComplexFragments(OEAtomBondSetVector frags, OESplitMolComplexOptions opt=OEBio::OESplitMolComplexOptions()) -> OESystem::OEIterBase< OEChem::OEMolBase >
    OEFilterMolComplexFragments(OEAtomBondSetVector frags, OESplitMolComplexOptions opt, OEUnaryRoleSetPred filter) -> OESystem::OEIterBase< OEChem::OEMolBase > *
    """
    return _oechem.OEFilterMolComplexFragments(*args)

def OEGetPlaceHydrogensMoverClassName(moverClass: "unsigned int") -> "std::string":
    r"""OEGetPlaceHydrogensMoverClassName(unsigned int moverClass) -> std::string"""
    return _oechem.OEGetPlaceHydrogensMoverClassName(moverClass)
class OEPlaceHydrogensMoverNote(object):
    r"""Proxy of C++ OEBio::OEPlaceHydrogensMoverNote class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEPlaceHydrogensMoverNote self) -> OEPlaceHydrogensMoverNote
        __init__(OEPlaceHydrogensMoverNote self, OEPlaceHydrogensMoverNote rhs) -> OEPlaceHydrogensMoverNote
        """
        _oechem.OEPlaceHydrogensMoverNote_swiginit(self, _oechem.new_OEPlaceHydrogensMoverNote(*args))

    def GetStateIdx(self) -> "unsigned int":
        r"""GetStateIdx(OEPlaceHydrogensMoverNote self) -> unsigned int"""
        return _oechem.OEPlaceHydrogensMoverNote_GetStateIdx(self)

    def GetStateName(self) -> "std::string":
        r"""GetStateName(OEPlaceHydrogensMoverNote self) -> std::string"""
        return _oechem.OEPlaceHydrogensMoverNote_GetStateName(self)

    def GetLabel(self) -> "std::string":
        r"""GetLabel(OEPlaceHydrogensMoverNote self) -> std::string"""
        return _oechem.OEPlaceHydrogensMoverNote_GetLabel(self)

    def GetMoverClass(self) -> "unsigned int":
        r"""GetMoverClass(OEPlaceHydrogensMoverNote self) -> unsigned int"""
        return _oechem.OEPlaceHydrogensMoverNote_GetMoverClass(self)

    def GetAngle(self) -> "double":
        r"""GetAngle(OEPlaceHydrogensMoverNote self) -> double"""
        return _oechem.OEPlaceHydrogensMoverNote_GetAngle(self)

    def IsFlippable(self) -> "bool":
        r"""IsFlippable(OEPlaceHydrogensMoverNote self) -> bool"""
        return _oechem.OEPlaceHydrogensMoverNote_IsFlippable(self)

    def IsFlipped(self) -> "bool":
        r"""IsFlipped(OEPlaceHydrogensMoverNote self) -> bool"""
        return _oechem.OEPlaceHydrogensMoverNote_IsFlipped(self)

    def IsIonizable(self) -> "bool":
        r"""IsIonizable(OEPlaceHydrogensMoverNote self) -> bool"""
        return _oechem.OEPlaceHydrogensMoverNote_IsIonizable(self)

    def IsIonized(self) -> "bool":
        r"""IsIonized(OEPlaceHydrogensMoverNote self) -> bool"""
        return _oechem.OEPlaceHydrogensMoverNote_IsIonized(self)

    def IsRestrained(self) -> "bool":
        r"""IsRestrained(OEPlaceHydrogensMoverNote self) -> bool"""
        return _oechem.OEPlaceHydrogensMoverNote_IsRestrained(self)

    def GetScore(self) -> "double":
        r"""GetScore(OEPlaceHydrogensMoverNote self) -> double"""
        return _oechem.OEPlaceHydrogensMoverNote_GetScore(self)

    def HasBadClash(self) -> "bool":
        r"""HasBadClash(OEPlaceHydrogensMoverNote self) -> bool"""
        return _oechem.OEPlaceHydrogensMoverNote_HasBadClash(self)

    def GetOriginalBestClusterScore(self) -> "double":
        r"""GetOriginalBestClusterScore(OEPlaceHydrogensMoverNote self) -> double"""
        return _oechem.OEPlaceHydrogensMoverNote_GetOriginalBestClusterScore(self)

    def GetFlippedBestClusterScore(self) -> "double":
        r"""GetFlippedBestClusterScore(OEPlaceHydrogensMoverNote self) -> double"""
        return _oechem.OEPlaceHydrogensMoverNote_GetFlippedBestClusterScore(self)

    def HasOriginalBadClusterClash(self) -> "bool":
        r"""HasOriginalBadClusterClash(OEPlaceHydrogensMoverNote self) -> bool"""
        return _oechem.OEPlaceHydrogensMoverNote_HasOriginalBadClusterClash(self)

    def HasFlippedBadClusterClash(self) -> "bool":
        r"""HasFlippedBadClusterClash(OEPlaceHydrogensMoverNote self) -> bool"""
        return _oechem.OEPlaceHydrogensMoverNote_HasFlippedBadClusterClash(self)

    def Describe(self) -> "std::string":
        r"""Describe(OEPlaceHydrogensMoverNote self) -> std::string"""
        return _oechem.OEPlaceHydrogensMoverNote_Describe(self)

    def GetReferenceCoords(self, *args) -> "PyObject *":
        r"""
        GetReferenceCoords(OEPlaceHydrogensMoverNote self, double * xyz) -> bool
        GetReferenceCoords(OEPlaceHydrogensMoverNote self) -> PyObject *
        """
        return _oechem.OEPlaceHydrogensMoverNote_GetReferenceCoords(self, *args)

# Register OEPlaceHydrogensMoverNote in _oechem:
_oechem.OEPlaceHydrogensMoverNote_swigregister(OEPlaceHydrogensMoverNote)

class OEPlaceHydrogensDetails(object):
    r"""Proxy of C++ OEBio::OEPlaceHydrogensDetails class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEPlaceHydrogensDetails self) -> OEPlaceHydrogensDetails
        __init__(OEPlaceHydrogensDetails self, OEPlaceHydrogensDetails rhs) -> OEPlaceHydrogensDetails
        """
        _oechem.OEPlaceHydrogensDetails_swiginit(self, _oechem.new_OEPlaceHydrogensDetails(*args))

    def IsValid(self) -> "bool":
        r"""IsValid(OEPlaceHydrogensDetails self) -> bool"""
        return _oechem.OEPlaceHydrogensDetails_IsValid(self)

    def GetNumHydrogensStandardized(self) -> "unsigned int":
        r"""GetNumHydrogensStandardized(OEPlaceHydrogensDetails self) -> unsigned int"""
        return _oechem.OEPlaceHydrogensDetails_GetNumHydrogensStandardized(self)

    def GetNumFlips(self) -> "unsigned int":
        r"""GetNumFlips(OEPlaceHydrogensDetails self) -> unsigned int"""
        return _oechem.OEPlaceHydrogensDetails_GetNumFlips(self)

    def GetFlipBias(self) -> "double":
        r"""GetFlipBias(OEPlaceHydrogensDetails self) -> double"""
        return _oechem.OEPlaceHydrogensDetails_GetFlipBias(self)

    def GetNumClusters(self) -> "unsigned int":
        r"""GetNumClusters(OEPlaceHydrogensDetails self) -> unsigned int"""
        return _oechem.OEPlaceHydrogensDetails_GetNumClusters(self)

    def GetNumMovers(self, clusterIdx: "unsigned int") -> "unsigned int":
        r"""GetNumMovers(OEPlaceHydrogensDetails self, unsigned int clusterIdx) -> unsigned int"""
        return _oechem.OEPlaceHydrogensDetails_GetNumMovers(self, clusterIdx)

    def GetClusterScore(self, clusterIdx: "unsigned int") -> "double":
        r"""GetClusterScore(OEPlaceHydrogensDetails self, unsigned int clusterIdx) -> double"""
        return _oechem.OEPlaceHydrogensDetails_GetClusterScore(self, clusterIdx)

    def ClusterHasBadClash(self, clusterIdx: "unsigned int") -> "bool":
        r"""ClusterHasBadClash(OEPlaceHydrogensDetails self, unsigned int clusterIdx) -> bool"""
        return _oechem.OEPlaceHydrogensDetails_ClusterHasBadClash(self, clusterIdx)

    def IsSingleton(self, clusterIdx: "unsigned int") -> "bool":
        r"""IsSingleton(OEPlaceHydrogensDetails self, unsigned int clusterIdx) -> bool"""
        return _oechem.OEPlaceHydrogensDetails_IsSingleton(self, clusterIdx)

    def GetMoverNotes(self, clusterIdx: "unsigned int") -> "OESystem::OEIterBase< OEBio::OEPlaceHydrogensMoverNote > *":
        r"""GetMoverNotes(OEPlaceHydrogensDetails self, unsigned int clusterIdx) -> OESystem::OEIterBase< OEBio::OEPlaceHydrogensMoverNote > *"""
        return _oechem.OEPlaceHydrogensDetails_GetMoverNotes(self, clusterIdx)

    def Describe(self, showBackground: "bool"=False) -> "std::string":
        r"""Describe(OEPlaceHydrogensDetails self, bool showBackground=False) -> std::string"""
        return _oechem.OEPlaceHydrogensDetails_Describe(self, showBackground)

# Register OEPlaceHydrogensDetails in _oechem:
_oechem.OEPlaceHydrogensDetails_swigregister(OEPlaceHydrogensDetails)

class OEPlaceHydrogensOptions(OEOptions):
    r"""Proxy of C++ OEBio::OEPlaceHydrogensOptions 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__(OEPlaceHydrogensOptions self, bool compatibleAlts=False) -> OEPlaceHydrogensOptions
        __init__(OEPlaceHydrogensOptions self, OEPlaceHydrogensOptions rhs) -> OEPlaceHydrogensOptions
        """
        _oechem.OEPlaceHydrogensOptions_swiginit(self, _oechem.new_OEPlaceHydrogensOptions(*args))
    __swig_destroy__ = _oechem.delete_OEPlaceHydrogensOptions

    def CreateCopy(self) -> "OEBio::OEPlaceHydrogensOptions *":
        r"""CreateCopy(OEPlaceHydrogensOptions self) -> OEPlaceHydrogensOptions"""
        return _oechem.OEPlaceHydrogensOptions_CreateCopy(self)

    def GetFlipBiasScale(self) -> "double":
        r"""GetFlipBiasScale(OEPlaceHydrogensOptions self) -> double"""
        return _oechem.OEPlaceHydrogensOptions_GetFlipBiasScale(self)

    def SetFlipBiasScale(self, value: "double const") -> "bool":
        r"""SetFlipBiasScale(OEPlaceHydrogensOptions self, double const value) -> bool"""
        return _oechem.OEPlaceHydrogensOptions_SetFlipBiasScale(self, value)

    def GetBadClashOverlapDistance(self) -> "double":
        r"""GetBadClashOverlapDistance(OEPlaceHydrogensOptions self) -> double"""
        return _oechem.OEPlaceHydrogensOptions_GetBadClashOverlapDistance(self)

    def SetBadClashOverlapDistance(self, value: "double const") -> "bool":
        r"""SetBadClashOverlapDistance(OEPlaceHydrogensOptions self, double const value) -> bool"""
        return _oechem.OEPlaceHydrogensOptions_SetBadClashOverlapDistance(self, value)

    def GetWaterProcessing(self) -> "unsigned int":
        r"""GetWaterProcessing(OEPlaceHydrogensOptions self) -> unsigned int"""
        return _oechem.OEPlaceHydrogensOptions_GetWaterProcessing(self)

    def SetWaterProcessing(self, value: "unsigned int const") -> "bool":
        r"""SetWaterProcessing(OEPlaceHydrogensOptions self, unsigned int const value) -> bool"""
        return _oechem.OEPlaceHydrogensOptions_SetWaterProcessing(self, value)

    def GetMaxSubstateCutoff(self) -> "double":
        r"""GetMaxSubstateCutoff(OEPlaceHydrogensOptions self) -> double"""
        return _oechem.OEPlaceHydrogensOptions_GetMaxSubstateCutoff(self)

    def SetMaxSubstateCutoff(self, value: "double const") -> "bool":
        r"""SetMaxSubstateCutoff(OEPlaceHydrogensOptions self, double const value) -> bool"""
        return _oechem.OEPlaceHydrogensOptions_SetMaxSubstateCutoff(self, value)

    def GetAltsMustBeCompatible(self) -> "bool":
        r"""GetAltsMustBeCompatible(OEPlaceHydrogensOptions self) -> bool"""
        return _oechem.OEPlaceHydrogensOptions_GetAltsMustBeCompatible(self)

    def GetStandardizeBondLen(self) -> "bool":
        r"""GetStandardizeBondLen(OEPlaceHydrogensOptions self) -> bool"""
        return _oechem.OEPlaceHydrogensOptions_GetStandardizeBondLen(self)

    def GetAddMetadata(self) -> "bool":
        r"""GetAddMetadata(OEPlaceHydrogensOptions self) -> bool"""
        return _oechem.OEPlaceHydrogensOptions_GetAddMetadata(self)

    def GetBypassPredicate(self) -> "OESystem::OEUnaryPredicate< OEChem::OEAtomBase > const *":
        r"""GetBypassPredicate(OEPlaceHydrogensOptions self) -> OEUnaryAtomPred"""
        return _oechem.OEPlaceHydrogensOptions_GetBypassPredicate(self)

    def SetBypassPredicate(self, value: "OEUnaryAtomPred") -> "bool":
        r"""SetBypassPredicate(OEPlaceHydrogensOptions self, OEUnaryAtomPred value) -> bool"""
        return _oechem.OEPlaceHydrogensOptions_SetBypassPredicate(self, value)

    def GetNoFlipPredicate(self) -> "OESystem::OEUnaryPredicate< OEChem::OEAtomBase > const *":
        r"""GetNoFlipPredicate(OEPlaceHydrogensOptions self) -> OEUnaryAtomPred"""
        return _oechem.OEPlaceHydrogensOptions_GetNoFlipPredicate(self)

    def SetNoFlipPredicate(self, value: "OEUnaryAtomPred") -> "bool":
        r"""SetNoFlipPredicate(OEPlaceHydrogensOptions self, OEUnaryAtomPred value) -> bool"""
        return _oechem.OEPlaceHydrogensOptions_SetNoFlipPredicate(self, value)

    def GetFlipPredicate(self) -> "OESystem::OEUnaryPredicate< OEChem::OEAtomBase > const *":
        r"""GetFlipPredicate(OEPlaceHydrogensOptions self) -> OEUnaryAtomPred"""
        return _oechem.OEPlaceHydrogensOptions_GetFlipPredicate(self)

    def SetFlipPredicate(self, value: "OEUnaryAtomPred") -> "bool":
        r"""SetFlipPredicate(OEPlaceHydrogensOptions self, OEUnaryAtomPred value) -> bool"""
        return _oechem.OEPlaceHydrogensOptions_SetFlipPredicate(self, value)

    def SetAltsMustBeCompatible(self, *args) -> "void":
        r"""
        SetAltsMustBeCompatible(OEPlaceHydrogensOptions self, bool const value) -> bool
        SetAltsMustBeCompatible(OEPlaceHydrogensOptions self)
        """
        return _oechem.OEPlaceHydrogensOptions_SetAltsMustBeCompatible(self, *args)

    def SetStandardizeBondLen(self, *args) -> "void":
        r"""
        SetStandardizeBondLen(OEPlaceHydrogensOptions self, bool const value) -> bool
        SetStandardizeBondLen(OEPlaceHydrogensOptions self)
        """
        return _oechem.OEPlaceHydrogensOptions_SetStandardizeBondLen(self, *args)

    def SetAddMetadata(self, *args) -> "void":
        r"""
        SetAddMetadata(OEPlaceHydrogensOptions self, bool const value) -> bool
        SetAddMetadata(OEPlaceHydrogensOptions self)
        """
        return _oechem.OEPlaceHydrogensOptions_SetAddMetadata(self, *args)

    def GetFlipBias(self) -> "double":
        r"""GetFlipBias(OEPlaceHydrogensOptions self) -> double"""
        return _oechem.OEPlaceHydrogensOptions_GetFlipBias(self)

# Register OEPlaceHydrogensOptions in _oechem:
_oechem.OEPlaceHydrogensOptions_swigregister(OEPlaceHydrogensOptions)


def OEPlaceHydrogens(*args) -> "bool":
    r"""
    OEPlaceHydrogens(OEMolBase mol, OEPlaceHydrogensOptions opts=OEBio::OEPlaceHydrogensOptions()) -> bool
    OEPlaceHydrogens(OEMolBase mol, OEPlaceHydrogensDetails details, OEPlaceHydrogensOptions opts=OEBio::OEPlaceHydrogensOptions()) -> bool
    """
    return _oechem.OEPlaceHydrogens(*args)

def OEHasPlaceHydrogensMetadata(mol: "OEMolBase") -> "bool":
    r"""OEHasPlaceHydrogensMetadata(OEMolBase mol) -> bool"""
    return _oechem.OEHasPlaceHydrogensMetadata(mol)

def OEGetPlaceHydrogensMetadata(mol: "OEMolBase") -> "std::string":
    r"""OEGetPlaceHydrogensMetadata(OEMolBase mol) -> std::string"""
    return _oechem.OEGetPlaceHydrogensMetadata(mol)

def OEClearPlaceHydrogensMetadata(mol: "OEMolBase") -> "void":
    r"""OEClearPlaceHydrogensMetadata(OEMolBase mol)"""
    return _oechem.OEClearPlaceHydrogensMetadata(mol)

def OEGetProtonationClusters(mol: "OEMolBase") -> "std::map< unsigned int,std::set< OEBio::OEAtomMatchResidueID > >":
    r"""OEGetProtonationClusters(OEMolBase mol) -> std::map< unsigned int,std::set< OEBio::OEAtomMatchResidueID > >"""
    return _oechem.OEGetProtonationClusters(mol)
class OEPlaceHydrogensMoverNoteIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEBio::OEPlaceHydrogensMoverNote > 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__(OEPlaceHydrogensMoverNoteIter self) -> OEPlaceHydrogensMoverNoteIter
        __init__(OEPlaceHydrogensMoverNoteIter self, OEPlaceHydrogensMoverNoteIter rhs) -> OEPlaceHydrogensMoverNoteIter
        __init__(OEPlaceHydrogensMoverNoteIter self, OESystem::OEIterBase< OEBio::OEPlaceHydrogensMoverNote > * rhs) -> OEPlaceHydrogensMoverNoteIter
        __init__(OEPlaceHydrogensMoverNoteIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEPlaceHydrogensMoverNote >::NonConstA > * rhs) -> OEPlaceHydrogensMoverNoteIter
        """
        _oechem.OEPlaceHydrogensMoverNoteIter_swiginit(self, _oechem.new_OEPlaceHydrogensMoverNoteIter(*args))
    __swig_destroy__ = _oechem.delete_OEPlaceHydrogensMoverNoteIter

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OEPlaceHydrogensMoverNote > *":
        r"""Copy(OEPlaceHydrogensMoverNoteIter self) -> OESystem::OEIterBase< OEBio::OEPlaceHydrogensMoverNote > *"""
        return _oechem.OEPlaceHydrogensMoverNoteIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEPlaceHydrogensMoverNoteIter self, OESystem::OEIterBase< OEBio::OEPlaceHydrogensMoverNote > * ib)
        Push(OEPlaceHydrogensMoverNoteIter self, OEPlaceHydrogensMoverNoteIter iter)
        """
        return _oechem.OEPlaceHydrogensMoverNoteIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEBio::OEPlaceHydrogensMoverNote,OEBio::OEPlaceHydrogensMoverNote > const &") -> "void":
        r"""Sort(OEPlaceHydrogensMoverNoteIter self, OESystem::OEBinaryPredicate< OEBio::OEPlaceHydrogensMoverNote,OEBio::OEPlaceHydrogensMoverNote > const & sort_criterion)"""
        return _oechem.OEPlaceHydrogensMoverNoteIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEBio::OEPlaceHydrogensMoverNote > &":
        r"""ToFirst(OEPlaceHydrogensMoverNoteIter self) -> OEPlaceHydrogensMoverNoteIter"""
        return _oechem.OEPlaceHydrogensMoverNoteIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEBio::OEPlaceHydrogensMoverNote > &":
        r"""ToLast(OEPlaceHydrogensMoverNoteIter self) -> OEPlaceHydrogensMoverNoteIter"""
        return _oechem.OEPlaceHydrogensMoverNoteIter_ToLast(self)

    def __ref__(self) -> "OEBio::OEPlaceHydrogensMoverNote &":
        r"""__ref__(OEPlaceHydrogensMoverNoteIter self) -> OEPlaceHydrogensMoverNote"""
        return _oechem.OEPlaceHydrogensMoverNoteIter___ref__(self)

    def IsValid(self):
      return _oechem.OEPlaceHydrogensMoverNoteIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEPlaceHydrogensMoverNoteIter self) -> PyObject *"""
        return _oechem.OEPlaceHydrogensMoverNoteIter_next(self)

    def Target(self) -> "OEBio::OEPlaceHydrogensMoverNote &":
        r"""Target(OEPlaceHydrogensMoverNoteIter self) -> OEPlaceHydrogensMoverNote"""
        return _oechem.OEPlaceHydrogensMoverNoteIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEBio::OEPlaceHydrogensMoverNote > &":
        r"""
        Next(OEPlaceHydrogensMoverNoteIter self) -> OEPlaceHydrogensMoverNoteIter
        Next(OEPlaceHydrogensMoverNoteIter self, int i) -> OEPlaceHydrogensMoverNoteIter
        """
        return _oechem.OEPlaceHydrogensMoverNoteIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OEPlaceHydrogensMoverNote > &":
        r"""
        Prev(OEPlaceHydrogensMoverNoteIter self) -> OEPlaceHydrogensMoverNoteIter
        Prev(OEPlaceHydrogensMoverNoteIter self, int i) -> OEPlaceHydrogensMoverNoteIter
        """
        return _oechem.OEPlaceHydrogensMoverNoteIter_Prev(self, *args)

# Register OEPlaceHydrogensMoverNoteIter in _oechem:
_oechem.OEPlaceHydrogensMoverNoteIter_swigregister(OEPlaceHydrogensMoverNoteIter)

OE_OEBIO_VERSION = _oechem.OE_OEBIO_VERSION


def OEBioGetRelease() -> "char const *":
    r"""OEBioGetRelease() -> char const *"""
    return _oechem.OEBioGetRelease()

def OEBioGetVersion() -> "unsigned int":
    r"""OEBioGetVersion() -> unsigned int"""
    return _oechem.OEBioGetVersion()

def OEBioGetArch() -> "char const *":
    r"""OEBioGetArch() -> char const *"""
    return _oechem.OEBioGetArch()

def OEBioGetPlatform() -> "char const *":
    r"""OEBioGetPlatform() -> char const *"""
    return _oechem.OEBioGetPlatform()

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

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

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

OEThrow = cvar.OEThrow

OEAroModelUndefined = cvar.OEAroModelUndefined
OEAroModelTripos = cvar.OEAroModelTripos
OEAroModelOpenEye = cvar.OEAroModelOpenEye
OEAroModelDaylight = cvar.OEAroModelDaylight
OEAroModelMMFF = cvar.OEAroModelMMFF
OEAroModelMDL = cvar.OEAroModelMDL

OENormModelDefault = cvar.OENormModelDefault
OENormModelSymmetry = cvar.OENormModelSymmetry
OENormModelPhysical = cvar.OENormModelPhysical
OENormModelHyperVal = cvar.OENormModelHyperVal
OENormModelDative = cvar.OENormModelDative

OEBlack = cvar.OEBlack
OEWhite = cvar.OEWhite
OERed = cvar.OERed
OEGreen = cvar.OEGreen
OEBlue = cvar.OEBlue
OEYellow = cvar.OEYellow
OECyan = cvar.OECyan
OEMagenta = cvar.OEMagenta
OEOrange = cvar.OEOrange
OEPink = cvar.OEPink
OEGrey = cvar.OEGrey
OEPurple = cvar.OEPurple
OERoyalBlue = cvar.OERoyalBlue
OEOliveBrown = cvar.OEOliveBrown
OEOliveGreen = cvar.OEOliveGreen
OEOliveGrey = cvar.OEOliveGrey
OELimeGreen = cvar.OELimeGreen

OEDarkRed = cvar.OEDarkRed
OEDarkGreen = cvar.OEDarkGreen
OEDarkBlue = cvar.OEDarkBlue
OEDarkYellow = cvar.OEDarkYellow
OEDarkCyan = cvar.OEDarkCyan
OEDarkMagenta = cvar.OEDarkMagenta
OEDarkOrange = cvar.OEDarkOrange
OEDarkGrey = cvar.OEDarkGrey
OEDarkRose = cvar.OEDarkRose
OEDarkBrown = cvar.OEDarkBrown
OEDarkSalmon = cvar.OEDarkSalmon
OEDarkPurple = cvar.OEDarkPurple

OEMediumBrown = cvar.OEMediumBrown
OEMediumBlue = cvar.OEMediumBlue
OEMediumYellow = cvar.OEMediumYellow
OEMediumGreen = cvar.OEMediumGreen
OEMediumOrange = cvar.OEMediumOrange
OEMediumPurple = cvar.OEMediumPurple
OEMediumSalmon = cvar.OEMediumSalmon

OELightBlue = cvar.OELightBlue
OELightGrey = cvar.OELightGrey
OELightPurple = cvar.OELightPurple
OELightSalmon = cvar.OELightSalmon
OELightBrown = cvar.OELightBrown
OELightOrange = cvar.OELightOrange
OELightGreen = cvar.OELightGreen



OEMolBase.NewGroup = NewGroup

OEMolBase.GetAtomIter = OEMolBase.GetAtoms
OEMolBase.GetBondIter = OEMolBase.GetBonds

OEGraphMol.GetAtomIter = OEGraphMol.GetAtoms
OEGraphMol.GetBondIter = OEGraphMol.GetBonds

OEMCMolBase.GetConfIter = OEMCMolBase.GetConfs

OEMol.GetAtomIter = OEMol.GetAtoms
OEMol.GetBondIter = OEMol.GetBonds
OEMol.GetConfIter = OEMol.GetConfs

OEQMol.GetAtomIter = OEQMol.GetAtoms
OEQMol.GetBondIter = OEQMol.GetBonds

OEAtomBase.GetAtomIter = OEAtomBase.GetAtoms
OEAtomBase.GetBondIter = OEAtomBase.GetBonds

OEMatchBase.GetAtomIter = OEMatchBase.GetAtoms
OEMatchBase.GetBondIter = OEMatchBase.GetBonds

MatchGraphMol = OEMatchGraphMol
MatchMolBase = OEMatchMolBase
MatchAtom = OEMatchAtom

OEMCSSearch.GetMatchIter = OEMCSSearch.Match
OECliqueSearch.GetMatchIter = OECliqueSearch.Match
OESubSearch.GetMatchIter = OESubSearch.Match

OEAcyclicPathIter = OEAcyclicPath
OEGetSDDataIter = OEGetSDDataPairs
OEGetPDBDataIter = OEGetPDBDataPairs

HasAtomIdx = OEHasAtomIdx
HasBondIdx = OEHasBondIdx
HasConfIdx = OEHasConfIdx

HasAtomName = OEHasAtomName
HasChainID = OEHasChainID
HasResidueNumber = OEHasResidueNumber
HasFragmentNumber = OEHasFragmentNumber
HasMapIdx = OEHasMapIdx
HasAtomicNum = OEHasAtomicNum
IsRGroup = OEIsRGroup
NthAtom = OENthAtom

IsHydrogen = OEIsHydrogen
IsHeavy = OEIsHeavy
IsPolar = OEIsPolar
IsPolarHydrogen =  OEIsPolarHydrogen
IsCarbon =  OEIsCarbon
IsCAlpha =  OEIsCAlpha
IsNitrogen =  OEIsNitrogen
IsOxygen = OEIsOxygen
IsHalogen = OEIsHalogen
IsSulfur = OEIsSulfur
IsPhosphorus = OEIsPhosphorus
IsAromaticAtom = OEIsAromaticAtom
IsHalide = OEIsHalide
AtomIsInRing = OEAtomIsInRing
IsChiralAtom = OEIsChiralAtom
HasAtomStereoSpecified = OEHasAtomStereoSpecified
HasAlphaBetaUnsat = OEHasAlphaBetaUnsat
AtomIsInResidue = OEAtomIsInResidue

HasOrder = OEHasOrder
BondIsInRing = OEBondIsInRing
IsRotor = OEIsRotor
IsChiralBond = OEIsChiralBond
HasBondStereoSpecified = OEHasBondStereoSpecified
IsAromaticBond = OEIsAromaticBond
GetNbrAtom = OEGetNbrAtom

InSamePart = OEInSamePart


class OEAnnotation(OEBase):
    r"""Proxy of C++ OESystem::OEAnnotation 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__(OEAnnotation self) -> OEAnnotation
        __init__(OEAnnotation self, unsigned int type, char const * title=None) -> OEAnnotation
        __init__(OEAnnotation self, OEAnnotation rhs) -> OEAnnotation
        """
        _oechem.OEAnnotation_swiginit(self, _oechem.new_OEAnnotation(*args))
    __swig_destroy__ = _oechem.delete_OEAnnotation

    def GetDataType(self) -> "void const *":
        r"""GetDataType(OEAnnotation self) -> void const *"""
        return _oechem.OEAnnotation_GetDataType(self)

    def IsDataType(self, type: "void const *") -> "bool":
        r"""IsDataType(OEAnnotation self, void const * type) -> bool"""
        return _oechem.OEAnnotation_IsDataType(self, type)

    def CreateCopy(self) -> "OESystem::OEBase *":
        r"""CreateCopy(OEAnnotation self) -> OEBase"""
        return _oechem.OEAnnotation_CreateCopy(self)

    def GetTitle(self) -> "char const *":
        r"""GetTitle(OEAnnotation self) -> char const *"""
        return _oechem.OEAnnotation_GetTitle(self)

    def SetTitle(self, arg2: "char const *") -> "void":
        r"""SetTitle(OEAnnotation self, char const * arg2)"""
        return _oechem.OEAnnotation_SetTitle(self, arg2)

    def GetType(self) -> "unsigned int":
        r"""GetType(OEAnnotation self) -> unsigned int"""
        return _oechem.OEAnnotation_GetType(self)

    def SetType(self, type: "unsigned int") -> "void":
        r"""SetType(OEAnnotation self, unsigned int type)"""
        return _oechem.OEAnnotation_SetType(self, type)

    def GetColor(self) -> "OESystem::OEColor":
        r"""GetColor(OEAnnotation self) -> OEColor"""
        return _oechem.OEAnnotation_GetColor(self)

    def SetColor(self, arg2: "OEColor") -> "OESystem::OEAnnotation &":
        r"""SetColor(OEAnnotation self, OEColor arg2) -> OEAnnotation"""
        return _oechem.OEAnnotation_SetColor(self, arg2)

    def GetRenderHint(self) -> "unsigned int":
        r"""GetRenderHint(OEAnnotation self) -> unsigned int"""
        return _oechem.OEAnnotation_GetRenderHint(self)

    def SetRenderHint(self, hint: "unsigned int") -> "OESystem::OEAnnotation &":
        r"""SetRenderHint(OEAnnotation self, unsigned int hint) -> OEAnnotation"""
        return _oechem.OEAnnotation_SetRenderHint(self, hint)

    def AddChild(self, child: "OEAnnotation") -> "void":
        r"""AddChild(OEAnnotation self, OEAnnotation child)"""
        return _oechem.OEAnnotation_AddChild(self, child)

    def GetChildren(self) -> "OESystem::OEIterBase< OESystem::OEAnnotation > *":
        r"""GetChildren(OEAnnotation self) -> OESystem::OEIterBase< OESystem::OEAnnotation > *"""
        return _oechem.OEAnnotation_GetChildren(self)

# Register OEAnnotation in _oechem:
_oechem.OEAnnotation_swigregister(OEAnnotation)
Container = cvar.Container
Sphere = cvar.Sphere
Ellipsoid = cvar.Ellipsoid
Box = cvar.Box
Cylinder = cvar.Cylinder
Arrow = cvar.Arrow
Line = cvar.Line
Surface = cvar.Surface
Spline = cvar.Spline
SplineSurface = cvar.SplineSurface
Torus = cvar.Torus
Text = cvar.Text
Symbol = cvar.Symbol
Solid = cvar.Solid
Mesh = cvar.Mesh
Points = cvar.Points


def OEAnnotateSphere(title: "char const *", center: "float *", radius: "float", hemisphereDirection: "float *"=None) -> "OESystem::OEAnnotation":
    r"""OEAnnotateSphere(char const * title, float * center, float radius, float * hemisphereDirection=None) -> OEAnnotation"""
    return _oechem.OEAnnotateSphere(title, center, radius, hemisphereDirection)

def OEAnnotateEllipsoid(title: "char const *", center: "float *", a: "float", b: "float", c: "float", dir1: "float *", dir2: "float *", dir3: "float *") -> "OESystem::OEAnnotation":
    r"""OEAnnotateEllipsoid(char const * title, float * center, float a, float b, float c, float * dir1, float * dir2, float * dir3) -> OEAnnotation"""
    return _oechem.OEAnnotateEllipsoid(title, center, a, b, c, dir1, dir2, dir3)

def OEAnnotateBox(title: "char const *", center: "float *", extents: "float *") -> "OESystem::OEAnnotation":
    r"""OEAnnotateBox(char const * title, float * center, float * extents) -> OEAnnotation"""
    return _oechem.OEAnnotateBox(title, center, extents)

def OEAnnotateCylinder(title: "char const *", A: "float *", B: "float *", r1: "float", r2: "float") -> "OESystem::OEAnnotation":
    r"""OEAnnotateCylinder(char const * title, float * A, float * B, float r1, float r2) -> OEAnnotation"""
    return _oechem.OEAnnotateCylinder(title, A, B, r1, r2)

def OEAnnotateArrow(title: "char const *", A: "float *", B: "float *", percentCylinder: "float", r1: "float", r2: "float", r3: "float") -> "OESystem::OEAnnotation":
    r"""OEAnnotateArrow(char const * title, float * A, float * B, float percentCylinder, float r1, float r2, float r3) -> OEAnnotation"""
    return _oechem.OEAnnotateArrow(title, A, B, percentCylinder, r1, r2, r3)

def OEAnnotateLine(title: "char const *", A: "float *", B: "float *") -> "OESystem::OEAnnotation":
    r"""OEAnnotateLine(char const * title, float * A, float * B) -> OEAnnotation"""
    return _oechem.OEAnnotateLine(title, A, B)

def OEAnnotateSpline(title: "char const *", coords: "float *", numPoints: "unsigned int", splineResolution: "unsigned int") -> "OESystem::OEAnnotation":
    r"""OEAnnotateSpline(char const * title, float * coords, unsigned int numPoints, unsigned int splineResolution) -> OEAnnotation"""
    return _oechem.OEAnnotateSpline(title, coords, numPoints, splineResolution)

def OEAnnotateTorus(title: "char const *", A: "float *", r1: "float", r2: "float", direction: "float *") -> "OESystem::OEAnnotation":
    r"""OEAnnotateTorus(char const * title, float * A, float r1, float r2, float * direction) -> OEAnnotation"""
    return _oechem.OEAnnotateTorus(title, A, r1, r2, direction)

def OEAnnotateText(title: "char const *", A: "float *", text: "char const *") -> "OESystem::OEAnnotation":
    r"""OEAnnotateText(char const * title, float * A, char const * text) -> OEAnnotation"""
    return _oechem.OEAnnotateText(title, A, text)

def OEAnnotateSymbol(title: "char const *", A: "float *", symbol: "char const *") -> "OESystem::OEAnnotation":
    r"""OEAnnotateSymbol(char const * title, float * A, char const * symbol) -> OEAnnotation"""
    return _oechem.OEAnnotateSymbol(title, A, symbol)

def OEAnnotateSplineSurface(title: "char const *", coords: "float *", numPoints: "unsigned int", splineResolution: "unsigned int", segmentResolution: "int", crossResolution: "int", width: "float", thickness: "float", splineType: "int", style: "int") -> "OESystem::OEAnnotation":
    r"""OEAnnotateSplineSurface(char const * title, float * coords, unsigned int numPoints, unsigned int splineResolution, int segmentResolution, int crossResolution, float width, float thickness, int splineType, int style) -> OEAnnotation"""
    return _oechem.OEAnnotateSplineSurface(title, coords, numPoints, splineResolution, segmentResolution, crossResolution, width, thickness, splineType, style)

def OEInitAnnotationHandlers(hand: "OEBinaryIOHandlerBase") -> "void":
    r"""OEInitAnnotationHandlers(OEBinaryIOHandlerBase hand)"""
    return _oechem.OEInitAnnotationHandlers(hand)
class OEAnnotationIter(object):
    r"""Proxy of C++ OESystem::OEIter< OESystem::OEAnnotation > 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__(OEAnnotationIter self) -> OEAnnotationIter
        __init__(OEAnnotationIter self, OEAnnotationIter rhs) -> OEAnnotationIter
        __init__(OEAnnotationIter self, OESystem::OEIterBase< OESystem::OEAnnotation > * rhs) -> OEAnnotationIter
        __init__(OEAnnotationIter self, OESystem::OEIterBase< OESystem::OEIter< OESystem::OEAnnotation >::NonConstA > * rhs) -> OEAnnotationIter
        """
        _oechem.OEAnnotationIter_swiginit(self, _oechem.new_OEAnnotationIter(*args))
    __swig_destroy__ = _oechem.delete_OEAnnotationIter

    def Copy(self) -> "OESystem::OEIterBase< OESystem::OEAnnotation > *":
        r"""Copy(OEAnnotationIter self) -> OESystem::OEIterBase< OESystem::OEAnnotation > *"""
        return _oechem.OEAnnotationIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEAnnotationIter self, OESystem::OEIterBase< OESystem::OEAnnotation > * ib)
        Push(OEAnnotationIter self, OEAnnotationIter iter)
        """
        return _oechem.OEAnnotationIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OESystem::OEAnnotation,OESystem::OEAnnotation > const &") -> "void":
        r"""Sort(OEAnnotationIter self, OESystem::OEBinaryPredicate< OESystem::OEAnnotation,OESystem::OEAnnotation > const & sort_criterion)"""
        return _oechem.OEAnnotationIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OESystem::OEAnnotation > &":
        r"""ToFirst(OEAnnotationIter self) -> OEAnnotationIter"""
        return _oechem.OEAnnotationIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OESystem::OEAnnotation > &":
        r"""ToLast(OEAnnotationIter self) -> OEAnnotationIter"""
        return _oechem.OEAnnotationIter_ToLast(self)

    def __ref__(self) -> "OESystem::OEAnnotation &":
        r"""__ref__(OEAnnotationIter self) -> OEAnnotation"""
        return _oechem.OEAnnotationIter___ref__(self)

    def IsValid(self):
      return _oechem.OEAnnotationIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEAnnotationIter self) -> PyObject *"""
        return _oechem.OEAnnotationIter_next(self)

    def Target(self) -> "OESystem::OEAnnotation &":
        r"""Target(OEAnnotationIter self) -> OEAnnotation"""
        return _oechem.OEAnnotationIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OESystem::OEAnnotation > &":
        r"""
        Next(OEAnnotationIter self) -> OEAnnotationIter
        Next(OEAnnotationIter self, int i) -> OEAnnotationIter
        """
        return _oechem.OEAnnotationIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OESystem::OEAnnotation > &":
        r"""
        Prev(OEAnnotationIter self) -> OEAnnotationIter
        Prev(OEAnnotationIter self, int i) -> OEAnnotationIter
        """
        return _oechem.OEAnnotationIter_Prev(self, *args)

# Register OEAnnotationIter in _oechem:
_oechem.OEAnnotationIter_swigregister(OEAnnotationIter)



# Fix reference counting bug for OEAnnotation
def OEAnnotation_SetColor(self,*a):
    self._SetColor(*a)
    return self

def OEAnnotation_SetRenderHint(self,*a):
    self._SetRenderHint(*a)
    return self

def OEAnnotation_AddChild(self,*a):
    self._AddChild(*a)
    return self

OEAnnotation._SetColor      = OEAnnotation.SetColor
OEAnnotation._SetRenderHint = OEAnnotation.SetRenderHint
OEAnnotation._AddChild      = OEAnnotation.AddChild
OEAnnotation.SetColor       = OEAnnotation_SetColor
OEAnnotation.SetRenderHint  = OEAnnotation_SetRenderHint
OEAnnotation.AddChild       = OEAnnotation_AddChild



def OECoordF(x,y,z):
    f = OEFloatArray(3)
    f[0] = x
    f[1] = y
    f[2] = z
    return f

def OECoord(x,y,z):
    f = OEDoubleArray(3)
    f[0] = x
    f[1] = y
    f[2] = z
    return f

def OEToArray(*a):
    f = OEDoubleArray(len(a))
    for i,x in enumerate(a):
        f[i] = x
    return f

def OEToArrayF(*a):
    f = OEFloatArray(len(a))
    for i,x in enumerate(a):
        f[i] = x
    return f

def OEToArrayI(*a):
    f = OEIntArray(len(a))
    for i,x in enumerate(a):
        f[i] = x
    return f


def OEHasExplicitHydrogenExpression(arg1: "OEQMolBase") -> "bool":
    r"""OEHasExplicitHydrogenExpression(OEQMolBase arg1) -> bool"""
    return _oechem.OEHasExplicitHydrogenExpression(arg1)

def OEHasImplicitHydrogenExpression(arg1: "OEQMolBase") -> "bool":
    r"""OEHasImplicitHydrogenExpression(OEQMolBase arg1) -> bool"""
    return _oechem.OEHasImplicitHydrogenExpression(arg1)

def OEDisassembleExpressions(arg1: "OEQMolBase") -> "bool":
    r"""OEDisassembleExpressions(OEQMolBase arg1) -> bool"""
    return _oechem.OEDisassembleExpressions(arg1)
class OEExprBase(object):
    r"""Proxy of C++ OEChem::OEExprBase 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__ = _oechem.delete_OEExprBase

    def IsEquivalent(self, *args) -> "OEChem::OEFuzzy const &":
        r"""
        IsEquivalent(OEExprBase self, OEAtomBase arg2) -> OEFuzzy
        IsEquivalent(OEExprBase self, OEBondBase arg2) -> OEFuzzy
        """
        return _oechem.OEExprBase_IsEquivalent(self, *args)

    def CreateCopy(self) -> "OEChem::OEExprBase *":
        r"""CreateCopy(OEExprBase self) -> OEExprBase"""
        return _oechem.OEExprBase_CreateCopy(self)

    def GetType(self) -> "unsigned int":
        r"""GetType(OEExprBase self) -> unsigned int"""
        return _oechem.OEExprBase_GetType(self)

# Register OEExprBase in _oechem:
_oechem.OEExprBase_swigregister(OEExprBase)

class OEFuzzy(object):
    r"""Proxy of C++ OEChem::OEFuzzy 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__(OEFuzzy self) -> OEFuzzy
        __init__(OEFuzzy self, unsigned int const v) -> OEFuzzy
        """
        _oechem.OEFuzzy_swiginit(self, _oechem.new_OEFuzzy(*args))

    def IsValid(self):
      return _oechem.OEFuzzy___nonzero__(self)



    def __eq__(self, arg2: "OEFuzzy") -> "bool":
        r"""__eq__(OEFuzzy self, OEFuzzy arg2) -> bool"""
        return _oechem.OEFuzzy___eq__(self, arg2)

    def __ne__(self, arg2: "OEFuzzy") -> "bool":
        r"""__ne__(OEFuzzy self, OEFuzzy arg2) -> bool"""
        return _oechem.OEFuzzy___ne__(self, arg2)

    def __str__(self) -> "std::string":
        r"""__str__(OEFuzzy self) -> std::string"""
        return _oechem.OEFuzzy___str__(self)
    __swig_destroy__ = _oechem.delete_OEFuzzy

# Register OEFuzzy in _oechem:
_oechem.OEFuzzy_swigregister(OEFuzzy)


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 *
    """
    return _oechem.GetSWIG_NewPointerObj(*args)

def OEGeom2DMagnitude(*args) -> "double":
    r"""
    OEGeom2DMagnitude(float * x) -> double
    OEGeom2DMagnitude(double * x) -> double
    """
    return _oechem.OEGeom2DMagnitude(*args)

def OEGeom2DCopy(*args) -> "void":
    r"""
    OEGeom2DCopy(float * x, float const * p)
    OEGeom2DCopy(double * x, double const * p)
    """
    return _oechem.OEGeom2DCopy(*args)

def OEGeom2DAdd(*args) -> "void":
    r"""
    OEGeom2DAdd(float * x, float const * p)
    OEGeom2DAdd(float * x, float const * p, float const * q)
    OEGeom2DAdd(double * x, double const * p)
    OEGeom2DAdd(double * x, double const * p, double const * q)
    """
    return _oechem.OEGeom2DAdd(*args)

def OEGeom2DSubtract(*args) -> "void":
    r"""
    OEGeom2DSubtract(float * x, float const * p)
    OEGeom2DSubtract(float * x, float const * p, float const * q)
    OEGeom2DSubtract(double * x, double const * p)
    OEGeom2DSubtract(double * x, double const * p, double const * q)
    """
    return _oechem.OEGeom2DSubtract(*args)

def OEGeom2DScale(*args) -> "void":
    r"""
    OEGeom2DScale(float * x, float const p)
    OEGeom2DScale(float * x, float const p, float const * q)
    OEGeom2DScale(double * x, double const p)
    OEGeom2DScale(double * x, double const p, double const * q)
    """
    return _oechem.OEGeom2DScale(*args)

def OEGeom2DDotProd(*args) -> "double":
    r"""
    OEGeom2DDotProd(float const * p, float const * q) -> double
    OEGeom2DDotProd(double const * p, double const * q) -> double
    """
    return _oechem.OEGeom2DDotProd(*args)

def OEGeom2DDistance(*args) -> "double":
    r"""
    OEGeom2DDistance(float const * p, float const * q) -> double
    OEGeom2DDistance(double const * p, double const * q) -> double
    """
    return _oechem.OEGeom2DDistance(*args)

def OEGeom2DDistance2(*args) -> "double":
    r"""
    OEGeom2DDistance2(float const * p, float const * q) -> double
    OEGeom2DDistance2(double const * p, double const * q) -> double
    """
    return _oechem.OEGeom2DDistance2(*args)

def OEGeom2DAngle(*args) -> "double":
    r"""
    OEGeom2DAngle(float const * p, float const * q, float const * r) -> double
    OEGeom2DAngle(double const * p, double const * q, double const * r) -> double
    """
    return _oechem.OEGeom2DAngle(*args)

def OEGeom2DMidpoint(*args) -> "void":
    r"""
    OEGeom2DMidpoint(float * x, float const * p, float const * q)
    OEGeom2DMidpoint(double * x, double const * p, double const * q)
    """
    return _oechem.OEGeom2DMidpoint(*args)

def OEGeom2DNormalize(*args) -> "void":
    r"""
    OEGeom2DNormalize(float * x)
    OEGeom2DNormalize(double * x)
    """
    return _oechem.OEGeom2DNormalize(*args)

def OEGeom2DSetLength(*args) -> "void":
    r"""
    OEGeom2DSetLength(float * x, float len)
    OEGeom2DSetLength(double * x, double len)
    """
    return _oechem.OEGeom2DSetLength(*args)

def OEGeom2DTranslate(*args) -> "void":
    r"""
    OEGeom2DTranslate(float * xyz, float const * t, unsigned int ncoord)
    OEGeom2DTranslate(double * xyz, double const * t, unsigned int ncoord)
    """
    return _oechem.OEGeom2DTranslate(*args)

def OEGeom2DRotate(*args) -> "void":
    r"""
    OEGeom2DRotate(float * xyz, float const * m, unsigned int ncoord)
    OEGeom2DRotate(double * xyz, double const * m, unsigned int ncoord)
    """
    return _oechem.OEGeom2DRotate(*args)

def OEGeom3DMagnitude(*args) -> "double":
    r"""
    OEGeom3DMagnitude(float * x) -> double
    OEGeom3DMagnitude(double * x) -> double
    """
    return _oechem.OEGeom3DMagnitude(*args)

def OEGeom3DCopy(*args) -> "void":
    r"""
    OEGeom3DCopy(float * x, float const * p)
    OEGeom3DCopy(double * x, double const * p)
    """
    return _oechem.OEGeom3DCopy(*args)

def OEGeom3DAdd(*args) -> "void":
    r"""
    OEGeom3DAdd(float * x, float const * p)
    OEGeom3DAdd(double * x, double const * p)
    OEGeom3DAdd(float * x, float const * p, float const * q)
    OEGeom3DAdd(double * x, double const * p, double const * q)
    """
    return _oechem.OEGeom3DAdd(*args)

def OEGeom3DSubtract(*args) -> "void":
    r"""
    OEGeom3DSubtract(float * x, float const * p)
    OEGeom3DSubtract(double * x, double const * p)
    OEGeom3DSubtract(float * x, float const * p, float const * q)
    OEGeom3DSubtract(double * x, double const * p, double const * q)
    """
    return _oechem.OEGeom3DSubtract(*args)

def OEGeom3DScale(*args) -> "void":
    r"""
    OEGeom3DScale(float * x, float const p)
    OEGeom3DScale(float * x, float const p, float const * q)
    OEGeom3DScale(double * x, double const p)
    OEGeom3DScale(double * x, double const p, double const * q)
    """
    return _oechem.OEGeom3DScale(*args)

def OEGeom3DDotProd(*args) -> "double":
    r"""
    OEGeom3DDotProd(float const * p, float const * q) -> double
    OEGeom3DDotProd(double const * p, double const * q) -> double
    """
    return _oechem.OEGeom3DDotProd(*args)

def OEGeom3DCrossProd(*args) -> "void":
    r"""
    OEGeom3DCrossProd(float * x, float const * p, float const * q)
    OEGeom3DCrossProd(double * x, double const * p, double const * q)
    OEGeom3DCrossProd(float * x, float const * p, float const * q, float const * r)
    OEGeom3DCrossProd(double * x, double const * p, double const * q, double const * r)
    """
    return _oechem.OEGeom3DCrossProd(*args)

def OEGeom3DDistance(*args) -> "double":
    r"""
    OEGeom3DDistance(float const * p, float const * q) -> double
    OEGeom3DDistance(float const * p, double const * q) -> double
    OEGeom3DDistance(double const * p, float const * q) -> double
    OEGeom3DDistance(double const * p, double const * q) -> double
    """
    return _oechem.OEGeom3DDistance(*args)

def OEGeom3DDistance2(*args) -> "double":
    r"""
    OEGeom3DDistance2(float const * p, float const * q) -> double
    OEGeom3DDistance2(float const * p, double const * q) -> double
    OEGeom3DDistance2(double const * p, float const * q) -> double
    OEGeom3DDistance2(double const * p, double const * q) -> double
    """
    return _oechem.OEGeom3DDistance2(*args)

def OEGeom3DAngle(*args) -> "double":
    r"""
    OEGeom3DAngle(float const * p, float const * q, float const * r) -> double
    OEGeom3DAngle(double const * p, double const * q, double const * r) -> double
    OEGeom3DAngle(float const * p, float const * q) -> double
    OEGeom3DAngle(double const * p, double const * q) -> double
    """
    return _oechem.OEGeom3DAngle(*args)

def OEGeom3DTorsion(*args) -> "double":
    r"""
    OEGeom3DTorsion(float const * p, float const * q, float const * r, float const * s) -> double
    OEGeom3DTorsion(double const * p, double const * q, double const * r, double const * s) -> double
    """
    return _oechem.OEGeom3DTorsion(*args)

def OEGeom3DAbsTorsion(*args) -> "double":
    r"""
    OEGeom3DAbsTorsion(float const * p, float const * q, float const * r, float const * s) -> double
    OEGeom3DAbsTorsion(double const * p, double const * q, double const * r, double const * s) -> double
    """
    return _oechem.OEGeom3DAbsTorsion(*args)

def OEGeom3DVolume(*args) -> "double":
    r"""
    OEGeom3DVolume(float const * p, float const * q, float const * r, float const * s) -> double
    OEGeom3DVolume(double const * p, double const * q, double const * r, double const * s) -> double
    """
    return _oechem.OEGeom3DVolume(*args)

def OEGeom3DNormalize(*args) -> "void":
    r"""
    OEGeom3DNormalize(float * x)
    OEGeom3DNormalize(double * x)
    """
    return _oechem.OEGeom3DNormalize(*args)

def OEGeom3DSetLength(*args) -> "void":
    r"""
    OEGeom3DSetLength(float * x, float len)
    OEGeom3DSetLength(double * x, double len)
    """
    return _oechem.OEGeom3DSetLength(*args)

def OEGeom3DTranslate(*args) -> "void":
    r"""
    OEGeom3DTranslate(float * xyz, double const * t, unsigned int ncoord)
    OEGeom3DTranslate(float * xyz, double const * t, unsigned int * idx, unsigned int ncoord)
    OEGeom3DTranslate(double * xyz, double const * t, unsigned int ncoord)
    OEGeom3DTranslate(double * xyz, double const * t, unsigned int * idx, unsigned int ncoord)
    """
    return _oechem.OEGeom3DTranslate(*args)

def OEGeom3DRotate(*args) -> "void":
    r"""
    OEGeom3DRotate(float * xyz, double const * m, unsigned int ncoord)
    OEGeom3DRotate(float * xyz, double const * m, unsigned int * idx, unsigned int ncoord)
    OEGeom3DRotate(double * xyz, double const * m, unsigned int ncoord)
    OEGeom3DRotate(double * xyz, double const * m, unsigned int * idx, unsigned int ncoord)
    """
    return _oechem.OEGeom3DRotate(*args)

def OEGeom3DReflect(*args) -> "void":
    r"""
    OEGeom3DReflect(float * xyz, unsigned int axis_to_reflect_around, unsigned int ncoord)
    OEGeom3DReflect(double * xyz, unsigned int axis_to_reflect_around, unsigned int ncoord)
    """
    return _oechem.OEGeom3DReflect(*args)

def OEGeom3DRotVectorToTransform(*args) -> "bool":
    r"""
    OEGeom3DRotVectorToTransform(double * m, double * tran, float const * p1, float const * p2, float const theta) -> bool
    OEGeom3DRotVectorToTransform(double * m, double * tran, double const * p1, double const * p2, double const theta) -> bool
    """
    return _oechem.OEGeom3DRotVectorToTransform(*args)

def OEGeom3DEulerRotate(*args) -> "void":
    r"""
    OEGeom3DEulerRotate(float * xyz, double const * angles, unsigned int ncoord)
    OEGeom3DEulerRotate(double * xyz, double const * angles, unsigned int ncoord)
    """
    return _oechem.OEGeom3DEulerRotate(*args)

def OEGeom3DAngleCoord(*args) -> "void":
    r"""
    OEGeom3DAngleCoord(float * dst, float const * center, float const * r1, float ang, float len)
    OEGeom3DAngleCoord(float * dst, float const * center, float const * r1, float const * n, float ang, float len)
    OEGeom3DAngleCoord(double * dst, double const * center, double const * r1, double ang, double len)
    OEGeom3DAngleCoord(double * dst, double const * center, double const * r1, double const * n, double ang, double len)
    """
    return _oechem.OEGeom3DAngleCoord(*args)

def OEGeom3DPlanarCoord(*args) -> "void":
    r"""
    OEGeom3DPlanarCoord(float * dst, float const * center, float const * r1, float const * r2, float len)
    OEGeom3DPlanarCoord(double * dst, double const * center, double const * r1, double const * r2, double len)
    """
    return _oechem.OEGeom3DPlanarCoord(*args)

def OEGeom3DTetraCoord(*args) -> "void":
    r"""
    OEGeom3DTetraCoord(float * dst, float const * center, float const * r1, float const * r2, float len)
    OEGeom3DTetraCoord(float * dst, float const * center, float const * r1, float const * r2, float const * r3, float len)
    OEGeom3DTetraCoord(double * dst, double const * center, double const * r1, double const * r2, double len)
    OEGeom3DTetraCoord(double * dst, double const * center, double const * r1, double const * r2, double const * r3, double len)
    """
    return _oechem.OEGeom3DTetraCoord(*args)

def OEGeom3DEulerToRotMatrix(*args) -> "void":
    r"""
    OEGeom3DEulerToRotMatrix(double * RMat, double const phi, double const theta, double const psi)
    OEGeom3DEulerToRotMatrix(double * RMat, double const * angles)
    """
    return _oechem.OEGeom3DEulerToRotMatrix(*args)

def OEGeomQuaternionMultiply(Product: "double *", qLhs: "double const *", qRhs: "double const *") -> "void":
    r"""OEGeomQuaternionMultiply(double * Product, double const * qLhs, double const * qRhs)"""
    return _oechem.OEGeomQuaternionMultiply(Product, qLhs, qRhs)

def OEGeomNormalizeQuaternion(quaternion: "double *") -> "void":
    r"""OEGeomNormalizeQuaternion(double * quaternion)"""
    return _oechem.OEGeomNormalizeQuaternion(quaternion)

def OEGeom3DMakeQuaternion(quat: "double *", vec: "double const *", angle: "double const") -> "void":
    r"""OEGeom3DMakeQuaternion(double * quat, double const * vec, double const angle)"""
    return _oechem.OEGeom3DMakeQuaternion(quat, vec, angle)

def OEGeom3DQuaternionInvert(iquat: "double *", quat: "double const *") -> "void":
    r"""OEGeom3DQuaternionInvert(double * iquat, double const * quat)"""
    return _oechem.OEGeom3DQuaternionInvert(iquat, quat)

def OEGeom3DQuaternionToRotMatrix(RMat: "double *", quat: "double const *") -> "void":
    r"""OEGeom3DQuaternionToRotMatrix(double * RMat, double const * quat)"""
    return _oechem.OEGeom3DQuaternionToRotMatrix(RMat, quat)

def OEGeom3DEulerToQuaternion(quat: "double *", angles: "double const *") -> "void":
    r"""OEGeom3DEulerToQuaternion(double * quat, double const * angles)"""
    return _oechem.OEGeom3DEulerToQuaternion(quat, angles)

def OEGeom3DMatrixIdentity(rmat: "double *") -> "void":
    r"""OEGeom3DMatrixIdentity(double * rmat)"""
    return _oechem.OEGeom3DMatrixIdentity(rmat)

def OEGeom3DMatrixMultiply(*args) -> "void":
    r"""
    OEGeom3DMatrixMultiply(double * accumulator, double const * add)
    OEGeom3DMatrixMultiply(double * Product, double const * init, double const * add)
    """
    return _oechem.OEGeom3DMatrixMultiply(*args)

def OEGeom3DMatrixInvert(mi: "double *", m: "double const *") -> "bool":
    r"""OEGeom3DMatrixInvert(double * mi, double const * m) -> bool"""
    return _oechem.OEGeom3DMatrixInvert(mi, m)

def OEGeom3DMatrixTranspose(mat: "double *") -> "void":
    r"""OEGeom3DMatrixTranspose(double * mat)"""
    return _oechem.OEGeom3DMatrixTranspose(mat)

def OEGeom3DQuaternionIdentity(quat: "double *") -> "void":
    r"""OEGeom3DQuaternionIdentity(double * quat)"""
    return _oechem.OEGeom3DQuaternionIdentity(quat)

def OEGeom3DQuaternionRotate(*args) -> "void":
    r"""
    OEGeom3DQuaternionRotate(float * xyz, double const * quat, unsigned int ncoord)
    OEGeom3DQuaternionRotate(float * xyz, double const * quat, unsigned int * idx, unsigned int ncoord)
    OEGeom3DQuaternionRotate(double * xyz, double const * quat, unsigned int ncoord)
    OEGeom3DQuaternionRotate(double * xyz, double const * quat, unsigned int * idx, unsigned int ncoord)
    """
    return _oechem.OEGeom3DQuaternionRotate(*args)

def OEGeom3DUnitQuaternionRotate(*args) -> "void":
    r"""
    OEGeom3DUnitQuaternionRotate(float * xyz, double const * quat, unsigned int ncoord)
    OEGeom3DUnitQuaternionRotate(float * xyz, double const * quat, unsigned int * idx, unsigned int ncoord)
    OEGeom3DUnitQuaternionRotate(double * xyz, double const * quat, unsigned int ncoord)
    OEGeom3DUnitQuaternionRotate(double * xyz, double const * quat, unsigned int * idx, unsigned int ncoord)
    """
    return _oechem.OEGeom3DUnitQuaternionRotate(*args)

def OEGeomDotProd(*args) -> "double":
    r"""
    OEGeomDotProd(float const * p, float const * q, unsigned int arg3) -> double
    OEGeomDotProd(double const * p, double const * q, unsigned int arg3) -> double
    """
    return _oechem.OEGeomDotProd(*args)

def OEGeom3DGetCenterAndExtents(*args) -> "void":
    r"""
    OEGeom3DGetCenterAndExtents(float const * xyz, unsigned int ncoord, float * center, float * extents)
    OEGeom3DGetCenterAndExtents(double const * xyz, unsigned int ncoord, double * center, double * extents)
    """
    return _oechem.OEGeom3DGetCenterAndExtents(*args)

def OEGeom3DGetCenterOfMass(*args) -> "void":
    r"""
    OEGeom3DGetCenterOfMass(float const * xyz, unsigned int ncoord, float * com, float * weights)
    OEGeom3DGetCenterOfMass(double const * xyz, unsigned int ncoord, double * com, double * weights)
    OEGeom3DGetCenterOfMass(float const * xyz, unsigned int ncoord, float * com)
    OEGeom3DGetCenterOfMass(double const * xyz, unsigned int ncoord, double * com)
    """
    return _oechem.OEGeom3DGetCenterOfMass(*args)


def IsPythonCommandlineInterpreter():
    import sys
    if sys.flags.interactive:
        return True

    import os
    if "PYTHONINSPECT" in os.environ:
        return True

    import __main__
    if (not hasattr(__main__, "__file__") and
        sys.argv and sys.argv[0] != "-c"):
        return True

    return False

def TextModeStdin():
    import os
    import msvcrt
    STDIN_FILENO = 0
    msvcrt.setmode(STDIN_FILENO, os.O_TEXT)

import sys
if sys.platform.startswith("win"):
    if IsPythonCommandlineInterpreter():
        TextModeStdin()

del sys

class OESimilarByRMSD(OEBinaryConfPred):
    r"""Proxy of C++ OEChem::OESimilarByRMSD 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__(OESimilarByRMSD self, double const argRmsd) -> OESimilarByRMSD
        __init__(OESimilarByRMSD self, OESimilarByRMSD argPredicate) -> OESimilarByRMSD
        """
        _oechem.OESimilarByRMSD_swiginit(self, _oechem.new_OESimilarByRMSD(*args))
    __swig_destroy__ = _oechem.delete_OESimilarByRMSD

    def __call__(self, argConf1: "OEConfBase", argConf2: "OEConfBase") -> "bool":
        r"""__call__(OESimilarByRMSD self, OEConfBase argConf1, OEConfBase argConf2) -> bool"""
        return _oechem.OESimilarByRMSD___call__(self, argConf1, argConf2)

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



# Register OESimilarByRMSD in _oechem:
_oechem.OESimilarByRMSD_swigregister(OESimilarByRMSD)
FzFalse = cvar.FzFalse
FzTrue = cvar.FzTrue
FzMaybe = cvar.FzMaybe

class OEMolPropertyFxn(object):
    r"""Proxy of C++ OEChem::OEMolPropertyFxn class."""

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

    def Has(self, *args) -> "bool":
        r"""
        Has(OEMolPropertyFxn self, OEMolBase mol) -> bool
        Has(OEMolPropertyFxn self, OEMCMolBase mol) -> bool
        """
        return _oechem.OEMolPropertyFxn_Has(self, *args)

    def Get(self, *args) -> "double":
        r"""
        Get(OEMolPropertyFxn self, OEMolBase mol) -> double
        Get(OEMolPropertyFxn self, OEMCMolBase mol) -> double
        """
        return _oechem.OEMolPropertyFxn_Get(self, *args)

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


    __swig_destroy__ = _oechem.delete_OEMolPropertyFxn

    def __init__(self, *args):
        r"""
        __init__(OEMolPropertyFxn self) -> OEMolPropertyFxn
        __init__(OEMolPropertyFxn self, OEMolPropertyFxn arg2) -> OEMolPropertyFxn
        """
        if self.__class__ == OEMolPropertyFxn:
            _self = None
        else:
            _self = self
        _oechem.OEMolPropertyFxn_swiginit(self, _oechem.new_OEMolPropertyFxn(_self, *args))
    def __disown__(self):
        self.this.disown()
        _oechem.disown_OEMolPropertyFxn(self)
        return weakref.proxy(self)

# Register OEMolPropertyFxn in _oechem:
_oechem.OEMolPropertyFxn_swigregister(OEMolPropertyFxn)

class OEMolSDPropertyFxn(OEMolPropertyFxn):
    r"""Proxy of C++ OEChem::OEMolSDPropertyFxn 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__(OEMolSDPropertyFxn self, std::string const & tag) -> OEMolSDPropertyFxn
        __init__(OEMolSDPropertyFxn self, OEMolSDPropertyFxn arg2) -> OEMolSDPropertyFxn
        """
        _oechem.OEMolSDPropertyFxn_swiginit(self, _oechem.new_OEMolSDPropertyFxn(*args))
    __swig_destroy__ = _oechem.delete_OEMolSDPropertyFxn

    def Has(self, *args) -> "bool":
        r"""
        Has(OEMolSDPropertyFxn self, OEMolBase mol) -> bool
        Has(OEMolSDPropertyFxn self, OEMCMolBase mol) -> bool
        """
        return _oechem.OEMolSDPropertyFxn_Has(self, *args)

    def Get(self, *args) -> "double":
        r"""
        Get(OEMolSDPropertyFxn self, OEMolBase mol) -> double
        Get(OEMolSDPropertyFxn self, OEMCMolBase mol) -> double
        """
        return _oechem.OEMolSDPropertyFxn_Get(self, *args)

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



# Register OEMolSDPropertyFxn in _oechem:
_oechem.OEMolSDPropertyFxn_swigregister(OEMolSDPropertyFxn)

class OEMolGDPropertyFxn(OEMolPropertyFxn):
    r"""Proxy of C++ OEChem::OEMolGDPropertyFxn 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__(OEMolGDPropertyFxn self, std::string const & tag) -> OEMolGDPropertyFxn
        __init__(OEMolGDPropertyFxn self, OEMolGDPropertyFxn arg2) -> OEMolGDPropertyFxn
        """
        _oechem.OEMolGDPropertyFxn_swiginit(self, _oechem.new_OEMolGDPropertyFxn(*args))
    __swig_destroy__ = _oechem.delete_OEMolGDPropertyFxn

    def Has(self, *args) -> "bool":
        r"""
        Has(OEMolGDPropertyFxn self, OEMolBase mol) -> bool
        Has(OEMolGDPropertyFxn self, OEMCMolBase mol) -> bool
        """
        return _oechem.OEMolGDPropertyFxn_Has(self, *args)

    def Get(self, *args) -> "double":
        r"""
        Get(OEMolGDPropertyFxn self, OEMolBase mol) -> double
        Get(OEMolGDPropertyFxn self, OEMCMolBase mol) -> double
        """
        return _oechem.OEMolGDPropertyFxn_Get(self, *args)

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



# Register OEMolGDPropertyFxn in _oechem:
_oechem.OEMolGDPropertyFxn_swigregister(OEMolGDPropertyFxn)

class OEMolTaggedPropertyFxn(OEMolPropertyFxn):
    r"""Proxy of C++ OEChem::OEMolTaggedPropertyFxn 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__(OEMolTaggedPropertyFxn self, std::string const & tag) -> OEMolTaggedPropertyFxn
        __init__(OEMolTaggedPropertyFxn self, OEMolTaggedPropertyFxn arg2) -> OEMolTaggedPropertyFxn
        """
        _oechem.OEMolTaggedPropertyFxn_swiginit(self, _oechem.new_OEMolTaggedPropertyFxn(*args))
    __swig_destroy__ = _oechem.delete_OEMolTaggedPropertyFxn

    def Has(self, *args) -> "bool":
        r"""
        Has(OEMolTaggedPropertyFxn self, OEMolBase mol) -> bool
        Has(OEMolTaggedPropertyFxn self, OEMCMolBase mol) -> bool
        """
        return _oechem.OEMolTaggedPropertyFxn_Has(self, *args)

    def Get(self, *args) -> "double":
        r"""
        Get(OEMolTaggedPropertyFxn self, OEMolBase mol) -> double
        Get(OEMolTaggedPropertyFxn self, OEMCMolBase mol) -> double
        """
        return _oechem.OEMolTaggedPropertyFxn_Get(self, *args)

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



# Register OEMolTaggedPropertyFxn in _oechem:
_oechem.OEMolTaggedPropertyFxn_swigregister(OEMolTaggedPropertyFxn)

class OEMolPropertyList(object):
    r"""Proxy of C++ OEChem::OEMolPropertyList 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__(OEMolPropertyList self) -> OEMolPropertyList
        __init__(OEMolPropertyList self, OEMolPropertyList arg2) -> OEMolPropertyList
        """
        _oechem.OEMolPropertyList_swiginit(self, _oechem.new_OEMolPropertyList(*args))
    __swig_destroy__ = _oechem.delete_OEMolPropertyList

    def HasProperties(self, *args) -> "bool":
        r"""
        HasProperties(OEMolPropertyList self, OEMolBase arg2) -> bool
        HasProperties(OEMolPropertyList self, OEMCMolBase arg2) -> bool
        """
        return _oechem.OEMolPropertyList_HasProperties(self, *args)

    def GetSize(self) -> "size_t":
        r"""GetSize(OEMolPropertyList self) -> size_t"""
        return _oechem.OEMolPropertyList_GetSize(self)

    def GetProperty(self, *args) -> "double":
        r"""
        GetProperty(OEMolPropertyList self, OEMolBase arg2, size_t index) -> double
        GetProperty(OEMolPropertyList self, OEMCMolBase arg2, size_t index) -> double
        """
        return _oechem.OEMolPropertyList_GetProperty(self, *args)

    def CreateCopy(self) -> "OEChem::OEMolPropertyList *":
        r"""CreateCopy(OEMolPropertyList self) -> OEMolPropertyList"""
        return _oechem.OEMolPropertyList_CreateCopy(self)

    def Add(self, arg2: "OEMolPropertyFxn") -> "void":
        r"""Add(OEMolPropertyList self, OEMolPropertyFxn arg2)"""
        return _oechem.OEMolPropertyList_Add(self, arg2)

    def Clear(self) -> "void":
        r"""Clear(OEMolPropertyList self)"""
        return _oechem.OEMolPropertyList_Clear(self)

# Register OEMolPropertyList in _oechem:
_oechem.OEMolPropertyList_swigregister(OEMolPropertyList)

class UAtomPredParameterPointer(OEParameter):
    r"""Proxy of C++ OESystem::OEPointerParameter< OESystem::OEUnaryPredicate< OEChem::OEAtomBase > > 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__ = _oechem.delete_UAtomPredParameterPointer

    def TypedParameterTypeID(self) -> "void const *":
        r"""TypedParameterTypeID(UAtomPredParameterPointer self) -> void const *"""
        return _oechem.UAtomPredParameterPointer_TypedParameterTypeID(self)

    def ClassID(self) -> "std::string":
        r"""ClassID(UAtomPredParameterPointer self) -> std::string"""
        return _oechem.UAtomPredParameterPointer_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(UAtomPredParameterPointer self) -> void const *"""
        return _oechem.UAtomPredParameterPointer_FactoryTypeID(self)

    def AddLegalValue(self, arg2: "std::string const &") -> "bool":
        r"""AddLegalValue(UAtomPredParameterPointer self, std::string const & arg2) -> bool"""
        return _oechem.UAtomPredParameterPointer_AddLegalValue(self, arg2)

    def AddIllegalValue(self, arg2: "std::string const &") -> "bool":
        r"""AddIllegalValue(UAtomPredParameterPointer self, std::string const & arg2) -> bool"""
        return _oechem.UAtomPredParameterPointer_AddIllegalValue(self, arg2)

    def AddLegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddLegalRange(UAtomPredParameterPointer self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oechem.UAtomPredParameterPointer_AddLegalRange(self, arg2, arg3)

    def AddIllegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddIllegalRange(UAtomPredParameterPointer self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oechem.UAtomPredParameterPointer_AddIllegalRange(self, arg2, arg3)

    def WriteValueAndDefaultBinary(self, arg2: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(UAtomPredParameterPointer self, unsigned char * arg2) -> size_t"""
        return _oechem.UAtomPredParameterPointer_WriteValueAndDefaultBinary(self, arg2)

    def ReadValueAndDefaultBinary(self, arg2: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(UAtomPredParameterPointer self, unsigned char const * arg2) -> size_t"""
        return _oechem.UAtomPredParameterPointer_ReadValueAndDefaultBinary(self, arg2)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(UAtomPredParameterPointer self) -> size_t"""
        return _oechem.UAtomPredParameterPointer_ValueAndDefaultBinarySize(self)

    def LoadDefault(self) -> "bool":
        r"""LoadDefault(UAtomPredParameterPointer self) -> bool"""
        return _oechem.UAtomPredParameterPointer_LoadDefault(self)

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(UAtomPredParameterPointer self, unsigned int const idx=0) -> bool"""
        return _oechem.UAtomPredParameterPointer_GetHasValue(self, idx)

    def GetHasDefault(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasDefault(UAtomPredParameterPointer self, unsigned int const idx=0) -> bool"""
        return _oechem.UAtomPredParameterPointer_GetHasDefault(self, idx)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(UAtomPredParameterPointer self) -> OEParameter"""
        return _oechem.UAtomPredParameterPointer_CreateCopy(self)

# Register UAtomPredParameterPointer in _oechem:
_oechem.UAtomPredParameterPointer_swigregister(UAtomPredParameterPointer)

class UBondPredParameterPointer(OEParameter):
    r"""Proxy of C++ OESystem::OEPointerParameter< OESystem::OEUnaryPredicate< OEChem::OEBondBase > > 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__ = _oechem.delete_UBondPredParameterPointer

    def TypedParameterTypeID(self) -> "void const *":
        r"""TypedParameterTypeID(UBondPredParameterPointer self) -> void const *"""
        return _oechem.UBondPredParameterPointer_TypedParameterTypeID(self)

    def ClassID(self) -> "std::string":
        r"""ClassID(UBondPredParameterPointer self) -> std::string"""
        return _oechem.UBondPredParameterPointer_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(UBondPredParameterPointer self) -> void const *"""
        return _oechem.UBondPredParameterPointer_FactoryTypeID(self)

    def AddLegalValue(self, arg2: "std::string const &") -> "bool":
        r"""AddLegalValue(UBondPredParameterPointer self, std::string const & arg2) -> bool"""
        return _oechem.UBondPredParameterPointer_AddLegalValue(self, arg2)

    def AddIllegalValue(self, arg2: "std::string const &") -> "bool":
        r"""AddIllegalValue(UBondPredParameterPointer self, std::string const & arg2) -> bool"""
        return _oechem.UBondPredParameterPointer_AddIllegalValue(self, arg2)

    def AddLegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddLegalRange(UBondPredParameterPointer self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oechem.UBondPredParameterPointer_AddLegalRange(self, arg2, arg3)

    def AddIllegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddIllegalRange(UBondPredParameterPointer self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oechem.UBondPredParameterPointer_AddIllegalRange(self, arg2, arg3)

    def WriteValueAndDefaultBinary(self, arg2: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(UBondPredParameterPointer self, unsigned char * arg2) -> size_t"""
        return _oechem.UBondPredParameterPointer_WriteValueAndDefaultBinary(self, arg2)

    def ReadValueAndDefaultBinary(self, arg2: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(UBondPredParameterPointer self, unsigned char const * arg2) -> size_t"""
        return _oechem.UBondPredParameterPointer_ReadValueAndDefaultBinary(self, arg2)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(UBondPredParameterPointer self) -> size_t"""
        return _oechem.UBondPredParameterPointer_ValueAndDefaultBinarySize(self)

    def LoadDefault(self) -> "bool":
        r"""LoadDefault(UBondPredParameterPointer self) -> bool"""
        return _oechem.UBondPredParameterPointer_LoadDefault(self)

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(UBondPredParameterPointer self, unsigned int const idx=0) -> bool"""
        return _oechem.UBondPredParameterPointer_GetHasValue(self, idx)

    def GetHasDefault(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasDefault(UBondPredParameterPointer self, unsigned int const idx=0) -> bool"""
        return _oechem.UBondPredParameterPointer_GetHasDefault(self, idx)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(UBondPredParameterPointer self) -> OEParameter"""
        return _oechem.UBondPredParameterPointer_CreateCopy(self)

# Register UBondPredParameterPointer in _oechem:
_oechem.UBondPredParameterPointer_swigregister(UBondPredParameterPointer)

class SSParameterTyped(OEParameter):
    r"""Proxy of C++ OESystem::OETypedParameter< OEChem::OESubSearch > 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__ = _oechem.delete_SSParameterTyped

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(SSParameterTyped self, unsigned int const idx=0) -> bool"""
        return _oechem.SSParameterTyped_GetHasValue(self, idx)

    def GetHasDefault(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasDefault(SSParameterTyped self, unsigned int const idx=0) -> bool"""
        return _oechem.SSParameterTyped_GetHasDefault(self, idx)

    def GetValue(self, value: "OESubSearch", idx: "unsigned int const"=0) -> "bool":
        r"""GetValue(SSParameterTyped self, OESubSearch value, unsigned int const idx=0) -> bool"""
        return _oechem.SSParameterTyped_GetValue(self, value, idx)

    def GetDefault(self, dflt: "OESubSearch", idx: "unsigned int const"=0) -> "bool":
        r"""GetDefault(SSParameterTyped self, OESubSearch dflt, unsigned int const idx=0) -> bool"""
        return _oechem.SSParameterTyped_GetDefault(self, dflt, idx)

    def GetSetting(self, setting: "OESubSearch", idx: "unsigned int const"=0) -> "bool":
        r"""GetSetting(SSParameterTyped self, OESubSearch setting, unsigned int const idx=0) -> bool"""
        return _oechem.SSParameterTyped_GetSetting(self, setting, idx)

    def ClearValues(self) -> "bool":
        r"""ClearValues(SSParameterTyped self) -> bool"""
        return _oechem.SSParameterTyped_ClearValues(self)

    def ClearDefaults(self) -> "bool":
        r"""ClearDefaults(SSParameterTyped self) -> bool"""
        return _oechem.SSParameterTyped_ClearDefaults(self)

    def LoadValue(self) -> "bool":
        r"""LoadValue(SSParameterTyped self) -> bool"""
        return _oechem.SSParameterTyped_LoadValue(self)

    def LoadDefault(self) -> "bool":
        r"""LoadDefault(SSParameterTyped self) -> bool"""
        return _oechem.SSParameterTyped_LoadDefault(self)

    def AddValue(self, value: "OESubSearch") -> "bool":
        r"""AddValue(SSParameterTyped self, OESubSearch value) -> bool"""
        return _oechem.SSParameterTyped_AddValue(self, value)

    def AddDefault(self, dflt: "OESubSearch") -> "bool":
        r"""AddDefault(SSParameterTyped self, OESubSearch dflt) -> bool"""
        return _oechem.SSParameterTyped_AddDefault(self, dflt)

    def SetValue(self, value: "OESubSearch") -> "bool":
        r"""SetValue(SSParameterTyped self, OESubSearch value) -> bool"""
        return _oechem.SSParameterTyped_SetValue(self, value)

    def SetDefault(self, dflt: "OESubSearch") -> "bool":
        r"""SetDefault(SSParameterTyped self, OESubSearch dflt) -> bool"""
        return _oechem.SSParameterTyped_SetDefault(self, dflt)

    def TypedParameterTypeID(self) -> "void const *":
        r"""TypedParameterTypeID(SSParameterTyped self) -> void const *"""
        return _oechem.SSParameterTyped_TypedParameterTypeID(self)

# Register SSParameterTyped in _oechem:
_oechem.SSParameterTyped_swigregister(SSParameterTyped)

class SSParameterNonCl(SSParameterTyped):
    r"""Proxy of C++ OESystem::OENonClParameter< OEChem::OESubSearch > 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__ = _oechem.delete_SSParameterNonCl

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(SSParameterNonCl self) -> OEParameter"""
        return _oechem.SSParameterNonCl_CreateCopy(self)

# Register SSParameterNonCl in _oechem:
_oechem.SSParameterNonCl_swigregister(SSParameterNonCl)

class MolParameterPointer(OEParameter):
    r"""Proxy of C++ OESystem::OEPointerParameter< OEChem::OEMolBase > 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__ = _oechem.delete_MolParameterPointer

    def TypedParameterTypeID(self) -> "void const *":
        r"""TypedParameterTypeID(MolParameterPointer self) -> void const *"""
        return _oechem.MolParameterPointer_TypedParameterTypeID(self)

    def ClassID(self) -> "std::string":
        r"""ClassID(MolParameterPointer self) -> std::string"""
        return _oechem.MolParameterPointer_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(MolParameterPointer self) -> void const *"""
        return _oechem.MolParameterPointer_FactoryTypeID(self)

    def AddLegalValue(self, arg2: "std::string const &") -> "bool":
        r"""AddLegalValue(MolParameterPointer self, std::string const & arg2) -> bool"""
        return _oechem.MolParameterPointer_AddLegalValue(self, arg2)

    def AddIllegalValue(self, arg2: "std::string const &") -> "bool":
        r"""AddIllegalValue(MolParameterPointer self, std::string const & arg2) -> bool"""
        return _oechem.MolParameterPointer_AddIllegalValue(self, arg2)

    def AddLegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddLegalRange(MolParameterPointer self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oechem.MolParameterPointer_AddLegalRange(self, arg2, arg3)

    def AddIllegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddIllegalRange(MolParameterPointer self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oechem.MolParameterPointer_AddIllegalRange(self, arg2, arg3)

    def WriteValueAndDefaultBinary(self, arg2: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(MolParameterPointer self, unsigned char * arg2) -> size_t"""
        return _oechem.MolParameterPointer_WriteValueAndDefaultBinary(self, arg2)

    def ReadValueAndDefaultBinary(self, arg2: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(MolParameterPointer self, unsigned char const * arg2) -> size_t"""
        return _oechem.MolParameterPointer_ReadValueAndDefaultBinary(self, arg2)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(MolParameterPointer self) -> size_t"""
        return _oechem.MolParameterPointer_ValueAndDefaultBinarySize(self)

    def LoadDefault(self) -> "bool":
        r"""LoadDefault(MolParameterPointer self) -> bool"""
        return _oechem.MolParameterPointer_LoadDefault(self)

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(MolParameterPointer self, unsigned int const idx=0) -> bool"""
        return _oechem.MolParameterPointer_GetHasValue(self, idx)

    def GetHasDefault(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasDefault(MolParameterPointer self, unsigned int const idx=0) -> bool"""
        return _oechem.MolParameterPointer_GetHasDefault(self, idx)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(MolParameterPointer self) -> OEParameter"""
        return _oechem.MolParameterPointer_CreateCopy(self)

# Register MolParameterPointer in _oechem:
_oechem.MolParameterPointer_swigregister(MolParameterPointer)

class UAtomPredParameterPred(UAtomPredParameterPointer):
    r"""Proxy of C++ OEChem::OEPredicateParameter< OESystem::OEUnaryPredicate< OEChem::OEAtomBase > > 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__ = _oechem.delete_UAtomPredParameterPred

    def WriteValueAndDefaultBinary(self, arg2: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(UAtomPredParameterPred self, unsigned char * arg2) -> size_t"""
        return _oechem.UAtomPredParameterPred_WriteValueAndDefaultBinary(self, arg2)

    def ReadValueAndDefaultBinary(self, arg2: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(UAtomPredParameterPred self, unsigned char const * arg2) -> size_t"""
        return _oechem.UAtomPredParameterPred_ReadValueAndDefaultBinary(self, arg2)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(UAtomPredParameterPred self) -> size_t"""
        return _oechem.UAtomPredParameterPred_ValueAndDefaultBinarySize(self)

    def LoadValue(self) -> "bool":
        r"""LoadValue(UAtomPredParameterPred self) -> bool"""
        return _oechem.UAtomPredParameterPred_LoadValue(self)

    def SetDefault(self, value: "OEUnaryAtomPred") -> "bool":
        r"""SetDefault(UAtomPredParameterPred self, OEUnaryAtomPred value) -> bool"""
        return _oechem.UAtomPredParameterPred_SetDefault(self, value)

    def GetDefault(self) -> "OESystem::OEUnaryPredicate< OEChem::OEAtomBase > *":
        r"""GetDefault(UAtomPredParameterPred self) -> OEUnaryAtomPred"""
        return _oechem.UAtomPredParameterPred_GetDefault(self)

    def SetValue(self, value: "OEUnaryAtomPred") -> "bool":
        r"""SetValue(UAtomPredParameterPred self, OEUnaryAtomPred value) -> bool"""
        return _oechem.UAtomPredParameterPred_SetValue(self, value)

    def GetValue(self) -> "OESystem::OEUnaryPredicate< OEChem::OEAtomBase > *":
        r"""GetValue(UAtomPredParameterPred self) -> OEUnaryAtomPred"""
        return _oechem.UAtomPredParameterPred_GetValue(self)

    def GetSetting(self) -> "OESystem::OEUnaryPredicate< OEChem::OEAtomBase > *":
        r"""GetSetting(UAtomPredParameterPred self) -> OEUnaryAtomPred"""
        return _oechem.UAtomPredParameterPred_GetSetting(self)

    def IsValidString(self, arg2: "std::string const &") -> "bool":
        r"""IsValidString(UAtomPredParameterPred self, std::string const & arg2) -> bool"""
        return _oechem.UAtomPredParameterPred_IsValidString(self, arg2)

# Register UAtomPredParameterPred in _oechem:
_oechem.UAtomPredParameterPred_swigregister(UAtomPredParameterPred)

class UBondPredParameterPred(UBondPredParameterPointer):
    r"""Proxy of C++ OEChem::OEPredicateParameter< OESystem::OEUnaryPredicate< OEChem::OEBondBase > > 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__ = _oechem.delete_UBondPredParameterPred

    def WriteValueAndDefaultBinary(self, arg2: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(UBondPredParameterPred self, unsigned char * arg2) -> size_t"""
        return _oechem.UBondPredParameterPred_WriteValueAndDefaultBinary(self, arg2)

    def ReadValueAndDefaultBinary(self, arg2: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(UBondPredParameterPred self, unsigned char const * arg2) -> size_t"""
        return _oechem.UBondPredParameterPred_ReadValueAndDefaultBinary(self, arg2)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(UBondPredParameterPred self) -> size_t"""
        return _oechem.UBondPredParameterPred_ValueAndDefaultBinarySize(self)

    def LoadValue(self) -> "bool":
        r"""LoadValue(UBondPredParameterPred self) -> bool"""
        return _oechem.UBondPredParameterPred_LoadValue(self)

    def SetDefault(self, value: "OEUnaryBondPred") -> "bool":
        r"""SetDefault(UBondPredParameterPred self, OEUnaryBondPred value) -> bool"""
        return _oechem.UBondPredParameterPred_SetDefault(self, value)

    def GetDefault(self) -> "OESystem::OEUnaryPredicate< OEChem::OEBondBase > *":
        r"""GetDefault(UBondPredParameterPred self) -> OEUnaryBondPred"""
        return _oechem.UBondPredParameterPred_GetDefault(self)

    def SetValue(self, value: "OEUnaryBondPred") -> "bool":
        r"""SetValue(UBondPredParameterPred self, OEUnaryBondPred value) -> bool"""
        return _oechem.UBondPredParameterPred_SetValue(self, value)

    def GetValue(self) -> "OESystem::OEUnaryPredicate< OEChem::OEBondBase > *":
        r"""GetValue(UBondPredParameterPred self) -> OEUnaryBondPred"""
        return _oechem.UBondPredParameterPred_GetValue(self)

    def GetSetting(self) -> "OESystem::OEUnaryPredicate< OEChem::OEBondBase > *":
        r"""GetSetting(UBondPredParameterPred self) -> OEUnaryBondPred"""
        return _oechem.UBondPredParameterPred_GetSetting(self)

    def IsValidString(self, arg2: "std::string const &") -> "bool":
        r"""IsValidString(UBondPredParameterPred self, std::string const & arg2) -> bool"""
        return _oechem.UBondPredParameterPred_IsValidString(self, arg2)

# Register UBondPredParameterPred in _oechem:
_oechem.UBondPredParameterPred_swigregister(UBondPredParameterPred)

class MCSParameter(MCSPointerParameter):
    r"""Proxy of C++ OESystem::OEMultiParameter< OEChem::OEMCSFunc > 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__ = _oechem.delete_MCSParameter

    def WriteValueAndDefaultBinary(self, arg2: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(MCSParameter self, unsigned char * arg2) -> size_t"""
        return _oechem.MCSParameter_WriteValueAndDefaultBinary(self, arg2)

    def ReadValueAndDefaultBinary(self, arg2: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(MCSParameter self, unsigned char const * arg2) -> size_t"""
        return _oechem.MCSParameter_ReadValueAndDefaultBinary(self, arg2)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(MCSParameter self) -> size_t"""
        return _oechem.MCSParameter_ValueAndDefaultBinarySize(self)

    def AddLegalEntry(self, idxKey: "unsigned int const", strKey: "std::string const &", lib: "OEMCSFunc") -> "bool":
        r"""AddLegalEntry(MCSParameter self, unsigned int const idxKey, std::string const & strKey, OEMCSFunc lib) -> bool"""
        return _oechem.MCSParameter_AddLegalEntry(self, idxKey, strKey, lib)

    def LoadValue(self) -> "bool":
        r"""LoadValue(MCSParameter self) -> bool"""
        return _oechem.MCSParameter_LoadValue(self)

    def SetValue(self, *args) -> "bool":
        r"""
        SetValue(MCSParameter self, unsigned int const type) -> bool
        SetValue(MCSParameter self, std::string const & name) -> bool
        SetValue(MCSParameter self, oeistream ifs) -> bool
        SetValue(MCSParameter self, OEMCSFunc value) -> bool
        """
        return _oechem.MCSParameter_SetValue(self, *args)

    def SetDefault(self, type: "unsigned int const") -> "bool":
        r"""SetDefault(MCSParameter self, unsigned int const type) -> bool"""
        return _oechem.MCSParameter_SetDefault(self, type)

    def GetUIntSetting(self) -> "unsigned int":
        r"""GetUIntSetting(MCSParameter self) -> unsigned int"""
        return _oechem.MCSParameter_GetUIntSetting(self)

    def IsValidString(self, arg2: "std::string const &") -> "bool":
        r"""IsValidString(MCSParameter self, std::string const & arg2) -> bool"""
        return _oechem.MCSParameter_IsValidString(self, arg2)

    def IsLegalString(self, arg2: "std::string const &") -> "bool":
        r"""IsLegalString(MCSParameter self, std::string const & arg2) -> bool"""
        return _oechem.MCSParameter_IsLegalString(self, arg2)

# Register MCSParameter in _oechem:
_oechem.MCSParameter_swigregister(MCSParameter)

class OEMolReaderParameter(OEStringParameter):
    r"""Proxy of C++ OEChem::OEMolReaderParameter 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__(OEMolReaderParameter self, std::string const & name, bool const is3D=False) -> OEMolReaderParameter
        __init__(OEMolReaderParameter self) -> OEMolReaderParameter
        __init__(OEMolReaderParameter self, OEMolReaderParameter arg2) -> OEMolReaderParameter
        """
        _oechem.OEMolReaderParameter_swiginit(self, _oechem.new_OEMolReaderParameter(*args))
    __swig_destroy__ = _oechem.delete_OEMolReaderParameter

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEMolReaderParameter self) -> OEParameter"""
        return _oechem.OEMolReaderParameter_CreateCopy(self)

# Register OEMolReaderParameter in _oechem:
_oechem.OEMolReaderParameter_swigregister(OEMolReaderParameter)

class OEMolWriterParameter(OEStringParameter):
    r"""Proxy of C++ OEChem::OEMolWriterParameter 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__(OEMolWriterParameter self, std::string const & name, bool const is3D=False) -> OEMolWriterParameter
        __init__(OEMolWriterParameter self) -> OEMolWriterParameter
        __init__(OEMolWriterParameter self, OEMolWriterParameter arg2) -> OEMolWriterParameter
        """
        _oechem.OEMolWriterParameter_swiginit(self, _oechem.new_OEMolWriterParameter(*args))
    __swig_destroy__ = _oechem.delete_OEMolWriterParameter

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEMolWriterParameter self) -> OEParameter"""
        return _oechem.OEMolWriterParameter_CreateCopy(self)

# Register OEMolWriterParameter in _oechem:
_oechem.OEMolWriterParameter_swigregister(OEMolWriterParameter)

class OESubSearchParameter(SSParameterNonCl):
    r"""Proxy of C++ OEChem::OESubSearchParameter 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__(OESubSearchParameter self, std::string const & name) -> OESubSearchParameter
        __init__(OESubSearchParameter self) -> OESubSearchParameter
        __init__(OESubSearchParameter self, OESubSearchParameter arg2) -> OESubSearchParameter
        """
        _oechem.OESubSearchParameter_swiginit(self, _oechem.new_OESubSearchParameter(*args))
    __swig_destroy__ = _oechem.delete_OESubSearchParameter

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OESubSearchParameter self) -> OEParameter"""
        return _oechem.OESubSearchParameter_CreateCopy(self)

# Register OESubSearchParameter in _oechem:
_oechem.OESubSearchParameter_swigregister(OESubSearchParameter)

class OEMCSFuncParameter(MCSParameter):
    r"""Proxy of C++ OEChem::OEMCSFuncParameter 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__(OEMCSFuncParameter self, std::string const & name) -> OEMCSFuncParameter
        __init__(OEMCSFuncParameter self, OEMCSFuncParameter arg2) -> OEMCSFuncParameter
        """
        _oechem.OEMCSFuncParameter_swiginit(self, _oechem.new_OEMCSFuncParameter(*args))
    __swig_destroy__ = _oechem.delete_OEMCSFuncParameter

    def SetValue(self, *args) -> "bool":
        r"""
        SetValue(OEMCSFuncParameter self, oeistream arg2) -> bool
        SetValue(OEMCSFuncParameter self, unsigned int const type) -> bool
        SetValue(OEMCSFuncParameter self, std::string const & name) -> bool
        SetValue(OEMCSFuncParameter self, OEMCSFunc value) -> bool
        """
        return _oechem.OEMCSFuncParameter_SetValue(self, *args)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEMCSFuncParameter self) -> OEParameter"""
        return _oechem.OEMCSFuncParameter_CreateCopy(self)

# Register OEMCSFuncParameter in _oechem:
_oechem.OEMCSFuncParameter_swigregister(OEMCSFuncParameter)

class OEMolParameter(MolParameterPointer):
    r"""Proxy of C++ OEChem::OEMolParameter 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__(OEMolParameter self, std::string const & name) -> OEMolParameter
        __init__(OEMolParameter self) -> OEMolParameter
        __init__(OEMolParameter self, OEMolParameter arg2) -> OEMolParameter
        """
        _oechem.OEMolParameter_swiginit(self, _oechem.new_OEMolParameter(*args))
    __swig_destroy__ = _oechem.delete_OEMolParameter

    def WriteValueAndDefaultBinary(self, ccc: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(OEMolParameter self, unsigned char * ccc) -> size_t"""
        return _oechem.OEMolParameter_WriteValueAndDefaultBinary(self, ccc)

    def ReadValueAndDefaultBinary(self, ccc: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(OEMolParameter self, unsigned char const * ccc) -> size_t"""
        return _oechem.OEMolParameter_ReadValueAndDefaultBinary(self, ccc)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(OEMolParameter self) -> size_t"""
        return _oechem.OEMolParameter_ValueAndDefaultBinarySize(self)

    def LoadValue(self) -> "bool":
        r"""LoadValue(OEMolParameter self) -> bool"""
        return _oechem.OEMolParameter_LoadValue(self)

    def SetValue(self, *args) -> "bool":
        r"""
        SetValue(OEMolParameter self, oemolistream fstream) -> bool
        SetValue(OEMolParameter self, OEMolBase mol) -> bool
        """
        return _oechem.OEMolParameter_SetValue(self, *args)

    def GetValue(self) -> "OEChem::OEMolBase const &":
        r"""GetValue(OEMolParameter self) -> OEMolBase"""
        return _oechem.OEMolParameter_GetValue(self)

    def GetSetting(self) -> "OEChem::OEMolBase const &":
        r"""GetSetting(OEMolParameter self) -> OEMolBase"""
        return _oechem.OEMolParameter_GetSetting(self)

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(OEMolParameter self, unsigned int const idx=0) -> bool"""
        return _oechem.OEMolParameter_GetHasValue(self, idx)

    def IsValidString(self, arg2: "std::string const &") -> "bool":
        r"""IsValidString(OEMolParameter self, std::string const & arg2) -> bool"""
        return _oechem.OEMolParameter_IsValidString(self, arg2)

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEMolParameter self) -> OEParameter"""
        return _oechem.OEMolParameter_CreateCopy(self)

# Register OEMolParameter in _oechem:
_oechem.OEMolParameter_swigregister(OEMolParameter)

class OEUnAtomPredParameter(UAtomPredParameterPred):
    r"""Proxy of C++ OEChem::OEUnAtomPredParameter 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__(OEUnAtomPredParameter self, std::string const & name) -> OEUnAtomPredParameter
        __init__(OEUnAtomPredParameter self) -> OEUnAtomPredParameter
        __init__(OEUnAtomPredParameter self, OEUnAtomPredParameter arg2) -> OEUnAtomPredParameter
        """
        _oechem.OEUnAtomPredParameter_swiginit(self, _oechem.new_OEUnAtomPredParameter(*args))
    __swig_destroy__ = _oechem.delete_OEUnAtomPredParameter

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEUnAtomPredParameter self) -> OEParameter"""
        return _oechem.OEUnAtomPredParameter_CreateCopy(self)

# Register OEUnAtomPredParameter in _oechem:
_oechem.OEUnAtomPredParameter_swigregister(OEUnAtomPredParameter)

class OEUnBondPredParameter(UBondPredParameterPred):
    r"""Proxy of C++ OEChem::OEUnBondPredParameter 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__(OEUnBondPredParameter self, std::string const & name) -> OEUnBondPredParameter
        __init__(OEUnBondPredParameter self) -> OEUnBondPredParameter
        __init__(OEUnBondPredParameter self, OEUnBondPredParameter arg2) -> OEUnBondPredParameter
        """
        _oechem.OEUnBondPredParameter_swiginit(self, _oechem.new_OEUnBondPredParameter(*args))
    __swig_destroy__ = _oechem.delete_OEUnBondPredParameter

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEUnBondPredParameter self) -> OEParameter"""
        return _oechem.OEUnBondPredParameter_CreateCopy(self)

# Register OEUnBondPredParameter in _oechem:
_oechem.OEUnBondPredParameter_swigregister(OEUnBondPredParameter)

class OEFileStringParameter(OEStringParameter):
    r"""Proxy of C++ OEChem::OEFileStringParameter 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__(OEFileStringParameter self, std::string const & name, unsigned int const fileType, unsigned int const fileTypeFlavor=0) -> OEFileStringParameter
        __init__(OEFileStringParameter self, std::string const & name, std::string const & fileExt) -> OEFileStringParameter
        __init__(OEFileStringParameter self) -> OEFileStringParameter
        __init__(OEFileStringParameter self, OEFileStringParameter arg2) -> OEFileStringParameter
        """
        _oechem.OEFileStringParameter_swiginit(self, _oechem.new_OEFileStringParameter(*args))
    __swig_destroy__ = _oechem.delete_OEFileStringParameter

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEFileStringParameter self) -> OEParameter"""
        return _oechem.OEFileStringParameter_CreateCopy(self)

    def GetPrettyLegalValues(self) -> "OESystem::OEIterBase< std::string const > *":
        r"""GetPrettyLegalValues(OEFileStringParameter self) -> OESystem::OEIterBase< std::string const > *"""
        return _oechem.OEFileStringParameter_GetPrettyLegalValues(self)

# Register OEFileStringParameter in _oechem:
_oechem.OEFileStringParameter_swigregister(OEFileStringParameter)

class OEOutFileStringParameter(OEFileStringParameter):
    r"""Proxy of C++ OEChem::OEOutFileStringParameter 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__(OEOutFileStringParameter self, std::string const & name, unsigned int const fileType, unsigned int const fileTypeFlavor=0) -> OEOutFileStringParameter
        __init__(OEOutFileStringParameter self, std::string const & name, std::string const & fileExt) -> OEOutFileStringParameter
        __init__(OEOutFileStringParameter self) -> OEOutFileStringParameter
        __init__(OEOutFileStringParameter self, OEOutFileStringParameter arg2) -> OEOutFileStringParameter
        """
        _oechem.OEOutFileStringParameter_swiginit(self, _oechem.new_OEOutFileStringParameter(*args))
    __swig_destroy__ = _oechem.delete_OEOutFileStringParameter

    def CreateCopy(self) -> "OESystem::OEParameter *":
        r"""CreateCopy(OEOutFileStringParameter self) -> OEParameter"""
        return _oechem.OEOutFileStringParameter_CreateCopy(self)

# Register OEOutFileStringParameter in _oechem:
_oechem.OEOutFileStringParameter_swigregister(OEOutFileStringParameter)

class OESimpleAppOptions(OEOptions):
    r"""Proxy of C++ OEChem::OESimpleAppOptions 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__(OESimpleAppOptions self, OEOptions opts, std::string const & name, unsigned int const inFileType, unsigned int const outFileType) -> OESimpleAppOptions
        __init__(OESimpleAppOptions self, OEOptions opts, std::string const & name, std::string const & inFileExt, unsigned int const outFileType) -> OESimpleAppOptions
        __init__(OESimpleAppOptions self, OEOptions opts, std::string const & name, unsigned int const inFileType, std::string const & outFileExt) -> OESimpleAppOptions
        __init__(OESimpleAppOptions self, OEOptions opts, std::string const & name, std::string const & inFileExt, std::string const & outFileExt) -> OESimpleAppOptions
        __init__(OESimpleAppOptions self, std::string const & name, unsigned int const inFileType, unsigned int const outFileType) -> OESimpleAppOptions
        __init__(OESimpleAppOptions self, std::string const & name, std::string const & inFileExt, unsigned int const outFileType) -> OESimpleAppOptions
        __init__(OESimpleAppOptions self, std::string const & name, unsigned int const inFileType, std::string const & outFileExt) -> OESimpleAppOptions
        __init__(OESimpleAppOptions self, std::string const & name, std::string const & inFileExt, std::string const & outFileExt) -> OESimpleAppOptions
        __init__(OESimpleAppOptions self, OESimpleAppOptions arg2) -> OESimpleAppOptions
        """
        _oechem.OESimpleAppOptions_swiginit(self, _oechem.new_OESimpleAppOptions(*args))
    __swig_destroy__ = _oechem.delete_OESimpleAppOptions

    def GetInFile(self) -> "std::string":
        r"""GetInFile(OESimpleAppOptions self) -> std::string"""
        return _oechem.OESimpleAppOptions_GetInFile(self)

    def SetInFile(self, value: "std::string const") -> "bool":
        r"""SetInFile(OESimpleAppOptions self, std::string const value) -> bool"""
        return _oechem.OESimpleAppOptions_SetInFile(self, value)

    def GetOutFile(self) -> "std::string":
        r"""GetOutFile(OESimpleAppOptions self) -> std::string"""
        return _oechem.OESimpleAppOptions_GetOutFile(self)

    def SetOutFile(self, value: "std::string const") -> "bool":
        r"""SetOutFile(OESimpleAppOptions self, std::string const value) -> bool"""
        return _oechem.OESimpleAppOptions_SetOutFile(self, value)

    def CreateCopy(self) -> "OEChem::OESimpleAppOptions *":
        r"""CreateCopy(OESimpleAppOptions self) -> OESimpleAppOptions"""
        return _oechem.OESimpleAppOptions_CreateCopy(self)

# Register OESimpleAppOptions in _oechem:
_oechem.OESimpleAppOptions_swigregister(OESimpleAppOptions)

class OERefInputAppOptions(OEOptions):
    r"""Proxy of C++ OEChem::OERefInputAppOptions 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__(OERefInputAppOptions self, OEOptions opts, std::string const & name, unsigned int const inFileType, unsigned int const outFileType, unsigned int const refFileType, std::string const & refCmdName) -> OERefInputAppOptions
        __init__(OERefInputAppOptions self, OEOptions opts, std::string const & name, unsigned int const inFileType, unsigned int const outFileType, std::string const & refFileExt, std::string const & refCmdName) -> OERefInputAppOptions
        __init__(OERefInputAppOptions self, OERefInputAppOptions arg2) -> OERefInputAppOptions
        """
        _oechem.OERefInputAppOptions_swiginit(self, _oechem.new_OERefInputAppOptions(*args))
    __swig_destroy__ = _oechem.delete_OERefInputAppOptions

    def GetInFile(self) -> "std::string":
        r"""GetInFile(OERefInputAppOptions self) -> std::string"""
        return _oechem.OERefInputAppOptions_GetInFile(self)

    def SetInFile(self, value: "std::string const") -> "bool":
        r"""SetInFile(OERefInputAppOptions self, std::string const value) -> bool"""
        return _oechem.OERefInputAppOptions_SetInFile(self, value)

    def GetRefFile(self) -> "std::string":
        r"""GetRefFile(OERefInputAppOptions self) -> std::string"""
        return _oechem.OERefInputAppOptions_GetRefFile(self)

    def SetRefFile(self, value: "std::string const") -> "bool":
        r"""SetRefFile(OERefInputAppOptions self, std::string const value) -> bool"""
        return _oechem.OERefInputAppOptions_SetRefFile(self, value)

    def GetOutFile(self) -> "std::string":
        r"""GetOutFile(OERefInputAppOptions self) -> std::string"""
        return _oechem.OERefInputAppOptions_GetOutFile(self)

    def SetOutFile(self, value: "std::string const") -> "bool":
        r"""SetOutFile(OERefInputAppOptions self, std::string const value) -> bool"""
        return _oechem.OERefInputAppOptions_SetOutFile(self, value)

    def CreateCopy(self) -> "OEChem::OERefInputAppOptions *":
        r"""CreateCopy(OERefInputAppOptions self) -> OERefInputAppOptions"""
        return _oechem.OERefInputAppOptions_CreateCopy(self)

# Register OERefInputAppOptions in _oechem:
_oechem.OERefInputAppOptions_swigregister(OERefInputAppOptions)


def OECheckAtomValences(mol: "OEMolBase") -> "bool":
    r"""OECheckAtomValences(OEMolBase mol) -> bool"""
    return _oechem.OECheckAtomValences(mol)

def OECheckAtomValence(atom: "OEAtomBase") -> "bool":
    r"""OECheckAtomValence(OEAtomBase atom) -> bool"""
    return _oechem.OECheckAtomValence(atom)
class OEIsValidAtomValence(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsValidAtomValence 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__(OEIsValidAtomValence self) -> OEIsValidAtomValence"""
        _oechem.OEIsValidAtomValence_swiginit(self, _oechem.new_OEIsValidAtomValence())
    __swig_destroy__ = _oechem.delete_OEIsValidAtomValence

# Register OEIsValidAtomValence in _oechem:
_oechem.OEIsValidAtomValence_swigregister(OEIsValidAtomValence)

class OEIsValidMDLAtomValence(OEUnaryAtomPred):
    r"""Proxy of C++ OEChem::OEIsValidMDLAtomValence 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__(OEIsValidMDLAtomValence self) -> OEIsValidMDLAtomValence"""
        _oechem.OEIsValidMDLAtomValence_swiginit(self, _oechem.new_OEIsValidMDLAtomValence())
    __swig_destroy__ = _oechem.delete_OEIsValidMDLAtomValence

# Register OEIsValidMDLAtomValence in _oechem:
_oechem.OEIsValidMDLAtomValence_swigregister(OEIsValidMDLAtomValence)


def OEGenerate2DCoordinates(mol: "OEMolBase") -> "bool":
    r"""OEGenerate2DCoordinates(OEMolBase mol) -> bool"""
    return _oechem.OEGenerate2DCoordinates(mol)
class OEExtractRingTemplateOptions(object):
    r"""Proxy of C++ OEChem::OEExtractRingTemplateOptions 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__(OEExtractRingTemplateOptions self) -> OEExtractRingTemplateOptions
        __init__(OEExtractRingTemplateOptions self, OEExtractRingTemplateOptions rhs) -> OEExtractRingTemplateOptions
        """
        _oechem.OEExtractRingTemplateOptions_swiginit(self, _oechem.new_OEExtractRingTemplateOptions(*args))
    __swig_destroy__ = _oechem.delete_OEExtractRingTemplateOptions

    def SetRetainBondStereo(self, arg2: "bool") -> "void":
        r"""SetRetainBondStereo(OEExtractRingTemplateOptions self, bool arg2)"""
        return _oechem.OEExtractRingTemplateOptions_SetRetainBondStereo(self, arg2)

    def GetRetainBondStereo(self) -> "bool":
        r"""GetRetainBondStereo(OEExtractRingTemplateOptions self) -> bool"""
        return _oechem.OEExtractRingTemplateOptions_GetRetainBondStereo(self)

    def SetRetainExistingTemplates(self, arg2: "bool") -> "void":
        r"""SetRetainExistingTemplates(OEExtractRingTemplateOptions self, bool arg2)"""
        return _oechem.OEExtractRingTemplateOptions_SetRetainExistingTemplates(self, arg2)

    def GetRetainExistingTemplates(self) -> "bool":
        r"""GetRetainExistingTemplates(OEExtractRingTemplateOptions self) -> bool"""
        return _oechem.OEExtractRingTemplateOptions_GetRetainExistingTemplates(self)

# Register OEExtractRingTemplateOptions in _oechem:
_oechem.OEExtractRingTemplateOptions_swigregister(OEExtractRingTemplateOptions)


def OEExtractRingTemplates(*args) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
    r"""
    OEExtractRingTemplates(OEMolBase mol) -> OESystem::OEIterBase< OEChem::OEMolBase >
    OEExtractRingTemplates(OEMolBase mol, OEExtractRingTemplateOptions opts) -> OESystem::OEIterBase< OEChem::OEMolBase > *
    """
    return _oechem.OEExtractRingTemplates(*args)
class OE2DRingDictionaryCreatorOptions(object):
    r"""Proxy of C++ OEChem::OE2DRingDictionaryCreatorOptions 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__(OE2DRingDictionaryCreatorOptions self) -> OE2DRingDictionaryCreatorOptions
        __init__(OE2DRingDictionaryCreatorOptions self, OE2DRingDictionaryCreatorOptions rhs) -> OE2DRingDictionaryCreatorOptions
        """
        _oechem.OE2DRingDictionaryCreatorOptions_swiginit(self, _oechem.new_OE2DRingDictionaryCreatorOptions(*args))
    __swig_destroy__ = _oechem.delete_OE2DRingDictionaryCreatorOptions

    def SetRetainExistingBuiltInTemplates(self, arg2: "bool") -> "void":
        r"""SetRetainExistingBuiltInTemplates(OE2DRingDictionaryCreatorOptions self, bool arg2)"""
        return _oechem.OE2DRingDictionaryCreatorOptions_SetRetainExistingBuiltInTemplates(self, arg2)

    def GetRetainExistingBuiltInTemplates(self) -> "bool":
        r"""GetRetainExistingBuiltInTemplates(OE2DRingDictionaryCreatorOptions self) -> bool"""
        return _oechem.OE2DRingDictionaryCreatorOptions_GetRetainExistingBuiltInTemplates(self)

    def SetRetainExistingTemplates(self, arg2: "bool") -> "void":
        r"""SetRetainExistingTemplates(OE2DRingDictionaryCreatorOptions self, bool arg2)"""
        return _oechem.OE2DRingDictionaryCreatorOptions_SetRetainExistingTemplates(self, arg2)

    def GetRetainExistingTemplates(self) -> "bool":
        r"""GetRetainExistingTemplates(OE2DRingDictionaryCreatorOptions self) -> bool"""
        return _oechem.OE2DRingDictionaryCreatorOptions_GetRetainExistingTemplates(self)

    def SetAddCarbonSkeleton(self, arg2: "bool") -> "void":
        r"""SetAddCarbonSkeleton(OE2DRingDictionaryCreatorOptions self, bool arg2)"""
        return _oechem.OE2DRingDictionaryCreatorOptions_SetAddCarbonSkeleton(self, arg2)

    def GetAddCarbonSkeleton(self) -> "bool":
        r"""GetAddCarbonSkeleton(OE2DRingDictionaryCreatorOptions self) -> bool"""
        return _oechem.OE2DRingDictionaryCreatorOptions_GetAddCarbonSkeleton(self)

    def SetAddCarbonSkeletonWithBondStereo(self, arg2: "bool") -> "void":
        r"""SetAddCarbonSkeletonWithBondStereo(OE2DRingDictionaryCreatorOptions self, bool arg2)"""
        return _oechem.OE2DRingDictionaryCreatorOptions_SetAddCarbonSkeletonWithBondStereo(self, arg2)

    def GetAddCarbonSkeletonWithBondStereo(self) -> "bool":
        r"""GetAddCarbonSkeletonWithBondStereo(OE2DRingDictionaryCreatorOptions self) -> bool"""
        return _oechem.OE2DRingDictionaryCreatorOptions_GetAddCarbonSkeletonWithBondStereo(self)

# Register OE2DRingDictionaryCreatorOptions in _oechem:
_oechem.OE2DRingDictionaryCreatorOptions_swigregister(OE2DRingDictionaryCreatorOptions)

class OE2DRingDictionary(object):
    r"""Proxy of C++ OEChem::OE2DRingDictionary 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__(OE2DRingDictionary self) -> OE2DRingDictionary
        __init__(OE2DRingDictionary self, OE2DRingDictionaryCreatorOptions opts) -> OE2DRingDictionary
        __init__(OE2DRingDictionary self, std::string const & filename) -> OE2DRingDictionary
        __init__(OE2DRingDictionary self, oemolistream ims) -> OE2DRingDictionary
        """
        _oechem.OE2DRingDictionary_swiginit(self, _oechem.new_OE2DRingDictionary(*args))
    __swig_destroy__ = _oechem.delete_OE2DRingDictionary

    def NumRings(self) -> "unsigned int":
        r"""NumRings(OE2DRingDictionary self) -> unsigned int"""
        return _oechem.OE2DRingDictionary_NumRings(self)

    def AddRings(self, mol: "OEMolBase") -> "unsigned int":
        r"""AddRings(OE2DRingDictionary self, OEMolBase mol) -> unsigned int"""
        return _oechem.OE2DRingDictionary_AddRings(self, mol)

    def GetOEChemRelease(self) -> "std::string":
        r"""GetOEChemRelease(OE2DRingDictionary self) -> std::string"""
        return _oechem.OE2DRingDictionary_GetOEChemRelease(self)

    def GetVersion(self) -> "std::string":
        r"""GetVersion(OE2DRingDictionary self) -> std::string"""
        return _oechem.OE2DRingDictionary_GetVersion(self)

# Register OE2DRingDictionary in _oechem:
_oechem.OE2DRingDictionary_swigregister(OE2DRingDictionary)


def OEIsValid2DRingDictionary(*args) -> "bool":
    r"""
    OEIsValid2DRingDictionary(std::string const & filename) -> bool
    OEIsValid2DRingDictionary(oemolistream ifs) -> bool
    """
    return _oechem.OEIsValid2DRingDictionary(*args)

def OEWrite2DRingDictionary(*args) -> "bool":
    r"""
    OEWrite2DRingDictionary(std::string const & filename, OE2DRingDictionary rtd) -> bool
    OEWrite2DRingDictionary(oeostream os, OE2DRingDictionary rtd) -> bool
    OEWrite2DRingDictionary(oemolostream oms, OE2DRingDictionary rtd) -> bool
    """
    return _oechem.OEWrite2DRingDictionary(*args)

def OEInit2DRingDictionary(*args) -> "bool":
    r"""
    OEInit2DRingDictionary(std::string const & filename) -> bool
    OEInit2DRingDictionary(oemolistream ims) -> bool
    """
    return _oechem.OEInit2DRingDictionary(*args)

def OEClear2DRingDictionary() -> "void":
    r"""OEClear2DRingDictionary()"""
    return _oechem.OEClear2DRingDictionary()
class OESubSearchScreenTypeBase(object):
    r"""Proxy of C++ OEChem::OESubSearchScreenTypeBase 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")
    __repr__ = _swig_repr
    __swig_destroy__ = _oechem.delete_OESubSearchScreenTypeBase

    def GetScreenTypeString(self) -> "std::string":
        r"""GetScreenTypeString(OESubSearchScreenTypeBase self) -> std::string"""
        return _oechem.OESubSearchScreenTypeBase_GetScreenTypeString(self)

    def GetScreenType(self) -> "unsigned int":
        r"""GetScreenType(OESubSearchScreenTypeBase self) -> unsigned int"""
        return _oechem.OESubSearchScreenTypeBase_GetScreenType(self)

    def GetSize(self) -> "unsigned int":
        r"""GetSize(OESubSearchScreenTypeBase self) -> unsigned int"""
        return _oechem.OESubSearchScreenTypeBase_GetSize(self)

    def GetName(self) -> "std::string":
        r"""GetName(OESubSearchScreenTypeBase self) -> std::string"""
        return _oechem.OESubSearchScreenTypeBase_GetName(self)

    def GetVersion(self) -> "unsigned short":
        r"""GetVersion(OESubSearchScreenTypeBase self) -> unsigned short"""
        return _oechem.OESubSearchScreenTypeBase_GetVersion(self)

    def GetVersionString(self) -> "std::string":
        r"""GetVersionString(OESubSearchScreenTypeBase self) -> std::string"""
        return _oechem.OESubSearchScreenTypeBase_GetVersionString(self)

# Register OESubSearchScreenTypeBase in _oechem:
_oechem.OESubSearchScreenTypeBase_swigregister(OESubSearchScreenTypeBase)

class OESubSearchScreen(OEBitVector):
    r"""Proxy of C++ OEChem::OESubSearchScreen 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__(OESubSearchScreen self) -> OESubSearchScreen
        __init__(OESubSearchScreen self, OESubSearchScreen arg2) -> OESubSearchScreen
        """
        _oechem.OESubSearchScreen_swiginit(self, _oechem.new_OESubSearchScreen(*args))
    __swig_destroy__ = _oechem.delete_OESubSearchScreen

    def IsValid(self) -> "bool":
        r"""IsValid(OESubSearchScreen self) -> bool"""
        return _oechem.OESubSearchScreen_IsValid(self)

    def GetScreenType(self) -> "OEChem::OESubSearchScreenTypeBase const *":
        r"""GetScreenType(OESubSearchScreen self) -> OESubSearchScreenTypeBase"""
        return _oechem.OESubSearchScreen_GetScreenType(self)

    def SetScreenType(self, stype: "OESubSearchScreenTypeBase") -> "void":
        r"""SetScreenType(OESubSearchScreen self, OESubSearchScreenTypeBase stype)"""
        return _oechem.OESubSearchScreen_SetScreenType(self, stype)

    def GetDataTypeAsLong(self) -> "PyObject *":
        r"""GetDataTypeAsLong(OESubSearchScreen self) -> PyObject *"""
        return _oechem.OESubSearchScreen_GetDataTypeAsLong(self)

# Register OESubSearchScreen in _oechem:
_oechem.OESubSearchScreen_swigregister(OESubSearchScreen)


def OEGetSubSearchScreenType(*args) -> "OEChem::OESubSearchScreenTypeBase const *":
    r"""
    OEGetSubSearchScreenType(unsigned int const stype) -> OESubSearchScreenTypeBase
    OEGetSubSearchScreenType(std::string const & stypestr) -> OESubSearchScreenTypeBase
    """
    return _oechem.OEGetSubSearchScreenType(*args)

def OEIsValidSubSearchScreenString(stypestr: "std::string const &") -> "bool":
    r"""OEIsValidSubSearchScreenString(std::string const & stypestr) -> bool"""
    return _oechem.OEIsValidSubSearchScreenString(stypestr)

def OESameSubSearchScreenTypes(arg1: "OESubSearchScreen", arg2: "OESubSearchScreen") -> "bool":
    r"""OESameSubSearchScreenTypes(OESubSearchScreen arg1, OESubSearchScreen arg2) -> bool"""
    return _oechem.OESameSubSearchScreenTypes(arg1, arg2)

def OEScreen(query: "OESubSearchScreen", target: "OESubSearchScreen") -> "bool":
    r"""OEScreen(OESubSearchScreen query, OESubSearchScreen target) -> bool"""
    return _oechem.OEScreen(query, target)

def OEIsComplementaryScreenType(*args) -> "bool":
    r"""
    OEIsComplementaryScreenType(OEQMolBase arg1, unsigned int const stype) -> bool
    OEIsComplementaryScreenType(OEQMolBase arg1, OESubSearchScreenTypeBase stype) -> bool
    """
    return _oechem.OEIsComplementaryScreenType(*args)

def OEMakeSubSearchQueryScreen(*args) -> "bool":
    r"""
    OEMakeSubSearchQueryScreen(OESubSearchScreen arg1, OEQMolBase arg2, unsigned int const stype=) -> bool
    OEMakeSubSearchQueryScreen(OESubSearchScreen arg1, OEQMolBase arg2, OESubSearchScreenTypeBase arg3) -> bool
    """
    return _oechem.OEMakeSubSearchQueryScreen(*args)

def OEMakeSubSearchTargetScreen(*args) -> "bool":
    r"""
    OEMakeSubSearchTargetScreen(OESubSearchScreen arg1, OEMolBase arg2, unsigned int const stype=) -> bool
    OEMakeSubSearchTargetScreen(OESubSearchScreen arg1, OEMolBase arg2, OESubSearchScreenTypeBase arg3) -> bool
    """
    return _oechem.OEMakeSubSearchTargetScreen(*args)
class OECreateSubSearchDatabaseOptions(object):
    r"""Proxy of C++ OEChem::OECreateSubSearchDatabaseOptions 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, arg2: "OESubSearchScreenTypeBase"):
        r"""__init__(OECreateSubSearchDatabaseOptions self, OESubSearchScreenTypeBase arg2) -> OECreateSubSearchDatabaseOptions"""
        _oechem.OECreateSubSearchDatabaseOptions_swiginit(self, _oechem.new_OECreateSubSearchDatabaseOptions(arg2))
    __swig_destroy__ = _oechem.delete_OECreateSubSearchDatabaseOptions

    def GetScreenType(self) -> "OEChem::OESubSearchScreenTypeBase const *":
        r"""GetScreenType(OECreateSubSearchDatabaseOptions self) -> OESubSearchScreenTypeBase"""
        return _oechem.OECreateSubSearchDatabaseOptions_GetScreenType(self)

    def SetNumProcessors(self, arg2: "unsigned int const") -> "void":
        r"""SetNumProcessors(OECreateSubSearchDatabaseOptions self, unsigned int const arg2)"""
        return _oechem.OECreateSubSearchDatabaseOptions_SetNumProcessors(self, arg2)

    def GetNumProcessors(self) -> "unsigned int":
        r"""GetNumProcessors(OECreateSubSearchDatabaseOptions self) -> unsigned int"""
        return _oechem.OECreateSubSearchDatabaseOptions_GetNumProcessors(self)

    def SetKeepTitle(self, keep: "bool const") -> "void":
        r"""SetKeepTitle(OECreateSubSearchDatabaseOptions self, bool const keep)"""
        return _oechem.OECreateSubSearchDatabaseOptions_SetKeepTitle(self, keep)

    def GetKeepTitle(self) -> "bool":
        r"""GetKeepTitle(OECreateSubSearchDatabaseOptions self) -> bool"""
        return _oechem.OECreateSubSearchDatabaseOptions_GetKeepTitle(self)

    def SetSortByBitCounts(self, sort: "bool const") -> "void":
        r"""SetSortByBitCounts(OECreateSubSearchDatabaseOptions self, bool const sort)"""
        return _oechem.OECreateSubSearchDatabaseOptions_SetSortByBitCounts(self, sort)

    def GetSortByBitCounts(self) -> "bool":
        r"""GetSortByBitCounts(OECreateSubSearchDatabaseOptions self) -> bool"""
        return _oechem.OECreateSubSearchDatabaseOptions_GetSortByBitCounts(self)

# Register OECreateSubSearchDatabaseOptions in _oechem:
_oechem.OECreateSubSearchDatabaseOptions_swigregister(OECreateSubSearchDatabaseOptions)


def OECreateSubSearchDatabaseFile(*args) -> "bool":
    r"""
    OECreateSubSearchDatabaseFile(std::string const & ofname, std::string const & ifname, OESubSearchScreenTypeBase stype, OETracerBase tracer=OENoTracer) -> bool
    OECreateSubSearchDatabaseFile(std::string const & ofname, std::string const & ifname, OECreateSubSearchDatabaseOptions opts, OETracerBase tracer=OENoTracer) -> bool
    """
    return _oechem.OECreateSubSearchDatabaseFile(*args)
class OESubSearchQuery(object):
    r"""Proxy of C++ OEChem::OESubSearchQuery 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__(OESubSearchQuery self, OEQMolBase arg2, size_t const maxmatches=1000) -> OESubSearchQuery
        __init__(OESubSearchQuery self, OEChem::OESubSearchQueryImpl * arg2) -> OESubSearchQuery
        """
        _oechem.OESubSearchQuery_swiginit(self, _oechem.new_OESubSearchQuery(*args))
    __swig_destroy__ = _oechem.delete_OESubSearchQuery

    def SetFilter(self, arg2: "OEUnaryMolBasePred") -> "void":
        r"""SetFilter(OESubSearchQuery self, OEUnaryMolBasePred arg2)"""
        return _oechem.OESubSearchQuery_SetFilter(self, arg2)

    def SetMaxMatches(self, arg2: "size_t const") -> "void":
        r"""SetMaxMatches(OESubSearchQuery self, size_t const arg2)"""
        return _oechem.OESubSearchQuery_SetMaxMatches(self, arg2)

    def GetMaxMatches(self) -> "size_t":
        r"""GetMaxMatches(OESubSearchQuery self) -> size_t"""
        return _oechem.OESubSearchQuery_GetMaxMatches(self)

# Register OESubSearchQuery in _oechem:
_oechem.OESubSearchQuery_swigregister(OESubSearchQuery)


def OESubSearchStatusToName(s: "unsigned int const") -> "std::string":
    r"""OESubSearchStatusToName(unsigned int const s) -> std::string"""
    return _oechem.OESubSearchStatusToName(s)
class OESubSearchResult(object):
    r"""Proxy of C++ OEChem::OESubSearchResult 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__(OESubSearchResult self) -> OESubSearchResult"""
        _oechem.OESubSearchResult_swiginit(self, _oechem.new_OESubSearchResult())
    __swig_destroy__ = _oechem.delete_OESubSearchResult

    def IsValid(self) -> "bool":
        r"""IsValid(OESubSearchResult self) -> bool"""
        return _oechem.OESubSearchResult_IsValid(self)

    def GetSearchStatus(self) -> "unsigned int":
        r"""GetSearchStatus(OESubSearchResult self) -> unsigned int"""
        return _oechem.OESubSearchResult_GetSearchStatus(self)

    def Cancel(self) -> "void":
        r"""Cancel(OESubSearchResult self)"""
        return _oechem.OESubSearchResult_Cancel(self)

    def NumTargets(self) -> "size_t":
        r"""NumTargets(OESubSearchResult self) -> size_t"""
        return _oechem.OESubSearchResult_NumTargets(self)

    def NumScreened(self) -> "size_t":
        r"""NumScreened(OESubSearchResult self) -> size_t"""
        return _oechem.OESubSearchResult_NumScreened(self)

    def NumSearched(self) -> "size_t":
        r"""NumSearched(OESubSearchResult self) -> size_t"""
        return _oechem.OESubSearchResult_NumSearched(self)

    def NumTotalMatches(self) -> "size_t":
        r"""NumTotalMatches(OESubSearchResult self) -> size_t"""
        return _oechem.OESubSearchResult_NumTotalMatches(self)

    def NumMatches(self) -> "size_t":
        r"""NumMatches(OESubSearchResult self) -> size_t"""
        return _oechem.OESubSearchResult_NumMatches(self)

    def GetMatchIndices(self) -> "OESystem::OEIterBase< size_t > *":
        r"""GetMatchIndices(OESubSearchResult self) -> OESystem::OEIterBase< size_t > *"""
        return _oechem.OESubSearchResult_GetMatchIndices(self)

# Register OESubSearchResult in _oechem:
_oechem.OESubSearchResult_swigregister(OESubSearchResult)

class OESubSearchDatabase(object):
    r"""Proxy of C++ OEChem::OESubSearchDatabase 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__(OESubSearchDatabase self, unsigned int const memtype=, unsigned int const numprocesssors=0) -> OESubSearchDatabase
        __init__(OESubSearchDatabase self, std::string const & dbfile, unsigned int const memtype=, unsigned int const numprocesssors=0) -> OESubSearchDatabase
        """
        _oechem.OESubSearchDatabase_swiginit(self, _oechem.new_OESubSearchDatabase(*args))
    __swig_destroy__ = _oechem.delete_OESubSearchDatabase

    def Open(self, *args) -> "bool":
        r"""
        Open(OESubSearchDatabase self, std::string const & arg2, OETracerBase tracer=OENoTracer) -> bool
        Open(OESubSearchDatabase self, oemolistream ifs, OETracerBase tracer=OENoTracer) -> bool
        """
        return _oechem.OESubSearchDatabase_Open(self, *args)

    def IsValid(self) -> "bool":
        r"""IsValid(OESubSearchDatabase self) -> bool"""
        return _oechem.OESubSearchDatabase_IsValid(self)

    def GetScreenType(self) -> "OEChem::OESubSearchScreenTypeBase const *":
        r"""GetScreenType(OESubSearchDatabase self) -> OESubSearchScreenTypeBase"""
        return _oechem.OESubSearchDatabase_GetScreenType(self)

    def NumMolecules(self) -> "size_t":
        r"""NumMolecules(OESubSearchDatabase self) -> size_t"""
        return _oechem.OESubSearchDatabase_NumMolecules(self)

    def GetDatabaseType(self) -> "unsigned int":
        r"""GetDatabaseType(OESubSearchDatabase self) -> unsigned int"""
        return _oechem.OESubSearchDatabase_GetDatabaseType(self)

    def NumProcessors(self) -> "unsigned int":
        r"""NumProcessors(OESubSearchDatabase self) -> unsigned int"""
        return _oechem.OESubSearchDatabase_NumProcessors(self)

    def GetMolecule(self, mol: "OEMolBase", arg3: "size_t const") -> "bool":
        r"""GetMolecule(OESubSearchDatabase self, OEMolBase mol, size_t const arg3) -> bool"""
        return _oechem.OESubSearchDatabase_GetMolecule(self, mol, arg3)

    def GetTitle(self, arg2: "size_t const") -> "std::string":
        r"""GetTitle(OESubSearchDatabase self, size_t const arg2) -> std::string"""
        return _oechem.OESubSearchDatabase_GetTitle(self, arg2)

    def NumMatches(self, query: "OEQMolBase") -> "size_t":
        r"""NumMatches(OESubSearchDatabase self, OEQMolBase query) -> size_t"""
        return _oechem.OESubSearchDatabase_NumMatches(self, query)

    def GetMatchIndices(self, arg2: "OESubSearchQuery") -> "OESystem::OEIterBase< size_t > *":
        r"""GetMatchIndices(OESubSearchDatabase self, OESubSearchQuery arg2) -> OESystem::OEIterBase< size_t > *"""
        return _oechem.OESubSearchDatabase_GetMatchIndices(self, arg2)

    def GetMatchTitles(self, arg2: "OESubSearchQuery") -> "OESystem::OEIterBase< std::string > *":
        r"""GetMatchTitles(OESubSearchDatabase self, OESubSearchQuery arg2) -> OESystem::OEIterBase< std::string > *"""
        return _oechem.OESubSearchDatabase_GetMatchTitles(self, arg2)

    def Search(self, arg2: "OESubSearchResult", arg3: "OESubSearchQuery") -> "unsigned int":
        r"""Search(OESubSearchDatabase self, OESubSearchResult arg2, OESubSearchQuery arg3) -> unsigned int"""
        return _oechem.OESubSearchDatabase_Search(self, arg2, arg3)

# Register OESubSearchDatabase in _oechem:
_oechem.OESubSearchDatabase_swigregister(OESubSearchDatabase)


def OEIsValidSubSearchDatabase(*args) -> "bool":
    r"""
    OEIsValidSubSearchDatabase(std::string const & filename) -> bool
    OEIsValidSubSearchDatabase(oemolistream ifs) -> bool
    OEIsValidSubSearchDatabase(std::string const & filename, OESubSearchScreenTypeBase arg2) -> bool
    OEIsValidSubSearchDatabase(oemolistream ifs, OESubSearchScreenTypeBase arg2) -> bool
    """
    return _oechem.OEIsValidSubSearchDatabase(*args)


