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


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

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


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

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

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

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

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

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

_oespruce = swig_import_helper()
del swig_import_helper

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

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


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


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


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


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


import weakref

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_SiteHopper = _oespruce.OESuperpositionType_SiteHopper


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_ElectronCrystallography = _oespruce.OEExperimentType_ElectronCrystallography

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

OESuperposeMethod_Undefined = _oespruce.OESuperposeMethod_Undefined

OESuperposeMethod_Global = _oespruce.OESuperposeMethod_Global


OESuperposeMethod_GlobalCarbonAlpha = OESuperposeMethod_Global

OESuperposeMethod_Site = _oespruce.OESuperposeMethod_Site


OESuperposeMethod_SiteSequence = OESuperposeMethod_Site

OESuperposeMethod_DDM = _oespruce.OESuperposeMethod_DDM


OESuperposeMethod_DifferenceDistanceMatrix = OESuperposeMethod_DDM

OESuperposeMethod_Weighted = _oespruce.OESuperposeMethod_Weighted


OESuperposeMethod_WeightedDifferenceDistanceMatrix = OESuperposeMethod_Weighted

OESuperposeMethod_SSE = _oespruce.OESuperposeMethod_SSE


OESuperposeMethod_SecondaryStructureElements = OESuperposeMethod_SSE

OESuperposeMethod_SiteHopper = _oespruce.OESuperposeMethod_SiteHopper


OESuperposeMethod_Default = OESuperposeMethod_Global


OESuperposeMethod_Max = OESuperposeMethod_SiteHopper

OESpruceFilterIssueCodes_Success = _oespruce.OESpruceFilterIssueCodes_Success

OESpruceFilterIssueCodes_InvalidNames = _oespruce.OESpruceFilterIssueCodes_InvalidNames

OESpruceFilterIssueCodes_InvalidResidueStates = _oespruce.OESpruceFilterIssueCodes_InvalidResidueStates

OESpruceFilterIssueCodes_InvalidMetalBond = _oespruce.OESpruceFilterIssueCodes_InvalidMetalBond

OESpruceFilterIssueCodes_InvalidCRYST1 = _oespruce.OESpruceFilterIssueCodes_InvalidCRYST1

OESpruceFilterIssueCodes_InvalidElectronDensityOverlap = _oespruce.OESpruceFilterIssueCodes_InvalidElectronDensityOverlap

OESpruceFilterIssueCodes_InvalidSeqAlign = _oespruce.OESpruceFilterIssueCodes_InvalidSeqAlign

OESpruceFilterIssueCodes_InvalidChainIDs = _oespruce.OESpruceFilterIssueCodes_InvalidChainIDs

OESpruceFilterIssueCodes_InvalidAltLocation = _oespruce.OESpruceFilterIssueCodes_InvalidAltLocation

OESpruceFilterIssueCodes_InvalidCovalentBonds = _oespruce.OESpruceFilterIssueCodes_InvalidCovalentBonds


OESpruceFilterIssueCodes_ALL = OESpruceFilterIssueCodes_Success|OESpruceFilterIssueCodes_InvalidAltLocation|OESpruceFilterIssueCodes_InvalidNames|OESpruceFilterIssueCodes_InvalidResidueStates|OESpruceFilterIssueCodes_InvalidMetalBond|OESpruceFilterIssueCodes_InvalidCRYST1|OESpruceFilterIssueCodes_InvalidElectronDensityOverlap|OESpruceFilterIssueCodes_InvalidSeqAlign|OESpruceFilterIssueCodes_InvalidChainIDs|OESpruceFilterIssueCodes_InvalidCovalentBonds

OEDesignUnitIssueCodes_Success = _oespruce.OEDesignUnitIssueCodes_Success

OEDesignUnitIssueCodes_PartialSideChain = _oespruce.OEDesignUnitIssueCodes_PartialSideChain

OEDesignUnitIssueCodes_MissingLoop = _oespruce.OEDesignUnitIssueCodes_MissingLoop

OEDesignUnitIssueCodes_ImplicitH = _oespruce.OEDesignUnitIssueCodes_ImplicitH

OEDesignUnitIssueCodes_PartialCharges = _oespruce.OEDesignUnitIssueCodes_PartialCharges

OEDesignUnitIssueCodes_TerminiNotCapped = _oespruce.OEDesignUnitIssueCodes_TerminiNotCapped

OEDesignUnitIssueCodes_HeavyAtomsOverlap = _oespruce.OEDesignUnitIssueCodes_HeavyAtomsOverlap

OEDesignUnitIssueCodes_BrokenChains = _oespruce.OEDesignUnitIssueCodes_BrokenChains

OEDesignUnitIssueCodes_NonStandardResidue = _oespruce.OEDesignUnitIssueCodes_NonStandardResidue


OEDesignUnitIssueCodes_ALL = OEDesignUnitIssueCodes_Success|OEDesignUnitIssueCodes_PartialSideChain|OEDesignUnitIssueCodes_MissingLoop|OEDesignUnitIssueCodes_ImplicitH|OEDesignUnitIssueCodes_PartialCharges|OEDesignUnitIssueCodes_TerminiNotCapped|OEDesignUnitIssueCodes_HeavyAtomsOverlap|OEDesignUnitIssueCodes_BrokenChains|OEDesignUnitIssueCodes_NonStandardResidue


def __no_op(*args) -> "void":
    r"""
    __no_op(OEAtomIter arg1)
    __no_op(OEResidueIter arg1)
    """
    return _oespruce.__no_op(*args)
class OESuperpositionOptions(object):
    r"""Proxy of C++ OESpruce::OESuperpositionOptions class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESuperpositionOptions self) -> OESuperpositionOptions
        __init__(OESuperpositionOptions self, OESuperpositionOptions rhs) -> OESuperpositionOptions
        """
        _oespruce.OESuperpositionOptions_swiginit(self, _oespruce.new_OESuperpositionOptions(*args))
    __swig_destroy__ = _oespruce.delete_OESuperpositionOptions

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

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

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

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

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

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

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

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

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

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

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

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

# Register OESuperpositionOptions in _oespruce:
_oespruce.OESuperpositionOptions_swigregister(OESuperpositionOptions)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEStructuralSuperposition self, OEMolBase argRefMol, OEMolBase argFitMol, OESuperpositionOptions argOpts=OESpruce::OESuperpositionOptions()) -> OEStructuralSuperposition
        __init__(OEStructuralSuperposition self, OEStructuralSuperposition rhs) -> OEStructuralSuperposition
        """
        _oespruce.OEStructuralSuperposition_swiginit(self, _oespruce.new_OEStructuralSuperposition(*args))

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



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

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

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

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

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

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

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

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

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

# Register OEStructuralSuperposition in _oespruce:
_oespruce.OEStructuralSuperposition_swigregister(OEStructuralSuperposition)

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

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

    def __init__(self, *args):
        r"""
        __init__(OESecondaryStructureSuperposition self, OEMolBase refMol, OEMolBase fitMol, OESuperpositionOptions argOpts=OESpruce::OESuperpositionOptions()) -> OESecondaryStructureSuperposition
        __init__(OESecondaryStructureSuperposition self, OESecondaryStructureSuperposition rhs) -> OESecondaryStructureSuperposition
        """
        _oespruce.OESecondaryStructureSuperposition_swiginit(self, _oespruce.new_OESecondaryStructureSuperposition(*args))

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



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

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

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

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

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

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

# Register OESecondaryStructureSuperposition in _oespruce:
_oespruce.OESecondaryStructureSuperposition_swigregister(OESecondaryStructureSuperposition)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEBioAssemblyFactIter self) -> OEBioAssemblyFactIter
        __init__(OEBioAssemblyFactIter self, OEMolBaseIter rhs) -> OEBioAssemblyFactIter
        __init__(OEBioAssemblyFactIter self, OESystem::OEIterBase< OEChem::OEMolBase > * rhs) -> OEBioAssemblyFactIter
        __init__(OEBioAssemblyFactIter self, OESystem::OEIterBase< OESystem::OEIter< OEChem::OEMolBase >::NonConstA > * rhs) -> OEBioAssemblyFactIter
        """
        _oespruce.OEBioAssemblyFactIter_swiginit(self, _oespruce.new_OEBioAssemblyFactIter(*args))
    __swig_destroy__ = _oespruce.delete_OEBioAssemblyFactIter

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

    def Push(self, *args) -> "void":
        r"""
        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":
        r"""Sort(OEBioAssemblyFactIter self, OEBinaryMolBasePred sort_criterion)"""
        return _oespruce.OEBioAssemblyFactIter_Sort(self, sort_criterion)

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

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

    def __ref__(self) -> "OEChem::OEMolBase &":
        r"""__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 *":
        r"""next(OEBioAssemblyFactIter self) -> PyObject *"""
        return _oespruce.OEBioAssemblyFactIter_next(self)

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

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

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

