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


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

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


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

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

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

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

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

    _oeff = libs.OEGetModule('_oeff2311')
    return _oeff

_oeff = swig_import_helper()
del swig_import_helper

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

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


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


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


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


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


import weakref

class oeff_SwigPyIterator(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oeff.delete_oeff_SwigPyIterator

    def value(self) -> "PyObject *":
        return _oeff.oeff_SwigPyIterator_value(self)

    def incr(self, n: "size_t"=1) -> "swig::oeff_SwigPyIterator *":
        return _oeff.oeff_SwigPyIterator_incr(self, n)

    def decr(self, n: "size_t"=1) -> "swig::oeff_SwigPyIterator *":
        return _oeff.oeff_SwigPyIterator_decr(self, n)

    def distance(self, x: "oeff_SwigPyIterator") -> "ptrdiff_t":
        return _oeff.oeff_SwigPyIterator_distance(self, x)

    def equal(self, x: "oeff_SwigPyIterator") -> "bool":
        return _oeff.oeff_SwigPyIterator_equal(self, x)

    def copy(self) -> "swig::oeff_SwigPyIterator *":
        return _oeff.oeff_SwigPyIterator_copy(self)

    def next(self) -> "PyObject *":
        return _oeff.oeff_SwigPyIterator_next(self)

    def __next__(self) -> "PyObject *":
        return _oeff.oeff_SwigPyIterator___next__(self)

    def previous(self) -> "PyObject *":
        return _oeff.oeff_SwigPyIterator_previous(self)

    def advance(self, n: "ptrdiff_t") -> "swig::oeff_SwigPyIterator *":
        return _oeff.oeff_SwigPyIterator_advance(self, n)

    def __eq__(self, x: "oeff_SwigPyIterator") -> "bool":
        return _oeff.oeff_SwigPyIterator___eq__(self, x)

    def __ne__(self, x: "oeff_SwigPyIterator") -> "bool":
        return _oeff.oeff_SwigPyIterator___ne__(self, x)

    def __iadd__(self, n: "ptrdiff_t") -> "swig::oeff_SwigPyIterator &":
        return _oeff.oeff_SwigPyIterator___iadd__(self, n)

    def __isub__(self, n: "ptrdiff_t") -> "swig::oeff_SwigPyIterator &":
        return _oeff.oeff_SwigPyIterator___isub__(self, n)

    def __add__(self, n: "ptrdiff_t") -> "swig::oeff_SwigPyIterator *":
        return _oeff.oeff_SwigPyIterator___add__(self, n)

    def __sub__(self, *args) -> "ptrdiff_t":
        return _oeff.oeff_SwigPyIterator___sub__(self, *args)
    def __iter__(self):
        return self

# Register oeff_SwigPyIterator in _oeff:
_oeff.oeff_SwigPyIterator_swigregister(oeff_SwigPyIterator)

import openeye.oechem as oechem
OEFuncType_Undefined = _oeff.OEFuncType_Undefined

OEFuncType_VdW = _oeff.OEFuncType_VdW

OEFuncType_VdWRepel = _oeff.OEFuncType_VdWRepel

OEFuncType_Coulomb = _oeff.OEFuncType_Coulomb

OEFuncType_Bond = _oeff.OEFuncType_Bond

OEFuncType_Stretch = _oeff.OEFuncType_Stretch

OEFuncType_Bend = _oeff.OEFuncType_Bend

OEFuncType_StretchBend = _oeff.OEFuncType_StretchBend

OEFuncType_Torsion = _oeff.OEFuncType_Torsion

OEFuncType_ImproperTorsion = _oeff.OEFuncType_ImproperTorsion

OEFuncType_OutOfPlane = _oeff.OEFuncType_OutOfPlane


OEFuncType_All = OEFuncType_VdW|OEFuncType_Coulomb|OEFuncType_Bond|OEFuncType_Bend|OEFuncType_StretchBend|OEFuncType_Torsion|OEFuncType_OutOfPlane


OEFuncType_AllRepel = OEFuncType_VdWRepel|OEFuncType_Coulomb|OEFuncType_Bond|OEFuncType_Bend|OEFuncType_StretchBend|OEFuncType_Torsion|OEFuncType_OutOfPlane

OEFuncType_InterMolVdW = _oeff.OEFuncType_InterMolVdW

OEFuncType_InterMolCoulomb = _oeff.OEFuncType_InterMolCoulomb

OEFuncType_TorAdapt = _oeff.OEFuncType_TorAdapt

OEFuncType_QuatAdapt = _oeff.OEFuncType_QuatAdapt

OEFuncType_SubsetAdapt = _oeff.OEFuncType_SubsetAdapt

OEFuncType_SubsetAdaptor = _oeff.OEFuncType_SubsetAdaptor

OEFuncType_InterAdapt = _oeff.OEFuncType_InterAdapt

OEFuncType_HarmonicPot = _oeff.OEFuncType_HarmonicPot

OEFuncType_Sheffield = _oeff.OEFuncType_Sheffield

OEFuncType_Shape = _oeff.OEFuncType_Shape

OEFuncType_Color = _oeff.OEFuncType_Color

OEFFParam_r0 = _oeff.OEFFParam_r0

OEFFParam_EqDist = _oeff.OEFFParam_EqDist

OEFFParam_EqDistance = _oeff.OEFFParam_EqDistance

OEFFParam_StretchConst = _oeff.OEFFParam_StretchConst

OEFFParam_k = _oeff.OEFFParam_k

OEFFParam_rij = _oeff.OEFFParam_rij

OEFFParam_r2ij = _oeff.OEFFParam_r2ij

OEFFParam_ContactDist = _oeff.OEFFParam_ContactDist

OEFFParam_Epsilon = _oeff.OEFFParam_Epsilon

OEFFParam_eps = _oeff.OEFFParam_eps

OEFFParam_C = _oeff.OEFFParam_C

OEFFParam_a0 = _oeff.OEFFParam_a0

OEFFParam_EqAngle = _oeff.OEFFParam_EqAngle

OEFFParam_BendConst = _oeff.OEFFParam_BendConst

OEFFParam_ka = _oeff.OEFFParam_ka

OEFFParam_kb1 = _oeff.OEFFParam_kb1

OEFFParam_StretchBendConst1 = _oeff.OEFFParam_StretchBendConst1

OEFFParam_StretchBendConst2 = _oeff.OEFFParam_StretchBendConst2

OEFFParam_kb2 = _oeff.OEFFParam_kb2

OEFFParam_r1 = _oeff.OEFFParam_r1

OEFFParam_r2 = _oeff.OEFFParam_r2

OEFFParam_OutOfPlaneConst = _oeff.OEFFParam_OutOfPlaneConst

OEFFParam_OOP = _oeff.OEFFParam_OOP

OEFFParam_V1 = _oeff.OEFFParam_V1

OEFFParam_V2 = _oeff.OEFFParam_V2

OEFFParam_V3 = _oeff.OEFFParam_V3

OEFFParam_v1 = _oeff.OEFFParam_v1

OEFFParam_v2 = _oeff.OEFFParam_v2

OEFFParam_v3 = _oeff.OEFFParam_v3

OEFFParam_p1 = _oeff.OEFFParam_p1

OEFFParam_ph1 = _oeff.OEFFParam_ph1

OEFFParam_ntt = _oeff.OEFFParam_ntt

OEFFParam_ko = _oeff.OEFFParam_ko

OEFFParam_listKv = _oeff.OEFFParam_listKv

OEFFParam_listDv = _oeff.OEFFParam_listDv

OEFFParam_listPv = _oeff.OEFFParam_listPv

OEFFParam_listPhv = _oeff.OEFFParam_listPhv

OEFFParam_Cou = _oeff.OEFFParam_Cou

OEFormatType_AMBER = _oeff.OEFormatType_AMBER

OEFormatType_MMFF = _oeff.OEFormatType_MMFF

OEVarType_SolidBody = _oeff.OEVarType_SolidBody

OEVarType_Torsions = _oeff.OEVarType_Torsions

OEVarType_Cart = _oeff.OEVarType_Cart

OEVarType_TranRotTor = _oeff.OEVarType_TranRotTor

OEMMFFSheffieldFFType_Invalid = _oeff.OEMMFFSheffieldFFType_Invalid

OEMMFFSheffieldFFType_MMFF = _oeff.OEMMFFSheffieldFFType_MMFF

OEMMFFSheffieldFFType_MMFF_NOESTAT = _oeff.OEMMFFSheffieldFFType_MMFF_NOESTAT

OEMMFFSheffieldFFType_MMFF_TRUNC = _oeff.OEMMFFSheffieldFFType_MMFF_TRUNC

OEMMFFSheffieldFFType_MMFF_SHEFF = _oeff.OEMMFFSheffieldFFType_MMFF_SHEFF

OEMMFFSheffieldFFType_MMFF94S = _oeff.OEMMFFSheffieldFFType_MMFF94S

OEMMFFSheffieldFFType_MMFF94S_NOESTAT = _oeff.OEMMFFSheffieldFFType_MMFF94S_NOESTAT

OEMMFFSheffieldFFType_MMFF94S_TRUNC = _oeff.OEMMFFSheffieldFFType_MMFF94S_TRUNC

OEMMFFSheffieldFFType_MMFF94S_SHEFF = _oeff.OEMMFFSheffieldFFType_MMFF94S_SHEFF

OEMMFFSheffieldFFType_MMFF94Smod = _oeff.OEMMFFSheffieldFFType_MMFF94Smod

OEMMFFSheffieldFFType_MMFF94Smod_NOESTAT = _oeff.OEMMFFSheffieldFFType_MMFF94Smod_NOESTAT

OEMMFFSheffieldFFType_MMFF94Smod_TRUNC = _oeff.OEMMFFSheffieldFFType_MMFF94Smod_TRUNC

OEMMFFSheffieldFFType_MMFF94Smod_SHEFF = _oeff.OEMMFFSheffieldFFType_MMFF94Smod_SHEFF

OEMMFFSheffieldFFType_MMFFSheff_Max = _oeff.OEMMFFSheffieldFFType_MMFFSheff_Max

OESmirnoffType_SMIRNOFF99FROSST = _oeff.OESmirnoffType_SMIRNOFF99FROSST


OESmirnoffType_SMIRNOFF = OESmirnoffType_SMIRNOFF99FROSST

OESmirnoffType_PARSLEY_OPENFF100 = _oeff.OESmirnoffType_PARSLEY_OPENFF100

OESmirnoffType_PARSLEY_OPENFF111 = _oeff.OESmirnoffType_PARSLEY_OPENFF111

OESmirnoffType_PARSLEY_OPENFF121 = _oeff.OESmirnoffType_PARSLEY_OPENFF121

OESmirnoffType_PARSLEY_OPENFF131 = _oeff.OESmirnoffType_PARSLEY_OPENFF131


def no_op(arg1: "OEAtomIter") -> "void":
    r"""no_op(OEAtomIter arg1)"""
    return _oeff.no_op(arg1)
class OEFComponentIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEOpt::OEFComponent > class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEFComponentIter self) -> OEFComponentIter
        __init__(OEFComponentIter self, OEFComponentIter rhs) -> OEFComponentIter
        __init__(OEFComponentIter self, OESystem::OEIterBase< OEOpt::OEFComponent > * rhs) -> OEFComponentIter
        __init__(OEFComponentIter self, OESystem::OEIterBase< OESystem::OEIter< OEOpt::OEFComponent >::NonConstA > * rhs) -> OEFComponentIter
        """
        _oeff.OEFComponentIter_swiginit(self, _oeff.new_OEFComponentIter(*args))
    __swig_destroy__ = _oeff.delete_OEFComponentIter

    def Copy(self) -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""Copy(OEFComponentIter self) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEFComponentIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEFComponentIter self, OESystem::OEIterBase< OEOpt::OEFComponent > * ib)
        Push(OEFComponentIter self, OEFComponentIter iter)
        """
        return _oeff.OEFComponentIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEOpt::OEFComponent,OEOpt::OEFComponent > const &") -> "void":
        r"""Sort(OEFComponentIter self, OESystem::OEBinaryPredicate< OEOpt::OEFComponent,OEOpt::OEFComponent > const & sort_criterion)"""
        return _oeff.OEFComponentIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEOpt::OEFComponent > &":
        r"""ToFirst(OEFComponentIter self) -> OEFComponentIter"""
        return _oeff.OEFComponentIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEOpt::OEFComponent > &":
        r"""ToLast(OEFComponentIter self) -> OEFComponentIter"""
        return _oeff.OEFComponentIter_ToLast(self)

    def __ref__(self) -> "OEOpt::OEFComponent &":
        r"""__ref__(OEFComponentIter self) -> OEFComponent"""
        return _oeff.OEFComponentIter___ref__(self)

    def IsValid(self):
      return _oeff.OEFComponentIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEFComponentIter self) -> PyObject *"""
        return _oeff.OEFComponentIter_next(self)

    def Target(self) -> "OEOpt::OEFComponent &":
        r"""Target(OEFComponentIter self) -> OEFComponent"""
        return _oeff.OEFComponentIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEOpt::OEFComponent > &":
        r"""
        Next(OEFComponentIter self) -> OEFComponentIter
        Next(OEFComponentIter self, int i) -> OEFComponentIter
        """
        return _oeff.OEFComponentIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEOpt::OEFComponent > &":
        r"""
        Prev(OEFComponentIter self) -> OEFComponentIter
        Prev(OEFComponentIter self, int i) -> OEFComponentIter
        """
        return _oeff.OEFComponentIter_Prev(self, *args)

# Register OEFComponentIter in _oeff:
_oeff.OEFComponentIter_swigregister(OEFComponentIter)


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(OEFComponent arg, bool owned) -> PyObject
    GetSWIG_NewPointerObj(OEInteraction arg, bool owned) -> PyObject *
    """
    return _oeff.GetSWIG_NewPointerObj(*args)
class OEInteractionIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEMolPotential::OEInteraction > class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEInteractionIter self) -> OEInteractionIter
        __init__(OEInteractionIter self, OEInteractionIter rhs) -> OEInteractionIter
        __init__(OEInteractionIter self, OESystem::OEIterBase< OEMolPotential::OEInteraction > * rhs) -> OEInteractionIter
        __init__(OEInteractionIter self, OESystem::OEIterBase< OESystem::OEIter< OEMolPotential::OEInteraction >::NonConstA > * rhs) -> OEInteractionIter
        """
        _oeff.OEInteractionIter_swiginit(self, _oeff.new_OEInteractionIter(*args))
    __swig_destroy__ = _oeff.delete_OEInteractionIter

    def Copy(self) -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""Copy(OEInteractionIter self) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OEInteractionIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEInteractionIter self, OESystem::OEIterBase< OEMolPotential::OEInteraction > * ib)
        Push(OEInteractionIter self, OEInteractionIter iter)
        """
        return _oeff.OEInteractionIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEMolPotential::OEInteraction,OEMolPotential::OEInteraction > const &") -> "void":
        r"""Sort(OEInteractionIter self, OESystem::OEBinaryPredicate< OEMolPotential::OEInteraction,OEMolPotential::OEInteraction > const & sort_criterion)"""
        return _oeff.OEInteractionIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEMolPotential::OEInteraction > &":
        r"""ToFirst(OEInteractionIter self) -> OEInteractionIter"""
        return _oeff.OEInteractionIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEMolPotential::OEInteraction > &":
        r"""ToLast(OEInteractionIter self) -> OEInteractionIter"""
        return _oeff.OEInteractionIter_ToLast(self)

    def __ref__(self) -> "OEMolPotential::OEInteraction &":
        r"""__ref__(OEInteractionIter self) -> OEInteraction"""
        return _oeff.OEInteractionIter___ref__(self)

    def IsValid(self):
      return _oeff.OEInteractionIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEInteractionIter self) -> PyObject *"""
        return _oeff.OEInteractionIter_next(self)

    def Target(self) -> "OEMolPotential::OEInteraction &":
        r"""Target(OEInteractionIter self) -> OEInteraction"""
        return _oeff.OEInteractionIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEMolPotential::OEInteraction > &":
        r"""
        Next(OEInteractionIter self) -> OEInteractionIter
        Next(OEInteractionIter self, int i) -> OEInteractionIter
        """
        return _oeff.OEInteractionIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEMolPotential::OEInteraction > &":
        r"""
        Prev(OEInteractionIter self) -> OEInteractionIter
        Prev(OEInteractionIter self, int i) -> OEInteractionIter
        """
        return _oeff.OEInteractionIter_Prev(self, *args)

# Register OEInteractionIter in _oeff:
_oeff.OEInteractionIter_swigregister(OEInteractionIter)

class OEMolFunc1Vector(object):
    r"""Proxy of C++ std::vector< OEMolPotential::OEMolFunc1 * > 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::oeff_SwigPyIterator *":
        r"""iterator(OEMolFunc1Vector self) -> oeff_SwigPyIterator"""
        return _oeff.OEMolFunc1Vector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEMolFunc1Vector self) -> bool"""
        return _oeff.OEMolFunc1Vector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEMolFunc1Vector self) -> bool"""
        return _oeff.OEMolFunc1Vector___bool__(self)

    def __len__(self) -> "std::vector< OEMolPotential::OEMolFunc1 * >::size_type":
        r"""__len__(OEMolFunc1Vector self) -> std::vector< OEMolPotential::OEMolFunc1 * >::size_type"""
        return _oeff.OEMolFunc1Vector___len__(self)

    def __getslice__(self, i: "std::vector< OEMolPotential::OEMolFunc1 * >::difference_type", j: "std::vector< OEMolPotential::OEMolFunc1 * >::difference_type") -> "std::vector< OEMolPotential::OEMolFunc1 *,std::allocator< OEMolPotential::OEMolFunc1 * > > *":
        r"""__getslice__(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::difference_type i, std::vector< OEMolPotential::OEMolFunc1 * >::difference_type j) -> OEMolFunc1Vector"""
        return _oeff.OEMolFunc1Vector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::difference_type i, std::vector< OEMolPotential::OEMolFunc1 * >::difference_type j)
        __setslice__(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::difference_type i, std::vector< OEMolPotential::OEMolFunc1 * >::difference_type j, OEMolFunc1Vector v)
        """
        return _oeff.OEMolFunc1Vector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< OEMolPotential::OEMolFunc1 * >::difference_type", j: "std::vector< OEMolPotential::OEMolFunc1 * >::difference_type") -> "void":
        r"""__delslice__(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::difference_type i, std::vector< OEMolPotential::OEMolFunc1 * >::difference_type j)"""
        return _oeff.OEMolFunc1Vector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::difference_type i)
        __delitem__(OEMolFunc1Vector self, PySliceObject * slice)
        """
        return _oeff.OEMolFunc1Vector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< OEMolPotential::OEMolFunc1 * >::value_type":
        r"""
        __getitem__(OEMolFunc1Vector self, PySliceObject * slice) -> OEMolFunc1Vector
        __getitem__(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::difference_type i) -> OEMolFunc1
        """
        return _oeff.OEMolFunc1Vector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEMolFunc1Vector self, PySliceObject * slice, OEMolFunc1Vector v)
        __setitem__(OEMolFunc1Vector self, PySliceObject * slice)
        __setitem__(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::difference_type i, OEMolFunc1 x)
        """
        return _oeff.OEMolFunc1Vector___setitem__(self, *args)

    def pop(self) -> "std::vector< OEMolPotential::OEMolFunc1 * >::value_type":
        r"""pop(OEMolFunc1Vector self) -> OEMolFunc1"""
        return _oeff.OEMolFunc1Vector_pop(self)

    def append(self, x: "OEMolFunc1") -> "void":
        r"""append(OEMolFunc1Vector self, OEMolFunc1 x)"""
        return _oeff.OEMolFunc1Vector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEMolFunc1Vector self) -> bool"""
        return _oeff.OEMolFunc1Vector_empty(self)

    def size(self) -> "std::vector< OEMolPotential::OEMolFunc1 * >::size_type":
        r"""size(OEMolFunc1Vector self) -> std::vector< OEMolPotential::OEMolFunc1 * >::size_type"""
        return _oeff.OEMolFunc1Vector_size(self)

    def swap(self, v: "OEMolFunc1Vector") -> "void":
        r"""swap(OEMolFunc1Vector self, OEMolFunc1Vector v)"""
        return _oeff.OEMolFunc1Vector_swap(self, v)

    def begin(self) -> "std::vector< OEMolPotential::OEMolFunc1 * >::iterator":
        r"""begin(OEMolFunc1Vector self) -> std::vector< OEMolPotential::OEMolFunc1 * >::iterator"""
        return _oeff.OEMolFunc1Vector_begin(self)

    def end(self) -> "std::vector< OEMolPotential::OEMolFunc1 * >::iterator":
        r"""end(OEMolFunc1Vector self) -> std::vector< OEMolPotential::OEMolFunc1 * >::iterator"""
        return _oeff.OEMolFunc1Vector_end(self)

    def rbegin(self) -> "std::vector< OEMolPotential::OEMolFunc1 * >::reverse_iterator":
        r"""rbegin(OEMolFunc1Vector self) -> std::vector< OEMolPotential::OEMolFunc1 * >::reverse_iterator"""
        return _oeff.OEMolFunc1Vector_rbegin(self)

    def rend(self) -> "std::vector< OEMolPotential::OEMolFunc1 * >::reverse_iterator":
        r"""rend(OEMolFunc1Vector self) -> std::vector< OEMolPotential::OEMolFunc1 * >::reverse_iterator"""
        return _oeff.OEMolFunc1Vector_rend(self)

    def clear(self) -> "void":
        r"""clear(OEMolFunc1Vector self)"""
        return _oeff.OEMolFunc1Vector_clear(self)

    def get_allocator(self) -> "std::vector< OEMolPotential::OEMolFunc1 * >::allocator_type":
        r"""get_allocator(OEMolFunc1Vector self) -> std::vector< OEMolPotential::OEMolFunc1 * >::allocator_type"""
        return _oeff.OEMolFunc1Vector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEMolFunc1Vector self)"""
        return _oeff.OEMolFunc1Vector_pop_back(self)

    def erase(self, *args) -> "std::vector< OEMolPotential::OEMolFunc1 * >::iterator":
        r"""
        erase(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::iterator pos) -> std::vector< OEMolPotential::OEMolFunc1 * >::iterator
        erase(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::iterator first, std::vector< OEMolPotential::OEMolFunc1 * >::iterator last) -> std::vector< OEMolPotential::OEMolFunc1 * >::iterator
        """
        return _oeff.OEMolFunc1Vector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEMolFunc1Vector self) -> OEMolFunc1Vector
        __init__(OEMolFunc1Vector self, OEMolFunc1Vector other) -> OEMolFunc1Vector
        __init__(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::size_type size) -> OEMolFunc1Vector
        __init__(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::size_type size, OEMolFunc1 value) -> OEMolFunc1Vector
        """
        _oeff.OEMolFunc1Vector_swiginit(self, _oeff.new_OEMolFunc1Vector(*args))

    def push_back(self, x: "OEMolFunc1") -> "void":
        r"""push_back(OEMolFunc1Vector self, OEMolFunc1 x)"""
        return _oeff.OEMolFunc1Vector_push_back(self, x)

    def front(self) -> "std::vector< OEMolPotential::OEMolFunc1 * >::value_type":
        r"""front(OEMolFunc1Vector self) -> OEMolFunc1"""
        return _oeff.OEMolFunc1Vector_front(self)

    def back(self) -> "std::vector< OEMolPotential::OEMolFunc1 * >::value_type":
        r"""back(OEMolFunc1Vector self) -> OEMolFunc1"""
        return _oeff.OEMolFunc1Vector_back(self)

    def assign(self, n: "std::vector< OEMolPotential::OEMolFunc1 * >::size_type", x: "OEMolFunc1") -> "void":
        r"""assign(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::size_type n, OEMolFunc1 x)"""
        return _oeff.OEMolFunc1Vector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::size_type new_size)
        resize(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::size_type new_size, OEMolFunc1 x)
        """
        return _oeff.OEMolFunc1Vector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::iterator pos, OEMolFunc1 x) -> std::vector< OEMolPotential::OEMolFunc1 * >::iterator
        insert(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::iterator pos, std::vector< OEMolPotential::OEMolFunc1 * >::size_type n, OEMolFunc1 x)
        """
        return _oeff.OEMolFunc1Vector_insert(self, *args)

    def reserve(self, n: "std::vector< OEMolPotential::OEMolFunc1 * >::size_type") -> "void":
        r"""reserve(OEMolFunc1Vector self, std::vector< OEMolPotential::OEMolFunc1 * >::size_type n)"""
        return _oeff.OEMolFunc1Vector_reserve(self, n)

    def capacity(self) -> "std::vector< OEMolPotential::OEMolFunc1 * >::size_type":
        r"""capacity(OEMolFunc1Vector self) -> std::vector< OEMolPotential::OEMolFunc1 * >::size_type"""
        return _oeff.OEMolFunc1Vector_capacity(self)
    __swig_destroy__ = _oeff.delete_OEMolFunc1Vector

# Register OEMolFunc1Vector in _oeff:
_oeff.OEMolFunc1Vector_swigregister(OEMolFunc1Vector)

class OEMolFunc2Vector(object):
    r"""Proxy of C++ std::vector< OEMolPotential::OEMolFunc2 * > 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::oeff_SwigPyIterator *":
        r"""iterator(OEMolFunc2Vector self) -> oeff_SwigPyIterator"""
        return _oeff.OEMolFunc2Vector_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self) -> "bool":
        r"""__nonzero__(OEMolFunc2Vector self) -> bool"""
        return _oeff.OEMolFunc2Vector___nonzero__(self)

    def __bool__(self) -> "bool":
        r"""__bool__(OEMolFunc2Vector self) -> bool"""
        return _oeff.OEMolFunc2Vector___bool__(self)

    def __len__(self) -> "std::vector< OEMolPotential::OEMolFunc2 * >::size_type":
        r"""__len__(OEMolFunc2Vector self) -> std::vector< OEMolPotential::OEMolFunc2 * >::size_type"""
        return _oeff.OEMolFunc2Vector___len__(self)

    def __getslice__(self, i: "std::vector< OEMolPotential::OEMolFunc2 * >::difference_type", j: "std::vector< OEMolPotential::OEMolFunc2 * >::difference_type") -> "std::vector< OEMolPotential::OEMolFunc2 *,std::allocator< OEMolPotential::OEMolFunc2 * > > *":
        r"""__getslice__(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::difference_type i, std::vector< OEMolPotential::OEMolFunc2 * >::difference_type j) -> OEMolFunc2Vector"""
        return _oeff.OEMolFunc2Vector___getslice__(self, i, j)

    def __setslice__(self, *args) -> "void":
        r"""
        __setslice__(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::difference_type i, std::vector< OEMolPotential::OEMolFunc2 * >::difference_type j)
        __setslice__(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::difference_type i, std::vector< OEMolPotential::OEMolFunc2 * >::difference_type j, OEMolFunc2Vector v)
        """
        return _oeff.OEMolFunc2Vector___setslice__(self, *args)

    def __delslice__(self, i: "std::vector< OEMolPotential::OEMolFunc2 * >::difference_type", j: "std::vector< OEMolPotential::OEMolFunc2 * >::difference_type") -> "void":
        r"""__delslice__(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::difference_type i, std::vector< OEMolPotential::OEMolFunc2 * >::difference_type j)"""
        return _oeff.OEMolFunc2Vector___delslice__(self, i, j)

    def __delitem__(self, *args) -> "void":
        r"""
        __delitem__(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::difference_type i)
        __delitem__(OEMolFunc2Vector self, PySliceObject * slice)
        """
        return _oeff.OEMolFunc2Vector___delitem__(self, *args)

    def __getitem__(self, *args) -> "std::vector< OEMolPotential::OEMolFunc2 * >::value_type":
        r"""
        __getitem__(OEMolFunc2Vector self, PySliceObject * slice) -> OEMolFunc2Vector
        __getitem__(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::difference_type i) -> OEMolFunc2
        """
        return _oeff.OEMolFunc2Vector___getitem__(self, *args)

    def __setitem__(self, *args) -> "void":
        r"""
        __setitem__(OEMolFunc2Vector self, PySliceObject * slice, OEMolFunc2Vector v)
        __setitem__(OEMolFunc2Vector self, PySliceObject * slice)
        __setitem__(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::difference_type i, OEMolFunc2 x)
        """
        return _oeff.OEMolFunc2Vector___setitem__(self, *args)

    def pop(self) -> "std::vector< OEMolPotential::OEMolFunc2 * >::value_type":
        r"""pop(OEMolFunc2Vector self) -> OEMolFunc2"""
        return _oeff.OEMolFunc2Vector_pop(self)

    def append(self, x: "OEMolFunc2") -> "void":
        r"""append(OEMolFunc2Vector self, OEMolFunc2 x)"""
        return _oeff.OEMolFunc2Vector_append(self, x)

    def empty(self) -> "bool":
        r"""empty(OEMolFunc2Vector self) -> bool"""
        return _oeff.OEMolFunc2Vector_empty(self)

    def size(self) -> "std::vector< OEMolPotential::OEMolFunc2 * >::size_type":
        r"""size(OEMolFunc2Vector self) -> std::vector< OEMolPotential::OEMolFunc2 * >::size_type"""
        return _oeff.OEMolFunc2Vector_size(self)

    def swap(self, v: "OEMolFunc2Vector") -> "void":
        r"""swap(OEMolFunc2Vector self, OEMolFunc2Vector v)"""
        return _oeff.OEMolFunc2Vector_swap(self, v)

    def begin(self) -> "std::vector< OEMolPotential::OEMolFunc2 * >::iterator":
        r"""begin(OEMolFunc2Vector self) -> std::vector< OEMolPotential::OEMolFunc2 * >::iterator"""
        return _oeff.OEMolFunc2Vector_begin(self)

    def end(self) -> "std::vector< OEMolPotential::OEMolFunc2 * >::iterator":
        r"""end(OEMolFunc2Vector self) -> std::vector< OEMolPotential::OEMolFunc2 * >::iterator"""
        return _oeff.OEMolFunc2Vector_end(self)

    def rbegin(self) -> "std::vector< OEMolPotential::OEMolFunc2 * >::reverse_iterator":
        r"""rbegin(OEMolFunc2Vector self) -> std::vector< OEMolPotential::OEMolFunc2 * >::reverse_iterator"""
        return _oeff.OEMolFunc2Vector_rbegin(self)

    def rend(self) -> "std::vector< OEMolPotential::OEMolFunc2 * >::reverse_iterator":
        r"""rend(OEMolFunc2Vector self) -> std::vector< OEMolPotential::OEMolFunc2 * >::reverse_iterator"""
        return _oeff.OEMolFunc2Vector_rend(self)

    def clear(self) -> "void":
        r"""clear(OEMolFunc2Vector self)"""
        return _oeff.OEMolFunc2Vector_clear(self)

    def get_allocator(self) -> "std::vector< OEMolPotential::OEMolFunc2 * >::allocator_type":
        r"""get_allocator(OEMolFunc2Vector self) -> std::vector< OEMolPotential::OEMolFunc2 * >::allocator_type"""
        return _oeff.OEMolFunc2Vector_get_allocator(self)

    def pop_back(self) -> "void":
        r"""pop_back(OEMolFunc2Vector self)"""
        return _oeff.OEMolFunc2Vector_pop_back(self)

    def erase(self, *args) -> "std::vector< OEMolPotential::OEMolFunc2 * >::iterator":
        r"""
        erase(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::iterator pos) -> std::vector< OEMolPotential::OEMolFunc2 * >::iterator
        erase(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::iterator first, std::vector< OEMolPotential::OEMolFunc2 * >::iterator last) -> std::vector< OEMolPotential::OEMolFunc2 * >::iterator
        """
        return _oeff.OEMolFunc2Vector_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(OEMolFunc2Vector self) -> OEMolFunc2Vector
        __init__(OEMolFunc2Vector self, OEMolFunc2Vector other) -> OEMolFunc2Vector
        __init__(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::size_type size) -> OEMolFunc2Vector
        __init__(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::size_type size, OEMolFunc2 value) -> OEMolFunc2Vector
        """
        _oeff.OEMolFunc2Vector_swiginit(self, _oeff.new_OEMolFunc2Vector(*args))

    def push_back(self, x: "OEMolFunc2") -> "void":
        r"""push_back(OEMolFunc2Vector self, OEMolFunc2 x)"""
        return _oeff.OEMolFunc2Vector_push_back(self, x)

    def front(self) -> "std::vector< OEMolPotential::OEMolFunc2 * >::value_type":
        r"""front(OEMolFunc2Vector self) -> OEMolFunc2"""
        return _oeff.OEMolFunc2Vector_front(self)

    def back(self) -> "std::vector< OEMolPotential::OEMolFunc2 * >::value_type":
        r"""back(OEMolFunc2Vector self) -> OEMolFunc2"""
        return _oeff.OEMolFunc2Vector_back(self)

    def assign(self, n: "std::vector< OEMolPotential::OEMolFunc2 * >::size_type", x: "OEMolFunc2") -> "void":
        r"""assign(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::size_type n, OEMolFunc2 x)"""
        return _oeff.OEMolFunc2Vector_assign(self, n, x)

    def resize(self, *args) -> "void":
        r"""
        resize(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::size_type new_size)
        resize(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::size_type new_size, OEMolFunc2 x)
        """
        return _oeff.OEMolFunc2Vector_resize(self, *args)

    def insert(self, *args) -> "void":
        r"""
        insert(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::iterator pos, OEMolFunc2 x) -> std::vector< OEMolPotential::OEMolFunc2 * >::iterator
        insert(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::iterator pos, std::vector< OEMolPotential::OEMolFunc2 * >::size_type n, OEMolFunc2 x)
        """
        return _oeff.OEMolFunc2Vector_insert(self, *args)

    def reserve(self, n: "std::vector< OEMolPotential::OEMolFunc2 * >::size_type") -> "void":
        r"""reserve(OEMolFunc2Vector self, std::vector< OEMolPotential::OEMolFunc2 * >::size_type n)"""
        return _oeff.OEMolFunc2Vector_reserve(self, n)

    def capacity(self) -> "std::vector< OEMolPotential::OEMolFunc2 * >::size_type":
        r"""capacity(OEMolFunc2Vector self) -> std::vector< OEMolPotential::OEMolFunc2 * >::size_type"""
        return _oeff.OEMolFunc2Vector_capacity(self)
    __swig_destroy__ = _oeff.delete_OEMolFunc2Vector

