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


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

from sys import version_info as _swig_python_version_info

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

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

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

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

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

    _oespruce = libs.OEGetModule('_oespruce1115')
    return _oespruce

_oespruce = swig_import_helper()
del swig_import_helper
del _swig_python_version_info

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

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

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


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


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


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


def _swig_setattr_nondynamic_method(set):
    def set_attr(self, name, value):
        if (name == "thisown"):
            return self.this.own(value)
        if hasattr(self, name) or (name == "this"):
            set(self, name, value)
        else:
            raise AttributeError("You cannot add attributes to %s" % self)
    return set_attr


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


import openeye.oechem as oechem
OESuperpositionType_Undefined = _oespruce.OESuperpositionType_Undefined
OESuperpositionType_Global = _oespruce.OESuperpositionType_Global
OESuperpositionType_Site = _oespruce.OESuperpositionType_Site
OESuperpositionType_DDM = _oespruce.OESuperpositionType_DDM
OESuperpositionType_Weighted = _oespruce.OESuperpositionType_Weighted
OESuperpositionType_SSE = _oespruce.OESuperpositionType_SSE

OESuperpositionType_Default = OESuperpositionType_Global

OESuperpositionType_Max = _oespruce.OESuperpositionType_Max
OEExperimentType_Unknown = _oespruce.OEExperimentType_Unknown
OEExperimentType_XRayDiffraction = _oespruce.OEExperimentType_XRayDiffraction
OEExperimentType_NeutronDiffraction = _oespruce.OEExperimentType_NeutronDiffraction
OEExperimentType_FiberDiffraction = _oespruce.OEExperimentType_FiberDiffraction
OEExperimentType_PowderDiffraction = _oespruce.OEExperimentType_PowderDiffraction
OEExperimentType_SolutionScattering = _oespruce.OEExperimentType_SolutionScattering
OEExperimentType_SolutionNMR = _oespruce.OEExperimentType_SolutionNMR
OEExperimentType_SolidStateNMR = _oespruce.OEExperimentType_SolidStateNMR
OEExperimentType_ElectronCrystallograhy = _oespruce.OEExperimentType_ElectronCrystallograhy
OEExperimentType_ElectronMicroscopy = _oespruce.OEExperimentType_ElectronMicroscopy
OEExperimentType_TheoreticalModel = _oespruce.OEExperimentType_TheoreticalModel

OEExperimentType_Max = OEExperimentType_TheoreticalModel

OEHeterogenType_Unknown = _oespruce.OEHeterogenType_Unknown
OEHeterogenType_Ligand = _oespruce.OEHeterogenType_Ligand
OEHeterogenType_Cofactors = _oespruce.OEHeterogenType_Cofactors
OEHeterogenType_Solvent = _oespruce.OEHeterogenType_Solvent
OEHeterogenType_Metals = _oespruce.OEHeterogenType_Metals
OEHeterogenType_CounterIons = _oespruce.OEHeterogenType_CounterIons
OEHeterogenType_Lipids = _oespruce.OEHeterogenType_Lipids
OEHeterogenType_Excipients = _oespruce.OEHeterogenType_Excipients
OEHeterogenType_Sugars = _oespruce.OEHeterogenType_Sugars
OEHeterogenType_Polymers = _oespruce.OEHeterogenType_Polymers

OEHeterogenType_Max = OEHeterogenType_Polymers

OEAlternateLocationOption_Unknown = _oespruce.OEAlternateLocationOption_Unknown
OEAlternateLocationOption_Primary = _oespruce.OEAlternateLocationOption_Primary
OEAlternateLocationOption_Enumerate = _oespruce.OEAlternateLocationOption_Enumerate
OEAlternateLocationOption_Combinatorial = _oespruce.OEAlternateLocationOption_Combinatorial

OEAlternateLocationOption_Default = OEAlternateLocationOption_Enumerate


OEAlternateLocationOption_Max = OEAlternateLocationOption_Combinatorial