# Register OEBioAssemblyFactIter in _oespruce:
_oespruce.OEBioAssemblyFactIter_swigregister(OEBioAssemblyFactIter)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEBioUnitExtractionOptions self) -> OEBioUnitExtractionOptions
        __init__(OEBioUnitExtractionOptions self, OEBioUnitExtractionOptions arg2) -> OEBioUnitExtractionOptions
        """
        _oespruce.OEBioUnitExtractionOptions_swiginit(self, _oespruce.new_OEBioUnitExtractionOptions(*args))
    __swig_destroy__ = _oespruce.delete_OEBioUnitExtractionOptions

    def CreateCopy(self) -> "OESpruce::OEBioUnitExtractionOptions *":
        r"""CreateCopy(OEBioUnitExtractionOptions self) -> OEBioUnitExtractionOptions"""
        return _oespruce.OEBioUnitExtractionOptions_CreateCopy(self)

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

    def SetMinScore(self, value: "unsigned int const") -> "bool":
        r"""SetMinScore(OEBioUnitExtractionOptions self, unsigned int const value) -> bool"""
        return _oespruce.OEBioUnitExtractionOptions_SetMinScore(self, value)

    def GetMaxRMSD(self) -> "double":
        r"""GetMaxRMSD(OEBioUnitExtractionOptions self) -> double"""
        return _oespruce.OEBioUnitExtractionOptions_GetMaxRMSD(self)

    def SetMaxRMSD(self, value: "double const") -> "bool":
        r"""SetMaxRMSD(OEBioUnitExtractionOptions self, double const value) -> bool"""
        return _oespruce.OEBioUnitExtractionOptions_SetMaxRMSD(self, value)

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

    def SetMaxAtoms(self, value: "unsigned int const") -> "bool":
        r"""SetMaxAtoms(OEBioUnitExtractionOptions self, unsigned int const value) -> bool"""
        return _oespruce.OEBioUnitExtractionOptions_SetMaxAtoms(self, value)

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

    def SetPreferAuthorRecord(self, value: "bool const") -> "bool":
        r"""SetPreferAuthorRecord(OEBioUnitExtractionOptions self, bool const value) -> bool"""
        return _oespruce.OEBioUnitExtractionOptions_SetPreferAuthorRecord(self, value)

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

    def SetSuperpose(self, value: "bool const") -> "bool":
        r"""SetSuperpose(OEBioUnitExtractionOptions self, bool const value) -> bool"""
        return _oespruce.OEBioUnitExtractionOptions_SetSuperpose(self, value)

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

    def SetMaxParts(self, value: "unsigned int const") -> "bool":
        r"""SetMaxParts(OEBioUnitExtractionOptions self, unsigned int const value) -> bool"""
        return _oespruce.OEBioUnitExtractionOptions_SetMaxParts(self, value)

# Register OEBioUnitExtractionOptions in _oespruce:
_oespruce.OEBioUnitExtractionOptions_swigregister(OEBioUnitExtractionOptions)


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


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

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

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

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

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

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

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

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

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

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

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

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

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

    def __len__(self) -> "std::map< OEChem::OEResidue,std::string >::size_type":
        r"""__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 &":
        r"""__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":
        r"""__delitem__(mapOEResidueString self, OEResidue key)"""
        return _oespruce.mapOEResidueString___delitem__(self, key)

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

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

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

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

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

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

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

    def __setitem__(self, *args) -> "void":
        r"""
        __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 *":
        r"""asdict(mapOEResidueString self) -> PyObject *"""
        return _oespruce.mapOEResidueString_asdict(self)

    def __init__(self, *args):
        r"""
        __init__(mapOEResidueString self, std::less< OEChem::OEResidue > const & other) -> mapOEResidueString
        __init__(mapOEResidueString self) -> mapOEResidueString
        __init__(mapOEResidueString self, mapOEResidueString other) -> mapOEResidueString
        """
        _oespruce.mapOEResidueString_swiginit(self, _oespruce.new_mapOEResidueString(*args))

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

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

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

    def begin(self) -> "std::map< OEChem::OEResidue,std::string >::iterator":
        r"""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":
        r"""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":
        r"""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":
        r"""rend(mapOEResidueString self) -> std::map< OEChem::OEResidue,std::string >::reverse_iterator"""
        return _oespruce.mapOEResidueString_rend(self)

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

    def get_allocator(self) -> "std::map< OEChem::OEResidue,std::string >::allocator_type":
        r"""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":
        r"""count(mapOEResidueString self, OEResidue x) -> std::map< OEChem::OEResidue,std::string >::size_type"""
        return _oespruce.mapOEResidueString_count(self, x)

    def erase(self, *args) -> "void":
        r"""
        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":
        r"""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":
        r"""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":
        r"""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

# Register mapOEResidueString in _oespruce:
_oespruce.mapOEResidueString_swigregister(mapOEResidueString)

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

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

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

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

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

    def __len__(self) -> "std::map< OEChem::OEResidue,unsigned int >::size_type":
        r"""__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 &":
        r"""__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":
        r"""__delitem__(mapOEResidueUnsigned self, OEResidue key)"""
        return _oespruce.mapOEResidueUnsigned___delitem__(self, key)

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

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

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

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

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

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

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

    def __setitem__(self, *args) -> "void":
        r"""
        __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 *":
        r"""asdict(mapOEResidueUnsigned self) -> PyObject *"""
        return _oespruce.mapOEResidueUnsigned_asdict(self)

    def __init__(self, *args):
        r"""
        __init__(mapOEResidueUnsigned self, std::less< OEChem::OEResidue > const & other) -> mapOEResidueUnsigned
        __init__(mapOEResidueUnsigned self) -> mapOEResidueUnsigned
        __init__(mapOEResidueUnsigned self, mapOEResidueUnsigned other) -> mapOEResidueUnsigned
        """
        _oespruce.mapOEResidueUnsigned_swiginit(self, _oespruce.new_mapOEResidueUnsigned(*args))

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

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

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

    def begin(self) -> "std::map< OEChem::OEResidue,unsigned int >::iterator":
        r"""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":
        r"""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":
        r"""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":
        r"""rend(mapOEResidueUnsigned self) -> std::map< OEChem::OEResidue,unsigned int >::reverse_iterator"""
        return _oespruce.mapOEResidueUnsigned_rend(self)

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

    def get_allocator(self) -> "std::map< OEChem::OEResidue,unsigned int >::allocator_type":
        r"""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":
        r"""count(mapOEResidueUnsigned self, OEResidue x) -> std::map< OEChem::OEResidue,unsigned int >::size_type"""
        return _oespruce.mapOEResidueUnsigned_count(self, x)

    def erase(self, *args) -> "void":
        r"""
        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":
        r"""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":
        r"""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":
        r"""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

# Register mapOEResidueUnsigned in _oespruce:
_oespruce.mapOEResidueUnsigned_swigregister(mapOEResidueUnsigned)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEDesignUnitMutationOptions self) -> OEDesignUnitMutationOptions
        __init__(OEDesignUnitMutationOptions self, OEDesignUnitMutationOptions arg2) -> OEDesignUnitMutationOptions
        """
        _oespruce.OEDesignUnitMutationOptions_swiginit(self, _oespruce.new_OEDesignUnitMutationOptions(*args))
    __swig_destroy__ = _oespruce.delete_OEDesignUnitMutationOptions

    def SetMutations(self, mutations: "mapOEResidueUnsigned") -> "void":
        r"""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 > > >":
        r"""GetMutations(OEDesignUnitMutationOptions self) -> mapOEResidueUnsigned"""
        return _oespruce.OEDesignUnitMutationOptions_GetMutations(self)

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

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

# Register OEDesignUnitMutationOptions in _oespruce:
_oespruce.OEDesignUnitMutationOptions_swigregister(OEDesignUnitMutationOptions)


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

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

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

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

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

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

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

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

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

    def __init__(self):
        r"""__init__(OEIsModeledAtom self) -> OEIsModeledAtom"""
        _oespruce.OEIsModeledAtom_swiginit(self, _oespruce.new_OEIsModeledAtom())

    def __call__(self, atom: "OEAtomBase") -> "bool":
        r"""__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