# Register OEMolFunc2Vector in _oeff:
_oeff.OEMolFunc2Vector_swigregister(OEMolFunc2Vector)

class OEAdaptor(object):
    r"""Proxy of C++ OEOpt::OEAdaptor class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr

    def GetVar(self, *args) -> "void":
        r"""
        GetVar(OEAdaptor self, double const * arg2) -> double const
        GetVar(OEAdaptor self, double * var, double const * x)
        """
        return _oeff.OEAdaptor_GetVar(self, *args)

    def AdaptVar(self, ca: "double *", arg3: "double const *") -> "bool":
        r"""AdaptVar(OEAdaptor self, double * ca, double const * arg3) -> bool"""
        return _oeff.OEAdaptor_AdaptVar(self, ca, arg3)
    __swig_destroy__ = _oeff.delete_OEAdaptor

# Register OEAdaptor in _oeff:
_oeff.OEAdaptor_swigregister(OEAdaptor)

class OEFComponent(object):
    r"""Proxy of C++ OEOpt::OEFComponent class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    name = property(_oeff.OEFComponent_name_get, _oeff.OEFComponent_name_set, doc=r"""name : std::string""")
    value = property(_oeff.OEFComponent_value_get, _oeff.OEFComponent_value_set, doc=r"""value : double""")

    def __init__(self, *args):
        r"""
        __init__(OEFComponent self) -> OEFComponent
        __init__(OEFComponent self, std::string const & n, double v) -> OEFComponent
        """
        _oeff.OEFComponent_swiginit(self, _oeff.new_OEFComponent(*args))
    __swig_destroy__ = _oeff.delete_OEFComponent

# Register OEFComponent in _oeff:
_oeff.OEFComponent_swigregister(OEFComponent)

class OEFunc0(object):
    r"""Proxy of C++ OEOpt::OEFunc0 class."""

    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__(OEFunc0 self) -> OEFunc0"""
        if self.__class__ == OEFunc0:
            _self = None
        else:
            _self = self
        _oeff.OEFunc0_swiginit(self, _oeff.new_OEFunc0(_self, ))

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEFunc0 self) -> unsigned int"""
        return _oeff.OEFunc0_NumVar(self)

    def __call__(self, x: "double const *") -> "double":
        r"""__call__(OEFunc0 self, double const * x) -> double"""
        return _oeff.OEFunc0___call__(self, x)

    def GetFComponents(self, arg0: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEFunc0 self, double const * arg0) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEFunc0_GetFComponents(self, arg0)
    __swig_destroy__ = _oeff.delete_OEFunc0
    def __disown__(self):
        self.this.disown()
        _oeff.disown_OEFunc0(self)
        return weakref.proxy(self)

# Register OEFunc0 in _oeff:
_oeff.OEFunc0_swigregister(OEFunc0)

class OEFunc1(OEFunc0):
    r"""Proxy of C++ OEOpt::OEFunc1 class."""

    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__(OEFunc1 self) -> OEFunc1"""
        if self.__class__ == OEFunc1:
            _self = None
        else:
            _self = self
        _oeff.OEFunc1_swiginit(self, _oeff.new_OEFunc1(_self, ))

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEFunc1 self) -> unsigned int"""
        return _oeff.OEFunc1_NumVar(self)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEFunc1 self, float const ** arg0) -> OEFloatVector
        __call__(OEFunc1 self, double const * x) -> double
        __call__(OEFunc1 self, double const * x, double * g) -> double
        """
        return _oeff.OEFunc1___call__(self, *args)

    def GetFComponents(self, arg0: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEFunc1 self, double const * arg0) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEFunc1_GetFComponents(self, arg0)
    __swig_destroy__ = _oeff.delete_OEFunc1
    def __disown__(self):
        self.this.disown()
        _oeff.disown_OEFunc1(self)
        return weakref.proxy(self)

# Register OEFunc1 in _oeff:
_oeff.OEFunc1_swigregister(OEFunc1)

class OEFunc2(OEFunc1):
    r"""Proxy of C++ OEOpt::OEFunc2 class."""

    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__(OEFunc2 self) -> OEFunc2"""
        if self.__class__ == OEFunc2:
            _self = None
        else:
            _self = self
        _oeff.OEFunc2_swiginit(self, _oeff.new_OEFunc2(_self, ))

    def __call__(self, *args) -> "bool":
        r"""
        __call__(OEFunc2 self, double const * x) -> double
        __call__(OEFunc2 self, double const * x, double * g) -> double
        __call__(OEFunc2 self, double const * x, double * h, double * g) -> bool
        """
        return _oeff.OEFunc2___call__(self, *args)
    __swig_destroy__ = _oeff.delete_OEFunc2
    def __disown__(self):
        self.this.disown()
        _oeff.disown_OEFunc2(self)
        return weakref.proxy(self)

# Register OEFunc2 in _oeff:
_oeff.OEFunc2_swigregister(OEFunc2)


def OEGetStateName(state: "unsigned int") -> "char const *":
    r"""OEGetStateName(unsigned int state) -> char const *"""
    return _oeff.OEGetStateName(state)
class OECheckpoint0(object):
    r"""Proxy of C++ OEOpt::OECheckpoint0 class."""

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

    def __call__(self, *args) -> "bool":
        r"""__call__(OECheckpoint0 self, unsigned int iteration, unsigned int nvar, double fval, double const * var=(double *) 0, unsigned int state=0) -> bool"""
        return _oeff.OECheckpoint0___call__(self, *args)
    __swig_destroy__ = _oeff.delete_OECheckpoint0

    def __init__(self):
        r"""__init__(OECheckpoint0 self) -> OECheckpoint0"""
        if self.__class__ == OECheckpoint0:
            _self = None
        else:
            _self = self
        _oeff.OECheckpoint0_swiginit(self, _oeff.new_OECheckpoint0(_self, ))
    def __disown__(self):
        self.this.disown()
        _oeff.disown_OECheckpoint0(self)
        return weakref.proxy(self)

# Register OECheckpoint0 in _oeff:
_oeff.OECheckpoint0_swigregister(OECheckpoint0)
cvar = _oeff.cvar
Cont = cvar.Cont
NoOpt = cvar.NoOpt
OneVar = cvar.OneVar
NotFound = cvar.NotFound
Ended = cvar.Ended
NotJust = cvar.NotJust
Exhaust = cvar.Exhaust
Dist = cvar.Dist
Fval = cvar.Fval
Grad = cvar.Grad
Comp = cvar.Comp
Done = cvar.Done
Stable = cvar.Stable
Max = cvar.Max

class OECheckpoint1(OECheckpoint0):
    r"""Proxy of C++ OEOpt::OECheckpoint1 class."""

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

    def __call__(self, *args) -> "bool":
        r"""
        __call__(OECheckpoint1 self, unsigned int iteration, unsigned int nvar, double fval, double const * var=(double *) 0, unsigned int state=0) -> bool
        __call__(OECheckpoint1 self, unsigned int iteration, unsigned int nvar, double fval, double gnorm, double const * var=(double *) 0, double const * grad=(double *) 0, unsigned int state=0) -> bool
        """
        return _oeff.OECheckpoint1___call__(self, *args)
    __swig_destroy__ = _oeff.delete_OECheckpoint1

    def __init__(self):
        r"""__init__(OECheckpoint1 self) -> OECheckpoint1"""
        if self.__class__ == OECheckpoint1:
            _self = None
        else:
            _self = self
        _oeff.OECheckpoint1_swiginit(self, _oeff.new_OECheckpoint1(_self, ))
    def __disown__(self):
        self.this.disown()
        _oeff.disown_OECheckpoint1(self)
        return weakref.proxy(self)

# Register OECheckpoint1 in _oeff:
_oeff.OECheckpoint1_swigregister(OECheckpoint1)

class OEOptimizer0(object):
    r"""Proxy of C++ OEOpt::OEOptimizer0 class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr

    def SetIterLimit(self, itmax: "unsigned int") -> "void":
        r"""SetIterLimit(OEOptimizer0 self, unsigned int itmax)"""
        return _oeff.OEOptimizer0_SetIterLimit(self, itmax)

    def GetIterLimit(self) -> "unsigned int":
        r"""GetIterLimit(OEOptimizer0 self) -> unsigned int"""
        return _oeff.OEOptimizer0_GetIterLimit(self)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEOptimizer0 self, OEFunc0 function, double const * var, double * opt_var) -> double
        __call__(OEOptimizer0 self, OEFunc0 function, OECheckpoint0 check, double const * var, double * opt_var) -> double
        """
        return _oeff.OEOptimizer0___call__(self, *args)
    __swig_destroy__ = _oeff.delete_OEOptimizer0

# Register OEOptimizer0 in _oeff:
_oeff.OEOptimizer0_swigregister(OEOptimizer0)

class OEOptimizer1(object):
    r"""Proxy of C++ OEOpt::OEOptimizer1 class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr

    def SetIterLimit(self, itmax: "unsigned int") -> "void":
        r"""SetIterLimit(OEOptimizer1 self, unsigned int itmax)"""
        return _oeff.OEOptimizer1_SetIterLimit(self, itmax)

    def SetTolerance(self, t: "double") -> "void":
        r"""SetTolerance(OEOptimizer1 self, double t)"""
        return _oeff.OEOptimizer1_SetTolerance(self, t)

    def GetIterLimit(self) -> "unsigned int":
        r"""GetIterLimit(OEOptimizer1 self) -> unsigned int"""
        return _oeff.OEOptimizer1_GetIterLimit(self)

    def GetTolerance(self) -> "double":
        r"""GetTolerance(OEOptimizer1 self) -> double"""
        return _oeff.OEOptimizer1_GetTolerance(self)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEOptimizer1 self, OEFunc1 function, double const * var, double * opt_var) -> double
        __call__(OEOptimizer1 self, OEFunc1 function, OECheckpoint1 check, double const * var, double * opt_var) -> double
        """
        return _oeff.OEOptimizer1___call__(self, *args)
    __swig_destroy__ = _oeff.delete_OEOptimizer1

# Register OEOptimizer1 in _oeff:
_oeff.OEOptimizer1_swigregister(OEOptimizer1)

class OEOptimizer2(object):
    r"""Proxy of C++ OEOpt::OEOptimizer2 class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr

    def SetIterLimit(self, itmax: "unsigned int") -> "void":
        r"""SetIterLimit(OEOptimizer2 self, unsigned int itmax)"""
        return _oeff.OEOptimizer2_SetIterLimit(self, itmax)

    def SetTolerance(self, t: "double") -> "void":
        r"""SetTolerance(OEOptimizer2 self, double t)"""
        return _oeff.OEOptimizer2_SetTolerance(self, t)

    def GetIterLimit(self) -> "unsigned int":
        r"""GetIterLimit(OEOptimizer2 self) -> unsigned int"""
        return _oeff.OEOptimizer2_GetIterLimit(self)

    def GetTolerance(self) -> "double":
        r"""GetTolerance(OEOptimizer2 self) -> double"""
        return _oeff.OEOptimizer2_GetTolerance(self)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEOptimizer2 self, OEFunc2 function, double const * var, double * opt_var) -> double
        __call__(OEOptimizer2 self, OEFunc2 function, OECheckpoint1 check, double const * var, double * opt_var) -> double
        """
        return _oeff.OEOptimizer2___call__(self, *args)
    __swig_destroy__ = _oeff.delete_OEOptimizer2

# Register OEOptimizer2 in _oeff:
_oeff.OEOptimizer2_swigregister(OEOptimizer2)

class OELineMinimize(object):
    r"""Proxy of C++ OEOpt::OELineMinimize class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oeff.delete_OELineMinimize

    def __call__(self, n: "unsigned int", p: "double const *", d: "double *", g: "double *", k: "double *", gmin: "double *", alpha: "double *", fun: "OEFunc1") -> "bool":
        r"""__call__(OELineMinimize self, unsigned int n, double const * p, double * d, double * g, double * k, double * gmin, double * alpha, OEFunc1 fun) -> bool"""
        return _oeff.OELineMinimize___call__(self, n, p, d, g, k, gmin, alpha, fun)

    def SetMaxStep(self, arg2: "unsigned int", arg3: "double *") -> "bool":
        r"""SetMaxStep(OELineMinimize self, unsigned int arg2, double * arg3) -> bool"""
        return _oeff.OELineMinimize_SetMaxStep(self, arg2, arg3)

    def CreateCopy(self) -> "OEOpt::OELineMinimize *":
        r"""CreateCopy(OELineMinimize self) -> OELineMinimize"""
        return _oeff.OELineMinimize_CreateCopy(self)

# Register OELineMinimize in _oeff:
_oeff.OELineMinimize_swigregister(OELineMinimize)

class OEBFGSOpt(OEOptimizer1):
    r"""Proxy of C++ OEOpt::OEBFGSOpt class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEBFGSOpt self) -> OEBFGSOpt
        __init__(OEBFGSOpt self, OEBFGSOpt arg2) -> OEBFGSOpt
        """
        _oeff.OEBFGSOpt_swiginit(self, _oeff.new_OEBFGSOpt(*args))

    def SetTolerance(self, t: "double") -> "void":
        r"""SetTolerance(OEBFGSOpt self, double t)"""
        return _oeff.OEBFGSOpt_SetTolerance(self, t)

    def SetIterLimit(self, arg2: "unsigned int") -> "void":
        r"""SetIterLimit(OEBFGSOpt self, unsigned int arg2)"""
        return _oeff.OEBFGSOpt_SetIterLimit(self, arg2)

    def GetIterLimit(self) -> "unsigned int":
        r"""GetIterLimit(OEBFGSOpt self) -> unsigned int"""
        return _oeff.OEBFGSOpt_GetIterLimit(self)

    def GetTolerance(self) -> "double":
        r"""GetTolerance(OEBFGSOpt self) -> double"""
        return _oeff.OEBFGSOpt_GetTolerance(self)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEBFGSOpt self, OEFunc0 function, double const * var, double * opt_var=(double *) 0) -> double
        __call__(OEBFGSOpt self, OEFunc0 arg2, OECheckpoint0 arg3, double const * arg4, double * arg5) -> double
        __call__(OEBFGSOpt self, OEFunc1 function, double const * var, double * opt_var=None) -> double
        __call__(OEBFGSOpt self, OEFunc1 function, OECheckpoint1 check, double const * var, double * opt_var=None) -> double
        """
        return _oeff.OEBFGSOpt___call__(self, *args)

    def SetLineMinimize(self, linmin: "OELineMinimize") -> "bool":
        r"""SetLineMinimize(OEBFGSOpt self, OELineMinimize linmin) -> bool"""
        return _oeff.OEBFGSOpt_SetLineMinimize(self, linmin)

    def GetInverseHessian(self, h: "double *", nv: "unsigned int") -> "bool":
        r"""GetInverseHessian(OEBFGSOpt self, double * h, unsigned int nv) -> bool"""
        return _oeff.OEBFGSOpt_GetInverseHessian(self, h, nv)

    def SetKeepHessian(self, keep: "bool") -> "void":
        r"""SetKeepHessian(OEBFGSOpt self, bool keep)"""
        return _oeff.OEBFGSOpt_SetKeepHessian(self, keep)

    def GetKeepHessian(self) -> "bool":
        r"""GetKeepHessian(OEBFGSOpt self) -> bool"""
        return _oeff.OEBFGSOpt_GetKeepHessian(self)

    def GetHessianDimension(self) -> "unsigned int":
        r"""GetHessianDimension(OEBFGSOpt self) -> unsigned int"""
        return _oeff.OEBFGSOpt_GetHessianDimension(self)

    def UseSavedHessian(self, ini: "bool") -> "void":
        r"""UseSavedHessian(OEBFGSOpt self, bool ini)"""
        return _oeff.OEBFGSOpt_UseSavedHessian(self, ini)

# Register OEBFGSOpt in _oeff:
_oeff.OEBFGSOpt_swigregister(OEBFGSOpt)

class OEConjGradOpt(OEOptimizer1):
    r"""Proxy of C++ OEOpt::OEConjGradOpt class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEConjGradOpt self) -> OEConjGradOpt
        __init__(OEConjGradOpt self, OEConjGradOpt arg2) -> OEConjGradOpt
        """
        _oeff.OEConjGradOpt_swiginit(self, _oeff.new_OEConjGradOpt(*args))
    __swig_destroy__ = _oeff.delete_OEConjGradOpt

    def SetTolerance(self, t: "double") -> "void":
        r"""SetTolerance(OEConjGradOpt self, double t)"""
        return _oeff.OEConjGradOpt_SetTolerance(self, t)

    def SetIterLimit(self, arg2: "unsigned int") -> "void":
        r"""SetIterLimit(OEConjGradOpt self, unsigned int arg2)"""
        return _oeff.OEConjGradOpt_SetIterLimit(self, arg2)

    def GetTolerance(self) -> "double":
        r"""GetTolerance(OEConjGradOpt self) -> double"""
        return _oeff.OEConjGradOpt_GetTolerance(self)

    def GetIterLimit(self) -> "unsigned int":
        r"""GetIterLimit(OEConjGradOpt self) -> unsigned int"""
        return _oeff.OEConjGradOpt_GetIterLimit(self)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEConjGradOpt self, OEFunc0 function, double const * var, double * opt_var=(double *) 0) -> double
        __call__(OEConjGradOpt self, OEFunc0 arg2, OECheckpoint0 arg3, double const * arg4, double * arg5) -> double
        __call__(OEConjGradOpt self, OEFunc1 function, double const * var, double * opt_var=None) -> double
        __call__(OEConjGradOpt self, OEFunc1 function, OECheckpoint1 check, double const * var, double * opt_var=None) -> double
        """
        return _oeff.OEConjGradOpt___call__(self, *args)

    def SetLineMinimize(self, linmin: "OELineMinimize") -> "bool":
        r"""SetLineMinimize(OEConjGradOpt self, OELineMinimize linmin) -> bool"""
        return _oeff.OEConjGradOpt_SetLineMinimize(self, linmin)

# Register OEConjGradOpt in _oeff:
_oeff.OEConjGradOpt_swigregister(OEConjGradOpt)

class OEDFPOpt(OEOptimizer1):
    r"""Proxy of C++ OEOpt::OEDFPOpt class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEDFPOpt self) -> OEDFPOpt
        __init__(OEDFPOpt self, OEDFPOpt arg2) -> OEDFPOpt
        """
        _oeff.OEDFPOpt_swiginit(self, _oeff.new_OEDFPOpt(*args))

    def SetTolerance(self, t: "double") -> "void":
        r"""SetTolerance(OEDFPOpt self, double t)"""
        return _oeff.OEDFPOpt_SetTolerance(self, t)

    def SetIterLimit(self, arg2: "unsigned int") -> "void":
        r"""SetIterLimit(OEDFPOpt self, unsigned int arg2)"""
        return _oeff.OEDFPOpt_SetIterLimit(self, arg2)

    def GetTolerance(self) -> "double":
        r"""GetTolerance(OEDFPOpt self) -> double"""
        return _oeff.OEDFPOpt_GetTolerance(self)

    def GetIterLimit(self) -> "unsigned int":
        r"""GetIterLimit(OEDFPOpt self) -> unsigned int"""
        return _oeff.OEDFPOpt_GetIterLimit(self)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEDFPOpt self, OEFunc0 function, double const * var, double * opt_var=(double *) 0) -> double
        __call__(OEDFPOpt self, OEFunc0 arg2, OECheckpoint0 arg3, double const * arg4, double * arg5) -> double
        __call__(OEDFPOpt self, OEFunc1 function, double const * var, double * opt_var=None) -> double
        __call__(OEDFPOpt self, OEFunc1 function, OECheckpoint1 check, double const * var, double * opt_var=None) -> double
        """
        return _oeff.OEDFPOpt___call__(self, *args)

    def SetLineMinimize(self, linmin: "OELineMinimize") -> "bool":
        r"""SetLineMinimize(OEDFPOpt self, OELineMinimize linmin) -> bool"""
        return _oeff.OEDFPOpt_SetLineMinimize(self, linmin)

# Register OEDFPOpt in _oeff:
_oeff.OEDFPOpt_swigregister(OEDFPOpt)

class OEFletcherReevesOpt(OEOptimizer1):
    r"""Proxy of C++ OEOpt::OEFletcherReevesOpt class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEFletcherReevesOpt self) -> OEFletcherReevesOpt
        __init__(OEFletcherReevesOpt self, OEFletcherReevesOpt arg2) -> OEFletcherReevesOpt
        """
        _oeff.OEFletcherReevesOpt_swiginit(self, _oeff.new_OEFletcherReevesOpt(*args))

    def SetTolerance(self, t: "double") -> "void":
        r"""SetTolerance(OEFletcherReevesOpt self, double t)"""
        return _oeff.OEFletcherReevesOpt_SetTolerance(self, t)

    def SetIterLimit(self, arg2: "unsigned int") -> "void":
        r"""SetIterLimit(OEFletcherReevesOpt self, unsigned int arg2)"""
        return _oeff.OEFletcherReevesOpt_SetIterLimit(self, arg2)

    def GetTolerance(self) -> "double":
        r"""GetTolerance(OEFletcherReevesOpt self) -> double"""
        return _oeff.OEFletcherReevesOpt_GetTolerance(self)

    def GetIterLimit(self) -> "unsigned int":
        r"""GetIterLimit(OEFletcherReevesOpt self) -> unsigned int"""
        return _oeff.OEFletcherReevesOpt_GetIterLimit(self)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEFletcherReevesOpt self, OEFunc0 function, double const * var, double * opt_var=(double *) 0) -> double
        __call__(OEFletcherReevesOpt self, OEFunc0 arg2, OECheckpoint0 arg3, double const * arg4, double * arg5) -> double
        __call__(OEFletcherReevesOpt self, OEFunc1 function, double const * var, double * opt_var=None) -> double
        __call__(OEFletcherReevesOpt self, OEFunc1 function, OECheckpoint1 check, double const * var, double * opt_var=None) -> double
        """
        return _oeff.OEFletcherReevesOpt___call__(self, *args)

    def SetLineMinimize(self, linmin: "OELineMinimize") -> "bool":
        r"""SetLineMinimize(OEFletcherReevesOpt self, OELineMinimize linmin) -> bool"""
        return _oeff.OEFletcherReevesOpt_SetLineMinimize(self, linmin)

# Register OEFletcherReevesOpt in _oeff:
_oeff.OEFletcherReevesOpt_swigregister(OEFletcherReevesOpt)

class OECGLineMinimize(OELineMinimize):
    r"""Proxy of C++ OEOpt::OECGLineMinimize class."""

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

    def __call__(self, n: "unsigned int", p: "double const *", d: "double *", g: "double *", k: "double *", gmin: "double *", alpha: "double *", fun: "OEFunc1") -> "bool":
        r"""__call__(OECGLineMinimize self, unsigned int n, double const * p, double * d, double * g, double * k, double * gmin, double * alpha, OEFunc1 fun) -> bool"""
        return _oeff.OECGLineMinimize___call__(self, n, p, d, g, k, gmin, alpha, fun)

    def CreateCopy(self) -> "OEOpt::OELineMinimize *":
        r"""CreateCopy(OECGLineMinimize self) -> OELineMinimize"""
        return _oeff.OECGLineMinimize_CreateCopy(self)

    def __init__(self):
        r"""__init__(OECGLineMinimize self) -> OECGLineMinimize"""
        _oeff.OECGLineMinimize_swiginit(self, _oeff.new_OECGLineMinimize())

# Register OECGLineMinimize in _oeff:
_oeff.OECGLineMinimize_swigregister(OECGLineMinimize)
UseFullNewtonInitialStep = cvar.UseFullNewtonInitialStep
UseAlphaForInitialStep = cvar.UseAlphaForInitialStep

class OEQNLineMinimize(OELineMinimize):
    r"""Proxy of C++ OEOpt::OEQNLineMinimize class."""

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

    def __init__(self, alpha: "double"=1e-4, beta: "double"=0.9, approxzero: "double"=1e-10, lmmax: "unsigned int"=32):
        r"""__init__(OEQNLineMinimize self, double alpha=1e-4, double beta=0.9, double approxzero=1e-10, unsigned int lmmax=32) -> OEQNLineMinimize"""
        _oeff.OEQNLineMinimize_swiginit(self, _oeff.new_OEQNLineMinimize(alpha, beta, approxzero, lmmax))
    __swig_destroy__ = _oeff.delete_OEQNLineMinimize

    def __call__(self, n: "unsigned int", p: "double const *", d: "double *", g: "double *", k: "double *", gmin: "double *", alpha: "double *", fun: "OEFunc1") -> "bool":
        r"""__call__(OEQNLineMinimize self, unsigned int n, double const * p, double * d, double * g, double * k, double * gmin, double * alpha, OEFunc1 fun) -> bool"""
        return _oeff.OEQNLineMinimize___call__(self, n, p, d, g, k, gmin, alpha, fun)

    def CreateCopy(self) -> "OEOpt::OELineMinimize *":
        r"""CreateCopy(OEQNLineMinimize self) -> OELineMinimize"""
        return _oeff.OEQNLineMinimize_CreateCopy(self)

# Register OEQNLineMinimize in _oeff:
_oeff.OEQNLineMinimize_swigregister(OEQNLineMinimize)

class OEMaxStepLineMinimize(OELineMinimize):
    r"""Proxy of C++ OEOpt::OEMaxStepLineMinimize class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMaxStepLineMinimize self) -> OEMaxStepLineMinimize
        __init__(OEMaxStepLineMinimize self, double * maxStep, unsigned int len) -> OEMaxStepLineMinimize
        __init__(OEMaxStepLineMinimize self, OEMaxStepLineMinimize rhs) -> OEMaxStepLineMinimize
        """
        _oeff.OEMaxStepLineMinimize_swiginit(self, _oeff.new_OEMaxStepLineMinimize(*args))
    __swig_destroy__ = _oeff.delete_OEMaxStepLineMinimize

    def SetMaxStep(self, len: "unsigned int", maxStep: "double *") -> "bool":
        r"""SetMaxStep(OEMaxStepLineMinimize self, unsigned int len, double * maxStep) -> bool"""
        return _oeff.OEMaxStepLineMinimize_SetMaxStep(self, len, maxStep)

    def __call__(self, n: "unsigned int", p: "double const *", d: "double *", g: "double *", k: "double *", gmin: "double *", alpha: "double *", fun: "OEFunc1") -> "bool":
        r"""__call__(OEMaxStepLineMinimize self, unsigned int n, double const * p, double * d, double * g, double * k, double * gmin, double * alpha, OEFunc1 fun) -> bool"""
        return _oeff.OEMaxStepLineMinimize___call__(self, n, p, d, g, k, gmin, alpha, fun)

    def CreateCopy(self) -> "OEOpt::OELineMinimize *":
        r"""CreateCopy(OEMaxStepLineMinimize self) -> OELineMinimize"""
        return _oeff.OEMaxStepLineMinimize_CreateCopy(self)

# Register OEMaxStepLineMinimize in _oeff:
_oeff.OEMaxStepLineMinimize_swigregister(OEMaxStepLineMinimize)

class OENRLineSearch(OELineMinimize):
    r"""Proxy of C++ OEOpt::OENRLineSearch class."""

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

    def __init__(self, *args):
        r"""__init__(OENRLineSearch self, unsigned int inistep=UseFullNewtonInitialStep) -> OENRLineSearch"""
        _oeff.OENRLineSearch_swiginit(self, _oeff.new_OENRLineSearch(*args))

    def SetMaxStep(self, n: "unsigned int", p: "double *") -> "bool":
        r"""SetMaxStep(OENRLineSearch self, unsigned int n, double * p) -> bool"""
        return _oeff.OENRLineSearch_SetMaxStep(self, n, p)

    def __call__(self, n: "unsigned int", p: "double const *", d: "double *", g: "double *", k: "double *", gmin: "double *", alpha: "double *", fun: "OEFunc1") -> "bool":
        r"""__call__(OENRLineSearch self, unsigned int n, double const * p, double * d, double * g, double * k, double * gmin, double * alpha, OEFunc1 fun) -> bool"""
        return _oeff.OENRLineSearch___call__(self, n, p, d, g, k, gmin, alpha, fun)

    def CreateCopy(self) -> "OEOpt::OELineMinimize *":
        r"""CreateCopy(OENRLineSearch self) -> OELineMinimize"""
        return _oeff.OENRLineSearch_CreateCopy(self)
    __swig_destroy__ = _oeff.delete_OENRLineSearch

# Register OENRLineSearch in _oeff:
_oeff.OENRLineSearch_swigregister(OENRLineSearch)

class OERibierePolakOpt(OEOptimizer1):
    r"""Proxy of C++ OEOpt::OERibierePolakOpt class."""

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

    def __init__(self, *args):
        r"""
        __init__(OERibierePolakOpt self) -> OERibierePolakOpt
        __init__(OERibierePolakOpt self, OERibierePolakOpt rhs) -> OERibierePolakOpt
        """
        _oeff.OERibierePolakOpt_swiginit(self, _oeff.new_OERibierePolakOpt(*args))

    def SetTolerance(self, t: "double") -> "void":
        r"""SetTolerance(OERibierePolakOpt self, double t)"""
        return _oeff.OERibierePolakOpt_SetTolerance(self, t)

    def SetIterLimit(self, arg2: "unsigned int") -> "void":
        r"""SetIterLimit(OERibierePolakOpt self, unsigned int arg2)"""
        return _oeff.OERibierePolakOpt_SetIterLimit(self, arg2)

    def GetTolerance(self) -> "double":
        r"""GetTolerance(OERibierePolakOpt self) -> double"""
        return _oeff.OERibierePolakOpt_GetTolerance(self)

    def GetIterLimit(self) -> "unsigned int":
        r"""GetIterLimit(OERibierePolakOpt self) -> unsigned int"""
        return _oeff.OERibierePolakOpt_GetIterLimit(self)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OERibierePolakOpt self, OEFunc0 function, double const * var, double * opt_var=(double *) 0) -> double
        __call__(OERibierePolakOpt self, OEFunc0 arg2, OECheckpoint0 arg3, double const * arg4, double * arg5) -> double
        __call__(OERibierePolakOpt self, OEFunc1 function, double const * var, double * opt_var=None) -> double
        __call__(OERibierePolakOpt self, OEFunc1 function, OECheckpoint1 check, double const * var, double * opt_var=None) -> double
        """
        return _oeff.OERibierePolakOpt___call__(self, *args)

    def SetLineMinimize(self, linmin: "OELineMinimize") -> "bool":
        r"""SetLineMinimize(OERibierePolakOpt self, OELineMinimize linmin) -> bool"""
        return _oeff.OERibierePolakOpt_SetLineMinimize(self, linmin)

# Register OERibierePolakOpt in _oeff:
_oeff.OERibierePolakOpt_swigregister(OERibierePolakOpt)

