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


# This file was automatically generated by SWIG (http://www.swig.org).
# Version 3.0.8
#
# 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

def swig_import_helper():
    from os.path import dirname
    import imp
    fp = None
    try:
        fp, pathname, description = imp.find_module('_oechem', [dirname(__file__)])
    except ImportError:
        # OpenEye Import Statements
        fp, pathname, description = imp.find_module('libs', [dirname(__file__)])
        try:
            libs = imp.load_module('libs', fp, pathname, description)
        finally:
            if fp is not None:
                fp.close()

        import sys
        assert not sys.platform.startswith('win')
        
        _oespruce = libs.OEGetModule('_oespruce091')
        return _oespruce

_oespruce = swig_import_helper()
del swig_import_helper
del version_info
try:
    _swig_property = property
except NameError:
    pass  # Python < 2.2 doesn't have 'property'.


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


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


def _swig_getattr_nondynamic(self, class_type, name, static=1):
    if (name == "thisown"):
        return self.this.own()
    method = class_type.__swig_getmethods__.get(name, None)
    if method:
        return method(self)
    if (not static):
        return object.__getattr__(self, name)
    else:
        raise AttributeError(name)

def _swig_getattr(self, class_type, name):
    return _swig_getattr_nondynamic(self, class_type, name, 0)


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

try:
    _object = object
    _newclass = 1
except AttributeError:
    class _object:
        pass
    _newclass = 0



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


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


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

    def __init__(self, *args):
        this = _oespruce.new_StringVector(*args)
        try:
            self.this.append(this)
        except Exception:
            self.this = this

    def __len__(self) -> "unsigned int":
        return _oespruce.StringVector___len__(self)

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

    def append(self, x: 'std::string') -> "void":
        return _oespruce.StringVector_append(self, x)

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

    def pop(self) -> "std::string":
        return _oespruce.StringVector_pop(self)

    def __getitem__(self, i: 'int') -> "std::string":
        return _oespruce.StringVector___getitem__(self, i)

    def __getslice__(self, i: 'int', j: 'int') -> "std::vector< std::string >":
        return _oespruce.StringVector___getslice__(self, i, j)

    def __setitem__(self, i: 'int', x: 'std::string') -> "void":
        return _oespruce.StringVector___setitem__(self, i, x)

    def __setslice__(self, i: 'int', j: 'int', v: 'StringVector') -> "void":
        return _oespruce.StringVector___setslice__(self, i, j, v)

    def __delitem__(self, i: 'int') -> "void":
        return _oespruce.StringVector___delitem__(self, i)

    def __delslice__(self, i: 'int', j: 'int') -> "void":
        return _oespruce.StringVector___delslice__(self, i, j)
    __swig_destroy__ = _oespruce.delete_StringVector
    __del__ = lambda self: None
StringVector_swigregister = _oespruce.StringVector_swigregister
StringVector_swigregister(StringVector)

import openeye.oechem as oechem

_oespruce.OESuperpositionType_Undefined_swigconstant(_oespruce)
OESuperpositionType_Undefined = _oespruce.OESuperpositionType_Undefined

_oespruce.OESuperpositionType_Global_swigconstant(_oespruce)
OESuperpositionType_Global = _oespruce.OESuperpositionType_Global

_oespruce.OESuperpositionType_Site_swigconstant(_oespruce)
OESuperpositionType_Site = _oespruce.OESuperpositionType_Site

_oespruce.OESuperpositionType_DDM_swigconstant(_oespruce)
OESuperpositionType_DDM = _oespruce.OESuperpositionType_DDM

_oespruce.OESuperpositionType_Weighted_swigconstant(_oespruce)
OESuperpositionType_Weighted = _oespruce.OESuperpositionType_Weighted

_oespruce.OESuperpositionType_SSE_swigconstant(_oespruce)
OESuperpositionType_SSE = _oespruce.OESuperpositionType_SSE

OESuperpositionType_Default = OESuperpositionType_Global


_oespruce.OESuperpositionType_Max_swigconstant(_oespruce)
OESuperpositionType_Max = _oespruce.OESuperpositionType_Max
class OEOptions(object):
    """Proxy of C++ OESystem::OEOptions class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr
    __swig_destroy__ = _oespruce.delete_OEOptions
    __del__ = lambda self: None

    def Validate(self) -> "bool":
        """Validate(OEOptions self) -> bool"""
        return _oespruce.OEOptions_Validate(self)

OEOptions_swigregister = _oespruce.OEOptions_swigregister
OEOptions_swigregister(OEOptions)

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

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

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

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


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


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


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


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


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


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


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


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


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


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


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

OESuperpositionOptions_swigregister = _oespruce.OESuperpositionOptions_swigregister
OESuperpositionOptions_swigregister(OESuperpositionOptions)

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

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

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

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



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


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


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


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


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


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


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


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


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

OEStructuralSuperposition_swigregister = _oespruce.OEStructuralSuperposition_swigregister
OEStructuralSuperposition_swigregister(OEStructuralSuperposition)

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

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

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

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



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


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


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


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


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


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

OESecondaryStructureSuperposition_swigregister = _oespruce.OESecondaryStructureSuperposition_swigregister
OESecondaryStructureSuperposition_swigregister(OESecondaryStructureSuperposition)

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

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

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

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


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


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


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


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


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


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



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



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


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


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


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

OEBioAssemblyFactIter_swigregister = _oespruce.OEBioAssemblyFactIter_swigregister
OEBioAssemblyFactIter_swigregister(OEBioAssemblyFactIter)


def OEExtractBioUnits(*args) -> "OESystem::OEIterBase< OEChem::OEMolBase > *":
    """
    OEExtractBioUnits(OEMolBase extractProtein, OEMolBase refProtein) -> OESystem::OEIterBase< OEChem::OEMolBase >
    OEExtractBioUnits(OEMolBase extractProtein, OEMolBase refProtein, int minScore, bool superpose) -> OESystem::OEIterBase< OEChem::OEMolBase >
    OEExtractBioUnits(OEMolBase extractProtein, unsigned int maxAtoms, bool preferAuthor) -> OESystem::OEIterBase< OEChem::OEMolBase >
    OEExtractBioUnits(OEMolBase extractProtein) -> OESystem::OEIterBase< OEChem::OEMolBase > *
    """
    return _oespruce.OEExtractBioUnits(*args)

_oespruce.OE_OESPRUCE_VERSION_swigconstant(_oespruce)
OE_OESPRUCE_VERSION = _oespruce.OE_OESPRUCE_VERSION

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

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

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

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

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

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

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