# Register OEIsModeledAtom in _oespruce:
_oespruce.OEIsModeledAtom_swigregister(OEIsModeledAtom)

class OEPocketUnitIter(object):
    r"""Proxy of C++ OESystem::OEIter< OESpruce::OEPocket > class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEPocketUnitIter self) -> OEPocketUnitIter
        __init__(OEPocketUnitIter self, OEPocketUnitIter rhs) -> OEPocketUnitIter
        __init__(OEPocketUnitIter self, OESystem::OEIterBase< OESpruce::OEPocket > * rhs) -> OEPocketUnitIter
        __init__(OEPocketUnitIter self, OESystem::OEIterBase< OESystem::OEIter< OESpruce::OEPocket >::NonConstA > * rhs) -> OEPocketUnitIter
        """
        _oespruce.OEPocketUnitIter_swiginit(self, _oespruce.new_OEPocketUnitIter(*args))
    __swig_destroy__ = _oespruce.delete_OEPocketUnitIter

    def Copy(self) -> "OESystem::OEIterBase< OESpruce::OEPocket > *":
        r"""Copy(OEPocketUnitIter self) -> OESystem::OEIterBase< OESpruce::OEPocket > *"""
        return _oespruce.OEPocketUnitIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEPocketUnitIter self, OESystem::OEIterBase< OESpruce::OEPocket > * ib)
        Push(OEPocketUnitIter self, OEPocketUnitIter iter)
        """
        return _oespruce.OEPocketUnitIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OESpruce::OEPocket,OESpruce::OEPocket > const &") -> "void":
        r"""Sort(OEPocketUnitIter self, OESystem::OEBinaryPredicate< OESpruce::OEPocket,OESpruce::OEPocket > const & sort_criterion)"""
        return _oespruce.OEPocketUnitIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OESpruce::OEPocket > &":
        r"""ToFirst(OEPocketUnitIter self) -> OEPocketUnitIter"""
        return _oespruce.OEPocketUnitIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OESpruce::OEPocket > &":
        r"""ToLast(OEPocketUnitIter self) -> OEPocketUnitIter"""
        return _oespruce.OEPocketUnitIter_ToLast(self)

    def __ref__(self) -> "OESpruce::OEPocket &":
        r"""__ref__(OEPocketUnitIter self) -> OEPocket"""
        return _oespruce.OEPocketUnitIter___ref__(self)

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



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



    def next(self) -> "PyObject *":
        r"""next(OEPocketUnitIter self) -> PyObject *"""
        return _oespruce.OEPocketUnitIter_next(self)

    def Target(self) -> "OESpruce::OEPocket &":
        r"""Target(OEPocketUnitIter self) -> OEPocket"""
        return _oespruce.OEPocketUnitIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OESpruce::OEPocket > &":
        r"""
        Next(OEPocketUnitIter self) -> OEPocketUnitIter
        Next(OEPocketUnitIter self, int i) -> OEPocketUnitIter
        """
        return _oespruce.OEPocketUnitIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OESpruce::OEPocket > &":
        r"""
        Prev(OEPocketUnitIter self) -> OEPocketUnitIter
        Prev(OEPocketUnitIter self, int i) -> OEPocketUnitIter
        """
        return _oespruce.OEPocketUnitIter_Prev(self, *args)

# Register OEPocketUnitIter in _oespruce:
_oespruce.OEPocketUnitIter_swigregister(OEPocketUnitIter)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEPocketOptions self) -> OEPocketOptions
        __init__(OEPocketOptions self, OEPocketOptions arg2) -> OEPocketOptions
        __init__(OEPocketOptions self, OEPocketOptions arg2) -> OEPocketOptions
        """
        _oespruce.OEPocketOptions_swiginit(self, _oespruce.new_OEPocketOptions(*args))
    __swig_destroy__ = _oespruce.delete_OEPocketOptions

    def CreateCopy(self) -> "OESpruce::OEPocketOptions *":
        r"""CreateCopy(OEPocketOptions self) -> OEPocketOptions"""
        return _oespruce.OEPocketOptions_CreateCopy(self)

    def GetMinSurfaceArea(self) -> "double":
        r"""GetMinSurfaceArea(OEPocketOptions self) -> double"""
        return _oespruce.OEPocketOptions_GetMinSurfaceArea(self)

    def SetMinSurfaceArea(self, value: "double const") -> "bool":
        r"""SetMinSurfaceArea(OEPocketOptions self, double const value) -> bool"""
        return _oespruce.OEPocketOptions_SetMinSurfaceArea(self, value)

    def GetMaxSurfaceArea(self) -> "double":
        r"""GetMaxSurfaceArea(OEPocketOptions self) -> double"""
        return _oespruce.OEPocketOptions_GetMaxSurfaceArea(self)

    def SetMaxSurfaceArea(self, value: "double const") -> "bool":
        r"""SetMaxSurfaceArea(OEPocketOptions self, double const value) -> bool"""
        return _oespruce.OEPocketOptions_SetMaxSurfaceArea(self, value)

    def GetBurialFactor(self) -> "double":
        r"""GetBurialFactor(OEPocketOptions self) -> double"""
        return _oespruce.OEPocketOptions_GetBurialFactor(self)

    def SetBurialFactor(self, value: "double const") -> "bool":
        r"""SetBurialFactor(OEPocketOptions self, double const value) -> bool"""
        return _oespruce.OEPocketOptions_SetBurialFactor(self, value)

# Register OEPocketOptions in _oespruce:
_oespruce.OEPocketOptions_swigregister(OEPocketOptions)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEPocket self, OESpicoli::OESurface const & surf, OEMolBase mol) -> OEPocket
        __init__(OEPocket self, OEPocket rhs) -> OEPocket
        __init__(OEPocket self, OEPocket arg2) -> OEPocket
        """
        _oespruce.OEPocket_swiginit(self, _oespruce.new_OEPocket(*args))
    __swig_destroy__ = _oespruce.delete_OEPocket

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



    def CreateCopy(self) -> "OESpruce::OEPocket *":
        r"""CreateCopy(OEPocket self) -> OEPocket"""
        return _oespruce.OEPocket_CreateCopy(self)

    def GetSurfaceArea(self) -> "double":
        r"""GetSurfaceArea(OEPocket self) -> double"""
        return _oespruce.OEPocket_GetSurfaceArea(self)

    def GetLocalDensity(self) -> "double":
        r"""GetLocalDensity(OEPocket self) -> double"""
        return _oespruce.OEPocket_GetLocalDensity(self)

    def GetPocketPredicate(self) -> "OESystem::OEUnaryPredicate< OEChem::OEAtomBase > const &":
        r"""GetPocketPredicate(OEPocket self) -> OEUnaryAtomPred"""
        return _oespruce.OEPocket_GetPocketPredicate(self)

    def GetPocketSurface(self, *args) -> "OESpicoli::OESurface &":
        r"""
        GetPocketSurface(OEPocket self) -> OESpicoli::OESurface const
        GetPocketSurface(OEPocket self) -> OESpicoli::OESurface &
        """
        return _oespruce.OEPocket_GetPocketSurface(self, *args)

    def GetAtoms(self) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""GetAtoms(OEPocket self) -> OESystem::OEIterBase< OEChem::OEAtomBase > *"""
        return _oespruce.OEPocket_GetAtoms(self)

    def GetResidues(self) -> "OESystem::OEIterBase< OEChem::OEResidue > *":
        r"""GetResidues(OEPocket self) -> OESystem::OEIterBase< OEChem::OEResidue > *"""
        return _oespruce.OEPocket_GetResidues(self)

# Register OEPocket in _oespruce:
_oespruce.OEPocket_swigregister(OEPocket)


def OEFindPockets(*args) -> "OESystem::OEIterBase< OESpruce::OEPocket > *":
    r"""
    OEFindPockets(OEDesignUnit designUnit, unsigned int const componentMask=, OEPocketOptions opts=OESpruce::OEPocketOptions(), OEUnaryAtomPred restrictPred=OESystem::OEIsTrue< OEChem::OEAtomBase >()) -> OESystem::OEIterBase< OESpruce::OEPocket >
    OEFindPockets(OEMolBase mol, OEPocketOptions opts=OESpruce::OEPocketOptions(), OEUnaryAtomPred restrictPred=OESystem::OEIsTrue< OEChem::OEAtomBase >()) -> OESystem::OEIterBase< OESpruce::OEPocket >
    """
    return _oespruce.OEFindPockets(*args)