class OEHestenesStiefelOpt(OEOptimizer1):
    r"""Proxy of C++ OEOpt::OEHestenesStiefelOpt class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEHestenesStiefelOpt self) -> OEHestenesStiefelOpt
        __init__(OEHestenesStiefelOpt self, OEHestenesStiefelOpt rhs) -> OEHestenesStiefelOpt
        """
        _oeff.OEHestenesStiefelOpt_swiginit(self, _oeff.new_OEHestenesStiefelOpt(*args))

    def SetTolerance(self, t: "double") -> "void":
        r"""SetTolerance(OEHestenesStiefelOpt self, double t)"""
        return _oeff.OEHestenesStiefelOpt_SetTolerance(self, t)

    def SetIterLimit(self, arg2: "unsigned int") -> "void":
        r"""SetIterLimit(OEHestenesStiefelOpt self, unsigned int arg2)"""
        return _oeff.OEHestenesStiefelOpt_SetIterLimit(self, arg2)

    def GetTolerance(self) -> "double":
        r"""GetTolerance(OEHestenesStiefelOpt self) -> double"""
        return _oeff.OEHestenesStiefelOpt_GetTolerance(self)

    def GetIterLimit(self) -> "unsigned int":
        r"""GetIterLimit(OEHestenesStiefelOpt self) -> unsigned int"""
        return _oeff.OEHestenesStiefelOpt_GetIterLimit(self)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEHestenesStiefelOpt self, OEFunc0 function, double const * var, double * opt_var=(double *) 0) -> double
        __call__(OEHestenesStiefelOpt self, OEFunc0 arg2, OECheckpoint0 arg3, double const * arg4, double * arg5) -> double
        __call__(OEHestenesStiefelOpt self, OEFunc1 function, double const * var, double * opt_var=None) -> double
        __call__(OEHestenesStiefelOpt self, OEFunc1 function, OECheckpoint1 check, double const * var, double * opt_var=None) -> double
        """
        return _oeff.OEHestenesStiefelOpt___call__(self, *args)

    def SetLineMinimize(self, linmin: "OELineMinimize") -> "bool":
        r"""SetLineMinimize(OEHestenesStiefelOpt self, OELineMinimize linmin) -> bool"""
        return _oeff.OEHestenesStiefelOpt_SetLineMinimize(self, linmin)

# Register OEHestenesStiefelOpt in _oeff:
_oeff.OEHestenesStiefelOpt_swigregister(OEHestenesStiefelOpt)

class OESteepestDescentOpt(OEOptimizer1):
    r"""Proxy of C++ OEOpt::OESteepestDescentOpt class."""

    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__(OESteepestDescentOpt self) -> OESteepestDescentOpt"""
        _oeff.OESteepestDescentOpt_swiginit(self, _oeff.new_OESteepestDescentOpt())

    def SetTolerance(self, t: "double") -> "void":
        r"""SetTolerance(OESteepestDescentOpt self, double t)"""
        return _oeff.OESteepestDescentOpt_SetTolerance(self, t)

    def SetIterLimit(self, arg2: "unsigned int") -> "void":
        r"""SetIterLimit(OESteepestDescentOpt self, unsigned int arg2)"""
        return _oeff.OESteepestDescentOpt_SetIterLimit(self, arg2)

    def GetTolerance(self) -> "double":
        r"""GetTolerance(OESteepestDescentOpt self) -> double"""
        return _oeff.OESteepestDescentOpt_GetTolerance(self)

    def GetIterLimit(self) -> "unsigned int":
        r"""GetIterLimit(OESteepestDescentOpt self) -> unsigned int"""
        return _oeff.OESteepestDescentOpt_GetIterLimit(self)

    def SetInitialStep(self, step: "double") -> "void":
        r"""SetInitialStep(OESteepestDescentOpt self, double step)"""
        return _oeff.OESteepestDescentOpt_SetInitialStep(self, step)

    def GetInitialStep(self) -> "double":
        r"""GetInitialStep(OESteepestDescentOpt self) -> double"""
        return _oeff.OESteepestDescentOpt_GetInitialStep(self)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OESteepestDescentOpt self, OEFunc0 function, double const * var, double * opt_var=(double *) 0) -> double
        __call__(OESteepestDescentOpt self, OEFunc0 arg2, OECheckpoint0 arg3, double const * arg4, double * arg5) -> double
        __call__(OESteepestDescentOpt self, OEFunc1 function, double const * var, double * opt_var=None) -> double
        __call__(OESteepestDescentOpt self, OEFunc1 function, OECheckpoint1 check, double const * var, double * opt_var=None) -> double
        """
        return _oeff.OESteepestDescentOpt___call__(self, *args)
    __swig_destroy__ = _oeff.delete_OESteepestDescentOpt

# Register OESteepestDescentOpt in _oeff:
_oeff.OESteepestDescentOpt_swigregister(OESteepestDescentOpt)

class OENewtonOpt(OEOptimizer2):
    r"""Proxy of C++ OEOpt::OENewtonOpt class."""

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

    def __init__(self, *args):
        r"""
        __init__(OENewtonOpt self) -> OENewtonOpt
        __init__(OENewtonOpt self, OENewtonOpt arg2) -> OENewtonOpt
        """
        _oeff.OENewtonOpt_swiginit(self, _oeff.new_OENewtonOpt(*args))
    __swig_destroy__ = _oeff.delete_OENewtonOpt

    def SetTolerance(self, gradRmsdTol: "double") -> "void":
        r"""SetTolerance(OENewtonOpt self, double gradRmsdTol)"""
        return _oeff.OENewtonOpt_SetTolerance(self, gradRmsdTol)

    def SetIterLimit(self, n: "unsigned int") -> "void":
        r"""SetIterLimit(OENewtonOpt self, unsigned int n)"""
        return _oeff.OENewtonOpt_SetIterLimit(self, n)

    def GetTolerance(self) -> "double":
        r"""GetTolerance(OENewtonOpt self) -> double"""
        return _oeff.OENewtonOpt_GetTolerance(self)

    def GetIterLimit(self) -> "unsigned int":
        r"""GetIterLimit(OENewtonOpt self) -> unsigned int"""
        return _oeff.OENewtonOpt_GetIterLimit(self)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OENewtonOpt self, OEFunc2 function, OECheckpoint1 check, double const * var, double * opt_var) -> double
        __call__(OENewtonOpt self, OEFunc2 function, double const * var, double * opt_var) -> double
        """
        return _oeff.OENewtonOpt___call__(self, *args)

    def GetImpl(self, *args) -> "OEOpt::OENewtonOptImpl const *":
        r"""
        GetImpl(OENewtonOpt self) -> OEOpt::OENewtonOptImpl
        GetImpl(OENewtonOpt self) -> OEOpt::OENewtonOptImpl const *
        """
        return _oeff.OENewtonOpt_GetImpl(self, *args)

# Register OENewtonOpt in _oeff:
_oeff.OENewtonOpt_swigregister(OENewtonOpt)

class OEInteraction(object):
    r"""Proxy of C++ OEMolPotential::OEInteraction class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEInteraction self, OEMolPotential::OEInteractImpl & arg2) -> OEInteraction
        __init__(OEInteraction self, OEInteraction arg2) -> OEInteraction
        """
        _oeff.OEInteraction_swiginit(self, _oeff.new_OEInteraction(*args))
    __swig_destroy__ = _oeff.delete_OEInteraction

    def NumAtoms(self) -> "unsigned int":
        r"""NumAtoms(OEInteraction self) -> unsigned int"""
        return _oeff.OEInteraction_NumAtoms(self)

    def NumValues(self) -> "unsigned int":
        r"""NumValues(OEInteraction self) -> unsigned int"""
        return _oeff.OEInteraction_NumValues(self)

    def GetName(self) -> "std::string":
        r"""GetName(OEInteraction self) -> std::string"""
        return _oeff.OEInteraction_GetName(self)

    def GetValues(self, grads: "double *"=None) -> "double":
        r"""GetValues(OEInteraction self, double * grads=None) -> double"""
        return _oeff.OEInteraction_GetValues(self, grads)

    def GetAtoms(self) -> "OESystem::OEIterBase< OEChem::OEAtomBase > *":
        r"""GetAtoms(OEInteraction self) -> OESystem::OEIterBase< OEChem::OEAtomBase > *"""
        return _oeff.OEInteraction_GetAtoms(self)

    def GetImpl(self) -> "OEMolPotential::OEInteractImpl *":
        r"""GetImpl(OEInteraction self) -> OEMolPotential::OEInteractImpl *"""
        return _oeff.OEInteraction_GetImpl(self)

# Register OEInteraction in _oeff:
_oeff.OEInteraction_swigregister(OEInteraction)

class OEMolFunc(object):
    r"""Proxy of C++ OEMolPotential::OEMolFunc class."""

    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__(OEMolFunc self) -> OEMolFunc"""
        if self.__class__ == OEMolFunc:
            _self = None
        else:
            _self = self
        _oeff.OEMolFunc_swiginit(self, _oeff.new_OEMolFunc(_self, ))
    __swig_destroy__ = _oeff.delete_OEMolFunc

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEMolFunc self, OEMolBase mol) -> bool"""
        return _oeff.OEMolFunc_Setup(self, mol)

    def GetInteractions(self, arg0: "OEMolBase", arg1: "double const *", functype: "unsigned int"=0) -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OEMolFunc self, OEMolBase arg0, double const * arg1, unsigned int functype=0) -> OESystem::OEIterBase< OEMolPotential::OEInteraction >"""
        return _oeff.OEMolFunc_GetInteractions(self, arg0, arg1, functype)

    def Clear(self) -> "void":
        r"""Clear(OEMolFunc self)"""
        return _oeff.OEMolFunc_Clear(self)

    def Set(self, *args) -> "bool":
        r"""
        Set(OEMolFunc self, OEUnaryAtomPred arg0, unsigned int arg1) -> bool
        Set(OEMolFunc self, OEUnaryBondPred arg0, unsigned int arg1) -> bool
        Set(OEMolFunc self, OEBinaryAtomPred arg0, unsigned int arg1) -> bool
        Set(OEMolFunc self, OEBinaryBondPred arg0, unsigned int arg1) -> bool
        """
        return _oeff.OEMolFunc_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEMolFunc self)"""
        return _oeff.OEMolFunc_ClearPredicates(self)

    def SetVerbose(self, arg0: "bool") -> "void":
        r"""SetVerbose(OEMolFunc self, bool arg0)"""
        return _oeff.OEMolFunc_SetVerbose(self, arg0)
    def __disown__(self):
        self.this.disown()
        _oeff.disown_OEMolFunc(self)
        return weakref.proxy(self)

# Register OEMolFunc in _oeff:
_oeff.OEMolFunc_swigregister(OEMolFunc)

class OEMolFunc0(OEFunc0, OEMolFunc):
    r"""Proxy of C++ OEMolPotential::OEMolFunc0 class."""

    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__(OEMolFunc0 self) -> OEMolFunc0"""
        if self.__class__ == OEMolFunc0:
            _self = None
        else:
            _self = self
        _oeff.OEMolFunc0_swiginit(self, _oeff.new_OEMolFunc0(_self, ))
    __swig_destroy__ = _oeff.delete_OEMolFunc0
    def __disown__(self):
        self.this.disown()
        _oeff.disown_OEMolFunc0(self)
        return weakref.proxy(self)

# Register OEMolFunc0 in _oeff:
_oeff.OEMolFunc0_swigregister(OEMolFunc0)

class OEMolFunc1(OEFunc1, OEMolFunc0):
    r"""Proxy of C++ OEMolPotential::OEMolFunc1 class."""

    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__(OEMolFunc1 self) -> OEMolFunc1"""
        if self.__class__ == OEMolFunc1:
            _self = None
        else:
            _self = self
        _oeff.OEMolFunc1_swiginit(self, _oeff.new_OEMolFunc1(_self, ))
    __swig_destroy__ = _oeff.delete_OEMolFunc1
    def __disown__(self):
        self.this.disown()
        _oeff.disown_OEMolFunc1(self)
        return weakref.proxy(self)

# Register OEMolFunc1 in _oeff:
_oeff.OEMolFunc1_swigregister(OEMolFunc1)

class OEMolFunc2(OEFunc2, OEMolFunc1):
    r"""Proxy of C++ OEMolPotential::OEMolFunc2 class."""

    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__(OEMolFunc2 self) -> OEMolFunc2"""
        if self.__class__ == OEMolFunc2:
            _self = None
        else:
            _self = self
        _oeff.OEMolFunc2_swiginit(self, _oeff.new_OEMolFunc2(_self, ))
    __swig_destroy__ = _oeff.delete_OEMolFunc2
    def __disown__(self):
        self.this.disown()
        _oeff.disown_OEMolFunc2(self)
        return weakref.proxy(self)

# Register OEMolFunc2 in _oeff:
_oeff.OEMolFunc2_swigregister(OEMolFunc2)

class OEForceField(OEMolFunc1):
    r"""Proxy of C++ OEMolPotential::OEForceField class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oeff.delete_OEForceField

    def PrepMol(self, mol: "OEMolBase", sweep: "bool"=True, warnOK: "bool"=True) -> "bool":
        r"""PrepMol(OEForceField self, OEMolBase mol, bool sweep=True, bool warnOK=True) -> bool"""
        return _oeff.OEForceField_PrepMol(self, mol, sweep, warnOK)

    def GetTitle(self) -> "std::string":
        r"""GetTitle(OEForceField self) -> std::string"""
        return _oeff.OEForceField_GetTitle(self)

    def SetTitle(self, argTitle: "std::string const &") -> "void":
        r"""SetTitle(OEForceField self, std::string const & argTitle)"""
        return _oeff.OEForceField_SetTitle(self, argTitle)

    def Add(self, f: "OEMolFunc1", own: "bool"=False) -> "bool":
        r"""Add(OEForceField self, OEMolFunc1 f, bool own=False) -> bool"""
        return _oeff.OEForceField_Add(self, f, own)

# Register OEForceField in _oeff:
_oeff.OEForceField_swigregister(OEForceField)

class OEGenericFF2(OEMolFunc2, OEForceField):
    r"""Proxy of C++ OEMolPotential::OEGenericFF2 class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEGenericFF2 self) -> OEGenericFF2
        __init__(OEGenericFF2 self, OEGenericFF2 arg2) -> OEGenericFF2
        """
        _oeff.OEGenericFF2_swiginit(self, _oeff.new_OEGenericFF2(*args))
    __swig_destroy__ = _oeff.delete_OEGenericFF2

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEGenericFF2 self) -> unsigned int"""
        return _oeff.OEGenericFF2_NumVar(self)

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEGenericFF2 self, OEMolBase mol) -> bool"""
        return _oeff.OEGenericFF2_Setup(self, mol)

    def __call__(self, *args) -> "bool":
        r"""
        __call__(OEGenericFF2 self, double const * coord) -> double
        __call__(OEGenericFF2 self, double const * coord, double * grad) -> double
        __call__(OEGenericFF2 self, double const * coord, double * hess, double * grad) -> bool
        """
        return _oeff.OEGenericFF2___call__(self, *args)

    def GetFComponents(self, coord: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEGenericFF2 self, double const * coord) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEGenericFF2_GetFComponents(self, coord)

    def Set(self, *args) -> "bool":
        r"""
        Set(OEGenericFF2 self, OEUnaryAtomPred pred, unsigned int functype) -> bool
        Set(OEGenericFF2 self, OEUnaryBondPred pred, unsigned int functype) -> bool
        Set(OEGenericFF2 self, OEBinaryAtomPred pred, unsigned int functype) -> bool
        Set(OEGenericFF2 self, OEBinaryBondPred arg2, unsigned int functype) -> bool
        """
        return _oeff.OEGenericFF2_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEGenericFF2 self)"""
        return _oeff.OEGenericFF2_ClearPredicates(self)

    def GetInteractions(self, mol: "OEMolBase", coord: "double const *", functype: "unsigned int"=0) -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OEGenericFF2 self, OEMolBase mol, double const * coord, unsigned int functype=0) -> OESystem::OEIterBase< OEMolPotential::OEInteraction >"""
        return _oeff.OEGenericFF2_GetInteractions(self, mol, coord, functype)

    def Clear(self) -> "void":
        r"""Clear(OEGenericFF2 self)"""
        return _oeff.OEGenericFF2_Clear(self)

    def SetVerbose(self, arg2: "bool") -> "void":
        r"""SetVerbose(OEGenericFF2 self, bool arg2)"""
        return _oeff.OEGenericFF2_SetVerbose(self, arg2)

    def PrepMol(self, mol: "OEMolBase", sweep: "bool"=True, warnOK: "bool"=True) -> "bool":
        r"""PrepMol(OEGenericFF2 self, OEMolBase mol, bool sweep=True, bool warnOK=True) -> bool"""
        return _oeff.OEGenericFF2_PrepMol(self, mol, sweep, warnOK)

    def Add(self, func: "OEMolFunc1", own: "bool"=False) -> "bool":
        r"""Add(OEGenericFF2 self, OEMolFunc1 func, bool own=False) -> bool"""
        return _oeff.OEGenericFF2_Add(self, func, own)

    def AddMolFunc(self, f: "OEMolFunc2", own: "bool"=False) -> "bool":
        r"""AddMolFunc(OEGenericFF2 self, OEMolFunc2 f, bool own=False) -> bool"""
        return _oeff.OEGenericFF2_AddMolFunc(self, f, own)

    def RemoveMolFunc(self, f: "OEMolFunc2") -> "bool":
        r"""RemoveMolFunc(OEGenericFF2 self, OEMolFunc2 f) -> bool"""
        return _oeff.OEGenericFF2_RemoveMolFunc(self, f)

    def GetComponents(self) -> "std::vector< OEMolPotential::OEMolFunc2 *,std::allocator< OEMolPotential::OEMolFunc2 * > >":
        r"""GetComponents(OEGenericFF2 self) -> OEMolFunc2Vector"""
        return _oeff.OEGenericFF2_GetComponents(self)

# Register OEGenericFF2 in _oeff:
_oeff.OEGenericFF2_swigregister(OEGenericFF2)

class OEGenericFF(OEForceField):
    r"""Proxy of C++ OEMolPotential::OEGenericFF class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEGenericFF self) -> OEGenericFF
        __init__(OEGenericFF self, OEGenericFF arg2) -> OEGenericFF
        __init__(OEGenericFF self, OEGenericFF2 arg2) -> OEGenericFF
        """
        _oeff.OEGenericFF_swiginit(self, _oeff.new_OEGenericFF(*args))
    __swig_destroy__ = _oeff.delete_OEGenericFF

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEGenericFF self) -> unsigned int"""
        return _oeff.OEGenericFF_NumVar(self)

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEGenericFF self, OEMolBase mol) -> bool"""
        return _oeff.OEGenericFF_Setup(self, mol)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEGenericFF self, double const * coord) -> double
        __call__(OEGenericFF self, double const * coord, double * grad) -> double
        """
        return _oeff.OEGenericFF___call__(self, *args)

    def GetFComponents(self, coord: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEGenericFF self, double const * coord) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEGenericFF_GetFComponents(self, coord)

    def Set(self, *args) -> "bool":
        r"""
        Set(OEGenericFF self, OEUnaryAtomPred pred, unsigned int functype) -> bool
        Set(OEGenericFF self, OEUnaryBondPred pred, unsigned int functype) -> bool
        Set(OEGenericFF self, OEBinaryAtomPred pred, unsigned int functype) -> bool
        Set(OEGenericFF self, OEBinaryBondPred arg2, unsigned int functype) -> bool
        """
        return _oeff.OEGenericFF_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEGenericFF self)"""
        return _oeff.OEGenericFF_ClearPredicates(self)

    def GetInteractions(self, mol: "OEMolBase", coord: "double const *", functype: "unsigned int"=0) -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OEGenericFF self, OEMolBase mol, double const * coord, unsigned int functype=0) -> OESystem::OEIterBase< OEMolPotential::OEInteraction >"""
        return _oeff.OEGenericFF_GetInteractions(self, mol, coord, functype)

    def Clear(self) -> "void":
        r"""Clear(OEGenericFF self)"""
        return _oeff.OEGenericFF_Clear(self)

    def SetVerbose(self, arg2: "bool") -> "void":
        r"""SetVerbose(OEGenericFF self, bool arg2)"""
        return _oeff.OEGenericFF_SetVerbose(self, arg2)

    def PrepMol(self, mol: "OEMolBase", sweep: "bool"=True, warnOK: "bool"=True) -> "bool":
        r"""PrepMol(OEGenericFF self, OEMolBase mol, bool sweep=True, bool warnOK=True) -> bool"""
        return _oeff.OEGenericFF_PrepMol(self, mol, sweep, warnOK)

    def Add(self, f: "OEMolFunc1", own: "bool"=False) -> "bool":
        r"""Add(OEGenericFF self, OEMolFunc1 f, bool own=False) -> bool"""
        return _oeff.OEGenericFF_Add(self, f, own)

    def AddMolFunc(self, f: "OEMolFunc1", own: "bool"=False) -> "bool":
        r"""AddMolFunc(OEGenericFF self, OEMolFunc1 f, bool own=False) -> bool"""
        return _oeff.OEGenericFF_AddMolFunc(self, f, own)

    def RemoveMolFunc(self, f: "OEMolFunc1") -> "bool":
        r"""RemoveMolFunc(OEGenericFF self, OEMolFunc1 f) -> bool"""
        return _oeff.OEGenericFF_RemoveMolFunc(self, f)

    def GetComponents(self) -> "std::vector< OEMolPotential::OEMolFunc1 *,std::allocator< OEMolPotential::OEMolFunc1 * > >":
        r"""GetComponents(OEGenericFF self) -> OEMolFunc1Vector"""
        return _oeff.OEGenericFF_GetComponents(self)

# Register OEGenericFF in _oeff:
_oeff.OEGenericFF_swigregister(OEGenericFF)

class OEInterMolFunc1(OEMolFunc1):
    r"""Proxy of C++ OEMolPotential::OEInterMolFunc1 class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oeff.delete_OEInterMolFunc1

    def SetupHost(self, host: "OEMolBase") -> "bool":
        r"""SetupHost(OEInterMolFunc1 self, OEMolBase host) -> bool"""
        return _oeff.OEInterMolFunc1_SetupHost(self, host)

    def SetHostFlex(self, pred: "OEUnaryAtomPred") -> "bool":
        r"""SetHostFlex(OEInterMolFunc1 self, OEUnaryAtomPred pred) -> bool"""
        return _oeff.OEInterMolFunc1_SetHostFlex(self, pred)

    def GetVar(self, var: "double *", x: "double const *") -> "void":
        r"""GetVar(OEInterMolFunc1 self, double * var, double const * x)"""
        return _oeff.OEInterMolFunc1_GetVar(self, var, x)

    def AdaptHostCoords(self, coords: "double *", var: "double const *") -> "bool":
        r"""AdaptHostCoords(OEInterMolFunc1 self, double * coords, double const * var) -> bool"""
        return _oeff.OEInterMolFunc1_AdaptHostCoords(self, coords, var)

# Register OEInterMolFunc1 in _oeff:
_oeff.OEInterMolFunc1_swigregister(OEInterMolFunc1)

class OEInterMolFunc2(OEInterMolFunc1, OEMolFunc2):
    r"""Proxy of C++ OEMolPotential::OEInterMolFunc2 class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oeff.delete_OEInterMolFunc2

# Register OEInterMolFunc2 in _oeff:
_oeff.OEInterMolFunc2_swigregister(OEInterMolFunc2)

class OEScaledMolFunc(OEMolFunc2):
    r"""Proxy of C++ OEMolPotential::OEScaledMolFunc class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEScaledMolFunc self, OEMolFunc1 argFunc, double const argFactor, bool const argOwn=False) -> OEScaledMolFunc
        __init__(OEScaledMolFunc self, OEMolFunc2 argFunc, double const argFactor, bool const argOwn=False) -> OEScaledMolFunc
        """
        _oeff.OEScaledMolFunc_swiginit(self, _oeff.new_OEScaledMolFunc(*args))
    __swig_destroy__ = _oeff.delete_OEScaledMolFunc

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEScaledMolFunc self, OEMolBase mol) -> bool"""
        return _oeff.OEScaledMolFunc_Setup(self, mol)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEScaledMolFunc self) -> unsigned int"""
        return _oeff.OEScaledMolFunc_NumVar(self)

    def Set(self, *args) -> "bool":
        r"""
        Set(OEScaledMolFunc self, OEUnaryAtomPred pred, unsigned int functype) -> bool
        Set(OEScaledMolFunc self, OEUnaryBondPred pred, unsigned int functype) -> bool
        Set(OEScaledMolFunc self, OEBinaryAtomPred pred, unsigned int functype) -> bool
        Set(OEScaledMolFunc self, OEBinaryBondPred pred, unsigned int functype) -> bool
        """
        return _oeff.OEScaledMolFunc_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEScaledMolFunc self)"""
        return _oeff.OEScaledMolFunc_ClearPredicates(self)

    def Clear(self) -> "void":
        r"""Clear(OEScaledMolFunc self)"""
        return _oeff.OEScaledMolFunc_Clear(self)

    def SetVerbose(self, value: "bool") -> "void":
        r"""SetVerbose(OEScaledMolFunc self, bool value)"""
        return _oeff.OEScaledMolFunc_SetVerbose(self, value)

    def GetInteractions(self, mol: "OEMolBase", coords: "double const *", functype: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OEScaledMolFunc self, OEMolBase mol, double const * coords, unsigned int functype) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OEScaledMolFunc_GetInteractions(self, mol, coords, functype)

    def GetFComponents(self, coords: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEScaledMolFunc self, double const * coords) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEScaledMolFunc_GetFComponents(self, coords)

    def __call__(self, *args) -> "bool":
        r"""
        __call__(OEScaledMolFunc self, double const * coords) -> double
        __call__(OEScaledMolFunc self, double const * coords, double * grads) -> double
        __call__(OEScaledMolFunc self, double const * coords, double * hess, double * grads) -> bool
        """
        return _oeff.OEScaledMolFunc___call__(self, *args)

# Register OEScaledMolFunc in _oeff:
_oeff.OEScaledMolFunc_swigregister(OEScaledMolFunc)

class OENumericMolFunc2(OEMolFunc2):
    r"""Proxy of C++ OEMolPotential::OENumericMolFunc2 class."""

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

    def __init__(self, argFunc1: "OEMolFunc1", argOwn: "bool const"=False):
        r"""__init__(OENumericMolFunc2 self, OEMolFunc1 argFunc1, bool const argOwn=False) -> OENumericMolFunc2"""
        _oeff.OENumericMolFunc2_swiginit(self, _oeff.new_OENumericMolFunc2(argFunc1, argOwn))
    __swig_destroy__ = _oeff.delete_OENumericMolFunc2

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OENumericMolFunc2 self, OEMolBase mol) -> bool"""
        return _oeff.OENumericMolFunc2_Setup(self, mol)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OENumericMolFunc2 self) -> unsigned int"""
        return _oeff.OENumericMolFunc2_NumVar(self)

    def GetFComponents(self, coords: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OENumericMolFunc2 self, double const * coords) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OENumericMolFunc2_GetFComponents(self, coords)

    def Set(self, *args) -> "bool":
        r"""
        Set(OENumericMolFunc2 self, OEUnaryAtomPred pred, unsigned int functype) -> bool
        Set(OENumericMolFunc2 self, OEUnaryBondPred pred, unsigned int functype) -> bool
        Set(OENumericMolFunc2 self, OEBinaryAtomPred pred, unsigned int functype) -> bool
        Set(OENumericMolFunc2 self, OEBinaryBondPred pred, unsigned int functype) -> bool
        """
        return _oeff.OENumericMolFunc2_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OENumericMolFunc2 self)"""
        return _oeff.OENumericMolFunc2_ClearPredicates(self)

    def GetInteractions(self, mol: "OEMolBase", coords: "double const *", functype: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OENumericMolFunc2 self, OEMolBase mol, double const * coords, unsigned int functype) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OENumericMolFunc2_GetInteractions(self, mol, coords, functype)

    def Clear(self) -> "void":
        r"""Clear(OENumericMolFunc2 self)"""
        return _oeff.OENumericMolFunc2_Clear(self)

    def SetVerbose(self, value: "bool") -> "void":
        r"""SetVerbose(OENumericMolFunc2 self, bool value)"""
        return _oeff.OENumericMolFunc2_SetVerbose(self, value)

    def __call__(self, *args) -> "bool":
        r"""
        __call__(OENumericMolFunc2 self, double const * coords) -> double
        __call__(OENumericMolFunc2 self, double const * coords, double * grads) -> double
        __call__(OENumericMolFunc2 self, double const * coords, double * hess, double * grads) -> bool
        """
        return _oeff.OENumericMolFunc2___call__(self, *args)

# Register OENumericMolFunc2 in _oeff:
_oeff.OENumericMolFunc2_swigregister(OENumericMolFunc2)

class OEMolAdaptor(OEAdaptor, OEMolFunc1):
    r"""Proxy of C++ OEMolPotential::OEMolAdaptor class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr

    def GetVar(self, var: "double *", x: "double const *") -> "void":
        r"""GetVar(OEMolAdaptor self, double * var, double const * x)"""
        return _oeff.OEMolAdaptor_GetVar(self, var, x)

    def GetMolFunc(self) -> "OEMolPotential::OEMolFunc1 &":
        r"""GetMolFunc(OEMolAdaptor self) -> OEMolFunc1"""
        return _oeff.OEMolAdaptor_GetMolFunc(self)

    def SetMolFunc(self, molfunc: "OEMolFunc1", own: "bool") -> "bool":
        r"""SetMolFunc(OEMolAdaptor self, OEMolFunc1 molfunc, bool own) -> bool"""
        return _oeff.OEMolAdaptor_SetMolFunc(self, molfunc, own)
    __swig_destroy__ = _oeff.delete_OEMolAdaptor

# Register OEMolAdaptor in _oeff:
_oeff.OEMolAdaptor_swigregister(OEMolAdaptor)