class OESuperpositionOptions(object):
    """Proxy of C++ OESpruce::OESuperpositionOptions class."""

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

    def __init__(self, *args):
        """
        __init__(OESpruce::OESuperpositionOptions self) -> OESuperpositionOptions
        __init__(OESpruce::OESuperpositionOptions self, OESuperpositionOptions rhs) -> OESuperpositionOptions
        """
        this = _oespruce.new_OESuperpositionOptions(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OESuperpositionOptions
    __del__ = lambda self: None

    def SetSuperpositionType(self, type: 'unsigned int') -> "bool":
        """SetSuperpositionType(OESuperpositionOptions self, unsigned int type) -> bool"""
        return _oespruce.OESuperpositionOptions_SetSuperpositionType(self, type)


    def GetSuperpositionType(self) -> "unsigned int":
        """GetSuperpositionType(OESuperpositionOptions self) -> unsigned int"""
        return _oespruce.OESuperpositionOptions_GetSuperpositionType(self)


    def AddSiteResidue(self, argSiteResidue: 'std::string const &') -> "void":
        """AddSiteResidue(OESuperpositionOptions self, std::string const & argSiteResidue)"""
        return _oespruce.OESuperpositionOptions_AddSiteResidue(self, argSiteResidue)


    def ClearSiteResidues(self) -> "void":
        """ClearSiteResidues(OESuperpositionOptions self)"""
        return _oespruce.OESuperpositionOptions_ClearSiteResidues(self)


    def SetDist(self, argDist: 'double') -> "void":
        """SetDist(OESuperpositionOptions self, double argDist)"""
        return _oespruce.OESuperpositionOptions_SetDist(self, argDist)


    def GetDist(self) -> "double":
        """GetDist(OESuperpositionOptions self) -> double"""
        return _oespruce.OESuperpositionOptions_GetDist(self)


    def SetLigandConstraints(self, refLig: 'OEMolBase', fitLig: 'OEMolBase') -> "void":
        """SetLigandConstraints(OESuperpositionOptions self, OEMolBase refLig, OEMolBase fitLig)"""
        return _oespruce.OESuperpositionOptions_SetLigandConstraints(self, refLig, fitLig)


    def GetLigandConstraints(self, refLig: 'OEMolBase', fitLig: 'OEMolBase') -> "void":
        """GetLigandConstraints(OESuperpositionOptions self, OEMolBase refLig, OEMolBase fitLig)"""
        return _oespruce.OESuperpositionOptions_GetLigandConstraints(self, refLig, fitLig)


    def ClearLigandConstraints(self) -> "void":
        """ClearLigandConstraints(OESuperpositionOptions self)"""
        return _oespruce.OESuperpositionOptions_ClearLigandConstraints(self)


    def HasLigandConstraints(self) -> "bool":
        """HasLigandConstraints(OESuperpositionOptions self) -> bool"""
        return _oespruce.OESuperpositionOptions_HasLigandConstraints(self)


    def SetSiteResidues(self, list: 'PyObject *') -> "void":
        """SetSiteResidues(OESuperpositionOptions self, PyObject * list)"""
        return _oespruce.OESuperpositionOptions_SetSiteResidues(self, list)


    def GetSiteResidues(self) -> "PyObject *":
        """GetSiteResidues(OESuperpositionOptions self) -> PyObject *"""
        return _oespruce.OESuperpositionOptions_GetSiteResidues(self)

OESuperpositionOptions_swigregister = _oespruce.OESuperpositionOptions_swigregister
OESuperpositionOptions_swigregister(OESuperpositionOptions)

class OEStructuralSuperposition(object):
    """Proxy of C++ OESpruce::OEStructuralSuperposition class."""

    thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
    __repr__ = _swig_repr
    __swig_destroy__ = _oespruce.delete_OEStructuralSuperposition
    __del__ = lambda self: None

    def __init__(self, *args):
        """
        __init__(OESpruce::OEStructuralSuperposition self, OEMolBase argRefMol, OEMolBase argFitMol, OESuperpositionOptions argOpts) -> OEStructuralSuperposition
        __init__(OESpruce::OEStructuralSuperposition self, OEMolBase argRefMol, OEMolBase argFitMol) -> OEStructuralSuperposition
        __init__(OESpruce::OEStructuralSuperposition self, OEStructuralSuperposition rhs) -> OEStructuralSuperposition
        """
        this = _oespruce.new_OEStructuralSuperposition(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this

    def IsValid(self):
      return _oespruce.OEStructuralSuperposition___nonzero__(self)



    def GetRotMatrix(self, rmat: 'double *') -> "void":
        """GetRotMatrix(OEStructuralSuperposition self, double * rmat)"""
        return _oespruce.OEStructuralSuperposition_GetRotMatrix(self, rmat)


    def GetTranslation(self, trans: 'double *') -> "void":
        """GetTranslation(OEStructuralSuperposition self, double * trans)"""
        return _oespruce.OEStructuralSuperposition_GetTranslation(self, trans)


    def Transform(self, mol: 'OEMolBase') -> "void":
        """Transform(OEStructuralSuperposition self, OEMolBase mol)"""
        return _oespruce.OEStructuralSuperposition_Transform(self, mol)


    def GetRMSD(self) -> "double":
        """GetRMSD(OEStructuralSuperposition self) -> double"""
        return _oespruce.OEStructuralSuperposition_GetRMSD(self)


    def GetScore(self) -> "int":
        """GetScore(OEStructuralSuperposition self) -> int"""
        return _oespruce.OEStructuralSuperposition_GetScore(self)


    def ConstraintsMet(self) -> "bool":
        """ConstraintsMet(OEStructuralSuperposition self) -> bool"""
        return _oespruce.OEStructuralSuperposition_ConstraintsMet(self)


    def GetRefChains(self) -> "PyObject *":
        """GetRefChains(OEStructuralSuperposition self) -> PyObject *"""
        return _oespruce.OEStructuralSuperposition_GetRefChains(self)


    def GetFitChains(self) -> "PyObject *":
        """GetFitChains(OEStructuralSuperposition self) -> PyObject *"""
        return _oespruce.OEStructuralSuperposition_GetFitChains(self)


    def GetRegion(self) -> "PyObject *":
        """GetRegion(OEStructuralSuperposition self) -> PyObject *"""
        return _oespruce.OEStructuralSuperposition_GetRegion(self)

OEStructuralSuperposition_swigregister = _oespruce.OEStructuralSuperposition_swigregister
OEStructuralSuperposition_swigregister(OEStructuralSuperposition)

class OESecondaryStructureSuperposition(object):
    """Proxy of C++ OESpruce::OESecondaryStructureSuperposition class."""

    thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
    __repr__ = _swig_repr
    __swig_destroy__ = _oespruce.delete_OESecondaryStructureSuperposition
    __del__ = lambda self: None

    def __init__(self, *args):
        """
        __init__(OESpruce::OESecondaryStructureSuperposition self, OEMolBase refMol, OEMolBase fitMol, OESuperpositionOptions argOpts) -> OESecondaryStructureSuperposition
        __init__(OESpruce::OESecondaryStructureSuperposition self, OEMolBase refMol, OEMolBase fitMol) -> OESecondaryStructureSuperposition
        __init__(OESpruce::OESecondaryStructureSuperposition self, OESecondaryStructureSuperposition rhs) -> OESecondaryStructureSuperposition
        """
        this = _oespruce.new_OESecondaryStructureSuperposition(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this

    def IsValid(self):
      return _oespruce.OESecondaryStructureSuperposition___nonzero__(self)



    def GetRotMatrix(self, rmat: 'double *') -> "void":
        """GetRotMatrix(OESecondaryStructureSuperposition self, double * rmat)"""
        return _oespruce.OESecondaryStructureSuperposition_GetRotMatrix(self, rmat)


    def GetTranslation(self, trans: 'double *') -> "void":
        """GetTranslation(OESecondaryStructureSuperposition self, double * trans)"""
        return _oespruce.OESecondaryStructureSuperposition_GetTranslation(self, trans)


    def Transform(self, mol: 'OEMolBase') -> "void":
        """Transform(OESecondaryStructureSuperposition self, OEMolBase mol)"""
        return _oespruce.OESecondaryStructureSuperposition_Transform(self, mol)


    def GetTanimoto(self) -> "double":
        """GetTanimoto(OESecondaryStructureSuperposition self) -> double"""
        return _oespruce.OESecondaryStructureSuperposition_GetTanimoto(self)


    def GetRefChains(self) -> "PyObject *":
        """GetRefChains(OESecondaryStructureSuperposition self) -> PyObject *"""
        return _oespruce.OESecondaryStructureSuperposition_GetRefChains(self)


    def GetFitChains(self) -> "PyObject *":
        """GetFitChains(OESecondaryStructureSuperposition self) -> PyObject *"""
        return _oespruce.OESecondaryStructureSuperposition_GetFitChains(self)

OESecondaryStructureSuperposition_swigregister = _oespruce.OESecondaryStructureSuperposition_swigregister
OESecondaryStructureSuperposition_swigregister(OESecondaryStructureSuperposition)

class OEBioAssemblyFactIter(object):
    """Proxy of C++ OESystem::OEIter<(OEChem::OEMolBase)> class."""

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

    def __init__(self, *args):
        """
        __init__(OESystem::OEIter<(OEChem::OEMolBase)> self) -> OEBioAssemblyFactIter
        __init__(OESystem::OEIter<(OEChem::OEMolBase)> self, OEMolBaseIter rhs) -> OEBioAssemblyFactIter
        __init__(OESystem::OEIter<(OEChem::OEMolBase)> self, OESystem::OEIterBase< OEChem::OEMolBase > * rhs) -> OEBioAssemblyFactIter
        __init__(OESystem::OEIter<(OEChem::OEMolBase)> self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEMolBase >::NonConstA > * rhs) -> OEBioAssemblyFactIter
        """
        this = _oespruce.new_OEBioAssemblyFactIter(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OEBioAssemblyFactIter
    __del__ = lambda self: None

    def Copy(self) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
        """Copy(OEBioAssemblyFactIter self) -> OESystem::OEIterBase< OEChem::OEMolBase > *"""
        return _oespruce.OEBioAssemblyFactIter_Copy(self)


    def Push(self, *args) -> "void":
        """
        Push(OEBioAssemblyFactIter self, OESystem::OEIterBase< OEChem::OEMolBase > * ib)
        Push(OEBioAssemblyFactIter self, OEMolBaseIter iter)
        """
        return _oespruce.OEBioAssemblyFactIter_Push(self, *args)


    def Sort(self, sort_criterion: 'OEBinaryMolBasePred') -> "void":
        """Sort(OEBioAssemblyFactIter self, OEBinaryMolBasePred sort_criterion)"""
        return _oespruce.OEBioAssemblyFactIter_Sort(self, sort_criterion)


    def ToFirst(self) -> "OESystem::OEIter< OEChem::OEMolBase > &":
        """ToFirst(OEBioAssemblyFactIter self) -> OEMolBaseIter"""
        return _oespruce.OEBioAssemblyFactIter_ToFirst(self)


    def ToLast(self) -> "OESystem::OEIter< OEChem::OEMolBase > &":
        """ToLast(OEBioAssemblyFactIter self) -> OEMolBaseIter"""
        return _oespruce.OEBioAssemblyFactIter_ToLast(self)


    def __ref__(self) -> "OEChem::OEMolBase &":
        """__ref__(OEBioAssemblyFactIter self) -> OEMolBase"""
        return _oespruce.OEBioAssemblyFactIter___ref__(self)


    def IsValid(self):
      return _oespruce.OEBioAssemblyFactIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        """next(OEBioAssemblyFactIter self) -> PyObject *"""
        return _oespruce.OEBioAssemblyFactIter_next(self)


    def Target(self) -> "OEChem::OEMolBase &":
        """Target(OEBioAssemblyFactIter self) -> OEMolBase"""
        return _oespruce.OEBioAssemblyFactIter_Target(self)


    def Next(self, *args) -> "OESystem::OEIter< OEChem::OEMolBase > &":
        """
        Next(OEBioAssemblyFactIter self) -> OEMolBaseIter
        Next(OEBioAssemblyFactIter self, int i) -> OEMolBaseIter
        """
        return _oespruce.OEBioAssemblyFactIter_Next(self, *args)


    def Prev(self, *args) -> "OESystem::OEIter< OEChem::OEMolBase > &":
        """
        Prev(OEBioAssemblyFactIter self) -> OEMolBaseIter
        Prev(OEBioAssemblyFactIter self, int i) -> OEMolBaseIter
        """
        return _oespruce.OEBioAssemblyFactIter_Prev(self, *args)

OEBioAssemblyFactIter_swigregister = _oespruce.OEBioAssemblyFactIter_swigregister
OEBioAssemblyFactIter_swigregister(OEBioAssemblyFactIter)

class OEBioUnitExtractionOptions(object):
    """Proxy of C++ OESpruce::OEBioUnitExtractionOptions class."""

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

    def __init__(self, *args):
        """
        __init__(OESpruce::OEBioUnitExtractionOptions self) -> OEBioUnitExtractionOptions
        __init__(OESpruce::OEBioUnitExtractionOptions self, OEBioUnitExtractionOptions arg2) -> OEBioUnitExtractionOptions
        """
        this = _oespruce.new_OEBioUnitExtractionOptions(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OEBioUnitExtractionOptions
    __del__ = lambda self: None

    def SetMinScore(self, minScore: 'int') -> "void":
        """SetMinScore(OEBioUnitExtractionOptions self, int minScore)"""
        return _oespruce.OEBioUnitExtractionOptions_SetMinScore(self, minScore)


    def GetMinScore(self) -> "unsigned int":
        """GetMinScore(OEBioUnitExtractionOptions self) -> unsigned int"""
        return _oespruce.OEBioUnitExtractionOptions_GetMinScore(self)


    def SetMaxAtoms(self, maxAtoms: 'unsigned int') -> "void":
        """SetMaxAtoms(OEBioUnitExtractionOptions self, unsigned int maxAtoms)"""
        return _oespruce.OEBioUnitExtractionOptions_SetMaxAtoms(self, maxAtoms)


    def GetMaxAtoms(self) -> "unsigned int":
        """GetMaxAtoms(OEBioUnitExtractionOptions self) -> unsigned int"""
        return _oespruce.OEBioUnitExtractionOptions_GetMaxAtoms(self)


    def SetPreferAuthorRecord(self, preferAuthor: 'bool') -> "void":
        """SetPreferAuthorRecord(OEBioUnitExtractionOptions self, bool preferAuthor)"""
        return _oespruce.OEBioUnitExtractionOptions_SetPreferAuthorRecord(self, preferAuthor)


    def GetPreferAuthorRecord(self) -> "bool":
        """GetPreferAuthorRecord(OEBioUnitExtractionOptions self) -> bool"""
        return _oespruce.OEBioUnitExtractionOptions_GetPreferAuthorRecord(self)


    def SetSuperpose(self, superpose: 'bool') -> "void":
        """SetSuperpose(OEBioUnitExtractionOptions self, bool superpose)"""
        return _oespruce.OEBioUnitExtractionOptions_SetSuperpose(self, superpose)


    def GetSuperpose(self) -> "bool":
        """GetSuperpose(OEBioUnitExtractionOptions self) -> bool"""
        return _oespruce.OEBioUnitExtractionOptions_GetSuperpose(self)


    def SetMaxParts(self, maxParts: 'unsigned int') -> "void":
        """SetMaxParts(OEBioUnitExtractionOptions self, unsigned int maxParts)"""
        return _oespruce.OEBioUnitExtractionOptions_SetMaxParts(self, maxParts)


    def GetMaxParts(self) -> "unsigned int":
        """GetMaxParts(OEBioUnitExtractionOptions self) -> unsigned int"""
        return _oespruce.OEBioUnitExtractionOptions_GetMaxParts(self)

OEBioUnitExtractionOptions_swigregister = _oespruce.OEBioUnitExtractionOptions_swigregister
OEBioUnitExtractionOptions_swigregister(OEBioUnitExtractionOptions)


def OEExtractBioUnits(*args) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
    """
    OEExtractBioUnits(OEMolBase extractProtein, OEMolBase refProtein, OEBioUnitExtractionOptions opts) -> OESystem::OEIterBase< OEChem::OEMolBase >
    OEExtractBioUnits(OEMolBase extractProtein, OEMolBase refProtein) -> OESystem::OEIterBase< OEChem::OEMolBase >
    OEExtractBioUnits(OEMolBase extractProtein, OEBioUnitExtractionOptions opts) -> OESystem::OEIterBase< OEChem::OEMolBase >
    OEExtractBioUnits(OEMolBase extractProtein) -> OESystem::OEIterBase< OEChem::OEMolBase > *
    """
    return _oespruce.OEExtractBioUnits(*args)
OE_OESPRUCE_VERSION = _oespruce.OE_OESPRUCE_VERSION

def OESpruceGetRelease() -> "char const *":
    """OESpruceGetRelease() -> char const *"""
    return _oespruce.OESpruceGetRelease()

def OESpruceGetVersion() -> "unsigned int":
    """OESpruceGetVersion() -> unsigned int"""
    return _oespruce.OESpruceGetVersion()

def OESpruceGetArch() -> "char const *":
    """OESpruceGetArch() -> char const *"""
    return _oespruce.OESpruceGetArch()

def OESpruceGetPlatform() -> "char const *":
    """OESpruceGetPlatform() -> char const *"""
    return _oespruce.OESpruceGetPlatform()

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

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

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

def OEGetAlternateLocationOptionName(option: 'unsigned int') -> "std::string":
    """OEGetAlternateLocationOptionName(unsigned int option) -> std::string"""
    return _oespruce.OEGetAlternateLocationOptionName(option)

def OEGetAlternateLocationOptionID(optionName: 'std::string') -> "unsigned int":
    """OEGetAlternateLocationOptionID(std::string optionName) -> unsigned int"""
    return _oespruce.OEGetAlternateLocationOptionID(optionName)
class mapOEResidueString(object):
    """Proxy of C++ std::map<(OEChem::OEResidue,std::string)> class."""

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

    def iterator(self) -> "swig::oespruce_SwigPyIterator *":
        """iterator(mapOEResidueString self) -> oespruce_SwigPyIterator"""
        return _oespruce.mapOEResidueString_iterator(self)

    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        """__nonzero__(mapOEResidueString self) -> bool"""
        return _oespruce.mapOEResidueString___nonzero__(self)


    def __bool__(self) -> "bool":
        """__bool__(mapOEResidueString self) -> bool"""
        return _oespruce.mapOEResidueString___bool__(self)


    def __len__(self) -> "std::map< OEChem::OEResidue,std::string >::size_type":
        """__len__(mapOEResidueString self) -> std::map< OEChem::OEResidue,std::string >::size_type"""
        return _oespruce.mapOEResidueString___len__(self)

    def __iter__(self):
        return self.key_iterator()
    def iterkeys(self):
        return self.key_iterator()
    def itervalues(self):
        return self.value_iterator()
    def iteritems(self):
        return self.iterator()

    def __getitem__(self, key: 'OEResidue') -> "std::map< OEChem::OEResidue,std::string >::mapped_type const &":
        """__getitem__(mapOEResidueString self, OEResidue key) -> std::map< OEChem::OEResidue,std::string >::mapped_type const &"""
        return _oespruce.mapOEResidueString___getitem__(self, key)


    def __delitem__(self, key: 'OEResidue') -> "void":
        """__delitem__(mapOEResidueString self, OEResidue key)"""
        return _oespruce.mapOEResidueString___delitem__(self, key)


    def has_key(self, key: 'OEResidue') -> "bool":
        """has_key(mapOEResidueString self, OEResidue key) -> bool"""
        return _oespruce.mapOEResidueString_has_key(self, key)


    def keys(self) -> "PyObject *":
        """keys(mapOEResidueString self) -> PyObject *"""
        return _oespruce.mapOEResidueString_keys(self)


    def values(self) -> "PyObject *":
        """values(mapOEResidueString self) -> PyObject *"""
        return _oespruce.mapOEResidueString_values(self)


    def items(self) -> "PyObject *":
        """items(mapOEResidueString self) -> PyObject *"""
        return _oespruce.mapOEResidueString_items(self)


    def __contains__(self, key: 'OEResidue') -> "bool":
        """__contains__(mapOEResidueString self, OEResidue key) -> bool"""
        return _oespruce.mapOEResidueString___contains__(self, key)


    def key_iterator(self) -> "swig::oespruce_SwigPyIterator *":
        """key_iterator(mapOEResidueString self) -> oespruce_SwigPyIterator"""
        return _oespruce.mapOEResidueString_key_iterator(self)


    def value_iterator(self) -> "swig::oespruce_SwigPyIterator *":
        """value_iterator(mapOEResidueString self) -> oespruce_SwigPyIterator"""
        return _oespruce.mapOEResidueString_value_iterator(self)


    def __setitem__(self, *args) -> "void":
        """
        __setitem__(mapOEResidueString self, OEResidue key)
        __setitem__(mapOEResidueString self, OEResidue key, std::map< OEChem::OEResidue,std::string >::mapped_type const & x)
        """
        return _oespruce.mapOEResidueString___setitem__(self, *args)


    def asdict(self) -> "PyObject *":
        """asdict(mapOEResidueString self) -> PyObject *"""
        return _oespruce.mapOEResidueString_asdict(self)


    def __init__(self, *args):
        """
        __init__(std::map<(OEChem::OEResidue,std::string)> self, std::less< OEChem::OEResidue > const & arg2) -> mapOEResidueString
        __init__(std::map<(OEChem::OEResidue,std::string)> self) -> mapOEResidueString
        __init__(std::map<(OEChem::OEResidue,std::string)> self, mapOEResidueString arg2) -> mapOEResidueString
        """
        this = _oespruce.new_mapOEResidueString(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this

    def empty(self) -> "bool":
        """empty(mapOEResidueString self) -> bool"""
        return _oespruce.mapOEResidueString_empty(self)


    def size(self) -> "std::map< OEChem::OEResidue,std::string >::size_type":
        """size(mapOEResidueString self) -> std::map< OEChem::OEResidue,std::string >::size_type"""
        return _oespruce.mapOEResidueString_size(self)


    def swap(self, v: 'mapOEResidueString') -> "void":
        """swap(mapOEResidueString self, mapOEResidueString v)"""
        return _oespruce.mapOEResidueString_swap(self, v)


    def begin(self) -> "std::map< OEChem::OEResidue,std::string >::iterator":
        """begin(mapOEResidueString self) -> std::map< OEChem::OEResidue,std::string >::iterator"""
        return _oespruce.mapOEResidueString_begin(self)


    def end(self) -> "std::map< OEChem::OEResidue,std::string >::iterator":
        """end(mapOEResidueString self) -> std::map< OEChem::OEResidue,std::string >::iterator"""
        return _oespruce.mapOEResidueString_end(self)


    def rbegin(self) -> "std::map< OEChem::OEResidue,std::string >::reverse_iterator":
        """rbegin(mapOEResidueString self) -> std::map< OEChem::OEResidue,std::string >::reverse_iterator"""
        return _oespruce.mapOEResidueString_rbegin(self)


    def rend(self) -> "std::map< OEChem::OEResidue,std::string >::reverse_iterator":
        """rend(mapOEResidueString self) -> std::map< OEChem::OEResidue,std::string >::reverse_iterator"""
        return _oespruce.mapOEResidueString_rend(self)


    def clear(self) -> "void":
        """clear(mapOEResidueString self)"""
        return _oespruce.mapOEResidueString_clear(self)


    def get_allocator(self) -> "std::map< OEChem::OEResidue,std::string >::allocator_type":
        """get_allocator(mapOEResidueString self) -> std::map< OEChem::OEResidue,std::string >::allocator_type"""
        return _oespruce.mapOEResidueString_get_allocator(self)


    def count(self, x: 'OEResidue') -> "std::map< OEChem::OEResidue,std::string >::size_type":
        """count(mapOEResidueString self, OEResidue x) -> std::map< OEChem::OEResidue,std::string >::size_type"""
        return _oespruce.mapOEResidueString_count(self, x)


    def erase(self, *args) -> "void":
        """
        erase(mapOEResidueString self, OEResidue x) -> std::map< OEChem::OEResidue,std::string >::size_type
        erase(mapOEResidueString self, std::map< OEChem::OEResidue,std::string >::iterator position)
        erase(mapOEResidueString self, std::map< OEChem::OEResidue,std::string >::iterator first, std::map< OEChem::OEResidue,std::string >::iterator last)
        """
        return _oespruce.mapOEResidueString_erase(self, *args)


    def find(self, x: 'OEResidue') -> "std::map< OEChem::OEResidue,std::string >::iterator":
        """find(mapOEResidueString self, OEResidue x) -> std::map< OEChem::OEResidue,std::string >::iterator"""
        return _oespruce.mapOEResidueString_find(self, x)


    def lower_bound(self, x: 'OEResidue') -> "std::map< OEChem::OEResidue,std::string >::iterator":
        """lower_bound(mapOEResidueString self, OEResidue x) -> std::map< OEChem::OEResidue,std::string >::iterator"""
        return _oespruce.mapOEResidueString_lower_bound(self, x)


    def upper_bound(self, x: 'OEResidue') -> "std::map< OEChem::OEResidue,std::string >::iterator":
        """upper_bound(mapOEResidueString self, OEResidue x) -> std::map< OEChem::OEResidue,std::string >::iterator"""
        return _oespruce.mapOEResidueString_upper_bound(self, x)

    __swig_destroy__ = _oespruce.delete_mapOEResidueString
    __del__ = lambda self: None
mapOEResidueString_swigregister = _oespruce.mapOEResidueString_swigregister
mapOEResidueString_swigregister(mapOEResidueString)

class mapOEResidueUnsigned(object):
    """Proxy of C++ std::map<(OEChem::OEResidue,unsigned int)> class."""

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

    def iterator(self) -> "swig::oespruce_SwigPyIterator *":
        """iterator(mapOEResidueUnsigned self) -> oespruce_SwigPyIterator"""
        return _oespruce.mapOEResidueUnsigned_iterator(self)

    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        """__nonzero__(mapOEResidueUnsigned self) -> bool"""
        return _oespruce.mapOEResidueUnsigned___nonzero__(self)


    def __bool__(self) -> "bool":
        """__bool__(mapOEResidueUnsigned self) -> bool"""
        return _oespruce.mapOEResidueUnsigned___bool__(self)


    def __len__(self) -> "std::map< OEChem::OEResidue,unsigned int >::size_type":
        """__len__(mapOEResidueUnsigned self) -> std::map< OEChem::OEResidue,unsigned int >::size_type"""
        return _oespruce.mapOEResidueUnsigned___len__(self)

    def __iter__(self):
        return self.key_iterator()
    def iterkeys(self):
        return self.key_iterator()
    def itervalues(self):
        return self.value_iterator()
    def iteritems(self):
        return self.iterator()

    def __getitem__(self, key: 'OEResidue') -> "std::map< OEChem::OEResidue,unsigned int >::mapped_type const &":
        """__getitem__(mapOEResidueUnsigned self, OEResidue key) -> std::map< OEChem::OEResidue,unsigned int >::mapped_type const &"""
        return _oespruce.mapOEResidueUnsigned___getitem__(self, key)


    def __delitem__(self, key: 'OEResidue') -> "void":
        """__delitem__(mapOEResidueUnsigned self, OEResidue key)"""
        return _oespruce.mapOEResidueUnsigned___delitem__(self, key)


    def has_key(self, key: 'OEResidue') -> "bool":
        """has_key(mapOEResidueUnsigned self, OEResidue key) -> bool"""
        return _oespruce.mapOEResidueUnsigned_has_key(self, key)


    def keys(self) -> "PyObject *":
        """keys(mapOEResidueUnsigned self) -> PyObject *"""
        return _oespruce.mapOEResidueUnsigned_keys(self)


    def values(self) -> "PyObject *":
        """values(mapOEResidueUnsigned self) -> PyObject *"""
        return _oespruce.mapOEResidueUnsigned_values(self)


    def items(self) -> "PyObject *":
        """items(mapOEResidueUnsigned self) -> PyObject *"""
        return _oespruce.mapOEResidueUnsigned_items(self)


    def __contains__(self, key: 'OEResidue') -> "bool":
        """__contains__(mapOEResidueUnsigned self, OEResidue key) -> bool"""
        return _oespruce.mapOEResidueUnsigned___contains__(self, key)


    def key_iterator(self) -> "swig::oespruce_SwigPyIterator *":
        """key_iterator(mapOEResidueUnsigned self) -> oespruce_SwigPyIterator"""
        return _oespruce.mapOEResidueUnsigned_key_iterator(self)


    def value_iterator(self) -> "swig::oespruce_SwigPyIterator *":
        """value_iterator(mapOEResidueUnsigned self) -> oespruce_SwigPyIterator"""
        return _oespruce.mapOEResidueUnsigned_value_iterator(self)


    def __setitem__(self, *args) -> "void":
        """
        __setitem__(mapOEResidueUnsigned self, OEResidue key)
        __setitem__(mapOEResidueUnsigned self, OEResidue key, std::map< OEChem::OEResidue,unsigned int >::mapped_type const & x)
        """
        return _oespruce.mapOEResidueUnsigned___setitem__(self, *args)


    def asdict(self) -> "PyObject *":
        """asdict(mapOEResidueUnsigned self) -> PyObject *"""
        return _oespruce.mapOEResidueUnsigned_asdict(self)


    def __init__(self, *args):
        """
        __init__(std::map<(OEChem::OEResidue,unsigned int)> self, std::less< OEChem::OEResidue > const & arg2) -> mapOEResidueUnsigned
        __init__(std::map<(OEChem::OEResidue,unsigned int)> self) -> mapOEResidueUnsigned
        __init__(std::map<(OEChem::OEResidue,unsigned int)> self, mapOEResidueUnsigned arg2) -> mapOEResidueUnsigned
        """
        this = _oespruce.new_mapOEResidueUnsigned(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this

    def empty(self) -> "bool":
        """empty(mapOEResidueUnsigned self) -> bool"""
        return _oespruce.mapOEResidueUnsigned_empty(self)


    def size(self) -> "std::map< OEChem::OEResidue,unsigned int >::size_type":
        """size(mapOEResidueUnsigned self) -> std::map< OEChem::OEResidue,unsigned int >::size_type"""
        return _oespruce.mapOEResidueUnsigned_size(self)


    def swap(self, v: 'mapOEResidueUnsigned') -> "void":
        """swap(mapOEResidueUnsigned self, mapOEResidueUnsigned v)"""
        return _oespruce.mapOEResidueUnsigned_swap(self, v)


    def begin(self) -> "std::map< OEChem::OEResidue,unsigned int >::iterator":
        """begin(mapOEResidueUnsigned self) -> std::map< OEChem::OEResidue,unsigned int >::iterator"""
        return _oespruce.mapOEResidueUnsigned_begin(self)


    def end(self) -> "std::map< OEChem::OEResidue,unsigned int >::iterator":
        """end(mapOEResidueUnsigned self) -> std::map< OEChem::OEResidue,unsigned int >::iterator"""
        return _oespruce.mapOEResidueUnsigned_end(self)


    def rbegin(self) -> "std::map< OEChem::OEResidue,unsigned int >::reverse_iterator":
        """rbegin(mapOEResidueUnsigned self) -> std::map< OEChem::OEResidue,unsigned int >::reverse_iterator"""
        return _oespruce.mapOEResidueUnsigned_rbegin(self)


    def rend(self) -> "std::map< OEChem::OEResidue,unsigned int >::reverse_iterator":
        """rend(mapOEResidueUnsigned self) -> std::map< OEChem::OEResidue,unsigned int >::reverse_iterator"""
        return _oespruce.mapOEResidueUnsigned_rend(self)


    def clear(self) -> "void":
        """clear(mapOEResidueUnsigned self)"""
        return _oespruce.mapOEResidueUnsigned_clear(self)


    def get_allocator(self) -> "std::map< OEChem::OEResidue,unsigned int >::allocator_type":
        """get_allocator(mapOEResidueUnsigned self) -> std::map< OEChem::OEResidue,unsigned int >::allocator_type"""
        return _oespruce.mapOEResidueUnsigned_get_allocator(self)


    def count(self, x: 'OEResidue') -> "std::map< OEChem::OEResidue,unsigned int >::size_type":
        """count(mapOEResidueUnsigned self, OEResidue x) -> std::map< OEChem::OEResidue,unsigned int >::size_type"""
        return _oespruce.mapOEResidueUnsigned_count(self, x)


    def erase(self, *args) -> "void":
        """
        erase(mapOEResidueUnsigned self, OEResidue x) -> std::map< OEChem::OEResidue,unsigned int >::size_type
        erase(mapOEResidueUnsigned self, std::map< OEChem::OEResidue,unsigned int >::iterator position)
        erase(mapOEResidueUnsigned self, std::map< OEChem::OEResidue,unsigned int >::iterator first, std::map< OEChem::OEResidue,unsigned int >::iterator last)
        """
        return _oespruce.mapOEResidueUnsigned_erase(self, *args)


    def find(self, x: 'OEResidue') -> "std::map< OEChem::OEResidue,unsigned int >::iterator":
        """find(mapOEResidueUnsigned self, OEResidue x) -> std::map< OEChem::OEResidue,unsigned int >::iterator"""
        return _oespruce.mapOEResidueUnsigned_find(self, x)


    def lower_bound(self, x: 'OEResidue') -> "std::map< OEChem::OEResidue,unsigned int >::iterator":
        """lower_bound(mapOEResidueUnsigned self, OEResidue x) -> std::map< OEChem::OEResidue,unsigned int >::iterator"""
        return _oespruce.mapOEResidueUnsigned_lower_bound(self, x)


    def upper_bound(self, x: 'OEResidue') -> "std::map< OEChem::OEResidue,unsigned int >::iterator":
        """upper_bound(mapOEResidueUnsigned self, OEResidue x) -> std::map< OEChem::OEResidue,unsigned int >::iterator"""
        return _oespruce.mapOEResidueUnsigned_upper_bound(self, x)

    __swig_destroy__ = _oespruce.delete_mapOEResidueUnsigned
    __del__ = lambda self: None
mapOEResidueUnsigned_swigregister = _oespruce.mapOEResidueUnsigned_swigregister
mapOEResidueUnsigned_swigregister(mapOEResidueUnsigned)

class OEDesignUnitMutationOptions(object):
    """Proxy of C++ OESpruce::OEDesignUnitMutationOptions class."""

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

    def __init__(self, *args):
        """
        __init__(OESpruce::OEDesignUnitMutationOptions self) -> OEDesignUnitMutationOptions
        __init__(OESpruce::OEDesignUnitMutationOptions self, OEDesignUnitMutationOptions arg2) -> OEDesignUnitMutationOptions
        """
        this = _oespruce.new_OEDesignUnitMutationOptions(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OEDesignUnitMutationOptions
    __del__ = lambda self: None

    def SetMutations(self, mutations: 'mapOEResidueUnsigned') -> "void":
        """SetMutations(OEDesignUnitMutationOptions self, mapOEResidueUnsigned mutations)"""
        return _oespruce.OEDesignUnitMutationOptions_SetMutations(self, mutations)


    def GetMutations(self) -> "std::map< OEChem::OEResidue,unsigned int,std::less< OEChem::OEResidue >,std::allocator< std::pair< OEChem::OEResidue const,unsigned int > > >":
        """GetMutations(OEDesignUnitMutationOptions self) -> mapOEResidueUnsigned"""
        return _oespruce.OEDesignUnitMutationOptions_GetMutations(self)


    def AddMutation(self, mutationRes: 'OEResidue', targetIdx: 'unsigned int const') -> "void":
        """AddMutation(OEDesignUnitMutationOptions self, OEResidue mutationRes, unsigned int const targetIdx)"""
        return _oespruce.OEDesignUnitMutationOptions_AddMutation(self, mutationRes, targetIdx)


    def ClearMutations(self) -> "void":
        """ClearMutations(OEDesignUnitMutationOptions self)"""
        return _oespruce.OEDesignUnitMutationOptions_ClearMutations(self)

OEDesignUnitMutationOptions_swigregister = _oespruce.OEDesignUnitMutationOptions_swigregister
OEDesignUnitMutationOptions_swigregister(OEDesignUnitMutationOptions)


def OEMutateResidues(*args) -> "bool":
    """
    OEMutateResidues(OEMolBase mol, OEDesignUnitMutationOptions opts) -> bool
    OEMutateResidues(OEMolBase mol, mapOEResidueString mutationMap, OESidechainBuilderOptions opts) -> bool
    OEMutateResidues(OEMolBase mol, mapOEResidueString mutationMap) -> bool
    OEMutateResidues(OEDesignUnit du, mapOEResidueString mutationMap, OESidechainBuilderOptions opts) -> bool
    OEMutateResidues(OEDesignUnit du, mapOEResidueString mutationMap) -> bool
    """
    return _oespruce.OEMutateResidues(*args)

def OEMutateResidue(*args) -> "bool":
    """
    OEMutateResidue(OEMolBase mol, OEResidue res, std::string const newResName, OESidechainBuilderOptions opts) -> bool
    OEMutateResidue(OEMolBase mol, OEResidue res, std::string const newResName) -> bool
    OEMutateResidue(OEDesignUnit du, OEResidue res, std::string const newResName, OESidechainBuilderOptions opts) -> bool
    OEMutateResidue(OEDesignUnit du, OEResidue res, std::string const newResName) -> bool
    """
    return _oespruce.OEMutateResidue(*args)

def OECapTermini(*args) -> "bool":
    """
    OECapTermini(OEDesignUnit du, OEUnaryAtomPred exclude, OECapBuilderOptions arg3) -> bool
    OECapTermini(OEDesignUnit du, OEUnaryAtomPred exclude) -> bool
    OECapTermini(OEDesignUnit du) -> bool
    OECapTermini(OEMolBase mol, OEUnaryAtomPred exclude, OECapBuilderOptions arg3) -> bool
    OECapTermini(OEMolBase mol, OEUnaryAtomPred exclude) -> bool
    OECapTermini(OEMolBase mol) -> bool
    """
    return _oespruce.OECapTermini(*args)

def OECapNTermini(*args) -> "bool":
    """
    OECapNTermini(OEDesignUnit du, OEUnaryAtomPred exclude, OECapBuilderOptions arg3) -> bool
    OECapNTermini(OEDesignUnit du, OEUnaryAtomPred exclude) -> bool
    OECapNTermini(OEDesignUnit du) -> bool
    OECapNTermini(OEMolBase mol, OEUnaryAtomPred exclude, OECapBuilderOptions arg3) -> bool
    OECapNTermini(OEMolBase mol, OEUnaryAtomPred exclude) -> bool
    OECapNTermini(OEMolBase mol) -> bool
    """
    return _oespruce.OECapNTermini(*args)

def OECapCTermini(*args) -> "bool":
    """
    OECapCTermini(OEDesignUnit du, OEUnaryAtomPred exclude, OECapBuilderOptions arg3) -> bool
    OECapCTermini(OEDesignUnit du, OEUnaryAtomPred exclude) -> bool
    OECapCTermini(OEDesignUnit du) -> bool
    OECapCTermini(OEMolBase mol, OEUnaryAtomPred exclude, OECapBuilderOptions arg3) -> bool
    OECapCTermini(OEMolBase mol, OEUnaryAtomPred exclude) -> bool
    OECapCTermini(OEMolBase mol) -> bool
    """
    return _oespruce.OECapCTermini(*args)

def OEGetPartialResidues(*args) -> "std::vector< OEChem::OEResidue,std::allocator< OEChem::OEResidue > >":
    """
    OEGetPartialResidues(OEMolBase mol) -> OEResidueVector
    OEGetPartialResidues(OEDesignUnit du) -> OEResidueVector
    """
    return _oespruce.OEGetPartialResidues(*args)

def OEBuildSidechains(*args) -> "bool":
    """
    OEBuildSidechains(OEDesignUnit du, OESidechainBuilderOptions opts) -> bool
    OEBuildSidechains(OEDesignUnit du) -> bool
    OEBuildSidechains(OEDesignUnit du, OEResidueVector residues, OESidechainBuilderOptions opts) -> bool
    OEBuildSidechains(OEDesignUnit du, OEResidueVector residues) -> bool
    OEBuildSidechains(OEMolBase mol, OESidechainBuilderOptions opts) -> bool
    OEBuildSidechains(OEMolBase mol) -> bool
    OEBuildSidechains(OEMolBase mol, OEResidueVector residues, OESidechainBuilderOptions opts) -> bool
    OEBuildSidechains(OEMolBase mol, OEResidueVector residues) -> bool
    """
    return _oespruce.OEBuildSidechains(*args)

def OEFixBackbone(du: 'OEDesignUnit') -> "bool":
    """OEFixBackbone(OEDesignUnit du) -> bool"""
    return _oespruce.OEFixBackbone(du)
class OEIsModeledAtom(oechem.OEUnaryAtomPred):
    """Proxy of C++ OESpruce::OEIsModeledAtom class."""

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

    def __init__(self):
        """__init__(OESpruce::OEIsModeledAtom self) -> OEIsModeledAtom"""
        this = _oespruce.new_OEIsModeledAtom()
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this

    def __call__(self, atom: 'OEAtomBase') -> "bool":
        """__call__(OEIsModeledAtom self, OEAtomBase atom) -> bool"""
        return _oespruce.OEIsModeledAtom___call__(self, atom)


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


    __swig_destroy__ = _oespruce.delete_OEIsModeledAtom
    __del__ = lambda self: None
OEIsModeledAtom_swigregister = _oespruce.OEIsModeledAtom_swigregister
OEIsModeledAtom_swigregister(OEIsModeledAtom)


def OEMakePackingResidueMolecule(packingMol: 'OEMolBase', bioUnit: 'OEMolBase', asymmetricUnit: 'OEMolBase', buffer: 'double const'=8.0) -> "bool":
    """
    OEMakePackingResidueMolecule(OEMolBase packingMol, OEMolBase bioUnit, OEMolBase asymmetricUnit, double const buffer=8.0) -> bool
    OEMakePackingResidueMolecule(OEMolBase packingMol, OEMolBase bioUnit, OEMolBase asymmetricUnit) -> bool
    """
    return _oespruce.OEMakePackingResidueMolecule(packingMol, bioUnit, asymmetricUnit, buffer)

def OESetPackingResidueProperties(packingMol: 'OEMolBase', existingChainIDs: 'OEStringVector') -> "void":
    """OESetPackingResidueProperties(OEMolBase packingMol, OEStringVector existingChainIDs)"""
    return _oespruce.OESetPackingResidueProperties(packingMol, existingChainIDs)

def OEShiftChainAmbiguousComponents(bioUnit: 'OEMolBase', packingMol: 'OEMolBase', dist: 'double const'=4.0) -> "void":
    """
    OEShiftChainAmbiguousComponents(OEMolBase bioUnit, OEMolBase packingMol, double const dist=4.0)
    OEShiftChainAmbiguousComponents(OEMolBase bioUnit, OEMolBase packingMol)
    """
    return _oespruce.OEShiftChainAmbiguousComponents(bioUnit, packingMol, dist)
class OESidechainBuilderOptions(oechem.OEOptions):
    """Proxy of C++ OESpruce::OESidechainBuilderOptions class."""

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

    def __init__(self, *args):
        """
        __init__(OESpruce::OESidechainBuilderOptions self) -> OESidechainBuilderOptions
        __init__(OESpruce::OESidechainBuilderOptions self, OESidechainBuilderOptions arg2) -> OESidechainBuilderOptions
        """
        this = _oespruce.new_OESidechainBuilderOptions(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OESidechainBuilderOptions
    __del__ = lambda self: None

    def CreateCopy(self) -> "OESpruce::OESidechainBuilderOptions *":
        """CreateCopy(OESidechainBuilderOptions self) -> OESidechainBuilderOptions"""
        return _oespruce.OESidechainBuilderOptions_CreateCopy(self)


    def GetDeleteClashingSolvent(self) -> "bool":
        """GetDeleteClashingSolvent(OESidechainBuilderOptions self) -> bool"""
        return _oespruce.OESidechainBuilderOptions_GetDeleteClashingSolvent(self)


    def SetDeleteClashingSolvent(self, value: 'bool const') -> "bool":
        """SetDeleteClashingSolvent(OESidechainBuilderOptions self, bool const value) -> bool"""
        return _oespruce.OESidechainBuilderOptions_SetDeleteClashingSolvent(self, value)


    def GetRotamerCoverage(self) -> "double":
        """GetRotamerCoverage(OESidechainBuilderOptions self) -> double"""
        return _oespruce.OESidechainBuilderOptions_GetRotamerCoverage(self)


    def SetRotamerCoverage(self, value: 'double const') -> "bool":
        """SetRotamerCoverage(OESidechainBuilderOptions self, double const value) -> bool"""
        return _oespruce.OESidechainBuilderOptions_SetRotamerCoverage(self, value)


    def GetRotamerLibrary(self) -> "unsigned int":
        """GetRotamerLibrary(OESidechainBuilderOptions self) -> unsigned int"""
        return _oespruce.OESidechainBuilderOptions_GetRotamerLibrary(self)


    def SetRotamerLibrary(self, value: 'unsigned int const') -> "bool":
        """SetRotamerLibrary(OESidechainBuilderOptions self, unsigned int const value) -> bool"""
        return _oespruce.OESidechainBuilderOptions_SetRotamerLibrary(self, value)


    def GetStrictMode(self) -> "bool":
        """GetStrictMode(OESidechainBuilderOptions self) -> bool"""
        return _oespruce.OESidechainBuilderOptions_GetStrictMode(self)


    def SetStrictMode(self, value: 'bool const') -> "bool":
        """SetStrictMode(OESidechainBuilderOptions self, bool const value) -> bool"""
        return _oespruce.OESidechainBuilderOptions_SetStrictMode(self, value)

OESidechainBuilderOptions_swigregister = _oespruce.OESidechainBuilderOptions_swigregister
OESidechainBuilderOptions_swigregister(OESidechainBuilderOptions)

class OECapBuilderOptions(oechem.OEOptions):
    """Proxy of C++ OESpruce::OECapBuilderOptions class."""

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

    def __init__(self, *args):
        """
        __init__(OESpruce::OECapBuilderOptions self) -> OECapBuilderOptions
        __init__(OESpruce::OECapBuilderOptions self, OECapBuilderOptions arg2) -> OECapBuilderOptions
        """
        this = _oespruce.new_OECapBuilderOptions(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OECapBuilderOptions
    __del__ = lambda self: None

    def CreateCopy(self) -> "OESpruce::OECapBuilderOptions *":
        """CreateCopy(OECapBuilderOptions self) -> OECapBuilderOptions"""
        return _oespruce.OECapBuilderOptions_CreateCopy(self)


    def GetDeleteClashingSolvent(self) -> "bool":
        """GetDeleteClashingSolvent(OECapBuilderOptions self) -> bool"""
        return _oespruce.OECapBuilderOptions_GetDeleteClashingSolvent(self)


    def SetDeleteClashingSolvent(self, value: 'bool const') -> "bool":
        """SetDeleteClashingSolvent(OECapBuilderOptions self, bool const value) -> bool"""
        return _oespruce.OECapBuilderOptions_SetDeleteClashingSolvent(self, value)


    def GetAllowTruncate(self) -> "bool":
        """GetAllowTruncate(OECapBuilderOptions self) -> bool"""
        return _oespruce.OECapBuilderOptions_GetAllowTruncate(self)


    def SetAllowTruncate(self, value: 'bool const') -> "bool":
        """SetAllowTruncate(OECapBuilderOptions self, bool const value) -> bool"""
        return _oespruce.OECapBuilderOptions_SetAllowTruncate(self, value)

OECapBuilderOptions_swigregister = _oespruce.OECapBuilderOptions_swigregister
OECapBuilderOptions_swigregister(OECapBuilderOptions)

class OELoopBuilderOptions(oechem.OEOptions):
    """Proxy of C++ OESpruce::OELoopBuilderOptions class."""

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

    def __init__(self, *args):
        """
        __init__(OESpruce::OELoopBuilderOptions self) -> OELoopBuilderOptions
        __init__(OESpruce::OELoopBuilderOptions self, OELoopBuilderOptions arg2) -> OELoopBuilderOptions
        """
        this = _oespruce.new_OELoopBuilderOptions(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OELoopBuilderOptions
    __del__ = lambda self: None

    def CreateCopy(self) -> "OESpruce::OELoopBuilderOptions *":
        """CreateCopy(OELoopBuilderOptions self) -> OELoopBuilderOptions"""
        return _oespruce.OELoopBuilderOptions_CreateCopy(self)


    def GetUsePackingResidues(self) -> "bool":
        """GetUsePackingResidues(OELoopBuilderOptions self) -> bool"""
        return _oespruce.OELoopBuilderOptions_GetUsePackingResidues(self)


    def SetUsePackingResidues(self, value: 'bool const') -> "bool":
        """SetUsePackingResidues(OELoopBuilderOptions self, bool const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetUsePackingResidues(self, value)


    def GetLoopDBFilename(self) -> "std::string":
        """GetLoopDBFilename(OELoopBuilderOptions self) -> std::string"""
        return _oespruce.OELoopBuilderOptions_GetLoopDBFilename(self)


    def SetLoopDBFilename(self, value: 'std::string const') -> "bool":
        """SetLoopDBFilename(OELoopBuilderOptions self, std::string const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetLoopDBFilename(self, value)


    def GetCropLength(self) -> "unsigned int":
        """GetCropLength(OELoopBuilderOptions self) -> unsigned int"""
        return _oespruce.OELoopBuilderOptions_GetCropLength(self)


    def SetCropLength(self, value: 'unsigned int const') -> "bool":
        """SetCropLength(OELoopBuilderOptions self, unsigned int const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetCropLength(self, value)


    def GetTransformThreshold(self) -> "unsigned int":
        """GetTransformThreshold(OELoopBuilderOptions self) -> unsigned int"""
        return _oespruce.OELoopBuilderOptions_GetTransformThreshold(self)


    def SetTransformThreshold(self, value: 'unsigned int const') -> "bool":
        """SetTransformThreshold(OELoopBuilderOptions self, unsigned int const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetTransformThreshold(self, value)


    def GetStrictProlineMatch(self) -> "bool":
        """GetStrictProlineMatch(OELoopBuilderOptions self) -> bool"""
        return _oespruce.OELoopBuilderOptions_GetStrictProlineMatch(self)


    def SetStrictProlineMatch(self, value: 'bool const') -> "bool":
        """SetStrictProlineMatch(OELoopBuilderOptions self, bool const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetStrictProlineMatch(self, value)


    def GetConnectBufferDistance(self) -> "double":
        """GetConnectBufferDistance(OELoopBuilderOptions self) -> double"""
        return _oespruce.OELoopBuilderOptions_GetConnectBufferDistance(self)


    def SetConnectBufferDistance(self, value: 'double const') -> "bool":
        """SetConnectBufferDistance(OELoopBuilderOptions self, double const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetConnectBufferDistance(self, value)


    def GetBackboneClashRejectThreshold(self) -> "double":
        """GetBackboneClashRejectThreshold(OELoopBuilderOptions self) -> double"""
        return _oespruce.OELoopBuilderOptions_GetBackboneClashRejectThreshold(self)


    def SetBackboneClashRejectThreshold(self, value: 'double const') -> "bool":
        """SetBackboneClashRejectThreshold(OELoopBuilderOptions self, double const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetBackboneClashRejectThreshold(self, value)


    def GetLoopClashRejectThreshold(self) -> "double":
        """GetLoopClashRejectThreshold(OELoopBuilderOptions self) -> double"""
        return _oespruce.OELoopBuilderOptions_GetLoopClashRejectThreshold(self)


    def SetLoopClashRejectThreshold(self, value: 'double const') -> "bool":
        """SetLoopClashRejectThreshold(OELoopBuilderOptions self, double const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetLoopClashRejectThreshold(self, value)


    def GetOptimizationShell(self) -> "double":
        """GetOptimizationShell(OELoopBuilderOptions self) -> double"""
        return _oespruce.OELoopBuilderOptions_GetOptimizationShell(self)


    def SetOptimizationShell(self, value: 'double const') -> "bool":
        """SetOptimizationShell(OELoopBuilderOptions self, double const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetOptimizationShell(self, value)


    def GetOptimizationTolerance(self) -> "double":
        """GetOptimizationTolerance(OELoopBuilderOptions self) -> double"""
        return _oespruce.OELoopBuilderOptions_GetOptimizationTolerance(self)


    def SetOptimizationTolerance(self, value: 'double const') -> "bool":
        """SetOptimizationTolerance(OELoopBuilderOptions self, double const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetOptimizationTolerance(self, value)


    def GetOptimizationStage1IterMultiplier(self) -> "unsigned int":
        """GetOptimizationStage1IterMultiplier(OELoopBuilderOptions self) -> unsigned int"""
        return _oespruce.OELoopBuilderOptions_GetOptimizationStage1IterMultiplier(self)


    def SetOptimizationStage1IterMultiplier(self, value: 'unsigned int const') -> "bool":
        """SetOptimizationStage1IterMultiplier(OELoopBuilderOptions self, unsigned int const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetOptimizationStage1IterMultiplier(self, value)


    def GetOptimizationStage2IterMultiplier(self) -> "unsigned int":
        """GetOptimizationStage2IterMultiplier(OELoopBuilderOptions self) -> unsigned int"""
        return _oespruce.OELoopBuilderOptions_GetOptimizationStage2IterMultiplier(self)


    def SetOptimizationStage2IterMultiplier(self, value: 'unsigned int const') -> "bool":
        """SetOptimizationStage2IterMultiplier(OELoopBuilderOptions self, unsigned int const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetOptimizationStage2IterMultiplier(self, value)


    def GetOptimizationUseSolventModel(self) -> "bool":
        """GetOptimizationUseSolventModel(OELoopBuilderOptions self) -> bool"""
        return _oespruce.OELoopBuilderOptions_GetOptimizationUseSolventModel(self)


    def SetOptimizationUseSolventModel(self, value: 'bool const') -> "bool":
        """SetOptimizationUseSolventModel(OELoopBuilderOptions self, bool const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetOptimizationUseSolventModel(self, value)


    def GetOptimizationInclSurfaceAreaTerm(self) -> "bool":
        """GetOptimizationInclSurfaceAreaTerm(OELoopBuilderOptions self) -> bool"""
        return _oespruce.OELoopBuilderOptions_GetOptimizationInclSurfaceAreaTerm(self)


    def SetOptimizationInclSurfaceAreaTerm(self, value: 'bool const') -> "bool":
        """SetOptimizationInclSurfaceAreaTerm(OELoopBuilderOptions self, bool const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetOptimizationInclSurfaceAreaTerm(self, value)


    def GetOptimizationMaxLoops(self) -> "unsigned int":
        """GetOptimizationMaxLoops(OELoopBuilderOptions self) -> unsigned int"""
        return _oespruce.OELoopBuilderOptions_GetOptimizationMaxLoops(self)


    def SetOptimizationMaxLoops(self, value: 'unsigned int const') -> "bool":
        """SetOptimizationMaxLoops(OELoopBuilderOptions self, unsigned int const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetOptimizationMaxLoops(self, value)


    def GetAllowBuildDisulfideBridges(self) -> "bool":
        """GetAllowBuildDisulfideBridges(OELoopBuilderOptions self) -> bool"""
        return _oespruce.OELoopBuilderOptions_GetAllowBuildDisulfideBridges(self)


    def SetAllowBuildDisulfideBridges(self, value: 'bool const') -> "bool":
        """SetAllowBuildDisulfideBridges(OELoopBuilderOptions self, bool const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetAllowBuildDisulfideBridges(self, value)

OELoopBuilderOptions_swigregister = _oespruce.OELoopBuilderOptions_swigregister
OELoopBuilderOptions_swigregister(OELoopBuilderOptions)

class OEDesignUnitSplitOptions(object):
    """Proxy of C++ OESpruce::OEDesignUnitSplitOptions class."""

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

    def __init__(self, *args):
        """
        __init__(OESpruce::OEDesignUnitSplitOptions self) -> OEDesignUnitSplitOptions
        __init__(OESpruce::OEDesignUnitSplitOptions self, OEDesignUnitSplitOptions arg2) -> OEDesignUnitSplitOptions
        """
        this = _oespruce.new_OEDesignUnitSplitOptions(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OEDesignUnitSplitOptions
    __del__ = lambda self: None

    def SetAlternateLocationHandling(self, altLocHandling: 'unsigned int') -> "void":
        """SetAlternateLocationHandling(OEDesignUnitSplitOptions self, unsigned int altLocHandling)"""
        return _oespruce.OEDesignUnitSplitOptions_SetAlternateLocationHandling(self, altLocHandling)


    def GetAlternateLocationHandling(self) -> "unsigned int":
        """GetAlternateLocationHandling(OEDesignUnitSplitOptions self) -> unsigned int"""
        return _oespruce.OEDesignUnitSplitOptions_GetAlternateLocationHandling(self)


    def SetMinLigAtoms(self, minLigAtoms: 'unsigned int') -> "void":
        """SetMinLigAtoms(OEDesignUnitSplitOptions self, unsigned int minLigAtoms)"""
        return _oespruce.OEDesignUnitSplitOptions_SetMinLigAtoms(self, minLigAtoms)


    def GetMinLigAtoms(self) -> "unsigned int":
        """GetMinLigAtoms(OEDesignUnitSplitOptions self) -> unsigned int"""
        return _oespruce.OEDesignUnitSplitOptions_GetMinLigAtoms(self)


    def SetMaxLigAtoms(self, maxLigAtoms: 'unsigned int') -> "void":
        """SetMaxLigAtoms(OEDesignUnitSplitOptions self, unsigned int maxLigAtoms)"""
        return _oespruce.OEDesignUnitSplitOptions_SetMaxLigAtoms(self, maxLigAtoms)


    def GetMaxLigAtoms(self) -> "unsigned int":
        """GetMaxLigAtoms(OEDesignUnitSplitOptions self) -> unsigned int"""
        return _oespruce.OEDesignUnitSplitOptions_GetMaxLigAtoms(self)


    def SetMaxLigResidues(self, maxLigResidues: 'unsigned int') -> "void":
        """SetMaxLigResidues(OEDesignUnitSplitOptions self, unsigned int maxLigResidues)"""
        return _oespruce.OEDesignUnitSplitOptions_SetMaxLigResidues(self, maxLigResidues)


    def GetMaxLigResidues(self) -> "unsigned int":
        """GetMaxLigResidues(OEDesignUnitSplitOptions self) -> unsigned int"""
        return _oespruce.OEDesignUnitSplitOptions_GetMaxLigResidues(self)


    def SetMaxSystemAtoms(self, maxSystemAtoms: 'unsigned int') -> "void":
        """SetMaxSystemAtoms(OEDesignUnitSplitOptions self, unsigned int maxSystemAtoms)"""
        return _oespruce.OEDesignUnitSplitOptions_SetMaxSystemAtoms(self, maxSystemAtoms)


    def GetMaxSystemAtoms(self) -> "unsigned int":
        """GetMaxSystemAtoms(OEDesignUnitSplitOptions self) -> unsigned int"""
        return _oespruce.OEDesignUnitSplitOptions_GetMaxSystemAtoms(self)


    def SetTargetComponentID(self, targetCompID: 'unsigned int') -> "void":
        """SetTargetComponentID(OEDesignUnitSplitOptions self, unsigned int targetCompID)"""
        return _oespruce.OEDesignUnitSplitOptions_SetTargetComponentID(self, targetCompID)


    def GetTargetComponentID(self) -> "unsigned int":
        """GetTargetComponentID(OEDesignUnitSplitOptions self) -> unsigned int"""
        return _oespruce.OEDesignUnitSplitOptions_GetTargetComponentID(self)


    def SetMakePackingResidues(self, makePackingResidues: 'bool') -> "void":
        """SetMakePackingResidues(OEDesignUnitSplitOptions self, bool makePackingResidues)"""
        return _oespruce.OEDesignUnitSplitOptions_SetMakePackingResidues(self, makePackingResidues)


    def GetMakePackingResidues(self) -> "bool":
        """GetMakePackingResidues(OEDesignUnitSplitOptions self) -> bool"""
        return _oespruce.OEDesignUnitSplitOptions_GetMakePackingResidues(self)


    def SetExcipientCodes(self, argValue: 'OEStringVector') -> "void":
        """SetExcipientCodes(OEDesignUnitSplitOptions self, OEStringVector argValue)"""
        return _oespruce.OEDesignUnitSplitOptions_SetExcipientCodes(self, argValue)


    def GetExcipientCodes(self, *args) -> "std::vector< std::string,std::allocator< std::string > > const &":
        """
        GetExcipientCodes(OEDesignUnitSplitOptions self) -> OEStringVector
        GetExcipientCodes(OEDesignUnitSplitOptions self) -> OEStringVector
        """
        return _oespruce.OEDesignUnitSplitOptions_GetExcipientCodes(self, *args)


    def AddExcipientCode(self, argValue: 'std::string const') -> "void":
        """AddExcipientCode(OEDesignUnitSplitOptions self, std::string const argValue)"""
        return _oespruce.OEDesignUnitSplitOptions_AddExcipientCode(self, argValue)


    def ClearExcipientCodes(self) -> "void":
        """ClearExcipientCodes(OEDesignUnitSplitOptions self)"""
        return _oespruce.OEDesignUnitSplitOptions_ClearExcipientCodes(self)


    def SetCofactorCodes(self, argValue: 'OEStringVector') -> "void":
        """SetCofactorCodes(OEDesignUnitSplitOptions self, OEStringVector argValue)"""
        return _oespruce.OEDesignUnitSplitOptions_SetCofactorCodes(self, argValue)


    def GetCofactorCodes(self, *args) -> "std::vector< std::string,std::allocator< std::string > > const &":
        """
        GetCofactorCodes(OEDesignUnitSplitOptions self) -> OEStringVector
        GetCofactorCodes(OEDesignUnitSplitOptions self) -> OEStringVector
        """
        return _oespruce.OEDesignUnitSplitOptions_GetCofactorCodes(self, *args)


    def AddCofactorCode(self, argValue: 'std::string const') -> "void":
        """AddCofactorCode(OEDesignUnitSplitOptions self, std::string const argValue)"""
        return _oespruce.OEDesignUnitSplitOptions_AddCofactorCode(self, argValue)


    def ClearCofactorCodes(self) -> "void":
        """ClearCofactorCodes(OEDesignUnitSplitOptions self)"""
        return _oespruce.OEDesignUnitSplitOptions_ClearCofactorCodes(self)

OEDesignUnitSplitOptions_swigregister = _oespruce.OEDesignUnitSplitOptions_swigregister
OEDesignUnitSplitOptions_swigregister(OEDesignUnitSplitOptions)

class OEDesignUnitEnumerateSitesOptions(object):
    """Proxy of C++ OESpruce::OEDesignUnitEnumerateSitesOptions class."""

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

    def __init__(self, *args):
        """
        __init__(OESpruce::OEDesignUnitEnumerateSitesOptions self) -> OEDesignUnitEnumerateSitesOptions
        __init__(OESpruce::OEDesignUnitEnumerateSitesOptions self, OEDesignUnitEnumerateSitesOptions arg2) -> OEDesignUnitEnumerateSitesOptions
        """
        this = _oespruce.new_OEDesignUnitEnumerateSitesOptions(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OEDesignUnitEnumerateSitesOptions
    __del__ = lambda self: None

    def SetCollapseNonSiteAlts(self, collapseNonSiteAlts: 'bool') -> "void":
        """SetCollapseNonSiteAlts(OEDesignUnitEnumerateSitesOptions self, bool collapseNonSiteAlts)"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_SetCollapseNonSiteAlts(self, collapseNonSiteAlts)


    def GetCollapseNonSiteAlts(self) -> "bool":
        """GetCollapseNonSiteAlts(OEDesignUnitEnumerateSitesOptions self) -> bool"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_GetCollapseNonSiteAlts(self)


    def SetDuplicateRemoval(self, duplicateRemoval: 'bool') -> "void":
        """SetDuplicateRemoval(OEDesignUnitEnumerateSitesOptions self, bool duplicateRemoval)"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_SetDuplicateRemoval(self, duplicateRemoval)


    def GetDuplicateRemoval(self) -> "bool":
        """GetDuplicateRemoval(OEDesignUnitEnumerateSitesOptions self) -> bool"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_GetDuplicateRemoval(self)


    def SetRestrictToRefSite(self, restrictToRefSite: 'bool') -> "void":
        """SetRestrictToRefSite(OEDesignUnitEnumerateSitesOptions self, bool restrictToRefSite)"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_SetRestrictToRefSite(self, restrictToRefSite)


    def GetRestrictToRefSite(self) -> "bool":
        """GetRestrictToRefSite(OEDesignUnitEnumerateSitesOptions self) -> bool"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_GetRestrictToRefSite(self)


    def SetEnumerateCofactorSites(self, enumCofactorSites: 'bool') -> "void":
        """SetEnumerateCofactorSites(OEDesignUnitEnumerateSitesOptions self, bool enumCofactorSites)"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_SetEnumerateCofactorSites(self, enumCofactorSites)


    def GetEnumerateCofactorSites(self) -> "bool":
        """GetEnumerateCofactorSites(OEDesignUnitEnumerateSitesOptions self) -> bool"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_GetEnumerateCofactorSites(self)


    def SetSiteSize(self, siteSize: 'double') -> "void":
        """SetSiteSize(OEDesignUnitEnumerateSitesOptions self, double siteSize)"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_SetSiteSize(self, siteSize)


    def GetSiteSize(self) -> "double":
        """GetSiteSize(OEDesignUnitEnumerateSitesOptions self) -> double"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_GetSiteSize(self)


    def SetAddInteractionHints(self, addInteractions: 'bool') -> "void":
        """SetAddInteractionHints(OEDesignUnitEnumerateSitesOptions self, bool addInteractions)"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_SetAddInteractionHints(self, addInteractions)


    def GetAddInteractionHints(self) -> "bool":
        """GetAddInteractionHints(OEDesignUnitEnumerateSitesOptions self) -> bool"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_GetAddInteractionHints(self)


    def SetAddStyle(self, addStyle: 'bool') -> "void":
        """SetAddStyle(OEDesignUnitEnumerateSitesOptions self, bool addStyle)"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_SetAddStyle(self, addStyle)


    def GetAddStyle(self) -> "bool":
        """GetAddStyle(OEDesignUnitEnumerateSitesOptions self) -> bool"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_GetAddStyle(self)

OEDesignUnitEnumerateSitesOptions_swigregister = _oespruce.OEDesignUnitEnumerateSitesOptions_swigregister
OEDesignUnitEnumerateSitesOptions_swigregister(OEDesignUnitEnumerateSitesOptions)

class OEDesignUnitBuildOptions(oechem.OEOptions):
    """Proxy of C++ OESpruce::OEDesignUnitBuildOptions class."""

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

    def __init__(self, *args):
        """
        __init__(OESpruce::OEDesignUnitBuildOptions self) -> OEDesignUnitBuildOptions
        __init__(OESpruce::OEDesignUnitBuildOptions self, OEDesignUnitBuildOptions arg2) -> OEDesignUnitBuildOptions
        """
        this = _oespruce.new_OEDesignUnitBuildOptions(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OEDesignUnitBuildOptions
    __del__ = lambda self: None

    def CreateCopy(self) -> "OESpruce::OEDesignUnitBuildOptions *":
        """CreateCopy(OEDesignUnitBuildOptions self) -> OEDesignUnitBuildOptions"""
        return _oespruce.OEDesignUnitBuildOptions_CreateCopy(self)


    def GetBuildSidechains(self) -> "bool":
        """GetBuildSidechains(OEDesignUnitBuildOptions self) -> bool"""
        return _oespruce.OEDesignUnitBuildOptions_GetBuildSidechains(self)


    def SetBuildSidechains(self, value: 'bool const') -> "bool":
        """SetBuildSidechains(OEDesignUnitBuildOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitBuildOptions_SetBuildSidechains(self, value)


    def GetBuildLoops(self) -> "bool":
        """GetBuildLoops(OEDesignUnitBuildOptions self) -> bool"""
        return _oespruce.OEDesignUnitBuildOptions_GetBuildLoops(self)


    def SetBuildLoops(self, value: 'bool const') -> "bool":
        """SetBuildLoops(OEDesignUnitBuildOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitBuildOptions_SetBuildLoops(self, value)


    def GetCapNTermini(self) -> "bool":
        """GetCapNTermini(OEDesignUnitBuildOptions self) -> bool"""
        return _oespruce.OEDesignUnitBuildOptions_GetCapNTermini(self)


    def SetCapNTermini(self, value: 'bool const') -> "bool":
        """SetCapNTermini(OEDesignUnitBuildOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitBuildOptions_SetCapNTermini(self, value)


    def GetCapCTermini(self) -> "bool":
        """GetCapCTermini(OEDesignUnitBuildOptions self) -> bool"""
        return _oespruce.OEDesignUnitBuildOptions_GetCapCTermini(self)


    def SetCapCTermini(self, value: 'bool const') -> "bool":
        """SetCapCTermini(OEDesignUnitBuildOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitBuildOptions_SetCapCTermini(self, value)


    def GetFixBackbone(self) -> "bool":
        """GetFixBackbone(OEDesignUnitBuildOptions self) -> bool"""
        return _oespruce.OEDesignUnitBuildOptions_GetFixBackbone(self)


    def SetFixBackbone(self, value: 'bool const') -> "bool":
        """SetFixBackbone(OEDesignUnitBuildOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitBuildOptions_SetFixBackbone(self, value)


    def SetSidechainBuilderOptions(self, opts: 'OESidechainBuilderOptions') -> "void":
        """SetSidechainBuilderOptions(OEDesignUnitBuildOptions self, OESidechainBuilderOptions opts)"""
        return _oespruce.OEDesignUnitBuildOptions_SetSidechainBuilderOptions(self, opts)


    def GetSidechainBuilderOptions(self, *args) -> "OESpruce::OESidechainBuilderOptions const &":
        """
        GetSidechainBuilderOptions(OEDesignUnitBuildOptions self) -> OESidechainBuilderOptions
        GetSidechainBuilderOptions(OEDesignUnitBuildOptions self) -> OESidechainBuilderOptions
        """
        return _oespruce.OEDesignUnitBuildOptions_GetSidechainBuilderOptions(self, *args)


    def SetCapBuilderOptions(self, opts: 'OECapBuilderOptions') -> "void":
        """SetCapBuilderOptions(OEDesignUnitBuildOptions self, OECapBuilderOptions opts)"""
        return _oespruce.OEDesignUnitBuildOptions_SetCapBuilderOptions(self, opts)


    def GetCapBuilderOptions(self, *args) -> "OESpruce::OECapBuilderOptions const &":
        """
        GetCapBuilderOptions(OEDesignUnitBuildOptions self) -> OECapBuilderOptions
        GetCapBuilderOptions(OEDesignUnitBuildOptions self) -> OECapBuilderOptions
        """
        return _oespruce.OEDesignUnitBuildOptions_GetCapBuilderOptions(self, *args)


    def SetLoopBuilderOptions(self, opts: 'OELoopBuilderOptions') -> "void":
        """SetLoopBuilderOptions(OEDesignUnitBuildOptions self, OELoopBuilderOptions opts)"""
        return _oespruce.OEDesignUnitBuildOptions_SetLoopBuilderOptions(self, opts)


    def GetLoopBuilderOptions(self, *args) -> "OESpruce::OELoopBuilderOptions const &":
        """
        GetLoopBuilderOptions(OEDesignUnitBuildOptions self) -> OELoopBuilderOptions
        GetLoopBuilderOptions(OEDesignUnitBuildOptions self) -> OELoopBuilderOptions
        """
        return _oespruce.OEDesignUnitBuildOptions_GetLoopBuilderOptions(self, *args)

OEDesignUnitBuildOptions_swigregister = _oespruce.OEDesignUnitBuildOptions_swigregister
OEDesignUnitBuildOptions_swigregister(OEDesignUnitBuildOptions)

class OEDesignUnitPrepOptions(object):
    """Proxy of C++ OESpruce::OEDesignUnitPrepOptions class."""

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

    def __init__(self, *args):
        """
        __init__(OESpruce::OEDesignUnitPrepOptions self) -> OEDesignUnitPrepOptions
        __init__(OESpruce::OEDesignUnitPrepOptions self, OEDesignUnitBuildOptions buildOpts, OEProtonateDesignUnitOptions protonateOpts, OEDesignUnitEnumerateSitesOptions enumOpts) -> OEDesignUnitPrepOptions
        __init__(OESpruce::OEDesignUnitPrepOptions self, OEDesignUnitPrepOptions arg2) -> OEDesignUnitPrepOptions
        """
        this = _oespruce.new_OEDesignUnitPrepOptions(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OEDesignUnitPrepOptions
    __del__ = lambda self: None

    def SetBuildOptions(self, buildOpts: 'OEDesignUnitBuildOptions') -> "void":
        """SetBuildOptions(OEDesignUnitPrepOptions self, OEDesignUnitBuildOptions buildOpts)"""
        return _oespruce.OEDesignUnitPrepOptions_SetBuildOptions(self, buildOpts)


    def GetBuildOptions(self, *args) -> "OESpruce::OEDesignUnitBuildOptions const &":
        """
        GetBuildOptions(OEDesignUnitPrepOptions self) -> OEDesignUnitBuildOptions
        GetBuildOptions(OEDesignUnitPrepOptions self) -> OEDesignUnitBuildOptions
        """
        return _oespruce.OEDesignUnitPrepOptions_GetBuildOptions(self, *args)


    def SetProtonateOptions(self, protonateOpts: 'OEProtonateDesignUnitOptions') -> "void":
        """SetProtonateOptions(OEDesignUnitPrepOptions self, OEProtonateDesignUnitOptions protonateOpts)"""
        return _oespruce.OEDesignUnitPrepOptions_SetProtonateOptions(self, protonateOpts)


    def GetProtonateOptions(self, *args) -> "OESpruce::OEProtonateDesignUnitOptions const &":
        """
        GetProtonateOptions(OEDesignUnitPrepOptions self) -> OEProtonateDesignUnitOptions
        GetProtonateOptions(OEDesignUnitPrepOptions self) -> OEProtonateDesignUnitOptions
        """
        return _oespruce.OEDesignUnitPrepOptions_GetProtonateOptions(self, *args)


    def SetEnumerateSitesOptions(self, enumOpts: 'OEDesignUnitEnumerateSitesOptions') -> "void":
        """SetEnumerateSitesOptions(OEDesignUnitPrepOptions self, OEDesignUnitEnumerateSitesOptions enumOpts)"""
        return _oespruce.OEDesignUnitPrepOptions_SetEnumerateSitesOptions(self, enumOpts)


    def GetEnumerateSitesOptions(self, *args) -> "OESpruce::OEDesignUnitEnumerateSitesOptions const &":
        """
        GetEnumerateSitesOptions(OEDesignUnitPrepOptions self) -> OEDesignUnitEnumerateSitesOptions
        GetEnumerateSitesOptions(OEDesignUnitPrepOptions self) -> OEDesignUnitEnumerateSitesOptions
        """
        return _oespruce.OEDesignUnitPrepOptions_GetEnumerateSitesOptions(self, *args)


    def SetAssignPartialChargesAndRadii(self, assignPartialChargesAndRadii: 'bool') -> "void":
        """SetAssignPartialChargesAndRadii(OEDesignUnitPrepOptions self, bool assignPartialChargesAndRadii)"""
        return _oespruce.OEDesignUnitPrepOptions_SetAssignPartialChargesAndRadii(self, assignPartialChargesAndRadii)


    def GetAssignPartialChargesAndRadii(self) -> "bool":
        """GetAssignPartialChargesAndRadii(OEDesignUnitPrepOptions self) -> bool"""
        return _oespruce.OEDesignUnitPrepOptions_GetAssignPartialChargesAndRadii(self)


    def SetChargeEngine(self, chargeEngine: 'OEProton::OEDesignUnitCharges') -> "void":
        """SetChargeEngine(OEDesignUnitPrepOptions self, OEProton::OEDesignUnitCharges chargeEngine)"""
        return _oespruce.OEDesignUnitPrepOptions_SetChargeEngine(self, chargeEngine)


    def GetChargeEngine(self) -> "OEProton::OEDesignUnitCharges &":
        """GetChargeEngine(OEDesignUnitPrepOptions self) -> OEProton::OEDesignUnitCharges &"""
        return _oespruce.OEDesignUnitPrepOptions_GetChargeEngine(self)


    def SetProtonate(self, protonate: 'bool const') -> "void":
        """SetProtonate(OEDesignUnitPrepOptions self, bool const protonate)"""
        return _oespruce.OEDesignUnitPrepOptions_SetProtonate(self, protonate)


    def GetProtonate(self) -> "bool":
        """GetProtonate(OEDesignUnitPrepOptions self) -> bool"""
        return _oespruce.OEDesignUnitPrepOptions_GetProtonate(self)


    def SetStrictProtonationMode(self, strictProtonate: 'bool const') -> "void":
        """SetStrictProtonationMode(OEDesignUnitPrepOptions self, bool const strictProtonate)"""
        return _oespruce.OEDesignUnitPrepOptions_SetStrictProtonationMode(self, strictProtonate)


    def GetStrictProtonationMode(self) -> "bool":
        """GetStrictProtonationMode(OEDesignUnitPrepOptions self) -> bool"""
        return _oespruce.OEDesignUnitPrepOptions_GetStrictProtonationMode(self)

OEDesignUnitPrepOptions_swigregister = _oespruce.OEDesignUnitPrepOptions_swigregister
OEDesignUnitPrepOptions_swigregister(OEDesignUnitPrepOptions)

class OEMakeDesignUnitOptions(object):
    """Proxy of C++ OESpruce::OEMakeDesignUnitOptions class."""

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

    def __init__(self, *args):
        """
        __init__(OESpruce::OEMakeDesignUnitOptions self) -> OEMakeDesignUnitOptions
        __init__(OESpruce::OEMakeDesignUnitOptions self, OEDesignUnitSplitOptions splitOpts, OEDesignUnitPrepOptions prepOpts, OEBioUnitExtractionOptions buExtractOpts) -> OEMakeDesignUnitOptions
        __init__(OESpruce::OEMakeDesignUnitOptions self, OEMakeDesignUnitOptions arg2) -> OEMakeDesignUnitOptions
        """
        this = _oespruce.new_OEMakeDesignUnitOptions(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OEMakeDesignUnitOptions
    __del__ = lambda self: None

    def SetSplitOptions(self, splitOpts: 'OEDesignUnitSplitOptions') -> "void":
        """SetSplitOptions(OEMakeDesignUnitOptions self, OEDesignUnitSplitOptions splitOpts)"""
        return _oespruce.OEMakeDesignUnitOptions_SetSplitOptions(self, splitOpts)


    def GetSplitOptions(self, *args) -> "OESpruce::OEDesignUnitSplitOptions const &":
        """
        GetSplitOptions(OEMakeDesignUnitOptions self) -> OEDesignUnitSplitOptions
        GetSplitOptions(OEMakeDesignUnitOptions self) -> OEDesignUnitSplitOptions
        """
        return _oespruce.OEMakeDesignUnitOptions_GetSplitOptions(self, *args)


    def SetPrepOptions(self, prepOpts: 'OEDesignUnitPrepOptions') -> "void":
        """SetPrepOptions(OEMakeDesignUnitOptions self, OEDesignUnitPrepOptions prepOpts)"""
        return _oespruce.OEMakeDesignUnitOptions_SetPrepOptions(self, prepOpts)


    def GetPrepOptions(self, *args) -> "OESpruce::OEDesignUnitPrepOptions const &":
        """
        GetPrepOptions(OEMakeDesignUnitOptions self) -> OEDesignUnitPrepOptions
        GetPrepOptions(OEMakeDesignUnitOptions self) -> OEDesignUnitPrepOptions
        """
        return _oespruce.OEMakeDesignUnitOptions_GetPrepOptions(self, *args)


    def SetBioUnitExtractionOptions(self, buExtractOpts: 'OEBioUnitExtractionOptions') -> "void":
        """SetBioUnitExtractionOptions(OEMakeDesignUnitOptions self, OEBioUnitExtractionOptions buExtractOpts)"""
        return _oespruce.OEMakeDesignUnitOptions_SetBioUnitExtractionOptions(self, buExtractOpts)


    def GetBioUnitExtractionOptions(self, *args) -> "OESpruce::OEBioUnitExtractionOptions const &":
        """
        GetBioUnitExtractionOptions(OEMakeDesignUnitOptions self) -> OEBioUnitExtractionOptions
        GetBioUnitExtractionOptions(OEMakeDesignUnitOptions self) -> OEBioUnitExtractionOptions
        """
        return _oespruce.OEMakeDesignUnitOptions_GetBioUnitExtractionOptions(self, *args)


    def SetSuperpose(self, superpose: 'bool') -> "void":
        """SetSuperpose(OEMakeDesignUnitOptions self, bool superpose)"""
        return _oespruce.OEMakeDesignUnitOptions_SetSuperpose(self, superpose)


    def GetSuperpose(self) -> "bool":
        """GetSuperpose(OEMakeDesignUnitOptions self) -> bool"""
        return _oespruce.OEMakeDesignUnitOptions_GetSuperpose(self)


    def SetSuperpositionMethod(self, superposeMethod: 'unsigned int') -> "void":
        """SetSuperpositionMethod(OEMakeDesignUnitOptions self, unsigned int superposeMethod)"""
        return _oespruce.OEMakeDesignUnitOptions_SetSuperpositionMethod(self, superposeMethod)


    def GetSuperpositionMethod(self) -> "unsigned int":
        """GetSuperpositionMethod(OEMakeDesignUnitOptions self) -> unsigned int"""
        return _oespruce.OEMakeDesignUnitOptions_GetSuperpositionMethod(self)

OEMakeDesignUnitOptions_swigregister = _oespruce.OEMakeDesignUnitOptions_swigregister
OEMakeDesignUnitOptions_swigregister(OEMakeDesignUnitOptions)


def OEBuildSingleLoop(*args) -> "bool":
    """
    OEBuildSingleLoop(OEMCMolBase outputMol, OEMolBase inputMol, std::string const fasta, OEResidue cTerminalAttachment, OEResidue nTerminalAttachment, OESidechainBuilderOptions scOpts, OELoopBuilderOptions lOpts) -> bool
    OEBuildSingleLoop(OEMCMolBase outputMol, OEMolBase inputMol, std::string const fasta, OEResidue cTerminalAttachment, OEResidue nTerminalAttachment, OESidechainBuilderOptions scOpts) -> bool
    OEBuildSingleLoop(OEMCMolBase outputMol, OEMolBase inputMol, std::string const fasta, OEResidue cTerminalAttachment, OEResidue nTerminalAttachment) -> bool
    """
    return _oespruce.OEBuildSingleLoop(*args)

def OEBuildLoops(*args) -> "bool":
    """
    OEBuildLoops(OEMolBase mol, OESidechainBuilderOptions scOpts, OELoopBuilderOptions lOpts) -> bool
    OEBuildLoops(OEMolBase mol, OESidechainBuilderOptions scOpts) -> bool
    OEBuildLoops(OEMolBase mol) -> bool
    OEBuildLoops(OEMolBase mol, OEStructureMetadata data, OESidechainBuilderOptions scOpts, OELoopBuilderOptions lOpts) -> bool
    OEBuildLoops(OEMolBase mol, OEStructureMetadata data, OESidechainBuilderOptions scOpts) -> bool
    OEBuildLoops(OEMolBase mol, OEStructureMetadata data) -> bool
    OEBuildLoops(OEDesignUnit du, OESidechainBuilderOptions scOpts, OELoopBuilderOptions lOpts) -> bool
    OEBuildLoops(OEDesignUnit du, OESidechainBuilderOptions scOpts) -> bool
    OEBuildLoops(OEDesignUnit du) -> bool
    OEBuildLoops(OEDesignUnit du, OEStructureMetadata data, OESidechainBuilderOptions scOpts, OELoopBuilderOptions lOpts) -> bool
    OEBuildLoops(OEDesignUnit du, OEStructureMetadata data, OESidechainBuilderOptions scOpts) -> bool
    OEBuildLoops(OEDesignUnit du, OEStructureMetadata data) -> bool
    """
    return _oespruce.OEBuildLoops(*args)

def OEGetExperimentTypeName(expTypeID: 'unsigned int') -> "std::string":
    """OEGetExperimentTypeName(unsigned int expTypeID) -> std::string"""
    return _oespruce.OEGetExperimentTypeName(expTypeID)

def OEGetExperimentTypeID(expTypeName: 'std::string const &') -> "unsigned int":
    """OEGetExperimentTypeID(std::string const & expTypeName) -> unsigned int"""
    return _oespruce.OEGetExperimentTypeID(expTypeName)

def OEGetHeterogenTypeName(typeID: 'unsigned int') -> "std::string":
    """OEGetHeterogenTypeName(unsigned int typeID) -> std::string"""
    return _oespruce.OEGetHeterogenTypeName(typeID)

def OEGetHeterogenTypeID(typeName: 'std::string const &') -> "unsigned int":
    """OEGetHeterogenTypeID(std::string const & typeName) -> unsigned int"""
    return _oespruce.OEGetHeterogenTypeID(typeName)
class OEHeterogenMetadata(object):
    """Proxy of C++ OESpruce::OEHeterogenMetadata class."""

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

    def __init__(self, *args):
        """
        __init__(OESpruce::OEHeterogenMetadata self) -> OEHeterogenMetadata
        __init__(OESpruce::OEHeterogenMetadata self, OEHeterogenMetadata arg2) -> OEHeterogenMetadata
        """
        this = _oespruce.new_OEHeterogenMetadata(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OEHeterogenMetadata
    __del__ = lambda self: None

    def SetTitle(self, title: 'std::string const') -> "void":
        """SetTitle(OEHeterogenMetadata self, std::string const title)"""
        return _oespruce.OEHeterogenMetadata_SetTitle(self, title)


    def GetTitle(self) -> "std::string":
        """GetTitle(OEHeterogenMetadata self) -> std::string"""
        return _oespruce.OEHeterogenMetadata_GetTitle(self)


    def SetID(self, id: 'std::string const') -> "void":
        """SetID(OEHeterogenMetadata self, std::string const id)"""
        return _oespruce.OEHeterogenMetadata_SetID(self, id)


    def GetID(self) -> "std::string":
        """GetID(OEHeterogenMetadata self) -> std::string"""
        return _oespruce.OEHeterogenMetadata_GetID(self)


    def SetSmiles(self, smiles: 'std::string const') -> "void":
        """SetSmiles(OEHeterogenMetadata self, std::string const smiles)"""
        return _oespruce.OEHeterogenMetadata_SetSmiles(self, smiles)


    def GetSmiles(self) -> "std::string":
        """GetSmiles(OEHeterogenMetadata self) -> std::string"""
        return _oespruce.OEHeterogenMetadata_GetSmiles(self)


    def SetType(self, type: 'unsigned int const') -> "void":
        """SetType(OEHeterogenMetadata self, unsigned int const type)"""
        return _oespruce.OEHeterogenMetadata_SetType(self, type)


    def GetType(self) -> "unsigned int":
        """GetType(OEHeterogenMetadata self) -> unsigned int"""
        return _oespruce.OEHeterogenMetadata_GetType(self)


    def AddTautomer(self, tautomer: 'std::string const') -> "void":
        """AddTautomer(OEHeterogenMetadata self, std::string const tautomer)"""
        return _oespruce.OEHeterogenMetadata_AddTautomer(self, tautomer)


    def ClearTautomers(self) -> "void":
        """ClearTautomers(OEHeterogenMetadata self)"""
        return _oespruce.OEHeterogenMetadata_ClearTautomers(self)


    def AddTautomers(self, list: 'PyObject *') -> "void":
        """AddTautomers(OEHeterogenMetadata self, PyObject * list)"""
        return _oespruce.OEHeterogenMetadata_AddTautomers(self, list)


    def GetTautomers(self) -> "PyObject *":
        """GetTautomers(OEHeterogenMetadata self) -> PyObject *"""
        return _oespruce.OEHeterogenMetadata_GetTautomers(self)

OEHeterogenMetadata_swigregister = _oespruce.OEHeterogenMetadata_swigregister
OEHeterogenMetadata_swigregister(OEHeterogenMetadata)

class OESequenceMetadata(object):
    """Proxy of C++ OESpruce::OESequenceMetadata class."""

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

    def __init__(self, *args):
        """
        __init__(OESpruce::OESequenceMetadata self) -> OESequenceMetadata
        __init__(OESpruce::OESequenceMetadata self, OESequenceMetadata arg2) -> OESequenceMetadata
        """
        this = _oespruce.new_OESequenceMetadata(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OESequenceMetadata
    __del__ = lambda self: None

    def SetChainID(self, cid: 'std::string const') -> "void":
        """SetChainID(OESequenceMetadata self, std::string const cid)"""
        return _oespruce.OESequenceMetadata_SetChainID(self, cid)


    def GetChainID(self) -> "std::string":
        """GetChainID(OESequenceMetadata self) -> std::string"""
        return _oespruce.OESequenceMetadata_GetChainID(self)


    def SetStartResidueNumber(self, startResNum: 'int const') -> "void":
        """SetStartResidueNumber(OESequenceMetadata self, int const startResNum)"""
        return _oespruce.OESequenceMetadata_SetStartResidueNumber(self, startResNum)


    def GetStartResidueNumber(self) -> "int":
        """GetStartResidueNumber(OESequenceMetadata self) -> int"""
        return _oespruce.OESequenceMetadata_GetStartResidueNumber(self)


    def SetStartResidueInsertCode(self, startInsCode: 'char const') -> "void":
        """SetStartResidueInsertCode(OESequenceMetadata self, char const startInsCode)"""
        return _oespruce.OESequenceMetadata_SetStartResidueInsertCode(self, startInsCode)


    def GetStartResidueInsertCode(self) -> "char":
        """GetStartResidueInsertCode(OESequenceMetadata self) -> char"""
        return _oespruce.OESequenceMetadata_GetStartResidueInsertCode(self)


    def SetEndResidueNumber(self, endResNum: 'int const') -> "void":
        """SetEndResidueNumber(OESequenceMetadata self, int const endResNum)"""
        return _oespruce.OESequenceMetadata_SetEndResidueNumber(self, endResNum)


    def GetEndResidueNumber(self) -> "int":
        """GetEndResidueNumber(OESequenceMetadata self) -> int"""
        return _oespruce.OESequenceMetadata_GetEndResidueNumber(self)


    def SetEndResidueInsertCode(self, endInsCode: 'char const') -> "void":
        """SetEndResidueInsertCode(OESequenceMetadata self, char const endInsCode)"""
        return _oespruce.OESequenceMetadata_SetEndResidueInsertCode(self, endInsCode)


    def GetEndResidueInsertCode(self) -> "char":
        """GetEndResidueInsertCode(OESequenceMetadata self) -> char"""
        return _oespruce.OESequenceMetadata_GetEndResidueInsertCode(self)


    def SetSequence(self, seq: 'std::string const') -> "void":
        """SetSequence(OESequenceMetadata self, std::string const seq)"""
        return _oespruce.OESequenceMetadata_SetSequence(self, seq)


    def GetSequence(self) -> "std::string":
        """GetSequence(OESequenceMetadata self) -> std::string"""
        return _oespruce.OESequenceMetadata_GetSequence(self)

OESequenceMetadata_swigregister = _oespruce.OESequenceMetadata_swigregister
OESequenceMetadata_swigregister(OESequenceMetadata)

class OEStructureMetadata(object):
    """Proxy of C++ OESpruce::OEStructureMetadata class."""

    thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
    __repr__ = _swig_repr
    __swig_destroy__ = _oespruce.delete_OEStructureMetadata
    __del__ = lambda self: None

    def SetStructureID(self, structureID: 'std::string const') -> "void":
        """SetStructureID(OEStructureMetadata self, std::string const structureID)"""
        return _oespruce.OEStructureMetadata_SetStructureID(self, structureID)


    def GetStructureID(self) -> "std::string":
        """GetStructureID(OEStructureMetadata self) -> std::string"""
        return _oespruce.OEStructureMetadata_GetStructureID(self)


    def SetAuthor(self, author: 'std::string const') -> "void":
        """SetAuthor(OEStructureMetadata self, std::string const author)"""
        return _oespruce.OEStructureMetadata_SetAuthor(self, author)


    def GetAuthor(self) -> "std::string":
        """GetAuthor(OEStructureMetadata self) -> std::string"""
        return _oespruce.OEStructureMetadata_GetAuthor(self)


    def AddKeyword(self, keyword: 'std::string const') -> "void":
        """AddKeyword(OEStructureMetadata self, std::string const keyword)"""
        return _oespruce.OEStructureMetadata_AddKeyword(self, keyword)


    def ClearKeywords(self) -> "void":
        """ClearKeywords(OEStructureMetadata self)"""
        return _oespruce.OEStructureMetadata_ClearKeywords(self)


    def SetRevisionDate(self, revDate: 'std::string const') -> "void":
        """SetRevisionDate(OEStructureMetadata self, std::string const revDate)"""
        return _oespruce.OEStructureMetadata_SetRevisionDate(self, revDate)


    def GetRevisionDate(self) -> "std::string":
        """GetRevisionDate(OEStructureMetadata self) -> std::string"""
        return _oespruce.OEStructureMetadata_GetRevisionDate(self)


    def SetRevision(self, revVersion: 'std::string const') -> "void":
        """SetRevision(OEStructureMetadata self, std::string const revVersion)"""
        return _oespruce.OEStructureMetadata_SetRevision(self, revVersion)


    def GetRevision(self) -> "std::string":
        """GetRevision(OEStructureMetadata self) -> std::string"""
        return _oespruce.OEStructureMetadata_GetRevision(self)


    def SetExperimentDate(self, exptDate: 'std::string const') -> "void":
        """SetExperimentDate(OEStructureMetadata self, std::string const exptDate)"""
        return _oespruce.OEStructureMetadata_SetExperimentDate(self, exptDate)


    def GetExperimentDate(self) -> "std::string":
        """GetExperimentDate(OEStructureMetadata self) -> std::string"""
        return _oespruce.OEStructureMetadata_GetExperimentDate(self)


    def SetExperimentType(self, exprType: 'unsigned int') -> "void":
        """SetExperimentType(OEStructureMetadata self, unsigned int exprType)"""
        return _oespruce.OEStructureMetadata_SetExperimentType(self, exprType)


    def GetExperimentType(self) -> "unsigned int":
        """GetExperimentType(OEStructureMetadata self) -> unsigned int"""
        return _oespruce.OEStructureMetadata_GetExperimentType(self)


    def SetIridiumData(self, iridData: 'OEIridiumData') -> "void":
        """SetIridiumData(OEStructureMetadata self, OEIridiumData iridData)"""
        return _oespruce.OEStructureMetadata_SetIridiumData(self, iridData)


    def GetIridiumData(self, *args) -> "OEBio::OEIridiumData const &":
        """
        GetIridiumData(OEStructureMetadata self) -> OEIridiumData
        GetIridiumData(OEStructureMetadata self) -> OEIridiumData
        """
        return _oespruce.OEStructureMetadata_GetIridiumData(self, *args)


    def ClearHeterogenMetadata(self) -> "void":
        """ClearHeterogenMetadata(OEStructureMetadata self)"""
        return _oespruce.OEStructureMetadata_ClearHeterogenMetadata(self)


    def ClearSequenceMetadata(self) -> "void":
        """ClearSequenceMetadata(OEStructureMetadata self)"""
        return _oespruce.OEStructureMetadata_ClearSequenceMetadata(self)


    def AddKeywords(self, list: 'PyObject *') -> "void":
        """AddKeywords(OEStructureMetadata self, PyObject * list)"""
        return _oespruce.OEStructureMetadata_AddKeywords(self, list)


    def GetKeywords(self) -> "PyObject *":
        """GetKeywords(OEStructureMetadata self) -> PyObject *"""
        return _oespruce.OEStructureMetadata_GetKeywords(self)


    def AddHeterogenMetadata(self, *args) -> "void":
        """
        AddHeterogenMetadata(OEStructureMetadata self, OEHeterogenMetadata hetData)
        AddHeterogenMetadata(OEStructureMetadata self, PyObject * list)
        """
        return _oespruce.OEStructureMetadata_AddHeterogenMetadata(self, *args)


    def GetHeterogenMetadata(self) -> "PyObject *":
        """GetHeterogenMetadata(OEStructureMetadata self) -> PyObject *"""
        return _oespruce.OEStructureMetadata_GetHeterogenMetadata(self)


    def AddSequenceMetadata(self, *args) -> "void":
        """
        AddSequenceMetadata(OEStructureMetadata self, OESequenceMetadata seqData)
        AddSequenceMetadata(OEStructureMetadata self, PyObject * list)
        """
        return _oespruce.OEStructureMetadata_AddSequenceMetadata(self, *args)


    def GetSequenceMetadata(self) -> "PyObject *":
        """GetSequenceMetadata(OEStructureMetadata self) -> PyObject *"""
        return _oespruce.OEStructureMetadata_GetSequenceMetadata(self)


    def __init__(self, *args):
        """
        __init__(OESpruce::OEStructureMetadata self) -> OEStructureMetadata
        __init__(OESpruce::OEStructureMetadata self, OEStructureMetadata arg2) -> OEStructureMetadata
        __init__(OESpruce::OEStructureMetadata self, PyObject * list) -> OEStructureMetadata
        __init__(OESpruce::OEStructureMetadata self, PyObject * hlist, PyObject * slist) -> OEStructureMetadata
        """
        this = _oespruce.new_OEStructureMetadata(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
OEStructureMetadata_swigregister = _oespruce.OEStructureMetadata_swigregister
OEStructureMetadata_swigregister(OEStructureMetadata)


def OEHeterogenMetadataFromJson(metadata: 'OEHeterogenMetadata', json: 'std::string const &') -> "bool":
    """OEHeterogenMetadataFromJson(OEHeterogenMetadata metadata, std::string const & json) -> bool"""
    return _oespruce.OEHeterogenMetadataFromJson(metadata, json)

def OEHeterogenMetadataToJson(metadata: 'OEHeterogenMetadata', prettyPrint: 'bool const'=True) -> "std::string":
    """
    OEHeterogenMetadataToJson(OEHeterogenMetadata metadata, bool const prettyPrint=True) -> std::string
    OEHeterogenMetadataToJson(OEHeterogenMetadata metadata) -> std::string
    """
    return _oespruce.OEHeterogenMetadataToJson(metadata, prettyPrint)

def OESequenceMetadataFromJson(metadata: 'OESequenceMetadata', json: 'std::string const &') -> "bool":
    """OESequenceMetadataFromJson(OESequenceMetadata metadata, std::string const & json) -> bool"""
    return _oespruce.OESequenceMetadataFromJson(metadata, json)

def OESequenceMetadataToJson(metadata: 'OESequenceMetadata', prettyPrint: 'bool const'=True) -> "std::string":
    """
    OESequenceMetadataToJson(OESequenceMetadata metadata, bool const prettyPrint=True) -> std::string
    OESequenceMetadataToJson(OESequenceMetadata metadata) -> std::string
    """
    return _oespruce.OESequenceMetadataToJson(metadata, prettyPrint)

def OEStructureMetadataFromJson(metadata: 'OEStructureMetadata', json: 'std::string const &') -> "bool":
    """OEStructureMetadataFromJson(OEStructureMetadata metadata, std::string const & json) -> bool"""
    return _oespruce.OEStructureMetadataFromJson(metadata, json)

def OEStructureMetadataToJson(metadata: 'OEStructureMetadata', prettyPrint: 'bool const'=True) -> "std::string":
    """
    OEStructureMetadataToJson(OEStructureMetadata metadata, bool const prettyPrint=True) -> std::string
    OEStructureMetadataToJson(OEStructureMetadata metadata) -> std::string
    """
    return _oespruce.OEStructureMetadataToJson(metadata, prettyPrint)
class OEProtonateDesignUnitOptions(object):
    """Proxy of C++ OESpruce::OEProtonateDesignUnitOptions class."""

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

    def __init__(self, *args):
        """
        __init__(OESpruce::OEProtonateDesignUnitOptions self) -> OEProtonateDesignUnitOptions
        __init__(OESpruce::OEProtonateDesignUnitOptions self, OEPlaceHydrogensOptions placeHOpts) -> OEProtonateDesignUnitOptions
        __init__(OESpruce::OEProtonateDesignUnitOptions self, OEProtonateDesignUnitOptions arg2) -> OEProtonateDesignUnitOptions
        """
        this = _oespruce.new_OEProtonateDesignUnitOptions(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OEProtonateDesignUnitOptions
    __del__ = lambda self: None

    def SetGenerateTautomers(self, generateTautomers: 'bool const') -> "void":
        """SetGenerateTautomers(OEProtonateDesignUnitOptions self, bool const generateTautomers)"""
        return _oespruce.OEProtonateDesignUnitOptions_SetGenerateTautomers(self, generateTautomers)


    def SetOptimizeExpProtons(self, optimizeExpProtons: 'bool const') -> "void":
        """SetOptimizeExpProtons(OEProtonateDesignUnitOptions self, bool const optimizeExpProtons)"""
        return _oespruce.OEProtonateDesignUnitOptions_SetOptimizeExpProtons(self, optimizeExpProtons)


    def SetHetGroupNbrDist(self, hetGroupNbrDist: 'double const') -> "void":
        """SetHetGroupNbrDist(OEProtonateDesignUnitOptions self, double const hetGroupNbrDist)"""
        return _oespruce.OEProtonateDesignUnitOptions_SetHetGroupNbrDist(self, hetGroupNbrDist)


    def SetPlaceHydrogensOptions(self, placeHOpts: 'OEPlaceHydrogensOptions') -> "void":
        """SetPlaceHydrogensOptions(OEProtonateDesignUnitOptions self, OEPlaceHydrogensOptions placeHOpts)"""
        return _oespruce.OEProtonateDesignUnitOptions_SetPlaceHydrogensOptions(self, placeHOpts)


    def GetGenerateTautomers(self) -> "bool":
        """GetGenerateTautomers(OEProtonateDesignUnitOptions self) -> bool"""
        return _oespruce.OEProtonateDesignUnitOptions_GetGenerateTautomers(self)


    def GetOptimizeExpProtons(self) -> "bool":
        """GetOptimizeExpProtons(OEProtonateDesignUnitOptions self) -> bool"""
        return _oespruce.OEProtonateDesignUnitOptions_GetOptimizeExpProtons(self)


    def GetHetGroupNbrDist(self) -> "double":
        """GetHetGroupNbrDist(OEProtonateDesignUnitOptions self) -> double"""
        return _oespruce.OEProtonateDesignUnitOptions_GetHetGroupNbrDist(self)


    def GetPlaceHydrogensOptions(self, *args) -> "OEBio::OEPlaceHydrogensOptions const &":
        """
        GetPlaceHydrogensOptions(OEProtonateDesignUnitOptions self) -> OEPlaceHydrogensOptions
        GetPlaceHydrogensOptions(OEProtonateDesignUnitOptions self) -> OEPlaceHydrogensOptions
        """
        return _oespruce.OEProtonateDesignUnitOptions_GetPlaceHydrogensOptions(self, *args)

OEProtonateDesignUnitOptions_swigregister = _oespruce.OEProtonateDesignUnitOptions_swigregister
OEProtonateDesignUnitOptions_swigregister(OEProtonateDesignUnitOptions)


def OEProtonateDesignUnit(*args) -> "bool":
    """
    OEProtonateDesignUnit(OEDesignUnit du, PyObject * input, OEProtonateDesignUnitOptions opts) -> bool
    OEProtonateDesignUnit(OEDesignUnit du, PyObject * input) -> bool
    OEProtonateDesignUnit(OEDesignUnit du, OEProtonateDesignUnitOptions opts) -> bool
    OEProtonateDesignUnit(OEDesignUnit du) -> bool
    """
    return _oespruce.OEProtonateDesignUnit(*args)

def GetSWIG_NewPointerObj(*args) -> "PyObject *":
    """
    GetSWIG_NewPointerObj(OEAtomBase arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEBondBase arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEMolBase arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEConfBase arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OETransBase arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OENbrs arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEAltLocation arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEAltGroup arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OESequenceAlignment arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OERole arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEResidue arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(std::string const & arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(std::string & arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OERotamer arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OETorsion arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEColor arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEColorStop arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEGroupBase arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEAtomBondSet arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OESubSearch arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEInteractionHintTypeBase arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEInteractionHint arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEHierResidue arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEHierFragment arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEHierChain arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEPlaceHydrogensMoverNote arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEAnnotation arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEFuzzy arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEDesignUnit arg, bool owned) -> PyObject *
    """
    return _oespruce.GetSWIG_NewPointerObj(*args)
class OEDesignUnitIter(object):
    """Proxy of C++ OESystem::OEIter<(OEBio::OEDesignUnit)> class."""

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

    def __init__(self, *args):
        """
        __init__(OESystem::OEIter<(OEBio::OEDesignUnit)> self) -> OEDesignUnitIter
        __init__(OESystem::OEIter<(OEBio::OEDesignUnit)> self, OEDesignUnitIter rhs) -> OEDesignUnitIter
        __init__(OESystem::OEIter<(OEBio::OEDesignUnit)> self, OESystem::OEIterBase< OEBio::OEDesignUnit > * rhs) -> OEDesignUnitIter
        __init__(OESystem::OEIter<(OEBio::OEDesignUnit)> self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEDesignUnit >::NonConstA > * rhs) -> OEDesignUnitIter
        """
        this = _oespruce.new_OEDesignUnitIter(*args)
        try:
            self.this.append(this)
        except __builtin__.Exception:
            self.this = this
    __swig_destroy__ = _oespruce.delete_OEDesignUnitIter
    __del__ = lambda self: None

    def Copy(self) -> "OESystem::OEIterBase< OEBio::OEDesignUnit > *":
        """Copy(OEDesignUnitIter self) -> OESystem::OEIterBase< OEBio::OEDesignUnit > *"""
        return _oespruce.OEDesignUnitIter_Copy(self)


    def Push(self, *args) -> "void":
        """
        Push(OEDesignUnitIter self, OESystem::OEIterBase< OEBio::OEDesignUnit > * ib)
        Push(OEDesignUnitIter self, OEDesignUnitIter iter)
        """
        return _oespruce.OEDesignUnitIter_Push(self, *args)


    def Sort(self, sort_criterion: 'OESystem::OEBinaryPredicate< OEBio::OEDesignUnit,OEBio::OEDesignUnit > const &') -> "void":
        """Sort(OEDesignUnitIter self, OESystem::OEBinaryPredicate< OEBio::OEDesignUnit,OEBio::OEDesignUnit > const & sort_criterion)"""
        return _oespruce.OEDesignUnitIter_Sort(self, sort_criterion)


    def ToFirst(self) -> "OESystem::OEIter< OEBio::OEDesignUnit > &":
        """ToFirst(OEDesignUnitIter self) -> OEDesignUnitIter"""
        return _oespruce.OEDesignUnitIter_ToFirst(self)


    def ToLast(self) -> "OESystem::OEIter< OEBio::OEDesignUnit > &":
        """ToLast(OEDesignUnitIter self) -> OEDesignUnitIter"""
        return _oespruce.OEDesignUnitIter_ToLast(self)


    def __ref__(self) -> "OEBio::OEDesignUnit &":
        """__ref__(OEDesignUnitIter self) -> OEDesignUnit"""
        return _oespruce.OEDesignUnitIter___ref__(self)


    def IsValid(self):
      return _oespruce.OEDesignUnitIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        """next(OEDesignUnitIter self) -> PyObject *"""
        return _oespruce.OEDesignUnitIter_next(self)


    def Target(self) -> "OEBio::OEDesignUnit &":
        """Target(OEDesignUnitIter self) -> OEDesignUnit"""
        return _oespruce.OEDesignUnitIter_Target(self)


    def Next(self, *args) -> "OESystem::OEIter< OEBio::OEDesignUnit > &":
        """
        Next(OEDesignUnitIter self) -> OEDesignUnitIter
        Next(OEDesignUnitIter self, int i) -> OEDesignUnitIter
        """
        return _oespruce.OEDesignUnitIter_Next(self, *args)


    def Prev(self, *args) -> "OESystem::OEIter< OEBio::OEDesignUnit > &":
        """
        Prev(OEDesignUnitIter self) -> OEDesignUnitIter
        Prev(OEDesignUnitIter self, int i) -> OEDesignUnitIter
        """
        return _oespruce.OEDesignUnitIter_Prev(self, *args)

OEDesignUnitIter_swigregister = _oespruce.OEDesignUnitIter_swigregister
OEDesignUnitIter_swigregister(OEDesignUnitIter)


def OEMakeDesignUnits(*args) -> "OESystem::OEIterBase< OEBio::OEDesignUnit > *":
    """
    OEMakeDesignUnits(OEMolBase structure, OESystem::OESkewGrid const & electronDensity, OEStructureMetadata metadata, OEMakeDesignUnitOptions opts, std::string const siteResidue) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure, OESystem::OESkewGrid const & electronDensity, OEStructureMetadata metadata, OEMakeDesignUnitOptions opts) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure, OESystem::OESkewGrid const & electronDensity, OEStructureMetadata metadata) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure, OESystem::OESkewGrid const & electronDensity) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure, OESystem::OESkewGrid const & electronDensity, OEDesignUnit designUnitReference, OEStructureMetadata metadata, OEMakeDesignUnitOptions opts, std::string const siteResidue) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure, OESystem::OESkewGrid const & electronDensity, OEDesignUnit designUnitReference, OEStructureMetadata metadata, OEMakeDesignUnitOptions opts) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure, OESystem::OESkewGrid const & electronDensity, OEDesignUnit designUnitReference, OEStructureMetadata metadata) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure, OESystem::OESkewGrid const & electronDensity, OEDesignUnit designUnitReference) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure, OEStructureMetadata metadata, OEMakeDesignUnitOptions opts, std::string const siteResidue) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure, OEStructureMetadata metadata, OEMakeDesignUnitOptions opts) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure, OEStructureMetadata metadata) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure, OEDesignUnit designUnitReference, OEStructureMetadata metadata, OEMakeDesignUnitOptions opts, std::string const siteResidue) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure, OEDesignUnit designUnitReference, OEStructureMetadata metadata, OEMakeDesignUnitOptions opts) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure, OEDesignUnit designUnitReference, OEStructureMetadata metadata) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeDesignUnits(OEMolBase structure, OEDesignUnit designUnitReference) -> OESystem::OEIterBase< OEBio::OEDesignUnit > *
    """
    return _oespruce.OEMakeDesignUnits(*args)

def OEMakeBioDesignUnits(*args) -> "OESystem::OEIterBase< OEBio::OEDesignUnit > *":
    """
    OEMakeBioDesignUnits(OEMolBase structure, OEStructureMetadata metadata, OEMakeDesignUnitOptions opts) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeBioDesignUnits(OEMolBase structure, OEStructureMetadata metadata) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeBioDesignUnits(OEMolBase structure) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeBioDesignUnits(OEMolBase structure, OEDesignUnit designUnitReference, OEStructureMetadata metadata, OEMakeDesignUnitOptions opts) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeBioDesignUnits(OEMolBase structure, OEDesignUnit designUnitReference, OEStructureMetadata metadata) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEMakeBioDesignUnits(OEMolBase structure, OEDesignUnit designUnitReference) -> OESystem::OEIterBase< OEBio::OEDesignUnit > *
    """
    return _oespruce.OEMakeBioDesignUnits(*args)

def OEEnumerateSites(*args) -> "OESystem::OEIterBase< OEBio::OEDesignUnit > *":
    """
    OEEnumerateSites(OEDesignUnit bioDesignUnit, OEDesignUnitEnumerateSitesOptions opts, std::string const siteResidue) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEEnumerateSites(OEDesignUnit bioDesignUnit, OEDesignUnitEnumerateSitesOptions opts) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEEnumerateSites(OEDesignUnit bioDesignUnit) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEEnumerateSites(OEDesignUnit bioDesignUnit, OEDesignUnit designUnitReference, OEDesignUnitEnumerateSitesOptions opts) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEEnumerateSites(OEDesignUnit bioDesignUnit, OEDesignUnit designUnitReference) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEEnumerateSites(OEDesignUnit bioDesignUnit, OEDesignUnit designUnitReference, OESystem::OESkewGrid const & electronDensity, OEDesignUnitEnumerateSitesOptions opts) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEEnumerateSites(OEDesignUnit bioDesignUnit, OEDesignUnit designUnitReference, OESystem::OESkewGrid const & electronDensity) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEEnumerateSites(OEDesignUnit bioDesignUnit, OESystem::OESkewGrid const & electronDensity, OEDesignUnitEnumerateSitesOptions opts, std::string const siteResidue) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEEnumerateSites(OEDesignUnit bioDesignUnit, OESystem::OESkewGrid const & electronDensity, OEDesignUnitEnumerateSitesOptions opts) -> OESystem::OEIterBase< OEBio::OEDesignUnit >
    OEEnumerateSites(OEDesignUnit bioDesignUnit, OESystem::OESkewGrid const & electronDensity) -> OESystem::OEIterBase< OEBio::OEDesignUnit > *
    """
    return _oespruce.OEEnumerateSites(*args)

def OEMakeDesignUnit(*args) -> "bool":
    """
    OEMakeDesignUnit(OEDesignUnit du, OEMolBase nonLigandComplex, OEMolBase ligand, OEMakeDesignUnitOptions opts) -> bool
    OEMakeDesignUnit(OEDesignUnit du, OEMolBase nonLigandComplex, OEMolBase ligand) -> bool
    """
    return _oespruce.OEMakeDesignUnit(*args)

def OEIsRedundantDesignUnit(dus: 'OEDesignUnitVector', du: 'OEDesignUnit', opts: 'OEDesignUnitEnumerateSitesOptions') -> "bool":
    """OEIsRedundantDesignUnit(OEDesignUnitVector dus, OEDesignUnit du, OEDesignUnitEnumerateSitesOptions opts) -> bool"""
    return _oespruce.OEIsRedundantDesignUnit(dus, du, opts)