class OESidechainBuilderOptions(oechem.OEOptions):
    r"""Proxy of C++ OESpruce::OESidechainBuilderOptions class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESidechainBuilderOptions self) -> OESidechainBuilderOptions
        __init__(OESidechainBuilderOptions self, OESidechainBuilderOptions arg2) -> OESidechainBuilderOptions
        """
        _oespruce.OESidechainBuilderOptions_swiginit(self, _oespruce.new_OESidechainBuilderOptions(*args))
    __swig_destroy__ = _oespruce.delete_OESidechainBuilderOptions

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

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

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

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

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

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

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

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

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

# Register OESidechainBuilderOptions in _oespruce:
_oespruce.OESidechainBuilderOptions_swigregister(OESidechainBuilderOptions)

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

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

    def __init__(self, *args):
        r"""
        __init__(OECapBuilderOptions self) -> OECapBuilderOptions
        __init__(OECapBuilderOptions self, OECapBuilderOptions arg2) -> OECapBuilderOptions
        """
        _oespruce.OECapBuilderOptions_swiginit(self, _oespruce.new_OECapBuilderOptions(*args))
    __swig_destroy__ = _oespruce.delete_OECapBuilderOptions

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

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

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

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

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

    def GetForceCapping(self) -> "bool":
        r"""GetForceCapping(OECapBuilderOptions self) -> bool"""
        return _oespruce.OECapBuilderOptions_GetForceCapping(self)

    def SetForceCapping(self, value: "bool const") -> "bool":
        r"""SetForceCapping(OECapBuilderOptions self, bool const value) -> bool"""
        return _oespruce.OECapBuilderOptions_SetForceCapping(self, value)