class OEMolAdaptor2(OEMolAdaptor, OEMolFunc2):
    r"""Proxy of C++ OEMolPotential::OEMolAdaptor2 class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oeff.delete_OEMolAdaptor2

    def SetMolFunc2(self, molfunc: "OEMolFunc2", own: "bool") -> "bool":
        r"""SetMolFunc2(OEMolAdaptor2 self, OEMolFunc2 molfunc, bool own) -> bool"""
        return _oeff.OEMolAdaptor2_SetMolFunc2(self, molfunc, own)

# Register OEMolAdaptor2 in _oeff:
_oeff.OEMolAdaptor2_swigregister(OEMolAdaptor2)

class OESubsetAdaptor(OEMolAdaptor2):
    r"""Proxy of C++ OEMolPotential::OESubsetAdaptor class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESubsetAdaptor self, OEMolFunc1 arg2, bool own=False, bool excludeInteract=True) -> OESubsetAdaptor
        __init__(OESubsetAdaptor self, OEMolFunc2 arg2, bool own=False, bool excludeInteract=True) -> OESubsetAdaptor
        """
        _oeff.OESubsetAdaptor_swiginit(self, _oeff.new_OESubsetAdaptor(*args))
    __swig_destroy__ = _oeff.delete_OESubsetAdaptor

    def __call__(self, *args) -> "bool":
        r"""
        __call__(OESubsetAdaptor self, double const * c) -> double
        __call__(OESubsetAdaptor self, double const * c, double * g) -> double
        __call__(OESubsetAdaptor self, double const * coord, double * hes, double * grad) -> bool
        """
        return _oeff.OESubsetAdaptor___call__(self, *args)

    def Setup(self, arg2: "OEMolBase") -> "bool":
        r"""Setup(OESubsetAdaptor self, OEMolBase arg2) -> bool"""
        return _oeff.OESubsetAdaptor_Setup(self, arg2)

    def GetMolFunc(self) -> "OEMolPotential::OEMolFunc1 &":
        r"""GetMolFunc(OESubsetAdaptor self) -> OEMolFunc1"""
        return _oeff.OESubsetAdaptor_GetMolFunc(self)

    def SetMolFunc(self, molfunc: "OEMolFunc1", own: "bool") -> "bool":
        r"""SetMolFunc(OESubsetAdaptor self, OEMolFunc1 molfunc, bool own) -> bool"""
        return _oeff.OESubsetAdaptor_SetMolFunc(self, molfunc, own)

    def SetMolFunc2(self, molfunc: "OEMolFunc2", own: "bool") -> "bool":
        r"""SetMolFunc2(OESubsetAdaptor self, OEMolFunc2 molfunc, bool own) -> bool"""
        return _oeff.OESubsetAdaptor_SetMolFunc2(self, molfunc, own)

    def Set(self, *args) -> "bool":
        
        return _oeff.OESubsetAdaptor_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OESubsetAdaptor self)"""
        return _oeff.OESubsetAdaptor_ClearPredicates(self)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OESubsetAdaptor self) -> unsigned int"""
        return _oeff.OESubsetAdaptor_NumVar(self)

    def GetVar(self, var: "double *", x: "double const *") -> "void":
        r"""GetVar(OESubsetAdaptor self, double * var, double const * x)"""
        return _oeff.OESubsetAdaptor_GetVar(self, var, x)

    def AdaptVar(self, ca: "double *", c: "double const *") -> "bool":
        r"""AdaptVar(OESubsetAdaptor self, double * ca, double const * c) -> bool"""
        return _oeff.OESubsetAdaptor_AdaptVar(self, ca, c)

    def AdaptGrad(self, ga: "double *", g: "double const *") -> "bool":
        r"""AdaptGrad(OESubsetAdaptor self, double * ga, double const * g) -> bool"""
        return _oeff.OESubsetAdaptor_AdaptGrad(self, ga, g)

    def AdaptHessian(self, he: "double *", h: "double const *") -> "bool":
        r"""AdaptHessian(OESubsetAdaptor self, double * he, double const * h) -> bool"""
        return _oeff.OESubsetAdaptor_AdaptHessian(self, he, h)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OESubsetAdaptor self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OESubsetAdaptor_GetFComponents(self, arg2)

    def GetInteractions(self, arg2: "OEMolBase", arg3: "double const *", arg4: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OESubsetAdaptor self, OEMolBase arg2, double const * arg3, unsigned int arg4) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OESubsetAdaptor_GetInteractions(self, arg2, arg3, arg4)

# Register OESubsetAdaptor in _oeff:
_oeff.OESubsetAdaptor_swigregister(OESubsetAdaptor)

class OETorAdaptor(OEMolAdaptor):
    r"""Proxy of C++ OEMolPotential::OETorAdaptor class."""

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

    def __init__(self, arg2: "OEMolFunc1", own: "bool"=False, excludeInteract: "bool"=True):
        r"""__init__(OETorAdaptor self, OEMolFunc1 arg2, bool own=False, bool excludeInteract=True) -> OETorAdaptor"""
        _oeff.OETorAdaptor_swiginit(self, _oeff.new_OETorAdaptor(arg2, own, excludeInteract))
    __swig_destroy__ = _oeff.delete_OETorAdaptor

    def __call__(self, *args) -> "double":
        r"""
        __call__(OETorAdaptor self, double const * arg2) -> double
        __call__(OETorAdaptor self, double const * arg2, double * arg3) -> double
        """
        return _oeff.OETorAdaptor___call__(self, *args)

    def Setup(self, *args) -> "bool":
        r"""
        Setup(OETorAdaptor self, OEMolBase mol) -> bool
        Setup(OETorAdaptor self, OEMolBase mol, OEBondIter bond) -> bool
        """
        return _oeff.OETorAdaptor_Setup(self, *args)

    def GetMolFunc(self) -> "OEMolPotential::OEMolFunc1 &":
        r"""GetMolFunc(OETorAdaptor self) -> OEMolFunc1"""
        return _oeff.OETorAdaptor_GetMolFunc(self)

    def SetMolFunc(self, molfunc: "OEMolFunc1", own: "bool") -> "bool":
        r"""SetMolFunc(OETorAdaptor self, OEMolFunc1 molfunc, bool own) -> bool"""
        return _oeff.OETorAdaptor_SetMolFunc(self, molfunc, own)

    def Set(self, *args) -> "bool":
        
        return _oeff.OETorAdaptor_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OETorAdaptor self)"""
        return _oeff.OETorAdaptor_ClearPredicates(self)

    def AdaptVar(self, arg2: "double *", arg3: "double const *") -> "bool":
        r"""AdaptVar(OETorAdaptor self, double * arg2, double const * arg3) -> bool"""
        return _oeff.OETorAdaptor_AdaptVar(self, arg2, arg3)

    def AdaptGrad(self, torGrad: "double *", grads: "double const *") -> "bool":
        r"""AdaptGrad(OETorAdaptor self, double * torGrad, double const * grads) -> bool"""
        return _oeff.OETorAdaptor_AdaptGrad(self, torGrad, grads)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OETorAdaptor self) -> unsigned int"""
        return _oeff.OETorAdaptor_NumVar(self)

    def GetVar(self, var: "double *", x: "double const *") -> "void":
        r"""GetVar(OETorAdaptor self, double * var, double const * x)"""
        return _oeff.OETorAdaptor_GetVar(self, var, x)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OETorAdaptor self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OETorAdaptor_GetFComponents(self, arg2)

    def GetInteractions(self, arg2: "OEMolBase", arg3: "double const *", arg4: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OETorAdaptor self, OEMolBase arg2, double const * arg3, unsigned int arg4) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OETorAdaptor_GetInteractions(self, arg2, arg3, arg4)

# Register OETorAdaptor in _oeff:
_oeff.OETorAdaptor_swigregister(OETorAdaptor)

class OETorsionPred1(oechem.OEUnaryBondPred):
    r"""Proxy of C++ OEMolPotential::OETorsionPred1 class."""

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

    def __call__(self, bond: "OEBondBase") -> "bool":
        r"""__call__(OETorsionPred1 self, OEBondBase bond) -> bool"""
        return _oeff.OETorsionPred1___call__(self, bond)

    def __init__(self):
        r"""__init__(OETorsionPred1 self) -> OETorsionPred1"""
        _oeff.OETorsionPred1_swiginit(self, _oeff.new_OETorsionPred1())
    __swig_destroy__ = _oeff.delete_OETorsionPred1

# Register OETorsionPred1 in _oeff:
_oeff.OETorsionPred1_swigregister(OETorsionPred1)

class OETorsionPred2(oechem.OEUnaryBondPred):
    r"""Proxy of C++ OEMolPotential::OETorsionPred2 class."""

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

    def __call__(self, bond: "OEBondBase") -> "bool":
        r"""__call__(OETorsionPred2 self, OEBondBase bond) -> bool"""
        return _oeff.OETorsionPred2___call__(self, bond)

    def __init__(self):
        r"""__init__(OETorsionPred2 self) -> OETorsionPred2"""
        _oeff.OETorsionPred2_swiginit(self, _oeff.new_OETorsionPred2())
    __swig_destroy__ = _oeff.delete_OETorsionPred2

# Register OETorsionPred2 in _oeff:
_oeff.OETorsionPred2_swigregister(OETorsionPred2)

class OETorsionPred3(oechem.OEUnaryBondPred):
    r"""Proxy of C++ OEMolPotential::OETorsionPred3 class."""

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

    def __call__(self, bond: "OEBondBase") -> "bool":
        r"""__call__(OETorsionPred3 self, OEBondBase bond) -> bool"""
        return _oeff.OETorsionPred3___call__(self, bond)

    def __init__(self):
        r"""__init__(OETorsionPred3 self) -> OETorsionPred3"""
        _oeff.OETorsionPred3_swiginit(self, _oeff.new_OETorsionPred3())
    __swig_destroy__ = _oeff.delete_OETorsionPred3

# Register OETorsionPred3 in _oeff:
_oeff.OETorsionPred3_swigregister(OETorsionPred3)

class OEQuatAdaptor(OEMolAdaptor):
    r"""Proxy of C++ OEMolPotential::OEQuatAdaptor class."""

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

    def __init__(self, arg2: "OEMolFunc1", own: "bool"=False, excludeInteract: "bool"=True):
        r"""__init__(OEQuatAdaptor self, OEMolFunc1 arg2, bool own=False, bool excludeInteract=True) -> OEQuatAdaptor"""
        _oeff.OEQuatAdaptor_swiginit(self, _oeff.new_OEQuatAdaptor(arg2, own, excludeInteract))
    __swig_destroy__ = _oeff.delete_OEQuatAdaptor

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEQuatAdaptor self, double const * quat) -> double
        __call__(OEQuatAdaptor self, double const * quat, double * quatgrad) -> double
        """
        return _oeff.OEQuatAdaptor___call__(self, *args)

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEQuatAdaptor self, OEMolBase mol) -> bool"""
        return _oeff.OEQuatAdaptor_Setup(self, mol)

    def SetMolFunc(self, molfunc: "OEMolFunc1", own: "bool") -> "bool":
        r"""SetMolFunc(OEQuatAdaptor self, OEMolFunc1 molfunc, bool own) -> bool"""
        return _oeff.OEQuatAdaptor_SetMolFunc(self, molfunc, own)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEQuatAdaptor self) -> unsigned int"""
        return _oeff.OEQuatAdaptor_NumVar(self)

    def GetVar(self, var: "double *", x: "double const *") -> "void":
        r"""GetVar(OEQuatAdaptor self, double * var, double const * x)"""
        return _oeff.OEQuatAdaptor_GetVar(self, var, x)

    def AdaptVar(self, coords: "double *", quat: "double const *") -> "bool":
        r"""AdaptVar(OEQuatAdaptor self, double * coords, double const * quat) -> bool"""
        return _oeff.OEQuatAdaptor_AdaptVar(self, coords, quat)

    def AdaptGrad(self, qg: "double *", g: "double const *", quat: "double const *", coords: "double const *") -> "bool":
        r"""AdaptGrad(OEQuatAdaptor self, double * qg, double const * g, double const * quat, double const * coords) -> bool"""
        return _oeff.OEQuatAdaptor_AdaptGrad(self, qg, g, quat, coords)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEQuatAdaptor self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEQuatAdaptor_GetFComponents(self, arg2)

    def GetInteractions(self, arg2: "OEMolBase", arg3: "double const *", arg4: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OEQuatAdaptor self, OEMolBase arg2, double const * arg3, unsigned int arg4) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OEQuatAdaptor_GetInteractions(self, arg2, arg3, arg4)

    def IsRedundant(self, x: "double const *", y: "double const *", tolerance: "double const"=0.1) -> "bool":
        r"""IsRedundant(OEQuatAdaptor self, double const * x, double const * y, double const tolerance=0.1) -> bool"""
        return _oeff.OEQuatAdaptor_IsRedundant(self, x, y, tolerance)

    def SetTranslateRefToGC(self, argValue: "bool const") -> "void":
        r"""SetTranslateRefToGC(OEQuatAdaptor self, bool const argValue)"""
        return _oeff.OEQuatAdaptor_SetTranslateRefToGC(self, argValue)

    def GetTranslateRefToGC(self) -> "bool":
        r"""GetTranslateRefToGC(OEQuatAdaptor self) -> bool"""
        return _oeff.OEQuatAdaptor_GetTranslateRefToGC(self)

    def GetMolFunc(self) -> "OEMolPotential::OEMolFunc1 &":
        r"""GetMolFunc(OEQuatAdaptor self) -> OEMolFunc1"""
        return _oeff.OEQuatAdaptor_GetMolFunc(self)

    def GetRefCoord(self) -> "double const *":
        r"""GetRefCoord(OEQuatAdaptor self) -> double const *"""
        return _oeff.OEQuatAdaptor_GetRefCoord(self)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEQuatAdaptor self)"""
        return _oeff.OEQuatAdaptor_ClearPredicates(self)

# Register OEQuatAdaptor in _oeff:
_oeff.OEQuatAdaptor_swigregister(OEQuatAdaptor)

class OEInterAdaptor(OEMolAdaptor):
    r"""Proxy of C++ OEMolPotential::OEInterAdaptor class."""

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

    def __init__(self, arg2: "OEMolFunc1", dihedrals: "bool"=True, own: "bool"=False):
        r"""__init__(OEInterAdaptor self, OEMolFunc1 arg2, bool dihedrals=True, bool own=False) -> OEInterAdaptor"""
        _oeff.OEInterAdaptor_swiginit(self, _oeff.new_OEInterAdaptor(arg2, dihedrals, own))
    __swig_destroy__ = _oeff.delete_OEInterAdaptor

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEInterAdaptor self, double const * c) -> double
        __call__(OEInterAdaptor self, double const * c, double * g) -> double
        """
        return _oeff.OEInterAdaptor___call__(self, *args)

    def Setup(self, arg2: "OEMolBase") -> "bool":
        r"""Setup(OEInterAdaptor self, OEMolBase arg2) -> bool"""
        return _oeff.OEInterAdaptor_Setup(self, arg2)

    def GetMolFunc(self) -> "OEMolPotential::OEMolFunc1 &":
        r"""GetMolFunc(OEInterAdaptor self) -> OEMolFunc1"""
        return _oeff.OEInterAdaptor_GetMolFunc(self)

    def SetMolFunc(self, molfunc: "OEMolFunc1", own: "bool") -> "bool":
        r"""SetMolFunc(OEInterAdaptor self, OEMolFunc1 molfunc, bool own) -> bool"""
        return _oeff.OEInterAdaptor_SetMolFunc(self, molfunc, own)

    def Set(self, *args) -> "bool":
        
        return _oeff.OEInterAdaptor_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEInterAdaptor self)"""
        return _oeff.OEInterAdaptor_ClearPredicates(self)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEInterAdaptor self) -> unsigned int"""
        return _oeff.OEInterAdaptor_NumVar(self)

    def GetVar(self, var: "double *", x: "double const *") -> "void":
        r"""GetVar(OEInterAdaptor self, double * var, double const * x)"""
        return _oeff.OEInterAdaptor_GetVar(self, var, x)

    def AdaptVar(self, ca: "double *", c: "double const *") -> "bool":
        r"""AdaptVar(OEInterAdaptor self, double * ca, double const * c) -> bool"""
        return _oeff.OEInterAdaptor_AdaptVar(self, ca, c)

    def AdaptGrad(self, ga: "double *", g: "double const *") -> "bool":
        r"""AdaptGrad(OEInterAdaptor self, double * ga, double const * g) -> bool"""
        return _oeff.OEInterAdaptor_AdaptGrad(self, ga, g)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEInterAdaptor self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEInterAdaptor_GetFComponents(self, arg2)

    def GetInteractions(self, arg2: "OEMolBase", arg3: "double const *", arg4: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OEInterAdaptor self, OEMolBase arg2, double const * arg3, unsigned int arg4) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OEInterAdaptor_GetInteractions(self, arg2, arg3, arg4)

    def SetVerbose(self, v: "bool") -> "void":
        r"""SetVerbose(OEInterAdaptor self, bool v)"""
        return _oeff.OEInterAdaptor_SetVerbose(self, v)

# Register OEInterAdaptor in _oeff:
_oeff.OEInterAdaptor_swigregister(OEInterAdaptor)

class OETorQuatAdaptor(OEMolAdaptor):
    r"""Proxy of C++ OEMolPotential::OETorQuatAdaptor class."""

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

    def __init__(self, arg2: "OEMolFunc1", own: "bool"=False, excludeInteract: "bool"=True):
        r"""__init__(OETorQuatAdaptor self, OEMolFunc1 arg2, bool own=False, bool excludeInteract=True) -> OETorQuatAdaptor"""
        _oeff.OETorQuatAdaptor_swiginit(self, _oeff.new_OETorQuatAdaptor(arg2, own, excludeInteract))
    __swig_destroy__ = _oeff.delete_OETorQuatAdaptor

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OETorQuatAdaptor self, OEMolBase mol) -> bool"""
        return _oeff.OETorQuatAdaptor_Setup(self, mol)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OETorQuatAdaptor self, double const * arg2) -> double
        __call__(OETorQuatAdaptor self, double const * arg2, double * arg3) -> double
        """
        return _oeff.OETorQuatAdaptor___call__(self, *args)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OETorQuatAdaptor self) -> unsigned int"""
        return _oeff.OETorQuatAdaptor_NumVar(self)

    def GetVar(self, var: "double *", x: "double const *") -> "void":
        r"""GetVar(OETorQuatAdaptor self, double * var, double const * x)"""
        return _oeff.OETorQuatAdaptor_GetVar(self, var, x)

    def GetMolFunc(self) -> "OEMolPotential::OEMolFunc1 &":
        r"""GetMolFunc(OETorQuatAdaptor self) -> OEMolFunc1"""
        return _oeff.OETorQuatAdaptor_GetMolFunc(self)

    def SetMolFunc(self, molfunc: "OEMolFunc1", own: "bool") -> "bool":
        r"""SetMolFunc(OETorQuatAdaptor self, OEMolFunc1 molfunc, bool own) -> bool"""
        return _oeff.OETorQuatAdaptor_SetMolFunc(self, molfunc, own)

    def AdaptVar(self, arg2: "double *", arg3: "double const *") -> "bool":
        r"""AdaptVar(OETorQuatAdaptor self, double * arg2, double const * arg3) -> bool"""
        return _oeff.OETorQuatAdaptor_AdaptVar(self, arg2, arg3)

    def AdaptGrad(self, arg2: "double *", arg3: "double const *", arg4: "double const *") -> "bool":
        r"""AdaptGrad(OETorQuatAdaptor self, double * arg2, double const * arg3, double const * arg4) -> bool"""
        return _oeff.OETorQuatAdaptor_AdaptGrad(self, arg2, arg3, arg4)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OETorQuatAdaptor self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OETorQuatAdaptor_GetFComponents(self, arg2)

    def GetInteractions(self, arg2: "OEMolBase", arg3: "double const *", arg4: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OETorQuatAdaptor self, OEMolBase arg2, double const * arg3, unsigned int arg4) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OETorQuatAdaptor_GetInteractions(self, arg2, arg3, arg4)

    def Set(self, *args) -> "bool":
        
        return _oeff.OETorQuatAdaptor_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OETorQuatAdaptor self)"""
        return _oeff.OETorQuatAdaptor_ClearPredicates(self)

# Register OETorQuatAdaptor in _oeff:
_oeff.OETorQuatAdaptor_swigregister(OETorQuatAdaptor)

class OECheckFunc(object):
    r"""Proxy of C++ OEMolPotential::OECheckFunc class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr

    def __call__(self, *args) -> "void":
        r"""
        __call__(OECheckFunc self, unsigned int const * idx, unsigned int size, bool fatal=False, unsigned int type=0)
        __call__(OECheckFunc self, std::string arg2)
        """
        return _oeff.OECheckFunc___call__(self, *args)
    __swig_destroy__ = _oeff.delete_OECheckFunc

# Register OECheckFunc in _oeff:
_oeff.OECheckFunc_swigregister(OECheckFunc)

class OEHarmonicPotential(OEMolFunc1):
    r"""Proxy of C++ OEConstr::OEHarmonicPotential class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEHarmonicPotential self, double kc, double dc) -> OEHarmonicPotential
        __init__(OEHarmonicPotential self, OEHarmonicPotential arg2) -> OEHarmonicPotential
        """
        _oeff.OEHarmonicPotential_swiginit(self, _oeff.new_OEHarmonicPotential(*args))

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEHarmonicPotential self, OEMolBase mol) -> bool"""
        return _oeff.OEHarmonicPotential_Setup(self, mol)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEHarmonicPotential self) -> unsigned int"""
        return _oeff.OEHarmonicPotential_NumVar(self)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEHarmonicPotential self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEHarmonicPotential_GetFComponents(self, arg2)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEHarmonicPotential self, double const * x) -> double
        __call__(OEHarmonicPotential self, double const * x, double * g) -> double
        """
        return _oeff.OEHarmonicPotential___call__(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEHarmonicPotential self)"""
        return _oeff.OEHarmonicPotential_ClearPredicates(self)

    def Set_kc(self, kc: "double") -> "void":
        r"""Set_kc(OEHarmonicPotential self, double kc)"""
        return _oeff.OEHarmonicPotential_Set_kc(self, kc)

    def Get_kc(self) -> "double":
        r"""Get_kc(OEHarmonicPotential self) -> double"""
        return _oeff.OEHarmonicPotential_Get_kc(self)

    def Set_dc(self, dc: "double") -> "void":
        r"""Set_dc(OEHarmonicPotential self, double dc)"""
        return _oeff.OEHarmonicPotential_Set_dc(self, dc)

    def Get_dc(self) -> "double":
        r"""Get_dc(OEHarmonicPotential self) -> double"""
        return _oeff.OEHarmonicPotential_Get_dc(self)

    def GetPred(self) -> "OESystem::OEUnaryPredicate< OEChem::OEAtomBase > const *":
        r"""GetPred(OEHarmonicPotential self) -> OEUnaryAtomPred"""
        return _oeff.OEHarmonicPotential_GetPred(self)

# Register OEHarmonicPotential in _oeff:
_oeff.OEHarmonicPotential_swigregister(OEHarmonicPotential)

class OEBendParamsIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEMolPotential::OEBendParams > class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEBendParamsIter self) -> OEBendParamsIter
        __init__(OEBendParamsIter self, OEBendParamsIter rhs) -> OEBendParamsIter
        __init__(OEBendParamsIter self, OESystem::OEIterBase< OEMolPotential::OEBendParams > * rhs) -> OEBendParamsIter
        __init__(OEBendParamsIter self, OESystem::OEIterBase< OESystem::OEIter< OEMolPotential::OEBendParams >::NonConstA > * rhs) -> OEBendParamsIter
        """
        _oeff.OEBendParamsIter_swiginit(self, _oeff.new_OEBendParamsIter(*args))
    __swig_destroy__ = _oeff.delete_OEBendParamsIter

    def Copy(self) -> "OESystem::OEIterBase< OEMolPotential::OEBendParams > *":
        r"""Copy(OEBendParamsIter self) -> OESystem::OEIterBase< OEMolPotential::OEBendParams > *"""
        return _oeff.OEBendParamsIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEBendParamsIter self, OESystem::OEIterBase< OEMolPotential::OEBendParams > * ib)
        Push(OEBendParamsIter self, OEBendParamsIter iter)
        """
        return _oeff.OEBendParamsIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEMolPotential::OEBendParams,OEMolPotential::OEBendParams > const &") -> "void":
        r"""Sort(OEBendParamsIter self, OESystem::OEBinaryPredicate< OEMolPotential::OEBendParams,OEMolPotential::OEBendParams > const & sort_criterion)"""
        return _oeff.OEBendParamsIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEMolPotential::OEBendParams > &":
        r"""ToFirst(OEBendParamsIter self) -> OEBendParamsIter"""
        return _oeff.OEBendParamsIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEMolPotential::OEBendParams > &":
        r"""ToLast(OEBendParamsIter self) -> OEBendParamsIter"""
        return _oeff.OEBendParamsIter_ToLast(self)

    def __ref__(self) -> "OEMolPotential::OEBendParams &":
        r"""__ref__(OEBendParamsIter self) -> OEBendParams"""
        return _oeff.OEBendParamsIter___ref__(self)

    def IsValid(self):
      return _oeff.OEBendParamsIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEBendParamsIter self) -> PyObject *"""
        return _oeff.OEBendParamsIter_next(self)

    def Target(self) -> "OEMolPotential::OEBendParams &":
        r"""Target(OEBendParamsIter self) -> OEBendParams"""
        return _oeff.OEBendParamsIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEMolPotential::OEBendParams > &":
        r"""
        Next(OEBendParamsIter self) -> OEBendParamsIter
        Next(OEBendParamsIter self, int i) -> OEBendParamsIter
        """
        return _oeff.OEBendParamsIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEMolPotential::OEBendParams > &":
        r"""
        Prev(OEBendParamsIter self) -> OEBendParamsIter
        Prev(OEBendParamsIter self, int i) -> OEBendParamsIter
        """
        return _oeff.OEBendParamsIter_Prev(self, *args)

# Register OEBendParamsIter in _oeff:
_oeff.OEBendParamsIter_swigregister(OEBendParamsIter)

class OEVdwParamsIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEMolPotential::OEVdwParams > class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEVdwParamsIter self) -> OEVdwParamsIter
        __init__(OEVdwParamsIter self, OEVdwParamsIter rhs) -> OEVdwParamsIter
        __init__(OEVdwParamsIter self, OESystem::OEIterBase< OEMolPotential::OEVdwParams > * rhs) -> OEVdwParamsIter
        __init__(OEVdwParamsIter self, OESystem::OEIterBase< OESystem::OEIter< OEMolPotential::OEVdwParams >::NonConstA > * rhs) -> OEVdwParamsIter
        """
        _oeff.OEVdwParamsIter_swiginit(self, _oeff.new_OEVdwParamsIter(*args))
    __swig_destroy__ = _oeff.delete_OEVdwParamsIter

    def Copy(self) -> "OESystem::OEIterBase< OEMolPotential::OEVdwParams > *":
        r"""Copy(OEVdwParamsIter self) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams > *"""
        return _oeff.OEVdwParamsIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEVdwParamsIter self, OESystem::OEIterBase< OEMolPotential::OEVdwParams > * ib)
        Push(OEVdwParamsIter self, OEVdwParamsIter iter)
        """
        return _oeff.OEVdwParamsIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEMolPotential::OEVdwParams,OEMolPotential::OEVdwParams > const &") -> "void":
        r"""Sort(OEVdwParamsIter self, OESystem::OEBinaryPredicate< OEMolPotential::OEVdwParams,OEMolPotential::OEVdwParams > const & sort_criterion)"""
        return _oeff.OEVdwParamsIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEMolPotential::OEVdwParams > &":
        r"""ToFirst(OEVdwParamsIter self) -> OEVdwParamsIter"""
        return _oeff.OEVdwParamsIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEMolPotential::OEVdwParams > &":
        r"""ToLast(OEVdwParamsIter self) -> OEVdwParamsIter"""
        return _oeff.OEVdwParamsIter_ToLast(self)

    def __ref__(self) -> "OEMolPotential::OEVdwParams &":
        r"""__ref__(OEVdwParamsIter self) -> OEVdwParams"""
        return _oeff.OEVdwParamsIter___ref__(self)

    def IsValid(self):
      return _oeff.OEVdwParamsIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEVdwParamsIter self) -> PyObject *"""
        return _oeff.OEVdwParamsIter_next(self)

    def Target(self) -> "OEMolPotential::OEVdwParams &":
        r"""Target(OEVdwParamsIter self) -> OEVdwParams"""
        return _oeff.OEVdwParamsIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEMolPotential::OEVdwParams > &":
        r"""
        Next(OEVdwParamsIter self) -> OEVdwParamsIter
        Next(OEVdwParamsIter self, int i) -> OEVdwParamsIter
        """
        return _oeff.OEVdwParamsIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEMolPotential::OEVdwParams > &":
        r"""
        Prev(OEVdwParamsIter self) -> OEVdwParamsIter
        Prev(OEVdwParamsIter self, int i) -> OEVdwParamsIter
        """
        return _oeff.OEVdwParamsIter_Prev(self, *args)

# Register OEVdwParamsIter in _oeff:
_oeff.OEVdwParamsIter_swigregister(OEVdwParamsIter)

class OETorsionParamsIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEMolPotential::OETorsionParams > class."""

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

    def __init__(self, *args):
        r"""
        __init__(OETorsionParamsIter self) -> OETorsionParamsIter
        __init__(OETorsionParamsIter self, OETorsionParamsIter rhs) -> OETorsionParamsIter
        __init__(OETorsionParamsIter self, OESystem::OEIterBase< OEMolPotential::OETorsionParams > * rhs) -> OETorsionParamsIter
        __init__(OETorsionParamsIter self, OESystem::OEIterBase< OESystem::OEIter< OEMolPotential::OETorsionParams >::NonConstA > * rhs) -> OETorsionParamsIter
        """
        _oeff.OETorsionParamsIter_swiginit(self, _oeff.new_OETorsionParamsIter(*args))
    __swig_destroy__ = _oeff.delete_OETorsionParamsIter

    def Copy(self) -> "OESystem::OEIterBase< OEMolPotential::OETorsionParams > *":
        r"""Copy(OETorsionParamsIter self) -> OESystem::OEIterBase< OEMolPotential::OETorsionParams > *"""
        return _oeff.OETorsionParamsIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OETorsionParamsIter self, OESystem::OEIterBase< OEMolPotential::OETorsionParams > * ib)
        Push(OETorsionParamsIter self, OETorsionParamsIter iter)
        """
        return _oeff.OETorsionParamsIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEMolPotential::OETorsionParams,OEMolPotential::OETorsionParams > const &") -> "void":
        r"""Sort(OETorsionParamsIter self, OESystem::OEBinaryPredicate< OEMolPotential::OETorsionParams,OEMolPotential::OETorsionParams > const & sort_criterion)"""
        return _oeff.OETorsionParamsIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEMolPotential::OETorsionParams > &":
        r"""ToFirst(OETorsionParamsIter self) -> OETorsionParamsIter"""
        return _oeff.OETorsionParamsIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEMolPotential::OETorsionParams > &":
        r"""ToLast(OETorsionParamsIter self) -> OETorsionParamsIter"""
        return _oeff.OETorsionParamsIter_ToLast(self)

    def __ref__(self) -> "OEMolPotential::OETorsionParams &":
        r"""__ref__(OETorsionParamsIter self) -> OETorsionParams"""
        return _oeff.OETorsionParamsIter___ref__(self)

    def IsValid(self):
      return _oeff.OETorsionParamsIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OETorsionParamsIter self) -> PyObject *"""
        return _oeff.OETorsionParamsIter_next(self)

    def Target(self) -> "OEMolPotential::OETorsionParams &":
        r"""Target(OETorsionParamsIter self) -> OETorsionParams"""
        return _oeff.OETorsionParamsIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEMolPotential::OETorsionParams > &":
        r"""
        Next(OETorsionParamsIter self) -> OETorsionParamsIter
        Next(OETorsionParamsIter self, int i) -> OETorsionParamsIter
        """
        return _oeff.OETorsionParamsIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEMolPotential::OETorsionParams > &":
        r"""
        Prev(OETorsionParamsIter self) -> OETorsionParamsIter
        Prev(OETorsionParamsIter self, int i) -> OETorsionParamsIter
        """
        return _oeff.OETorsionParamsIter_Prev(self, *args)

# Register OETorsionParamsIter in _oeff:
_oeff.OETorsionParamsIter_swigregister(OETorsionParamsIter)

class OEStretchParamsIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEMolPotential::OEStretchParams > class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEStretchParamsIter self) -> OEStretchParamsIter
        __init__(OEStretchParamsIter self, OEStretchParamsIter rhs) -> OEStretchParamsIter
        __init__(OEStretchParamsIter self, OESystem::OEIterBase< OEMolPotential::OEStretchParams > * rhs) -> OEStretchParamsIter
        __init__(OEStretchParamsIter self, OESystem::OEIterBase< OESystem::OEIter< OEMolPotential::OEStretchParams >::NonConstA > * rhs) -> OEStretchParamsIter
        """
        _oeff.OEStretchParamsIter_swiginit(self, _oeff.new_OEStretchParamsIter(*args))
    __swig_destroy__ = _oeff.delete_OEStretchParamsIter

    def Copy(self) -> "OESystem::OEIterBase< OEMolPotential::OEStretchParams > *":
        r"""Copy(OEStretchParamsIter self) -> OESystem::OEIterBase< OEMolPotential::OEStretchParams > *"""
        return _oeff.OEStretchParamsIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEStretchParamsIter self, OESystem::OEIterBase< OEMolPotential::OEStretchParams > * ib)
        Push(OEStretchParamsIter self, OEStretchParamsIter iter)
        """
        return _oeff.OEStretchParamsIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEMolPotential::OEStretchParams,OEMolPotential::OEStretchParams > const &") -> "void":
        r"""Sort(OEStretchParamsIter self, OESystem::OEBinaryPredicate< OEMolPotential::OEStretchParams,OEMolPotential::OEStretchParams > const & sort_criterion)"""
        return _oeff.OEStretchParamsIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEMolPotential::OEStretchParams > &":
        r"""ToFirst(OEStretchParamsIter self) -> OEStretchParamsIter"""
        return _oeff.OEStretchParamsIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEMolPotential::OEStretchParams > &":
        r"""ToLast(OEStretchParamsIter self) -> OEStretchParamsIter"""
        return _oeff.OEStretchParamsIter_ToLast(self)

    def __ref__(self) -> "OEMolPotential::OEStretchParams &":
        r"""__ref__(OEStretchParamsIter self) -> OEStretchParams"""
        return _oeff.OEStretchParamsIter___ref__(self)

    def IsValid(self):
      return _oeff.OEStretchParamsIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEStretchParamsIter self) -> PyObject *"""
        return _oeff.OEStretchParamsIter_next(self)

    def Target(self) -> "OEMolPotential::OEStretchParams &":
        r"""Target(OEStretchParamsIter self) -> OEStretchParams"""
        return _oeff.OEStretchParamsIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEMolPotential::OEStretchParams > &":
        r"""
        Next(OEStretchParamsIter self) -> OEStretchParamsIter
        Next(OEStretchParamsIter self, int i) -> OEStretchParamsIter
        """
        return _oeff.OEStretchParamsIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEMolPotential::OEStretchParams > &":
        r"""
        Prev(OEStretchParamsIter self) -> OEStretchParamsIter
        Prev(OEStretchParamsIter self, int i) -> OEStretchParamsIter
        """
        return _oeff.OEStretchParamsIter_Prev(self, *args)

# Register OEStretchParamsIter in _oeff:
_oeff.OEStretchParamsIter_swigregister(OEStretchParamsIter)

class OEOutOfPlaneParamsIter(object):
    r"""Proxy of C++ OESystem::OEIter< OEMolPotential::OEOutOfPlaneParams > class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEOutOfPlaneParamsIter self) -> OEOutOfPlaneParamsIter
        __init__(OEOutOfPlaneParamsIter self, OEOutOfPlaneParamsIter rhs) -> OEOutOfPlaneParamsIter
        __init__(OEOutOfPlaneParamsIter self, OESystem::OEIterBase< OEMolPotential::OEOutOfPlaneParams > * rhs) -> OEOutOfPlaneParamsIter
        __init__(OEOutOfPlaneParamsIter self, OESystem::OEIterBase< OESystem::OEIter< OEMolPotential::OEOutOfPlaneParams >::NonConstA > * rhs) -> OEOutOfPlaneParamsIter
        """
        _oeff.OEOutOfPlaneParamsIter_swiginit(self, _oeff.new_OEOutOfPlaneParamsIter(*args))
    __swig_destroy__ = _oeff.delete_OEOutOfPlaneParamsIter

    def Copy(self) -> "OESystem::OEIterBase< OEMolPotential::OEOutOfPlaneParams > *":
        r"""Copy(OEOutOfPlaneParamsIter self) -> OESystem::OEIterBase< OEMolPotential::OEOutOfPlaneParams > *"""
        return _oeff.OEOutOfPlaneParamsIter_Copy(self)

    def Push(self, *args) -> "void":
        r"""
        Push(OEOutOfPlaneParamsIter self, OESystem::OEIterBase< OEMolPotential::OEOutOfPlaneParams > * ib)
        Push(OEOutOfPlaneParamsIter self, OEOutOfPlaneParamsIter iter)
        """
        return _oeff.OEOutOfPlaneParamsIter_Push(self, *args)

    def Sort(self, sort_criterion: "OESystem::OEBinaryPredicate< OEMolPotential::OEOutOfPlaneParams,OEMolPotential::OEOutOfPlaneParams > const &") -> "void":
        r"""Sort(OEOutOfPlaneParamsIter self, OESystem::OEBinaryPredicate< OEMolPotential::OEOutOfPlaneParams,OEMolPotential::OEOutOfPlaneParams > const & sort_criterion)"""
        return _oeff.OEOutOfPlaneParamsIter_Sort(self, sort_criterion)

    def ToFirst(self) -> "OESystem::OEIter< OEMolPotential::OEOutOfPlaneParams > &":
        r"""ToFirst(OEOutOfPlaneParamsIter self) -> OEOutOfPlaneParamsIter"""
        return _oeff.OEOutOfPlaneParamsIter_ToFirst(self)

    def ToLast(self) -> "OESystem::OEIter< OEMolPotential::OEOutOfPlaneParams > &":
        r"""ToLast(OEOutOfPlaneParamsIter self) -> OEOutOfPlaneParamsIter"""
        return _oeff.OEOutOfPlaneParamsIter_ToLast(self)

    def __ref__(self) -> "OEMolPotential::OEOutOfPlaneParams &":
        r"""__ref__(OEOutOfPlaneParamsIter self) -> OEOutOfPlaneParams"""
        return _oeff.OEOutOfPlaneParamsIter___ref__(self)

    def IsValid(self):
      return _oeff.OEOutOfPlaneParamsIter___nonzero__(self)



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



    def next(self) -> "PyObject *":
        r"""next(OEOutOfPlaneParamsIter self) -> PyObject *"""
        return _oeff.OEOutOfPlaneParamsIter_next(self)

    def Target(self) -> "OEMolPotential::OEOutOfPlaneParams &":
        r"""Target(OEOutOfPlaneParamsIter self) -> OEOutOfPlaneParams"""
        return _oeff.OEOutOfPlaneParamsIter_Target(self)

    def Next(self, *args) -> "OESystem::OEIter< OEMolPotential::OEOutOfPlaneParams > &":
        r"""
        Next(OEOutOfPlaneParamsIter self) -> OEOutOfPlaneParamsIter
        Next(OEOutOfPlaneParamsIter self, int i) -> OEOutOfPlaneParamsIter
        """
        return _oeff.OEOutOfPlaneParamsIter_Next(self, *args)

    def Prev(self, *args) -> "OESystem::OEIter< OEMolPotential::OEOutOfPlaneParams > &":
        r"""
        Prev(OEOutOfPlaneParamsIter self) -> OEOutOfPlaneParamsIter
        Prev(OEOutOfPlaneParamsIter self, int i) -> OEOutOfPlaneParamsIter
        """
        return _oeff.OEOutOfPlaneParamsIter_Prev(self, *args)

# Register OEOutOfPlaneParamsIter in _oeff:
_oeff.OEOutOfPlaneParamsIter_swigregister(OEOutOfPlaneParamsIter)

class OEInteractParams(object):
    r"""Proxy of C++ OEMolPotential::OEInteractParams class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEInteractParams self) -> OEInteractParams
        __init__(OEInteractParams self, OEInteractParams arg2) -> OEInteractParams
        """
        _oeff.OEInteractParams_swiginit(self, _oeff.new_OEInteractParams(*args))
    __swig_destroy__ = _oeff.delete_OEInteractParams

    def Clear(self) -> "void":
        r"""Clear(OEInteractParams self)"""
        return _oeff.OEInteractParams_Clear(self)

    def Get(self, idx: "unsigned int const") -> "double":
        r"""Get(OEInteractParams self, unsigned int const idx) -> double"""
        return _oeff.OEInteractParams_Get(self, idx)

    def __getitem__(self, idx: "unsigned int") -> "double &":
        r"""__getitem__(OEInteractParams self, unsigned int idx) -> double &"""
        return _oeff.OEInteractParams___getitem__(self, idx)

# Register OEInteractParams in _oeff:
_oeff.OEInteractParams_swigregister(OEInteractParams)

class OEStretchParams(OEInteractParams):
    r"""Proxy of C++ OEMolPotential::OEStretchParams class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEStretchParams self, OEBondBase bond, unsigned int const type=) -> OEStretchParams
        __init__(OEStretchParams self, OEStretchParams arg2) -> OEStretchParams
        """
        _oeff.OEStretchParams_swiginit(self, _oeff.new_OEStretchParams(*args))
    __swig_destroy__ = _oeff.delete_OEStretchParams

    def GetAtomIndex1(self) -> "unsigned int":
        r"""GetAtomIndex1(OEStretchParams self) -> unsigned int"""
        return _oeff.OEStretchParams_GetAtomIndex1(self)

    def GetAtomIndex2(self) -> "unsigned int":
        r"""GetAtomIndex2(OEStretchParams self) -> unsigned int"""
        return _oeff.OEStretchParams_GetAtomIndex2(self)

    def IsValid(self, *args) -> "bool":
        r"""
        IsValid(OEStretchParams self, OEUnaryAtomPred pred) -> bool
        IsValid(OEStretchParams self, OEUnaryBondPred pred) -> bool
        """
        return _oeff.OEStretchParams_IsValid(self, *args)

    def IsBond(self, bond: "OEBondBase") -> "bool":
        r"""IsBond(OEStretchParams self, OEBondBase bond) -> bool"""
        return _oeff.OEStretchParams_IsBond(self, bond)

    def Energy(self, r2: "double const") -> "double":
        r"""Energy(OEStretchParams self, double const r2) -> double"""
        return _oeff.OEStretchParams_Energy(self, r2)

    def Derivatives(self, vecDers: "double *", r2: "double const", count: "unsigned int const"=2) -> "double":
        r"""Derivatives(OEStretchParams self, double * vecDers, double const r2, unsigned int const count=2) -> double"""
        return _oeff.OEStretchParams_Derivatives(self, vecDers, r2, count)

# Register OEStretchParams in _oeff:
_oeff.OEStretchParams_swigregister(OEStretchParams)

class OEBendParams(OEInteractParams):
    r"""Proxy of C++ OEMolPotential::OEBendParams class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEBendParams self, OEBondBase bond1, OEBondBase bond2, unsigned int const type=) -> OEBendParams
        __init__(OEBendParams self, OEBendParams arg2) -> OEBendParams
        """
        _oeff.OEBendParams_swiginit(self, _oeff.new_OEBendParams(*args))
    __swig_destroy__ = _oeff.delete_OEBendParams

    def GetAtomIndex1(self) -> "unsigned int":
        r"""GetAtomIndex1(OEBendParams self) -> unsigned int"""
        return _oeff.OEBendParams_GetAtomIndex1(self)

    def GetAtomIndex2(self) -> "unsigned int":
        r"""GetAtomIndex2(OEBendParams self) -> unsigned int"""
        return _oeff.OEBendParams_GetAtomIndex2(self)

    def GetAtomIndex3(self) -> "unsigned int":
        r"""GetAtomIndex3(OEBendParams self) -> unsigned int"""
        return _oeff.OEBendParams_GetAtomIndex3(self)

    def IsValid(self, *args) -> "bool":
        r"""
        IsValid(OEBendParams self) -> bool
        IsValid(OEBendParams self, OEUnaryAtomPred pred) -> bool
        IsValid(OEBendParams self, OEBinaryBondPred pred) -> bool
        """
        return _oeff.OEBendParams_IsValid(self, *args)

    def IsAngle(self, atom1: "OEAtomBase", atom2: "OEAtomBase", atom3: "OEAtomBase") -> "bool":
        r"""IsAngle(OEBendParams self, OEAtomBase atom1, OEAtomBase atom2, OEAtomBase atom3) -> bool"""
        return _oeff.OEBendParams_IsAngle(self, atom1, atom2, atom3)

    def Energy(self, cosTheta: "double const") -> "double":
        r"""Energy(OEBendParams self, double const cosTheta) -> double"""
        return _oeff.OEBendParams_Energy(self, cosTheta)

    def Derivatives(self, vecDer: "double *", cosTheta: "double const", count: "unsigned int const"=2) -> "double":
        r"""Derivatives(OEBendParams self, double * vecDer, double const cosTheta, unsigned int const count=2) -> double"""
        return _oeff.OEBendParams_Derivatives(self, vecDer, cosTheta, count)

# Register OEBendParams in _oeff:
_oeff.OEBendParams_swigregister(OEBendParams)

class OETorsionParams(OEInteractParams):
    r"""Proxy of C++ OEMolPotential::OETorsionParams class."""

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

    def __init__(self, *args):
        r"""
        __init__(OETorsionParams self, OEBondBase bond, OEAtomBase atom1, OEAtomBase atom2, unsigned int const type=) -> OETorsionParams
        __init__(OETorsionParams self, OETorsionParams arg2) -> OETorsionParams
        """
        _oeff.OETorsionParams_swiginit(self, _oeff.new_OETorsionParams(*args))
    __swig_destroy__ = _oeff.delete_OETorsionParams

    def GetAtomIndex1(self) -> "unsigned int":
        r"""GetAtomIndex1(OETorsionParams self) -> unsigned int"""
        return _oeff.OETorsionParams_GetAtomIndex1(self)

    def GetAtomIndex2(self) -> "unsigned int":
        r"""GetAtomIndex2(OETorsionParams self) -> unsigned int"""
        return _oeff.OETorsionParams_GetAtomIndex2(self)

    def GetAtomIndex3(self) -> "unsigned int":
        r"""GetAtomIndex3(OETorsionParams self) -> unsigned int"""
        return _oeff.OETorsionParams_GetAtomIndex3(self)

    def GetAtomIndex4(self) -> "unsigned int":
        r"""GetAtomIndex4(OETorsionParams self) -> unsigned int"""
        return _oeff.OETorsionParams_GetAtomIndex4(self)

    def IsValid(self, *args) -> "bool":
        r"""
        IsValid(OETorsionParams self) -> bool
        IsValid(OETorsionParams self, OEUnaryAtomPred pred) -> bool
        IsValid(OETorsionParams self, OEUnaryBondPred pred) -> bool
        """
        return _oeff.OETorsionParams_IsValid(self, *args)

    def IsTorsion(self, atom1: "OEAtomBase", atom2: "OEAtomBase", atom3: "OEAtomBase", atom4: "OEAtomBase") -> "bool":
        r"""IsTorsion(OETorsionParams self, OEAtomBase atom1, OEAtomBase atom2, OEAtomBase atom3, OEAtomBase atom4) -> bool"""
        return _oeff.OETorsionParams_IsTorsion(self, atom1, atom2, atom3, atom4)

    def Energy(self, cosTheta: "double const", reverse: "bool const"=False) -> "double":
        r"""Energy(OETorsionParams self, double const cosTheta, bool const reverse=False) -> double"""
        return _oeff.OETorsionParams_Energy(self, cosTheta, reverse)

    def Derivatives(self, vecDer: "double *", cosTheta: "double const", count: "unsigned int const"=2, reverse: "bool const"=False) -> "double":
        r"""Derivatives(OETorsionParams self, double * vecDer, double const cosTheta, unsigned int const count=2, bool const reverse=False) -> double"""
        return _oeff.OETorsionParams_Derivatives(self, vecDer, cosTheta, count, reverse)

# Register OETorsionParams in _oeff:
_oeff.OETorsionParams_swigregister(OETorsionParams)

class OEVdwParams(OEInteractParams):
    r"""Proxy of C++ OEMolPotential::OEVdwParams class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEVdwParams self, OEAtomBase atom1, OEAtomBase atom2, unsigned int const type=) -> OEVdwParams
        __init__(OEVdwParams self, OEVdwParams arg2) -> OEVdwParams
        """
        _oeff.OEVdwParams_swiginit(self, _oeff.new_OEVdwParams(*args))
    __swig_destroy__ = _oeff.delete_OEVdwParams

    def GetAtomIndex1(self) -> "unsigned int":
        r"""GetAtomIndex1(OEVdwParams self) -> unsigned int"""
        return _oeff.OEVdwParams_GetAtomIndex1(self)

    def GetAtomIndex2(self) -> "unsigned int":
        r"""GetAtomIndex2(OEVdwParams self) -> unsigned int"""
        return _oeff.OEVdwParams_GetAtomIndex2(self)

    def GetAtom1(self) -> "OEChem::OEAtomBase const *":
        r"""GetAtom1(OEVdwParams self) -> OEAtomBase"""
        return _oeff.OEVdwParams_GetAtom1(self)

    def GetAtom2(self) -> "OEChem::OEAtomBase const *":
        r"""GetAtom2(OEVdwParams self) -> OEAtomBase"""
        return _oeff.OEVdwParams_GetAtom2(self)

    def IsValid(self, *args) -> "bool":
        r"""
        IsValid(OEVdwParams self, OEUnaryAtomPred pred) -> bool
        IsValid(OEVdwParams self, OEBinaryAtomPred pred) -> bool
        """
        return _oeff.OEVdwParams_IsValid(self, *args)

    def IsPair(self, atom1: "OEAtomBase", atom2: "OEAtomBase") -> "bool":
        r"""IsPair(OEVdwParams self, OEAtomBase atom1, OEAtomBase atom2) -> bool"""
        return _oeff.OEVdwParams_IsPair(self, atom1, atom2)

    def GetPathLen(self) -> "unsigned int":
        r"""GetPathLen(OEVdwParams self) -> unsigned int"""
        return _oeff.OEVdwParams_GetPathLen(self)

    def Energy(self, r2: "double const") -> "double":
        r"""Energy(OEVdwParams self, double const r2) -> double"""
        return _oeff.OEVdwParams_Energy(self, r2)

    def Derivatives(self, vecDers: "double *", r2: "double const", count: "unsigned int const"=2) -> "double":
        r"""Derivatives(OEVdwParams self, double * vecDers, double const r2, unsigned int const count=2) -> double"""
        return _oeff.OEVdwParams_Derivatives(self, vecDers, r2, count)

    def CoulEnergy(self, r2: "double const") -> "double":
        r"""CoulEnergy(OEVdwParams self, double const r2) -> double"""
        return _oeff.OEVdwParams_CoulEnergy(self, r2)

    def CoulDerivatives(self, vecDers: "double *", r2: "double const", count: "unsigned int const"=2) -> "double":
        r"""CoulDerivatives(OEVdwParams self, double * vecDers, double const r2, unsigned int const count=2) -> double"""
        return _oeff.OEVdwParams_CoulDerivatives(self, vecDers, r2, count)

# Register OEVdwParams in _oeff:
_oeff.OEVdwParams_swigregister(OEVdwParams)

class OEOutOfPlaneParams(OEInteractParams):
    r"""Proxy of C++ OEMolPotential::OEOutOfPlaneParams class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEOutOfPlaneParams self, OEAtomBase atom1, OEAtomBase atom2, OEAtomBase atom3, OEAtomBase atom4, unsigned int const type=) -> OEOutOfPlaneParams
        __init__(OEOutOfPlaneParams self, OEOutOfPlaneParams arg2) -> OEOutOfPlaneParams
        """
        _oeff.OEOutOfPlaneParams_swiginit(self, _oeff.new_OEOutOfPlaneParams(*args))
    __swig_destroy__ = _oeff.delete_OEOutOfPlaneParams

    def GetAtomIndex1(self) -> "unsigned int":
        r"""GetAtomIndex1(OEOutOfPlaneParams self) -> unsigned int"""
        return _oeff.OEOutOfPlaneParams_GetAtomIndex1(self)

    def GetAtomIndex2(self) -> "unsigned int":
        r"""GetAtomIndex2(OEOutOfPlaneParams self) -> unsigned int"""
        return _oeff.OEOutOfPlaneParams_GetAtomIndex2(self)

    def GetAtomIndex3(self) -> "unsigned int":
        r"""GetAtomIndex3(OEOutOfPlaneParams self) -> unsigned int"""
        return _oeff.OEOutOfPlaneParams_GetAtomIndex3(self)

    def GetAtomIndex4(self) -> "unsigned int":
        r"""GetAtomIndex4(OEOutOfPlaneParams self) -> unsigned int"""
        return _oeff.OEOutOfPlaneParams_GetAtomIndex4(self)

    def IsValid(self, pred: "OEUnaryAtomPred") -> "bool":
        r"""IsValid(OEOutOfPlaneParams self, OEUnaryAtomPred pred) -> bool"""
        return _oeff.OEOutOfPlaneParams_IsValid(self, pred)

    def Energy(self, cosTheta: "double const") -> "double":
        r"""Energy(OEOutOfPlaneParams self, double const cosTheta) -> double"""
        return _oeff.OEOutOfPlaneParams_Energy(self, cosTheta)

    def Derivatives(self, vecDer: "double *", cosTheta: "double const", count: "unsigned int const"=2) -> "double":
        r"""Derivatives(OEOutOfPlaneParams self, double * vecDer, double const cosTheta, unsigned int const count=2) -> double"""
        return _oeff.OEOutOfPlaneParams_Derivatives(self, vecDer, cosTheta, count)

# Register OEOutOfPlaneParams in _oeff:
_oeff.OEOutOfPlaneParams_swigregister(OEOutOfPlaneParams)

class OEFFParams(object):
    r"""Proxy of C++ OEMolPotential::OEFFParams class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oeff.delete_OEFFParams

    def GetTitle(self) -> "std::string":
        r"""GetTitle(OEFFParams self) -> std::string"""
        return _oeff.OEFFParams_GetTitle(self)

    def GetFormatType(self) -> "unsigned int":
        r"""GetFormatType(OEFFParams self) -> unsigned int"""
        return _oeff.OEFFParams_GetFormatType(self)

    def GetVacPermFactor(self) -> "double":
        r"""GetVacPermFactor(OEFFParams self) -> double"""
        return _oeff.OEFFParams_GetVacPermFactor(self)

    def GetCoulScaleFactor(self) -> "double":
        r"""GetCoulScaleFactor(OEFFParams self) -> double"""
        return _oeff.OEFFParams_GetCoulScaleFactor(self)

    def GetCoulombParams(self, arg2: "OEInteractParams", arg3: "OEAtomBase", arg4: "OEAtomBase") -> "bool":
        r"""GetCoulombParams(OEFFParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4) -> bool"""
        return _oeff.OEFFParams_GetCoulombParams(self, arg2, arg3, arg4)

    def GetStretchBendParams(self, arg2: "OEInteractParams", arg3: "OEAtomBase", arg4: "OEAtomBase", arg5: "OEAtomBase") -> "bool":
        r"""GetStretchBendParams(OEFFParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5) -> bool"""
        return _oeff.OEFFParams_GetStretchBendParams(self, arg2, arg3, arg4, arg5)

    def GetEquilibriumBondLength(self, arg2: "double &", arg3: "OEBondBase") -> "bool":
        r"""GetEquilibriumBondLength(OEFFParams self, double & arg2, OEBondBase arg3) -> bool"""
        return _oeff.OEFFParams_GetEquilibriumBondLength(self, arg2, arg3)

    def GetContactDistance(self, arg2: "double &", arg3: "OEAtomBase", arg4: "OEAtomBase") -> "bool":
        r"""GetContactDistance(OEFFParams self, double & arg2, OEAtomBase arg3, OEAtomBase arg4) -> bool"""
        return _oeff.OEFFParams_GetContactDistance(self, arg2, arg3, arg4)

    def GetEquilibriumAngle(self, arg2: "double &", arg3: "OEAtomBase", arg4: "OEAtomBase", arg5: "OEAtomBase") -> "bool":
        r"""GetEquilibriumAngle(OEFFParams self, double & arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5) -> bool"""
        return _oeff.OEFFParams_GetEquilibriumAngle(self, arg2, arg3, arg4, arg5)

    def GetVdwRadius(self, arg2: "double &", atm: "OEAtomBase") -> "bool":
        r"""GetVdwRadius(OEFFParams self, double & arg2, OEAtomBase atm) -> bool"""
        return _oeff.OEFFParams_GetVdwRadius(self, arg2, atm)

    def PrepMol(self, mol: "OEMolBase", sweep: "bool"=True, warnOK: "bool"=True) -> "bool":
        r"""PrepMol(OEFFParams self, OEMolBase mol, bool sweep=True, bool warnOK=True) -> bool"""
        return _oeff.OEFFParams_PrepMol(self, mol, sweep, warnOK)

    def GetAtomTypeIndex(self, arg2: "unsigned int") -> "unsigned int":
        r"""GetAtomTypeIndex(OEFFParams self, unsigned int arg2) -> unsigned int"""
        return _oeff.OEFFParams_GetAtomTypeIndex(self, arg2)

    def GetAtomTypeName(self, arg2: "unsigned int") -> "char const *":
        r"""GetAtomTypeName(OEFFParams self, unsigned int arg2) -> char const *"""
        return _oeff.OEFFParams_GetAtomTypeName(self, arg2)

    def GetVdwParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OEVdwParams > *":
        r"""
        GetVdwParams(OEFFParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4) -> bool
        GetVdwParams(OEFFParams self, OEMolBase mol, OEUnaryAtomPred pred=None, double const rcut=0.0) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams >
        GetVdwParams(OEFFParams self, OEMolBase mol, OEMolBase host) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams > *
        """
        return _oeff.OEFFParams_GetVdwParams(self, *args)

    def GetStretchParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OEStretchParams > *":
        r"""
        GetStretchParams(OEFFParams self, OEInteractParams arg2, OEBondBase arg3) -> bool
        GetStretchParams(OEFFParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OEStretchParams >
        """
        return _oeff.OEFFParams_GetStretchParams(self, *args)

    def GetBendParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OEBendParams > *":
        r"""
        GetBendParams(OEFFParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5) -> bool
        GetBendParams(OEFFParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OEBendParams >
        """
        return _oeff.OEFFParams_GetBendParams(self, *args)

    def GetTorsionParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OETorsionParams > *":
        r"""
        GetTorsionParams(OEFFParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5, OEAtomBase arg6) -> bool
        GetTorsionParams(OEFFParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OETorsionParams >
        """
        return _oeff.OEFFParams_GetTorsionParams(self, *args)

    def GetOutOfPlaneParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OEOutOfPlaneParams > *":
        r"""
        GetOutOfPlaneParams(OEFFParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5, OEAtomBase arg6) -> bool
        GetOutOfPlaneParams(OEFFParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OEOutOfPlaneParams >
        """
        return _oeff.OEFFParams_GetOutOfPlaneParams(self, *args)

    def HasVdwParams(self, *args) -> "bool":
        r"""
        HasVdwParams(OEFFParams self, OEMolBase mol, OEUnaryAtomPred pred=None, double const rcut=0.0) -> bool
        HasVdwParams(OEFFParams self, OEMolBase mol, OEMolBase host) -> bool
        """
        return _oeff.OEFFParams_HasVdwParams(self, *args)

    def HasStretchParams(self, mol: "OEMolBase", pred: "OEUnaryAtomPred"=None) -> "bool":
        r"""HasStretchParams(OEFFParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> bool"""
        return _oeff.OEFFParams_HasStretchParams(self, mol, pred)

    def HasBendParams(self, mol: "OEMolBase", pred: "OEUnaryAtomPred"=None) -> "bool":
        r"""HasBendParams(OEFFParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> bool"""
        return _oeff.OEFFParams_HasBendParams(self, mol, pred)

    def HasTorsionParams(self, mol: "OEMolBase", pred: "OEUnaryAtomPred"=None) -> "bool":
        r"""HasTorsionParams(OEFFParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> bool"""
        return _oeff.OEFFParams_HasTorsionParams(self, mol, pred)

# Register OEFFParams in _oeff:
_oeff.OEFFParams_swigregister(OEFFParams)

class OENonBondIntcsOptions(oechem.OEOptions):
    r"""Proxy of C++ OEMolPotential::OENonBondIntcsOptions class."""

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

    def __init__(self, *args):
        r"""
        __init__(OENonBondIntcsOptions self) -> OENonBondIntcsOptions
        __init__(OENonBondIntcsOptions self, OENonBondIntcsOptions arg2) -> OENonBondIntcsOptions
        """
        _oeff.OENonBondIntcsOptions_swiginit(self, _oeff.new_OENonBondIntcsOptions(*args))
    __swig_destroy__ = _oeff.delete_OENonBondIntcsOptions

    def GetUseCoulomb(self) -> "bool":
        r"""GetUseCoulomb(OENonBondIntcsOptions self) -> bool"""
        return _oeff.OENonBondIntcsOptions_GetUseCoulomb(self)

    def SetUseCoulomb(self, value: "bool const") -> "bool":
        r"""SetUseCoulomb(OENonBondIntcsOptions self, bool const value) -> bool"""
        return _oeff.OENonBondIntcsOptions_SetUseCoulomb(self, value)

    def GetUseVdW(self) -> "bool":
        r"""GetUseVdW(OENonBondIntcsOptions self) -> bool"""
        return _oeff.OENonBondIntcsOptions_GetUseVdW(self)

    def SetUseVdW(self, value: "bool const") -> "bool":
        r"""SetUseVdW(OENonBondIntcsOptions self, bool const value) -> bool"""
        return _oeff.OENonBondIntcsOptions_SetUseVdW(self, value)

    def GetCutoff(self) -> "double":
        r"""GetCutoff(OENonBondIntcsOptions self) -> double"""
        return _oeff.OENonBondIntcsOptions_GetCutoff(self)

    def SetCutoff(self, value: "double const") -> "bool":
        r"""SetCutoff(OENonBondIntcsOptions self, double const value) -> bool"""
        return _oeff.OENonBondIntcsOptions_SetCutoff(self, value)

# Register OENonBondIntcsOptions in _oeff:
_oeff.OENonBondIntcsOptions_swigregister(OENonBondIntcsOptions)

class OEFFPotential(OEMolFunc2):
    r"""Proxy of C++ OEMolPotential::OEFFPotential class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oeff.delete_OEFFPotential

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEFFPotential self, OEMolBase mol) -> bool"""
        return _oeff.OEFFPotential_Setup(self, mol)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEFFPotential self) -> unsigned int"""
        return _oeff.OEFFPotential_NumVar(self)

    def __call__(self, *args) -> "bool":
        r"""
        __call__(OEFFPotential self, double const * x) -> double
        __call__(OEFFPotential self, double const * x, double * g) -> double
        __call__(OEFFPotential self, double const * x, double * h, double * g) -> bool
        """
        return _oeff.OEFFPotential___call__(self, *args)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEFFPotential self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEFFPotential_GetFComponents(self, arg2)

    def GetInteractions(self, mol: "OEMolBase", c: "double const *", functype: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OEFFPotential self, OEMolBase mol, double const * c, unsigned int functype) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OEFFPotential_GetInteractions(self, mol, c, functype)

    def Set(self, *args) -> "bool":
        
        return _oeff.OEFFPotential_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEFFPotential self)"""
        return _oeff.OEFFPotential_ClearPredicates(self)

    def Clear(self) -> "void":
        r"""Clear(OEFFPotential self)"""
        return _oeff.OEFFPotential_Clear(self)

    def SetVerbose(self, verbose: "bool") -> "void":
        r"""SetVerbose(OEFFPotential self, bool verbose)"""
        return _oeff.OEFFPotential_SetVerbose(self, verbose)

# Register OEFFPotential in _oeff:
_oeff.OEFFPotential_swigregister(OEFFPotential)

class OENonBondPotBase(OEFFPotential):
    r"""Proxy of C++ OEMolPotential::OENonBondPotBase class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oeff.delete_OENonBondPotBase

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OENonBondPotBase self, OEMolBase mol) -> bool"""
        return _oeff.OENonBondPotBase_Setup(self, mol)

# Register OENonBondPotBase in _oeff:
_oeff.OENonBondPotBase_swigregister(OENonBondPotBase)

class OENonBondPotential(OENonBondPotBase):
    r"""Proxy of C++ OEMolPotential::OENonBondPotential class."""

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

    def __init__(self, *args):
        r"""
        __init__(OENonBondPotential self, OEFFParams fp, OENonBondIntcsOptions options=OEMolPotential::OENonBondIntcsOptions()) -> OENonBondPotential
        __init__(OENonBondPotential self, OENonBondPotential arg2) -> OENonBondPotential
        """
        _oeff.OENonBondPotential_swiginit(self, _oeff.new_OENonBondPotential(*args))
    __swig_destroy__ = _oeff.delete_OENonBondPotential

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OENonBondPotential self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OENonBondPotential_GetFComponents(self, arg2)

    def GetInteractions(self, mol: "OEMolBase", c: "double const *", functype: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OENonBondPotential self, OEMolBase mol, double const * c, unsigned int functype) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OENonBondPotential_GetInteractions(self, mol, c, functype)

# Register OENonBondPotential in _oeff:
_oeff.OENonBondPotential_swigregister(OENonBondPotential)

class OEVdwPotential(OENonBondPotBase):
    r"""Proxy of C++ OEMolPotential::OEVdwPotential class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEVdwPotential self, OEFFParams fp, double const rcut=0.0) -> OEVdwPotential
        __init__(OEVdwPotential self, OEVdwPotential arg2) -> OEVdwPotential
        """
        _oeff.OEVdwPotential_swiginit(self, _oeff.new_OEVdwPotential(*args))
    __swig_destroy__ = _oeff.delete_OEVdwPotential

# Register OEVdwPotential in _oeff:
_oeff.OEVdwPotential_swigregister(OEVdwPotential)

class OECoulombPotential(OENonBondPotBase):
    r"""Proxy of C++ OEMolPotential::OECoulombPotential class."""

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

    def __init__(self, *args):
        r"""
        __init__(OECoulombPotential self, OEFFParams fp, double const rcut=0.0) -> OECoulombPotential
        __init__(OECoulombPotential self, OECoulombPotential arg2) -> OECoulombPotential
        """
        _oeff.OECoulombPotential_swiginit(self, _oeff.new_OECoulombPotential(*args))
    __swig_destroy__ = _oeff.delete_OECoulombPotential

# Register OECoulombPotential in _oeff:
_oeff.OECoulombPotential_swigregister(OECoulombPotential)

class OEInterNonBondPotBase(OEFFPotential, OEInterMolFunc2):
    r"""Proxy of C++ OEMolPotential::OEInterNonBondPotBase class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oeff.delete_OEInterNonBondPotBase

    def SetupHost(self, host: "OEMolBase") -> "bool":
        r"""SetupHost(OEInterNonBondPotBase self, OEMolBase host) -> bool"""
        return _oeff.OEInterNonBondPotBase_SetupHost(self, host)

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEInterNonBondPotBase self, OEMolBase mol) -> bool"""
        return _oeff.OEInterNonBondPotBase_Setup(self, mol)

    def SetHostFlex(self, pred: "OEUnaryAtomPred") -> "bool":
        r"""SetHostFlex(OEInterNonBondPotBase self, OEUnaryAtomPred pred) -> bool"""
        return _oeff.OEInterNonBondPotBase_SetHostFlex(self, pred)

    def GetVar(self, var: "double *", x: "double const *") -> "void":
        r"""GetVar(OEInterNonBondPotBase self, double * var, double const * x)"""
        return _oeff.OEInterNonBondPotBase_GetVar(self, var, x)

    def AdaptHostCoords(self, coords: "double *", var: "double const *") -> "bool":
        r"""AdaptHostCoords(OEInterNonBondPotBase self, double * coords, double const * var) -> bool"""
        return _oeff.OEInterNonBondPotBase_AdaptHostCoords(self, coords, var)

    def Set(self, *args) -> "bool":
        
        return _oeff.OEInterNonBondPotBase_Set(self, *args)

# Register OEInterNonBondPotBase in _oeff:
_oeff.OEInterNonBondPotBase_swigregister(OEInterNonBondPotBase)

class OEInterNonBondPotential(OEInterNonBondPotBase):
    r"""Proxy of C++ OEMolPotential::OEInterNonBondPotential class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEInterNonBondPotential self, OEFFParams fp, OENonBondIntcsOptions options=OEMolPotential::OENonBondIntcsOptions()) -> OEInterNonBondPotential
        __init__(OEInterNonBondPotential self, OEInterNonBondPotential arg2) -> OEInterNonBondPotential
        """
        _oeff.OEInterNonBondPotential_swiginit(self, _oeff.new_OEInterNonBondPotential(*args))
    __swig_destroy__ = _oeff.delete_OEInterNonBondPotential

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEInterNonBondPotential self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEInterNonBondPotential_GetFComponents(self, arg2)

    def GetInteractions(self, mol: "OEMolBase", c: "double const *", functype: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OEInterNonBondPotential self, OEMolBase mol, double const * c, unsigned int functype) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OEInterNonBondPotential_GetInteractions(self, mol, c, functype)

# Register OEInterNonBondPotential in _oeff:
_oeff.OEInterNonBondPotential_swigregister(OEInterNonBondPotential)

class OEInterVdwPotential(OEInterNonBondPotBase):
    r"""Proxy of C++ OEMolPotential::OEInterVdwPotential class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEInterVdwPotential self, OEFFParams fp, double const rcut=0.0) -> OEInterVdwPotential
        __init__(OEInterVdwPotential self, OEInterVdwPotential arg2) -> OEInterVdwPotential
        """
        _oeff.OEInterVdwPotential_swiginit(self, _oeff.new_OEInterVdwPotential(*args))
    __swig_destroy__ = _oeff.delete_OEInterVdwPotential