# Register OECapBuilderOptions in _oespruce:
_oespruce.OECapBuilderOptions_swigregister(OECapBuilderOptions)

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

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

    def __init__(self, *args):
        r"""
        __init__(OELoopBuilderOptions self) -> OELoopBuilderOptions
        __init__(OELoopBuilderOptions self, OELoopBuilderOptions arg2) -> OELoopBuilderOptions
        """
        _oespruce.OELoopBuilderOptions_swiginit(self, _oespruce.new_OELoopBuilderOptions(*args))
    __swig_destroy__ = _oespruce.delete_OELoopBuilderOptions

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    def GetSeqAlignMethod(self) -> "unsigned int":
        r"""GetSeqAlignMethod(OELoopBuilderOptions self) -> unsigned int"""
        return _oespruce.OELoopBuilderOptions_GetSeqAlignMethod(self)

    def SetSeqAlignMethod(self, value: "unsigned int const") -> "bool":
        r"""SetSeqAlignMethod(OELoopBuilderOptions self, unsigned int const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetSeqAlignMethod(self, value)

    def GetSeqAlignGapPenalty(self) -> "int":
        r"""GetSeqAlignGapPenalty(OELoopBuilderOptions self) -> int"""
        return _oespruce.OELoopBuilderOptions_GetSeqAlignGapPenalty(self)

    def SetSeqAlignGapPenalty(self, value: "int const") -> "bool":
        r"""SetSeqAlignGapPenalty(OELoopBuilderOptions self, int const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetSeqAlignGapPenalty(self, value)

    def GetSeqAlignExtendPenalty(self) -> "int":
        r"""GetSeqAlignExtendPenalty(OELoopBuilderOptions self) -> int"""
        return _oespruce.OELoopBuilderOptions_GetSeqAlignExtendPenalty(self)

    def SetSeqAlignExtendPenalty(self, value: "int const") -> "bool":
        r"""SetSeqAlignExtendPenalty(OELoopBuilderOptions self, int const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetSeqAlignExtendPenalty(self, value)

    def GetBuildTails(self) -> "bool":
        r"""GetBuildTails(OELoopBuilderOptions self) -> bool"""
        return _oespruce.OELoopBuilderOptions_GetBuildTails(self)

    def SetBuildTails(self, value: "bool const") -> "bool":
        r"""SetBuildTails(OELoopBuilderOptions self, bool const value) -> bool"""
        return _oespruce.OELoopBuilderOptions_SetBuildTails(self, value)

# Register OELoopBuilderOptions in _oespruce:
_oespruce.OELoopBuilderOptions_swigregister(OELoopBuilderOptions)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEDesignUnitSplitOptions self) -> OEDesignUnitSplitOptions
        __init__(OEDesignUnitSplitOptions self, OEDesignUnitSplitOptions arg2) -> OEDesignUnitSplitOptions
        """
        _oespruce.OEDesignUnitSplitOptions_swiginit(self, _oespruce.new_OEDesignUnitSplitOptions(*args))
    __swig_destroy__ = _oespruce.delete_OEDesignUnitSplitOptions

    def CreateCopy(self) -> "OESpruce::OEDesignUnitSplitOptions *":
        r"""CreateCopy(OEDesignUnitSplitOptions self) -> OEDesignUnitSplitOptions"""
        return _oespruce.OEDesignUnitSplitOptions_CreateCopy(self)

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

    def SetAlternateLocationHandling(self, value: "unsigned int const") -> "bool":
        r"""SetAlternateLocationHandling(OEDesignUnitSplitOptions self, unsigned int const value) -> bool"""
        return _oespruce.OEDesignUnitSplitOptions_SetAlternateLocationHandling(self, value)

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

    def SetMinLigAtoms(self, value: "unsigned int const") -> "bool":
        r"""SetMinLigAtoms(OEDesignUnitSplitOptions self, unsigned int const value) -> bool"""
        return _oespruce.OEDesignUnitSplitOptions_SetMinLigAtoms(self, value)

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

    def SetMaxLigAtoms(self, value: "unsigned int const") -> "bool":
        r"""SetMaxLigAtoms(OEDesignUnitSplitOptions self, unsigned int const value) -> bool"""
        return _oespruce.OEDesignUnitSplitOptions_SetMaxLigAtoms(self, value)

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

    def SetMaxLigResidues(self, value: "unsigned int const") -> "bool":
        r"""SetMaxLigResidues(OEDesignUnitSplitOptions self, unsigned int const value) -> bool"""
        return _oespruce.OEDesignUnitSplitOptions_SetMaxLigResidues(self, value)

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

    def SetMaxSystemAtoms(self, value: "unsigned int const") -> "bool":
        r"""SetMaxSystemAtoms(OEDesignUnitSplitOptions self, unsigned int const value) -> bool"""
        return _oespruce.OEDesignUnitSplitOptions_SetMaxSystemAtoms(self, value)

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

    def SetTargetComponentID(self, value: "unsigned int const") -> "bool":
        r"""SetTargetComponentID(OEDesignUnitSplitOptions self, unsigned int const value) -> bool"""
        return _oespruce.OEDesignUnitSplitOptions_SetTargetComponentID(self, value)

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

    def SetMakePackingResidues(self, value: "bool const") -> "bool":
        r"""SetMakePackingResidues(OEDesignUnitSplitOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitSplitOptions_SetMakePackingResidues(self, value)

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

    def SetExcipientCodes(self, *args) -> "bool":
        r"""
        SetExcipientCodes(OEDesignUnitSplitOptions self, OEStringVector value) -> bool
        SetExcipientCodes(OEDesignUnitSplitOptions self, std::string const & value) -> bool
        """
        return _oespruce.OEDesignUnitSplitOptions_SetExcipientCodes(self, *args)

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

    def SetCofactorCodes(self, *args) -> "bool":
        r"""
        SetCofactorCodes(OEDesignUnitSplitOptions self, OEStringVector value) -> bool
        SetCofactorCodes(OEDesignUnitSplitOptions self, std::string const & value) -> bool
        """
        return _oespruce.OEDesignUnitSplitOptions_SetCofactorCodes(self, *args)

    def GetLipidCodes(self) -> "std::vector< std::string,std::allocator< std::string > >":
        r"""GetLipidCodes(OEDesignUnitSplitOptions self) -> OEStringVector"""
        return _oespruce.OEDesignUnitSplitOptions_GetLipidCodes(self)

    def SetLipidCodes(self, *args) -> "bool":
        r"""
        SetLipidCodes(OEDesignUnitSplitOptions self, OEStringVector value) -> bool
        SetLipidCodes(OEDesignUnitSplitOptions self, std::string const & value) -> bool
        """
        return _oespruce.OEDesignUnitSplitOptions_SetLipidCodes(self, *args)

    def AddExcipientCode(self, addCode: "std::string") -> "void":
        r"""AddExcipientCode(OEDesignUnitSplitOptions self, std::string addCode)"""
        return _oespruce.OEDesignUnitSplitOptions_AddExcipientCode(self, addCode)

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

    def AddCofactorCode(self, addCode: "std::string") -> "void":
        r"""AddCofactorCode(OEDesignUnitSplitOptions self, std::string addCode)"""
        return _oespruce.OEDesignUnitSplitOptions_AddCofactorCode(self, addCode)

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

    def AddLipidCode(self, addCode: "std::string") -> "void":
        r"""AddLipidCode(OEDesignUnitSplitOptions self, std::string addCode)"""
        return _oespruce.OEDesignUnitSplitOptions_AddLipidCode(self, addCode)

    def ClearLipidCodes(self) -> "void":
        r"""ClearLipidCodes(OEDesignUnitSplitOptions self)"""
        return _oespruce.OEDesignUnitSplitOptions_ClearLipidCodes(self)

# Register OEDesignUnitSplitOptions in _oespruce:
_oespruce.OEDesignUnitSplitOptions_swigregister(OEDesignUnitSplitOptions)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEDesignUnitEnumerateSitesOptions self) -> OEDesignUnitEnumerateSitesOptions
        __init__(OEDesignUnitEnumerateSitesOptions self, OEDesignUnitEnumerateSitesOptions arg2) -> OEDesignUnitEnumerateSitesOptions
        """
        _oespruce.OEDesignUnitEnumerateSitesOptions_swiginit(self, _oespruce.new_OEDesignUnitEnumerateSitesOptions(*args))
    __swig_destroy__ = _oespruce.delete_OEDesignUnitEnumerateSitesOptions

    def CreateCopy(self) -> "OESpruce::OEDesignUnitEnumerateSitesOptions *":
        r"""CreateCopy(OEDesignUnitEnumerateSitesOptions self) -> OEDesignUnitEnumerateSitesOptions"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_CreateCopy(self)

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

    def SetCollapseNonSiteAlts(self, value: "bool const") -> "bool":
        r"""SetCollapseNonSiteAlts(OEDesignUnitEnumerateSitesOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_SetCollapseNonSiteAlts(self, value)

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

    def SetDuplicateRemoval(self, value: "bool const") -> "bool":
        r"""SetDuplicateRemoval(OEDesignUnitEnumerateSitesOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_SetDuplicateRemoval(self, value)

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

    def SetRestrictToRefSite(self, value: "bool const") -> "bool":
        r"""SetRestrictToRefSite(OEDesignUnitEnumerateSitesOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_SetRestrictToRefSite(self, value)

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

    def SetEnumerateCofactorSites(self, value: "bool const") -> "bool":
        r"""SetEnumerateCofactorSites(OEDesignUnitEnumerateSitesOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_SetEnumerateCofactorSites(self, value)

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

    def SetSiteSize(self, value: "double const") -> "bool":
        r"""SetSiteSize(OEDesignUnitEnumerateSitesOptions self, double const value) -> bool"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_SetSiteSize(self, value)

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

    def SetAddInteractionHints(self, value: "bool const") -> "bool":
        r"""SetAddInteractionHints(OEDesignUnitEnumerateSitesOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_SetAddInteractionHints(self, value)

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

    def SetAddStyle(self, value: "bool const") -> "bool":
        r"""SetAddStyle(OEDesignUnitEnumerateSitesOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitEnumerateSitesOptions_SetAddStyle(self, value)

# Register OEDesignUnitEnumerateSitesOptions in _oespruce:
_oespruce.OEDesignUnitEnumerateSitesOptions_swigregister(OEDesignUnitEnumerateSitesOptions)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEDesignUnitBuildOptions self) -> OEDesignUnitBuildOptions
        __init__(OEDesignUnitBuildOptions self, OEDesignUnitBuildOptions arg2) -> OEDesignUnitBuildOptions
        """
        _oespruce.OEDesignUnitBuildOptions_swiginit(self, _oespruce.new_OEDesignUnitBuildOptions(*args))
    __swig_destroy__ = _oespruce.delete_OEDesignUnitBuildOptions

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

# Register OEDesignUnitBuildOptions in _oespruce:
_oespruce.OEDesignUnitBuildOptions_swigregister(OEDesignUnitBuildOptions)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEDesignUnitPrepOptions self) -> OEDesignUnitPrepOptions
        __init__(OEDesignUnitPrepOptions self, OEDesignUnitBuildOptions buildOpts, OEProtonateDesignUnitOptions protonateOpts, OEDesignUnitEnumerateSitesOptions enumOpts) -> OEDesignUnitPrepOptions
        __init__(OEDesignUnitPrepOptions self, OEDesignUnitPrepOptions arg2) -> OEDesignUnitPrepOptions
        """
        _oespruce.OEDesignUnitPrepOptions_swiginit(self, _oespruce.new_OEDesignUnitPrepOptions(*args))
    __swig_destroy__ = _oespruce.delete_OEDesignUnitPrepOptions

    def CreateCopy(self) -> "OESpruce::OEDesignUnitPrepOptions *":
        r"""CreateCopy(OEDesignUnitPrepOptions self) -> OEDesignUnitPrepOptions"""
        return _oespruce.OEDesignUnitPrepOptions_CreateCopy(self)

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

    def SetAssignPartialChargesAndRadii(self, value: "bool const") -> "bool":
        r"""SetAssignPartialChargesAndRadii(OEDesignUnitPrepOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitPrepOptions_SetAssignPartialChargesAndRadii(self, value)

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

    def SetProtonate(self, value: "bool const") -> "bool":
        r"""SetProtonate(OEDesignUnitPrepOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitPrepOptions_SetProtonate(self, value)

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

    def SetStrictProtonationMode(self, value: "bool const") -> "bool":
        r"""SetStrictProtonationMode(OEDesignUnitPrepOptions self, bool const value) -> bool"""
        return _oespruce.OEDesignUnitPrepOptions_SetStrictProtonationMode(self, value)

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

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

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

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

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

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

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

    def GetChargeEngine(self, *args) -> "OEProton::OEDesignUnitCharges const &":
        r"""
        GetChargeEngine(OEDesignUnitPrepOptions self) -> OEProton::OEDesignUnitCharges
        GetChargeEngine(OEDesignUnitPrepOptions self) -> OEProton::OEDesignUnitCharges const &
        """
        return _oespruce.OEDesignUnitPrepOptions_GetChargeEngine(self, *args)

# Register OEDesignUnitPrepOptions in _oespruce:
_oespruce.OEDesignUnitPrepOptions_swigregister(OEDesignUnitPrepOptions)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEMakeDesignUnitOptions self) -> OEMakeDesignUnitOptions
        __init__(OEMakeDesignUnitOptions self, OEDesignUnitSplitOptions splitOpts, OEDesignUnitPrepOptions prepOpts, OEBioUnitExtractionOptions buExtractOpts) -> OEMakeDesignUnitOptions
        __init__(OEMakeDesignUnitOptions self, OEMakeDesignUnitOptions arg2) -> OEMakeDesignUnitOptions
        """
        _oespruce.OEMakeDesignUnitOptions_swiginit(self, _oespruce.new_OEMakeDesignUnitOptions(*args))
    __swig_destroy__ = _oespruce.delete_OEMakeDesignUnitOptions

    def CreateCopy(self) -> "OESpruce::OEMakeDesignUnitOptions *":
        r"""CreateCopy(OEMakeDesignUnitOptions self) -> OEMakeDesignUnitOptions"""
        return _oespruce.OEMakeDesignUnitOptions_CreateCopy(self)

    def GetExtractBiologicalUnits(self) -> "bool":
        r"""GetExtractBiologicalUnits(OEMakeDesignUnitOptions self) -> bool"""
        return _oespruce.OEMakeDesignUnitOptions_GetExtractBiologicalUnits(self)

    def SetExtractBiologicalUnits(self, value: "bool const") -> "bool":
        r"""SetExtractBiologicalUnits(OEMakeDesignUnitOptions self, bool const value) -> bool"""
        return _oespruce.OEMakeDesignUnitOptions_SetExtractBiologicalUnits(self, value)

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

    def SetSuperpose(self, value: "bool const") -> "bool":
        r"""SetSuperpose(OEMakeDesignUnitOptions self, bool const value) -> bool"""
        return _oespruce.OEMakeDesignUnitOptions_SetSuperpose(self, value)

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

    def SetSuperpositionMethod(self, value: "unsigned int const") -> "bool":
        r"""SetSuperpositionMethod(OEMakeDesignUnitOptions self, unsigned int const value) -> bool"""
        return _oespruce.OEMakeDesignUnitOptions_SetSuperpositionMethod(self, value)

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

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

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

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

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

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

# Register OEMakeDesignUnitOptions in _oespruce:
_oespruce.OEMakeDesignUnitOptions_swigregister(OEMakeDesignUnitOptions)

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

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

    def __init__(self, *args):
        r"""
        __init__(OESpruceFilterOptions self) -> OESpruceFilterOptions
        __init__(OESpruceFilterOptions self, OESpruceFilterOptions arg2) -> OESpruceFilterOptions
        """
        _oespruce.OESpruceFilterOptions_swiginit(self, _oespruce.new_OESpruceFilterOptions(*args))
    __swig_destroy__ = _oespruce.delete_OESpruceFilterOptions

    def CreateCopy(self) -> "OESpruce::OESpruceFilterOptions *":
        r"""CreateCopy(OESpruceFilterOptions self) -> OESpruceFilterOptions"""
        return _oespruce.OESpruceFilterOptions_CreateCopy(self)

    def GetFixResStates(self) -> "bool":
        r"""GetFixResStates(OESpruceFilterOptions self) -> bool"""
        return _oespruce.OESpruceFilterOptions_GetFixResStates(self)

    def SetFixResStates(self, value: "bool const") -> "bool":
        r"""SetFixResStates(OESpruceFilterOptions self, bool const value) -> bool"""
        return _oespruce.OESpruceFilterOptions_SetFixResStates(self, value)

    def GetFixNames(self) -> "bool":
        r"""GetFixNames(OESpruceFilterOptions self) -> bool"""
        return _oespruce.OESpruceFilterOptions_GetFixNames(self)

    def SetFixNames(self, value: "bool const") -> "bool":
        r"""SetFixNames(OESpruceFilterOptions self, bool const value) -> bool"""
        return _oespruce.OESpruceFilterOptions_SetFixNames(self, value)

    def GetFixBondsToMetals(self) -> "bool":
        r"""GetFixBondsToMetals(OESpruceFilterOptions self) -> bool"""
        return _oespruce.OESpruceFilterOptions_GetFixBondsToMetals(self)

    def SetFixBondsToMetals(self, value: "bool const") -> "bool":
        r"""SetFixBondsToMetals(OESpruceFilterOptions self, bool const value) -> bool"""
        return _oespruce.OESpruceFilterOptions_SetFixBondsToMetals(self, value)

    def GetFixBackboneAtoms(self) -> "bool":
        r"""GetFixBackboneAtoms(OESpruceFilterOptions self) -> bool"""
        return _oespruce.OESpruceFilterOptions_GetFixBackboneAtoms(self)

    def SetFixBackboneAtoms(self, value: "bool const") -> "bool":
        r"""SetFixBackboneAtoms(OESpruceFilterOptions self, bool const value) -> bool"""
        return _oespruce.OESpruceFilterOptions_SetFixBackboneAtoms(self, value)

    def GetDeleteFloatingRes(self) -> "bool":
        r"""GetDeleteFloatingRes(OESpruceFilterOptions self) -> bool"""
        return _oespruce.OESpruceFilterOptions_GetDeleteFloatingRes(self)

    def SetDeleteFloatingRes(self, value: "bool const") -> "bool":
        r"""SetDeleteFloatingRes(OESpruceFilterOptions self, bool const value) -> bool"""
        return _oespruce.OESpruceFilterOptions_SetDeleteFloatingRes(self, value)

    def GetFixInvalidCovalentBonds(self) -> "bool":
        r"""GetFixInvalidCovalentBonds(OESpruceFilterOptions self) -> bool"""
        return _oespruce.OESpruceFilterOptions_GetFixInvalidCovalentBonds(self)

    def SetFixInvalidCovalentBonds(self, value: "bool const") -> "bool":
        r"""SetFixInvalidCovalentBonds(OESpruceFilterOptions self, bool const value) -> bool"""
        return _oespruce.OESpruceFilterOptions_SetFixInvalidCovalentBonds(self, value)

    def GetFixChainIDs(self) -> "bool":
        r"""GetFixChainIDs(OESpruceFilterOptions self) -> bool"""
        return _oespruce.OESpruceFilterOptions_GetFixChainIDs(self)

    def SetFixChainIDs(self, value: "bool const") -> "bool":
        r"""SetFixChainIDs(OESpruceFilterOptions self, bool const value) -> bool"""
        return _oespruce.OESpruceFilterOptions_SetFixChainIDs(self, value)

# Register OESpruceFilterOptions in _oespruce:
_oespruce.OESpruceFilterOptions_swigregister(OESpruceFilterOptions)


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

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

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

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

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

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

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

    def __init__(self, *args):
        r"""
        __init__(OEHeterogenMetadata self) -> OEHeterogenMetadata
        __init__(OEHeterogenMetadata self, OEHeterogenMetadata arg2) -> OEHeterogenMetadata
        """
        _oespruce.OEHeterogenMetadata_swiginit(self, _oespruce.new_OEHeterogenMetadata(*args))
    __swig_destroy__ = _oespruce.delete_OEHeterogenMetadata

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

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

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

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

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

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

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

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

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

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

    def AddTautomers(self, *args) -> "void":
        r"""
        AddTautomers(OEHeterogenMetadata self, OEStringVector tautomers)
        AddTautomers(OEHeterogenMetadata self, PyObject * list)
        """
        return _oespruce.OEHeterogenMetadata_AddTautomers(self, *args)

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

# Register OEHeterogenMetadata in _oespruce:
_oespruce.OEHeterogenMetadata_swigregister(OEHeterogenMetadata)

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

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

    def __init__(self, *args):
        r"""
        __init__(OESequenceMetadata self) -> OESequenceMetadata
        __init__(OESequenceMetadata self, OESequenceMetadata arg2) -> OESequenceMetadata
        """
        _oespruce.OESequenceMetadata_swiginit(self, _oespruce.new_OESequenceMetadata(*args))
    __swig_destroy__ = _oespruce.delete_OESequenceMetadata

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

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

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

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

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

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

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

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

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

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

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

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

# Register OESequenceMetadata in _oespruce:
_oespruce.OESequenceMetadata_swigregister(OESequenceMetadata)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    def AddKeywords(self, *args) -> "void":
        r"""
        AddKeywords(OEStructureMetadata self, OEStringVector keywords)
        AddKeywords(OEStructureMetadata self, PyObject * list)
        """
        return _oespruce.OEStructureMetadata_AddKeywords(self, *args)

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

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

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

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

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

    def __init__(self, *args):
        r"""
        __init__(OEStructureMetadata self) -> OEStructureMetadata
        __init__(OEStructureMetadata self, OEStructureMetadata arg2) -> OEStructureMetadata
        __init__(OEStructureMetadata self, PyObject * list) -> OEStructureMetadata
        __init__(OEStructureMetadata self, PyObject * hlist, PyObject * slist) -> OEStructureMetadata
        """
        _oespruce.OEStructureMetadata_swiginit(self, _oespruce.new_OEStructureMetadata(*args))

# Register OEStructureMetadata in _oespruce:
_oespruce.OEStructureMetadata_swigregister(OEStructureMetadata)


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

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

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

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

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

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

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

    def __init__(self, *args):
        r"""
        __init__(OESpruceFilter self) -> OESpruceFilter
        __init__(OESpruceFilter self, OESpruceFilterOptions fOpts, OEMakeDesignUnitOptions makeOpts) -> OESpruceFilter
        __init__(OESpruceFilter self, OESpruceFilter rhs) -> OESpruceFilter
        """
        _oespruce.OESpruceFilter_swiginit(self, _oespruce.new_OESpruceFilter(*args))
    __swig_destroy__ = _oespruce.delete_OESpruceFilter

    def StandardizeAndFilter(self, *args) -> "unsigned int":
        r"""StandardizeAndFilter(OESpruceFilter self, OEMolBase mol, OESystem::OESkewGrid const & eDensGrid, OEStructureMetadata mdata=OESpruce::OEStructureMetadata()) -> unsigned int"""
        return _oespruce.OESpruceFilter_StandardizeAndFilter(self, *args)

    def GetMessages(self, *args) -> "std::string":
        r"""GetMessages(OESpruceFilter self, unsigned int const errorTypes=) -> std::string"""
        return _oespruce.OESpruceFilter_GetMessages(self, *args)

    def GetAtoms(self, *args) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""GetAtoms(OESpruceFilter self, unsigned int const errorTypes=) -> OESystem::OEIterBase< OEChem::OEAtomBase >"""
        return _oespruce.OESpruceFilter_GetAtoms(self, *args)

# Register OESpruceFilter in _oespruce:
_oespruce.OESpruceFilter_swigregister(OESpruceFilter)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEValidateDesignUnit self) -> OEValidateDesignUnit
        __init__(OEValidateDesignUnit self, OEValidateDesignUnit rhs) -> OEValidateDesignUnit
        """
        _oespruce.OEValidateDesignUnit_swiginit(self, _oespruce.new_OEValidateDesignUnit(*args))
    __swig_destroy__ = _oespruce.delete_OEValidateDesignUnit

    def Validate(self, *args) -> "unsigned int":
        r"""Validate(OEValidateDesignUnit self, OEDesignUnit du, OEStructureMetadata mdata=OESpruce::OEStructureMetadata()) -> unsigned int"""
        return _oespruce.OEValidateDesignUnit_Validate(self, *args)

    def GetMessages(self, *args) -> "std::string":
        r"""GetMessages(OEValidateDesignUnit self, unsigned int const errorTypes=) -> std::string"""
        return _oespruce.OEValidateDesignUnit_GetMessages(self, *args)

    def GetProblematicResidues(self, *args) -> "std::vector< OEChem::OEResidue,std::allocator< OEChem::OEResidue > >":
        r"""GetProblematicResidues(OEValidateDesignUnit self, unsigned int const errorTypes=) -> OEResidueVector"""
        return _oespruce.OEValidateDesignUnit_GetProblematicResidues(self, *args)

# Register OEValidateDesignUnit in _oespruce:
_oespruce.OEValidateDesignUnit_swigregister(OEValidateDesignUnit)

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

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

    def __init__(self, *args):
        r"""
        __init__(OEProtonateDesignUnitOptions self) -> OEProtonateDesignUnitOptions
        __init__(OEProtonateDesignUnitOptions self, OEPlaceHydrogensOptions placeHOpts) -> OEProtonateDesignUnitOptions
        __init__(OEProtonateDesignUnitOptions self, OEProtonateDesignUnitOptions rhs) -> OEProtonateDesignUnitOptions
        """
        _oespruce.OEProtonateDesignUnitOptions_swiginit(self, _oespruce.new_OEProtonateDesignUnitOptions(*args))
    __swig_destroy__ = _oespruce.delete_OEProtonateDesignUnitOptions

    def CreateCopy(self) -> "OESpruce::OEProtonateDesignUnitOptions *":
        r"""CreateCopy(OEProtonateDesignUnitOptions self) -> OEProtonateDesignUnitOptions"""
        return _oespruce.OEProtonateDesignUnitOptions_CreateCopy(self)

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

    def SetGenerateTautomers(self, value: "bool const") -> "bool":
        r"""SetGenerateTautomers(OEProtonateDesignUnitOptions self, bool const value) -> bool"""
        return _oespruce.OEProtonateDesignUnitOptions_SetGenerateTautomers(self, value)

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

    def SetOptimizeExpProtons(self, value: "bool const") -> "bool":
        r"""SetOptimizeExpProtons(OEProtonateDesignUnitOptions self, bool const value) -> bool"""
        return _oespruce.OEProtonateDesignUnitOptions_SetOptimizeExpProtons(self, value)

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

    def SetHetGroupNbrDist(self, value: "double const") -> "bool":
        r"""SetHetGroupNbrDist(OEProtonateDesignUnitOptions self, double const value) -> bool"""
        return _oespruce.OEProtonateDesignUnitOptions_SetHetGroupNbrDist(self, value)

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

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

# Register OEProtonateDesignUnitOptions in _oespruce:
_oespruce.OEProtonateDesignUnitOptions_swigregister(OEProtonateDesignUnitOptions)


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

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

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

    def __init__(self, *args):
        r"""
        __init__(OEDesignUnitIter self) -> OEDesignUnitIter
        __init__(OEDesignUnitIter self, OEDesignUnitIter rhs) -> OEDesignUnitIter
        __init__(OEDesignUnitIter self, OESystem::OEIterBase< OEBio::OEDesignUnit > * rhs) -> OEDesignUnitIter
        __init__(OEDesignUnitIter self, OESystem::OEIterBase< OESystem::OEIter< OEBio::OEDesignUnit >::NonConstA > * rhs) -> OEDesignUnitIter
        """
        _oespruce.OEDesignUnitIter_swiginit(self, _oespruce.new_OEDesignUnitIter(*args))
    __swig_destroy__ = _oespruce.delete_OEDesignUnitIter

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

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

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

    def __ref__(self) -> "OEBio::OEDesignUnit &":
        r"""__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 *":
        r"""next(OEDesignUnitIter self) -> PyObject *"""
        return _oespruce.OEDesignUnitIter_next(self)

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

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

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

# Register OEDesignUnitIter in _oespruce:
_oespruce.OEDesignUnitIter_swigregister(OEDesignUnitIter)


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

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

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

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

def OEMakeDesignUnitFromPocket(*args) -> "bool":
    r"""
    OEMakeDesignUnitFromPocket(OEDesignUnit du, OEDesignUnit designUnit, OEPocket pocket) -> bool
    OEMakeDesignUnitFromPocket(OEDesignUnit du, OEMolBase mol, OEPocket pocket) -> bool
    """
    return _oespruce.OEMakeDesignUnitFromPocket(*args)

def OEIsRedundantDesignUnit(dus: "OEDesignUnitVector", du: "OEDesignUnit", opts: "OEDesignUnitEnumerateSitesOptions") -> "bool":
    r"""OEIsRedundantDesignUnit(OEDesignUnitVector dus, OEDesignUnit du, OEDesignUnitEnumerateSitesOptions opts) -> bool"""
    return _oespruce.OEIsRedundantDesignUnit(dus, du, opts)
class OESuperposeOptions(oechem.OEOptions):
    r"""Proxy of C++ OESpruce::OESuperposeOptions class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESuperposeOptions self, unsigned int const method=) -> OESuperposeOptions
        __init__(OESuperposeOptions self, OESuperposeOptions arg2) -> OESuperposeOptions
        """
        _oespruce.OESuperposeOptions_swiginit(self, _oespruce.new_OESuperposeOptions(*args))
    __swig_destroy__ = _oespruce.delete_OESuperposeOptions

    def GetMethod(self) -> "unsigned int":
        r"""GetMethod(OESuperposeOptions self) -> unsigned int"""
        return _oespruce.OESuperposeOptions_GetMethod(self)

    def SetMethod(self, value: "unsigned int const") -> "bool":
        r"""SetMethod(OESuperposeOptions self, unsigned int const value) -> bool"""
        return _oespruce.OESuperposeOptions_SetMethod(self, value)

    def GetUseConstraints(self) -> "bool":
        r"""GetUseConstraints(OESuperposeOptions self) -> bool"""
        return _oespruce.OESuperposeOptions_GetUseConstraints(self)

    def SetUseConstraints(self, value: "bool const") -> "bool":
        r"""SetUseConstraints(OESuperposeOptions self, bool const value) -> bool"""
        return _oespruce.OESuperposeOptions_SetUseConstraints(self, value)

    def GetValidRMSD(self) -> "double":
        r"""GetValidRMSD(OESuperposeOptions self) -> double"""
        return _oespruce.OESuperposeOptions_GetValidRMSD(self)

    def SetValidRMSD(self, value: "double const") -> "bool":
        r"""SetValidRMSD(OESuperposeOptions self, double const value) -> bool"""
        return _oespruce.OESuperposeOptions_SetValidRMSD(self, value)

    def GetValidTanimoto(self) -> "double":
        r"""GetValidTanimoto(OESuperposeOptions self) -> double"""
        return _oespruce.OESuperposeOptions_GetValidTanimoto(self)

    def SetValidTanimoto(self, value: "double const") -> "bool":
        r"""SetValidTanimoto(OESuperposeOptions self, double const value) -> bool"""
        return _oespruce.OESuperposeOptions_SetValidTanimoto(self, value)

    def GetValidSeqScore(self) -> "int":
        r"""GetValidSeqScore(OESuperposeOptions self) -> int"""
        return _oespruce.OESuperposeOptions_GetValidSeqScore(self)

    def SetValidSeqScore(self, value: "int const") -> "bool":
        r"""SetValidSeqScore(OESuperposeOptions self, int const value) -> bool"""
        return _oespruce.OESuperposeOptions_SetValidSeqScore(self, value)

    def CreateCopy(self) -> "OESpruce::OESuperposeOptions *":
        r"""CreateCopy(OESuperposeOptions self) -> OESuperposeOptions"""
        return _oespruce.OESuperposeOptions_CreateCopy(self)

# Register OESuperposeOptions in _oespruce:
_oespruce.OESuperposeOptions_swigregister(OESuperposeOptions)
cvar = _oespruce.cvar
UNUSED_SEQSCORE = cvar.UNUSED_SEQSCORE
UNUSED_RMSD = cvar.UNUSED_RMSD
UNUSED_TANIMOTO = cvar.UNUSED_TANIMOTO


def OEGetSuperposeMethodName(method: "unsigned int const") -> "std::string":
    r"""OEGetSuperposeMethodName(unsigned int const method) -> std::string"""
    return _oespruce.OEGetSuperposeMethodName(method)

def OEGetSuperposeMethodFromName(name: "std::string const &") -> "unsigned int":
    r"""OEGetSuperposeMethodFromName(std::string const & name) -> unsigned int"""
    return _oespruce.OEGetSuperposeMethodFromName(name)
class OESuperposeResults(object):
    r"""Proxy of C++ OESpruce::OESuperposeResults class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESuperposeResults self) -> OESuperposeResults
        __init__(OESuperposeResults self, OESuperposeResults rhs) -> OESuperposeResults
        __init__(OESuperposeResults self, OESuperposeResults arg2) -> OESuperposeResults
        """
        _oespruce.OESuperposeResults_swiginit(self, _oespruce.new_OESuperposeResults(*args))
    __swig_destroy__ = _oespruce.delete_OESuperposeResults

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



    def IsValid(self) -> "bool":
        r"""IsValid(OESuperposeResults self) -> bool"""
        return _oespruce.OESuperposeResults_IsValid(self)

    def Transform(self, *args) -> "bool":
        r"""
        Transform(OESuperposeResults self, OEMolBase mol) -> bool
        Transform(OESuperposeResults self, OEDesignUnit du) -> bool
        """
        return _oespruce.OESuperposeResults_Transform(self, *args)

    def HasRMSD(self) -> "bool":
        r"""HasRMSD(OESuperposeResults self) -> bool"""
        return _oespruce.OESuperposeResults_HasRMSD(self)

    def HasTanimoto(self) -> "bool":
        r"""HasTanimoto(OESuperposeResults self) -> bool"""
        return _oespruce.OESuperposeResults_HasTanimoto(self)

    def HasSeqScore(self) -> "bool":
        r"""HasSeqScore(OESuperposeResults self) -> bool"""
        return _oespruce.OESuperposeResults_HasSeqScore(self)

    def GetRotMatrix(self, rmat: "double *") -> "bool":
        r"""GetRotMatrix(OESuperposeResults self, double * rmat) -> bool"""
        return _oespruce.OESuperposeResults_GetRotMatrix(self, rmat)

    def GetTranslation(self, trans: "double *") -> "bool":
        r"""GetTranslation(OESuperposeResults self, double * trans) -> bool"""
        return _oespruce.OESuperposeResults_GetTranslation(self, trans)

    def GetRMSD(self) -> "double":
        r"""GetRMSD(OESuperposeResults self) -> double"""
        return _oespruce.OESuperposeResults_GetRMSD(self)

    def GetTanimoto(self) -> "double":
        r"""GetTanimoto(OESuperposeResults self) -> double"""
        return _oespruce.OESuperposeResults_GetTanimoto(self)

    def GetRefChains(self) -> "std::vector< std::string,std::allocator< std::string > > const &":
        r"""GetRefChains(OESuperposeResults self) -> OEStringVector"""
        return _oespruce.OESuperposeResults_GetRefChains(self)

    def GetFitChains(self) -> "std::vector< std::string,std::allocator< std::string > > const &":
        r"""GetFitChains(OESuperposeResults self) -> OEStringVector"""
        return _oespruce.OESuperposeResults_GetFitChains(self)

    def GetSeqScore(self) -> "int":
        r"""GetSeqScore(OESuperposeResults self) -> int"""
        return _oespruce.OESuperposeResults_GetSeqScore(self)

    def GetTransform(self) -> "OEChem::OETrans &":
        r"""GetTransform(OESuperposeResults self) -> OETrans"""
        return _oespruce.OESuperposeResults_GetTransform(self)

# Register OESuperposeResults in _oespruce:
_oespruce.OESuperposeResults_swigregister(OESuperposeResults)

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

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

    def __init__(self, *args):
        r"""
        __init__(OESuperpose self, OESuperposeOptions opts=OESpruce::OESuperposeOptions(OESuperposeMethod::Default)) -> OESuperpose
        __init__(OESuperpose self, OESuperpose rhs) -> OESuperpose
        """
        _oespruce.OESuperpose_swiginit(self, _oespruce.new_OESuperpose(*args))
    __swig_destroy__ = _oespruce.delete_OESuperpose

    def HasRef(self) -> "bool":
        r"""HasRef(OESuperpose self) -> bool"""
        return _oespruce.OESuperpose_HasRef(self)

    def HasConstraintMol(self) -> "bool":
        r"""HasConstraintMol(OESuperpose self) -> bool"""
        return _oespruce.OESuperpose_HasConstraintMol(self)

    def Clear(self) -> "void":
        r"""Clear(OESuperpose self)"""
        return _oespruce.OESuperpose_Clear(self)

    def SetOptions(self, opts: "OESuperposeOptions") -> "bool":
        r"""SetOptions(OESuperpose self, OESuperposeOptions opts) -> bool"""
        return _oespruce.OESuperpose_SetOptions(self, opts)

    def SetupRef(self, *args) -> "bool":
        r"""
        SetupRef(OESuperpose self, OEDesignUnit refDU, OEUnaryAtomPred refPred=OEChem::OEIsTrueAtom()) -> bool
        SetupRef(OESuperpose self, OEMolBase refMol, OEUnaryAtomPred refPred=OEChem::OEIsTrueAtom()) -> bool
        SetupRef(OESuperpose self, OEMolBase refMol, OEMolBase refConstraintMol, OEUnaryAtomPred refPred=OEChem::OEIsTrueAtom()) -> bool
        SetupRef(OESuperpose self, OEMolBase refMol, OEStringVector siteResidues, OEUnaryAtomPred refPred=OEChem::OEIsTrueAtom()) -> bool
        SetupRef(OESuperpose self, OEMolBase refMol, OEMolBase refConstraintMol, OEStringVector siteResidues, OEUnaryAtomPred refPred=OEChem::OEIsTrueAtom()) -> bool
        """
        return _oespruce.OESuperpose_SetupRef(self, *args)

    def Superpose(self, *args) -> "bool":
        r"""
        Superpose(OESuperpose self, OESuperposeResults results, OEMolBase fitMol, OEUnaryAtomPred fitPred=OEChem::OEIsTrueAtom()) -> bool
        Superpose(OESuperpose self, OESuperposeResults results, OEMolBase fitMol, OEMolBase fitConstraintMol, OEUnaryAtomPred fitPred=OEChem::OEIsTrueAtom()) -> bool
        Superpose(OESuperpose self, OESuperposeResults results, OEDesignUnit fitDU, OEUnaryAtomPred fitPred=OEChem::OEIsTrueAtom()) -> bool
        """
        return _oespruce.OESuperpose_Superpose(self, *args)

# Register OESuperpose in _oespruce:
_oespruce.OESuperpose_swigregister(OESuperpose)