# Register OEInterVdwPotential in _oeff:
_oeff.OEInterVdwPotential_swigregister(OEInterVdwPotential)

class OEInterCoulombPotential(OEInterNonBondPotBase):
    r"""Proxy of C++ OEMolPotential::OEInterCoulombPotential class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEInterCoulombPotential self, OEFFParams fp, double const rcut=0.0) -> OEInterCoulombPotential
        __init__(OEInterCoulombPotential self, OEInterCoulombPotential arg2) -> OEInterCoulombPotential
        """
        _oeff.OEInterCoulombPotential_swiginit(self, _oeff.new_OEInterCoulombPotential(*args))
    __swig_destroy__ = _oeff.delete_OEInterCoulombPotential

# Register OEInterCoulombPotential in _oeff:
_oeff.OEInterCoulombPotential_swigregister(OEInterCoulombPotential)

class OEStretchPotential(OEFFPotential):
    r"""Proxy of C++ OEMolPotential::OEStretchPotential class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEStretchPotential self, OEFFParams fp) -> OEStretchPotential
        __init__(OEStretchPotential self, OEStretchPotential arg2) -> OEStretchPotential
        """
        _oeff.OEStretchPotential_swiginit(self, _oeff.new_OEStretchPotential(*args))
    __swig_destroy__ = _oeff.delete_OEStretchPotential

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEStretchPotential self, OEMolBase mol) -> bool"""
        return _oeff.OEStretchPotential_Setup(self, mol)

    def Set(self, *args) -> "bool":
        
        return _oeff.OEStretchPotential_Set(self, *args)

# Register OEStretchPotential in _oeff:
_oeff.OEStretchPotential_swigregister(OEStretchPotential)

class OEBendPotential(OEFFPotential):
    r"""Proxy of C++ OEMolPotential::OEBendPotential class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEBendPotential self, OEFFParams fp) -> OEBendPotential
        __init__(OEBendPotential self, OEBendPotential arg2) -> OEBendPotential
        """
        _oeff.OEBendPotential_swiginit(self, _oeff.new_OEBendPotential(*args))
    __swig_destroy__ = _oeff.delete_OEBendPotential

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEBendPotential self, OEMolBase mol) -> bool"""
        return _oeff.OEBendPotential_Setup(self, mol)

    def Set(self, *args) -> "bool":
        
        return _oeff.OEBendPotential_Set(self, *args)

# Register OEBendPotential in _oeff:
_oeff.OEBendPotential_swigregister(OEBendPotential)

class OETorsionPotential(OEFFPotential):
    r"""Proxy of C++ OEMolPotential::OETorsionPotential class."""

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

    def __init__(self, *args):
        r"""
        __init__(OETorsionPotential self, OEFFParams fp) -> OETorsionPotential
        __init__(OETorsionPotential self, OETorsionPotential arg2) -> OETorsionPotential
        """
        _oeff.OETorsionPotential_swiginit(self, _oeff.new_OETorsionPotential(*args))
    __swig_destroy__ = _oeff.delete_OETorsionPotential

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OETorsionPotential self, OEMolBase mol) -> bool"""
        return _oeff.OETorsionPotential_Setup(self, mol)

    def Set(self, *args) -> "bool":
        
        return _oeff.OETorsionPotential_Set(self, *args)

# Register OETorsionPotential in _oeff:
_oeff.OETorsionPotential_swigregister(OETorsionPotential)

class OEOutOfPlanePotential(OEFFPotential):
    r"""Proxy of C++ OEMolPotential::OEOutOfPlanePotential class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEOutOfPlanePotential self, OEFFParams fp) -> OEOutOfPlanePotential
        __init__(OEOutOfPlanePotential self, OEOutOfPlanePotential arg2) -> OEOutOfPlanePotential
        """
        _oeff.OEOutOfPlanePotential_swiginit(self, _oeff.new_OEOutOfPlanePotential(*args))
    __swig_destroy__ = _oeff.delete_OEOutOfPlanePotential

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEOutOfPlanePotential self, OEMolBase mol) -> bool"""
        return _oeff.OEOutOfPlanePotential_Setup(self, mol)

# Register OEOutOfPlanePotential in _oeff:
_oeff.OEOutOfPlanePotential_swigregister(OEOutOfPlanePotential)

class OEMMFFParams(OEFFParams):
    r"""Proxy of C++ OEMolMMFF::OEMMFFParams class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFParams self) -> OEMMFFParams
        __init__(OEMMFFParams self, OEMMFFParams arg2) -> OEMMFFParams
        """
        _oeff.OEMMFFParams_swiginit(self, _oeff.new_OEMMFFParams(*args))
    __swig_destroy__ = _oeff.delete_OEMMFFParams

    def GetTitle(self) -> "std::string":
        r"""GetTitle(OEMMFFParams self) -> std::string"""
        return _oeff.OEMMFFParams_GetTitle(self)

    def GetFormatType(self) -> "unsigned int":
        r"""GetFormatType(OEMMFFParams self) -> unsigned int"""
        return _oeff.OEMMFFParams_GetFormatType(self)

    def GetVacPermFactor(self) -> "double":
        r"""GetVacPermFactor(OEMMFFParams self) -> double"""
        return _oeff.OEMMFFParams_GetVacPermFactor(self)

    def GetCoulScaleFactor(self) -> "double":
        r"""GetCoulScaleFactor(OEMMFFParams self) -> double"""
        return _oeff.OEMMFFParams_GetCoulScaleFactor(self)

    def GetBendParams(self, arg2: "OEInteractParams", arg3: "OEAtomBase", arg4: "OEAtomBase", arg5: "OEAtomBase") -> "bool":
        r"""GetBendParams(OEMMFFParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5) -> bool"""
        return _oeff.OEMMFFParams_GetBendParams(self, arg2, arg3, arg4, arg5)

    def GetStretchBendParams(self, arg2: "OEInteractParams", arg3: "OEAtomBase", arg4: "OEAtomBase", arg5: "OEAtomBase") -> "bool":
        r"""GetStretchBendParams(OEMMFFParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5) -> bool"""
        return _oeff.OEMMFFParams_GetStretchBendParams(self, arg2, arg3, arg4, arg5)

    def GetEquilibriumBondLength(self, arg2: "double &", arg3: "OEBondBase") -> "bool":
        r"""GetEquilibriumBondLength(OEMMFFParams self, double & arg2, OEBondBase arg3) -> bool"""
        return _oeff.OEMMFFParams_GetEquilibriumBondLength(self, arg2, arg3)

    def GetContactDistance(self, arg2: "double &", arg3: "OEAtomBase", arg4: "OEAtomBase") -> "bool":
        r"""GetContactDistance(OEMMFFParams self, double & arg2, OEAtomBase arg3, OEAtomBase arg4) -> bool"""
        return _oeff.OEMMFFParams_GetContactDistance(self, arg2, arg3, arg4)

    def GetEquilibriumAngle(self, arg2: "double &", arg3: "OEAtomBase", arg4: "OEAtomBase", arg5: "OEAtomBase") -> "bool":
        r"""GetEquilibriumAngle(OEMMFFParams self, double & arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5) -> bool"""
        return _oeff.OEMMFFParams_GetEquilibriumAngle(self, arg2, arg3, arg4, arg5)

    def GetVdwRadius(self, arg2: "double &", atm: "OEAtomBase") -> "bool":
        r"""GetVdwRadius(OEMMFFParams self, double & arg2, OEAtomBase atm) -> bool"""
        return _oeff.OEMMFFParams_GetVdwRadius(self, arg2, atm)

    def PrepMol(self, mol: "OEMolBase", sweep: "bool"=True, warnOK: "bool"=True) -> "bool":
        r"""PrepMol(OEMMFFParams self, OEMolBase mol, bool sweep=True, bool warnOK=True) -> bool"""
        return _oeff.OEMMFFParams_PrepMol(self, mol, sweep, warnOK)

    def CreateCopy(self) -> "OEMolMMFF::OEMMFFParams *":
        r"""CreateCopy(OEMMFFParams self) -> OEMMFFParams"""
        return _oeff.OEMMFFParams_CreateCopy(self)

    def GetAtomTypeIndex(self, idx: "unsigned int") -> "unsigned int":
        r"""GetAtomTypeIndex(OEMMFFParams self, unsigned int idx) -> unsigned int"""
        return _oeff.OEMMFFParams_GetAtomTypeIndex(self, idx)

    def GetAtomTypeName(self, idx: "unsigned int") -> "char const *":
        r"""GetAtomTypeName(OEMMFFParams self, unsigned int idx) -> char const *"""
        return _oeff.OEMMFFParams_GetAtomTypeName(self, idx)

    def GetOutOfPlaneParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OEOutOfPlaneParams > *":
        r"""
        GetOutOfPlaneParams(OEMMFFParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5, OEAtomBase arg6) -> bool
        GetOutOfPlaneParams(OEMMFFParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OEOutOfPlaneParams >
        """
        return _oeff.OEMMFFParams_GetOutOfPlaneParams(self, *args)

    def GetVdwParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OEVdwParams > *":
        r"""
        GetVdwParams(OEMMFFParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4) -> bool
        GetVdwParams(OEMMFFParams self, OEMolBase mol, OEUnaryAtomPred pred=None, double const rcut=0.0) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams >
        GetVdwParams(OEMMFFParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams >
        GetVdwParams(OEMMFFParams self, OEMolBase mol) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams >
        GetVdwParams(OEMMFFParams self, OEMolBase mol, OEMolBase host) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams > *
        """
        return _oeff.OEMMFFParams_GetVdwParams(self, *args)

# Register OEMMFFParams in _oeff:
_oeff.OEMMFFParams_swigregister(OEMMFFParams)
SN = cvar.SN

class OEMMFF94sParams(OEMMFFParams):
    r"""Proxy of C++ OEMolMMFF::OEMMFF94sParams class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFF94sParams self) -> OEMMFF94sParams
        __init__(OEMMFF94sParams self, OEMMFF94sParams arg2) -> OEMMFF94sParams
        """
        _oeff.OEMMFF94sParams_swiginit(self, _oeff.new_OEMMFF94sParams(*args))
    __swig_destroy__ = _oeff.delete_OEMMFF94sParams

    def GetTitle(self) -> "std::string":
        r"""GetTitle(OEMMFF94sParams self) -> std::string"""
        return _oeff.OEMMFF94sParams_GetTitle(self)

    def GetTorsionParams(self, *args) -> "bool":
        r"""
        GetTorsionParams(OEMMFF94sParams self)
        GetTorsionParams(OEMMFF94sParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5, OEAtomBase arg6) -> bool
        """
        return _oeff.OEMMFF94sParams_GetTorsionParams(self, *args)

    def GetOutOfPlaneParams(self, arg2: "OEInteractParams", arg3: "OEAtomBase", arg4: "OEAtomBase", arg5: "OEAtomBase", arg6: "OEAtomBase") -> "bool":
        r"""GetOutOfPlaneParams(OEMMFF94sParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5, OEAtomBase arg6) -> bool"""
        return _oeff.OEMMFF94sParams_GetOutOfPlaneParams(self, arg2, arg3, arg4, arg5, arg6)

    def CreateCopy(self) -> "OEMolMMFF::OEMMFF94sParams *":
        r"""CreateCopy(OEMMFF94sParams self) -> OEMMFF94sParams"""
        return _oeff.OEMMFF94sParams_CreateCopy(self)

# Register OEMMFF94sParams in _oeff:
_oeff.OEMMFF94sParams_swigregister(OEMMFF94sParams)

class OEMMFFVdw(OEMolFunc2):
    r"""Proxy of C++ OEMolMMFF::OEMMFFVdw class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFVdw self, OEFFParams arg2, bool attract=True) -> OEMMFFVdw
        __init__(OEMMFFVdw self, OEMMFFVdw arg2) -> OEMMFFVdw
        """
        _oeff.OEMMFFVdw_swiginit(self, _oeff.new_OEMMFFVdw(*args))

    def __call__(self, *args) -> "bool":
        r"""
        __call__(OEMMFFVdw self, double const * x) -> double
        __call__(OEMMFFVdw self, double const * x, double * g) -> double
        __call__(OEMMFFVdw self, double const * x, double * h, double * g) -> bool
        """
        return _oeff.OEMMFFVdw___call__(self, *args)

    def GetFComponents(self, coord: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEMMFFVdw self, double const * coord) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEMMFFVdw_GetFComponents(self, coord)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEMMFFVdw self) -> unsigned int"""
        return _oeff.OEMMFFVdw_NumVar(self)

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEMMFFVdw self, OEMolBase mol) -> bool"""
        return _oeff.OEMMFFVdw_Setup(self, mol)

    def Set(self, *args) -> "bool":
        
        return _oeff.OEMMFFVdw_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEMMFFVdw self)"""
        return _oeff.OEMMFFVdw_ClearPredicates(self)

    def GetInteractions(self, mol: "OEMolBase", c: "double const *", functype: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OEMMFFVdw self, OEMolBase mol, double const * c, unsigned int functype) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OEMMFFVdw_GetInteractions(self, mol, c, functype)

    def Clear(self) -> "void":
        r"""Clear(OEMMFFVdw self)"""
        return _oeff.OEMMFFVdw_Clear(self)

    def SetVerbose(self, v: "bool") -> "void":
        r"""SetVerbose(OEMMFFVdw self, bool v)"""
        return _oeff.OEMMFFVdw_SetVerbose(self, v)

    def SetCutoff(self, cd: "double") -> "void":
        r"""SetCutoff(OEMMFFVdw self, double cd)"""
        return _oeff.OEMMFFVdw_SetCutoff(self, cd)

# Register OEMMFFVdw in _oeff:
_oeff.OEMMFFVdw_swigregister(OEMMFFVdw)

class OEMMFFInterVdw(OEMolFunc1):
    r"""Proxy of C++ OEMolMMFF::OEMMFFInterVdw class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFInterVdw self, OEMolBase arg2, OEFFParams arg3, double [6] minmax=(double *) 0, bool coulomb=True) -> OEMMFFInterVdw
        __init__(OEMMFFInterVdw self, OEMMFFInterVdw arg2) -> OEMMFFInterVdw
        """
        _oeff.OEMMFFInterVdw_swiginit(self, _oeff.new_OEMMFFInterVdw(*args))
    __swig_destroy__ = _oeff.delete_OEMMFFInterVdw

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEMMFFInterVdw self, OEMolBase mol) -> bool"""
        return _oeff.OEMMFFInterVdw_Setup(self, mol)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEMMFFInterVdw self) -> unsigned int"""
        return _oeff.OEMMFFInterVdw_NumVar(self)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEMMFFInterVdw self, double const * c) -> double
        __call__(OEMMFFInterVdw self, double const * c, double * g) -> double
        """
        return _oeff.OEMMFFInterVdw___call__(self, *args)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEMMFFInterVdw self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEMMFFInterVdw_GetFComponents(self, arg2)

    def GetMolecule(self) -> "OEChem::OEMolBase const &":
        r"""GetMolecule(OEMMFFInterVdw self) -> OEMolBase"""
        return _oeff.OEMMFFInterVdw_GetMolecule(self)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEMMFFInterVdw self)"""
        return _oeff.OEMMFFInterVdw_ClearPredicates(self)

# Register OEMMFFInterVdw in _oeff:
_oeff.OEMMFFInterVdw_swigregister(OEMMFFInterVdw)

class OEMMFFInterVdwNN(OEMolFunc1):
    r"""Proxy of C++ OEMolMMFF::OEMMFFInterVdwNN class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFInterVdwNN self, OEMolBase arg2, OEFFParams arg3, double [6] minmax, double radius=6.0, double resolution=1.0) -> OEMMFFInterVdwNN
        __init__(OEMMFFInterVdwNN self, OEMMFFInterVdwNN arg2) -> OEMMFFInterVdwNN
        """
        _oeff.OEMMFFInterVdwNN_swiginit(self, _oeff.new_OEMMFFInterVdwNN(*args))
    __swig_destroy__ = _oeff.delete_OEMMFFInterVdwNN

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEMMFFInterVdwNN self, OEMolBase mol) -> bool"""
        return _oeff.OEMMFFInterVdwNN_Setup(self, mol)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEMMFFInterVdwNN self) -> unsigned int"""
        return _oeff.OEMMFFInterVdwNN_NumVar(self)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEMMFFInterVdwNN self, double const * x) -> double
        __call__(OEMMFFInterVdwNN self, double const * x, double * g) -> double
        """
        return _oeff.OEMMFFInterVdwNN___call__(self, *args)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEMMFFInterVdwNN self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEMMFFInterVdwNN_GetFComponents(self, arg2)

    def Set(self, *args) -> "bool":
        
        return _oeff.OEMMFFInterVdwNN_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEMMFFInterVdwNN self)"""
        return _oeff.OEMMFFInterVdwNN_ClearPredicates(self)

# Register OEMMFFInterVdwNN in _oeff:
_oeff.OEMMFFInterVdwNN_swigregister(OEMMFFInterVdwNN)


def OEMMFFCalcVdw(mol: "OEMolBase", patom: "OEAtomBase", latom: "OEAtomBase", coloumb: "bool"=False, attract: "bool"=False) -> "double":
    r"""OEMMFFCalcVdw(OEMolBase mol, OEAtomBase patom, OEAtomBase latom, bool coloumb=False, bool attract=False) -> double"""
    return _oeff.OEMMFFCalcVdw(mol, patom, latom, coloumb, attract)
class OEMMFFCoulomb(OEMolFunc2):
    r"""Proxy of C++ OEMolMMFF::OEMMFFCoulomb class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFCoulomb self, OEFFParams arg2, double dielectric=1.0) -> OEMMFFCoulomb
        __init__(OEMMFFCoulomb self, double const dielectric=1.0) -> OEMMFFCoulomb
        __init__(OEMMFFCoulomb self, OEMMFFCoulomb arg2) -> OEMMFFCoulomb
        """
        _oeff.OEMMFFCoulomb_swiginit(self, _oeff.new_OEMMFFCoulomb(*args))

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEMMFFCoulomb self, OEMolBase mol) -> bool"""
        return _oeff.OEMMFFCoulomb_Setup(self, mol)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEMMFFCoulomb self) -> unsigned int"""
        return _oeff.OEMMFFCoulomb_NumVar(self)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEMMFFCoulomb self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEMMFFCoulomb_GetFComponents(self, arg2)

    def __call__(self, *args) -> "bool":
        r"""
        __call__(OEMMFFCoulomb self, double const * x) -> double
        __call__(OEMMFFCoulomb self, double const * x, double * g) -> double
        __call__(OEMMFFCoulomb self, double const * x, double * h, double * g) -> bool
        """
        return _oeff.OEMMFFCoulomb___call__(self, *args)

    def SetDielectric(self, arg2: "double") -> "bool":
        r"""SetDielectric(OEMMFFCoulomb self, double arg2) -> bool"""
        return _oeff.OEMMFFCoulomb_SetDielectric(self, arg2)

    def GetDielectric(self) -> "double":
        r"""GetDielectric(OEMMFFCoulomb self) -> double"""
        return _oeff.OEMMFFCoulomb_GetDielectric(self)

    def SetExponent(self, arg2: "double") -> "bool":
        r"""SetExponent(OEMMFFCoulomb self, double arg2) -> bool"""
        return _oeff.OEMMFFCoulomb_SetExponent(self, arg2)

    def GetExponent(self) -> "double":
        r"""GetExponent(OEMMFFCoulomb self) -> double"""
        return _oeff.OEMMFFCoulomb_GetExponent(self)

    def SetMaxPathLength(self, arg2: "unsigned int") -> "bool":
        r"""SetMaxPathLength(OEMMFFCoulomb self, unsigned int arg2) -> bool"""
        return _oeff.OEMMFFCoulomb_SetMaxPathLength(self, arg2)

    def GetMaxPathLength(self) -> "unsigned int":
        r"""GetMaxPathLength(OEMMFFCoulomb self) -> unsigned int"""
        return _oeff.OEMMFFCoulomb_GetMaxPathLength(self)

    def Set(self, *args) -> "bool":
        
        return _oeff.OEMMFFCoulomb_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEMMFFCoulomb self)"""
        return _oeff.OEMMFFCoulomb_ClearPredicates(self)

    def GetInteractions(self, mol: "OEMolBase", c: "double const *", functype: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OEMMFFCoulomb self, OEMolBase mol, double const * c, unsigned int functype) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OEMMFFCoulomb_GetInteractions(self, mol, c, functype)

    def Clear(self) -> "void":
        r"""Clear(OEMMFFCoulomb self)"""
        return _oeff.OEMMFFCoulomb_Clear(self)

    def SetVerbose(self, v: "bool") -> "void":
        r"""SetVerbose(OEMMFFCoulomb self, bool v)"""
        return _oeff.OEMMFFCoulomb_SetVerbose(self, v)

# Register OEMMFFCoulomb in _oeff:
_oeff.OEMMFFCoulomb_swigregister(OEMMFFCoulomb)

class OEMMFFInterCoulomb(OEMolFunc1):
    r"""Proxy of C++ OEMolMMFF::OEMMFFInterCoulomb class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFInterCoulomb self, OEMolBase arg2, double [6] minmax, double dielectric=1.0, double exponent=1.0, double resolution=0.5) -> OEMMFFInterCoulomb
        __init__(OEMMFFInterCoulomb self, OEFixedMultiFloatGrid grid) -> OEMMFFInterCoulomb
        __init__(OEMMFFInterCoulomb self, OEMMFFInterCoulomb arg2) -> OEMMFFInterCoulomb
        """
        _oeff.OEMMFFInterCoulomb_swiginit(self, _oeff.new_OEMMFFInterCoulomb(*args))
    __swig_destroy__ = _oeff.delete_OEMMFFInterCoulomb

    def Setup(self, arg2: "OEMolBase") -> "bool":
        r"""Setup(OEMMFFInterCoulomb self, OEMolBase arg2) -> bool"""
        return _oeff.OEMMFFInterCoulomb_Setup(self, arg2)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEMMFFInterCoulomb self) -> unsigned int"""
        return _oeff.OEMMFFInterCoulomb_NumVar(self)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEMMFFInterCoulomb self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEMMFFInterCoulomb_GetFComponents(self, arg2)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEMMFFInterCoulomb self, double const * x) -> double
        __call__(OEMMFFInterCoulomb self, double const * x, double * g) -> double
        """
        return _oeff.OEMMFFInterCoulomb___call__(self, *args)

    def GetGrid(self) -> "OESystem::OEFixedMultiGrid< float > const &":
        r"""GetGrid(OEMMFFInterCoulomb self) -> OEFixedMultiFloatGrid"""
        return _oeff.OEMMFFInterCoulomb_GetGrid(self)

    def Set(self, *args) -> "bool":
        
        return _oeff.OEMMFFInterCoulomb_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEMMFFInterCoulomb self)"""
        return _oeff.OEMMFFInterCoulomb_ClearPredicates(self)

# Register OEMMFFInterCoulomb in _oeff:
_oeff.OEMMFFInterCoulomb_swigregister(OEMMFFInterCoulomb)

class OEMMFFOutOfPlane(OEMolFunc2):
    r"""Proxy of C++ OEMolMMFF::OEMMFFOutOfPlane class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFOutOfPlane self, OEFFParams arg2) -> OEMMFFOutOfPlane
        __init__(OEMMFFOutOfPlane self, OEMMFFOutOfPlane arg2) -> OEMMFFOutOfPlane
        """
        _oeff.OEMMFFOutOfPlane_swiginit(self, _oeff.new_OEMMFFOutOfPlane(*args))

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEMMFFOutOfPlane self, OEMolBase mol) -> bool"""
        return _oeff.OEMMFFOutOfPlane_Setup(self, mol)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEMMFFOutOfPlane self) -> unsigned int"""
        return _oeff.OEMMFFOutOfPlane_NumVar(self)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEMMFFOutOfPlane self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEMMFFOutOfPlane_GetFComponents(self, arg2)

    def __call__(self, *args) -> "bool":
        r"""
        __call__(OEMMFFOutOfPlane self, double const * x) -> double
        __call__(OEMMFFOutOfPlane self, double const * x, double * g) -> double
        __call__(OEMMFFOutOfPlane self, double const * x, double * h, double * g) -> bool
        """
        return _oeff.OEMMFFOutOfPlane___call__(self, *args)

    def Set(self, *args) -> "bool":
        
        return _oeff.OEMMFFOutOfPlane_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEMMFFOutOfPlane self)"""
        return _oeff.OEMMFFOutOfPlane_ClearPredicates(self)

    def GetInteractions(self, mol: "OEMolBase", c: "double const *", functype: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OEMMFFOutOfPlane self, OEMolBase mol, double const * c, unsigned int functype) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OEMMFFOutOfPlane_GetInteractions(self, mol, c, functype)

    def Clear(self) -> "void":
        r"""Clear(OEMMFFOutOfPlane self)"""
        return _oeff.OEMMFFOutOfPlane_Clear(self)

    def SetVerbose(self, v: "bool") -> "void":
        r"""SetVerbose(OEMMFFOutOfPlane self, bool v)"""
        return _oeff.OEMMFFOutOfPlane_SetVerbose(self, v)

# Register OEMMFFOutOfPlane in _oeff:
_oeff.OEMMFFOutOfPlane_swigregister(OEMMFFOutOfPlane)

class OEMMFFStretchBend(OEMolFunc2):
    r"""Proxy of C++ OEMolMMFF::OEMMFFStretchBend class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFStretchBend self, OEFFParams arg2) -> OEMMFFStretchBend
        __init__(OEMMFFStretchBend self, OEMMFFStretchBend arg2) -> OEMMFFStretchBend
        """
        _oeff.OEMMFFStretchBend_swiginit(self, _oeff.new_OEMMFFStretchBend(*args))

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEMMFFStretchBend self, OEMolBase mol) -> bool"""
        return _oeff.OEMMFFStretchBend_Setup(self, mol)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEMMFFStretchBend self) -> unsigned int"""
        return _oeff.OEMMFFStretchBend_NumVar(self)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEMMFFStretchBend self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEMMFFStretchBend_GetFComponents(self, arg2)

    def __call__(self, *args) -> "bool":
        r"""
        __call__(OEMMFFStretchBend self, double const * x) -> double
        __call__(OEMMFFStretchBend self, double const * x, double * g) -> double
        __call__(OEMMFFStretchBend self, double const * x, double * h, double * g) -> bool
        """
        return _oeff.OEMMFFStretchBend___call__(self, *args)

    def Set(self, *args) -> "bool":
        
        return _oeff.OEMMFFStretchBend_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEMMFFStretchBend self)"""
        return _oeff.OEMMFFStretchBend_ClearPredicates(self)

    def GetInteractions(self, mol: "OEMolBase", c: "double const *", functype: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OEMMFFStretchBend self, OEMolBase mol, double const * c, unsigned int functype) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OEMMFFStretchBend_GetInteractions(self, mol, c, functype)

    def Clear(self) -> "void":
        r"""Clear(OEMMFFStretchBend self)"""
        return _oeff.OEMMFFStretchBend_Clear(self)

    def SetVerbose(self, v: "bool") -> "void":
        r"""SetVerbose(OEMMFFStretchBend self, bool v)"""
        return _oeff.OEMMFFStretchBend_SetVerbose(self, v)

# Register OEMMFFStretchBend in _oeff:
_oeff.OEMMFFStretchBend_swigregister(OEMMFFStretchBend)

class OEMMFFTorsion(OEMolFunc2):
    r"""Proxy of C++ OEMolMMFF::OEMMFFTorsion class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFTorsion self, OEFFParams arg2) -> OEMMFFTorsion
        __init__(OEMMFFTorsion self, OEMMFFTorsion arg2) -> OEMMFFTorsion
        """
        _oeff.OEMMFFTorsion_swiginit(self, _oeff.new_OEMMFFTorsion(*args))

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEMMFFTorsion self, OEMolBase mol) -> bool"""
        return _oeff.OEMMFFTorsion_Setup(self, mol)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEMMFFTorsion self) -> unsigned int"""
        return _oeff.OEMMFFTorsion_NumVar(self)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEMMFFTorsion self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEMMFFTorsion_GetFComponents(self, arg2)

    def __call__(self, *args) -> "bool":
        r"""
        __call__(OEMMFFTorsion self, double const * x) -> double
        __call__(OEMMFFTorsion self, double const * x, double * g) -> double
        __call__(OEMMFFTorsion self, double const * x, double * h, double * g) -> bool
        """
        return _oeff.OEMMFFTorsion___call__(self, *args)

    def Set(self, *args) -> "bool":
        
        return _oeff.OEMMFFTorsion_Set(self, *args)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OEMMFFTorsion self)"""
        return _oeff.OEMMFFTorsion_ClearPredicates(self)

    def GetInteractions(self, mol: "OEMolBase", c: "double const *", functype: "unsigned int") -> "OESystem::OEIterBase< OEMolPotential::OEInteraction > *":
        r"""GetInteractions(OEMMFFTorsion self, OEMolBase mol, double const * c, unsigned int functype) -> OESystem::OEIterBase< OEMolPotential::OEInteraction > *"""
        return _oeff.OEMMFFTorsion_GetInteractions(self, mol, c, functype)

    def Clear(self) -> "void":
        r"""Clear(OEMMFFTorsion self)"""
        return _oeff.OEMMFFTorsion_Clear(self)

    def SetVerbose(self, v: "bool") -> "void":
        r"""SetVerbose(OEMMFFTorsion self, bool v)"""
        return _oeff.OEMMFFTorsion_SetVerbose(self, v)

# Register OEMMFFTorsion in _oeff:
_oeff.OEMMFFTorsion_swigregister(OEMMFFTorsion)

class OEMMFF(OEGenericFF2):
    r"""Proxy of C++ OEMolMMFF::OEMMFF class."""

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

    def PrepMol(self, mol: "OEMolBase", sweep: "bool"=True, warnOK: "bool"=True) -> "bool":
        r"""PrepMol(OEMMFF self, OEMolBase mol, bool sweep=True, bool warnOK=True) -> bool"""
        return _oeff.OEMMFF_PrepMol(self, mol, sweep, warnOK)

    def GetFFParams(self) -> "OEMolMMFF::OEMMFFParams const *":
        r"""GetFFParams(OEMMFF self) -> OEMMFFParams"""
        return _oeff.OEMMFF_GetFFParams(self)

    def __init__(self, *args):
        r"""
        __init__(OEMMFF self, OEMMFFParams params, OENonBondIntcsOptions opts=OEMolPotential::OENonBondIntcsOptions()) -> OEMMFF
        __init__(OEMMFF self, OEMMFF arg2) -> OEMMFF
        __init__(OEMMFF self, bool mmff94s=False, unsigned int terms=) -> OEMMFF
        """
        _oeff.OEMMFF_swiginit(self, _oeff.new_OEMMFF(*args))

    def IsMMFF94S(self) -> "bool":
        r"""IsMMFF94S(OEMMFF self) -> bool"""
        return _oeff.OEMMFF_IsMMFF94S(self)

# Register OEMMFF in _oeff:
_oeff.OEMMFF_swigregister(OEMMFF)

class OEMMFFStretch(OEStretchPotential):
    r"""Proxy of C++ OEMolMMFF::OEMMFFStretch class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFStretch self, OEFFParams params) -> OEMMFFStretch
        __init__(OEMMFFStretch self, OEMMFFStretch arg2) -> OEMMFFStretch
        """
        _oeff.OEMMFFStretch_swiginit(self, _oeff.new_OEMMFFStretch(*args))

# Register OEMMFFStretch in _oeff:
_oeff.OEMMFFStretch_swigregister(OEMMFFStretch)

class OEMMFFBend(OEBendPotential):
    r"""Proxy of C++ OEMolMMFF::OEMMFFBend class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFBend self, OEFFParams params) -> OEMMFFBend
        __init__(OEMMFFBend self, OEMMFFBend arg2) -> OEMMFFBend
        """
        _oeff.OEMMFFBend_swiginit(self, _oeff.new_OEMMFFBend(*args))

# Register OEMMFFBend in _oeff:
_oeff.OEMMFFBend_swigregister(OEMMFFBend)

class OESmirnoffParams(OEFFParams):
    r"""Proxy of C++ OEMolSmirnoff::OESmirnoffParams class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESmirnoffParams self) -> OESmirnoffParams
        __init__(OESmirnoffParams self, OESmirnoffParams arg2) -> OESmirnoffParams
        """
        _oeff.OESmirnoffParams_swiginit(self, _oeff.new_OESmirnoffParams(*args))
    __swig_destroy__ = _oeff.delete_OESmirnoffParams

    def Load(self, *args) -> "bool":
        r"""
        Load(OESmirnoffParams self, unsigned int const fftype) -> bool
        Load(OESmirnoffParams self, std::string const & xml_file_name) -> bool
        Load(OESmirnoffParams self, oeisstream ifs) -> bool
        """
        return _oeff.OESmirnoffParams_Load(self, *args)

    def GetTitle(self) -> "std::string":
        r"""GetTitle(OESmirnoffParams self) -> std::string"""
        return _oeff.OESmirnoffParams_GetTitle(self)

    def GetFormatType(self) -> "unsigned int":
        r"""GetFormatType(OESmirnoffParams self) -> unsigned int"""
        return _oeff.OESmirnoffParams_GetFormatType(self)

    def GetVacPermFactor(self) -> "double":
        r"""GetVacPermFactor(OESmirnoffParams self) -> double"""
        return _oeff.OESmirnoffParams_GetVacPermFactor(self)

    def GetCoulScaleFactor(self) -> "double":
        r"""GetCoulScaleFactor(OESmirnoffParams self) -> double"""
        return _oeff.OESmirnoffParams_GetCoulScaleFactor(self)

    def GetStretchBendParams(self, arg2: "OEInteractParams", arg3: "OEAtomBase", arg4: "OEAtomBase", arg5: "OEAtomBase") -> "bool":
        r"""GetStretchBendParams(OESmirnoffParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5) -> bool"""
        return _oeff.OESmirnoffParams_GetStretchBendParams(self, arg2, arg3, arg4, arg5)

    def GetEquilibriumBondLength(self, arg2: "double &", arg3: "OEBondBase") -> "bool":
        r"""GetEquilibriumBondLength(OESmirnoffParams self, double & arg2, OEBondBase arg3) -> bool"""
        return _oeff.OESmirnoffParams_GetEquilibriumBondLength(self, arg2, arg3)

    def GetContactDistance(self, arg2: "double &", arg3: "OEAtomBase", arg4: "OEAtomBase") -> "bool":
        r"""GetContactDistance(OESmirnoffParams self, double & arg2, OEAtomBase arg3, OEAtomBase arg4) -> bool"""
        return _oeff.OESmirnoffParams_GetContactDistance(self, arg2, arg3, arg4)

    def GetEquilibriumAngle(self, arg2: "double &", arg3: "OEAtomBase", arg4: "OEAtomBase", arg5: "OEAtomBase") -> "bool":
        r"""GetEquilibriumAngle(OESmirnoffParams self, double & arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5) -> bool"""
        return _oeff.OESmirnoffParams_GetEquilibriumAngle(self, arg2, arg3, arg4, arg5)

    def GetVdwRadius(self, arg2: "double &", atm: "OEAtomBase") -> "bool":
        r"""GetVdwRadius(OESmirnoffParams self, double & arg2, OEAtomBase atm) -> bool"""
        return _oeff.OESmirnoffParams_GetVdwRadius(self, arg2, atm)

    def GetVdwEpsilon(self, arg2: "double &", atm: "OEAtomBase") -> "bool":
        r"""GetVdwEpsilon(OESmirnoffParams self, double & arg2, OEAtomBase atm) -> bool"""
        return _oeff.OESmirnoffParams_GetVdwEpsilon(self, arg2, atm)

    def PrepMol(self, mol: "OEMolBase", sweep: "bool"=True, warnOK: "bool"=True) -> "bool":
        r"""PrepMol(OESmirnoffParams self, OEMolBase mol, bool sweep=True, bool warnOK=True) -> bool"""
        return _oeff.OESmirnoffParams_PrepMol(self, mol, sweep, warnOK)

    def GetAtomTypeIndex(self, arg2: "unsigned int") -> "unsigned int":
        r"""GetAtomTypeIndex(OESmirnoffParams self, unsigned int arg2) -> unsigned int"""
        return _oeff.OESmirnoffParams_GetAtomTypeIndex(self, arg2)

    def GetAtomTypeName(self, arg2: "unsigned int") -> "char const *":
        r"""GetAtomTypeName(OESmirnoffParams self, unsigned int arg2) -> char const *"""
        return _oeff.OESmirnoffParams_GetAtomTypeName(self, arg2)

    def GetOutOfPlaneParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OEOutOfPlaneParams > *":
        r"""
        GetOutOfPlaneParams(OESmirnoffParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5, OEAtomBase arg6) -> bool
        GetOutOfPlaneParams(OESmirnoffParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OEOutOfPlaneParams >
        """
        return _oeff.OESmirnoffParams_GetOutOfPlaneParams(self, *args)

    def GetStretchParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OEStretchParams > *":
        r"""
        GetStretchParams(OESmirnoffParams self, OEInteractParams arg2, OEBondBase arg3) -> bool
        GetStretchParams(OESmirnoffParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OEStretchParams >
        GetStretchParams(OESmirnoffParams self, OEMolBase mol) -> OESystem::OEIterBase< OEMolPotential::OEStretchParams > *
        """
        return _oeff.OESmirnoffParams_GetStretchParams(self, *args)

    def GetTorsionParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OETorsionParams > *":
        r"""
        GetTorsionParams(OESmirnoffParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5, OEAtomBase arg6) -> bool
        GetTorsionParams(OESmirnoffParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OETorsionParams >
        GetTorsionParams(OESmirnoffParams self, OEMolBase mol) -> OESystem::OEIterBase< OEMolPotential::OETorsionParams > *
        """
        return _oeff.OESmirnoffParams_GetTorsionParams(self, *args)

    def GetBendParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OEBendParams > *":
        r"""
        GetBendParams(OESmirnoffParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5) -> bool
        GetBendParams(OESmirnoffParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OEBendParams >
        GetBendParams(OESmirnoffParams self, OEMolBase mol) -> OESystem::OEIterBase< OEMolPotential::OEBendParams > *
        """
        return _oeff.OESmirnoffParams_GetBendParams(self, *args)

    def GetVdwParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OEVdwParams > *":
        r"""
        GetVdwParams(OESmirnoffParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4) -> bool
        GetVdwParams(OESmirnoffParams self, OEMolBase mol, OEUnaryAtomPred pred=None, double const rcut=0.0) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams >
        GetVdwParams(OESmirnoffParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams >
        GetVdwParams(OESmirnoffParams self, OEMolBase mol) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams >
        GetVdwParams(OESmirnoffParams self, OEMolBase mol, OEMolBase host) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams > *
        """
        return _oeff.OESmirnoffParams_GetVdwParams(self, *args)

# Register OESmirnoffParams in _oeff:
_oeff.OESmirnoffParams_swigregister(OESmirnoffParams)

class OEParsleyParams(OESmirnoffParams):
    r"""Proxy of C++ OEMolSmirnoff::OEParsleyParams class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEParsleyParams self) -> OEParsleyParams
        __init__(OEParsleyParams self, OEParsleyParams arg2) -> OEParsleyParams
        """
        _oeff.OEParsleyParams_swiginit(self, _oeff.new_OEParsleyParams(*args))
    __swig_destroy__ = _oeff.delete_OEParsleyParams

# Register OEParsleyParams in _oeff:
_oeff.OEParsleyParams_swigregister(OEParsleyParams)

class OESmirnoff(OEGenericFF2):
    r"""Proxy of C++ OEMolSmirnoff::OESmirnoff class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESmirnoff self, double const rcut_vdw=0.0) -> OESmirnoff
        __init__(OESmirnoff self, OESmirnoffParams params, OENonBondIntcsOptions opts=OEMolPotential::OENonBondIntcsOptions()) -> OESmirnoff
        __init__(OESmirnoff self, OESmirnoff arg2) -> OESmirnoff
        """
        _oeff.OESmirnoff_swiginit(self, _oeff.new_OESmirnoff(*args))
    __swig_destroy__ = _oeff.delete_OESmirnoff

    def GetTitle(self) -> "std::string":
        r"""GetTitle(OESmirnoff self) -> std::string"""
        return _oeff.OESmirnoff_GetTitle(self)

    def PrepMol(self, mol: "OEMolBase", sweep: "bool"=True, warnOK: "bool"=True) -> "bool":
        r"""PrepMol(OESmirnoff self, OEMolBase mol, bool sweep=True, bool warnOK=True) -> bool"""
        return _oeff.OESmirnoff_PrepMol(self, mol, sweep, warnOK)

    def GetFFParams(self) -> "OEMolSmirnoff::OESmirnoffParams const *":
        r"""GetFFParams(OESmirnoff self) -> OESmirnoffParams"""
        return _oeff.OESmirnoff_GetFFParams(self)

# Register OESmirnoff in _oeff:
_oeff.OESmirnoff_swigregister(OESmirnoff)

class OEParsley(OESmirnoff):
    r"""Proxy of C++ OEMolSmirnoff::OEParsley class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEParsley self, OENonBondIntcsOptions opts=OEMolPotential::OENonBondIntcsOptions()) -> OEParsley
        __init__(OEParsley self, OEParsley arg2) -> OEParsley
        """
        _oeff.OEParsley_swiginit(self, _oeff.new_OEParsley(*args))
    __swig_destroy__ = _oeff.delete_OEParsley

# Register OEParsley in _oeff:
_oeff.OEParsley_swigregister(OEParsley)

class OESmirnoffStretch(OEStretchPotential):
    r"""Proxy of C++ OEMolSmirnoff::OESmirnoffStretch class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESmirnoffStretch self, OESmirnoffParams fp) -> OESmirnoffStretch
        __init__(OESmirnoffStretch self, OESmirnoffStretch arg2) -> OESmirnoffStretch
        """
        _oeff.OESmirnoffStretch_swiginit(self, _oeff.new_OESmirnoffStretch(*args))

# Register OESmirnoffStretch in _oeff:
_oeff.OESmirnoffStretch_swigregister(OESmirnoffStretch)

class OESmirnoffBend(OEBendPotential):
    r"""Proxy of C++ OEMolSmirnoff::OESmirnoffBend class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESmirnoffBend self, OESmirnoffParams fp) -> OESmirnoffBend
        __init__(OESmirnoffBend self, OESmirnoffBend arg2) -> OESmirnoffBend
        """
        _oeff.OESmirnoffBend_swiginit(self, _oeff.new_OESmirnoffBend(*args))
    __swig_destroy__ = _oeff.delete_OESmirnoffBend

# Register OESmirnoffBend in _oeff:
_oeff.OESmirnoffBend_swigregister(OESmirnoffBend)

class OESmirnoffTorsion(OETorsionPotential):
    r"""Proxy of C++ OEMolSmirnoff::OESmirnoffTorsion class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESmirnoffTorsion self, OESmirnoffParams fp) -> OESmirnoffTorsion
        __init__(OESmirnoffTorsion self, OESmirnoffTorsion arg2) -> OESmirnoffTorsion
        """
        _oeff.OESmirnoffTorsion_swiginit(self, _oeff.new_OESmirnoffTorsion(*args))

# Register OESmirnoffTorsion in _oeff:
_oeff.OESmirnoffTorsion_swigregister(OESmirnoffTorsion)

class OESmirnoffOutOfPlane(OEOutOfPlanePotential):
    r"""Proxy of C++ OEMolSmirnoff::OESmirnoffOutOfPlane class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESmirnoffOutOfPlane self, OESmirnoffParams fp) -> OESmirnoffOutOfPlane
        __init__(OESmirnoffOutOfPlane self, OESmirnoffOutOfPlane arg2) -> OESmirnoffOutOfPlane
        """
        _oeff.OESmirnoffOutOfPlane_swiginit(self, _oeff.new_OESmirnoffOutOfPlane(*args))

# Register OESmirnoffOutOfPlane in _oeff:
_oeff.OESmirnoffOutOfPlane_swigregister(OESmirnoffOutOfPlane)

class OESmirnoffNonBond(OENonBondPotential):
    r"""Proxy of C++ OEMolSmirnoff::OESmirnoffNonBond class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESmirnoffNonBond self, OESmirnoffParams params, OENonBondIntcsOptions opts=OEMolPotential::OENonBondIntcsOptions()) -> OESmirnoffNonBond
        __init__(OESmirnoffNonBond self, OESmirnoffNonBond arg2) -> OESmirnoffNonBond
        """
        _oeff.OESmirnoffNonBond_swiginit(self, _oeff.new_OESmirnoffNonBond(*args))

# Register OESmirnoffNonBond in _oeff:
_oeff.OESmirnoffNonBond_swigregister(OESmirnoffNonBond)

class OESmirnoffInterNonBond(OEInterNonBondPotential):
    r"""Proxy of C++ OEMolSmirnoff::OESmirnoffInterNonBond class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESmirnoffInterNonBond self, OESmirnoffParams params, OENonBondIntcsOptions opts=OEMolPotential::OENonBondIntcsOptions()) -> OESmirnoffInterNonBond
        __init__(OESmirnoffInterNonBond self, OESmirnoffInterNonBond arg2) -> OESmirnoffInterNonBond
        """
        _oeff.OESmirnoffInterNonBond_swiginit(self, _oeff.new_OESmirnoffInterNonBond(*args))

# Register OESmirnoffInterNonBond in _oeff:
_oeff.OESmirnoffInterNonBond_swigregister(OESmirnoffInterNonBond)

class OESmirnoffVdw(OEVdwPotential):
    r"""Proxy of C++ OEMolSmirnoff::OESmirnoffVdw class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESmirnoffVdw self, OESmirnoffParams params, double const rcut=0.0) -> OESmirnoffVdw
        __init__(OESmirnoffVdw self, OESmirnoffVdw arg2) -> OESmirnoffVdw
        """
        _oeff.OESmirnoffVdw_swiginit(self, _oeff.new_OESmirnoffVdw(*args))
    __swig_destroy__ = _oeff.delete_OESmirnoffVdw

# Register OESmirnoffVdw in _oeff:
_oeff.OESmirnoffVdw_swigregister(OESmirnoffVdw)

class OESmirnoffInterVdw(OEInterVdwPotential):
    r"""Proxy of C++ OEMolSmirnoff::OESmirnoffInterVdw class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESmirnoffInterVdw self, OEMolBase host, OESmirnoffParams params, double const rcut=0.0) -> OESmirnoffInterVdw
        __init__(OESmirnoffInterVdw self, OESmirnoffInterVdw arg2) -> OESmirnoffInterVdw
        """
        _oeff.OESmirnoffInterVdw_swiginit(self, _oeff.new_OESmirnoffInterVdw(*args))
    __swig_destroy__ = _oeff.delete_OESmirnoffInterVdw

# Register OESmirnoffInterVdw in _oeff:
_oeff.OESmirnoffInterVdw_swigregister(OESmirnoffInterVdw)

class OESmirnoffCoulomb(OECoulombPotential):
    r"""Proxy of C++ OEMolSmirnoff::OESmirnoffCoulomb class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESmirnoffCoulomb self, double const rcut=0.0) -> OESmirnoffCoulomb
        __init__(OESmirnoffCoulomb self, OESmirnoffCoulomb arg2) -> OESmirnoffCoulomb
        """
        _oeff.OESmirnoffCoulomb_swiginit(self, _oeff.new_OESmirnoffCoulomb(*args))
    __swig_destroy__ = _oeff.delete_OESmirnoffCoulomb

# Register OESmirnoffCoulomb in _oeff:
_oeff.OESmirnoffCoulomb_swigregister(OESmirnoffCoulomb)

class OESmirnoffInterCoulomb(OEInterCoulombPotential):
    r"""Proxy of C++ OEMolSmirnoff::OESmirnoffInterCoulomb class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESmirnoffInterCoulomb self, double const rcut=0.0) -> OESmirnoffInterCoulomb
        __init__(OESmirnoffInterCoulomb self, OESmirnoffInterCoulomb arg2) -> OESmirnoffInterCoulomb
        """
        _oeff.OESmirnoffInterCoulomb_swiginit(self, _oeff.new_OESmirnoffInterCoulomb(*args))
    __swig_destroy__ = _oeff.delete_OESmirnoffInterCoulomb

# Register OESmirnoffInterCoulomb in _oeff:
_oeff.OESmirnoffInterCoulomb_swigregister(OESmirnoffInterCoulomb)

class OEComplexEnergies(object):
    r"""Proxy of C++ OEFF::OEComplexEnergies class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEComplexEnergies self) -> OEComplexEnergies
        __init__(OEComplexEnergies self, OEComplexEnergies arg2) -> OEComplexEnergies
        """
        _oeff.OEComplexEnergies_swiginit(self, _oeff.new_OEComplexEnergies(*args))
    __swig_destroy__ = _oeff.delete_OEComplexEnergies

    def GetHostComponents(self) -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetHostComponents(OEComplexEnergies self) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEComplexEnergies_GetHostComponents(self)

    def GetLigandComponents(self) -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetLigandComponents(OEComplexEnergies self) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEComplexEnergies_GetLigandComponents(self)

    def GetInterComponents(self) -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetInterComponents(OEComplexEnergies self) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEComplexEnergies_GetInterComponents(self)

    def GetHostEnergy(self) -> "double":
        r"""GetHostEnergy(OEComplexEnergies self) -> double"""
        return _oeff.OEComplexEnergies_GetHostEnergy(self)

    def GetLigandEnergy(self) -> "double":
        r"""GetLigandEnergy(OEComplexEnergies self) -> double"""
        return _oeff.OEComplexEnergies_GetLigandEnergy(self)

    def GetInterEnergy(self) -> "double":
        r"""GetInterEnergy(OEComplexEnergies self) -> double"""
        return _oeff.OEComplexEnergies_GetInterEnergy(self)

    def GetTotalEnergy(self) -> "double":
        r"""GetTotalEnergy(OEComplexEnergies self) -> double"""
        return _oeff.OEComplexEnergies_GetTotalEnergy(self)

# Register OEComplexEnergies in _oeff:
_oeff.OEComplexEnergies_swigregister(OEComplexEnergies)

class OEComplexFF(OEMolFunc1):
    r"""Proxy of C++ OEFF::OEComplexFF class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEComplexFF self, OEForceField ligandFF, OEForceField hostFF, OEInterMolFunc1 interFF) -> OEComplexFF
        __init__(OEComplexFF self, OEComplexFF arg2) -> OEComplexFF
        """
        _oeff.OEComplexFF_swiginit(self, _oeff.new_OEComplexFF(*args))
    __swig_destroy__ = _oeff.delete_OEComplexFF

    def SetupHost(self, host: "OEMolBase") -> "bool":
        r"""SetupHost(OEComplexFF self, OEMolBase host) -> bool"""
        return _oeff.OEComplexFF_SetupHost(self, host)

    def SetHostFlex(self, pred: "OEUnaryAtomPred") -> "bool":
        r"""SetHostFlex(OEComplexFF self, OEUnaryAtomPred pred) -> bool"""
        return _oeff.OEComplexFF_SetHostFlex(self, pred)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEComplexFF self, double const * x) -> double
        __call__(OEComplexFF self, double const * x, double * g) -> double
        """
        return _oeff.OEComplexFF___call__(self, *args)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OEComplexFF self) -> unsigned int"""
        return _oeff.OEComplexFF_NumVar(self)

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEComplexFF self, OEMolBase mol) -> bool"""
        return _oeff.OEComplexFF_Setup(self, mol)

    def GetFComponents(self, *args) -> "bool":
        r"""
        GetFComponents(OEComplexFF self, double const * coords) -> OESystem::OEIterBase< OEOpt::OEFComponent >
        GetFComponents(OEComplexFF self, OEComplexEnergies ene, double const * coords) -> bool
        """
        return _oeff.OEComplexFF_GetFComponents(self, *args)

    def GetVar(self, var: "double *", x: "double const *") -> "void":
        r"""GetVar(OEComplexFF self, double * var, double const * x)"""
        return _oeff.OEComplexFF_GetVar(self, var, x)

    def AdaptHostCoords(self, coords: "double *", var: "double const *") -> "bool":
        r"""AdaptHostCoords(OEComplexFF self, double * coords, double const * var) -> bool"""
        return _oeff.OEComplexFF_AdaptHostCoords(self, coords, var)

# Register OEComplexFF in _oeff:
_oeff.OEComplexFF_swigregister(OEComplexFF)

class OEMMFFAmberOptions(oechem.OEOptions):
    r"""Proxy of C++ OEFF::OEMMFFAmberOptions class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFAmberOptions self) -> OEMMFFAmberOptions
        __init__(OEMMFFAmberOptions self, OEMMFFAmberOptions arg2) -> OEMMFFAmberOptions
        """
        _oeff.OEMMFFAmberOptions_swiginit(self, _oeff.new_OEMMFFAmberOptions(*args))
    __swig_destroy__ = _oeff.delete_OEMMFFAmberOptions

    def GetUseMMFF94s(self) -> "bool":
        r"""GetUseMMFF94s(OEMMFFAmberOptions self) -> bool"""
        return _oeff.OEMMFFAmberOptions_GetUseMMFF94s(self)

    def SetUseMMFF94s(self, value: "bool const") -> "bool":
        r"""SetUseMMFF94s(OEMMFFAmberOptions self, bool const value) -> bool"""
        return _oeff.OEMMFFAmberOptions_SetUseMMFF94s(self, value)

    def GetUseExternalCharges(self) -> "bool":
        r"""GetUseExternalCharges(OEMMFFAmberOptions self) -> bool"""
        return _oeff.OEMMFFAmberOptions_GetUseExternalCharges(self)

    def SetUseExternalCharges(self, value: "bool const") -> "bool":
        r"""SetUseExternalCharges(OEMMFFAmberOptions self, bool const value) -> bool"""
        return _oeff.OEMMFFAmberOptions_SetUseExternalCharges(self, value)

    def GetIntermolecularVdWCutoff(self) -> "double":
        r"""GetIntermolecularVdWCutoff(OEMMFFAmberOptions self) -> double"""
        return _oeff.OEMMFFAmberOptions_GetIntermolecularVdWCutoff(self)

    def SetIntermolecularVdWCutoff(self, value: "double const") -> "bool":
        r"""SetIntermolecularVdWCutoff(OEMMFFAmberOptions self, double const value) -> bool"""
        return _oeff.OEMMFFAmberOptions_SetIntermolecularVdWCutoff(self, value)

    def GetMMFFTerms(self) -> "unsigned int":
        r"""GetMMFFTerms(OEMMFFAmberOptions self) -> unsigned int"""
        return _oeff.OEMMFFAmberOptions_GetMMFFTerms(self)

    def SetMMFFTerms(self, value: "unsigned int const") -> "bool":
        r"""SetMMFFTerms(OEMMFFAmberOptions self, unsigned int const value) -> bool"""
        return _oeff.OEMMFFAmberOptions_SetMMFFTerms(self, value)

    def GetAmberTerms(self) -> "unsigned int":
        r"""GetAmberTerms(OEMMFFAmberOptions self) -> unsigned int"""
        return _oeff.OEMMFFAmberOptions_GetAmberTerms(self)

    def SetAmberTerms(self, value: "unsigned int const") -> "bool":
        r"""SetAmberTerms(OEMMFFAmberOptions self, unsigned int const value) -> bool"""
        return _oeff.OEMMFFAmberOptions_SetAmberTerms(self, value)

# Register OEMMFFAmberOptions in _oeff:
_oeff.OEMMFFAmberOptions_swigregister(OEMMFFAmberOptions)

class OEMMFFAmber(OEGenericFF2):
    r"""Proxy of C++ OEFF::OEMMFFAmber class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFAmber self, OEMolBase host) -> OEMMFFAmber
        __init__(OEMMFFAmber self, OEMolBase host, OEMMFFAmberOptions argOptions) -> OEMMFFAmber
        """
        _oeff.OEMMFFAmber_swiginit(self, _oeff.new_OEMMFFAmber(*args))
    __swig_destroy__ = _oeff.delete_OEMMFFAmber

    def PrepMol(self, mol: "OEMolBase", sweep: "bool"=True, warnOK: "bool"=True) -> "bool":
        r"""PrepMol(OEMMFFAmber self, OEMolBase mol, bool sweep=True, bool warnOK=True) -> bool"""
        return _oeff.OEMMFFAmber_PrepMol(self, mol, sweep, warnOK)

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEMMFFAmber self, OEMolBase mol) -> bool"""
        return _oeff.OEMMFFAmber_Setup(self, mol)

# Register OEMMFFAmber in _oeff:
_oeff.OEMMFFAmber_swigregister(OEMMFFAmber)

class OEMMFFAmberComplex(OEComplexFF):
    r"""Proxy of C++ OEFF::OEMMFFAmberComplex class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFAmberComplex self, OEMMFFParams mmffParams=OEMolMMFF::OEMMFFParams(), OENonBondIntcsOptions opts=OEMolPotential::OENonBondIntcsOptions()) -> OEMMFFAmberComplex
        __init__(OEMMFFAmberComplex self, OEMMFFAmberComplex arg2) -> OEMMFFAmberComplex
        """
        _oeff.OEMMFFAmberComplex_swiginit(self, _oeff.new_OEMMFFAmberComplex(*args))
    __swig_destroy__ = _oeff.delete_OEMMFFAmberComplex

# Register OEMMFFAmberComplex in _oeff:
_oeff.OEMMFFAmberComplex_swigregister(OEMMFFAmberComplex)

class OEMMFFIEFFOptions(oechem.OEOptions):
    r"""Proxy of C++ OEFF::OEMMFFIEFFOptions class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFIEFFOptions self) -> OEMMFFIEFFOptions
        __init__(OEMMFFIEFFOptions self, OEMMFFIEFFOptions arg2) -> OEMMFFIEFFOptions
        """
        _oeff.OEMMFFIEFFOptions_swiginit(self, _oeff.new_OEMMFFIEFFOptions(*args))
    __swig_destroy__ = _oeff.delete_OEMMFFIEFFOptions

    def GetUseMMFF94s(self) -> "bool":
        r"""GetUseMMFF94s(OEMMFFIEFFOptions self) -> bool"""
        return _oeff.OEMMFFIEFFOptions_GetUseMMFF94s(self)

    def SetUseMMFF94s(self, value: "bool const") -> "bool":
        r"""SetUseMMFF94s(OEMMFFIEFFOptions self, bool const value) -> bool"""
        return _oeff.OEMMFFIEFFOptions_SetUseMMFF94s(self, value)

    def GetMMFFTerms(self) -> "unsigned int":
        r"""GetMMFFTerms(OEMMFFIEFFOptions self) -> unsigned int"""
        return _oeff.OEMMFFIEFFOptions_GetMMFFTerms(self)

    def SetMMFFTerms(self, value: "unsigned int const") -> "bool":
        r"""SetMMFFTerms(OEMMFFIEFFOptions self, unsigned int const value) -> bool"""
        return _oeff.OEMMFFIEFFOptions_SetMMFFTerms(self, value)

    def GetIEFFTerms(self) -> "unsigned int":
        r"""GetIEFFTerms(OEMMFFIEFFOptions self) -> unsigned int"""
        return _oeff.OEMMFFIEFFOptions_GetIEFFTerms(self)

    def SetIEFFTerms(self, value: "unsigned int const") -> "bool":
        r"""SetIEFFTerms(OEMMFFIEFFOptions self, unsigned int const value) -> bool"""
        return _oeff.OEMMFFIEFFOptions_SetIEFFTerms(self, value)

# Register OEMMFFIEFFOptions in _oeff:
_oeff.OEMMFFIEFFOptions_swigregister(OEMMFFIEFFOptions)

class OEMMFFIEFF(OEGenericFF):
    r"""Proxy of C++ OEFF::OEMMFFIEFF class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFIEFF self, OEMolBase host) -> OEMMFFIEFF
        __init__(OEMMFFIEFF self, OEMolBase host, OEMMFFIEFFOptions argOptions) -> OEMMFFIEFF
        """
        _oeff.OEMMFFIEFF_swiginit(self, _oeff.new_OEMMFFIEFF(*args))
    __swig_destroy__ = _oeff.delete_OEMMFFIEFF

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OEMMFFIEFF self, OEMolBase mol) -> bool"""
        return _oeff.OEMMFFIEFF_Setup(self, mol)

    def __call__(self, *args) -> "double":
        r"""
        __call__(OEMMFFIEFF self, double const * x) -> double
        __call__(OEMMFFIEFF self, double const * x, double * g) -> double
        """
        return _oeff.OEMMFFIEFF___call__(self, *args)

    def GetFComponents(self, x: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OEMMFFIEFF self, double const * x) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OEMMFFIEFF_GetFComponents(self, x)

    def SetInteractionMX(self, v: "std::vector< std::vector< bool,std::allocator< bool > >,std::allocator< std::vector< bool,std::allocator< bool > > > >") -> "void":
        r"""SetInteractionMX(OEMMFFIEFF self, std::vector< std::vector< bool,std::allocator< bool > >,std::allocator< std::vector< bool,std::allocator< bool > > > > v)"""
        return _oeff.OEMMFFIEFF_SetInteractionMX(self, v)

# Register OEMMFFIEFF in _oeff:
_oeff.OEMMFFIEFF_swigregister(OEMMFFIEFF)

class OEMMFFSheffieldOptions(oechem.OEOptions):
    r"""Proxy of C++ OEFF::OEMMFFSheffieldOptions class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFSheffieldOptions self) -> OEMMFFSheffieldOptions
        __init__(OEMMFFSheffieldOptions self, OEMMFFSheffieldOptions arg2) -> OEMMFFSheffieldOptions
        """
        _oeff.OEMMFFSheffieldOptions_swiginit(self, _oeff.new_OEMMFFSheffieldOptions(*args))
    __swig_destroy__ = _oeff.delete_OEMMFFSheffieldOptions

    def Validate(self) -> "bool":
        r"""Validate(OEMMFFSheffieldOptions self) -> bool"""
        return _oeff.OEMMFFSheffieldOptions_Validate(self)

    def GetDielectric(self) -> "double":
        r"""GetDielectric(OEMMFFSheffieldOptions self) -> double"""
        return _oeff.OEMMFFSheffieldOptions_GetDielectric(self)

    def SetDielectric(self, value: "double const") -> "bool":
        r"""SetDielectric(OEMMFFSheffieldOptions self, double const value) -> bool"""
        return _oeff.OEMMFFSheffieldOptions_SetDielectric(self, value)

    def GetExponent(self) -> "double":
        r"""GetExponent(OEMMFFSheffieldOptions self) -> double"""
        return _oeff.OEMMFFSheffieldOptions_GetExponent(self)

    def SetExponent(self, value: "double const") -> "bool":
        r"""SetExponent(OEMMFFSheffieldOptions self, double const value) -> bool"""
        return _oeff.OEMMFFSheffieldOptions_SetExponent(self, value)

    def GetForceFieldType(self) -> "unsigned int":
        r"""GetForceFieldType(OEMMFFSheffieldOptions self) -> unsigned int"""
        return _oeff.OEMMFFSheffieldOptions_GetForceFieldType(self)

    def SetForceFieldType(self, value: "unsigned int const") -> "bool":
        r"""SetForceFieldType(OEMMFFSheffieldOptions self, unsigned int const value) -> bool"""
        return _oeff.OEMMFFSheffieldOptions_SetForceFieldType(self, value)

# Register OEMMFFSheffieldOptions in _oeff:
_oeff.OEMMFFSheffieldOptions_swigregister(OEMMFFSheffieldOptions)

class OEMMFFSheffield(OEGenericFF2):
    r"""Proxy of C++ OEFF::OEMMFFSheffield class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFSheffield self, OEMMFFSheffieldOptions argOpts=OEFF::OEMMFFSheffieldOptions()) -> OEMMFFSheffield
        __init__(OEMMFFSheffield self, OEMMFFSheffield arg2) -> OEMMFFSheffield
        """
        _oeff.OEMMFFSheffield_swiginit(self, _oeff.new_OEMMFFSheffield(*args))
    __swig_destroy__ = _oeff.delete_OEMMFFSheffield

# Register OEMMFFSheffield in _oeff:
_oeff.OEMMFFSheffield_swigregister(OEMMFFSheffield)


def OEGetMMFFSheffieldFFType(argFF: "std::string const &") -> "unsigned int":
    r"""OEGetMMFFSheffieldFFType(std::string const & argFF) -> unsigned int"""
    return _oeff.OEGetMMFFSheffieldFFType(argFF)

def OEGetMMFFSheffieldFFName(argFF: "unsigned int const") -> "std::string":
    r"""OEGetMMFFSheffieldFFName(unsigned int const argFF) -> std::string"""
    return _oeff.OEGetMMFFSheffieldFFName(argFF)

def OEIsValidMMFFSheffieldFF(*args) -> "bool":
    r"""
    OEIsValidMMFFSheffieldFF(std::string const & argFF) -> bool
    OEIsValidMMFFSheffieldFF(unsigned int const argFF) -> bool
    """
    return _oeff.OEIsValidMMFFSheffieldFF(*args)
class OEMMFFComplex(OEComplexFF):
    r"""Proxy of C++ OEFF::OEMMFFComplex class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEMMFFComplex self, OEMMFFParams params=OEMolMMFF::OEMMFFParams(), OENonBondIntcsOptions opts=OEMolPotential::OENonBondIntcsOptions()) -> OEMMFFComplex
        __init__(OEMMFFComplex self, OEMMFFComplex arg2) -> OEMMFFComplex
        """
        _oeff.OEMMFFComplex_swiginit(self, _oeff.new_OEMMFFComplex(*args))
    __swig_destroy__ = _oeff.delete_OEMMFFComplex

# Register OEMMFFComplex in _oeff:
_oeff.OEMMFFComplex_swigregister(OEMMFFComplex)

class OESmirnoffComplex(OEComplexFF):
    r"""Proxy of C++ OEFF::OESmirnoffComplex class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESmirnoffComplex self, OESmirnoffParams params=OEMolSmirnoff::OESmirnoffParams(), OENonBondIntcsOptions opts=OEMolPotential::OENonBondIntcsOptions()) -> OESmirnoffComplex
        __init__(OESmirnoffComplex self, OESmirnoffComplex arg2) -> OESmirnoffComplex
        """
        _oeff.OESmirnoffComplex_swiginit(self, _oeff.new_OESmirnoffComplex(*args))
    __swig_destroy__ = _oeff.delete_OESmirnoffComplex

# Register OESmirnoffComplex in _oeff:
_oeff.OESmirnoffComplex_swigregister(OESmirnoffComplex)

class OEFF14SBSmirnoffParams(OEFFParams):
    r"""Proxy of C++ OEFF::OEFF14SBSmirnoffParams class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEFF14SBSmirnoffParams self) -> OEFF14SBSmirnoffParams
        __init__(OEFF14SBSmirnoffParams self, OEFF14SBSmirnoffParams arg2) -> OEFF14SBSmirnoffParams
        """
        _oeff.OEFF14SBSmirnoffParams_swiginit(self, _oeff.new_OEFF14SBSmirnoffParams(*args))
    __swig_destroy__ = _oeff.delete_OEFF14SBSmirnoffParams

    def GetTitle(self) -> "std::string":
        r"""GetTitle(OEFF14SBSmirnoffParams self) -> std::string"""
        return _oeff.OEFF14SBSmirnoffParams_GetTitle(self)

    def GetFormatType(self) -> "unsigned int":
        r"""GetFormatType(OEFF14SBSmirnoffParams self) -> unsigned int"""
        return _oeff.OEFF14SBSmirnoffParams_GetFormatType(self)

    def GetVacPermFactor(self) -> "double":
        r"""GetVacPermFactor(OEFF14SBSmirnoffParams self) -> double"""
        return _oeff.OEFF14SBSmirnoffParams_GetVacPermFactor(self)

    def GetCoulScaleFactor(self) -> "double":
        r"""GetCoulScaleFactor(OEFF14SBSmirnoffParams self) -> double"""
        return _oeff.OEFF14SBSmirnoffParams_GetCoulScaleFactor(self)

    def Load(self, *args) -> "bool":
        r"""
        Load(OEFF14SBSmirnoffParams self, unsigned int const fftype) -> bool
        Load(OEFF14SBSmirnoffParams self, std::string const & xmlFile) -> bool
        Load(OEFF14SBSmirnoffParams self, oeisstream ifs) -> bool
        """
        return _oeff.OEFF14SBSmirnoffParams_Load(self, *args)

    def GetStretchBendParams(self, arg2: "OEInteractParams", arg3: "OEAtomBase", arg4: "OEAtomBase", arg5: "OEAtomBase") -> "bool":
        r"""GetStretchBendParams(OEFF14SBSmirnoffParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5) -> bool"""
        return _oeff.OEFF14SBSmirnoffParams_GetStretchBendParams(self, arg2, arg3, arg4, arg5)

    def PrepMol(self, protein_complex: "OEMolBase", sweep: "bool"=True, warnOK: "bool"=True) -> "bool":
        r"""PrepMol(OEFF14SBSmirnoffParams self, OEMolBase protein_complex, bool sweep=True, bool warnOK=True) -> bool"""
        return _oeff.OEFF14SBSmirnoffParams_PrepMol(self, protein_complex, sweep, warnOK)

    def GetEquilibriumBondLength(self, arg2: "double &", arg3: "OEBondBase") -> "bool":
        r"""GetEquilibriumBondLength(OEFF14SBSmirnoffParams self, double & arg2, OEBondBase arg3) -> bool"""
        return _oeff.OEFF14SBSmirnoffParams_GetEquilibriumBondLength(self, arg2, arg3)

    def GetContactDistance(self, arg2: "double &", arg3: "OEAtomBase", arg4: "OEAtomBase") -> "bool":
        r"""GetContactDistance(OEFF14SBSmirnoffParams self, double & arg2, OEAtomBase arg3, OEAtomBase arg4) -> bool"""
        return _oeff.OEFF14SBSmirnoffParams_GetContactDistance(self, arg2, arg3, arg4)

    def GetEquilibriumAngle(self, arg2: "double &", arg3: "OEAtomBase", arg4: "OEAtomBase", arg5: "OEAtomBase") -> "bool":
        r"""GetEquilibriumAngle(OEFF14SBSmirnoffParams self, double & arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5) -> bool"""
        return _oeff.OEFF14SBSmirnoffParams_GetEquilibriumAngle(self, arg2, arg3, arg4, arg5)

    def GetVdwRadius(self, arg2: "double &", atm: "OEAtomBase") -> "bool":
        r"""GetVdwRadius(OEFF14SBSmirnoffParams self, double & arg2, OEAtomBase atm) -> bool"""
        return _oeff.OEFF14SBSmirnoffParams_GetVdwRadius(self, arg2, atm)

    def GetVdwEpsilon(self, arg2: "double &", atm: "OEAtomBase") -> "bool":
        r"""GetVdwEpsilon(OEFF14SBSmirnoffParams self, double & arg2, OEAtomBase atm) -> bool"""
        return _oeff.OEFF14SBSmirnoffParams_GetVdwEpsilon(self, arg2, atm)

    def GetAtomTypeIndex(self, arg2: "unsigned int") -> "unsigned int":
        r"""GetAtomTypeIndex(OEFF14SBSmirnoffParams self, unsigned int arg2) -> unsigned int"""
        return _oeff.OEFF14SBSmirnoffParams_GetAtomTypeIndex(self, arg2)

    def GetAtomTypeName(self, arg2: "unsigned int") -> "char const *":
        r"""GetAtomTypeName(OEFF14SBSmirnoffParams self, unsigned int arg2) -> char const *"""
        return _oeff.OEFF14SBSmirnoffParams_GetAtomTypeName(self, arg2)

    def GetOutOfPlaneParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OEOutOfPlaneParams > *":
        r"""
        GetOutOfPlaneParams(OEFF14SBSmirnoffParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5, OEAtomBase arg6) -> bool
        GetOutOfPlaneParams(OEFF14SBSmirnoffParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OEOutOfPlaneParams >
        """
        return _oeff.OEFF14SBSmirnoffParams_GetOutOfPlaneParams(self, *args)

    def GetSmirnoffParams(self) -> "OEMolSmirnoff::OESmirnoffParams const &":
        r"""GetSmirnoffParams(OEFF14SBSmirnoffParams self) -> OESmirnoffParams"""
        return _oeff.OEFF14SBSmirnoffParams_GetSmirnoffParams(self)

    def GetFF14SBParams(self) -> "OEAmber::OEFF14SBParams const &":
        r"""GetFF14SBParams(OEFF14SBSmirnoffParams self) -> OEAmber::OEFF14SBParams const &"""
        return _oeff.OEFF14SBSmirnoffParams_GetFF14SBParams(self)

    def GetStretchParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OEStretchParams > *":
        r"""
        GetStretchParams(OEFF14SBSmirnoffParams self, OEInteractParams arg2, OEBondBase arg3) -> bool
        GetStretchParams(OEFF14SBSmirnoffParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OEStretchParams >
        GetStretchParams(OEFF14SBSmirnoffParams self, OEMolBase mol) -> OESystem::OEIterBase< OEMolPotential::OEStretchParams > *
        """
        return _oeff.OEFF14SBSmirnoffParams_GetStretchParams(self, *args)

    def GetBendParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OEBendParams > *":
        r"""
        GetBendParams(OEFF14SBSmirnoffParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5) -> bool
        GetBendParams(OEFF14SBSmirnoffParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OEBendParams >
        GetBendParams(OEFF14SBSmirnoffParams self, OEMolBase mol) -> OESystem::OEIterBase< OEMolPotential::OEBendParams > *
        """
        return _oeff.OEFF14SBSmirnoffParams_GetBendParams(self, *args)

    def GetTorsionParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OETorsionParams > *":
        r"""
        GetTorsionParams(OEFF14SBSmirnoffParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4, OEAtomBase arg5, OEAtomBase arg6) -> bool
        GetTorsionParams(OEFF14SBSmirnoffParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OETorsionParams >
        GetTorsionParams(OEFF14SBSmirnoffParams self, OEMolBase mol) -> OESystem::OEIterBase< OEMolPotential::OETorsionParams > *
        """
        return _oeff.OEFF14SBSmirnoffParams_GetTorsionParams(self, *args)

    def GetVdwParams(self, *args) -> "OESystem::OEIterBase< OEMolPotential::OEVdwParams > *":
        r"""
        GetVdwParams(OEFF14SBSmirnoffParams self, OEInteractParams arg2, OEAtomBase arg3, OEAtomBase arg4) -> bool
        GetVdwParams(OEFF14SBSmirnoffParams self, OEMolBase mol, OEUnaryAtomPred pred=None, double const rcut=0.0) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams >
        GetVdwParams(OEFF14SBSmirnoffParams self, OEMolBase mol, OEUnaryAtomPred pred=None) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams >
        GetVdwParams(OEFF14SBSmirnoffParams self, OEMolBase mol) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams >
        GetVdwParams(OEFF14SBSmirnoffParams self, OEMolBase mol, OEMolBase host) -> OESystem::OEIterBase< OEMolPotential::OEVdwParams > *
        """
        return _oeff.OEFF14SBSmirnoffParams_GetVdwParams(self, *args)

# Register OEFF14SBSmirnoffParams in _oeff:
_oeff.OEFF14SBSmirnoffParams_swigregister(OEFF14SBSmirnoffParams)

class OEFF14SBParsleyParams(OEFF14SBSmirnoffParams):
    r"""Proxy of C++ OEFF::OEFF14SBParsleyParams class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEFF14SBParsleyParams self) -> OEFF14SBParsleyParams
        __init__(OEFF14SBParsleyParams self, OEFF14SBParsleyParams arg2) -> OEFF14SBParsleyParams
        """
        _oeff.OEFF14SBParsleyParams_swiginit(self, _oeff.new_OEFF14SBParsleyParams(*args))
    __swig_destroy__ = _oeff.delete_OEFF14SBParsleyParams

# Register OEFF14SBParsleyParams in _oeff:
_oeff.OEFF14SBParsleyParams_swigregister(OEFF14SBParsleyParams)

class OEFF14SBSmirnoff(OEGenericFF2):
    r"""Proxy of C++ OEFF::OEFF14SBSmirnoff class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEFF14SBSmirnoff self, OEFF14SBSmirnoffParams params=OEFF::OEFF14SBSmirnoffParams(), OENonBondIntcsOptions opts=OEMolPotential::OENonBondIntcsOptions()) -> OEFF14SBSmirnoff
        __init__(OEFF14SBSmirnoff self, OEFF14SBSmirnoff arg2) -> OEFF14SBSmirnoff
        """
        _oeff.OEFF14SBSmirnoff_swiginit(self, _oeff.new_OEFF14SBSmirnoff(*args))
    __swig_destroy__ = _oeff.delete_OEFF14SBSmirnoff

    def PrepMol(self, mol: "OEMolBase", sweep: "bool"=True, warnOK: "bool"=True) -> "bool":
        r"""PrepMol(OEFF14SBSmirnoff self, OEMolBase mol, bool sweep=True, bool warnOK=True) -> bool"""
        return _oeff.OEFF14SBSmirnoff_PrepMol(self, mol, sweep, warnOK)

    def GetTitle(self) -> "std::string":
        r"""GetTitle(OEFF14SBSmirnoff self) -> std::string"""
        return _oeff.OEFF14SBSmirnoff_GetTitle(self)

# Register OEFF14SBSmirnoff in _oeff:
_oeff.OEFF14SBSmirnoff_swigregister(OEFF14SBSmirnoff)

class OEFF14SBParsley(OEFF14SBSmirnoff):
    r"""Proxy of C++ OEFF::OEFF14SBParsley class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEFF14SBParsley self, OENonBondIntcsOptions opts=OEMolPotential::OENonBondIntcsOptions()) -> OEFF14SBParsley
        __init__(OEFF14SBParsley self, OEFF14SBParsley arg2) -> OEFF14SBParsley
        """
        _oeff.OEFF14SBParsley_swiginit(self, _oeff.new_OEFF14SBParsley(*args))
    __swig_destroy__ = _oeff.delete_OEFF14SBParsley

# Register OEFF14SBParsley in _oeff:
_oeff.OEFF14SBParsley_swigregister(OEFF14SBParsley)

class OEFF14SBSmirnoffComplex(OEComplexFF):
    r"""Proxy of C++ OEFF::OEFF14SBSmirnoffComplex class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEFF14SBSmirnoffComplex self, OEFF14SBSmirnoffParams params=OEFF::OEFF14SBSmirnoffParams(), OENonBondIntcsOptions opts=OEMolPotential::OENonBondIntcsOptions()) -> OEFF14SBSmirnoffComplex
        __init__(OEFF14SBSmirnoffComplex self, OEFF14SBSmirnoffComplex arg2) -> OEFF14SBSmirnoffComplex
        """
        _oeff.OEFF14SBSmirnoffComplex_swiginit(self, _oeff.new_OEFF14SBSmirnoffComplex(*args))
    __swig_destroy__ = _oeff.delete_OEFF14SBSmirnoffComplex

    def PrepMol(self, mol: "OEMolBase", sweep: "bool"=True, warnOK: "bool"=True) -> "bool":
        r"""PrepMol(OEFF14SBSmirnoffComplex self, OEMolBase mol, bool sweep=True, bool warnOK=True) -> bool"""
        return _oeff.OEFF14SBSmirnoffComplex_PrepMol(self, mol, sweep, warnOK)

# Register OEFF14SBSmirnoffComplex in _oeff:
_oeff.OEFF14SBSmirnoffComplex_swigregister(OEFF14SBSmirnoffComplex)

class OEFF14SBParsleyComplex(OEFF14SBSmirnoffComplex):
    r"""Proxy of C++ OEFF::OEFF14SBParsleyComplex class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEFF14SBParsleyComplex self, OENonBondIntcsOptions opts=OEMolPotential::OENonBondIntcsOptions()) -> OEFF14SBParsleyComplex
        __init__(OEFF14SBParsleyComplex self, OEFF14SBParsleyComplex arg2) -> OEFF14SBParsleyComplex
        """
        _oeff.OEFF14SBParsleyComplex_swiginit(self, _oeff.new_OEFF14SBParsleyComplex(*args))
    __swig_destroy__ = _oeff.delete_OEFF14SBParsleyComplex

# Register OEFF14SBParsleyComplex in _oeff:
_oeff.OEFF14SBParsleyComplex_swigregister(OEFF14SBParsleyComplex)

class FFParameterPtr(oechem.OEParameter):
    r"""Proxy of C++ OESystem::OEPointerParameter< OEMolPotential::OEForceField > class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oeff.delete_FFParameterPtr

    def TypedParameterTypeID(self) -> "void const *":
        r"""TypedParameterTypeID(FFParameterPtr self) -> void const *"""
        return _oeff.FFParameterPtr_TypedParameterTypeID(self)

    def ClassID(self) -> "std::string":
        r"""ClassID(FFParameterPtr self) -> std::string"""
        return _oeff.FFParameterPtr_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(FFParameterPtr self) -> void const *"""
        return _oeff.FFParameterPtr_FactoryTypeID(self)

    def AddLegalValue(self, arg2: "std::string const &") -> "bool":
        r"""AddLegalValue(FFParameterPtr self, std::string const & arg2) -> bool"""
        return _oeff.FFParameterPtr_AddLegalValue(self, arg2)

    def AddIllegalValue(self, arg2: "std::string const &") -> "bool":
        r"""AddIllegalValue(FFParameterPtr self, std::string const & arg2) -> bool"""
        return _oeff.FFParameterPtr_AddIllegalValue(self, arg2)

    def AddLegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddLegalRange(FFParameterPtr self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oeff.FFParameterPtr_AddLegalRange(self, arg2, arg3)

    def AddIllegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddIllegalRange(FFParameterPtr self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oeff.FFParameterPtr_AddIllegalRange(self, arg2, arg3)

    def WriteValueAndDefaultBinary(self, arg2: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(FFParameterPtr self, unsigned char * arg2) -> size_t"""
        return _oeff.FFParameterPtr_WriteValueAndDefaultBinary(self, arg2)

    def ReadValueAndDefaultBinary(self, arg2: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(FFParameterPtr self, unsigned char const * arg2) -> size_t"""
        return _oeff.FFParameterPtr_ReadValueAndDefaultBinary(self, arg2)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(FFParameterPtr self) -> size_t"""
        return _oeff.FFParameterPtr_ValueAndDefaultBinarySize(self)

    def LoadDefault(self) -> "bool":
        r"""LoadDefault(FFParameterPtr self) -> bool"""
        return _oeff.FFParameterPtr_LoadDefault(self)

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(FFParameterPtr self, unsigned int const idx=0) -> bool"""
        return _oeff.FFParameterPtr_GetHasValue(self, idx)

    def GetHasDefault(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasDefault(FFParameterPtr self, unsigned int const idx=0) -> bool"""
        return _oeff.FFParameterPtr_GetHasDefault(self, idx)

# Register FFParameterPtr in _oeff:
_oeff.FFParameterPtr_swigregister(FFParameterPtr)

class FFParameter(FFParameterPtr):
    r"""Proxy of C++ OESystem::OEMultiParameter< OEMolPotential::OEForceField > class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oeff.delete_FFParameter

    def WriteValueAndDefaultBinary(self, arg2: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(FFParameter self, unsigned char * arg2) -> size_t"""
        return _oeff.FFParameter_WriteValueAndDefaultBinary(self, arg2)

    def ReadValueAndDefaultBinary(self, arg2: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(FFParameter self, unsigned char const * arg2) -> size_t"""
        return _oeff.FFParameter_ReadValueAndDefaultBinary(self, arg2)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(FFParameter self) -> size_t"""
        return _oeff.FFParameter_ValueAndDefaultBinarySize(self)

    def AddLegalEntry(self, idxKey: "unsigned int const", strKey: "std::string const &", lib: "OEForceField") -> "bool":
        r"""AddLegalEntry(FFParameter self, unsigned int const idxKey, std::string const & strKey, OEForceField lib) -> bool"""
        return _oeff.FFParameter_AddLegalEntry(self, idxKey, strKey, lib)

    def LoadValue(self) -> "bool":
        r"""LoadValue(FFParameter self) -> bool"""
        return _oeff.FFParameter_LoadValue(self)

    def SetValue(self, *args) -> "bool":
        r"""
        SetValue(FFParameter self, unsigned int const type) -> bool
        SetValue(FFParameter self, std::string const & name) -> bool
        SetValue(FFParameter self, OEForceField value) -> bool
        """
        return _oeff.FFParameter_SetValue(self, *args)

    def SetDefault(self, type: "unsigned int const") -> "bool":
        r"""SetDefault(FFParameter self, unsigned int const type) -> bool"""
        return _oeff.FFParameter_SetDefault(self, type)

    def GetUIntSetting(self) -> "unsigned int":
        r"""GetUIntSetting(FFParameter self) -> unsigned int"""
        return _oeff.FFParameter_GetUIntSetting(self)

    def IsValidString(self, arg2: "std::string const &") -> "bool":
        r"""IsValidString(FFParameter self, std::string const & arg2) -> bool"""
        return _oeff.FFParameter_IsValidString(self, arg2)

# Register FFParameter in _oeff:
_oeff.FFParameter_swigregister(FFParameter)

class ComplexFFParameterPtr(oechem.OEParameter):
    r"""Proxy of C++ OESystem::OEPointerParameter< OEFF::OEComplexFF > class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oeff.delete_ComplexFFParameterPtr

    def TypedParameterTypeID(self) -> "void const *":
        r"""TypedParameterTypeID(ComplexFFParameterPtr self) -> void const *"""
        return _oeff.ComplexFFParameterPtr_TypedParameterTypeID(self)

    def ClassID(self) -> "std::string":
        r"""ClassID(ComplexFFParameterPtr self) -> std::string"""
        return _oeff.ComplexFFParameterPtr_ClassID(self)

    def FactoryTypeID(self) -> "void const *":
        r"""FactoryTypeID(ComplexFFParameterPtr self) -> void const *"""
        return _oeff.ComplexFFParameterPtr_FactoryTypeID(self)

    def AddLegalValue(self, arg2: "std::string const &") -> "bool":
        r"""AddLegalValue(ComplexFFParameterPtr self, std::string const & arg2) -> bool"""
        return _oeff.ComplexFFParameterPtr_AddLegalValue(self, arg2)

    def AddIllegalValue(self, arg2: "std::string const &") -> "bool":
        r"""AddIllegalValue(ComplexFFParameterPtr self, std::string const & arg2) -> bool"""
        return _oeff.ComplexFFParameterPtr_AddIllegalValue(self, arg2)

    def AddLegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddLegalRange(ComplexFFParameterPtr self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oeff.ComplexFFParameterPtr_AddLegalRange(self, arg2, arg3)

    def AddIllegalRange(self, arg2: "std::string const &", arg3: "std::string const &") -> "bool":
        r"""AddIllegalRange(ComplexFFParameterPtr self, std::string const & arg2, std::string const & arg3) -> bool"""
        return _oeff.ComplexFFParameterPtr_AddIllegalRange(self, arg2, arg3)

    def WriteValueAndDefaultBinary(self, arg2: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(ComplexFFParameterPtr self, unsigned char * arg2) -> size_t"""
        return _oeff.ComplexFFParameterPtr_WriteValueAndDefaultBinary(self, arg2)

    def ReadValueAndDefaultBinary(self, arg2: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(ComplexFFParameterPtr self, unsigned char const * arg2) -> size_t"""
        return _oeff.ComplexFFParameterPtr_ReadValueAndDefaultBinary(self, arg2)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(ComplexFFParameterPtr self) -> size_t"""
        return _oeff.ComplexFFParameterPtr_ValueAndDefaultBinarySize(self)

    def LoadDefault(self) -> "bool":
        r"""LoadDefault(ComplexFFParameterPtr self) -> bool"""
        return _oeff.ComplexFFParameterPtr_LoadDefault(self)

    def GetHasValue(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasValue(ComplexFFParameterPtr self, unsigned int const idx=0) -> bool"""
        return _oeff.ComplexFFParameterPtr_GetHasValue(self, idx)

    def GetHasDefault(self, idx: "unsigned int const"=0) -> "bool":
        r"""GetHasDefault(ComplexFFParameterPtr self, unsigned int const idx=0) -> bool"""
        return _oeff.ComplexFFParameterPtr_GetHasDefault(self, idx)

# Register ComplexFFParameterPtr in _oeff:
_oeff.ComplexFFParameterPtr_swigregister(ComplexFFParameterPtr)

class ComplexFFParameter(ComplexFFParameterPtr):
    r"""Proxy of C++ OESystem::OEMultiParameter< OEFF::OEComplexFF > class."""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _oeff.delete_ComplexFFParameter

    def WriteValueAndDefaultBinary(self, arg2: "unsigned char *") -> "size_t":
        r"""WriteValueAndDefaultBinary(ComplexFFParameter self, unsigned char * arg2) -> size_t"""
        return _oeff.ComplexFFParameter_WriteValueAndDefaultBinary(self, arg2)

    def ReadValueAndDefaultBinary(self, arg2: "unsigned char const *") -> "size_t":
        r"""ReadValueAndDefaultBinary(ComplexFFParameter self, unsigned char const * arg2) -> size_t"""
        return _oeff.ComplexFFParameter_ReadValueAndDefaultBinary(self, arg2)

    def ValueAndDefaultBinarySize(self) -> "size_t":
        r"""ValueAndDefaultBinarySize(ComplexFFParameter self) -> size_t"""
        return _oeff.ComplexFFParameter_ValueAndDefaultBinarySize(self)

    def AddLegalEntry(self, idxKey: "unsigned int const", strKey: "std::string const &", lib: "OEComplexFF") -> "bool":
        r"""AddLegalEntry(ComplexFFParameter self, unsigned int const idxKey, std::string const & strKey, OEComplexFF lib) -> bool"""
        return _oeff.ComplexFFParameter_AddLegalEntry(self, idxKey, strKey, lib)

    def LoadValue(self) -> "bool":
        r"""LoadValue(ComplexFFParameter self) -> bool"""
        return _oeff.ComplexFFParameter_LoadValue(self)

    def SetValue(self, *args) -> "bool":
        r"""
        SetValue(ComplexFFParameter self, unsigned int const type) -> bool
        SetValue(ComplexFFParameter self, std::string const & name) -> bool
        SetValue(ComplexFFParameter self, OEComplexFF value) -> bool
        """
        return _oeff.ComplexFFParameter_SetValue(self, *args)

    def SetDefault(self, type: "unsigned int const") -> "bool":
        r"""SetDefault(ComplexFFParameter self, unsigned int const type) -> bool"""
        return _oeff.ComplexFFParameter_SetDefault(self, type)

    def GetUIntSetting(self) -> "unsigned int":
        r"""GetUIntSetting(ComplexFFParameter self) -> unsigned int"""
        return _oeff.ComplexFFParameter_GetUIntSetting(self)

    def IsValidString(self, arg2: "std::string const &") -> "bool":
        r"""IsValidString(ComplexFFParameter self, std::string const & arg2) -> bool"""
        return _oeff.ComplexFFParameter_IsValidString(self, arg2)

# Register ComplexFFParameter in _oeff:
_oeff.ComplexFFParameter_swigregister(ComplexFFParameter)

class OEForceFieldParameter(FFParameter):
    r"""Proxy of C++ OEFF::OEForceFieldParameter class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEForceFieldParameter self, std::string const & name, bool const customAllowed) -> OEForceFieldParameter
        __init__(OEForceFieldParameter self) -> OEForceFieldParameter
        __init__(OEForceFieldParameter self, OEForceFieldParameter arg2) -> OEForceFieldParameter
        """
        _oeff.OEForceFieldParameter_swiginit(self, _oeff.new_OEForceFieldParameter(*args))
    __swig_destroy__ = _oeff.delete_OEForceFieldParameter

    def SetValue(self, *args) -> "bool":
        r"""
        SetValue(OEForceFieldParameter self, std::string const & name) -> bool
        SetValue(OEForceFieldParameter self, unsigned int const type) -> bool
        SetValue(OEForceFieldParameter self, OEForceField value) -> bool
        """
        return _oeff.OEForceFieldParameter_SetValue(self, *args)

# Register OEForceFieldParameter in _oeff:
_oeff.OEForceFieldParameter_swigregister(OEForceFieldParameter)

class OEComplexFFParameter(ComplexFFParameter):
    r"""Proxy of C++ OEFF::OEComplexFFParameter class."""

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

    def __init__(self, *args):
        r"""
        __init__(OEComplexFFParameter self, std::string const & name, bool const customAllowed) -> OEComplexFFParameter
        __init__(OEComplexFFParameter self) -> OEComplexFFParameter
        __init__(OEComplexFFParameter self, OEComplexFFParameter arg2) -> OEComplexFFParameter
        """
        _oeff.OEComplexFFParameter_swiginit(self, _oeff.new_OEComplexFFParameter(*args))
    __swig_destroy__ = _oeff.delete_OEComplexFFParameter

    def SetValue(self, *args) -> "bool":
        r"""
        SetValue(OEComplexFFParameter self, std::string const & name) -> bool
        SetValue(OEComplexFFParameter self, unsigned int const type) -> bool
        SetValue(OEComplexFFParameter self, OEComplexFF value) -> bool
        """
        return _oeff.OEComplexFFParameter_SetValue(self, *args)

# Register OEComplexFFParameter in _oeff:
_oeff.OEComplexFFParameter_swigregister(OEComplexFFParameter)

OE_OEFF_VERSION = _oeff.OE_OEFF_VERSION


def OEFFGetRelease() -> "char const *":
    r"""OEFFGetRelease() -> char const *"""
    return _oeff.OEFFGetRelease()

def OEFFGetVersion() -> "unsigned int":
    r"""OEFFGetVersion() -> unsigned int"""
    return _oeff.OEFFGetVersion()

def OEFFGetArch() -> "char const *":
    r"""OEFFGetArch() -> char const *"""
    return _oeff.OEFFGetArch()

def OEFFGetPlatform() -> "char const *":
    r"""OEFFGetPlatform() -> char const *"""
    return _oeff.OEFFGetPlatform()

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

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

def OEFFGetSite(*args) -> "std::string":
    r"""
    OEFFGetSite(std::string & site) -> bool
    OEFFGetSite() -> std::string
    """
    return _oeff.OEFFGetSite(*args)
class OESheffieldOptions(oechem.OEOptions):
    r"""Proxy of C++ OESheff::OESheffieldOptions class."""

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

    def __init__(self, *args):
        r"""
        __init__(OESheffieldOptions self) -> OESheffieldOptions
        __init__(OESheffieldOptions self, OESheffieldOptions arg2) -> OESheffieldOptions
        """
        _oeff.OESheffieldOptions_swiginit(self, _oeff.new_OESheffieldOptions(*args))
    __swig_destroy__ = _oeff.delete_OESheffieldOptions

    def GetA(self) -> "double":
        r"""GetA(OESheffieldOptions self) -> double"""
        return _oeff.OESheffieldOptions_GetA(self)

    def SetA(self, value: "double const") -> "bool":
        r"""SetA(OESheffieldOptions self, double const value) -> bool"""
        return _oeff.OESheffieldOptions_SetA(self, value)

    def GetB(self) -> "double":
        r"""GetB(OESheffieldOptions self) -> double"""
        return _oeff.OESheffieldOptions_GetB(self)

    def SetB(self, value: "double const") -> "bool":
        r"""SetB(OESheffieldOptions self, double const value) -> bool"""
        return _oeff.OESheffieldOptions_SetB(self, value)

    def GetSolventDielectricConstant(self) -> "double":
        r"""GetSolventDielectricConstant(OESheffieldOptions self) -> double"""
        return _oeff.OESheffieldOptions_GetSolventDielectricConstant(self)

    def SetSolventDielectricConstant(self, value: "double const") -> "bool":
        r"""SetSolventDielectricConstant(OESheffieldOptions self, double const value) -> bool"""
        return _oeff.OESheffieldOptions_SetSolventDielectricConstant(self, value)

    def SetSoluteDielectricConstant(self, value: "double const") -> "bool":
        r"""SetSoluteDielectricConstant(OESheffieldOptions self, double const value) -> bool"""
        return _oeff.OESheffieldOptions_SetSoluteDielectricConstant(self, value)

    def GetSoluteDielectricConstant(self) -> "double":
        r"""GetSoluteDielectricConstant(OESheffieldOptions self) -> double"""
        return _oeff.OESheffieldOptions_GetSoluteDielectricConstant(self)

# Register OESheffieldOptions in _oeff:
_oeff.OESheffieldOptions_swigregister(OESheffieldOptions)

class OESheffield(OEMolFunc2):
    r"""Proxy of C++ OESheff::OESheffield class."""

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

    def Setup(self, mol: "OEMolBase") -> "bool":
        r"""Setup(OESheffield self, OEMolBase mol) -> bool"""
        return _oeff.OESheffield_Setup(self, mol)

    def NumVar(self) -> "unsigned int":
        r"""NumVar(OESheffield self) -> unsigned int"""
        return _oeff.OESheffield_NumVar(self)

    def __call__(self, *args) -> "bool":
        r"""
        __call__(OESheffield self, double const * x) -> double
        __call__(OESheffield self, double const * x, double * g) -> double
        __call__(OESheffield self, double const * x, double * h, double * g) -> bool
        """
        return _oeff.OESheffield___call__(self, *args)

    def GetFComponents(self, arg2: "double const *") -> "OESystem::OEIterBase< OEOpt::OEFComponent > *":
        r"""GetFComponents(OESheffield self, double const * arg2) -> OESystem::OEIterBase< OEOpt::OEFComponent > *"""
        return _oeff.OESheffield_GetFComponents(self, arg2)

    def ClearPredicates(self) -> "void":
        r"""ClearPredicates(OESheffield self)"""
        return _oeff.OESheffield_ClearPredicates(self)

    def Clear(self) -> "void":
        r"""Clear(OESheffield self)"""
        return _oeff.OESheffield_Clear(self)

    def SetCharges(self, ch: "float *") -> "void":
        r"""SetCharges(OESheffield self, float * ch)"""
        return _oeff.OESheffield_SetCharges(self, ch)

    def SetRadii(self, ra: "float *") -> "void":
        r"""SetRadii(OESheffield self, float * ra)"""
        return _oeff.OESheffield_SetRadii(self, ra)

    def GetDielectricDerivative(self, x: "double const *", solv_diel: "double") -> "double":
        r"""GetDielectricDerivative(OESheffield self, double const * x, double solv_diel) -> double"""
        return _oeff.OESheffield_GetDielectricDerivative(self, x, solv_diel)

    def __init__(self, *args):
        r"""
        __init__(OESheffield self, OESheffieldOptions argOptions) -> OESheffield
        __init__(OESheffield self, OESheffield arg2) -> OESheffield
        __init__(OESheffield self, double aa=1.553149, double bb=0.735694) -> OESheffield
        """
        _oeff.OESheffield_swiginit(self, _oeff.new_OESheffield(*args))

# Register OESheffield in _oeff:
_oeff.OESheffield_swigregister(OESheffield)



