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


import sys
if sys.platform.find("linux") != -1:
    dlflags = sys.getdlopenflags()
    import ctypes
    sys.setdlopenflags(dlflags | ctypes.RTLD_GLOBAL)



from sys import version_info as _swig_python_version_info
# Import the low-level C/C++ module
if getattr(globals().get("__spec__"), "parent", None) or __package__ or "." in __name__:
    from . import _openbabel
else:
    import _openbabel

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

_swig_new_instance_method = _openbabel.SWIG_PyInstanceMethod_New
_swig_new_static_method = _openbabel.SWIG_PyStaticMethod_New

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 == "this":
            set(self, name, value)
        elif name == "thisown":
            self.this.own(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__)



if sys.platform.find("linux") != -1:
    sys.setdlopenflags(dlflags)

class 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__ = _openbabel.delete_SwigPyIterator
    value = _swig_new_instance_method(_openbabel.SwigPyIterator_value)
    incr = _swig_new_instance_method(_openbabel.SwigPyIterator_incr)
    decr = _swig_new_instance_method(_openbabel.SwigPyIterator_decr)
    distance = _swig_new_instance_method(_openbabel.SwigPyIterator_distance)
    equal = _swig_new_instance_method(_openbabel.SwigPyIterator_equal)
    copy = _swig_new_instance_method(_openbabel.SwigPyIterator_copy)
    next = _swig_new_instance_method(_openbabel.SwigPyIterator_next)
    __next__ = _swig_new_instance_method(_openbabel.SwigPyIterator___next__)
    previous = _swig_new_instance_method(_openbabel.SwigPyIterator_previous)
    advance = _swig_new_instance_method(_openbabel.SwigPyIterator_advance)
    __eq__ = _swig_new_instance_method(_openbabel.SwigPyIterator___eq__)
    __ne__ = _swig_new_instance_method(_openbabel.SwigPyIterator___ne__)
    __iadd__ = _swig_new_instance_method(_openbabel.SwigPyIterator___iadd__)
    __isub__ = _swig_new_instance_method(_openbabel.SwigPyIterator___isub__)
    __add__ = _swig_new_instance_method(_openbabel.SwigPyIterator___add__)
    __sub__ = _swig_new_instance_method(_openbabel.SwigPyIterator___sub__)
    def __iter__(self):
        return self

# Register SwigPyIterator in _openbabel:
_openbabel.SwigPyIterator_swigregister(SwigPyIterator)
class vectorInt(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorInt_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorInt___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorInt___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorInt___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorInt___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorInt___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorInt___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorInt___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorInt___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorInt___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorInt_clear)

    def __init__(self, *args):
        _openbabel.vectorInt_swiginit(self, _openbabel.new_vectorInt(*args))
    __swig_destroy__ = _openbabel.delete_vectorInt

# Register vectorInt in _openbabel:
_openbabel.vectorInt_swigregister(vectorInt)
class vectorUnsignedInt(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorUnsignedInt_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorUnsignedInt___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorUnsignedInt___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorUnsignedInt___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorUnsignedInt___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorUnsignedInt___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorUnsignedInt___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorUnsignedInt___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorUnsignedInt___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorUnsignedInt___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorUnsignedInt_clear)

    def __init__(self, *args):
        _openbabel.vectorUnsignedInt_swiginit(self, _openbabel.new_vectorUnsignedInt(*args))
    __swig_destroy__ = _openbabel.delete_vectorUnsignedInt

# Register vectorUnsignedInt in _openbabel:
_openbabel.vectorUnsignedInt_swigregister(vectorUnsignedInt)
class vectorvInt(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorvInt_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorvInt___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorvInt___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorvInt___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorvInt___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorvInt___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorvInt___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorvInt___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorvInt___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorvInt___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorvInt_clear)

    def __init__(self, *args):
        _openbabel.vectorvInt_swiginit(self, _openbabel.new_vectorvInt(*args))
    __swig_destroy__ = _openbabel.delete_vectorvInt

# Register vectorvInt in _openbabel:
_openbabel.vectorvInt_swigregister(vectorvInt)
class vectorDouble(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorDouble_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorDouble___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorDouble___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorDouble___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorDouble___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorDouble___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorDouble___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorDouble___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorDouble___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorDouble___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorDouble_clear)

    def __init__(self, *args):
        _openbabel.vectorDouble_swiginit(self, _openbabel.new_vectorDouble(*args))
    __swig_destroy__ = _openbabel.delete_vectorDouble

# Register vectorDouble in _openbabel:
_openbabel.vectorDouble_swigregister(vectorDouble)
class vectorULong(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorULong_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorULong___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorULong___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorULong___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorULong___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorULong___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorULong___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorULong___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorULong___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorULong___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorULong_clear)

    def __init__(self, *args):
        _openbabel.vectorULong_swiginit(self, _openbabel.new_vectorULong(*args))
    __swig_destroy__ = _openbabel.delete_vectorULong

# Register vectorULong in _openbabel:
_openbabel.vectorULong_swigregister(vectorULong)
class vectorString(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorString_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorString___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorString___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorString___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorString___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorString___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorString___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorString___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorString___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorString___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorString_clear)

    def __init__(self, *args):
        _openbabel.vectorString_swiginit(self, _openbabel.new_vectorString(*args))
    __swig_destroy__ = _openbabel.delete_vectorString

# Register vectorString in _openbabel:
_openbabel.vectorString_swigregister(vectorString)
class vectorVector3(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorVector3_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorVector3___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorVector3___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorVector3___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorVector3___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorVector3___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorVector3___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorVector3___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorVector3___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorVector3___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorVector3_clear)

    def __init__(self, *args):
        _openbabel.vectorVector3_swiginit(self, _openbabel.new_vectorVector3(*args))
    __swig_destroy__ = _openbabel.delete_vectorVector3

# Register vectorVector3 in _openbabel:
_openbabel.vectorVector3_swigregister(vectorVector3)
class vectorvVector3(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorvVector3_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorvVector3___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorvVector3___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorvVector3___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorvVector3___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorvVector3___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorvVector3___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorvVector3___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorvVector3___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorvVector3___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorvVector3_clear)

    def __init__(self, *args):
        _openbabel.vectorvVector3_swiginit(self, _openbabel.new_vectorvVector3(*args))
    __swig_destroy__ = _openbabel.delete_vectorvVector3

# Register vectorvVector3 in _openbabel:
_openbabel.vectorvVector3_swigregister(vectorvVector3)
class vectorOBMol(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorOBMol_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorOBMol___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorOBMol___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorOBMol___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorOBMol___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorOBMol___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorOBMol___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorOBMol___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorOBMol___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorOBMol___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorOBMol_clear)

    def __init__(self, *args):
        _openbabel.vectorOBMol_swiginit(self, _openbabel.new_vectorOBMol(*args))
    __swig_destroy__ = _openbabel.delete_vectorOBMol

# Register vectorOBMol in _openbabel:
_openbabel.vectorOBMol_swigregister(vectorOBMol)
class vectorOBBond(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorOBBond_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorOBBond___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorOBBond___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorOBBond___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorOBBond___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorOBBond___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorOBBond___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorOBBond___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorOBBond___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorOBBond___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorOBBond_clear)

    def __init__(self, *args):
        _openbabel.vectorOBBond_swiginit(self, _openbabel.new_vectorOBBond(*args))
    __swig_destroy__ = _openbabel.delete_vectorOBBond

# Register vectorOBBond in _openbabel:
_openbabel.vectorOBBond_swigregister(vectorOBBond)
class vectorOBResidue(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorOBResidue_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorOBResidue___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorOBResidue___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorOBResidue___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorOBResidue___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorOBResidue___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorOBResidue___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorOBResidue___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorOBResidue___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorOBResidue___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorOBResidue_clear)

    def __init__(self, *args):
        _openbabel.vectorOBResidue_swiginit(self, _openbabel.new_vectorOBResidue(*args))
    __swig_destroy__ = _openbabel.delete_vectorOBResidue

# Register vectorOBResidue in _openbabel:
_openbabel.vectorOBResidue_swigregister(vectorOBResidue)
class vectorOBRing(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorOBRing_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorOBRing___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorOBRing___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorOBRing___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorOBRing___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorOBRing___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorOBRing___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorOBRing___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorOBRing___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorOBRing___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorOBRing_clear)

    def __init__(self, *args):
        _openbabel.vectorOBRing_swiginit(self, _openbabel.new_vectorOBRing(*args))
    __swig_destroy__ = _openbabel.delete_vectorOBRing

# Register vectorOBRing in _openbabel:
_openbabel.vectorOBRing_swigregister(vectorOBRing)
class vectorpOBRing(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorpOBRing_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorpOBRing___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorpOBRing___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorpOBRing___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorpOBRing___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorpOBRing___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorpOBRing___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorpOBRing___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorpOBRing___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorpOBRing___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorpOBRing_clear)

    def __init__(self, *args):
        _openbabel.vectorpOBRing_swiginit(self, _openbabel.new_vectorpOBRing(*args))
    __swig_destroy__ = _openbabel.delete_vectorpOBRing

# Register vectorpOBRing in _openbabel:
_openbabel.vectorpOBRing_swigregister(vectorpOBRing)
class vectorpOBGenericData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorpOBGenericData_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorpOBGenericData___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorpOBGenericData___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorpOBGenericData___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorpOBGenericData___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorpOBGenericData___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorpOBGenericData___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorpOBGenericData___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorpOBGenericData___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorpOBGenericData___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorpOBGenericData_clear)

    def __init__(self, *args):
        _openbabel.vectorpOBGenericData_swiginit(self, _openbabel.new_vectorpOBGenericData(*args))
    __swig_destroy__ = _openbabel.delete_vectorpOBGenericData

# Register vectorpOBGenericData in _openbabel:
_openbabel.vectorpOBGenericData_swigregister(vectorpOBGenericData)
class vectorpOBInternalCoord(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vectorpOBInternalCoord_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vectorpOBInternalCoord___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vectorpOBInternalCoord___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vectorpOBInternalCoord___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vectorpOBInternalCoord___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vectorpOBInternalCoord___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vectorpOBInternalCoord___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vectorpOBInternalCoord___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vectorpOBInternalCoord___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vectorpOBInternalCoord___setitem__)
    clear = _swig_new_instance_method(_openbabel.vectorpOBInternalCoord_clear)

    def __init__(self, *args):
        _openbabel.vectorpOBInternalCoord_swiginit(self, _openbabel.new_vectorpOBInternalCoord(*args))
    __swig_destroy__ = _openbabel.delete_vectorpOBInternalCoord

# Register vectorpOBInternalCoord in _openbabel:
_openbabel.vectorpOBInternalCoord_swigregister(vectorpOBInternalCoord)
class pairUIntUInt(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _openbabel.pairUIntUInt_swiginit(self, _openbabel.new_pairUIntUInt(*args))
    first = property(_openbabel.pairUIntUInt_first_get, _openbabel.pairUIntUInt_first_set)
    second = property(_openbabel.pairUIntUInt_second_get, _openbabel.pairUIntUInt_second_set)
    def __len__(self):
        return 2
    def __repr__(self):
        return str((self.first, self.second))
    def __getitem__(self, index): 
        if not (index % 2):
            return self.first
        else:
            return self.second
    def __setitem__(self, index, val):
        if not (index % 2):
            self.first = val
        else:
            self.second = val
    __swig_destroy__ = _openbabel.delete_pairUIntUInt

# Register pairUIntUInt in _openbabel:
_openbabel.pairUIntUInt_swigregister(pairUIntUInt)
class vpairUIntUInt(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vpairUIntUInt_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vpairUIntUInt___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vpairUIntUInt___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vpairUIntUInt___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vpairUIntUInt___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vpairUIntUInt___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vpairUIntUInt___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vpairUIntUInt___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vpairUIntUInt___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vpairUIntUInt___setitem__)
    clear = _swig_new_instance_method(_openbabel.vpairUIntUInt_clear)

    def __init__(self, *args):
        _openbabel.vpairUIntUInt_swiginit(self, _openbabel.new_vpairUIntUInt(*args))
    __swig_destroy__ = _openbabel.delete_vpairUIntUInt

# Register vpairUIntUInt in _openbabel:
_openbabel.vpairUIntUInt_swigregister(vpairUIntUInt)
class vvpairUIntUInt(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    iterator = _swig_new_instance_method(_openbabel.vvpairUIntUInt_iterator)
    def __iter__(self):
        return self.iterator()
    __nonzero__ = _swig_new_instance_method(_openbabel.vvpairUIntUInt___nonzero__)
    __bool__ = _swig_new_instance_method(_openbabel.vvpairUIntUInt___bool__)
    __len__ = _swig_new_instance_method(_openbabel.vvpairUIntUInt___len__)
    __getslice__ = _swig_new_instance_method(_openbabel.vvpairUIntUInt___getslice__)
    __setslice__ = _swig_new_instance_method(_openbabel.vvpairUIntUInt___setslice__)
    __delslice__ = _swig_new_instance_method(_openbabel.vvpairUIntUInt___delslice__)
    __delitem__ = _swig_new_instance_method(_openbabel.vvpairUIntUInt___delitem__)
    __getitem__ = _swig_new_instance_method(_openbabel.vvpairUIntUInt___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.vvpairUIntUInt___setitem__)
    pop = _swig_new_instance_method(_openbabel.vvpairUIntUInt_pop)
    append = _swig_new_instance_method(_openbabel.vvpairUIntUInt_append)
    empty = _swig_new_instance_method(_openbabel.vvpairUIntUInt_empty)
    size = _swig_new_instance_method(_openbabel.vvpairUIntUInt_size)
    swap = _swig_new_instance_method(_openbabel.vvpairUIntUInt_swap)
    begin = _swig_new_instance_method(_openbabel.vvpairUIntUInt_begin)
    end = _swig_new_instance_method(_openbabel.vvpairUIntUInt_end)
    rbegin = _swig_new_instance_method(_openbabel.vvpairUIntUInt_rbegin)
    rend = _swig_new_instance_method(_openbabel.vvpairUIntUInt_rend)
    clear = _swig_new_instance_method(_openbabel.vvpairUIntUInt_clear)
    get_allocator = _swig_new_instance_method(_openbabel.vvpairUIntUInt_get_allocator)
    pop_back = _swig_new_instance_method(_openbabel.vvpairUIntUInt_pop_back)
    erase = _swig_new_instance_method(_openbabel.vvpairUIntUInt_erase)

    def __init__(self, *args):
        _openbabel.vvpairUIntUInt_swiginit(self, _openbabel.new_vvpairUIntUInt(*args))
    push_back = _swig_new_instance_method(_openbabel.vvpairUIntUInt_push_back)
    front = _swig_new_instance_method(_openbabel.vvpairUIntUInt_front)
    back = _swig_new_instance_method(_openbabel.vvpairUIntUInt_back)
    assign = _swig_new_instance_method(_openbabel.vvpairUIntUInt_assign)
    resize = _swig_new_instance_method(_openbabel.vvpairUIntUInt_resize)
    insert = _swig_new_instance_method(_openbabel.vvpairUIntUInt_insert)
    reserve = _swig_new_instance_method(_openbabel.vvpairUIntUInt_reserve)
    capacity = _swig_new_instance_method(_openbabel.vvpairUIntUInt_capacity)
    __swig_destroy__ = _openbabel.delete_vvpairUIntUInt

# Register vvpairUIntUInt in _openbabel:
_openbabel.vvpairUIntUInt_swigregister(vvpairUIntUInt)
toAliasData = _openbabel.toAliasData
toAngleData = _openbabel.toAngleData
toCommentData = _openbabel.toCommentData
toConformerData = _openbabel.toConformerData
toExternalBondData = _openbabel.toExternalBondData
toGridData = _openbabel.toGridData
toMatrixData = _openbabel.toMatrixData
toNasaThermoData = _openbabel.toNasaThermoData
toPairData = _openbabel.toPairData
toPairInteger = _openbabel.toPairInteger
toPairFloatingPoint = _openbabel.toPairFloatingPoint
toRateData = _openbabel.toRateData
toRotamerList = _openbabel.toRotamerList
toRotationData = _openbabel.toRotationData
toSerialNums = _openbabel.toSerialNums
toSetData = _openbabel.toSetData
toSymmetryData = _openbabel.toSymmetryData
toTorsionData = _openbabel.toTorsionData
toUnitCell = _openbabel.toUnitCell
toVectorData = _openbabel.toVectorData
toVibrationData = _openbabel.toVibrationData
toVirtualBond = _openbabel.toVirtualBond
toStereoBase = _openbabel.toStereoBase
toTetrahedralStereo = _openbabel.toTetrahedralStereo
toCisTransStereo = _openbabel.toCisTransStereo
toSquarePlanarStereo = _openbabel.toSquarePlanarStereo
class OBGlobalDataBase(object):
    r"""
    <openbabel/data.h>
         Base data table class, handles reading data files

         Base data table class--reads ASCII data files in various formats
         -# Checks for the environment variable _envvar (defaults to "BABEL_DATADIR")
         - Tries the _subdir directory if defined (def. "data") and then the main directory
         -# Checks for the directory _dir (def. determined by the build environment)
         - Tries the subdirectory corresponding to this version, then the main directory
         -# Reverts to the compiled-in default data
    """

    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"""Constructor"""
        _openbabel.OBGlobalDataBase_swiginit(self, _openbabel.new_OBGlobalDataBase())
    __swig_destroy__ = _openbabel.delete_OBGlobalDataBase
    Init = _swig_new_instance_method(_openbabel.OBGlobalDataBase_Init)
    GetSize = _swig_new_instance_method(_openbabel.OBGlobalDataBase_GetSize)
    SetReadDirectory = _swig_new_instance_method(_openbabel.OBGlobalDataBase_SetReadDirectory)
    SetEnvironmentVariable = _swig_new_instance_method(_openbabel.OBGlobalDataBase_SetEnvironmentVariable)
    ParseLine = _swig_new_instance_method(_openbabel.OBGlobalDataBase_ParseLine)

# Register OBGlobalDataBase in _openbabel:
_openbabel.OBGlobalDataBase_swigregister(OBGlobalDataBase)
class OBAtomHOF(object):
    r"""
    <openbabel/data.h>
         helper class for OBAtomicHeatOfFormationTable

         Stores both theoretical and experimental corrections
         needed to compute the Enthalpy of formation. In order to
         use these you need to perform
         Gaussian G2/G3/G4 or CBS-QB3 calculations.
    """

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

    def __init__(self, element, charge, method, desc, T, value, multiplicity, unit):
        r"""
        Initialize Heat of Formation for atom

            :type element: string
            :param element: The element string
            :type charge: int
            :param charge:  The formal charge of the particle (if an ion)
            :type method: string
            :param method:  The method used for determining the value
            :type desc: string
            :param desc:    Description of the value
            :type T: float
            :param T:       Temperature
            :type value: float
            :param value:   The value of the property (energy)
            :type multiplicity: int
            :param multiplicity: The multiplicity of the atomic system
            :type unit: string
            :param unit:    The (energy) unit
        """
        _openbabel.OBAtomHOF_swiginit(self, _openbabel.new_OBAtomHOF(element, charge, method, desc, T, value, multiplicity, unit))
    __swig_destroy__ = _openbabel.delete_OBAtomHOF
    Element = _swig_new_instance_method(_openbabel.OBAtomHOF_Element)
    Charge = _swig_new_instance_method(_openbabel.OBAtomHOF_Charge)
    Method = _swig_new_instance_method(_openbabel.OBAtomHOF_Method)
    Desc = _swig_new_instance_method(_openbabel.OBAtomHOF_Desc)
    T = _swig_new_instance_method(_openbabel.OBAtomHOF_T)
    Value = _swig_new_instance_method(_openbabel.OBAtomHOF_Value)
    Multiplicity = _swig_new_instance_method(_openbabel.OBAtomHOF_Multiplicity)
    Unit = _swig_new_instance_method(_openbabel.OBAtomHOF_Unit)

# Register OBAtomHOF in _openbabel:
_openbabel.OBAtomHOF_swigregister(OBAtomHOF)
class OBAtomicHeatOfFormationTable(OBGlobalDataBase):
    r"""
    <openbabel/data.h>
         Atomic Heat of Formation Table

         Contributions of atoms to Enthalpy of Formation calculations performed
         in Gaussian, using the G2/G3/G4 or CBS-QB3 methods respectively.
         The energies produced by Gaussian have to be corrected according to their
         document on Thermochemistry with Gaussian. The data in the file
         BABEL_DATA/atomization_energies.txt supplies this information based on
         single atom calculations with Gaussian and the appropriate method and
         experimental data from Curtiss et al., J. Chem. Phys. 106 (1997) 1063-1079.
    """

    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"""Constructor"""
        _openbabel.OBAtomicHeatOfFormationTable_swiginit(self, _openbabel.new_OBAtomicHeatOfFormationTable())
    __swig_destroy__ = _openbabel.delete_OBAtomicHeatOfFormationTable
    GetHeatOfFormation = _swig_new_instance_method(_openbabel.OBAtomicHeatOfFormationTable_GetHeatOfFormation)

# Register OBAtomicHeatOfFormationTable in _openbabel:
_openbabel.OBAtomicHeatOfFormationTable_swigregister(OBAtomicHeatOfFormationTable)
class OBTypeTable(OBGlobalDataBase):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self):
        _openbabel.OBTypeTable_swiginit(self, _openbabel.new_OBTypeTable())
    __swig_destroy__ = _openbabel.delete_OBTypeTable
    SetFromType = _swig_new_instance_method(_openbabel.OBTypeTable_SetFromType)
    SetToType = _swig_new_instance_method(_openbabel.OBTypeTable_SetToType)
    Translate = _swig_new_instance_method(_openbabel.OBTypeTable_Translate)
    GetFromType = _swig_new_instance_method(_openbabel.OBTypeTable_GetFromType)
    GetToType = _swig_new_instance_method(_openbabel.OBTypeTable_GetToType)

# Register OBTypeTable in _openbabel:
_openbabel.OBTypeTable_swigregister(OBTypeTable)
class OBResidueData(OBGlobalDataBase):
    r"""
    <openbabel/data.h>
         Table of common biomolecule residues (for PDB or other files).

         Can assign atom types and bond orders for arbitrary residues
    """

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

    def __init__(self):
        _openbabel.OBResidueData_swiginit(self, _openbabel.new_OBResidueData())
    SetResName = _swig_new_instance_method(_openbabel.OBResidueData_SetResName)
    LookupBO = _swig_new_instance_method(_openbabel.OBResidueData_LookupBO)
    LookupType = _swig_new_instance_method(_openbabel.OBResidueData_LookupType)
    AssignBonds = _swig_new_instance_method(_openbabel.OBResidueData_AssignBonds)
    __swig_destroy__ = _openbabel.delete_OBResidueData

# Register OBResidueData in _openbabel:
_openbabel.OBResidueData_swigregister(OBResidueData)
cvar = _openbabel.cvar

M_PI = _openbabel.M_PI
class OBStopwatch(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    Start = _swig_new_instance_method(_openbabel.OBStopwatch_Start)
    Lap = _swig_new_instance_method(_openbabel.OBStopwatch_Lap)
    Elapsed = _swig_new_instance_method(_openbabel.OBStopwatch_Elapsed)

    def __init__(self):
        _openbabel.OBStopwatch_swiginit(self, _openbabel.new_OBStopwatch())
    __swig_destroy__ = _openbabel.delete_OBStopwatch

# Register OBStopwatch in _openbabel:
_openbabel.OBStopwatch_swigregister(OBStopwatch)
class OBSqrtTbl(object):
    r"""<openbabel/obutil.h> Square Root lookup table - given a distance squared returns distance"""

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

    def __init__(self, *args):
        r"""
         Create a square root table to handle up to the square root of ``max`` (e.g., if you want the square root of 144, supply 12 for max) :type max: float
        :param max: The maximum square root stored in the lookup table :type incr: float
        :param incr: The floating point resolution of the lookup table
        """
        _openbabel.OBSqrtTbl_swiginit(self, _openbabel.new_OBSqrtTbl(*args))
    __swig_destroy__ = _openbabel.delete_OBSqrtTbl
    Sqrt = _swig_new_instance_method(_openbabel.OBSqrtTbl_Sqrt)
    Init = _swig_new_instance_method(_openbabel.OBSqrtTbl_Init)

# Register OBSqrtTbl in _openbabel:
_openbabel.OBSqrtTbl_swigregister(OBSqrtTbl)
rotate_coords = _openbabel.rotate_coords
calc_rms = _openbabel.calc_rms
RAD_TO_DEG = _openbabel.RAD_TO_DEG
DEG_TO_RAD = _openbabel.DEG_TO_RAD
class vector3(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        *Overload 1:*
        Constructor

        |

        *Overload 2:*
        Copy Constructor
        """
        _openbabel.vector3_swiginit(self, _openbabel.new_vector3(*args))
    __swig_destroy__ = _openbabel.delete_vector3
    begin = _swig_new_instance_method(_openbabel.vector3_begin)
    end = _swig_new_instance_method(_openbabel.vector3_end)
    Set = _swig_new_instance_method(_openbabel.vector3_Set)
    SetX = _swig_new_instance_method(_openbabel.vector3_SetX)
    SetY = _swig_new_instance_method(_openbabel.vector3_SetY)
    SetZ = _swig_new_instance_method(_openbabel.vector3_SetZ)
    GetX = _swig_new_instance_method(_openbabel.vector3_GetX)
    GetY = _swig_new_instance_method(_openbabel.vector3_GetY)
    GetZ = _swig_new_instance_method(_openbabel.vector3_GetZ)
    Get = _swig_new_instance_method(_openbabel.vector3_Get)
    AsArray = _swig_new_instance_method(_openbabel.vector3_AsArray)
    __iadd__ = _swig_new_instance_method(_openbabel.vector3___iadd__)
    __isub__ = _swig_new_instance_method(_openbabel.vector3___isub__)

    def __itruediv__(self, *args):
        return _openbabel.vector3___itruediv__(self, *args)
    __idiv__ = __itruediv__


    __imul__ = _swig_new_instance_method(_openbabel.vector3___imul__)
    randomUnitVector = _swig_new_instance_method(_openbabel.vector3_randomUnitVector)
    normalize = _swig_new_instance_method(_openbabel.vector3_normalize)
    CanBeNormalized = _swig_new_instance_method(_openbabel.vector3_CanBeNormalized)
    length_2 = _swig_new_instance_method(_openbabel.vector3_length_2)
    length = _swig_new_instance_method(_openbabel.vector3_length)
    x = _swig_new_instance_method(_openbabel.vector3_x)
    y = _swig_new_instance_method(_openbabel.vector3_y)
    z = _swig_new_instance_method(_openbabel.vector3_z)
    __eq__ = _swig_new_instance_method(_openbabel.vector3___eq__)
    __ne__ = _swig_new_instance_method(_openbabel.vector3___ne__)
    IsApprox = _swig_new_instance_method(_openbabel.vector3_IsApprox)
    distSq = _swig_new_instance_method(_openbabel.vector3_distSq)
    createOrthoVector = _swig_new_instance_method(_openbabel.vector3_createOrthoVector)

# Register vector3 in _openbabel:
_openbabel.vector3_swigregister(vector3)
__add__ = _openbabel.__add__
__truediv__ = _openbabel.__truediv__
dot = _openbabel.dot
cross = _openbabel.cross
vectorAngle = _openbabel.vectorAngle
CalcTorsionAngle = _openbabel.CalcTorsionAngle
Point2PlaneSigned = _openbabel.Point2PlaneSigned
Point2Plane = _openbabel.Point2Plane
Point2PlaneAngle = _openbabel.Point2PlaneAngle
Point2Line = _openbabel.Point2Line
class matrix3x3(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        *Overload 1:*
        Constructs the zero-matrix

        |

        *Overload 2:*
        Constructs s times the unit matrix

        |

        *Overload 3:*
        Constructs a matrix from row vectors

        |

        *Overload 4:*
        Constructs a matrix from a 3x3-array of doubles The first index represents the row, the second index the column
        """
        _openbabel.matrix3x3_swiginit(self, _openbabel.new_matrix3x3(*args))
    __swig_destroy__ = _openbabel.delete_matrix3x3
    GetArray = _swig_new_instance_method(_openbabel.matrix3x3_GetArray)
    __call__ = _swig_new_instance_method(_openbabel.matrix3x3___call__)
    inverse = _swig_new_instance_method(_openbabel.matrix3x3_inverse)
    transpose = _swig_new_instance_method(_openbabel.matrix3x3_transpose)
    determinant = _swig_new_instance_method(_openbabel.matrix3x3_determinant)
    isSymmetric = _swig_new_instance_method(_openbabel.matrix3x3_isSymmetric)
    isOrthogonal = _swig_new_instance_method(_openbabel.matrix3x3_isOrthogonal)
    isDiagonal = _swig_new_instance_method(_openbabel.matrix3x3_isDiagonal)
    isUnitMatrix = _swig_new_instance_method(_openbabel.matrix3x3_isUnitMatrix)
    Get = _swig_new_instance_method(_openbabel.matrix3x3_Get)
    Set = _swig_new_instance_method(_openbabel.matrix3x3_Set)
    SetColumn = _swig_new_instance_method(_openbabel.matrix3x3_SetColumn)
    SetRow = _swig_new_instance_method(_openbabel.matrix3x3_SetRow)
    GetColumn = _swig_new_instance_method(_openbabel.matrix3x3_GetColumn)
    GetRow = _swig_new_instance_method(_openbabel.matrix3x3_GetRow)
    __imul__ = _swig_new_instance_method(_openbabel.matrix3x3___imul__)

    def __itruediv__(self, *args):
        return _openbabel.matrix3x3___itruediv__(self, *args)
    __idiv__ = __itruediv__


    SetupRotMat = _swig_new_instance_method(_openbabel.matrix3x3_SetupRotMat)
    PlaneReflection = _swig_new_instance_method(_openbabel.matrix3x3_PlaneReflection)
    RotAboutAxisByAngle = _swig_new_instance_method(_openbabel.matrix3x3_RotAboutAxisByAngle)
    FillOrth = _swig_new_instance_method(_openbabel.matrix3x3_FillOrth)
    findEigenvectorsIfSymmetric = _swig_new_instance_method(_openbabel.matrix3x3_findEigenvectorsIfSymmetric)
    jacobi = _swig_new_static_method(_openbabel.matrix3x3_jacobi)

# Register matrix3x3 in _openbabel:
_openbabel.matrix3x3_swigregister(matrix3x3)
VZero = cvar.VZero
VX = cvar.VX
VY = cvar.VY
VZ = cvar.VZ
__mul__ = _openbabel.__mul__

class transform3d(object):
    r"""
    <openbabel/math/transform3d.h>
         Handle 3D transformations, such as space group definitions
         Since: version 2.2
         See also: SpaceGroup
    """

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

    def __init__(self, *args):
        r"""
        *Overload 1:*
        Constructs a matrix from row vectors

        |

        *Overload 2:*
        Constructs a matrix from a 3x3-array of doubles The first index represents the row, the second index the column
        """
        _openbabel.transform3d_swiginit(self, _openbabel.new_transform3d(*args))
    __mul__ = _swig_new_instance_method(_openbabel.transform3d___mul__)
    DescribeAsString = _swig_new_instance_method(_openbabel.transform3d_DescribeAsString)
    DescribeAsValues = _swig_new_instance_method(_openbabel.transform3d_DescribeAsValues)
    Normalize = _swig_new_instance_method(_openbabel.transform3d_Normalize)
    __swig_destroy__ = _openbabel.delete_transform3d

# Register transform3d in _openbabel:
_openbabel.transform3d_swigregister(transform3d)
class SpaceGroup(object):
    r"""
    <openbabel/math/spacegroup.h>
         Handle crystallographic space group symmetry
         Since: version 2.2
         See also: transform3d
    """

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

    def __init__(self):
        _openbabel.SpaceGroup_swiginit(self, _openbabel.new_SpaceGroup())
    __swig_destroy__ = _openbabel.delete_SpaceGroup
    SetHMName = _swig_new_instance_method(_openbabel.SpaceGroup_SetHMName)
    SetHallName = _swig_new_instance_method(_openbabel.SpaceGroup_SetHallName)
    SetId = _swig_new_instance_method(_openbabel.SpaceGroup_SetId)
    AddTransform = _swig_new_instance_method(_openbabel.SpaceGroup_AddTransform)
    GetHMName = _swig_new_instance_method(_openbabel.SpaceGroup_GetHMName)
    GetHallName = _swig_new_instance_method(_openbabel.SpaceGroup_GetHallName)
    GetId = _swig_new_instance_method(_openbabel.SpaceGroup_GetId)
    GetOriginAlternative = _swig_new_instance_method(_openbabel.SpaceGroup_GetOriginAlternative)
    Transform = _swig_new_instance_method(_openbabel.SpaceGroup_Transform)
    BeginTransform = _swig_new_instance_method(_openbabel.SpaceGroup_BeginTransform)
    NextTransform = _swig_new_instance_method(_openbabel.SpaceGroup_NextTransform)
    GetSpaceGroup = _swig_new_static_method(_openbabel.SpaceGroup_GetSpaceGroup)
    Find = _swig_new_static_method(_openbabel.SpaceGroup_Find)
    __eq__ = _swig_new_instance_method(_openbabel.SpaceGroup___eq__)
    __ne__ = _swig_new_instance_method(_openbabel.SpaceGroup___ne__)
    IsValid = _swig_new_instance_method(_openbabel.SpaceGroup_IsValid)
    HEXAGONAL_ORIGIN = property(_openbabel.SpaceGroup_HEXAGONAL_ORIGIN_get)

# Register SpaceGroup in _openbabel:
_openbabel.SpaceGroup_swigregister(SpaceGroup)
SETWORD = _openbabel.SETWORD
WORDROLL = _openbabel.WORDROLL
WORDMASK = _openbabel.WORDMASK
STARTWORDS = _openbabel.STARTWORDS
class OBBitVec(object):
    r"""
    A speed-optimized vector of bits This class implements a fast vector of bits
         using internally a vector of fixed size unsigned ints (uint32_t).
         Any bits which are out of reach of the current size
         are considered to be zero.
         Streamlined, corrected and documented by kshepherd1.sourceforge.net
    """

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

    def __init__(self, *args):
        r"""
        *Overload 1:*
         Construct a bit vector of the default size Construct a bit vector of STARTWORDS size,
        	      cleared to all zero bits.

        |

        *Overload 2:*
         Construct a bit vector of maxbits bits Construct a bit vector with a size in bits
        	      of ``size_in_bits`` rounded up to the nearest word
        		  and cleared to all zero bits.
        		  :type size_in_bits: int, in
        :param size_in_bits: The number of bits for which to reserve space

        |

        *Overload 3:*
         Copy constructor (result has same number of bits) Construct a bit vector which is an exact
        	      duplicate of ``bv``.
        		  :type bv: :py:class:`OBBitVec`, in
        :param bv: The other bit vector to copy to this
        """
        _openbabel.OBBitVec_swiginit(self, _openbabel.new_OBBitVec(*args))
    SetBitOn = _swig_new_instance_method(_openbabel.OBBitVec_SetBitOn)
    SetBitOff = _swig_new_instance_method(_openbabel.OBBitVec_SetBitOff)
    SetRangeOn = _swig_new_instance_method(_openbabel.OBBitVec_SetRangeOn)
    SetRangeOff = _swig_new_instance_method(_openbabel.OBBitVec_SetRangeOff)
    Fold = _swig_new_instance_method(_openbabel.OBBitVec_Fold)
    FirstBit = _swig_new_instance_method(_openbabel.OBBitVec_FirstBit)
    NextBit = _swig_new_instance_method(_openbabel.OBBitVec_NextBit)
    EndBit = _swig_new_instance_method(_openbabel.OBBitVec_EndBit)
    GetSize = _swig_new_instance_method(_openbabel.OBBitVec_GetSize)
    CountBits = _swig_new_instance_method(_openbabel.OBBitVec_CountBits)
    IsEmpty = _swig_new_instance_method(_openbabel.OBBitVec_IsEmpty)
    Resize = _swig_new_instance_method(_openbabel.OBBitVec_Resize)
    ResizeWords = _swig_new_instance_method(_openbabel.OBBitVec_ResizeWords)
    BitIsSet = _swig_new_instance_method(_openbabel.OBBitVec_BitIsSet)
    FromVecInt = _swig_new_instance_method(_openbabel.OBBitVec_FromVecInt)
    FromString = _swig_new_instance_method(_openbabel.OBBitVec_FromString)
    ToVecInt = _swig_new_instance_method(_openbabel.OBBitVec_ToVecInt)
    Clear = _swig_new_instance_method(_openbabel.OBBitVec_Clear)
    Negate = _swig_new_instance_method(_openbabel.OBBitVec_Negate)
    GetWords = _swig_new_instance_method(_openbabel.OBBitVec_GetWords)
    __iand__ = _swig_new_instance_method(_openbabel.OBBitVec___iand__)
    __ior__ = _swig_new_instance_method(_openbabel.OBBitVec___ior__)
    __ixor__ = _swig_new_instance_method(_openbabel.OBBitVec___ixor__)
    __isub__ = _swig_new_instance_method(_openbabel.OBBitVec___isub__)
    __iadd__ = _swig_new_instance_method(_openbabel.OBBitVec___iadd__)
    __swig_destroy__ = _openbabel.delete_OBBitVec

# Register OBBitVec in _openbabel:
_openbabel.OBBitVec_swigregister(OBBitVec)
__or__ = _openbabel.__or__
__and__ = _openbabel.__and__
__xor__ = _openbabel.__xor__
__sub__ = _openbabel.__sub__
__eq__ = _openbabel.__eq__
__lt__ = _openbabel.__lt__
__rshift__ = _openbabel.__rshift__

Tanimoto = _openbabel.Tanimoto
OBReleaseVersion = _openbabel.OBReleaseVersion
UndefinedData = _openbabel.UndefinedData
r"""Unknown data type (default)"""
PairData = _openbabel.PairData
r"""Arbitrary key/value data, i.e., OBPairData"""
EnergyData = _openbabel.EnergyData
r"""Energetics data (e.g., total energy, heat of formation, etc.)"""
CommentData = _openbabel.CommentData
r"""Storing text comments (one per molecule, atom, bond, etc.) (for other data, e.g., author, keyword, ... use OBPairData)"""
ConformerData = _openbabel.ConformerData
r"""Arbitrary information about conformers, i.e., OBConformerData"""
ExternalBondData = _openbabel.ExternalBondData
r"""Bond data external to OpenBabel, i.e., OBExternalBond, OBExternalBondData"""
RotamerList = _openbabel.RotamerList
r"""Information for generating & manipulating rotamers, i.e. OBRotamerList"""
VirtualBondData = _openbabel.VirtualBondData
r"""Info. for storing bonds to atoms yet to be added, i.e. OBVirtualBond"""
RingData = _openbabel.RingData
r"""Information on rings in a molecule, i.e., OBRingData"""
TorsionData = _openbabel.TorsionData
r"""Information about torsion/dihedral angles, i.e., OBTorsionData and OBTorsion"""
AngleData = _openbabel.AngleData
r"""Bond angles in a molecule, i.e., OBAngle, OBAngleData"""
SerialNums = _openbabel.SerialNums
r"""Residue serial numbers"""
UnitCell = _openbabel.UnitCell
r"""Crystallographic unit cell data, i.e., OBUnitCell"""
SpinData = _openbabel.SpinData
r"""Spin data, including NMR, atomic and molecular spin, etc."""
ChargeData = _openbabel.ChargeData
r"""Arbitrary partial and total charges, dipole moments, etc."""
SymmetryData = _openbabel.SymmetryData
r"""Symmetry data -- point and space groups, transforms, etc. i.e., OBSymmetryData"""
OccupationData = _openbabel.OccupationData
r"""Atomic and molecular occupation data (e.g., for crystal structures)"""
DensityData = _openbabel.DensityData
r"""Density (cube) data and surfaces"""
ElectronicData = _openbabel.ElectronicData
r"""Electronic levels, redox states, orbitals, etc."""
VibrationData = _openbabel.VibrationData
r"""Vibrational modes, frequencies, etc."""
RotationData = _openbabel.RotationData
r"""Rotational energy information"""
NuclearData = _openbabel.NuclearData
r"""Nuclear transitions (e.g., decay, capture, fission, fusion)"""
SetData = _openbabel.SetData
r"""Set Data (a set of OBGenericData)"""
GridData = _openbabel.GridData
r"""Grid Data (e.g., 3D grids of data a.k.a. cubes)"""
VectorData = _openbabel.VectorData
r"""Vector Data (i.e., one vector like a dipole moment)"""
MatrixData = _openbabel.MatrixData
r"""Matrix data (i.e., a 3x3 matrix like a rotation or quadrupole moment)"""
StereoData = _openbabel.StereoData
r"""Stereochemistry data (see OBStereoBase)"""
DOSData = _openbabel.DOSData
r"""Density of States data (fermi energy and energy vs. density data)"""
ElectronicTransitionData = _openbabel.ElectronicTransitionData
r"""Electronic transition data (e.g., UV/Vis, excitation energies, etc.)"""
CustomData0 = _openbabel.CustomData0
r"""Custom (user-defined data)"""
CustomData1 = _openbabel.CustomData1
CustomData2 = _openbabel.CustomData2
CustomData3 = _openbabel.CustomData3
CustomData4 = _openbabel.CustomData4
CustomData5 = _openbabel.CustomData5
CustomData6 = _openbabel.CustomData6
CustomData7 = _openbabel.CustomData7
CustomData8 = _openbabel.CustomData8
CustomData9 = _openbabel.CustomData9
CustomData10 = _openbabel.CustomData10
CustomData11 = _openbabel.CustomData11
CustomData12 = _openbabel.CustomData12
CustomData13 = _openbabel.CustomData13
CustomData14 = _openbabel.CustomData14
CustomData15 = _openbabel.CustomData15
any = _openbabel.any
r"""Undefined or unspecified (default)"""
fileformatInput = _openbabel.fileformatInput
r"""Read from an input file"""
userInput = _openbabel.userInput
r"""Added by the user"""
perceived = _openbabel.perceived
r"""Perceived by Open Babel library methods"""
external = _openbabel.external
r"""Added by an external program"""
local = _openbabel.local
r"""Not for routine external use (e.g. in sdf or cml properties)"""
class OBGenericData(object):
    r"""Base class for generic data"""

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

    def __init__(self, *args):
        _openbabel.OBGenericData_swiginit(self, _openbabel.new_OBGenericData(*args))
    Clone = _swig_new_instance_method(_openbabel.OBGenericData_Clone)
    __swig_destroy__ = _openbabel.delete_OBGenericData
    SetAttribute = _swig_new_instance_method(_openbabel.OBGenericData_SetAttribute)
    SetOrigin = _swig_new_instance_method(_openbabel.OBGenericData_SetOrigin)
    GetAttribute = _swig_new_instance_method(_openbabel.OBGenericData_GetAttribute)
    GetDataType = _swig_new_instance_method(_openbabel.OBGenericData_GetDataType)
    GetValue = _swig_new_instance_method(_openbabel.OBGenericData_GetValue)
    GetOrigin = _swig_new_instance_method(_openbabel.OBGenericData_GetOrigin)

# Register OBGenericData in _openbabel:
_openbabel.OBGenericData_swigregister(OBGenericData)
class OBBase(object):
    r"""Base Class"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    __swig_destroy__ = _openbabel.delete_OBBase
    Clear = _swig_new_instance_method(_openbabel.OBBase_Clear)
    DoTransformations = _swig_new_instance_method(_openbabel.OBBase_DoTransformations)
    ClassDescription = _swig_new_static_method(_openbabel.OBBase_ClassDescription)
    GetTitle = _swig_new_instance_method(_openbabel.OBBase_GetTitle)
    SetTitle = _swig_new_instance_method(_openbabel.OBBase_SetTitle)
    HasData = _swig_new_instance_method(_openbabel.OBBase_HasData)
    DeleteData = _swig_new_instance_method(_openbabel.OBBase_DeleteData)
    CloneData = _swig_new_instance_method(_openbabel.OBBase_CloneData)
    DataSize = _swig_new_instance_method(_openbabel.OBBase_DataSize)
    GetAllData = _swig_new_instance_method(_openbabel.OBBase_GetAllData)
    GetData = _swig_new_instance_method(_openbabel.OBBase_GetData)
    BeginData = _swig_new_instance_method(_openbabel.OBBase_BeginData)
    EndData = _swig_new_instance_method(_openbabel.OBBase_EndData)

    def __init__(self):
        _openbabel.OBBase_swiginit(self, _openbabel.new_OBBase())

# Register OBBase in _openbabel:
_openbabel.OBBase_swigregister(OBBase)
class OBCommentData(OBGenericData):
    r"""<openbabel/generic.h> Used to store a comment string (can be multiple lines long)"""

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

    def __init__(self, *args):
        _openbabel.OBCommentData_swiginit(self, _openbabel.new_OBCommentData(*args))
    SetData = _swig_new_instance_method(_openbabel.OBCommentData_SetData)
    GetData = _swig_new_instance_method(_openbabel.OBCommentData_GetData)
    __swig_destroy__ = _openbabel.delete_OBCommentData

# Register OBCommentData in _openbabel:
_openbabel.OBCommentData_swigregister(OBCommentData)
class OBExternalBond(object):
    r"""<openbabel/generic.h> Used to store information on an external bond (e.g., SMILES fragments)"""

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

    def __init__(self, *args):
        _openbabel.OBExternalBond_swiginit(self, _openbabel.new_OBExternalBond(*args))
    __swig_destroy__ = _openbabel.delete_OBExternalBond
    GetIdx = _swig_new_instance_method(_openbabel.OBExternalBond_GetIdx)
    GetAtom = _swig_new_instance_method(_openbabel.OBExternalBond_GetAtom)
    GetBond = _swig_new_instance_method(_openbabel.OBExternalBond_GetBond)
    SetIdx = _swig_new_instance_method(_openbabel.OBExternalBond_SetIdx)
    SetAtom = _swig_new_instance_method(_openbabel.OBExternalBond_SetAtom)
    SetBond = _swig_new_instance_method(_openbabel.OBExternalBond_SetBond)

# Register OBExternalBond in _openbabel:
_openbabel.OBExternalBond_swigregister(OBExternalBond)
class OBExternalBondData(OBGenericData):
    r"""<openbabel/generic.h> Used to store information on external bonds (e.g., in SMILES fragments)"""

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

    def __init__(self):
        _openbabel.OBExternalBondData_swiginit(self, _openbabel.new_OBExternalBondData())
    SetData = _swig_new_instance_method(_openbabel.OBExternalBondData_SetData)
    GetData = _swig_new_instance_method(_openbabel.OBExternalBondData_GetData)
    __swig_destroy__ = _openbabel.delete_OBExternalBondData

# Register OBExternalBondData in _openbabel:
_openbabel.OBExternalBondData_swigregister(OBExternalBondData)
class OBPairData(OBGenericData):
    r"""<openbabel/generic.h> Used to store arbitrary text attribute/value relationships. Ideal for arbitrary text descriptors for molecules, atoms, bonds, residues,  e.g. in QSAR."""

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

    def __init__(self):
        _openbabel.OBPairData_swiginit(self, _openbabel.new_OBPairData())
    SetValue = _swig_new_instance_method(_openbabel.OBPairData_SetValue)
    __swig_destroy__ = _openbabel.delete_OBPairData

# Register OBPairData in _openbabel:
_openbabel.OBPairData_swigregister(OBPairData)
class OBSetData(OBGenericData):
    r"""<openbabel/generic.h> Used to store arbitrary attribute/set relationships. Should be used to store a set of OBGenericData based on an attribute."""

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

    def __init__(self):
        _openbabel.OBSetData_swiginit(self, _openbabel.new_OBSetData())
    AddData = _swig_new_instance_method(_openbabel.OBSetData_AddData)
    SetData = _swig_new_instance_method(_openbabel.OBSetData_SetData)
    GetData = _swig_new_instance_method(_openbabel.OBSetData_GetData)
    GetBegin = _swig_new_instance_method(_openbabel.OBSetData_GetBegin)
    GetEnd = _swig_new_instance_method(_openbabel.OBSetData_GetEnd)
    DeleteData = _swig_new_instance_method(_openbabel.OBSetData_DeleteData)
    __swig_destroy__ = _openbabel.delete_OBSetData

# Register OBSetData in _openbabel:
_openbabel.OBSetData_swigregister(OBSetData)
class OBVirtualBond(OBGenericData):
    r"""<openbabel/generic.h> Used to temporarily store bonds that reference an atom that has not yet been added to a molecule"""

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

    def __init__(self, *args):
        _openbabel.OBVirtualBond_swiginit(self, _openbabel.new_OBVirtualBond(*args))
    GetBgn = _swig_new_instance_method(_openbabel.OBVirtualBond_GetBgn)
    GetEnd = _swig_new_instance_method(_openbabel.OBVirtualBond_GetEnd)
    GetOrder = _swig_new_instance_method(_openbabel.OBVirtualBond_GetOrder)
    GetStereo = _swig_new_instance_method(_openbabel.OBVirtualBond_GetStereo)
    __swig_destroy__ = _openbabel.delete_OBVirtualBond

# Register OBVirtualBond in _openbabel:
_openbabel.OBVirtualBond_swigregister(OBVirtualBond)
class OBRingData(OBGenericData):
    r"""<openbabel/generic.h> Used to store the SSSR set (filled in by OBMol::GetSSSR())"""

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

    def __init__(self, *args):
        _openbabel.OBRingData_swiginit(self, _openbabel.new_OBRingData(*args))
    __swig_destroy__ = _openbabel.delete_OBRingData
    SetData = _swig_new_instance_method(_openbabel.OBRingData_SetData)
    PushBack = _swig_new_instance_method(_openbabel.OBRingData_PushBack)
    GetData = _swig_new_instance_method(_openbabel.OBRingData_GetData)
    BeginRings = _swig_new_instance_method(_openbabel.OBRingData_BeginRings)
    EndRings = _swig_new_instance_method(_openbabel.OBRingData_EndRings)
    BeginRing = _swig_new_instance_method(_openbabel.OBRingData_BeginRing)
    NextRing = _swig_new_instance_method(_openbabel.OBRingData_NextRing)

# Register OBRingData in _openbabel:
_openbabel.OBRingData_swigregister(OBRingData)
class OBUnitCell(OBGenericData):
    r"""<openbabel/generic.h> Used for storing information about periodic boundary conditions   with conversion to/from translation vectors and  (a, b, c, alpha, beta, gamma)"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    Undefined = _openbabel.OBUnitCell_Undefined
    Triclinic = _openbabel.OBUnitCell_Triclinic
    Monoclinic = _openbabel.OBUnitCell_Monoclinic
    Orthorhombic = _openbabel.OBUnitCell_Orthorhombic
    Tetragonal = _openbabel.OBUnitCell_Tetragonal
    Rhombohedral = _openbabel.OBUnitCell_Rhombohedral
    r"""also called trigonal"""
    Hexagonal = _openbabel.OBUnitCell_Hexagonal
    Cubic = _openbabel.OBUnitCell_Cubic

    def __init__(self, *args):
        r"""public constructor"""
        _openbabel.OBUnitCell_swiginit(self, _openbabel.new_OBUnitCell(*args))
    __swig_destroy__ = _openbabel.delete_OBUnitCell
    SetData = _swig_new_instance_method(_openbabel.OBUnitCell_SetData)
    SetOffset = _swig_new_instance_method(_openbabel.OBUnitCell_SetOffset)
    SetSpaceGroup = _swig_new_instance_method(_openbabel.OBUnitCell_SetSpaceGroup)
    SetLatticeType = _swig_new_instance_method(_openbabel.OBUnitCell_SetLatticeType)
    FillUnitCell = _swig_new_instance_method(_openbabel.OBUnitCell_FillUnitCell)
    GetA = _swig_new_instance_method(_openbabel.OBUnitCell_GetA)
    GetB = _swig_new_instance_method(_openbabel.OBUnitCell_GetB)
    GetC = _swig_new_instance_method(_openbabel.OBUnitCell_GetC)
    GetAlpha = _swig_new_instance_method(_openbabel.OBUnitCell_GetAlpha)
    GetBeta = _swig_new_instance_method(_openbabel.OBUnitCell_GetBeta)
    GetGamma = _swig_new_instance_method(_openbabel.OBUnitCell_GetGamma)
    GetOffset = _swig_new_instance_method(_openbabel.OBUnitCell_GetOffset)
    GetSpaceGroup = _swig_new_instance_method(_openbabel.OBUnitCell_GetSpaceGroup)
    GetSpaceGroupName = _swig_new_instance_method(_openbabel.OBUnitCell_GetSpaceGroupName)
    GetLatticeType = _swig_new_instance_method(_openbabel.OBUnitCell_GetLatticeType)
    GetCellVectors = _swig_new_instance_method(_openbabel.OBUnitCell_GetCellVectors)
    GetCellMatrix = _swig_new_instance_method(_openbabel.OBUnitCell_GetCellMatrix)
    GetOrthoMatrix = _swig_new_instance_method(_openbabel.OBUnitCell_GetOrthoMatrix)
    GetOrientationMatrix = _swig_new_instance_method(_openbabel.OBUnitCell_GetOrientationMatrix)
    GetFractionalMatrix = _swig_new_instance_method(_openbabel.OBUnitCell_GetFractionalMatrix)
    FractionalToCartesian = _swig_new_instance_method(_openbabel.OBUnitCell_FractionalToCartesian)
    CartesianToFractional = _swig_new_instance_method(_openbabel.OBUnitCell_CartesianToFractional)
    WrapCartesianCoordinate = _swig_new_instance_method(_openbabel.OBUnitCell_WrapCartesianCoordinate)
    WrapFractionalCoordinate = _swig_new_instance_method(_openbabel.OBUnitCell_WrapFractionalCoordinate)
    UnwrapCartesianNear = _swig_new_instance_method(_openbabel.OBUnitCell_UnwrapCartesianNear)
    UnwrapFractionalNear = _swig_new_instance_method(_openbabel.OBUnitCell_UnwrapFractionalNear)
    MinimumImageCartesian = _swig_new_instance_method(_openbabel.OBUnitCell_MinimumImageCartesian)
    MinimumImageFractional = _swig_new_instance_method(_openbabel.OBUnitCell_MinimumImageFractional)
    GetSpaceGroupNumber = _swig_new_instance_method(_openbabel.OBUnitCell_GetSpaceGroupNumber)
    GetCellVolume = _swig_new_instance_method(_openbabel.OBUnitCell_GetCellVolume)

# Register OBUnitCell in _openbabel:
_openbabel.OBUnitCell_swigregister(OBUnitCell)
class OBConformerData(OBGenericData):
    r"""<openbabel/generic.h> Used to hold data on conformers or geometry optimization steps Supplements the support for multiple coordinate sets in OBMol, e.g., OBMol::GetConformer()"""

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

    def __init__(self, *args):
        _openbabel.OBConformerData_swiginit(self, _openbabel.new_OBConformerData(*args))
    __swig_destroy__ = _openbabel.delete_OBConformerData
    SetDimension = _swig_new_instance_method(_openbabel.OBConformerData_SetDimension)
    SetEnergies = _swig_new_instance_method(_openbabel.OBConformerData_SetEnergies)
    SetForces = _swig_new_instance_method(_openbabel.OBConformerData_SetForces)
    SetVelocities = _swig_new_instance_method(_openbabel.OBConformerData_SetVelocities)
    SetDisplacements = _swig_new_instance_method(_openbabel.OBConformerData_SetDisplacements)
    SetData = _swig_new_instance_method(_openbabel.OBConformerData_SetData)
    GetDimension = _swig_new_instance_method(_openbabel.OBConformerData_GetDimension)
    GetEnergies = _swig_new_instance_method(_openbabel.OBConformerData_GetEnergies)
    GetForces = _swig_new_instance_method(_openbabel.OBConformerData_GetForces)
    GetVelocities = _swig_new_instance_method(_openbabel.OBConformerData_GetVelocities)
    GetDisplacements = _swig_new_instance_method(_openbabel.OBConformerData_GetDisplacements)
    GetData = _swig_new_instance_method(_openbabel.OBConformerData_GetData)

# Register OBConformerData in _openbabel:
_openbabel.OBConformerData_swigregister(OBConformerData)
class OBSymmetryData(OBGenericData):
    r"""<openbabel/generic.h> Used to hold the point-group and/or space-group symmetry TODO: Add support for translation between symbol notations.        Add symmetry perception routines."""

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

    def __init__(self, *args):
        _openbabel.OBSymmetryData_swiginit(self, _openbabel.new_OBSymmetryData(*args))
    __swig_destroy__ = _openbabel.delete_OBSymmetryData
    SetData = _swig_new_instance_method(_openbabel.OBSymmetryData_SetData)
    SetPointGroup = _swig_new_instance_method(_openbabel.OBSymmetryData_SetPointGroup)
    SetSpaceGroup = _swig_new_instance_method(_openbabel.OBSymmetryData_SetSpaceGroup)
    GetPointGroup = _swig_new_instance_method(_openbabel.OBSymmetryData_GetPointGroup)
    GetSpaceGroup = _swig_new_instance_method(_openbabel.OBSymmetryData_GetSpaceGroup)

# Register OBSymmetryData in _openbabel:
_openbabel.OBSymmetryData_swigregister(OBSymmetryData)
class OBTorsion(object):
    r"""<openbabel/generic.h> Used to hold the torsion data for a single rotatable bond and all four atoms around it"""

    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):
        _openbabel.OBTorsion_swiginit(self, _openbabel.new_OBTorsion(arg2))
    __swig_destroy__ = _openbabel.delete_OBTorsion
    Clear = _swig_new_instance_method(_openbabel.OBTorsion_Clear)
    Empty = _swig_new_instance_method(_openbabel.OBTorsion_Empty)
    AddTorsion = _swig_new_instance_method(_openbabel.OBTorsion_AddTorsion)
    SetAngle = _swig_new_instance_method(_openbabel.OBTorsion_SetAngle)
    SetData = _swig_new_instance_method(_openbabel.OBTorsion_SetData)
    GetAngle = _swig_new_instance_method(_openbabel.OBTorsion_GetAngle)
    GetBondIdx = _swig_new_instance_method(_openbabel.OBTorsion_GetBondIdx)
    GetSize = _swig_new_instance_method(_openbabel.OBTorsion_GetSize)
    GetBC = _swig_new_instance_method(_openbabel.OBTorsion_GetBC)
    GetADs = _swig_new_instance_method(_openbabel.OBTorsion_GetADs)
    IsProtonRotor = _swig_new_instance_method(_openbabel.OBTorsion_IsProtonRotor)

# Register OBTorsion in _openbabel:
_openbabel.OBTorsion_swigregister(OBTorsion)
class OBTorsionData(OBGenericData):
    r"""<openbabel/generic.h> Used to hold torsions as generic data for OBMol. Filled by OBMol::FindTorsions()"""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr
    Clear = _swig_new_instance_method(_openbabel.OBTorsionData_Clear)
    GetData = _swig_new_instance_method(_openbabel.OBTorsionData_GetData)
    GetSize = _swig_new_instance_method(_openbabel.OBTorsionData_GetSize)
    SetData = _swig_new_instance_method(_openbabel.OBTorsionData_SetData)
    FillTorsionArray = _swig_new_instance_method(_openbabel.OBTorsionData_FillTorsionArray)
    __swig_destroy__ = _openbabel.delete_OBTorsionData

# Register OBTorsionData in _openbabel:
_openbabel.OBTorsionData_swigregister(OBTorsionData)
class OBAngle(object):
    r"""<openbabel/generic.h> Used to hold the 3 atoms in an angle and the angle itself"""

    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):
        _openbabel.OBAngle_swiginit(self, _openbabel.new_OBAngle(arg2))
    __swig_destroy__ = _openbabel.delete_OBAngle
    __eq__ = _swig_new_instance_method(_openbabel.OBAngle___eq__)
    Clear = _swig_new_instance_method(_openbabel.OBAngle_Clear)
    GetAngle = _swig_new_instance_method(_openbabel.OBAngle_GetAngle)
    SetAngle = _swig_new_instance_method(_openbabel.OBAngle_SetAngle)
    SetAtoms = _swig_new_instance_method(_openbabel.OBAngle_SetAtoms)

# Register OBAngle in _openbabel:
_openbabel.OBAngle_swigregister(OBAngle)
class OBAngleData(OBGenericData):
    r"""<openbabel/generic.h> Used to hold all angles in a molecule as generic data for OBMol"""

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

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr
    Clear = _swig_new_instance_method(_openbabel.OBAngleData_Clear)
    FillAngleArray = _swig_new_instance_method(_openbabel.OBAngleData_FillAngleArray)
    SetData = _swig_new_instance_method(_openbabel.OBAngleData_SetData)
    GetSize = _swig_new_instance_method(_openbabel.OBAngleData_GetSize)
    __swig_destroy__ = _openbabel.delete_OBAngleData

# Register OBAngleData in _openbabel:
_openbabel.OBAngleData_swigregister(OBAngleData)
class OBSerialNums(OBGenericData):
    r"""<openbabel/generic.h> Defines a map between serial numbers (e.g., in a PDB file) and OBAtom objects inside a molecule"""

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

    def __init__(self, *args):
        _openbabel.OBSerialNums_swiginit(self, _openbabel.new_OBSerialNums(*args))
    GetData = _swig_new_instance_method(_openbabel.OBSerialNums_GetData)
    SetData = _swig_new_instance_method(_openbabel.OBSerialNums_SetData)
    __swig_destroy__ = _openbabel.delete_OBSerialNums

# Register OBSerialNums in _openbabel:
_openbabel.OBSerialNums_swigregister(OBSerialNums)
class OBVibrationData(OBGenericData):
    r"""<openbabel/generic.h> Used to hold the normal modes of a molecule, etc."""

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

    def __init__(self):
        _openbabel.OBVibrationData_swiginit(self, _openbabel.new_OBVibrationData())
    __swig_destroy__ = _openbabel.delete_OBVibrationData
    SetData = _swig_new_instance_method(_openbabel.OBVibrationData_SetData)
    GetLx = _swig_new_instance_method(_openbabel.OBVibrationData_GetLx)
    GetFrequencies = _swig_new_instance_method(_openbabel.OBVibrationData_GetFrequencies)
    GetIntensities = _swig_new_instance_method(_openbabel.OBVibrationData_GetIntensities)
    GetRamanActivities = _swig_new_instance_method(_openbabel.OBVibrationData_GetRamanActivities)
    GetNumberOfFrequencies = _swig_new_instance_method(_openbabel.OBVibrationData_GetNumberOfFrequencies)

# Register OBVibrationData in _openbabel:
_openbabel.OBVibrationData_swigregister(OBVibrationData)
class OBDOSData(OBGenericData):
    r"""<openbabel/generic.h> Used to hold density of states information"""

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

    def __init__(self):
        _openbabel.OBDOSData_swiginit(self, _openbabel.new_OBDOSData())
    __swig_destroy__ = _openbabel.delete_OBDOSData
    SetData = _swig_new_instance_method(_openbabel.OBDOSData_SetData)
    GetFermiEnergy = _swig_new_instance_method(_openbabel.OBDOSData_GetFermiEnergy)
    GetEnergies = _swig_new_instance_method(_openbabel.OBDOSData_GetEnergies)
    GetDensities = _swig_new_instance_method(_openbabel.OBDOSData_GetDensities)
    GetIntegration = _swig_new_instance_method(_openbabel.OBDOSData_GetIntegration)

# Register OBDOSData in _openbabel:
_openbabel.OBDOSData_swigregister(OBDOSData)
class OBOrbital(object):
    r"""<openbabel/generic.h> Used to store energy, occupation, and orbital symmetry of a particular orbital See also: OBOrbitalData"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    SetData = _swig_new_instance_method(_openbabel.OBOrbital_SetData)
    GetEnergy = _swig_new_instance_method(_openbabel.OBOrbital_GetEnergy)
    GetOccupation = _swig_new_instance_method(_openbabel.OBOrbital_GetOccupation)
    GetSymbol = _swig_new_instance_method(_openbabel.OBOrbital_GetSymbol)

    def __init__(self):
        _openbabel.OBOrbital_swiginit(self, _openbabel.new_OBOrbital())
    __swig_destroy__ = _openbabel.delete_OBOrbital

# Register OBOrbital in _openbabel:
_openbabel.OBOrbital_swigregister(OBOrbital)
class OBOrbitalData(OBGenericData):
    r"""<openbabel/generic.h> Used to hold information about orbital energies"""

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

    def __init__(self):
        _openbabel.OBOrbitalData_swiginit(self, _openbabel.new_OBOrbitalData())
    __swig_destroy__ = _openbabel.delete_OBOrbitalData
    SetAlphaOrbitals = _swig_new_instance_method(_openbabel.OBOrbitalData_SetAlphaOrbitals)
    SetBetaOrbitals = _swig_new_instance_method(_openbabel.OBOrbitalData_SetBetaOrbitals)
    SetHOMO = _swig_new_instance_method(_openbabel.OBOrbitalData_SetHOMO)
    SetOpenShell = _swig_new_instance_method(_openbabel.OBOrbitalData_SetOpenShell)
    IsOpenShell = _swig_new_instance_method(_openbabel.OBOrbitalData_IsOpenShell)
    GetAlphaHOMO = _swig_new_instance_method(_openbabel.OBOrbitalData_GetAlphaHOMO)
    GetBetaHOMO = _swig_new_instance_method(_openbabel.OBOrbitalData_GetBetaHOMO)
    GetAlphaOrbitals = _swig_new_instance_method(_openbabel.OBOrbitalData_GetAlphaOrbitals)
    GetBetaOrbitals = _swig_new_instance_method(_openbabel.OBOrbitalData_GetBetaOrbitals)
    LoadClosedShellOrbitals = _swig_new_instance_method(_openbabel.OBOrbitalData_LoadClosedShellOrbitals)
    LoadAlphaOrbitals = _swig_new_instance_method(_openbabel.OBOrbitalData_LoadAlphaOrbitals)
    LoadBetaOrbitals = _swig_new_instance_method(_openbabel.OBOrbitalData_LoadBetaOrbitals)

# Register OBOrbitalData in _openbabel:
_openbabel.OBOrbitalData_swigregister(OBOrbitalData)
class OBElectronicTransitionData(OBGenericData):
    r"""<openbabel/generic.h> Used to hold information about electronic transitions"""

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

    def __init__(self):
        _openbabel.OBElectronicTransitionData_swiginit(self, _openbabel.new_OBElectronicTransitionData())
    __swig_destroy__ = _openbabel.delete_OBElectronicTransitionData
    SetData = _swig_new_instance_method(_openbabel.OBElectronicTransitionData_SetData)
    SetEDipole = _swig_new_instance_method(_openbabel.OBElectronicTransitionData_SetEDipole)
    SetRotatoryStrengthsVelocity = _swig_new_instance_method(_openbabel.OBElectronicTransitionData_SetRotatoryStrengthsVelocity)
    SetRotatoryStrengthsLength = _swig_new_instance_method(_openbabel.OBElectronicTransitionData_SetRotatoryStrengthsLength)
    GetWavelengths = _swig_new_instance_method(_openbabel.OBElectronicTransitionData_GetWavelengths)
    GetForces = _swig_new_instance_method(_openbabel.OBElectronicTransitionData_GetForces)
    GetEDipole = _swig_new_instance_method(_openbabel.OBElectronicTransitionData_GetEDipole)
    GetRotatoryStrengthsVelocity = _swig_new_instance_method(_openbabel.OBElectronicTransitionData_GetRotatoryStrengthsVelocity)
    GetRotatoryStrengthsLength = _swig_new_instance_method(_openbabel.OBElectronicTransitionData_GetRotatoryStrengthsLength)

# Register OBElectronicTransitionData in _openbabel:
_openbabel.OBElectronicTransitionData_swigregister(OBElectronicTransitionData)
class OBRotationData(OBGenericData):
    r"""<openbabel/generic.h> Used to hold the rotational constants and symmetry numbers"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    UNKNOWN = _openbabel.OBRotationData_UNKNOWN
    ASYMMETRIC = _openbabel.OBRotationData_ASYMMETRIC
    SYMMETRIC = _openbabel.OBRotationData_SYMMETRIC
    LINEAR = _openbabel.OBRotationData_LINEAR

    def __init__(self):
        _openbabel.OBRotationData_swiginit(self, _openbabel.new_OBRotationData())
    __swig_destroy__ = _openbabel.delete_OBRotationData
    SetData = _swig_new_instance_method(_openbabel.OBRotationData_SetData)
    GetRotConsts = _swig_new_instance_method(_openbabel.OBRotationData_GetRotConsts)
    GetSymmetryNumber = _swig_new_instance_method(_openbabel.OBRotationData_GetSymmetryNumber)
    GetRotorType = _swig_new_instance_method(_openbabel.OBRotationData_GetRotorType)

# Register OBRotationData in _openbabel:
_openbabel.OBRotationData_swigregister(OBRotationData)
class OBVectorData(OBGenericData):
    r"""<openbabel/generic.h> Used to hold a 3D vector item (e.g., a dipole moment) Since: version 2.2"""

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

    def __init__(self):
        _openbabel.OBVectorData_swiginit(self, _openbabel.new_OBVectorData())
    __swig_destroy__ = _openbabel.delete_OBVectorData
    SetData = _swig_new_instance_method(_openbabel.OBVectorData_SetData)
    GetData = _swig_new_instance_method(_openbabel.OBVectorData_GetData)

# Register OBVectorData in _openbabel:
_openbabel.OBVectorData_swigregister(OBVectorData)
class OBMatrixData(OBGenericData):
    r"""<openbabel/generic.h> Used to hold a 3x3 matrix item (e.g., a quadrupole moment) Since: version 2.2"""

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

    def __init__(self):
        _openbabel.OBMatrixData_swiginit(self, _openbabel.new_OBMatrixData())
    __swig_destroy__ = _openbabel.delete_OBMatrixData
    SetData = _swig_new_instance_method(_openbabel.OBMatrixData_SetData)
    GetData = _swig_new_instance_method(_openbabel.OBMatrixData_GetData)

# Register OBMatrixData in _openbabel:
_openbabel.OBMatrixData_swigregister(OBMatrixData)
class OBFreeGridPoint(object):
    r"""<openbabel/generic.h> Helper class for OBFreeGrid Can hold a random coordinate and associated value."""

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

    def __init__(self, *args):
        _openbabel.OBFreeGridPoint_swiginit(self, _openbabel.new_OBFreeGridPoint(*args))
    __swig_destroy__ = _openbabel.delete_OBFreeGridPoint
    GetX = _swig_new_instance_method(_openbabel.OBFreeGridPoint_GetX)
    GetY = _swig_new_instance_method(_openbabel.OBFreeGridPoint_GetY)
    GetZ = _swig_new_instance_method(_openbabel.OBFreeGridPoint_GetZ)
    GetV = _swig_new_instance_method(_openbabel.OBFreeGridPoint_GetV)
    SetX = _swig_new_instance_method(_openbabel.OBFreeGridPoint_SetX)
    SetY = _swig_new_instance_method(_openbabel.OBFreeGridPoint_SetY)
    SetZ = _swig_new_instance_method(_openbabel.OBFreeGridPoint_SetZ)
    SetV = _swig_new_instance_method(_openbabel.OBFreeGridPoint_SetV)

# Register OBFreeGridPoint in _openbabel:
_openbabel.OBFreeGridPoint_swigregister(OBFreeGridPoint)
class OBFreeGrid(OBGenericData):
    r"""<openbabel/generic.h> Handle double precision floating point data with coordinates not on a grid Can hold array of random coordinates and associated values."""

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

    def __init__(self):
        _openbabel.OBFreeGrid_swiginit(self, _openbabel.new_OBFreeGrid())
    __swig_destroy__ = _openbabel.delete_OBFreeGrid
    NumPoints = _swig_new_instance_method(_openbabel.OBFreeGrid_NumPoints)
    AddPoint = _swig_new_instance_method(_openbabel.OBFreeGrid_AddPoint)
    BeginPoints = _swig_new_instance_method(_openbabel.OBFreeGrid_BeginPoints)
    EndPoints = _swig_new_instance_method(_openbabel.OBFreeGrid_EndPoints)
    BeginPoint = _swig_new_instance_method(_openbabel.OBFreeGrid_BeginPoint)
    NextPoint = _swig_new_instance_method(_openbabel.OBFreeGrid_NextPoint)
    Clear = _swig_new_instance_method(_openbabel.OBFreeGrid_Clear)

# Register OBFreeGrid in _openbabel:
_openbabel.OBFreeGrid_swigregister(OBFreeGrid)
class OBPcharge(OBGenericData):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self):
        _openbabel.OBPcharge_swiginit(self, _openbabel.new_OBPcharge())
    __swig_destroy__ = _openbabel.delete_OBPcharge
    NumPartialCharges = _swig_new_instance_method(_openbabel.OBPcharge_NumPartialCharges)
    AddPartialCharge = _swig_new_instance_method(_openbabel.OBPcharge_AddPartialCharge)
    GetPartialCharge = _swig_new_instance_method(_openbabel.OBPcharge_GetPartialCharge)

# Register OBPcharge in _openbabel:
_openbabel.OBPcharge_swigregister(OBPcharge)
class OBPairInteger(OBGenericData):
    r"""<openbabel/generic.h> Used to store arbitrary attribute/value relationsips of any type."""

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

    def __init__(self):
        _openbabel.OBPairInteger_swiginit(self, _openbabel.new_OBPairInteger())
    SetValue = _swig_new_instance_method(_openbabel.OBPairInteger_SetValue)
    GetGenericValue = _swig_new_instance_method(_openbabel.OBPairInteger_GetGenericValue)
    __swig_destroy__ = _openbabel.delete_OBPairInteger

# Register OBPairInteger in _openbabel:
_openbabel.OBPairInteger_swigregister(OBPairInteger)
class OBPairFloatingPoint(OBGenericData):
    r"""<openbabel/generic.h> Used to store arbitrary attribute/value relationsips of any type."""

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

    def __init__(self):
        _openbabel.OBPairFloatingPoint_swiginit(self, _openbabel.new_OBPairFloatingPoint())
    SetValue = _swig_new_instance_method(_openbabel.OBPairFloatingPoint_SetValue)
    GetGenericValue = _swig_new_instance_method(_openbabel.OBPairFloatingPoint_GetGenericValue)
    __swig_destroy__ = _openbabel.delete_OBPairFloatingPoint

# Register OBPairFloatingPoint in _openbabel:
_openbabel.OBPairFloatingPoint_swigregister(OBPairFloatingPoint)
class OBGridData(OBGenericData):
    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"""Constructor."""
        _openbabel.OBGridData_swiginit(self, _openbabel.new_OBGridData())
    __swig_destroy__ = _openbabel.delete_OBGridData
    BOHR = _openbabel.OBGridData_BOHR
    ANGSTROM = _openbabel.OBGridData_ANGSTROM
    OTHER = _openbabel.OBGridData_OTHER
    GetXAxis = _swig_new_instance_method(_openbabel.OBGridData_GetXAxis)
    GetYAxis = _swig_new_instance_method(_openbabel.OBGridData_GetYAxis)
    GetZAxis = _swig_new_instance_method(_openbabel.OBGridData_GetZAxis)
    GetAxes = _swig_new_instance_method(_openbabel.OBGridData_GetAxes)
    GetNumberOfPoints = _swig_new_instance_method(_openbabel.OBGridData_GetNumberOfPoints)
    GetNumberOfSteps = _swig_new_instance_method(_openbabel.OBGridData_GetNumberOfSteps)
    GetValues = _swig_new_instance_method(_openbabel.OBGridData_GetValues)
    GetValue = _swig_new_instance_method(_openbabel.OBGridData_GetValue)
    GetUnit = _swig_new_instance_method(_openbabel.OBGridData_GetUnit)
    GetMinValue = _swig_new_instance_method(_openbabel.OBGridData_GetMinValue)
    GetMaxValue = _swig_new_instance_method(_openbabel.OBGridData_GetMaxValue)
    GetOriginVector = _swig_new_instance_method(_openbabel.OBGridData_GetOriginVector)
    GetMaxVector = _swig_new_instance_method(_openbabel.OBGridData_GetMaxVector)
    GetUnrestricted = _swig_new_instance_method(_openbabel.OBGridData_GetUnrestricted)
    GetNumSymmetries = _swig_new_instance_method(_openbabel.OBGridData_GetNumSymmetries)
    SetNumberOfPoints = _swig_new_instance_method(_openbabel.OBGridData_SetNumberOfPoints)
    SetLimits = _swig_new_instance_method(_openbabel.OBGridData_SetLimits)
    SetValue = _swig_new_instance_method(_openbabel.OBGridData_SetValue)
    SetValues = _swig_new_instance_method(_openbabel.OBGridData_SetValues)
    SetUnit = _swig_new_instance_method(_openbabel.OBGridData_SetUnit)
    SetUnrestricted = _swig_new_instance_method(_openbabel.OBGridData_SetUnrestricted)
    SetNumSymmetries = _swig_new_instance_method(_openbabel.OBGridData_SetNumSymmetries)

# Register OBGridData in _openbabel:
_openbabel.OBGridData_swigregister(OBGridData)
OBKekulize = _openbabel.OBKekulize
MaxMonoAtom = _openbabel.MaxMonoAtom
MaxMonoBond = _openbabel.MaxMonoBond
class OBChainsParser(object):
    r"""
    <openbabel/chains.h>
         Perceives peptide or nucleotide chains and residues in an OBMol

         Perceive peptide or nucleotide chains and residues from atom connectivity.
         Based on original RasMol code by Roger Sayle and modified by Joe Corkery.
         For more on Roger's original talk, see:
         http://www.daylight.com/meetings/mug96/sayle/sayle.html
    """

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

    def __init__(self):
        _openbabel.OBChainsParser_swiginit(self, _openbabel.new_OBChainsParser())
    __swig_destroy__ = _openbabel.delete_OBChainsParser
    PerceiveChains = _swig_new_instance_method(_openbabel.OBChainsParser_PerceiveChains)

# Register OBChainsParser in _openbabel:
_openbabel.OBChainsParser_swigregister(OBChainsParser)
class OBAtomTyper(OBGlobalDataBase):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _openbabel.OBAtomTyper_swiginit(self, _openbabel.new_OBAtomTyper(*args))
    __swig_destroy__ = _openbabel.delete_OBAtomTyper
    AssignHyb = _swig_new_instance_method(_openbabel.OBAtomTyper_AssignHyb)
    AssignTypes = _swig_new_instance_method(_openbabel.OBAtomTyper_AssignTypes)

# Register OBAtomTyper in _openbabel:
_openbabel.OBAtomTyper_swigregister(OBAtomTyper)
class OBAromaticTyper(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self):
        _openbabel.OBAromaticTyper_swiginit(self, _openbabel.new_OBAromaticTyper())
    __swig_destroy__ = _openbabel.delete_OBAromaticTyper
    AssignAromaticFlags = _swig_new_instance_method(_openbabel.OBAromaticTyper_AssignAromaticFlags)

# Register OBAromaticTyper in _openbabel:
_openbabel.OBAromaticTyper_swigregister(OBAromaticTyper)
class OBRingTyper(OBGlobalDataBase):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self):
        _openbabel.OBRingTyper_swiginit(self, _openbabel.new_OBRingTyper())
    __swig_destroy__ = _openbabel.delete_OBRingTyper
    AssignTypes = _swig_new_instance_method(_openbabel.OBRingTyper_AssignTypes)

# Register OBRingTyper in _openbabel:
_openbabel.OBRingTyper_swigregister(OBRingTyper)
class CharPtrLess(object):
    r"""Case insensitive string comparison for PluginMapType key."""

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

    def __init__(self):
        _openbabel.CharPtrLess_swiginit(self, _openbabel.new_CharPtrLess())
    __swig_destroy__ = _openbabel.delete_CharPtrLess

# Register CharPtrLess in _openbabel:
_openbabel.CharPtrLess_swigregister(CharPtrLess)
class OBPlugin(object):
    r"""
    <openbabel/plugin.h>
       Base class for all types of dynamic classes discovered at runtime
       Since: version 2.2
       See also: plugin.h
    """

    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__ = _openbabel.delete_OBPlugin
    Description = _swig_new_instance_method(_openbabel.OBPlugin_Description)
    TypeID = _swig_new_instance_method(_openbabel.OBPlugin_TypeID)
    Display = _swig_new_instance_method(_openbabel.OBPlugin_Display)
    MakeInstance = _swig_new_instance_method(_openbabel.OBPlugin_MakeInstance)
    Init = _swig_new_instance_method(_openbabel.OBPlugin_Init)
    GetPlugin = _swig_new_static_method(_openbabel.OBPlugin_GetPlugin)
    GetID = _swig_new_instance_method(_openbabel.OBPlugin_GetID)
    ListAsVector = _swig_new_static_method(_openbabel.OBPlugin_ListAsVector)
    List = _swig_new_static_method(_openbabel.OBPlugin_List)
    ListAsString = _swig_new_static_method(_openbabel.OBPlugin_ListAsString)
    FirstLine = _swig_new_static_method(_openbabel.OBPlugin_FirstLine)
    Begin = _swig_new_static_method(_openbabel.OBPlugin_Begin)
    End = _swig_new_static_method(_openbabel.OBPlugin_End)
    GetMap = _swig_new_instance_method(_openbabel.OBPlugin_GetMap)
    LoadAllPlugins = _swig_new_static_method(_openbabel.OBPlugin_LoadAllPlugins)

# Register OBPlugin in _openbabel:
_openbabel.OBPlugin_swigregister(OBPlugin)
class stringbuf(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self):
        _openbabel.stringbuf_swiginit(self, _openbabel.new_stringbuf())
    __swig_destroy__ = _openbabel.delete_stringbuf

# Register stringbuf in _openbabel:
_openbabel.stringbuf_swigregister(stringbuf)
obError = _openbabel.obError
r"""for critical errors (e.g., cannot read a file)"""
obWarning = _openbabel.obWarning
r"""for non-critical problems (e.g., molecule appears empty)"""
obInfo = _openbabel.obInfo
r"""for informative messages (e.g., file is a non-standard format)"""
obAuditMsg = _openbabel.obAuditMsg
r"""for messages auditing methods which destroy or perceive molecular data (e.g., kekulization, atom typing, etc.)"""
obDebug = _openbabel.obDebug
r"""for messages only useful for debugging purposes"""
always = _openbabel.always
onceOnly = _openbabel.onceOnly
class OBError(object):
    r"""
    <openbabel/oberror.h>
         Customizable error handling and logging -- store a message,
         including the method yielding the error, causes, etc. *
    """

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

    def __init__(self, *args):
        r"""Constructor for an error message e.g. OBError(__FUNCTION__, " message ")"""
        _openbabel.OBError_swiginit(self, _openbabel.new_OBError(*args))
    message = _swig_new_instance_method(_openbabel.OBError_message)
    GetMethod = _swig_new_instance_method(_openbabel.OBError_GetMethod)
    GetError = _swig_new_instance_method(_openbabel.OBError_GetError)
    GetExplanation = _swig_new_instance_method(_openbabel.OBError_GetExplanation)
    GetPossibleCause = _swig_new_instance_method(_openbabel.OBError_GetPossibleCause)
    GetSuggestedRemedy = _swig_new_instance_method(_openbabel.OBError_GetSuggestedRemedy)
    GetLevel = _swig_new_instance_method(_openbabel.OBError_GetLevel)
    __eq__ = _swig_new_instance_method(_openbabel.OBError___eq__)
    __swig_destroy__ = _openbabel.delete_OBError

# Register OBError in _openbabel:
_openbabel.OBError_swigregister(OBError)
__lshift__ = _openbabel.__lshift__

class OBMessageHandler(object):
    r"""Handle error messages, warnings, debugging information and the like"""

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

    def __init__(self):
        _openbabel.OBMessageHandler_swiginit(self, _openbabel.new_OBMessageHandler())
    __swig_destroy__ = _openbabel.delete_OBMessageHandler
    ThrowError = _swig_new_instance_method(_openbabel.OBMessageHandler_ThrowError)
    GetMessagesOfLevel = _swig_new_instance_method(_openbabel.OBMessageHandler_GetMessagesOfLevel)
    StartLogging = _swig_new_instance_method(_openbabel.OBMessageHandler_StartLogging)
    StopLogging = _swig_new_instance_method(_openbabel.OBMessageHandler_StopLogging)
    SetMaxLogEntries = _swig_new_instance_method(_openbabel.OBMessageHandler_SetMaxLogEntries)
    GetMaxLogEntries = _swig_new_instance_method(_openbabel.OBMessageHandler_GetMaxLogEntries)
    ClearLog = _swig_new_instance_method(_openbabel.OBMessageHandler_ClearLog)
    SetOutputLevel = _swig_new_instance_method(_openbabel.OBMessageHandler_SetOutputLevel)
    GetOutputLevel = _swig_new_instance_method(_openbabel.OBMessageHandler_GetOutputLevel)
    SetOutputStream = _swig_new_instance_method(_openbabel.OBMessageHandler_SetOutputStream)
    GetOutputStream = _swig_new_instance_method(_openbabel.OBMessageHandler_GetOutputStream)
    StartErrorWrap = _swig_new_instance_method(_openbabel.OBMessageHandler_StartErrorWrap)
    StopErrorWrap = _swig_new_instance_method(_openbabel.OBMessageHandler_StopErrorWrap)
    GetErrorMessageCount = _swig_new_instance_method(_openbabel.OBMessageHandler_GetErrorMessageCount)
    GetWarningMessageCount = _swig_new_instance_method(_openbabel.OBMessageHandler_GetWarningMessageCount)
    GetInfoMessageCount = _swig_new_instance_method(_openbabel.OBMessageHandler_GetInfoMessageCount)
    GetAuditMessageCount = _swig_new_instance_method(_openbabel.OBMessageHandler_GetAuditMessageCount)
    GetDebugMessageCount = _swig_new_instance_method(_openbabel.OBMessageHandler_GetDebugMessageCount)
    GetMessageSummary = _swig_new_instance_method(_openbabel.OBMessageHandler_GetMessageSummary)

# Register OBMessageHandler in _openbabel:
_openbabel.OBMessageHandler_swigregister(OBMessageHandler)
class obLogBuf(stringbuf):
    r"""
    <openbabel/oberror.h> A minimal streambuf derivative to wrap calls to cerr into calls to OBMessageHandler as needed This class is used for internal use, via OBMessageHandler::StartErrorWrap()
         To use this class, use the global OBMessageHandler object ``obErrorLog``:

         .. code-block:: c++

             obErrorLog.StartErrorWrap(); // All output to cerr will become OBErrors
             cerr << " This is error 1" << endl; // flush output, create a new error
             cerr << " Error 2" << endl;
             cerr << " Error 3: Done with output wrapping." << endl;
             obErrorLog.StopErrorWrap(); // return to default behavior
    """

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

    def __init__(self):
        _openbabel.obLogBuf_swiginit(self, _openbabel.new_obLogBuf())

# Register obLogBuf in _openbabel:
_openbabel.obLogBuf_swigregister(obLogBuf)
NOTREADABLE = _openbabel.NOTREADABLE
r"""For OBFormat::Flags()"""
READONEONLY = _openbabel.READONEONLY
READBINARY = _openbabel.READBINARY
ZEROATOMSOK = _openbabel.ZEROATOMSOK
NOTWRITABLE = _openbabel.NOTWRITABLE
WRITEONEONLY = _openbabel.WRITEONEONLY
WRITEBINARY = _openbabel.WRITEBINARY
READXML = _openbabel.READXML
DEPICTION2D = _openbabel.DEPICTION2D
DEFAULTFORMAT = _openbabel.DEFAULTFORMAT
class OBFormat(OBPlugin):
    r"""Base class for file formats."""

    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
    Default = _swig_new_static_method(_openbabel.OBFormat_Default)
    FindType = _swig_new_static_method(_openbabel.OBFormat_FindType)
    ReadMolecule = _swig_new_instance_method(_openbabel.OBFormat_ReadMolecule)
    ReadChemObject = _swig_new_instance_method(_openbabel.OBFormat_ReadChemObject)
    WriteMolecule = _swig_new_instance_method(_openbabel.OBFormat_WriteMolecule)
    WriteChemObject = _swig_new_instance_method(_openbabel.OBFormat_WriteChemObject)
    TargetClassDescription = _swig_new_instance_method(_openbabel.OBFormat_TargetClassDescription)
    GetType = _swig_new_instance_method(_openbabel.OBFormat_GetType)
    SpecificationURL = _swig_new_instance_method(_openbabel.OBFormat_SpecificationURL)
    GetMIMEType = _swig_new_instance_method(_openbabel.OBFormat_GetMIMEType)
    Flags = _swig_new_instance_method(_openbabel.OBFormat_Flags)
    SkipObjects = _swig_new_instance_method(_openbabel.OBFormat_SkipObjects)
    MakeNewInstance = _swig_new_instance_method(_openbabel.OBFormat_MakeNewInstance)
    RegisterFormat = _swig_new_instance_method(_openbabel.OBFormat_RegisterFormat)
    Display = _swig_new_instance_method(_openbabel.OBFormat_Display)
    FormatFromMIME = _swig_new_static_method(_openbabel.OBFormat_FormatFromMIME)
    __swig_destroy__ = _openbabel.delete_OBFormat

# Register OBFormat in _openbabel:
_openbabel.OBFormat_swigregister(OBFormat)
class OBConversion(object):
    r"""Class to convert from one format to another."""

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

    def __init__(self, *args):
        r"""Copy constructor.  Stream *ownership* is not copied. Source remains responsible for the memory."""
        _openbabel.OBConversion_swiginit(self, _openbabel.new_OBConversion(*args))
    __swig_destroy__ = _openbabel.delete_OBConversion
    RegisterFormat = _swig_new_static_method(_openbabel.OBConversion_RegisterFormat)
    FindFormat = _swig_new_static_method(_openbabel.OBConversion_FindFormat)
    FormatFromExt = _swig_new_static_method(_openbabel.OBConversion_FormatFromExt)
    FormatFromMIME = _swig_new_static_method(_openbabel.OBConversion_FormatFromMIME)
    Description = _swig_new_static_method(_openbabel.OBConversion_Description)
    GetInStream = _swig_new_instance_method(_openbabel.OBConversion_GetInStream)
    GetOutStream = _swig_new_instance_method(_openbabel.OBConversion_GetOutStream)
    SetInStream = _swig_new_instance_method(_openbabel.OBConversion_SetInStream)
    SetOutStream = _swig_new_instance_method(_openbabel.OBConversion_SetOutStream)
    SetInAndOutFormats = _swig_new_instance_method(_openbabel.OBConversion_SetInAndOutFormats)
    SetInFormat = _swig_new_instance_method(_openbabel.OBConversion_SetInFormat)
    SetOutFormat = _swig_new_instance_method(_openbabel.OBConversion_SetOutFormat)
    GetInFormat = _swig_new_instance_method(_openbabel.OBConversion_GetInFormat)
    GetOutFormat = _swig_new_instance_method(_openbabel.OBConversion_GetOutFormat)
    GetInGzipped = _swig_new_instance_method(_openbabel.OBConversion_GetInGzipped)
    GetOutGzipped = _swig_new_instance_method(_openbabel.OBConversion_GetOutGzipped)
    GetInFilename = _swig_new_instance_method(_openbabel.OBConversion_GetInFilename)
    GetOutFilename = _swig_new_instance_method(_openbabel.OBConversion_GetOutFilename)
    GetInPos = _swig_new_instance_method(_openbabel.OBConversion_GetInPos)
    GetInLen = _swig_new_instance_method(_openbabel.OBConversion_GetInLen)
    GetTitle = _swig_new_instance_method(_openbabel.OBConversion_GetTitle)
    GetAuxConv = _swig_new_instance_method(_openbabel.OBConversion_GetAuxConv)
    SetAuxConv = _swig_new_instance_method(_openbabel.OBConversion_SetAuxConv)
    INOPTIONS = _openbabel.OBConversion_INOPTIONS
    OUTOPTIONS = _openbabel.OBConversion_OUTOPTIONS
    GENOPTIONS = _openbabel.OBConversion_GENOPTIONS
    ALL = _openbabel.OBConversion_ALL
    IsOption = _swig_new_instance_method(_openbabel.OBConversion_IsOption)
    GetOptions = _swig_new_instance_method(_openbabel.OBConversion_GetOptions)
    AddOption = _swig_new_instance_method(_openbabel.OBConversion_AddOption)
    RemoveOption = _swig_new_instance_method(_openbabel.OBConversion_RemoveOption)
    SetOptions = _swig_new_instance_method(_openbabel.OBConversion_SetOptions)
    RegisterOptionParam = _swig_new_static_method(_openbabel.OBConversion_RegisterOptionParam)
    GetOptionParams = _swig_new_static_method(_openbabel.OBConversion_GetOptionParams)
    CopyOptions = _swig_new_instance_method(_openbabel.OBConversion_CopyOptions)
    GetSupportedInputFormat = _swig_new_instance_method(_openbabel.OBConversion_GetSupportedInputFormat)
    GetSupportedOutputFormat = _swig_new_instance_method(_openbabel.OBConversion_GetSupportedOutputFormat)
    Convert = _swig_new_instance_method(_openbabel.OBConversion_Convert)
    FullConvert = _swig_new_instance_method(_openbabel.OBConversion_FullConvert)
    AddChemObject = _swig_new_instance_method(_openbabel.OBConversion_AddChemObject)
    GetChemObject = _swig_new_instance_method(_openbabel.OBConversion_GetChemObject)
    IsLast = _swig_new_instance_method(_openbabel.OBConversion_IsLast)
    IsFirstInput = _swig_new_instance_method(_openbabel.OBConversion_IsFirstInput)
    SetFirstInput = _swig_new_instance_method(_openbabel.OBConversion_SetFirstInput)
    GetOutputIndex = _swig_new_instance_method(_openbabel.OBConversion_GetOutputIndex)
    SetOutputIndex = _swig_new_instance_method(_openbabel.OBConversion_SetOutputIndex)
    SetMoreFilesToCome = _swig_new_instance_method(_openbabel.OBConversion_SetMoreFilesToCome)
    SetOneObjectOnly = _swig_new_instance_method(_openbabel.OBConversion_SetOneObjectOnly)
    SetLast = _swig_new_instance_method(_openbabel.OBConversion_SetLast)
    IsLastFile = _swig_new_instance_method(_openbabel.OBConversion_IsLastFile)
    GetCount = _swig_new_instance_method(_openbabel.OBConversion_GetCount)
    GetDefaultFormat = _swig_new_static_method(_openbabel.OBConversion_GetDefaultFormat)
    Write = _swig_new_instance_method(_openbabel.OBConversion_Write)
    WriteString = _swig_new_instance_method(_openbabel.OBConversion_WriteString)
    WriteFile = _swig_new_instance_method(_openbabel.OBConversion_WriteFile)
    CloseOutFile = _swig_new_instance_method(_openbabel.OBConversion_CloseOutFile)
    Read = _swig_new_instance_method(_openbabel.OBConversion_Read)
    ReadString = _swig_new_instance_method(_openbabel.OBConversion_ReadString)
    ReadFile = _swig_new_instance_method(_openbabel.OBConversion_ReadFile)
    OpenInAndOutFiles = _swig_new_instance_method(_openbabel.OBConversion_OpenInAndOutFiles)
    ReportNumberConverted = _swig_new_instance_method(_openbabel.OBConversion_ReportNumberConverted)
    NumInputObjects = _swig_new_instance_method(_openbabel.OBConversion_NumInputObjects)

# Register OBConversion in _openbabel:
_openbabel.OBConversion_swigregister(OBConversion)
OBBondGetSmallestRingSize = _openbabel.OBBondGetSmallestRingSize
GetTypicalValence = _openbabel.GetTypicalValence
OBAtomAssignTypicalImplicitHydrogens = _openbabel.OBAtomAssignTypicalImplicitHydrogens
GetSymbol = _openbabel.GetSymbol
GetName = _openbabel.GetName
GetMass = _openbabel.GetMass
GetExactMass = _openbabel.GetExactMass
GetAtomicNum = _openbabel.GetAtomicNum
GetAllredRochowElectroNeg = _openbabel.GetAllredRochowElectroNeg
GetCovalentRad = _openbabel.GetCovalentRad
GetVdwRad = _openbabel.GetVdwRad
GetElectronAffinity = _openbabel.GetElectronAffinity
GetIonization = _openbabel.GetIonization
GetMaxBonds = _openbabel.GetMaxBonds
GetElectroNeg = _openbabel.GetElectroNeg
GetRGB = _openbabel.GetRGB
class OBResidue(OBBase):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        *Overload 1:*
        Constructor

        |

        *Overload 2:*
        Copy constructor
        """
        _openbabel.OBResidue_swiginit(self, _openbabel.new_OBResidue(*args))
    __swig_destroy__ = _openbabel.delete_OBResidue
    AddAtom = _swig_new_instance_method(_openbabel.OBResidue_AddAtom)
    InsertAtom = _swig_new_instance_method(_openbabel.OBResidue_InsertAtom)
    RemoveAtom = _swig_new_instance_method(_openbabel.OBResidue_RemoveAtom)
    SetName = _swig_new_instance_method(_openbabel.OBResidue_SetName)
    SetSegName = _swig_new_instance_method(_openbabel.OBResidue_SetSegName)
    SetNum = _swig_new_instance_method(_openbabel.OBResidue_SetNum)
    SetChain = _swig_new_instance_method(_openbabel.OBResidue_SetChain)
    SetChainNum = _swig_new_instance_method(_openbabel.OBResidue_SetChainNum)
    SetIdx = _swig_new_instance_method(_openbabel.OBResidue_SetIdx)
    SetInsertionCode = _swig_new_instance_method(_openbabel.OBResidue_SetInsertionCode)
    SetAtomID = _swig_new_instance_method(_openbabel.OBResidue_SetAtomID)
    SetHetAtom = _swig_new_instance_method(_openbabel.OBResidue_SetHetAtom)
    SetSerialNum = _swig_new_instance_method(_openbabel.OBResidue_SetSerialNum)
    GetName = _swig_new_instance_method(_openbabel.OBResidue_GetName)
    GetSegName = _swig_new_instance_method(_openbabel.OBResidue_GetSegName)
    GetNum = _swig_new_instance_method(_openbabel.OBResidue_GetNum)
    GetNumString = _swig_new_instance_method(_openbabel.OBResidue_GetNumString)
    GetNumAtoms = _swig_new_instance_method(_openbabel.OBResidue_GetNumAtoms)
    GetNumHvyAtoms = _swig_new_instance_method(_openbabel.OBResidue_GetNumHvyAtoms)
    GetChain = _swig_new_instance_method(_openbabel.OBResidue_GetChain)
    GetChainNum = _swig_new_instance_method(_openbabel.OBResidue_GetChainNum)
    GetIdx = _swig_new_instance_method(_openbabel.OBResidue_GetIdx)
    GetResKey = _swig_new_instance_method(_openbabel.OBResidue_GetResKey)
    GetBonds = _swig_new_instance_method(_openbabel.OBResidue_GetBonds)
    GetAtomID = _swig_new_instance_method(_openbabel.OBResidue_GetAtomID)
    GetSerialNum = _swig_new_instance_method(_openbabel.OBResidue_GetSerialNum)
    GetInsertionCode = _swig_new_instance_method(_openbabel.OBResidue_GetInsertionCode)
    GetAminoAcidProperty = _swig_new_instance_method(_openbabel.OBResidue_GetAminoAcidProperty)
    GetAtomProperty = _swig_new_instance_method(_openbabel.OBResidue_GetAtomProperty)
    GetResidueProperty = _swig_new_instance_method(_openbabel.OBResidue_GetResidueProperty)
    IsHetAtom = _swig_new_instance_method(_openbabel.OBResidue_IsHetAtom)
    IsResidueType = _swig_new_instance_method(_openbabel.OBResidue_IsResidueType)
    BeginAtoms = _swig_new_instance_method(_openbabel.OBResidue_BeginAtoms)
    CBeginAtoms = _swig_new_instance_method(_openbabel.OBResidue_CBeginAtoms)
    EndAtoms = _swig_new_instance_method(_openbabel.OBResidue_EndAtoms)
    CEndAtoms = _swig_new_instance_method(_openbabel.OBResidue_CEndAtoms)
    BeginAtom = _swig_new_instance_method(_openbabel.OBResidue_BeginAtom)
    NextAtom = _swig_new_instance_method(_openbabel.OBResidue_NextAtom)

# Register OBResidue in _openbabel:
_openbabel.OBResidue_swigregister(OBResidue)
Dummy = cvar.Dummy
Hydrogen = cvar.Hydrogen
H = cvar.H
Helium = cvar.Helium
He = cvar.He
Lithium = cvar.Lithium
Li = cvar.Li
Beryllium = cvar.Beryllium
Be = cvar.Be
Boron = cvar.Boron
B = cvar.B
Carbon = cvar.Carbon
C = cvar.C
Nitrogen = cvar.Nitrogen
N = cvar.N
Oxygen = cvar.Oxygen
O = cvar.O
Fluorine = cvar.Fluorine
F = cvar.F
Neon = cvar.Neon
Ne = cvar.Ne
Sodium = cvar.Sodium
Na = cvar.Na
Magnesium = cvar.Magnesium
Mg = cvar.Mg
Aluminium = cvar.Aluminium
Al = cvar.Al
Silicon = cvar.Silicon
Si = cvar.Si
Phosphorus = cvar.Phosphorus
P = cvar.P
Sulfur = cvar.Sulfur
S = cvar.S
Chlorine = cvar.Chlorine
Cl = cvar.Cl
Argon = cvar.Argon
Ar = cvar.Ar
Potassium = cvar.Potassium
K = cvar.K
Calcium = cvar.Calcium
Ca = cvar.Ca
Scandium = cvar.Scandium
Sc = cvar.Sc
Titanium = cvar.Titanium
Ti = cvar.Ti
Vanadium = cvar.Vanadium
V = cvar.V
Chromium = cvar.Chromium
Cr = cvar.Cr
Manganese = cvar.Manganese
Mn = cvar.Mn
Iron = cvar.Iron
Fe = cvar.Fe
Cobalt = cvar.Cobalt
Co = cvar.Co
Nickel = cvar.Nickel
Ni = cvar.Ni
Copper = cvar.Copper
Cu = cvar.Cu
Zinc = cvar.Zinc
Zn = cvar.Zn
Gallium = cvar.Gallium
Ga = cvar.Ga
Germanium = cvar.Germanium
Ge = cvar.Ge
Arsenic = cvar.Arsenic
As = cvar.As
Selenium = cvar.Selenium
Se = cvar.Se
Bromine = cvar.Bromine
Br = cvar.Br
Krypton = cvar.Krypton
Kr = cvar.Kr
Rubidium = cvar.Rubidium
Rb = cvar.Rb
Strontium = cvar.Strontium
Sr = cvar.Sr
Yttrium = cvar.Yttrium
Y = cvar.Y
Zirconium = cvar.Zirconium
Zr = cvar.Zr
Niobium = cvar.Niobium
Nb = cvar.Nb
Molybdenum = cvar.Molybdenum
Mo = cvar.Mo
Technetium = cvar.Technetium
Tc = cvar.Tc
Ruthenium = cvar.Ruthenium
Ru = cvar.Ru
Rhodium = cvar.Rhodium
Rh = cvar.Rh
Palladium = cvar.Palladium
Pd = cvar.Pd
Silver = cvar.Silver
Ag = cvar.Ag
Cadmium = cvar.Cadmium
Cd = cvar.Cd
Indium = cvar.Indium
In = cvar.In
Tin = cvar.Tin
Sn = cvar.Sn
Antimony = cvar.Antimony
Sb = cvar.Sb
Tellurium = cvar.Tellurium
Te = cvar.Te
Iodine = cvar.Iodine
I = cvar.I
Xenon = cvar.Xenon
Xe = cvar.Xe
Caesium = cvar.Caesium
Cs = cvar.Cs
Barium = cvar.Barium
Ba = cvar.Ba
Lanthanum = cvar.Lanthanum
La = cvar.La
Cerium = cvar.Cerium
Ce = cvar.Ce
Praseodymium = cvar.Praseodymium
Pr = cvar.Pr
Neodymium = cvar.Neodymium
Nd = cvar.Nd
Promethium = cvar.Promethium
Pm = cvar.Pm
Samarium = cvar.Samarium
Sm = cvar.Sm
Europium = cvar.Europium
Eu = cvar.Eu
Gadolinium = cvar.Gadolinium
Gd = cvar.Gd
Terbium = cvar.Terbium
Tb = cvar.Tb
Dysprosium = cvar.Dysprosium
Dy = cvar.Dy
Holmium = cvar.Holmium
Ho = cvar.Ho
Erbium = cvar.Erbium
Er = cvar.Er
Thulium = cvar.Thulium
Tm = cvar.Tm
Ytterbium = cvar.Ytterbium
Yb = cvar.Yb
Lutetium = cvar.Lutetium
Lu = cvar.Lu
Hafnium = cvar.Hafnium
Hf = cvar.Hf
Tantalum = cvar.Tantalum
Ta = cvar.Ta
Tungsten = cvar.Tungsten
W = cvar.W
Rhenium = cvar.Rhenium
Re = cvar.Re
Osmium = cvar.Osmium
Os = cvar.Os
Iridium = cvar.Iridium
Ir = cvar.Ir
Platinum = cvar.Platinum
Pt = cvar.Pt
Gold = cvar.Gold
Au = cvar.Au
Mercury = cvar.Mercury
Hg = cvar.Hg
Thallium = cvar.Thallium
Tl = cvar.Tl
Lead = cvar.Lead
Pb = cvar.Pb
Bismuth = cvar.Bismuth
Bi = cvar.Bi
Polonium = cvar.Polonium
Po = cvar.Po
Astatine = cvar.Astatine
At = cvar.At
Radon = cvar.Radon
Rn = cvar.Rn
Francium = cvar.Francium
Fr = cvar.Fr
Radium = cvar.Radium
Ra = cvar.Ra
Actinium = cvar.Actinium
Ac = cvar.Ac
Thorium = cvar.Thorium
Th = cvar.Th
Protactinium = cvar.Protactinium
Pa = cvar.Pa
Uranium = cvar.Uranium
U = cvar.U
Neptunium = cvar.Neptunium
Np = cvar.Np
Plutonium = cvar.Plutonium
Pu = cvar.Pu
Americium = cvar.Americium
Am = cvar.Am
Curium = cvar.Curium
Cm = cvar.Cm
Berkelium = cvar.Berkelium
Bk = cvar.Bk
Californium = cvar.Californium
Cf = cvar.Cf
Einsteinium = cvar.Einsteinium
Es = cvar.Es
Fermium = cvar.Fermium
Fm = cvar.Fm
Mendelevium = cvar.Mendelevium
Md = cvar.Md
Nobelium = cvar.Nobelium
No = cvar.No
Lawrencium = cvar.Lawrencium
Lr = cvar.Lr
Rutherfordium = cvar.Rutherfordium
Rf = cvar.Rf
Dubnium = cvar.Dubnium
Db = cvar.Db
Seaborgium = cvar.Seaborgium
Sg = cvar.Sg
Bohrium = cvar.Bohrium
Bh = cvar.Bh
Hassium = cvar.Hassium
Hs = cvar.Hs
Meitnerium = cvar.Meitnerium
Mt = cvar.Mt
Darmstadtium = cvar.Darmstadtium
Ds = cvar.Ds
Roentgenium = cvar.Roentgenium
Rg = cvar.Rg
Copernicium = cvar.Copernicium
Cn = cvar.Cn
Nihonium = cvar.Nihonium
Nh = cvar.Nh
Flerovium = cvar.Flerovium
Fl = cvar.Fl
Moscovium = cvar.Moscovium
Mc = cvar.Mc
Livermorium = cvar.Livermorium
Lv = cvar.Lv
Tennessine = cvar.Tennessine
Ts = cvar.Ts
Oganesson = cvar.Oganesson
Og = cvar.Og

MAXSETNO = _openbabel.MAXSETNO
MAXELEM = _openbabel.MAXELEM
MAXRES = _openbabel.MAXRES
AA_ALA = _openbabel.AA_ALA
AA_GLY = _openbabel.AA_GLY
AA_LEU = _openbabel.AA_LEU
AA_SER = _openbabel.AA_SER
AA_VAL = _openbabel.AA_VAL
AA_THR = _openbabel.AA_THR
AA_LYS = _openbabel.AA_LYS
AA_ASP = _openbabel.AA_ASP
AA_ILE = _openbabel.AA_ILE
AA_ASN = _openbabel.AA_ASN
AA_GLU = _openbabel.AA_GLU
AA_PRO = _openbabel.AA_PRO
AA_ARG = _openbabel.AA_ARG
AA_PHE = _openbabel.AA_PHE
AA_GLN = _openbabel.AA_GLN
AA_TYR = _openbabel.AA_TYR
AA_HIS = _openbabel.AA_HIS
AA_CYS = _openbabel.AA_CYS
AA_MET = _openbabel.AA_MET
AA_TRP = _openbabel.AA_TRP
ACIDIC = _openbabel.ACIDIC
ACYCLIC = _openbabel.ACYCLIC
ALIPHATIC = _openbabel.ALIPHATIC
AROMATIC = _openbabel.AROMATIC
BASIC = _openbabel.BASIC
BURIED = _openbabel.BURIED
CHARGED = _openbabel.CHARGED
CYCLIC = _openbabel.CYCLIC
HYDROPHOBIC = _openbabel.HYDROPHOBIC
LARGE = _openbabel.LARGE
MEDIUM = _openbabel.MEDIUM
NEGATIVE = _openbabel.NEGATIVE
NEUTRAL = _openbabel.NEUTRAL
POLAR = _openbabel.POLAR
POSITIVE = _openbabel.POSITIVE
SMALL = _openbabel.SMALL
SURFACE = _openbabel.SURFACE
ALPHA_CARBON = _openbabel.ALPHA_CARBON
AMINO_BACKBONE = _openbabel.AMINO_BACKBONE
BACKBONE = _openbabel.BACKBONE
CYSTEINE_SULPHUR = _openbabel.CYSTEINE_SULPHUR
LIGAND = _openbabel.LIGAND
NUCLEIC_BACKBONE = _openbabel.NUCLEIC_BACKBONE
SHAPELY_BACKBONE = _openbabel.SHAPELY_BACKBONE
SHAPELY_SPECIAL = _openbabel.SHAPELY_SPECIAL
SIDECHAIN = _openbabel.SIDECHAIN
SUGAR_PHOSPHATE = _openbabel.SUGAR_PHOSPHATE
ALA = _openbabel.ALA
GLY = _openbabel.GLY
LEU = _openbabel.LEU
SER = _openbabel.SER
VAL = _openbabel.VAL
THR = _openbabel.THR
LYS = _openbabel.LYS
ASP = _openbabel.ASP
ILE = _openbabel.ILE
ASN = _openbabel.ASN
GLU = _openbabel.GLU
PRO = _openbabel.PRO
ARG = _openbabel.ARG
PHE = _openbabel.PHE
GLN = _openbabel.GLN
TYR = _openbabel.TYR
HIS = _openbabel.HIS
CYS = _openbabel.CYS
MET = _openbabel.MET
TRP = _openbabel.TRP
ASX = _openbabel.ASX
GLX = _openbabel.GLX
PCA = _openbabel.PCA
HYP = _openbabel.HYP
resA = _openbabel.resA
resC = _openbabel.resC
resG = _openbabel.resG
resT = _openbabel.resT
resU = _openbabel.resU
UPLUS = _openbabel.UPLUS
resI = _openbabel.resI
_1MA = _openbabel._1MA
_5MC = _openbabel._5MC
OMC = _openbabel.OMC
_1MG = _openbabel._1MG
_2MG = _openbabel._2MG
M2G = _openbabel.M2G
_7MG = _openbabel._7MG
OMG = _openbabel.OMG
YG = _openbabel.YG
H2U = _openbabel.H2U
_5MU = _openbabel._5MU
PSU = _openbabel.PSU
UNK = _openbabel.UNK
ACE = _openbabel.ACE
FOR = _openbabel.FOR
HOH = _openbabel.HOH
DOD = _openbabel.DOD
SO4 = _openbabel.SO4
PO4 = _openbabel.PO4
NAD = _openbabel.NAD
COA = _openbabel.COA
NAP = _openbabel.NAP
NDP = _openbabel.NDP
AMINO = _openbabel.AMINO
AMINO_NUCLEO = _openbabel.AMINO_NUCLEO
COENZYME = _openbabel.COENZYME
ION = _openbabel.ION
NUCLEO = _openbabel.NUCLEO
PROTEIN = _openbabel.PROTEIN
PURINE = _openbabel.PURINE
PYRIMIDINE = _openbabel.PYRIMIDINE
SOLVENT = _openbabel.SOLVENT
WATER = _openbabel.WATER
class OBInternalCoord(object):
    r"""
    <openbabel/internalcoord.h>
         Used to transform from z-matrix to cartesian coordinates.

         Used with OpenBabel::InternalToCartesian and
         OpenBabel::CartesianToInternal methods. Does not perform any actions
         itself. You must create or free OBAtom pointers yourself.

         The z-matrix representation uses coordinates relative to up to three
         atoms, which need not be bonded in any fashion. A rough sketch of the
         a, b, and c atoms would be:

         .. code-block:: c++

                 '*'


              a----b


                c

         where the OBInternalCoord record reflects the '*' atom.

         Warning: Does not detect if NULL pointers are used. You should be careful.
    """

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    _a = property(_openbabel.OBInternalCoord__a_get, _openbabel.OBInternalCoord__a_set, doc=r"""First connection for this atom (i.e., distance)""")
    _b = property(_openbabel.OBInternalCoord__b_get, _openbabel.OBInternalCoord__b_set, doc=r"""Second reference atom (i.e., angle)""")
    _c = property(_openbabel.OBInternalCoord__c_get, _openbabel.OBInternalCoord__c_set, doc=r"""Third reference atom (i.e., dihedral / torsion angle)""")
    _dst = property(_openbabel.OBInternalCoord__dst_get, _openbabel.OBInternalCoord__dst_set, doc=r"""Distance between this atom and _a""")
    _ang = property(_openbabel.OBInternalCoord__ang_get, _openbabel.OBInternalCoord__ang_set, doc=r"""Angle between this, _a, and _b (i.e., _a is the vertex)""")
    _tor = property(_openbabel.OBInternalCoord__tor_get, _openbabel.OBInternalCoord__tor_set, doc=r"""Torsional/dihedral angle between this, _a, _b, and _c""")

    def __init__(self, a=None, b=None, c=None, dst=0.0, ang=0.0, tor=0.0):
        r"""Constructor"""
        _openbabel.OBInternalCoord_swiginit(self, _openbabel.new_OBInternalCoord(a, b, c, dst, ang, tor))
    __swig_destroy__ = _openbabel.delete_OBInternalCoord

# Register OBInternalCoord in _openbabel:
_openbabel.OBInternalCoord_swigregister(OBInternalCoord)
OB_4RING_ATOM = _openbabel.OB_4RING_ATOM
r"""Atom is in a 4-membered ring"""
OB_3RING_ATOM = _openbabel.OB_3RING_ATOM
r"""Atom is in a 3-membered ring"""
OB_AROMATIC_ATOM = _openbabel.OB_AROMATIC_ATOM
r"""Atom is aromatic"""
OB_RING_ATOM = _openbabel.OB_RING_ATOM
r"""Atom is in a ring"""
OB_DONOR_ATOM = _openbabel.OB_DONOR_ATOM
r"""Atom is an electron donor"""
OB_ACCEPTOR_ATOM = _openbabel.OB_ACCEPTOR_ATOM
r"""Atom is an electron acceptor"""
class OBAtomAtomIterAdaptor(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _openbabel.OBAtomAtomIterAdaptor_swiginit(self, _openbabel.new_OBAtomAtomIterAdaptor(*args))
    __ref__ = _swig_new_instance_method(_openbabel.OBAtomAtomIterAdaptor___ref__)
    inc = _swig_new_instance_method(_openbabel.OBAtomAtomIterAdaptor_inc)
    __eq__ = _swig_new_instance_method(_openbabel.OBAtomAtomIterAdaptor___eq__)
    __ne__ = _swig_new_instance_method(_openbabel.OBAtomAtomIterAdaptor___ne__)
    __swig_destroy__ = _openbabel.delete_OBAtomAtomIterAdaptor

# Register OBAtomAtomIterAdaptor in _openbabel:
_openbabel.OBAtomAtomIterAdaptor_swigregister(OBAtomAtomIterAdaptor)
OBATOM_TYPE_LEN = _openbabel.OBATOM_TYPE_LEN
class OBAtom(OBBase):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    Visit = property(_openbabel.OBAtom_Visit_get, _openbabel.OBAtom_Visit_set, doc=r"""Used internally by graph traversal algorithms""")

    def __init__(self):
        r"""Constructor"""
        _openbabel.OBAtom_swiginit(self, _openbabel.new_OBAtom())
    __swig_destroy__ = _openbabel.delete_OBAtom
    __eq__ = _swig_new_instance_method(_openbabel.OBAtom___eq__)
    Duplicate = _swig_new_instance_method(_openbabel.OBAtom_Duplicate)
    SetIdx = _swig_new_instance_method(_openbabel.OBAtom_SetIdx)
    SetId = _swig_new_instance_method(_openbabel.OBAtom_SetId)
    SetHyb = _swig_new_instance_method(_openbabel.OBAtom_SetHyb)
    SetAtomicNum = _swig_new_instance_method(_openbabel.OBAtom_SetAtomicNum)
    SetIsotope = _swig_new_instance_method(_openbabel.OBAtom_SetIsotope)
    SetImplicitHCount = _swig_new_instance_method(_openbabel.OBAtom_SetImplicitHCount)
    SetFormalCharge = _swig_new_instance_method(_openbabel.OBAtom_SetFormalCharge)
    SetSpinMultiplicity = _swig_new_instance_method(_openbabel.OBAtom_SetSpinMultiplicity)
    SetType = _swig_new_instance_method(_openbabel.OBAtom_SetType)
    SetPartialCharge = _swig_new_instance_method(_openbabel.OBAtom_SetPartialCharge)
    SetCoordPtr = _swig_new_instance_method(_openbabel.OBAtom_SetCoordPtr)
    SetVector = _swig_new_instance_method(_openbabel.OBAtom_SetVector)
    SetResidue = _swig_new_instance_method(_openbabel.OBAtom_SetResidue)
    SetParent = _swig_new_instance_method(_openbabel.OBAtom_SetParent)
    SetAromatic = _swig_new_instance_method(_openbabel.OBAtom_SetAromatic)
    SetInRing = _swig_new_instance_method(_openbabel.OBAtom_SetInRing)
    ClearCoordPtr = _swig_new_instance_method(_openbabel.OBAtom_ClearCoordPtr)
    GetFormalCharge = _swig_new_instance_method(_openbabel.OBAtom_GetFormalCharge)
    GetAtomicNum = _swig_new_instance_method(_openbabel.OBAtom_GetAtomicNum)
    GetIsotope = _swig_new_instance_method(_openbabel.OBAtom_GetIsotope)
    GetSpinMultiplicity = _swig_new_instance_method(_openbabel.OBAtom_GetSpinMultiplicity)
    GetAtomicMass = _swig_new_instance_method(_openbabel.OBAtom_GetAtomicMass)
    GetExactMass = _swig_new_instance_method(_openbabel.OBAtom_GetExactMass)
    GetIdx = _swig_new_instance_method(_openbabel.OBAtom_GetIdx)
    GetIndex = _swig_new_instance_method(_openbabel.OBAtom_GetIndex)
    GetId = _swig_new_instance_method(_openbabel.OBAtom_GetId)
    GetCoordinateIdx = _swig_new_instance_method(_openbabel.OBAtom_GetCoordinateIdx)
    GetExplicitDegree = _swig_new_instance_method(_openbabel.OBAtom_GetExplicitDegree)
    GetTotalDegree = _swig_new_instance_method(_openbabel.OBAtom_GetTotalDegree)
    GetExplicitValence = _swig_new_instance_method(_openbabel.OBAtom_GetExplicitValence)
    GetTotalValence = _swig_new_instance_method(_openbabel.OBAtom_GetTotalValence)
    GetHyb = _swig_new_instance_method(_openbabel.OBAtom_GetHyb)
    GetImplicitHCount = _swig_new_instance_method(_openbabel.OBAtom_GetImplicitHCount)
    GetHvyDegree = _swig_new_instance_method(_openbabel.OBAtom_GetHvyDegree)
    GetHeteroDegree = _swig_new_instance_method(_openbabel.OBAtom_GetHeteroDegree)
    GetType = _swig_new_instance_method(_openbabel.OBAtom_GetType)
    GetX = _swig_new_instance_method(_openbabel.OBAtom_GetX)
    GetY = _swig_new_instance_method(_openbabel.OBAtom_GetY)
    GetZ = _swig_new_instance_method(_openbabel.OBAtom_GetZ)
    x = _swig_new_instance_method(_openbabel.OBAtom_x)
    y = _swig_new_instance_method(_openbabel.OBAtom_y)
    z = _swig_new_instance_method(_openbabel.OBAtom_z)
    GetCoordinate = _swig_new_instance_method(_openbabel.OBAtom_GetCoordinate)
    GetVector = _swig_new_instance_method(_openbabel.OBAtom_GetVector)
    GetPartialCharge = _swig_new_instance_method(_openbabel.OBAtom_GetPartialCharge)
    GetResidue = _swig_new_instance_method(_openbabel.OBAtom_GetResidue)
    GetParent = _swig_new_instance_method(_openbabel.OBAtom_GetParent)
    GetNewBondVector = _swig_new_instance_method(_openbabel.OBAtom_GetNewBondVector)
    GetBond = _swig_new_instance_method(_openbabel.OBAtom_GetBond)
    BeginBonds = _swig_new_instance_method(_openbabel.OBAtom_BeginBonds)
    EndBonds = _swig_new_instance_method(_openbabel.OBAtom_EndBonds)
    GetBonds = _swig_new_instance_method(_openbabel.OBAtom_GetBonds)
    BeginBond = _swig_new_instance_method(_openbabel.OBAtom_BeginBond)
    NextBond = _swig_new_instance_method(_openbabel.OBAtom_NextBond)
    GetNbrs = _swig_new_instance_method(_openbabel.OBAtom_GetNbrs)
    BeginNbrAtom = _swig_new_instance_method(_openbabel.OBAtom_BeginNbrAtom)
    NextNbrAtom = _swig_new_instance_method(_openbabel.OBAtom_NextNbrAtom)
    GetDistance = _swig_new_instance_method(_openbabel.OBAtom_GetDistance)
    GetAngle = _swig_new_instance_method(_openbabel.OBAtom_GetAngle)
    NewResidue = _swig_new_instance_method(_openbabel.OBAtom_NewResidue)
    AddResidue = _swig_new_instance_method(_openbabel.OBAtom_AddResidue)
    DeleteResidue = _swig_new_instance_method(_openbabel.OBAtom_DeleteResidue)
    AddBond = _swig_new_instance_method(_openbabel.OBAtom_AddBond)
    InsertBond = _swig_new_instance_method(_openbabel.OBAtom_InsertBond)
    DeleteBond = _swig_new_instance_method(_openbabel.OBAtom_DeleteBond)
    ClearBond = _swig_new_instance_method(_openbabel.OBAtom_ClearBond)
    HtoMethyl = _swig_new_instance_method(_openbabel.OBAtom_HtoMethyl)
    SetHybAndGeom = _swig_new_instance_method(_openbabel.OBAtom_SetHybAndGeom)
    CountFreeOxygens = _swig_new_instance_method(_openbabel.OBAtom_CountFreeOxygens)
    CountFreeSulfurs = _swig_new_instance_method(_openbabel.OBAtom_CountFreeSulfurs)
    ExplicitHydrogenCount = _swig_new_instance_method(_openbabel.OBAtom_ExplicitHydrogenCount)
    MemberOfRingCount = _swig_new_instance_method(_openbabel.OBAtom_MemberOfRingCount)
    MemberOfRingSize = _swig_new_instance_method(_openbabel.OBAtom_MemberOfRingSize)
    CountRingBonds = _swig_new_instance_method(_openbabel.OBAtom_CountRingBonds)
    SmallestBondAngle = _swig_new_instance_method(_openbabel.OBAtom_SmallestBondAngle)
    AverageBondAngle = _swig_new_instance_method(_openbabel.OBAtom_AverageBondAngle)
    LewisAcidBaseCounts = _swig_new_instance_method(_openbabel.OBAtom_LewisAcidBaseCounts)
    HasResidue = _swig_new_instance_method(_openbabel.OBAtom_HasResidue)
    IsHetAtom = _swig_new_instance_method(_openbabel.OBAtom_IsHetAtom)
    IsElement = _swig_new_instance_method(_openbabel.OBAtom_IsElement)
    IsAromatic = _swig_new_instance_method(_openbabel.OBAtom_IsAromatic)
    IsInRing = _swig_new_instance_method(_openbabel.OBAtom_IsInRing)
    IsInRingSize = _swig_new_instance_method(_openbabel.OBAtom_IsInRingSize)
    IsHeteroatom = _swig_new_instance_method(_openbabel.OBAtom_IsHeteroatom)
    IsConnected = _swig_new_instance_method(_openbabel.OBAtom_IsConnected)
    IsOneThree = _swig_new_instance_method(_openbabel.OBAtom_IsOneThree)
    IsOneFour = _swig_new_instance_method(_openbabel.OBAtom_IsOneFour)
    IsCarboxylOxygen = _swig_new_instance_method(_openbabel.OBAtom_IsCarboxylOxygen)
    IsPhosphateOxygen = _swig_new_instance_method(_openbabel.OBAtom_IsPhosphateOxygen)
    IsSulfateOxygen = _swig_new_instance_method(_openbabel.OBAtom_IsSulfateOxygen)
    IsNitroOxygen = _swig_new_instance_method(_openbabel.OBAtom_IsNitroOxygen)
    IsAmideNitrogen = _swig_new_instance_method(_openbabel.OBAtom_IsAmideNitrogen)
    IsPolarHydrogen = _swig_new_instance_method(_openbabel.OBAtom_IsPolarHydrogen)
    IsNonPolarHydrogen = _swig_new_instance_method(_openbabel.OBAtom_IsNonPolarHydrogen)
    IsAromaticNOxide = _swig_new_instance_method(_openbabel.OBAtom_IsAromaticNOxide)
    IsChiral = _swig_new_instance_method(_openbabel.OBAtom_IsChiral)
    IsPeriodic = _swig_new_instance_method(_openbabel.OBAtom_IsPeriodic)
    IsAxial = _swig_new_instance_method(_openbabel.OBAtom_IsAxial)
    IsHbondAcceptor = _swig_new_instance_method(_openbabel.OBAtom_IsHbondAcceptor)
    IsHbondAcceptorSimple = _swig_new_instance_method(_openbabel.OBAtom_IsHbondAcceptorSimple)
    IsHbondDonor = _swig_new_instance_method(_openbabel.OBAtom_IsHbondDonor)
    IsHbondDonorH = _swig_new_instance_method(_openbabel.OBAtom_IsHbondDonorH)
    IsMetal = _swig_new_instance_method(_openbabel.OBAtom_IsMetal)
    HasAlphaBetaUnsat = _swig_new_instance_method(_openbabel.OBAtom_HasAlphaBetaUnsat)
    HasBondOfOrder = _swig_new_instance_method(_openbabel.OBAtom_HasBondOfOrder)
    CountBondsOfOrder = _swig_new_instance_method(_openbabel.OBAtom_CountBondsOfOrder)
    HighestBondOrder = _swig_new_instance_method(_openbabel.OBAtom_HighestBondOrder)
    HasNonSingleBond = _swig_new_instance_method(_openbabel.OBAtom_HasNonSingleBond)
    HasSingleBond = _swig_new_instance_method(_openbabel.OBAtom_HasSingleBond)
    HasDoubleBond = _swig_new_instance_method(_openbabel.OBAtom_HasDoubleBond)
    HasAromaticBond = _swig_new_instance_method(_openbabel.OBAtom_HasAromaticBond)
    MatchesSMARTS = _swig_new_instance_method(_openbabel.OBAtom_MatchesSMARTS)

# Register OBAtom in _openbabel:
_openbabel.OBAtom_swigregister(OBAtom)
OB_AROMATIC_BOND = _openbabel.OB_AROMATIC_BOND
r"""An aromatic bond (regardless of bond order)"""
OB_WEDGE_BOND = _openbabel.OB_WEDGE_BOND
r"""A solid black wedge in 2D representations -- i.e., "up" from the 2D plane"""
OB_HASH_BOND = _openbabel.OB_HASH_BOND
r"""A dashed "hash" bond in 2D representations -- i.e., "down" from the 2D plane"""
OB_RING_BOND = _openbabel.OB_RING_BOND
r"""A bond in a ring"""
OB_CLOSURE_BOND = _openbabel.OB_CLOSURE_BOND
r"""A bond which "closes" a ring when walking the molecular graph"""
OB_WEDGE_OR_HASH_BOND = _openbabel.OB_WEDGE_OR_HASH_BOND
class OBBond(OBBase):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    Aromatic = _openbabel.OBBond_Aromatic
    r"""An aromatic bond (regardless of bond order)"""
    Ring = _openbabel.OBBond_Ring
    r"""A bond in a ring"""
    Closure = _openbabel.OBBond_Closure
    r"""A bond which "closes" a ring when walking the molecular graph"""
    Wedge = _openbabel.OBBond_Wedge
    r"""A solid black wedge in 2D representations -- i.e., "up" from the 2D plane"""
    Hash = _openbabel.OBBond_Hash
    r"""A dashed "hash" bond in 2D representations -- i.e., "down" from the 2D plane"""
    WedgeOrHash = _openbabel.OBBond_WedgeOrHash
    r"""The bond is either wedge or hash, this is a separate flag!"""
    CisOrTrans = _openbabel.OBBond_CisOrTrans
    r"""Indicates the 2D/3D coordinates are accidentally cis/trans."""
    Visit = property(_openbabel.OBBond_Visit_get, _openbabel.OBBond_Visit_set, doc=r"""Whether this bond has been visited by a graph algorithm Deprecated: Use OBBitVec objects instead to be fully thread-safe. *""")

    def __init__(self):
        r"""Constructor"""
        _openbabel.OBBond_swiginit(self, _openbabel.new_OBBond())
    __swig_destroy__ = _openbabel.delete_OBBond
    SetIdx = _swig_new_instance_method(_openbabel.OBBond_SetIdx)
    SetId = _swig_new_instance_method(_openbabel.OBBond_SetId)
    SetBondOrder = _swig_new_instance_method(_openbabel.OBBond_SetBondOrder)
    SetBegin = _swig_new_instance_method(_openbabel.OBBond_SetBegin)
    SetEnd = _swig_new_instance_method(_openbabel.OBBond_SetEnd)
    SetParent = _swig_new_instance_method(_openbabel.OBBond_SetParent)
    SetLength = _swig_new_instance_method(_openbabel.OBBond_SetLength)
    Set = _swig_new_instance_method(_openbabel.OBBond_Set)
    SetAromatic = _swig_new_instance_method(_openbabel.OBBond_SetAromatic)
    SetWedge = _swig_new_instance_method(_openbabel.OBBond_SetWedge)
    SetHash = _swig_new_instance_method(_openbabel.OBBond_SetHash)
    SetWedgeOrHash = _swig_new_instance_method(_openbabel.OBBond_SetWedgeOrHash)
    SetInRing = _swig_new_instance_method(_openbabel.OBBond_SetInRing)
    SetClosure = _swig_new_instance_method(_openbabel.OBBond_SetClosure)
    GetIdx = _swig_new_instance_method(_openbabel.OBBond_GetIdx)
    GetId = _swig_new_instance_method(_openbabel.OBBond_GetId)
    GetBondOrder = _swig_new_instance_method(_openbabel.OBBond_GetBondOrder)
    GetFlags = _swig_new_instance_method(_openbabel.OBBond_GetFlags)
    GetBeginAtomIdx = _swig_new_instance_method(_openbabel.OBBond_GetBeginAtomIdx)
    GetEndAtomIdx = _swig_new_instance_method(_openbabel.OBBond_GetEndAtomIdx)
    GetBeginAtom = _swig_new_instance_method(_openbabel.OBBond_GetBeginAtom)
    GetEndAtom = _swig_new_instance_method(_openbabel.OBBond_GetEndAtom)
    GetNbrAtom = _swig_new_instance_method(_openbabel.OBBond_GetNbrAtom)
    GetParent = _swig_new_instance_method(_openbabel.OBBond_GetParent)
    GetEquibLength = _swig_new_instance_method(_openbabel.OBBond_GetEquibLength)
    GetLength = _swig_new_instance_method(_openbabel.OBBond_GetLength)
    GetNbrAtomIdx = _swig_new_instance_method(_openbabel.OBBond_GetNbrAtomIdx)
    FindSmallestRing = _swig_new_instance_method(_openbabel.OBBond_FindSmallestRing)
    IsAromatic = _swig_new_instance_method(_openbabel.OBBond_IsAromatic)
    IsInRing = _swig_new_instance_method(_openbabel.OBBond_IsInRing)
    IsRotor = _swig_new_instance_method(_openbabel.OBBond_IsRotor)
    IsPeriodic = _swig_new_instance_method(_openbabel.OBBond_IsPeriodic)
    IsAmide = _swig_new_instance_method(_openbabel.OBBond_IsAmide)
    IsPrimaryAmide = _swig_new_instance_method(_openbabel.OBBond_IsPrimaryAmide)
    IsSecondaryAmide = _swig_new_instance_method(_openbabel.OBBond_IsSecondaryAmide)
    IsTertiaryAmide = _swig_new_instance_method(_openbabel.OBBond_IsTertiaryAmide)
    IsEster = _swig_new_instance_method(_openbabel.OBBond_IsEster)
    IsCarbonyl = _swig_new_instance_method(_openbabel.OBBond_IsCarbonyl)
    IsClosure = _swig_new_instance_method(_openbabel.OBBond_IsClosure)
    IsWedge = _swig_new_instance_method(_openbabel.OBBond_IsWedge)
    IsHash = _swig_new_instance_method(_openbabel.OBBond_IsHash)
    IsWedgeOrHash = _swig_new_instance_method(_openbabel.OBBond_IsWedgeOrHash)
    IsCisOrTrans = _swig_new_instance_method(_openbabel.OBBond_IsCisOrTrans)
    IsDoubleBondGeometry = _swig_new_instance_method(_openbabel.OBBond_IsDoubleBondGeometry)

# Register OBBond in _openbabel:
_openbabel.OBBond_swigregister(OBBond)
class OBReaction(OBBase):
    r"""Used to store chemical reactions (i.e., reactants -> products) Reactants and products stored as smart pointers to molecules stored elsewhere. For performing actual reaction transformations (i.e., deleting atoms, changing bonds, etc.) use the OBChemTsfm class."""

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

    def __init__(self):
        _openbabel.OBReaction_swiginit(self, _openbabel.new_OBReaction())
    NumReactants = _swig_new_instance_method(_openbabel.OBReaction_NumReactants)
    NumProducts = _swig_new_instance_method(_openbabel.OBReaction_NumProducts)
    NumAgents = _swig_new_instance_method(_openbabel.OBReaction_NumAgents)
    AddReactant = _swig_new_instance_method(_openbabel.OBReaction_AddReactant)
    AddProduct = _swig_new_instance_method(_openbabel.OBReaction_AddProduct)
    SetTransitionState = _swig_new_instance_method(_openbabel.OBReaction_SetTransitionState)
    AddAgent = _swig_new_instance_method(_openbabel.OBReaction_AddAgent)
    GetReactant = _swig_new_instance_method(_openbabel.OBReaction_GetReactant)
    GetProduct = _swig_new_instance_method(_openbabel.OBReaction_GetProduct)
    GetAgent = _swig_new_instance_method(_openbabel.OBReaction_GetAgent)
    GetTransitionState = _swig_new_instance_method(_openbabel.OBReaction_GetTransitionState)
    GetTitle = _swig_new_instance_method(_openbabel.OBReaction_GetTitle)
    GetComment = _swig_new_instance_method(_openbabel.OBReaction_GetComment)
    SetTitle = _swig_new_instance_method(_openbabel.OBReaction_SetTitle)
    SetComment = _swig_new_instance_method(_openbabel.OBReaction_SetComment)
    IsReversible = _swig_new_instance_method(_openbabel.OBReaction_IsReversible)
    SetReversible = _swig_new_instance_method(_openbabel.OBReaction_SetReversible)
    ClassDescription = _swig_new_static_method(_openbabel.OBReaction_ClassDescription)
    __swig_destroy__ = _openbabel.delete_OBReaction

# Register OBReaction in _openbabel:
_openbabel.OBReaction_swigregister(OBReaction)
NO_REACTIONROLE = _openbabel.NO_REACTIONROLE
r"""no reaction role - useful for temporarily hiding a component"""
REACTANT = _openbabel.REACTANT
r"""reactant"""
AGENT = _openbabel.AGENT
r"""agent, a term that includes solvents and catalysts"""
PRODUCT = _openbabel.PRODUCT
r"""product"""
class OBReactionFacade(object):
    r"""
    <openbabel/reactionfacade.h>
    Facade to simplify manipulation of reactions stored as OBMol objects

    All of the information defining a reaction is stored as part of an OBMol.
    This information is:
    - a flag indicating that the OBMol represents a reaction (see OBMol::SetIsReaction(),
      and OBMol::IsReaction())
    - #OBPairInteger data attached to each atom indicating the reaction role ("rxnrole")
    - #OBPairInteger data attached to each atom indicating the reaction component Id ("rxncomp")

    Everything that may need to be done with reactions can be implemented using this
    information. The purpose of this class is simply to provide convenience functions
    that cover a range of likely use cases. If your use case is not included, it should
    still be straightforward for you to manipulate the underlying information to
    achieve your goal.

    Since: version 3.0
    """

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

    def __init__(self, mol):
        r"""
        The constructor requires an OBMol. Member functions retrieve or manipulate reaction
        data stored in this molecule.
        """
        _openbabel.OBReactionFacade_swiginit(self, _openbabel.new_OBReactionFacade(mol))
    __swig_destroy__ = _openbabel.delete_OBReactionFacade
    AssignComponentIds = _swig_new_instance_method(_openbabel.OBReactionFacade_AssignComponentIds)
    GetRole = _swig_new_instance_method(_openbabel.OBReactionFacade_GetRole)
    GetComponentId = _swig_new_instance_method(_openbabel.OBReactionFacade_GetComponentId)
    SetRole = _swig_new_instance_method(_openbabel.OBReactionFacade_SetRole)
    SetComponentId = _swig_new_instance_method(_openbabel.OBReactionFacade_SetComponentId)
    IsValid = _swig_new_instance_method(_openbabel.OBReactionFacade_IsValid)
    AddComponent = _swig_new_instance_method(_openbabel.OBReactionFacade_AddComponent)
    ClearInternalState = _swig_new_instance_method(_openbabel.OBReactionFacade_ClearInternalState)
    GetComponent = _swig_new_instance_method(_openbabel.OBReactionFacade_GetComponent)
    NumComponents = _swig_new_instance_method(_openbabel.OBReactionFacade_NumComponents)
    ReassignComponent = _swig_new_instance_method(_openbabel.OBReactionFacade_ReassignComponent)

# Register OBReactionFacade in _openbabel:
_openbabel.OBReactionFacade_swigregister(OBReactionFacade)

def exceptionIter(*args):
    raise Exception("""\nThis method can only be used from C++. To iterate from Python
use the Iter classes (OBMolAtomIter, etc.) as described at
http://openbabel.org/wiki/Python""")

OB_SSSR_MOL = _openbabel.OB_SSSR_MOL
r"""Smallest Set of Smallest Rings (SSSR) done. See OBRing and OBMol::FindSSSR"""
OB_RINGFLAGS_MOL = _openbabel.OB_RINGFLAGS_MOL
r"""Ring flags have been set: See OBRing::FindRingAtomsAndBonds"""
OB_AROMATIC_MOL = _openbabel.OB_AROMATIC_MOL
r"""Aromatic flags have been set for atoms and bonds"""
OB_ATOMTYPES_MOL = _openbabel.OB_ATOMTYPES_MOL
r"""Atom typing has been performed. See OBAtomTyper"""
OB_CHIRALITY_MOL = _openbabel.OB_CHIRALITY_MOL
r"""Chirality detection has been performed."""
OB_PCHARGE_MOL = _openbabel.OB_PCHARGE_MOL
r"""Partial charges have been set or percieved"""
OB_HYBRID_MOL = _openbabel.OB_HYBRID_MOL
r"""Atom hybridizations have been set. See OBAtomTyper"""
OB_CLOSURE_MOL = _openbabel.OB_CLOSURE_MOL
r"""Ring "closure" bonds have been set. See OBBond::IsClosure"""
OB_H_ADDED_MOL = _openbabel.OB_H_ADDED_MOL
r"""Hyrdogen atoms have been added where needed. See OBMol::AddHydrogens"""
OB_PH_CORRECTED_MOL = _openbabel.OB_PH_CORRECTED_MOL
r"""pH correction for hydrogen addition has been performed."""
OB_CHAINS_MOL = _openbabel.OB_CHAINS_MOL
r"""Biomolecular chains and residues have been set. See OBChainsParser"""
OB_TCHARGE_MOL = _openbabel.OB_TCHARGE_MOL
r"""Total charge on this molecule has been set. See OBMol::SetTotalCharge"""
OB_TSPIN_MOL = _openbabel.OB_TSPIN_MOL
r"""Total spin on this molecule has been set. See OBMol::SetTotalSpinMultiplicity"""
OB_RINGTYPES_MOL = _openbabel.OB_RINGTYPES_MOL
r"""Ring typing has been performed. See OBRingTyper"""
OB_PATTERN_STRUCTURE = _openbabel.OB_PATTERN_STRUCTURE
r"""A pattern, not a complete molecule."""
OB_LSSR_MOL = _openbabel.OB_LSSR_MOL
r"""Largest Set of Smallest Rings (LSSR) done. See OBRing and OBMol::FindLSSR"""
OB_ATOMSPIN_MOL = _openbabel.OB_ATOMSPIN_MOL
r"""SpinMultiplicities on atoms have been set in OBMol::AssignSpinMultiplicity()"""
OB_REACTION_MOL = _openbabel.OB_REACTION_MOL
r"""Treat as reaction"""
OB_PERIODIC_MOL = _openbabel.OB_PERIODIC_MOL
r"""Molecule is repeating in a periodic unit cell"""
OB_CURRENT_CONFORMER = _openbabel.OB_CURRENT_CONFORMER
AllHydrogen = _openbabel.AllHydrogen
PolarHydrogen = _openbabel.PolarHydrogen
NonPolarHydrogen = _openbabel.NonPolarHydrogen
class OBMol(OBBase):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        *Overload 1:*
        Constructor

        |

        *Overload 2:*
        Copy constructor, copies atoms,bonds and OBGenericData
        """
        _openbabel.OBMol_swiginit(self, _openbabel.new_OBMol(*args))
    __swig_destroy__ = _openbabel.delete_OBMol
    __iadd__ = _swig_new_instance_method(_openbabel.OBMol___iadd__)
    ReserveAtoms = _swig_new_instance_method(_openbabel.OBMol_ReserveAtoms)
    DestroyAtom = _swig_new_instance_method(_openbabel.OBMol_DestroyAtom)
    DestroyBond = _swig_new_instance_method(_openbabel.OBMol_DestroyBond)
    DestroyResidue = _swig_new_instance_method(_openbabel.OBMol_DestroyResidue)
    AddAtom = _swig_new_instance_method(_openbabel.OBMol_AddAtom)
    InsertAtom = _swig_new_instance_method(_openbabel.OBMol_InsertAtom)
    AddBond = _swig_new_instance_method(_openbabel.OBMol_AddBond)
    AddResidue = _swig_new_instance_method(_openbabel.OBMol_AddResidue)
    NewAtom = _swig_new_instance_method(_openbabel.OBMol_NewAtom)
    NewBond = _swig_new_instance_method(_openbabel.OBMol_NewBond)
    NewResidue = _swig_new_instance_method(_openbabel.OBMol_NewResidue)
    DeleteAtom = _swig_new_instance_method(_openbabel.OBMol_DeleteAtom)
    DeleteBond = _swig_new_instance_method(_openbabel.OBMol_DeleteBond)
    DeleteResidue = _swig_new_instance_method(_openbabel.OBMol_DeleteResidue)
    BeginModify = _swig_new_instance_method(_openbabel.OBMol_BeginModify)
    EndModify = _swig_new_instance_method(_openbabel.OBMol_EndModify)
    GetMod = _swig_new_instance_method(_openbabel.OBMol_GetMod)
    IncrementMod = _swig_new_instance_method(_openbabel.OBMol_IncrementMod)
    DecrementMod = _swig_new_instance_method(_openbabel.OBMol_DecrementMod)
    GetFlags = _swig_new_instance_method(_openbabel.OBMol_GetFlags)
    GetTitle = _swig_new_instance_method(_openbabel.OBMol_GetTitle)
    NumAtoms = _swig_new_instance_method(_openbabel.OBMol_NumAtoms)
    NumBonds = _swig_new_instance_method(_openbabel.OBMol_NumBonds)
    NumHvyAtoms = _swig_new_instance_method(_openbabel.OBMol_NumHvyAtoms)
    NumResidues = _swig_new_instance_method(_openbabel.OBMol_NumResidues)
    NumRotors = _swig_new_instance_method(_openbabel.OBMol_NumRotors)
    GetAtom = _swig_new_instance_method(_openbabel.OBMol_GetAtom)
    GetAtomById = _swig_new_instance_method(_openbabel.OBMol_GetAtomById)
    GetFirstAtom = _swig_new_instance_method(_openbabel.OBMol_GetFirstAtom)
    GetBondById = _swig_new_instance_method(_openbabel.OBMol_GetBondById)
    GetBond = _swig_new_instance_method(_openbabel.OBMol_GetBond)
    GetResidue = _swig_new_instance_method(_openbabel.OBMol_GetResidue)
    GetInternalCoord = _swig_new_instance_method(_openbabel.OBMol_GetInternalCoord)
    GetTorsion = _swig_new_instance_method(_openbabel.OBMol_GetTorsion)
    GetAngle = _swig_new_instance_method(_openbabel.OBMol_GetAngle)
    AreInSameRing = _swig_new_instance_method(_openbabel.OBMol_AreInSameRing)
    GetFormula = _swig_new_instance_method(_openbabel.OBMol_GetFormula)
    GetSpacedFormula = _swig_new_instance_method(_openbabel.OBMol_GetSpacedFormula)
    GetMolWt = _swig_new_instance_method(_openbabel.OBMol_GetMolWt)
    GetExactMass = _swig_new_instance_method(_openbabel.OBMol_GetExactMass)
    GetTotalCharge = _swig_new_instance_method(_openbabel.OBMol_GetTotalCharge)
    GetTotalSpinMultiplicity = _swig_new_instance_method(_openbabel.OBMol_GetTotalSpinMultiplicity)
    GetDimension = _swig_new_instance_method(_openbabel.OBMol_GetDimension)
    GetCoordinates = _swig_new_instance_method(_openbabel.OBMol_GetCoordinates)
    GetSSSR = _swig_new_instance_method(_openbabel.OBMol_GetSSSR)
    GetLSSR = _swig_new_instance_method(_openbabel.OBMol_GetLSSR)
    AutomaticFormalCharge = _swig_new_instance_method(_openbabel.OBMol_AutomaticFormalCharge)
    AutomaticPartialCharge = _swig_new_instance_method(_openbabel.OBMol_AutomaticPartialCharge)
    SetTitle = _swig_new_instance_method(_openbabel.OBMol_SetTitle)
    SetFormula = _swig_new_instance_method(_openbabel.OBMol_SetFormula)
    SetEnergy = _swig_new_instance_method(_openbabel.OBMol_SetEnergy)
    SetDimension = _swig_new_instance_method(_openbabel.OBMol_SetDimension)
    SetTotalCharge = _swig_new_instance_method(_openbabel.OBMol_SetTotalCharge)
    SetTotalSpinMultiplicity = _swig_new_instance_method(_openbabel.OBMol_SetTotalSpinMultiplicity)
    SetInternalCoord = _swig_new_instance_method(_openbabel.OBMol_SetInternalCoord)
    SetAutomaticFormalCharge = _swig_new_instance_method(_openbabel.OBMol_SetAutomaticFormalCharge)
    SetAutomaticPartialCharge = _swig_new_instance_method(_openbabel.OBMol_SetAutomaticPartialCharge)
    SetAromaticPerceived = _swig_new_instance_method(_openbabel.OBMol_SetAromaticPerceived)
    SetSSSRPerceived = _swig_new_instance_method(_openbabel.OBMol_SetSSSRPerceived)
    SetLSSRPerceived = _swig_new_instance_method(_openbabel.OBMol_SetLSSRPerceived)
    SetRingAtomsAndBondsPerceived = _swig_new_instance_method(_openbabel.OBMol_SetRingAtomsAndBondsPerceived)
    SetAtomTypesPerceived = _swig_new_instance_method(_openbabel.OBMol_SetAtomTypesPerceived)
    SetRingTypesPerceived = _swig_new_instance_method(_openbabel.OBMol_SetRingTypesPerceived)
    SetChainsPerceived = _swig_new_instance_method(_openbabel.OBMol_SetChainsPerceived)
    SetChiralityPerceived = _swig_new_instance_method(_openbabel.OBMol_SetChiralityPerceived)
    SetPartialChargesPerceived = _swig_new_instance_method(_openbabel.OBMol_SetPartialChargesPerceived)
    SetHybridizationPerceived = _swig_new_instance_method(_openbabel.OBMol_SetHybridizationPerceived)
    SetClosureBondsPerceived = _swig_new_instance_method(_openbabel.OBMol_SetClosureBondsPerceived)
    SetHydrogensAdded = _swig_new_instance_method(_openbabel.OBMol_SetHydrogensAdded)
    SetCorrectedForPH = _swig_new_instance_method(_openbabel.OBMol_SetCorrectedForPH)
    SetSpinMultiplicityAssigned = _swig_new_instance_method(_openbabel.OBMol_SetSpinMultiplicityAssigned)
    SetIsPatternStructure = _swig_new_instance_method(_openbabel.OBMol_SetIsPatternStructure)
    SetIsReaction = _swig_new_instance_method(_openbabel.OBMol_SetIsReaction)
    SetPeriodicMol = _swig_new_instance_method(_openbabel.OBMol_SetPeriodicMol)
    HasFlag = _swig_new_instance_method(_openbabel.OBMol_HasFlag)
    SetFlag = _swig_new_instance_method(_openbabel.OBMol_SetFlag)
    UnsetFlag = _swig_new_instance_method(_openbabel.OBMol_UnsetFlag)
    SetFlags = _swig_new_instance_method(_openbabel.OBMol_SetFlags)
    ClassDescription = _swig_new_static_method(_openbabel.OBMol_ClassDescription)
    RenumberAtoms = _swig_new_instance_method(_openbabel.OBMol_RenumberAtoms)
    SetCoordinates = _swig_new_instance_method(_openbabel.OBMol_SetCoordinates)
    ToInertialFrame = _swig_new_instance_method(_openbabel.OBMol_ToInertialFrame)
    Translate = _swig_new_instance_method(_openbabel.OBMol_Translate)
    Rotate = _swig_new_instance_method(_openbabel.OBMol_Rotate)
    DeleteHydrogens = _swig_new_instance_method(_openbabel.OBMol_DeleteHydrogens)
    DeletePolarHydrogens = _swig_new_instance_method(_openbabel.OBMol_DeletePolarHydrogens)
    DeleteNonPolarHydrogens = _swig_new_instance_method(_openbabel.OBMol_DeleteNonPolarHydrogens)
    DeleteHydrogen = _swig_new_instance_method(_openbabel.OBMol_DeleteHydrogen)
    AddHydrogens = _swig_new_instance_method(_openbabel.OBMol_AddHydrogens)
    AddPolarHydrogens = _swig_new_instance_method(_openbabel.OBMol_AddPolarHydrogens)
    AddNonPolarHydrogens = _swig_new_instance_method(_openbabel.OBMol_AddNonPolarHydrogens)
    AddNewHydrogens = _swig_new_instance_method(_openbabel.OBMol_AddNewHydrogens)
    StripSalts = _swig_new_instance_method(_openbabel.OBMol_StripSalts)
    Separate = _swig_new_instance_method(_openbabel.OBMol_Separate)
    GetNextFragment = _swig_new_instance_method(_openbabel.OBMol_GetNextFragment)
    CopySubstructure = _swig_new_instance_method(_openbabel.OBMol_CopySubstructure)
    ConvertDativeBonds = _swig_new_instance_method(_openbabel.OBMol_ConvertDativeBonds)
    MakeDativeBonds = _swig_new_instance_method(_openbabel.OBMol_MakeDativeBonds)
    ConvertZeroBonds = _swig_new_instance_method(_openbabel.OBMol_ConvertZeroBonds)
    CorrectForPH = _swig_new_instance_method(_openbabel.OBMol_CorrectForPH)
    AssignSpinMultiplicity = _swig_new_instance_method(_openbabel.OBMol_AssignSpinMultiplicity)
    AssignTotalChargeToAtoms = _swig_new_instance_method(_openbabel.OBMol_AssignTotalChargeToAtoms)
    Center = _swig_new_instance_method(_openbabel.OBMol_Center)
    FindSSSR = _swig_new_instance_method(_openbabel.OBMol_FindSSSR)
    FindLSSR = _swig_new_instance_method(_openbabel.OBMol_FindLSSR)
    FindRingAtomsAndBonds = _swig_new_instance_method(_openbabel.OBMol_FindRingAtomsAndBonds)
    FindChildren = _swig_new_instance_method(_openbabel.OBMol_FindChildren)
    FindLargestFragment = _swig_new_instance_method(_openbabel.OBMol_FindLargestFragment)
    ContigFragList = _swig_new_instance_method(_openbabel.OBMol_ContigFragList)
    Align = _swig_new_instance_method(_openbabel.OBMol_Align)
    ConnectTheDots = _swig_new_instance_method(_openbabel.OBMol_ConnectTheDots)
    PerceiveBondOrders = _swig_new_instance_method(_openbabel.OBMol_PerceiveBondOrders)
    FindAngles = _swig_new_instance_method(_openbabel.OBMol_FindAngles)
    FindTorsions = _swig_new_instance_method(_openbabel.OBMol_FindTorsions)
    GetGTDVector = _swig_new_instance_method(_openbabel.OBMol_GetGTDVector)
    GetGIVector = _swig_new_instance_method(_openbabel.OBMol_GetGIVector)
    GetGIDVector = _swig_new_instance_method(_openbabel.OBMol_GetGIDVector)
    Has2D = _swig_new_instance_method(_openbabel.OBMol_Has2D)
    Has3D = _swig_new_instance_method(_openbabel.OBMol_Has3D)
    HasNonZeroCoords = _swig_new_instance_method(_openbabel.OBMol_HasNonZeroCoords)
    HasAromaticPerceived = _swig_new_instance_method(_openbabel.OBMol_HasAromaticPerceived)
    HasSSSRPerceived = _swig_new_instance_method(_openbabel.OBMol_HasSSSRPerceived)
    HasLSSRPerceived = _swig_new_instance_method(_openbabel.OBMol_HasLSSRPerceived)
    HasRingAtomsAndBondsPerceived = _swig_new_instance_method(_openbabel.OBMol_HasRingAtomsAndBondsPerceived)
    HasAtomTypesPerceived = _swig_new_instance_method(_openbabel.OBMol_HasAtomTypesPerceived)
    HasRingTypesPerceived = _swig_new_instance_method(_openbabel.OBMol_HasRingTypesPerceived)
    HasChiralityPerceived = _swig_new_instance_method(_openbabel.OBMol_HasChiralityPerceived)
    HasPartialChargesPerceived = _swig_new_instance_method(_openbabel.OBMol_HasPartialChargesPerceived)
    HasHybridizationPerceived = _swig_new_instance_method(_openbabel.OBMol_HasHybridizationPerceived)
    HasClosureBondsPerceived = _swig_new_instance_method(_openbabel.OBMol_HasClosureBondsPerceived)
    HasChainsPerceived = _swig_new_instance_method(_openbabel.OBMol_HasChainsPerceived)
    HasHydrogensAdded = _swig_new_instance_method(_openbabel.OBMol_HasHydrogensAdded)
    IsCorrectedForPH = _swig_new_instance_method(_openbabel.OBMol_IsCorrectedForPH)
    HasSpinMultiplicityAssigned = _swig_new_instance_method(_openbabel.OBMol_HasSpinMultiplicityAssigned)
    IsReaction = _swig_new_instance_method(_openbabel.OBMol_IsReaction)
    IsPeriodic = _swig_new_instance_method(_openbabel.OBMol_IsPeriodic)
    Empty = _swig_new_instance_method(_openbabel.OBMol_Empty)
    NumConformers = _swig_new_instance_method(_openbabel.OBMol_NumConformers)
    SetConformers = _swig_new_instance_method(_openbabel.OBMol_SetConformers)
    AddConformer = _swig_new_instance_method(_openbabel.OBMol_AddConformer)
    SetConformer = _swig_new_instance_method(_openbabel.OBMol_SetConformer)
    CopyConformer = _swig_new_instance_method(_openbabel.OBMol_CopyConformer)
    DeleteConformer = _swig_new_instance_method(_openbabel.OBMol_DeleteConformer)
    GetConformer = _swig_new_instance_method(_openbabel.OBMol_GetConformer)
    SetEnergies = _swig_new_instance_method(_openbabel.OBMol_SetEnergies)
    GetEnergies = _swig_new_instance_method(_openbabel.OBMol_GetEnergies)
    GetEnergy = _swig_new_instance_method(_openbabel.OBMol_GetEnergy)
    BeginConformer = _swig_new_instance_method(_openbabel.OBMol_BeginConformer)
    NextConformer = _swig_new_instance_method(_openbabel.OBMol_NextConformer)
    GetConformers = _swig_new_instance_method(_openbabel.OBMol_GetConformers)
    CBeginAtoms = _swig_new_instance_method(_openbabel.OBMol_CBeginAtoms)
    CEndAtoms = _swig_new_instance_method(_openbabel.OBMol_CEndAtoms)
    GetAtoms = _swig_new_instance_method(_openbabel.OBMol_GetAtoms)
    GetBonds = _swig_new_instance_method(_openbabel.OBMol_GetBonds)
    BeginInternalCoord = _swig_new_instance_method(_openbabel.OBMol_BeginInternalCoord)
    NextInternalCoord = _swig_new_instance_method(_openbabel.OBMol_NextInternalCoord)
    SetTorsion = _swig_new_instance_method(_openbabel.OBMol_SetTorsion)

# Register OBMol in _openbabel:
_openbabel.OBMol_swigregister(OBMol)
ThrowError = _openbabel.ThrowError
CartesianToInternal = _openbabel.CartesianToInternal
InternalToCartesian = _openbabel.InternalToCartesian
NewExtension = _openbabel.NewExtension
BUFF_SIZE = _openbabel.BUFF_SIZE
get_rmat = _openbabel.get_rmat
ob_make_rmat = _openbabel.ob_make_rmat
qtrfit = _openbabel.qtrfit
superimpose = _openbabel.superimpose

OBMol.BeginAtoms = OBMol.EndAtoms = OBMol.BeginAtom = OBMol.EndAtom = exceptionIter
OBMol.BeginBonds = OBMol.EndBonds = OBMol.BeginBond = OBMol.EndBond = exceptionIter
OBMol.BeginResidues = OBMol.EndResidues = OBMol.BeginResidue = OBMol.EndResidue = exceptionIter

class OBRing(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    ring_id = property(_openbabel.OBRing_ring_id_get, _openbabel.OBRing_ring_id_set, doc=r"""a unique id to ensure a stable sort in SSSR determination""")
    _path = property(_openbabel.OBRing__path_get, _openbabel.OBRing__path_set, doc=r"""the path of this ring (i.e., the atom indexes)""")
    _pathset = property(_openbabel.OBRing__pathset_get, _openbabel.OBRing__pathset_set, doc=r"""the path of this ring as a redundant bit vector""")

    def __init__(self, *args):
        r"""Initialize a ring from a set of atom indexes ``path`` and with ``size``"""
        _openbabel.OBRing_swiginit(self, _openbabel.new_OBRing(*args))
    Size = _swig_new_instance_method(_openbabel.OBRing_Size)
    PathSize = _swig_new_instance_method(_openbabel.OBRing_PathSize)
    IsAromatic = _swig_new_instance_method(_openbabel.OBRing_IsAromatic)
    SetType = _swig_new_instance_method(_openbabel.OBRing_SetType)
    GetType = _swig_new_instance_method(_openbabel.OBRing_GetType)
    GetRootAtom = _swig_new_instance_method(_openbabel.OBRing_GetRootAtom)
    IsMember = _swig_new_instance_method(_openbabel.OBRing_IsMember)
    IsInRing = _swig_new_instance_method(_openbabel.OBRing_IsInRing)
    SetParent = _swig_new_instance_method(_openbabel.OBRing_SetParent)
    GetParent = _swig_new_instance_method(_openbabel.OBRing_GetParent)
    findCenterAndNormal = _swig_new_instance_method(_openbabel.OBRing_findCenterAndNormal)
    __swig_destroy__ = _openbabel.delete_OBRing

# Register OBRing in _openbabel:
_openbabel.OBRing_swigregister(OBRing)
NoId = cvar.NoId

CompareRingSize = _openbabel.CompareRingSize
class OBRingSearch(object):
    r"""
    <openbabel/ring.h>
         Internal class to facilitate OBMol::FindSSSR()
    """

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

    def __init__(self):
        _openbabel.OBRingSearch_swiginit(self, _openbabel.new_OBRingSearch())
    __swig_destroy__ = _openbabel.delete_OBRingSearch
    SortRings = _swig_new_instance_method(_openbabel.OBRingSearch_SortRings)
    RemoveRedundant = _swig_new_instance_method(_openbabel.OBRingSearch_RemoveRedundant)
    AddRingFromClosure = _swig_new_instance_method(_openbabel.OBRingSearch_AddRingFromClosure)
    SaveUniqueRing = _swig_new_instance_method(_openbabel.OBRingSearch_SaveUniqueRing)
    WriteRings = _swig_new_instance_method(_openbabel.OBRingSearch_WriteRings)
    BeginRings = _swig_new_instance_method(_openbabel.OBRingSearch_BeginRings)
    EndRings = _swig_new_instance_method(_openbabel.OBRingSearch_EndRings)

# Register OBRingSearch in _openbabel:
_openbabel.OBRingSearch_swigregister(OBRingSearch)
class OBRTree(object):
    r"""
    <openbabel/ring.h>
         Internal class for OBRing search algorithms to create a search tree
         of OBAtom objects
    """

    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, arg3):
        r"""Construct a search tree from a possible parent entry and atom entry"""
        _openbabel.OBRTree_swiginit(self, _openbabel.new_OBRTree(arg2, arg3))
    __swig_destroy__ = _openbabel.delete_OBRTree
    GetAtomIdx = _swig_new_instance_method(_openbabel.OBRTree_GetAtomIdx)
    PathToRoot = _swig_new_instance_method(_openbabel.OBRTree_PathToRoot)

# Register OBRTree in _openbabel:
_openbabel.OBRTree_swigregister(OBRTree)
class OBSmartsPattern(object):
    r"""SMARTS (SMiles ARbitrary Target Specification) substructure searching"""

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

    def __init__(self, *args):
        _openbabel.OBSmartsPattern_swiginit(self, _openbabel.new_OBSmartsPattern(*args))
    Init = _swig_new_instance_method(_openbabel.OBSmartsPattern_Init)
    GetSMARTS = _swig_new_instance_method(_openbabel.OBSmartsPattern_GetSMARTS)
    Empty = _swig_new_instance_method(_openbabel.OBSmartsPattern_Empty)
    IsValid = _swig_new_instance_method(_openbabel.OBSmartsPattern_IsValid)
    NumAtoms = _swig_new_instance_method(_openbabel.OBSmartsPattern_NumAtoms)
    NumBonds = _swig_new_instance_method(_openbabel.OBSmartsPattern_NumBonds)
    GetBond = _swig_new_instance_method(_openbabel.OBSmartsPattern_GetBond)
    GetAtomicNum = _swig_new_instance_method(_openbabel.OBSmartsPattern_GetAtomicNum)
    GetCharge = _swig_new_instance_method(_openbabel.OBSmartsPattern_GetCharge)
    GetVectorBinding = _swig_new_instance_method(_openbabel.OBSmartsPattern_GetVectorBinding)
    All = _openbabel.OBSmartsPattern_All
    Single = _openbabel.OBSmartsPattern_Single
    AllUnique = _openbabel.OBSmartsPattern_AllUnique
    Match = _swig_new_instance_method(_openbabel.OBSmartsPattern_Match)
    HasMatch = _swig_new_instance_method(_openbabel.OBSmartsPattern_HasMatch)
    RestrictedMatch = _swig_new_instance_method(_openbabel.OBSmartsPattern_RestrictedMatch)
    NumMatches = _swig_new_instance_method(_openbabel.OBSmartsPattern_NumMatches)
    GetMapList = _swig_new_instance_method(_openbabel.OBSmartsPattern_GetMapList)
    BeginMList = _swig_new_instance_method(_openbabel.OBSmartsPattern_BeginMList)
    EndMList = _swig_new_instance_method(_openbabel.OBSmartsPattern_EndMList)
    GetUMapList = _swig_new_instance_method(_openbabel.OBSmartsPattern_GetUMapList)
    WriteMapList = _swig_new_instance_method(_openbabel.OBSmartsPattern_WriteMapList)

# Register OBSmartsPattern in _openbabel:
_openbabel.OBSmartsPattern_swigregister(OBSmartsPattern)
class OBSmartsMatcher(object):
    r"""<openbabel/parsmart.h> Internal class: performs matching; a wrapper around previous C matching code to make it thread safe."""

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

    def __init__(self):
        _openbabel.OBSmartsMatcher_swiginit(self, _openbabel.new_OBSmartsMatcher())
    __swig_destroy__ = _openbabel.delete_OBSmartsMatcher
    match = _swig_new_instance_method(_openbabel.OBSmartsMatcher_match)

# Register OBSmartsMatcher in _openbabel:
_openbabel.OBSmartsMatcher_swigregister(OBSmartsMatcher)
class OBSSMatch(object):
    r"""<openbabel/parsmart.h> Internal class: performs fast, exhaustive matching used to find just a single match in match() using recursion and explicit stack handling."""

    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, arg3):
        _openbabel.OBSSMatch_swiginit(self, _openbabel.new_OBSSMatch(arg2, arg3))
    __swig_destroy__ = _openbabel.delete_OBSSMatch
    Match = _swig_new_instance_method(_openbabel.OBSSMatch_Match)

# Register OBSSMatch in _openbabel:
_openbabel.OBSSMatch_swigregister(OBSSMatch)
SmartsLexReplace = _openbabel.SmartsLexReplace
class AliasData(OBGenericData):
    r"""
     <openbabel/alias.h>
      Indicate atoms as aliases for larger functional groups
      Since: version 2.2

    An object of this class can be attached to an OBAtom if it is considered
    to be a placeholder for an alias, such as Ph, COOH, etc.

    If the alias has not been interpreted chemically (expanded), the element type of the
    placeholder atom should be set to Xx so that the molecule is not interpreted
    incorrectly by formats which do not consider this class.

    If the alias has been interpreted chemically (which formats, etc. should
    normally do immediately), the alias may remain as extra
    information or as a hint for an alternative representation, for example to
    a chemical drawing program. The _expandedatoms vector would then contains
    the ids of the atoms to which the alias is an alternative.
    """

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

    def __init__(self):
        _openbabel.AliasData_swiginit(self, _openbabel.new_AliasData())
    SetAlias = _swig_new_instance_method(_openbabel.AliasData_SetAlias)
    GetAlias = _swig_new_instance_method(_openbabel.AliasData_GetAlias)
    GetColor = _swig_new_instance_method(_openbabel.AliasData_GetColor)
    SetColor = _swig_new_instance_method(_openbabel.AliasData_SetColor)
    IsExpanded = _swig_new_instance_method(_openbabel.AliasData_IsExpanded)
    RevertToAliasForm = _swig_new_static_method(_openbabel.AliasData_RevertToAliasForm)
    Expand = _swig_new_instance_method(_openbabel.AliasData_Expand)
    AddAliases = _swig_new_static_method(_openbabel.AliasData_AddAliases)
    __swig_destroy__ = _openbabel.delete_AliasData

# Register AliasData in _openbabel:
_openbabel.AliasData_swigregister(AliasData)
AliasDataType = cvar.AliasDataType

class OBFingerprint(OBPlugin):
    r"""The base class for fingerprints"""

    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
    Default = _swig_new_static_method(_openbabel.OBFingerprint_Default)
    FindType = _swig_new_static_method(_openbabel.OBFingerprint_FindType)
    __swig_destroy__ = _openbabel.delete_OBFingerprint
    SetBit = _swig_new_instance_method(_openbabel.OBFingerprint_SetBit)
    GetBit = _swig_new_instance_method(_openbabel.OBFingerprint_GetBit)
    Fold = _swig_new_instance_method(_openbabel.OBFingerprint_Fold)
    GetFingerprint = _swig_new_instance_method(_openbabel.OBFingerprint_GetFingerprint)
    FPT_UNIQUEBITS = _openbabel.OBFingerprint_FPT_UNIQUEBITS
    FPT_NOINFO = _openbabel.OBFingerprint_FPT_NOINFO
    Flags = _swig_new_instance_method(_openbabel.OBFingerprint_Flags)
    SetFlags = _swig_new_instance_method(_openbabel.OBFingerprint_SetFlags)
    DescribeBits = _swig_new_instance_method(_openbabel.OBFingerprint_DescribeBits)
    Tanimoto = _swig_new_static_method(_openbabel.OBFingerprint_Tanimoto)
    Getbitsperint = _swig_new_static_method(_openbabel.OBFingerprint_Getbitsperint)
    FindFingerprint = _swig_new_static_method(_openbabel.OBFingerprint_FindFingerprint)

# Register OBFingerprint in _openbabel:
_openbabel.OBFingerprint_swigregister(OBFingerprint)
class FptIndexHeader(object):
    r"""
    <openbabel/fingerprint.h>
    Header for fastsearch index file
    """

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    headerlength = property(_openbabel.FptIndexHeader_headerlength_get, _openbabel.FptIndexHeader_headerlength_set, doc=r"""offset to data: sizeof(FptIndexHeader)""")
    nEntries = property(_openbabel.FptIndexHeader_nEntries_get, _openbabel.FptIndexHeader_nEntries_set, doc=r"""number of fingerprints""")
    words = property(_openbabel.FptIndexHeader_words_get, _openbabel.FptIndexHeader_words_set, doc=r"""number 32bit words per fingerprint""")
    fpid = property(_openbabel.FptIndexHeader_fpid_get, _openbabel.FptIndexHeader_fpid_set, doc=r"""ID of the fingerprint type""")
    seek64 = property(_openbabel.FptIndexHeader_seek64_get, _openbabel.FptIndexHeader_seek64_set)
    datafilename = property(_openbabel.FptIndexHeader_datafilename_get, _openbabel.FptIndexHeader_datafilename_set, doc=r"""the data that this is an index to""")

    def __init__(self):
        _openbabel.FptIndexHeader_swiginit(self, _openbabel.new_FptIndexHeader())
    __swig_destroy__ = _openbabel.delete_FptIndexHeader

# Register FptIndexHeader in _openbabel:
_openbabel.FptIndexHeader_swigregister(FptIndexHeader)
class FastSearch(object):
    r"""
    <openbabel/fingerprint.h>
    Class to search fingerprint index files
    """

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    ReadIndexFile = _swig_new_instance_method(_openbabel.FastSearch_ReadIndexFile)
    ReadIndex = _swig_new_instance_method(_openbabel.FastSearch_ReadIndex)
    __swig_destroy__ = _openbabel.delete_FastSearch
    Find = _swig_new_instance_method(_openbabel.FastSearch_Find)
    FindMatch = _swig_new_instance_method(_openbabel.FastSearch_FindMatch)
    FindSimilar = _swig_new_instance_method(_openbabel.FastSearch_FindSimilar)
    GetFingerprint = _swig_new_instance_method(_openbabel.FastSearch_GetFingerprint)
    GetIndexHeader = _swig_new_instance_method(_openbabel.FastSearch_GetIndexHeader)

    def __init__(self):
        _openbabel.FastSearch_swiginit(self, _openbabel.new_FastSearch())

# Register FastSearch in _openbabel:
_openbabel.FastSearch_swigregister(FastSearch)
class FastSearchIndexer(object):
    r"""
    <openbabel/fingerprint.h>
    Class to prepare fingerprint index files See FastSearch class for details
    """

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

    def __init__(self, *args):
        r"""
        *Overload 1:*
        Constructor with a new index

        |

        *Overload 2:*
        Constructor using existing index

        |

        *Overload 3:*
        Constructor using existing index
        """
        _openbabel.FastSearchIndexer_swiginit(self, _openbabel.new_FastSearchIndexer(*args))
    __swig_destroy__ = _openbabel.delete_FastSearchIndexer
    Add = _swig_new_instance_method(_openbabel.FastSearchIndexer_Add)

# Register FastSearchIndexer in _openbabel:
_openbabel.FastSearchIndexer_swigregister(FastSearchIndexer)
class OBDescriptor(OBPlugin):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    Default = _swig_new_static_method(_openbabel.OBDescriptor_Default)

    def __init__(self, ID, IsDefault=False):
        _openbabel.OBDescriptor_swiginit(self, _openbabel.new_OBDescriptor(ID, IsDefault))
    FindType = _swig_new_static_method(_openbabel.OBDescriptor_FindType)
    Predict = _swig_new_instance_method(_openbabel.OBDescriptor_Predict)
    PredictAndSave = _swig_new_instance_method(_openbabel.OBDescriptor_PredictAndSave)
    GetStringValue = _swig_new_instance_method(_openbabel.OBDescriptor_GetStringValue)
    Compare = _swig_new_instance_method(_openbabel.OBDescriptor_Compare)
    Display = _swig_new_instance_method(_openbabel.OBDescriptor_Display)
    Order = _swig_new_instance_method(_openbabel.OBDescriptor_Order)
    FilterCompare = _swig_new_static_method(_openbabel.OBDescriptor_FilterCompare)
    AddProperties = _swig_new_static_method(_openbabel.OBDescriptor_AddProperties)
    DeleteProperties = _swig_new_static_method(_openbabel.OBDescriptor_DeleteProperties)
    GetValues = _swig_new_static_method(_openbabel.OBDescriptor_GetValues)
    GetIdentifier = _swig_new_static_method(_openbabel.OBDescriptor_GetIdentifier)
    __swig_destroy__ = _openbabel.delete_OBDescriptor

# Register OBDescriptor in _openbabel:
_openbabel.OBDescriptor_swigregister(OBDescriptor)
OBFF_LOGLVL_NONE = _openbabel.OBFF_LOGLVL_NONE
r"""no output"""
OBFF_LOGLVL_LOW = _openbabel.OBFF_LOGLVL_LOW
r"""SteepestDescent progress... (no output from Energy())"""
OBFF_LOGLVL_MEDIUM = _openbabel.OBFF_LOGLVL_MEDIUM
r"""individual energy terms"""
OBFF_LOGLVL_HIGH = _openbabel.OBFF_LOGLVL_HIGH
r"""individual calculations and parameters"""
OBFF_ENERGY = _openbabel.OBFF_ENERGY
r"""all terms"""
OBFF_EBOND = _openbabel.OBFF_EBOND
r"""bond term"""
OBFF_EANGLE = _openbabel.OBFF_EANGLE
r"""angle term"""
OBFF_ESTRBND = _openbabel.OBFF_ESTRBND
r"""strbnd term"""
OBFF_ETORSION = _openbabel.OBFF_ETORSION
r"""torsion term"""
OBFF_EOOP = _openbabel.OBFF_EOOP
r"""oop term"""
OBFF_EVDW = _openbabel.OBFF_EVDW
r"""vdw term"""
OBFF_EELECTROSTATIC = _openbabel.OBFF_EELECTROSTATIC
r"""electrostatic term"""
OBFF_CONST_IGNORE = _openbabel.OBFF_CONST_IGNORE
r"""ignore the atom while setting up calculations"""
OBFF_CONST_ATOM = _openbabel.OBFF_CONST_ATOM
r"""fix the atom position"""
OBFF_CONST_ATOM_X = _openbabel.OBFF_CONST_ATOM_X
r"""fix the x coordinate of the atom position"""
OBFF_CONST_ATOM_Y = _openbabel.OBFF_CONST_ATOM_Y
r"""fix the y coordinate of the atom position"""
OBFF_CONST_ATOM_Z = _openbabel.OBFF_CONST_ATOM_Z
r"""fix the z coordinate of the atom position"""
OBFF_CONST_DISTANCE = _openbabel.OBFF_CONST_DISTANCE
r"""constrain distance length"""
OBFF_CONST_ANGLE = _openbabel.OBFF_CONST_ANGLE
r"""constrain angle"""
OBFF_CONST_TORSION = _openbabel.OBFF_CONST_TORSION
r"""constrain torsion"""
OBFF_CONST_CHIRAL = _openbabel.OBFF_CONST_CHIRAL
r"""constrain chiral volume"""
OBFF_NUMERICAL_GRADIENT = _openbabel.OBFF_NUMERICAL_GRADIENT
r"""use numerical gradients"""
OBFF_ANALYTICAL_GRADIENT = _openbabel.OBFF_ANALYTICAL_GRADIENT
r"""use analytical gradients"""
class LineSearchType(object):
    r"""The type of line search to be used for optimization -- simple or Newton numeric"""

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

    def __init__(self):
        _openbabel.LineSearchType_swiginit(self, _openbabel.new_LineSearchType())
    __swig_destroy__ = _openbabel.delete_LineSearchType

# Register LineSearchType in _openbabel:
_openbabel.LineSearchType_swigregister(LineSearchType)
KCAL_TO_KJ = cvar.KCAL_TO_KJ
GAS_CONSTANT = cvar.GAS_CONSTANT

class OBFFParameter(object):
    r"""<openbabel/forcefield.h> Internal class for OBForceField to hold forcefield parameters"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    a = property(_openbabel.OBFFParameter_a_get, _openbabel.OBFFParameter_a_set, doc=r"""Used to store integer atom types""")
    b = property(_openbabel.OBFFParameter_b_get, _openbabel.OBFFParameter_b_set)
    c = property(_openbabel.OBFFParameter_c_get, _openbabel.OBFFParameter_c_set)
    d = property(_openbabel.OBFFParameter_d_get, _openbabel.OBFFParameter_d_set)
    _a = property(_openbabel.OBFFParameter__a_get, _openbabel.OBFFParameter__a_set, doc=r"""used to store string atom types""")
    _b = property(_openbabel.OBFFParameter__b_get, _openbabel.OBFFParameter__b_set)
    _c = property(_openbabel.OBFFParameter__c_get, _openbabel.OBFFParameter__c_set)
    _d = property(_openbabel.OBFFParameter__d_get, _openbabel.OBFFParameter__d_set)
    _ipar = property(_openbabel.OBFFParameter__ipar_get, _openbabel.OBFFParameter__ipar_set, doc=r"""Used to store integer type parameters (bondtypes, multiplicity, ...)""")
    _dpar = property(_openbabel.OBFFParameter__dpar_get, _openbabel.OBFFParameter__dpar_set, doc=r"""Used to store double type parameters (force constants, bond lengths, angles, ...)""")
    clear = _swig_new_instance_method(_openbabel.OBFFParameter_clear)

    def __init__(self):
        _openbabel.OBFFParameter_swiginit(self, _openbabel.new_OBFFParameter())
    __swig_destroy__ = _openbabel.delete_OBFFParameter

# Register OBFFParameter in _openbabel:
_openbabel.OBFFParameter_swigregister(OBFFParameter)
class OBFFCalculation2(object):
    r"""<openbabel/forcefield.h> Internal class for OBForceField to hold energy and gradient calculations on specific force fields"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    energy = property(_openbabel.OBFFCalculation2_energy_get, _openbabel.OBFFCalculation2_energy_set, doc=r"""Used to store the energy for this OBFFCalculation""")
    a = property(_openbabel.OBFFCalculation2_a_get, _openbabel.OBFFCalculation2_a_set, doc=r"""Used to store the atoms for this OBFFCalculation""")
    b = property(_openbabel.OBFFCalculation2_b_get, _openbabel.OBFFCalculation2_b_set)
    idx_a = property(_openbabel.OBFFCalculation2_idx_a_get, _openbabel.OBFFCalculation2_idx_a_set, doc=r"""Used to store the index of atoms for this OBFFCalculation""")
    idx_b = property(_openbabel.OBFFCalculation2_idx_b_get, _openbabel.OBFFCalculation2_idx_b_set)
    pos_a = property(_openbabel.OBFFCalculation2_pos_a_get, _openbabel.OBFFCalculation2_pos_a_set, doc=r"""Pointer to atom coordinates as double[3]""")
    pos_b = property(_openbabel.OBFFCalculation2_pos_b_get, _openbabel.OBFFCalculation2_pos_b_set)
    force_a = property(_openbabel.OBFFCalculation2_force_a_get, _openbabel.OBFFCalculation2_force_a_set, doc=r"""Pointer to atom forces""")
    force_b = property(_openbabel.OBFFCalculation2_force_b_get, _openbabel.OBFFCalculation2_force_b_set)
    __swig_destroy__ = _openbabel.delete_OBFFCalculation2
    SetupPointers = _swig_new_instance_method(_openbabel.OBFFCalculation2_SetupPointers)

    def __init__(self):
        _openbabel.OBFFCalculation2_swiginit(self, _openbabel.new_OBFFCalculation2())

# Register OBFFCalculation2 in _openbabel:
_openbabel.OBFFCalculation2_swigregister(OBFFCalculation2)
class OBFFCalculation3(OBFFCalculation2):
    r"""<openbabel/forcefield.h> Internal class for OBForceField to hold energy and gradient calculations on specific force fields"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    c = property(_openbabel.OBFFCalculation3_c_get, _openbabel.OBFFCalculation3_c_set, doc=r"""Used to store the atoms for this OBFFCalculation""")
    idx_c = property(_openbabel.OBFFCalculation3_idx_c_get, _openbabel.OBFFCalculation3_idx_c_set, doc=r"""Used to store the index of atoms for this OBFFCalculation""")
    pos_c = property(_openbabel.OBFFCalculation3_pos_c_get, _openbabel.OBFFCalculation3_pos_c_set, doc=r"""Pointer to atom coordinates as double[3]""")
    force_c = property(_openbabel.OBFFCalculation3_force_c_get, _openbabel.OBFFCalculation3_force_c_set, doc=r"""Pointer to atom forces""")
    __swig_destroy__ = _openbabel.delete_OBFFCalculation3

    def __init__(self):
        _openbabel.OBFFCalculation3_swiginit(self, _openbabel.new_OBFFCalculation3())

# Register OBFFCalculation3 in _openbabel:
_openbabel.OBFFCalculation3_swigregister(OBFFCalculation3)
class OBFFCalculation4(OBFFCalculation3):
    r"""<openbabel/forcefield.h> Internal class for OBForceField to hold energy and gradient calculations on specific force fields"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    d = property(_openbabel.OBFFCalculation4_d_get, _openbabel.OBFFCalculation4_d_set, doc=r"""Used to store the atoms for this OBFFCalculation""")
    idx_d = property(_openbabel.OBFFCalculation4_idx_d_get, _openbabel.OBFFCalculation4_idx_d_set, doc=r"""Used to store the index of atoms for this OBFFCalculation""")
    pos_d = property(_openbabel.OBFFCalculation4_pos_d_get, _openbabel.OBFFCalculation4_pos_d_set, doc=r"""Pointer to atom coordinates as double[3]""")
    force_d = property(_openbabel.OBFFCalculation4_force_d_get, _openbabel.OBFFCalculation4_force_d_set, doc=r"""Pointer to atom forces""")
    __swig_destroy__ = _openbabel.delete_OBFFCalculation4

    def __init__(self):
        _openbabel.OBFFCalculation4_swiginit(self, _openbabel.new_OBFFCalculation4())

# Register OBFFCalculation4 in _openbabel:
_openbabel.OBFFCalculation4_swigregister(OBFFCalculation4)
class OBFFConstraint(object):
    r"""<openbabel/forcefield.h> Internal class for OBForceField to hold constraints Since: version 2.2"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    factor = property(_openbabel.OBFFConstraint_factor_get, _openbabel.OBFFConstraint_factor_set, doc=r"""Used to store the contraint energy for this OBFFConstraint""")
    constraint_value = property(_openbabel.OBFFConstraint_constraint_value_get, _openbabel.OBFFConstraint_constraint_value_set)
    rab0 = property(_openbabel.OBFFConstraint_rab0_get, _openbabel.OBFFConstraint_rab0_set)
    rbc0 = property(_openbabel.OBFFConstraint_rbc0_get, _openbabel.OBFFConstraint_rbc0_set)
    type = property(_openbabel.OBFFConstraint_type_get, _openbabel.OBFFConstraint_type_set, doc=r"""Used to store the contraint type for this OBFFConstraint""")
    ia = property(_openbabel.OBFFConstraint_ia_get, _openbabel.OBFFConstraint_ia_set)
    ib = property(_openbabel.OBFFConstraint_ib_get, _openbabel.OBFFConstraint_ib_set)
    ic = property(_openbabel.OBFFConstraint_ic_get, _openbabel.OBFFConstraint_ic_set)
    id = property(_openbabel.OBFFConstraint_id_get, _openbabel.OBFFConstraint_id_set)
    a = property(_openbabel.OBFFConstraint_a_get, _openbabel.OBFFConstraint_a_set, doc=r"""Used to store the atoms for this OBFFCostraint""")
    b = property(_openbabel.OBFFConstraint_b_get, _openbabel.OBFFConstraint_b_set)
    c = property(_openbabel.OBFFConstraint_c_get, _openbabel.OBFFConstraint_c_set)
    d = property(_openbabel.OBFFConstraint_d_get, _openbabel.OBFFConstraint_d_set)
    grada = property(_openbabel.OBFFConstraint_grada_get, _openbabel.OBFFConstraint_grada_set, doc=r"""Used to store the gradients for this OBFFCalculation""")
    gradb = property(_openbabel.OBFFConstraint_gradb_get, _openbabel.OBFFConstraint_gradb_set)
    gradc = property(_openbabel.OBFFConstraint_gradc_get, _openbabel.OBFFConstraint_gradc_set)
    gradd = property(_openbabel.OBFFConstraint_gradd_get, _openbabel.OBFFConstraint_gradd_set)

    def __init__(self):
        r"""Constructor"""
        _openbabel.OBFFConstraint_swiginit(self, _openbabel.new_OBFFConstraint())
    __swig_destroy__ = _openbabel.delete_OBFFConstraint
    GetGradient = _swig_new_instance_method(_openbabel.OBFFConstraint_GetGradient)

# Register OBFFConstraint in _openbabel:
_openbabel.OBFFConstraint_swigregister(OBFFConstraint)
class OBFFConstraints(object):
    r"""<openbabel/forcefield.h> Internal class for OBForceField to handle constraints Since: version 2.2"""

    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"""Constructor"""
        _openbabel.OBFFConstraints_swiginit(self, _openbabel.new_OBFFConstraints())
    __swig_destroy__ = _openbabel.delete_OBFFConstraints
    Clear = _swig_new_instance_method(_openbabel.OBFFConstraints_Clear)
    GetConstraintEnergy = _swig_new_instance_method(_openbabel.OBFFConstraints_GetConstraintEnergy)
    GetGradient = _swig_new_instance_method(_openbabel.OBFFConstraints_GetGradient)
    Setup = _swig_new_instance_method(_openbabel.OBFFConstraints_Setup)
    SetFactor = _swig_new_instance_method(_openbabel.OBFFConstraints_SetFactor)
    AddIgnore = _swig_new_instance_method(_openbabel.OBFFConstraints_AddIgnore)
    AddAtomConstraint = _swig_new_instance_method(_openbabel.OBFFConstraints_AddAtomConstraint)
    AddAtomXConstraint = _swig_new_instance_method(_openbabel.OBFFConstraints_AddAtomXConstraint)
    AddAtomYConstraint = _swig_new_instance_method(_openbabel.OBFFConstraints_AddAtomYConstraint)
    AddAtomZConstraint = _swig_new_instance_method(_openbabel.OBFFConstraints_AddAtomZConstraint)
    AddDistanceConstraint = _swig_new_instance_method(_openbabel.OBFFConstraints_AddDistanceConstraint)
    AddAngleConstraint = _swig_new_instance_method(_openbabel.OBFFConstraints_AddAngleConstraint)
    AddTorsionConstraint = _swig_new_instance_method(_openbabel.OBFFConstraints_AddTorsionConstraint)
    DeleteConstraint = _swig_new_instance_method(_openbabel.OBFFConstraints_DeleteConstraint)
    GetFactor = _swig_new_instance_method(_openbabel.OBFFConstraints_GetFactor)
    Size = _swig_new_instance_method(_openbabel.OBFFConstraints_Size)
    GetConstraintType = _swig_new_instance_method(_openbabel.OBFFConstraints_GetConstraintType)
    GetConstraintValue = _swig_new_instance_method(_openbabel.OBFFConstraints_GetConstraintValue)
    GetConstraintAtomA = _swig_new_instance_method(_openbabel.OBFFConstraints_GetConstraintAtomA)
    GetConstraintAtomB = _swig_new_instance_method(_openbabel.OBFFConstraints_GetConstraintAtomB)
    GetConstraintAtomC = _swig_new_instance_method(_openbabel.OBFFConstraints_GetConstraintAtomC)
    GetConstraintAtomD = _swig_new_instance_method(_openbabel.OBFFConstraints_GetConstraintAtomD)
    IsIgnored = _swig_new_instance_method(_openbabel.OBFFConstraints_IsIgnored)
    IsFixed = _swig_new_instance_method(_openbabel.OBFFConstraints_IsFixed)
    IsXFixed = _swig_new_instance_method(_openbabel.OBFFConstraints_IsXFixed)
    IsYFixed = _swig_new_instance_method(_openbabel.OBFFConstraints_IsYFixed)
    IsZFixed = _swig_new_instance_method(_openbabel.OBFFConstraints_IsZFixed)
    GetIgnoredBitVec = _swig_new_instance_method(_openbabel.OBFFConstraints_GetIgnoredBitVec)
    GetFixedBitVec = _swig_new_instance_method(_openbabel.OBFFConstraints_GetFixedBitVec)

# Register OBFFConstraints in _openbabel:
_openbabel.OBFFConstraints_swigregister(OBFFConstraints)
class OBForceField(OBPlugin):
    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
    Default = _swig_new_static_method(_openbabel.OBForceField_Default)
    FindType = _swig_new_static_method(_openbabel.OBForceField_FindType)
    MakeNewInstance = _swig_new_instance_method(_openbabel.OBForceField_MakeNewInstance)
    __swig_destroy__ = _openbabel.delete_OBForceField
    FindForceField = _swig_new_static_method(_openbabel.OBForceField_FindForceField)
    SetParameterFile = _swig_new_instance_method(_openbabel.OBForceField_SetParameterFile)
    GetUnit = _swig_new_instance_method(_openbabel.OBForceField_GetUnit)
    HasAnalyticalGradients = _swig_new_instance_method(_openbabel.OBForceField_HasAnalyticalGradients)
    Setup = _swig_new_instance_method(_openbabel.OBForceField_Setup)
    ParseParamFile = _swig_new_instance_method(_openbabel.OBForceField_ParseParamFile)
    SetTypes = _swig_new_instance_method(_openbabel.OBForceField_SetTypes)
    SetFormalCharges = _swig_new_instance_method(_openbabel.OBForceField_SetFormalCharges)
    SetPartialCharges = _swig_new_instance_method(_openbabel.OBForceField_SetPartialCharges)
    SetupCalculations = _swig_new_instance_method(_openbabel.OBForceField_SetupCalculations)
    SetupPointers = _swig_new_instance_method(_openbabel.OBForceField_SetupPointers)
    IsSetupNeeded = _swig_new_instance_method(_openbabel.OBForceField_IsSetupNeeded)
    GetAtomTypes = _swig_new_instance_method(_openbabel.OBForceField_GetAtomTypes)
    GetPartialCharges = _swig_new_instance_method(_openbabel.OBForceField_GetPartialCharges)
    GetCoordinates = _swig_new_instance_method(_openbabel.OBForceField_GetCoordinates)
    UpdateCoordinates = _swig_new_instance_method(_openbabel.OBForceField_UpdateCoordinates)
    GetConformers = _swig_new_instance_method(_openbabel.OBForceField_GetConformers)
    UpdateConformers = _swig_new_instance_method(_openbabel.OBForceField_UpdateConformers)
    SetCoordinates = _swig_new_instance_method(_openbabel.OBForceField_SetCoordinates)
    SetConformers = _swig_new_instance_method(_openbabel.OBForceField_SetConformers)
    GetGrid = _swig_new_instance_method(_openbabel.OBForceField_GetGrid)
    AddIntraGroup = _swig_new_instance_method(_openbabel.OBForceField_AddIntraGroup)
    AddInterGroup = _swig_new_instance_method(_openbabel.OBForceField_AddInterGroup)
    AddInterGroups = _swig_new_instance_method(_openbabel.OBForceField_AddInterGroups)
    ClearGroups = _swig_new_instance_method(_openbabel.OBForceField_ClearGroups)
    HasGroups = _swig_new_instance_method(_openbabel.OBForceField_HasGroups)
    EnableCutOff = _swig_new_instance_method(_openbabel.OBForceField_EnableCutOff)
    IsCutOffEnabled = _swig_new_instance_method(_openbabel.OBForceField_IsCutOffEnabled)
    SetVDWCutOff = _swig_new_instance_method(_openbabel.OBForceField_SetVDWCutOff)
    GetVDWCutOff = _swig_new_instance_method(_openbabel.OBForceField_GetVDWCutOff)
    SetElectrostaticCutOff = _swig_new_instance_method(_openbabel.OBForceField_SetElectrostaticCutOff)
    GetElectrostaticCutOff = _swig_new_instance_method(_openbabel.OBForceField_GetElectrostaticCutOff)
    SetDielectricConstant = _swig_new_instance_method(_openbabel.OBForceField_SetDielectricConstant)
    GetDielectricConstant = _swig_new_instance_method(_openbabel.OBForceField_GetDielectricConstant)
    SetUpdateFrequency = _swig_new_instance_method(_openbabel.OBForceField_SetUpdateFrequency)
    GetUpdateFrequency = _swig_new_instance_method(_openbabel.OBForceField_GetUpdateFrequency)
    UpdatePairsSimple = _swig_new_instance_method(_openbabel.OBForceField_UpdatePairsSimple)
    GetNumPairs = _swig_new_instance_method(_openbabel.OBForceField_GetNumPairs)
    GetNumElectrostaticPairs = _swig_new_instance_method(_openbabel.OBForceField_GetNumElectrostaticPairs)
    GetNumVDWPairs = _swig_new_instance_method(_openbabel.OBForceField_GetNumVDWPairs)
    EnableAllPairs = _swig_new_instance_method(_openbabel.OBForceField_EnableAllPairs)
    GetGradient = _swig_new_instance_method(_openbabel.OBForceField_GetGradient)
    GetGradientPtr = _swig_new_instance_method(_openbabel.OBForceField_GetGradientPtr)
    Energy = _swig_new_instance_method(_openbabel.OBForceField_Energy)
    E_Bond = _swig_new_instance_method(_openbabel.OBForceField_E_Bond)
    E_Angle = _swig_new_instance_method(_openbabel.OBForceField_E_Angle)
    E_StrBnd = _swig_new_instance_method(_openbabel.OBForceField_E_StrBnd)
    E_Torsion = _swig_new_instance_method(_openbabel.OBForceField_E_Torsion)
    E_OOP = _swig_new_instance_method(_openbabel.OBForceField_E_OOP)
    E_VDW = _swig_new_instance_method(_openbabel.OBForceField_E_VDW)
    E_Electrostatic = _swig_new_instance_method(_openbabel.OBForceField_E_Electrostatic)
    PrintTypes = _swig_new_instance_method(_openbabel.OBForceField_PrintTypes)
    PrintFormalCharges = _swig_new_instance_method(_openbabel.OBForceField_PrintFormalCharges)
    PrintPartialCharges = _swig_new_instance_method(_openbabel.OBForceField_PrintPartialCharges)
    PrintVelocities = _swig_new_instance_method(_openbabel.OBForceField_PrintVelocities)
    SetLogFile = _swig_new_instance_method(_openbabel.OBForceField_SetLogFile)
    SetLogLevel = _swig_new_instance_method(_openbabel.OBForceField_SetLogLevel)
    GetLogLevel = _swig_new_instance_method(_openbabel.OBForceField_GetLogLevel)
    OBFFLog = _swig_new_instance_method(_openbabel.OBForceField_OBFFLog)
    DistanceGeometry = _swig_new_instance_method(_openbabel.OBForceField_DistanceGeometry)
    SystematicRotorSearch = _swig_new_instance_method(_openbabel.OBForceField_SystematicRotorSearch)
    SystematicRotorSearchInitialize = _swig_new_instance_method(_openbabel.OBForceField_SystematicRotorSearchInitialize)
    SystematicRotorSearchNextConformer = _swig_new_instance_method(_openbabel.OBForceField_SystematicRotorSearchNextConformer)
    RandomRotorSearch = _swig_new_instance_method(_openbabel.OBForceField_RandomRotorSearch)
    RandomRotorSearchInitialize = _swig_new_instance_method(_openbabel.OBForceField_RandomRotorSearchInitialize)
    RandomRotorSearchNextConformer = _swig_new_instance_method(_openbabel.OBForceField_RandomRotorSearchNextConformer)
    WeightedRotorSearch = _swig_new_instance_method(_openbabel.OBForceField_WeightedRotorSearch)
    FastRotorSearch = _swig_new_instance_method(_openbabel.OBForceField_FastRotorSearch)
    DiverseConfGen = _swig_new_instance_method(_openbabel.OBForceField_DiverseConfGen)
    SetLineSearchType = _swig_new_instance_method(_openbabel.OBForceField_SetLineSearchType)
    GetLineSearchType = _swig_new_instance_method(_openbabel.OBForceField_GetLineSearchType)
    LineSearch = _swig_new_instance_method(_openbabel.OBForceField_LineSearch)
    Newton2NumLineSearch = _swig_new_instance_method(_openbabel.OBForceField_Newton2NumLineSearch)
    LineSearchTakeStep = _swig_new_instance_method(_openbabel.OBForceField_LineSearchTakeStep)
    SteepestDescent = _swig_new_instance_method(_openbabel.OBForceField_SteepestDescent)
    SteepestDescentInitialize = _swig_new_instance_method(_openbabel.OBForceField_SteepestDescentInitialize)
    SteepestDescentTakeNSteps = _swig_new_instance_method(_openbabel.OBForceField_SteepestDescentTakeNSteps)
    ConjugateGradients = _swig_new_instance_method(_openbabel.OBForceField_ConjugateGradients)
    ConjugateGradientsInitialize = _swig_new_instance_method(_openbabel.OBForceField_ConjugateGradientsInitialize)
    ConjugateGradientsTakeNSteps = _swig_new_instance_method(_openbabel.OBForceField_ConjugateGradientsTakeNSteps)
    LBFGS = _swig_new_instance_method(_openbabel.OBForceField_LBFGS)
    LBFGSInitialize = _swig_new_instance_method(_openbabel.OBForceField_LBFGSInitialize)
    LBFGSTakeNSteps = _swig_new_instance_method(_openbabel.OBForceField_LBFGSTakeNSteps)
    GenerateVelocities = _swig_new_instance_method(_openbabel.OBForceField_GenerateVelocities)
    CorrectVelocities = _swig_new_instance_method(_openbabel.OBForceField_CorrectVelocities)
    MolecularDynamicsTakeNSteps = _swig_new_instance_method(_openbabel.OBForceField_MolecularDynamicsTakeNSteps)
    GetConstraints = _swig_new_instance_method(_openbabel.OBForceField_GetConstraints)
    SetConstraints = _swig_new_instance_method(_openbabel.OBForceField_SetConstraints)
    SetFixAtom = _swig_new_instance_method(_openbabel.OBForceField_SetFixAtom)
    UnsetFixAtom = _swig_new_instance_method(_openbabel.OBForceField_UnsetFixAtom)
    SetIgnoreAtom = _swig_new_instance_method(_openbabel.OBForceField_SetIgnoreAtom)
    UnsetIgnoreAtom = _swig_new_instance_method(_openbabel.OBForceField_UnsetIgnoreAtom)
    IgnoreCalculation = _swig_new_static_method(_openbabel.OBForceField_IgnoreCalculation)
    DetectExplosion = _swig_new_instance_method(_openbabel.OBForceField_DetectExplosion)
    ValidateLineSearch = _swig_new_instance_method(_openbabel.OBForceField_ValidateLineSearch)
    ValidateSteepestDescent = _swig_new_instance_method(_openbabel.OBForceField_ValidateSteepestDescent)
    ValidateConjugateGradients = _swig_new_instance_method(_openbabel.OBForceField_ValidateConjugateGradients)
    Validate = _swig_new_instance_method(_openbabel.OBForceField_Validate)
    ValidateGradients = _swig_new_instance_method(_openbabel.OBForceField_ValidateGradients)
    ValidateGradientError = _swig_new_instance_method(_openbabel.OBForceField_ValidateGradientError)
    VectorBondDerivative = _swig_new_static_method(_openbabel.OBForceField_VectorBondDerivative)
    VectorDistanceDerivative = _swig_new_static_method(_openbabel.OBForceField_VectorDistanceDerivative)
    VectorLengthDerivative = _swig_new_static_method(_openbabel.OBForceField_VectorLengthDerivative)
    VectorAngleDerivative = _swig_new_static_method(_openbabel.OBForceField_VectorAngleDerivative)
    VectorOOPDerivative = _swig_new_static_method(_openbabel.OBForceField_VectorOOPDerivative)
    VectorTorsionDerivative = _swig_new_static_method(_openbabel.OBForceField_VectorTorsionDerivative)
    VectorSubtract = _swig_new_static_method(_openbabel.OBForceField_VectorSubtract)
    VectorAdd = _swig_new_static_method(_openbabel.OBForceField_VectorAdd)
    VectorDivide = _swig_new_static_method(_openbabel.OBForceField_VectorDivide)
    VectorMultiply = _swig_new_static_method(_openbabel.OBForceField_VectorMultiply)
    VectorSelfMultiply = _swig_new_static_method(_openbabel.OBForceField_VectorSelfMultiply)
    VectorNormalize = _swig_new_static_method(_openbabel.OBForceField_VectorNormalize)
    VectorCopy = _swig_new_static_method(_openbabel.OBForceField_VectorCopy)
    VectorLength = _swig_new_static_method(_openbabel.OBForceField_VectorLength)
    VectorDistance = _swig_new_static_method(_openbabel.OBForceField_VectorDistance)
    VectorAngle = _swig_new_static_method(_openbabel.OBForceField_VectorAngle)
    VectorTorsion = _swig_new_static_method(_openbabel.OBForceField_VectorTorsion)
    VectorOOP = _swig_new_static_method(_openbabel.OBForceField_VectorOOP)
    VectorClear = _swig_new_static_method(_openbabel.OBForceField_VectorClear)
    VectorDot = _swig_new_static_method(_openbabel.OBForceField_VectorDot)
    VectorCross = _swig_new_static_method(_openbabel.OBForceField_VectorCross)
    PrintVector = _swig_new_static_method(_openbabel.OBForceField_PrintVector)
    SetLogToStdOut = _swig_new_instance_method(_openbabel.OBForceField_SetLogToStdOut)
    SetLogToStdErr = _swig_new_instance_method(_openbabel.OBForceField_SetLogToStdErr)

# Register OBForceField in _openbabel:
_openbabel.OBForceField_swigregister(OBForceField)
class OBBuilder(object):
    r"""<openbabel/builder.h> Class to build 3D structures"""

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

    def __init__(self):
        _openbabel.OBBuilder_swiginit(self, _openbabel.new_OBBuilder())
    Build = _swig_new_instance_method(_openbabel.OBBuilder_Build)
    SetKeepRings = _swig_new_instance_method(_openbabel.OBBuilder_SetKeepRings)
    UnsetKeepRings = _swig_new_instance_method(_openbabel.OBBuilder_UnsetKeepRings)
    AddRingFragment = _swig_new_instance_method(_openbabel.OBBuilder_AddRingFragment)
    LoadFragments = _swig_new_instance_method(_openbabel.OBBuilder_LoadFragments)
    GetFragmentCoord = _swig_new_instance_method(_openbabel.OBBuilder_GetFragmentCoord)
    GetNewBondVector = _swig_new_static_method(_openbabel.OBBuilder_GetNewBondVector)
    Connect = _swig_new_static_method(_openbabel.OBBuilder_Connect)
    Swap = _swig_new_static_method(_openbabel.OBBuilder_Swap)
    CorrectStereoBonds = _swig_new_static_method(_openbabel.OBBuilder_CorrectStereoBonds)
    CorrectStereoAtoms = _swig_new_static_method(_openbabel.OBBuilder_CorrectStereoAtoms)
    IsSpiroAtom = _swig_new_static_method(_openbabel.OBBuilder_IsSpiroAtom)
    GetFragment = _swig_new_static_method(_openbabel.OBBuilder_GetFragment)
    AddNbrs = _swig_new_static_method(_openbabel.OBBuilder_AddNbrs)
    __swig_destroy__ = _openbabel.delete_OBBuilder

# Register OBBuilder in _openbabel:
_openbabel.OBBuilder_swigregister(OBBuilder)
class OBOp(OBPlugin):
    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
    Default = _swig_new_static_method(_openbabel.OBOp_Default)
    FindType = _swig_new_static_method(_openbabel.OBOp_FindType)
    Do = _swig_new_instance_method(_openbabel.OBOp_Do)
    WorksWith = _swig_new_instance_method(_openbabel.OBOp_WorksWith)
    ProcessVec = _swig_new_instance_method(_openbabel.OBOp_ProcessVec)
    OpOptions = _swig_new_static_method(_openbabel.OBOp_OpOptions)
    DoOps = _swig_new_static_method(_openbabel.OBOp_DoOps)
    __swig_destroy__ = _openbabel.delete_OBOp

# Register OBOp in _openbabel:
_openbabel.OBOp_swigregister(OBOp)
class OBChargeModel(OBPlugin):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    Default = _swig_new_static_method(_openbabel.OBChargeModel_Default)

    def __init__(self, ID, IsDefault=False):
        _openbabel.OBChargeModel_swiginit(self, _openbabel.new_OBChargeModel(ID, IsDefault))
    FindType = _swig_new_static_method(_openbabel.OBChargeModel_FindType)
    ComputeCharges = _swig_new_instance_method(_openbabel.OBChargeModel_ComputeCharges)
    GetFormalCharges = _swig_new_instance_method(_openbabel.OBChargeModel_GetFormalCharges)
    GetPartialCharges = _swig_new_instance_method(_openbabel.OBChargeModel_GetPartialCharges)
    GetDipoleMoment = _swig_new_instance_method(_openbabel.OBChargeModel_GetDipoleMoment)
    __swig_destroy__ = _openbabel.delete_OBChargeModel

# Register OBChargeModel in _openbabel:
_openbabel.OBChargeModel_swigregister(OBChargeModel)
class OBChemTsfm(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self):
        _openbabel.OBChemTsfm_swiginit(self, _openbabel.new_OBChemTsfm())
    __swig_destroy__ = _openbabel.delete_OBChemTsfm
    Init = _swig_new_instance_method(_openbabel.OBChemTsfm_Init)
    Apply = _swig_new_instance_method(_openbabel.OBChemTsfm_Apply)
    IsAcid = _swig_new_instance_method(_openbabel.OBChemTsfm_IsAcid)
    IsBase = _swig_new_instance_method(_openbabel.OBChemTsfm_IsBase)

# Register OBChemTsfm in _openbabel:
_openbabel.OBChemTsfm_swigregister(OBChemTsfm)
class OBPhModel(OBGlobalDataBase):
    r"""
    Corrections for pH used by OBMol::CorrectForPH()

    The data/phmodel.txt file contains transformations which are applied
    to correct the charges for a given pH. This function uses the
    Henderson-Hasselbalch equation to calculate which species (protonated/
    unprotonated) is present in the highest concentration at the given pH.

    For acids an entry would look like:

    .. code-block:: c++

        # carboxylic acid
        O=C[OD1:1] >> O=C[O-:1]	4.0

    The 4.0 is the pKa for the dissociation [HA] -> [H+] + [A-]. To
    calculate [HA]/[A-] we use:

    .. code-block:: c++

        [HA] / [A-] = 10^(pKa - pH)

        [HA]/[A-] > 1  :  [HA] > [A-]
        [HA]/[A-] < 1  :  [A-] > [HA]

    For a base, an entry would look be:

    .. code-block:: c++

        # methyl amine
        C[N:1] >> C[N+:1]	10.7

    Here, the 10.7 is the pKa for the dissociation [BH+] -> [H+] + [B:]. To
    calculate [BH+]/[B:] we use:

    .. code-block:: c++

        [BH+] / [B:] = 10^(pKa - pH)

        [BH+]/[B:] > 1  :  [BH+] > [B:]
        [BH+]/[B:] < 1  :  [B:] > [BH+]

    The transformations are all applied (if needed at the specified pH value) in
    the same order they are found in data/phmodel.txt.
    """

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

    def __init__(self):
        _openbabel.OBPhModel_swiginit(self, _openbabel.new_OBPhModel())
    __swig_destroy__ = _openbabel.delete_OBPhModel
    AssignSeedPartialCharge = _swig_new_instance_method(_openbabel.OBPhModel_AssignSeedPartialCharge)
    CorrectForPH = _swig_new_instance_method(_openbabel.OBPhModel_CorrectForPH)

# Register OBPhModel in _openbabel:
_openbabel.OBPhModel_swigregister(OBPhModel)
class OBGraphSym(object):
    r"""
    <openbabel/graphsym.h>
    Handle and perceive graph symmtery for canonical numbering .
    Since: version 2.3
    """

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

    def __init__(self, pmol, frag_atoms=None):
        r"""Constructor"""
        _openbabel.OBGraphSym_swiginit(self, _openbabel.new_OBGraphSym(pmol, frag_atoms))
    __swig_destroy__ = _openbabel.delete_OBGraphSym
    GetSymmetry = _swig_new_instance_method(_openbabel.OBGraphSym_GetSymmetry)
    ClearSymmetry = _swig_new_instance_method(_openbabel.OBGraphSym_ClearSymmetry)

# Register OBGraphSym in _openbabel:
_openbabel.OBGraphSym_swigregister(OBGraphSym)
OBGraphSym.NoSymmetryClass = _openbabel.cvar.OBGraphSym_NoSymmetryClass

class OBIsomorphismMapper(object):
    r"""
    <openbabel/isomorphism.h>
    Since: version 2.3
    Abstract class defining interface for isomorphism (i.e. substructure) searches.

    The OBIsomorphism class is an abstract class which defines an interface for
    performing isomorphism (i.e. substructure) searches. It uses a OBQuery and
    tries to map this onto a queried OBMol. A single mapping is represented by
    a OBIsomorphismMapper::Mapping which is a std::map mapping query indexes to
    queried indexes. Both query and queried indexes in the map start from 0.
    Multiple mappings can be stored in a OBIsomorphismMapper::Mappings object
    which is a std::vector of OBIsomorphismMapper objects.

    Since this is an abstract class with pure virtual methods, this class can't
    be instantiated directly. To get a pointer to a subclass, the GetInstance()
    method can be used which also sets the query. Once an instance is obtained,
    the desired mapping function can be used to perform the mapping (i.e. MapFirst(),
    MapUnique() or MapAll()).

    A typical example:

    .. code-block:: c++

        OBMol *queried;
        // ... initialize queried ...
        OBQuery *query = CompileSmilesQuery("c1ccccc1");
        OBIsomorphismMapper *mapper = OBIsomorphismMapper::GetInstance(query);
        OBIsomorphismMapper::Mappings maps = mapper->MapUnique(mol);

        std::cout << "found " << maps.size() << " unique mappings" << std::endl;

        delete mapper;
        delete query;

    All mapping methods take an optional mask parameter. This can be used to
    restrict the search to a part of the queried OBMol. The masked atoms in
    the OBBitVec are  indexed from 1. A special case of isomorphism search is
    an automorphism search where the query and queried molecule are the same.
    Automorphism searches can be done using the MapAll method but an additional
    FindAutomorphisms() function is provided for convenience.
    """

    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__ = _openbabel.delete_OBIsomorphismMapper
    GetInstance = _swig_new_static_method(_openbabel.OBIsomorphismMapper_GetInstance)
    MapFirst = _swig_new_instance_method(_openbabel.OBIsomorphismMapper_MapFirst)
    MapUnique = _swig_new_instance_method(_openbabel.OBIsomorphismMapper_MapUnique)
    MapAll = _swig_new_instance_method(_openbabel.OBIsomorphismMapper_MapAll)
    MapGeneric = _swig_new_instance_method(_openbabel.OBIsomorphismMapper_MapGeneric)
    SetTimeout = _swig_new_instance_method(_openbabel.OBIsomorphismMapper_SetTimeout)

# Register OBIsomorphismMapper in _openbabel:
_openbabel.OBIsomorphismMapper_swigregister(OBIsomorphismMapper)
MapsTo = _openbabel.MapsTo
FindAutomorphisms = _openbabel.FindAutomorphisms
class OBQueryAtom(object):
    r"""
    <openbabel/query.h>
    Atom in an OBQuery

    The OBQueryAtom class defines an interface for query atoms. The class provides
    some general methods and properties to access the topology information. The Matches
    method can be reimplemented in subclasses to get custom matching behavior.

    The default Matches implementation only checks the atomic number.

    See 'substructure' for more information.

    See also: OBQuery OBQueryBond OBIsomorphismMapper
    Since: version 2.3
    """

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

    def __init__(self, atomicNum=6, isInRing=False, isAromatic=False):
        r"""
        Constructor.
        :type atomicNum: int, optional
        :param atomicNum: The atomic number for this query atom.
        :type isInRing: boolean, optional
        :param isInRing: Specify whether the query atom is in a ring. Default is false.
        :type isAromatic: boolean, optional
        :param isAromatic: Specify whether the query atom is aromatic. Default is false.
        """
        _openbabel.OBQueryAtom_swiginit(self, _openbabel.new_OBQueryAtom(atomicNum, isInRing, isAromatic))
    __swig_destroy__ = _openbabel.delete_OBQueryAtom
    GetIndex = _swig_new_instance_method(_openbabel.OBQueryAtom_GetIndex)
    GetBonds = _swig_new_instance_method(_openbabel.OBQueryAtom_GetBonds)
    GetNbrs = _swig_new_instance_method(_openbabel.OBQueryAtom_GetNbrs)
    Matches = _swig_new_instance_method(_openbabel.OBQueryAtom_Matches)

# Register OBQueryAtom in _openbabel:
_openbabel.OBQueryAtom_swigregister(OBQueryAtom)
class OBQueryBond(object):
    r"""
    <openbabel/query.h>
    Bond in an OBQuery

    The OBQueryBond class defines an interface for query bonds. The class provides
    some general methods and properties to access the topology information. The Matches
    method can be reimplemented in subclasses to get custom matching behavior.

    The default Matches implementation only checks if the bonds are both aromatic,
    otherwise the bond orders are compared.

    See 'substructure' for more information.

    See also: OBQuery OBQueryAtom OBIsomorphismMapper
    Since: version 2.3
    """

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

    def __init__(self, begin, end, order=1, aromatic=False):
        r"""Constructor."""
        _openbabel.OBQueryBond_swiginit(self, _openbabel.new_OBQueryBond(begin, end, order, aromatic))
    __swig_destroy__ = _openbabel.delete_OBQueryBond
    GetIndex = _swig_new_instance_method(_openbabel.OBQueryBond_GetIndex)
    GetBeginAtom = _swig_new_instance_method(_openbabel.OBQueryBond_GetBeginAtom)
    GetEndAtom = _swig_new_instance_method(_openbabel.OBQueryBond_GetEndAtom)
    Matches = _swig_new_instance_method(_openbabel.OBQueryBond_Matches)

# Register OBQueryBond in _openbabel:
_openbabel.OBQueryBond_swigregister(OBQueryBond)
class OBQuery(object):
    r"""
    <openbabel/query.h>
    A substructure query

    See 'substructure' for more information.
    Since: version 2.3
    """

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    __swig_destroy__ = _openbabel.delete_OBQuery
    NumAtoms = _swig_new_instance_method(_openbabel.OBQuery_NumAtoms)
    NumBonds = _swig_new_instance_method(_openbabel.OBQuery_NumBonds)
    GetAtoms = _swig_new_instance_method(_openbabel.OBQuery_GetAtoms)
    GetBonds = _swig_new_instance_method(_openbabel.OBQuery_GetBonds)
    GetBond = _swig_new_instance_method(_openbabel.OBQuery_GetBond)
    AddAtom = _swig_new_instance_method(_openbabel.OBQuery_AddAtom)
    AddBond = _swig_new_instance_method(_openbabel.OBQuery_AddBond)

    def __init__(self):
        _openbabel.OBQuery_swiginit(self, _openbabel.new_OBQuery())

# Register OBQuery in _openbabel:
_openbabel.OBQuery_swigregister(OBQuery)
CompileMoleculeQuery = _openbabel.CompileMoleculeQuery
CompileSmilesQuery = _openbabel.CompileSmilesQuery
CanonicalLabels = _openbabel.CanonicalLabels
class OBStereo(object):
    r"""
    <openbabel/stereo/stereo.h>
    Placeholder for enums & Ref/Refs related functions.

    The OBStereo struct contains a number of enums with predefined values.
    These are OBStereo::BondDirection, OBStereo::Type, OBStereo::Shape,
    OBStereo::View, OBStereo::Winding. There are enums
    which only apply to certain types of stereochemistry but having them
    in 1 place makes it easier to remember.

    The OBStereo struct also contains typedefs and functions which
    are crucial to fully understand how to use the OBStereoBase derived
    classes (i.e. OBTetrahedralStereo, OBCisTransStereo, ...). Ref variables
    and Refs lists are a way to uniquely reference atoms in the molecule. In
    most cases these Ref variables are the same as the unique atom ids
    (OBAtom::GetId). However, 2 special cases are provided:

    - OBStereo::NoRef: An initial value for Ref variables. The constructors of
      the various Config structs set all refs to NoRef (Refs lists will remain
      empty). This value is considered invalid when comparing stereochemistry.
    - OBStereo::ImplicitRef: Can be used to replace implicit hydrogen ids.
      Even with explicit hydrogens, it is still valid to replace the Ref of
      the hydrogen with ImplicitRef. This flexibility also applies to
      comparing stereochemistry. It is possible to compare stereochemistry
      (e.g. OBTetrahedral::Config::operator==) between a Config struct with
      an ImplicitRef and a Config struct where the Ref is the atom id of the
      explicit hydrogen. See actual documentation for details about operator==.

    There are utility functions which make it easier to handle Refs. The most
    frequently used one is OBStereo::MakeRefs to create lists containing 3 or
    4 Ref values. Formats and library use normally doesn't need the other
    functions.

    See also: OBStereoBase OBStereoFacade
    Since: version 2.3
    """

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    CisTrans = _openbabel.OBStereo_CisTrans
    r"""cis/trans double bond"""
    ExtendedCisTrans = _openbabel.OBStereo_ExtendedCisTrans
    r"""allene, biphenyl, ..."""
    SquarePlanar = _openbabel.OBStereo_SquarePlanar
    r"""Square-planar stereochemistry"""
    Tetrahedral = _openbabel.OBStereo_Tetrahedral
    r"""tetrahedral"""
    ExtendedTetrahedral = _openbabel.OBStereo_ExtendedTetrahedral
    r"""extended tetrahedral"""
    TrigonalBipyramidal = _openbabel.OBStereo_TrigonalBipyramidal
    r"""Trigonal-bipyramidal stereochemistry"""
    Octahedral = _openbabel.OBStereo_Octahedral
    r"""Octahedral stereochemistry"""
    NotStereo = _openbabel.OBStereo_NotStereo
    UpBond = _openbabel.OBStereo_UpBond
    DownBond = _openbabel.OBStereo_DownBond
    UnknownDir = _openbabel.OBStereo_UnknownDir
    ShapeU = _openbabel.OBStereo_ShapeU
    ShapeZ = _openbabel.OBStereo_ShapeZ
    Shape4 = _openbabel.OBStereo_Shape4
    ViewFrom = _openbabel.OBStereo_ViewFrom
    r"""view from the atom (id parameter) towards the center atom"""
    ViewTowards = _openbabel.OBStereo_ViewTowards
    r"""view from center atom towards the atom (id parameter)"""
    Clockwise = _openbabel.OBStereo_Clockwise
    r"""Clockwise winding"""
    AntiClockwise = _openbabel.OBStereo_AntiClockwise
    r"""AntiClockwise winding (or CounterClockwise)"""
    UnknownWinding = _openbabel.OBStereo_UnknownWinding
    r"""The configuration is specified as unknown (squiggly line in depiction)"""
    NoRef = _openbabel.OBStereo_NoRef
    r"""No Ref set (invalid Ref)"""
    ImplicitRef = _openbabel.OBStereo_ImplicitRef
    r"""Implicit Ref (i.e. hydrogen, N lone pair, ...)."""
    MakeRefs = _swig_new_static_method(_openbabel.OBStereo_MakeRefs)
    ContainsSameRefs = _swig_new_static_method(_openbabel.OBStereo_ContainsSameRefs)
    ContainsRef = _swig_new_static_method(_openbabel.OBStereo_ContainsRef)
    NumInversions = _swig_new_static_method(_openbabel.OBStereo_NumInversions)
    Permutate = _swig_new_static_method(_openbabel.OBStereo_Permutate)
    Permutated = _swig_new_static_method(_openbabel.OBStereo_Permutated)

    def __init__(self):
        _openbabel.OBStereo_swiginit(self, _openbabel.new_OBStereo())
    __swig_destroy__ = _openbabel.delete_OBStereo

# Register OBStereo in _openbabel:
_openbabel.OBStereo_swigregister(OBStereo)
class OBStereoUnit(object):
    r"""
    <openbabel/stereo/stereo.h>
    Struct representing a single stereogenic unit.
    Since: 2.3
    """

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

    def __init__(self, *args):
        r"""
        *Overload 1:*

        Default constructor creating an invalid OBStereoUnit. The unit can be
        made valid by setting the type, id and para data members.

        |

        *Overload 2:*

        Constructor specifying all data to create a valid OBStereoUnit.

        |

        *Overload 3:*

        Constructor specifying all data to create a valid OBStereoUnit.
        """
        _openbabel.OBStereoUnit_swiginit(self, _openbabel.new_OBStereoUnit(*args))
    type = property(_openbabel.OBStereoUnit_type_get, _openbabel.OBStereoUnit_type_set, doc=r"""the type for this stereogenic unit""")
    id = property(_openbabel.OBStereoUnit_id_get, _openbabel.OBStereoUnit_id_set, doc=r"""the atom/bond (depends on type) unique id""")
    para = property(_openbabel.OBStereoUnit_para_get, _openbabel.OBStereoUnit_para_set, doc=r"""para- (=ressemble) or true-stereocenter""")
    __swig_destroy__ = _openbabel.delete_OBStereoUnit

# Register OBStereoUnit in _openbabel:
_openbabel.OBStereoUnit_swigregister(OBStereoUnit)
class OBStereoBase(OBGenericData):
    r"""
    <openbabel/stereo/stereo.h>
    Base class for all stereochemistry classes.

    All stereochemistry classes are derived from OBStereoBase. This class
    inherits from OBGenericData which allows the objects to be stored in
    the molecule. The attribute (OBGenericData::GetAttribute) is set to
    "StereoData" and the data type is OBGenericDataType::StereoData. The
    pure virtual OBStereoBase::GetType function must be implemented by
    derived classes to return a type defined in OBStereo::Type.

    Use the OBStereoFacade for easy access to the derived classes.

    OBStereoBase keeps track of the OBMol object. This must always be
    a valid (not 0 or deleted) pointer and can only be set using the
    constructor. Subclasses can use this to get more information on bonding
    for example. Finally, OBStereoBase also keeps track of the specified
    flag. By default, this is always set to true.

    See also: OBStereo OBStereoFacade
    Since: version 2.3
    """

    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__ = _openbabel.delete_OBStereoBase
    GetMolecule = _swig_new_instance_method(_openbabel.OBStereoBase_GetMolecule)
    GetType = _swig_new_instance_method(_openbabel.OBStereoBase_GetType)
    SetSpecified = _swig_new_instance_method(_openbabel.OBStereoBase_SetSpecified)
    IsSpecified = _swig_new_instance_method(_openbabel.OBStereoBase_IsSpecified)

# Register OBStereoBase in _openbabel:
_openbabel.OBStereoBase_swigregister(OBStereoBase)
class OBStereoFacade(object):
    r"""
    <openbabel/stereo/stereo.h>
    Facade to simplify retrieval of OBStereoBase derived objects.

    The OBStereoFacade helps with retrieving OBStereoBase derived objects
    (i.e. OBTetrahedralStereo, OBCisTransStereo, ...) from an OBMol. This
    is done by iterating over all OBGenericData objects with data type
    OBGenericDataType::StereoData and checking the OBStereo::Type using
    OBStereoBase::GetType.

    See also: OBStereo OBStereoBase
    Since: version 2.3
    """

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

    def __init__(self, mol, perceive=True):
        r"""
        Constructor with ``mol`` and ``perceive`` parameter.

        :type mol: :py:class:`OBMol`
        :param mol: The molecule.
        :type perceive: boolean, optional
        :param perceive: If true, PerceiveStereo will be called if the
            OBMol::HasChiralityPerceived() flag is not set. (default is true)
        """
        _openbabel.OBStereoFacade_swiginit(self, _openbabel.new_OBStereoFacade(mol, perceive))
    NumTetrahedralStereo = _swig_new_instance_method(_openbabel.OBStereoFacade_NumTetrahedralStereo)
    GetAllTetrahedralStereo = _swig_new_instance_method(_openbabel.OBStereoFacade_GetAllTetrahedralStereo)
    HasTetrahedralStereo = _swig_new_instance_method(_openbabel.OBStereoFacade_HasTetrahedralStereo)
    GetTetrahedralStereo = _swig_new_instance_method(_openbabel.OBStereoFacade_GetTetrahedralStereo)
    NumCisTransStereo = _swig_new_instance_method(_openbabel.OBStereoFacade_NumCisTransStereo)
    GetAllCisTransStereo = _swig_new_instance_method(_openbabel.OBStereoFacade_GetAllCisTransStereo)
    HasCisTransStereo = _swig_new_instance_method(_openbabel.OBStereoFacade_HasCisTransStereo)
    GetCisTransStereo = _swig_new_instance_method(_openbabel.OBStereoFacade_GetCisTransStereo)
    NumSquarePlanarStereo = _swig_new_instance_method(_openbabel.OBStereoFacade_NumSquarePlanarStereo)
    GetAllSquarePlanarStereo = _swig_new_instance_method(_openbabel.OBStereoFacade_GetAllSquarePlanarStereo)
    HasSquarePlanarStereo = _swig_new_instance_method(_openbabel.OBStereoFacade_HasSquarePlanarStereo)
    GetSquarePlanarStereo = _swig_new_instance_method(_openbabel.OBStereoFacade_GetSquarePlanarStereo)
    __swig_destroy__ = _openbabel.delete_OBStereoFacade

# Register OBStereoFacade in _openbabel:
_openbabel.OBStereoFacade_swigregister(OBStereoFacade)
PerceiveStereo = _openbabel.PerceiveStereo
StereoFrom2D = _openbabel.StereoFrom2D
StereoFrom3D = _openbabel.StereoFrom3D
StereoFrom0D = _openbabel.StereoFrom0D
TetrahedralFrom3D = _openbabel.TetrahedralFrom3D
TetrahedralFrom2D = _openbabel.TetrahedralFrom2D
TetrahedralFrom0D = _openbabel.TetrahedralFrom0D
CisTransFrom3D = _openbabel.CisTransFrom3D
CisTransFrom2D = _openbabel.CisTransFrom2D
TetStereoToWedgeHash = _openbabel.TetStereoToWedgeHash
GetUnspecifiedCisTrans = _openbabel.GetUnspecifiedCisTrans
StereoRefToImplicit = _openbabel.StereoRefToImplicit
ImplicitRefToStereo = _openbabel.ImplicitRefToStereo
CisTransFrom0D = _openbabel.CisTransFrom0D
FindStereogenicUnits = _openbabel.FindStereogenicUnits
class OBRotorRule(object):
    r"""<openbabel/rotor.h> A rule for torsional conformer searching, defined by a SMARTS pattern Rules define a SMARTS pattern to match and a set of 4 reference atoms defining the dihedral angle. The rule can either define a set of possible dihedral angles in degrees and/or a "delta" (i.e., all multiples of delta will be considered)"""

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

    def __init__(self, buffer, ref, vals, d):
        _openbabel.OBRotorRule_swiginit(self, _openbabel.new_OBRotorRule(buffer, ref, vals, d))
    __swig_destroy__ = _openbabel.delete_OBRotorRule
    IsValid = _swig_new_instance_method(_openbabel.OBRotorRule_IsValid)
    GetReferenceAtoms = _swig_new_instance_method(_openbabel.OBRotorRule_GetReferenceAtoms)
    SetDelta = _swig_new_instance_method(_openbabel.OBRotorRule_SetDelta)
    GetDelta = _swig_new_instance_method(_openbabel.OBRotorRule_GetDelta)
    GetTorsionVals = _swig_new_instance_method(_openbabel.OBRotorRule_GetTorsionVals)
    GetSmartsString = _swig_new_instance_method(_openbabel.OBRotorRule_GetSmartsString)
    GetSmartsPattern = _swig_new_instance_method(_openbabel.OBRotorRule_GetSmartsPattern)

# Register OBRotorRule in _openbabel:
_openbabel.OBRotorRule_swigregister(OBRotorRule)
class OBRotorRules(OBGlobalDataBase):
    r"""<openbabel/rotor.h> Database of default hybridization torsional rules and SMARTS-defined OBRotorRule objects Use to automatically evaluate potentially rotatable bonds to generate lists of dihedral angles to consider. e.g., rotamer/conformer energy calculations"""

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

    def __init__(self):
        _openbabel.OBRotorRules_swiginit(self, _openbabel.new_OBRotorRules())
    __swig_destroy__ = _openbabel.delete_OBRotorRules
    SetFilename = _swig_new_instance_method(_openbabel.OBRotorRules_SetFilename)
    GetRotorIncrements = _swig_new_instance_method(_openbabel.OBRotorRules_GetRotorIncrements)
    Quiet = _swig_new_instance_method(_openbabel.OBRotorRules_Quiet)

# Register OBRotorRules in _openbabel:
_openbabel.OBRotorRules_swigregister(OBRotorRules)
class OBRotor(object):
    r"""
    <openbabel/rotor.h>
    A single rotatable OBBond as part of rotamer searching
    """

    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"""Constructor."""
        _openbabel.OBRotor_swiginit(self, _openbabel.new_OBRotor())
    __swig_destroy__ = _openbabel.delete_OBRotor
    SetBond = _swig_new_instance_method(_openbabel.OBRotor_SetBond)
    SetRings = _swig_new_instance_method(_openbabel.OBRotor_SetRings)
    SetIdx = _swig_new_instance_method(_openbabel.OBRotor_SetIdx)
    SetDihedralAtoms = _swig_new_instance_method(_openbabel.OBRotor_SetDihedralAtoms)
    SetRotAtoms = _swig_new_instance_method(_openbabel.OBRotor_SetRotAtoms)
    SetTorsionValues = _swig_new_instance_method(_openbabel.OBRotor_SetTorsionValues)
    SetFixedBonds = _swig_new_instance_method(_openbabel.OBRotor_SetFixedBonds)
    SetToAngle = _swig_new_instance_method(_openbabel.OBRotor_SetToAngle)
    SetRotor = _swig_new_instance_method(_openbabel.OBRotor_SetRotor)
    Precompute = _swig_new_instance_method(_openbabel.OBRotor_Precompute)
    Precalc = _swig_new_instance_method(_openbabel.OBRotor_Precalc)
    Set = _swig_new_instance_method(_openbabel.OBRotor_Set)
    GetBond = _swig_new_instance_method(_openbabel.OBRotor_GetBond)
    Size = _swig_new_instance_method(_openbabel.OBRotor_Size)
    GetIdx = _swig_new_instance_method(_openbabel.OBRotor_GetIdx)
    GetDihedralAtoms = _swig_new_instance_method(_openbabel.OBRotor_GetDihedralAtoms)
    GetTorsionValues = _swig_new_instance_method(_openbabel.OBRotor_GetTorsionValues)
    GetFixedBonds = _swig_new_instance_method(_openbabel.OBRotor_GetFixedBonds)
    CalcTorsion = _swig_new_instance_method(_openbabel.OBRotor_CalcTorsion)
    CalcBondLength = _swig_new_instance_method(_openbabel.OBRotor_CalcBondLength)
    BeginTorIncrement = _swig_new_instance_method(_openbabel.OBRotor_BeginTorIncrement)
    EndTorIncrement = _swig_new_instance_method(_openbabel.OBRotor_EndTorIncrement)
    RemoveSymTorsionValues = _swig_new_instance_method(_openbabel.OBRotor_RemoveSymTorsionValues)
    SetDelta = _swig_new_instance_method(_openbabel.OBRotor_SetDelta)
    GetDelta = _swig_new_instance_method(_openbabel.OBRotor_GetDelta)
    GetFixedAtoms = _swig_new_instance_method(_openbabel.OBRotor_GetFixedAtoms)
    SetFixedAtoms = _swig_new_instance_method(_openbabel.OBRotor_SetFixedAtoms)
    GetEvalAtoms = _swig_new_instance_method(_openbabel.OBRotor_GetEvalAtoms)
    SetEvalAtoms = _swig_new_instance_method(_openbabel.OBRotor_SetEvalAtoms)
    GetRotAtoms = _swig_new_instance_method(_openbabel.OBRotor_GetRotAtoms)
    GetResolution = _swig_new_instance_method(_openbabel.OBRotor_GetResolution)
    SetNumCoords = _swig_new_instance_method(_openbabel.OBRotor_SetNumCoords)

# Register OBRotor in _openbabel:
_openbabel.OBRotor_swigregister(OBRotor)
class OBRotorList(object):
    r"""
    <openbabel/rotor.h>
    Given an OBMol, set up a list of possibly rotatable torsions,
    """

    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"""Constructor."""
        _openbabel.OBRotorList_swiginit(self, _openbabel.new_OBRotorList())
    __swig_destroy__ = _openbabel.delete_OBRotorList
    Clear = _swig_new_instance_method(_openbabel.OBRotorList_Clear)
    Size = _swig_new_instance_method(_openbabel.OBRotorList_Size)
    IsFixedBond = _swig_new_instance_method(_openbabel.OBRotorList_IsFixedBond)
    HasFixedBonds = _swig_new_instance_method(_openbabel.OBRotorList_HasFixedBonds)
    RemoveSymVals = _swig_new_instance_method(_openbabel.OBRotorList_RemoveSymVals)
    HasRingRotors = _swig_new_instance_method(_openbabel.OBRotorList_HasRingRotors)
    Setup = _swig_new_instance_method(_openbabel.OBRotorList_Setup)
    SetFixedBonds = _swig_new_instance_method(_openbabel.OBRotorList_SetFixedBonds)
    Init = _swig_new_instance_method(_openbabel.OBRotorList_Init)
    SetQuiet = _swig_new_instance_method(_openbabel.OBRotorList_SetQuiet)
    SetRotAtoms = _swig_new_instance_method(_openbabel.OBRotorList_SetRotAtoms)
    FindRotors = _swig_new_instance_method(_openbabel.OBRotorList_FindRotors)
    SetEvalAtoms = _swig_new_instance_method(_openbabel.OBRotorList_SetEvalAtoms)
    AssignTorVals = _swig_new_instance_method(_openbabel.OBRotorList_AssignTorVals)
    BeginRotor = _swig_new_instance_method(_openbabel.OBRotorList_BeginRotor)
    NextRotor = _swig_new_instance_method(_openbabel.OBRotorList_NextRotor)
    BeginRotors = _swig_new_instance_method(_openbabel.OBRotorList_BeginRotors)
    EndRotors = _swig_new_instance_method(_openbabel.OBRotorList_EndRotors)
    IdentifyEvalAtoms = _swig_new_instance_method(_openbabel.OBRotorList_IdentifyEvalAtoms)
    SetFixAtoms = _swig_new_instance_method(_openbabel.OBRotorList_SetFixAtoms)
    HasFixedAtoms = _swig_new_instance_method(_openbabel.OBRotorList_HasFixedAtoms)
    IgnoreSymmetryRemoval = _swig_new_instance_method(_openbabel.OBRotorList_IgnoreSymmetryRemoval)
    SetRotAtomsByFix = _swig_new_instance_method(_openbabel.OBRotorList_SetRotAtomsByFix)

# Register OBRotorList in _openbabel:
_openbabel.OBRotorList_swigregister(OBRotorList)
class rotor_digit(object):
    r"""Conditional comment: DEV"""

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

    def __init__(self, *args):
        _openbabel.rotor_digit_swiginit(self, _openbabel.new_rotor_digit(*args))
    set_size = _swig_new_instance_method(_openbabel.rotor_digit_set_size)
    set_state = _swig_new_instance_method(_openbabel.rotor_digit_set_state)
    get_state = _swig_new_instance_method(_openbabel.rotor_digit_get_state)
    size = _swig_new_instance_method(_openbabel.rotor_digit_size)
    next = _swig_new_instance_method(_openbabel.rotor_digit_next)
    __swig_destroy__ = _openbabel.delete_rotor_digit

# Register rotor_digit in _openbabel:
_openbabel.rotor_digit_swigregister(rotor_digit)
class OBRotorKeys(object):
    r"""End of conditional comment. <openbabel/rotor.h> A class to generate all possible rotorKeys"""

    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"""Constructor"""
        _openbabel.OBRotorKeys_swiginit(self, _openbabel.new_OBRotorKeys())
    Clear = _swig_new_instance_method(_openbabel.OBRotorKeys_Clear)
    NumKeys = _swig_new_instance_method(_openbabel.OBRotorKeys_NumKeys)
    AddRotor = _swig_new_instance_method(_openbabel.OBRotorKeys_AddRotor)
    Next = _swig_new_instance_method(_openbabel.OBRotorKeys_Next)
    GetKey = _swig_new_instance_method(_openbabel.OBRotorKeys_GetKey)
    __swig_destroy__ = _openbabel.delete_OBRotorKeys

# Register OBRotorKeys in _openbabel:
_openbabel.OBRotorKeys_swigregister(OBRotorKeys)
class OBRotamerList(OBGenericData):
    r"""Supports a set of rotamer coordinate sets for some number of potentially rotatable bonds"""

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

    def __init__(self):
        _openbabel.OBRotamerList_swiginit(self, _openbabel.new_OBRotamerList())
    __swig_destroy__ = _openbabel.delete_OBRotamerList
    Setup = _swig_new_instance_method(_openbabel.OBRotamerList_Setup)
    NumRotors = _swig_new_instance_method(_openbabel.OBRotamerList_NumRotors)
    NumRotamers = _swig_new_instance_method(_openbabel.OBRotamerList_NumRotamers)
    AddRotamer = _swig_new_instance_method(_openbabel.OBRotamerList_AddRotamer)
    AddRotamers = _swig_new_instance_method(_openbabel.OBRotamerList_AddRotamers)
    GetReferenceArray = _swig_new_instance_method(_openbabel.OBRotamerList_GetReferenceArray)
    BeginRotamer = _swig_new_instance_method(_openbabel.OBRotamerList_BeginRotamer)
    EndRotamer = _swig_new_instance_method(_openbabel.OBRotamerList_EndRotamer)
    CreateConformerList = _swig_new_instance_method(_openbabel.OBRotamerList_CreateConformerList)
    ExpandConformerList = _swig_new_instance_method(_openbabel.OBRotamerList_ExpandConformerList)
    SetCurrentCoordinates = _swig_new_instance_method(_openbabel.OBRotamerList_SetCurrentCoordinates)
    SetBaseCoordinateSets = _swig_new_instance_method(_openbabel.OBRotamerList_SetBaseCoordinateSets)
    NumBaseCoordinateSets = _swig_new_instance_method(_openbabel.OBRotamerList_NumBaseCoordinateSets)
    GetBaseCoordinateSet = _swig_new_instance_method(_openbabel.OBRotamerList_GetBaseCoordinateSet)
    NumAtoms = _swig_new_instance_method(_openbabel.OBRotamerList_NumAtoms)

# Register OBRotamerList in _openbabel:
_openbabel.OBRotamerList_swigregister(OBRotamerList)
N_PROPERTIES = _openbabel.N_PROPERTIES
class OBSpectrophore(object):
    r"""
    <openbabel/spectrophore.h>
    Class to compute Spectrophores
    Since: Version 2.3


    ### Introduction
    Spectrophores are one-dimensional descriptors generated from the property
    fields surrounding the molecules. The technology allows the accurate description
    of molecules in terms of their surface properties or fields. Comparison of
    molecules' property fields provides a robust structure-independent method of
    aligning actives from different chemical classes. When applied to molecules such
    as ligands and drugs, Spectrophores can be used as powerful molecular
    descriptors in the fields of chemoinformatics, virtual screening, and QSAR
    modeling.


    The computation of Spectrophores is independent of the position and
    orientation of the molecule and this enables easy and fast comparison of
    Spectrophores between different molecules. Molecules having similar
    three-dimensional properties and shapes always yield similar Spectrophores.


    A Spectrophore is calculated by surrounding the three-dimensional
    conformation of the molecule by a three-dimensional arrangement of points,
    followed by calculating the interaction between each of the atom properties and
    the surrounding the points. The three-dimensional arrangement of the points
    surrounding the molecule can be regarded as an 'artificial' cage or receptor,
    and the interaction calculated between the molecule and the cage can be regarded
    as an artificial representation of an affinity value between molecule and cage.
    Because the calculated interaction is dependent on the relative orientation of
    the molecule within the cage, the molecule is rotated in discrete angles and the
    most favorable interaction value is kept as final result. The angular stepsize
    at which the molecule is rotated along its three axis can be specified by the
    user and influences the accuracy of the method.


    ### Atomic properties
    The calculation of a Spectrophore starts by calculating the atomic
    contributions of each property from which one wants to calculate a
    Spectrophore from. In the current implementation, four atomic properties are
    converted into a Spectrophore; these four properties include the atomic
    partial charges, the atomic lipohilicities, the atomic shape deviations and the
    atomic electrophilicities.


    The atomic partial charges and atomic electrophilicity properties are calculated
    using the electronegativity equalisation method (EEM) as described by Bultinck
    and coworkers (*J. Phys. Chem.* 2002, **A106**, 7895-7901; *J. Chem.
    Inf. Comput. Sci.* 2003, **43**, 422-428). The following table lists the
    atomic electronegativity and hardness parameters that are used in the current
    implementation of the EEM method:

    |**Atom symbol**|**Atomic electronegativity**
    |**Atomic hardness**|
    |H|0.20606|0.65971|
    |C|0.36237|0.32966|
    |N|0.49279|0.34519|
    |O|0.73013|0.54428|
    |F|0.72052|0.72664|
    |S|0.62020|0.20640|
    |Cl|0.36237|0.32966|
    |Br|0.70052|0.54554|
    |I|0.68052|0.30664|
    |Default|0.36237|0.32966|



    Atomic lipophilic potential parameters are calculated using a rule-based method
    using parameters from the following table. These parameters were obtained by
    fitting against the logP values of 10,881 molecules.

    |**Atom**|**Lipophilicity parameter**|
    |H bound to C|-0.018|
    |H bound to heteroatom|-0.374|
    |C|+0.271|
    |N|-0.137|
    |O|-0.321|
    |F|+0.217|
    |S|+0.385|
    |Cl|+0.632|
    |Br|+0.815|
    |I|+0.198|
    |Default|-0.175|



    Finally, the atomic shape deviation is generated by calculating, for each atom,
    the atom's deviation from the average molecular radius. This is done in a
    four steps process:
    - The molecular center of geometry (COG) is calculated;
    - The distances between each atom and the molecular COG are calculated;
    - The average molecular radius is calculated by averaging all the atomic
    distances.
    - The distances between each atom and the COG are then divided by the average
    molecular radius and centered on zero.


    ### Interaction between the atoms and cage points
    Following the calculation of all required atomic properties, the next step in
    the calculation of a Spectrophore consists of determining the total
    interaction value *V(c,p)* between each of the atomic contributions of
    property *p* with a set of interaction points on an artificial cage
    *c* surrounding the molecular conformation. For this purpose, each of these
    interaction points *i* on cage *c* is assigned a value *P(c,i)*
    which is either +1 or -1, with the constraint that the sum of all interaction
    points on a particular cage should be zero. In a typical Spectrophore
    calculation, a cage is represented as a rectangular box encompassing the
    molecular conformation in all three dimensions, with the centers of the box
    edges being the interaction points. Such a configuration gives twelve
    interaction points per cage, and, in the case of a non-stereospecific
    distribution of the interaction points, leads to 12 different cages. Although
    there are no particular requirements as to the dimensions of the rectangular
    cage, the distance between the interaction points and the geometrical extremes
    of the molecule should be such that a meaningful interaction value between each
    cage point and the molecular entity can be calculated. In this respect, the
    default dimensions of the cage are constantly adjusted to enclose the molecule
    at a minimum distance of 3 &Aring; along all dimensions. This cage size can be
    modified by the user and influences the resolution of the Spectrophore.


    Image: spectrophore_cage.png("Schematic representation of a molecule surrounded by the artifical cage")
    The total interaction value *V(c,p)* between the atomic contribution values
    *A(j,p)* of property *p* for a given molecular conformation and the
    cage interaction values *P(c,i)* for a given cage *c* is calculated
    according a standard interaction energy equation. It takes into account the
    Euclidean distance between each atom and each cage point. This total interaction
    *V(c,p)* for a given property *p* and cage *c* for a given
    molecular conformation is minimized by sampling the molecular orientation along
    the three axis in angular steps and the calculation of the interaction value for
    each orientation within the cage. The final total interaction *V(c,p)* for
    a given cage *c* and property *p* corresponds to the lowest
    interaction value obtained this way, and corresponds to the *c*'th value in
    the one-dimensional Spectrophore vector calculated for molecular property
    *p*. As a result, a Spectrophore is organized as a vector of minimized
    interaction values *V*, each of these organized in order of cages and
    property values. Since for a typical Spectrophore implementation twelve
    different cages are used, the total length of a Spectrophore vector equals
    to 12 times the number of properties. Since four different properties are used
    in the current implementation (electrostatic, lipophilic, electrophilic
    potentials, and an additional shape index as described before), this leads to a
    total Spectrophore length of 48 real values per molecular conformation.


    Since Spectrophore descriptors are dependent on the actual
    three-dimensional conformation of the molecule, a typical analysis includes the
    calculation of Spectrophores from a reasonable set of different
    conformations. It is then up to the user to decide on the most optimal strategy
    for processing the different Spectrophore vectors. In a typical virtual
    screening application, calculating the average Spectrophore vector from all
    conformations of a single molecule may be a good strategy; other applications
    have benefit from calculating a weighted average or the minimal values.


    ### Accuracy
    As already mentioned, the total interaction between cage and molecule for a
    given property is minimized by sampling the molecular orientation in angular
    steps of a certain magnitude. As a typical angular step size, 20deg was found to
    be the best compromise between accuracy and computer speed. Larger steps sizes
    are faster to calculate but have the risk of missing the global interaction
    energy minimum, while smaller angular steps sizes do sample the rotational space
    more thoroughly but at a significant computational cost. The accuracy can be
    specified by the user using the
    OBSpectrophore::SetAccuracy(const OBSpectrophore::AccuracyOption) method.


    ### Resolution
    Spectrophores capture information about the property fields surrounding the
    molecule, and the amount of detail that needs to be captured can be regulated by
    the user. This is done by altering the minimal distance between the molecule and
    the surrounding cage. The resolution can be specified by the user with the
    OBSpectrophore::SetResolution(const double) method. The default distance along
    all dimensions is 3.0 &Aring;. The larger the distance, the lower the resolution.
    With a higher resolution, more details of the property fields surrounding the
    molecule are contained by the Spectrophore. On the contrary, low resolution
    settings may lead to a more general representation of the property fields, with
    little or no emphasis on small local variations within the fields. Using a low
    resolution can be the method of choice during the initial virtual screening
    experiments in order to get an initial, but not so discriminative, first
    selection. This initial selection can then further be refined during subsequent
    virtual screening steps using a higher resolution. In this setting, small local
    differences in the fields between pairs of molecules will be picked up much more
    easily.


    The absolute values of the individual Spectrophore data points are dependent
    on the used resolution. Low resolution values lead to small values of the
    calculated individual Spectrophore data points, while high resolutions will
    lead to larger data values. It is therefore only meaningful to compare only
    Spectrophores that have been generated using the same resolution settings or
    after some kind of normalization is performed.


    Computation time is not influenced by the specified resolution, hence the
    computation time is identical for all different resolution settings.


    ### Stereospecificity
    Some of the cages that are used to calculated Spectrophores have a
    stereospecific distribution of the interaction points. The resulting
    interaction valus resulting from these cages are therefore sensitive to the
    enantiomeric configuration of the molecule within the cage. The fact that both
    stereoselective as well as stereo non-selective cages can be used makes it
    possible to include or exclude stereospecificity in the virtual screening
    search. Depending on the desired output, the stereospecificity of
    Spectrophores can be specified by the user:
    - No stereospecificity (default). Spectrophores are generated using cages that are not
    stereospecific. For most applications, these Spectrophores will suffice.
    - Unique stereospecificity. Spectrophores are generated using unique
    stereospecific cages.
    - Mirror stereospecificity. Mirror stereospecific Spectrophores are
    Spectrophores resulting from the mirror enantiomeric form of the input
    molecules.


    The stereospecificity can be specified by the user using the
    OBSpectrophore::SetStereo(const OBSpectrophore::StereoOption) method.


    The differences between the corresponding data points of unique and mirror
    stereospecific Spectrophores are very small and require very long
    calculation times to obtain a sufficiently high quality level. This increased
    quality level is triggered by the accuracy setting and will result in
    calculation times being increased by at least a factor 100. As a consequence, it
    is recommended to apply this increased accuracy only in combination with a
    limited number of molecules, and when the small differences between the
    stereospecific Spectrophores are really critical. However, for the vast
    majority of virtual screening applications, this increased accuracy is not
    required as long as it is not the intention to draw conclusions about
    differences in the underlying molecular stereoselectivity. Non-stereospecific
    Spectrophores will therefore suffice for most applications.


    ### Normalisation
    It may sometimes be desired to focus on the relative differences between the
    Spectrophore data points rather than focussing on the absolute differences.
    In these cases, normalization of Spectrophores may be required. The current
    implementation offers with the
    OBSpectrophore::SetNormalization(const OBSpectrophore::NormalizationOption)
    method the possibility to normalize in four different ways:
    - No normalization (default);
    - Normalization towards zero mean;
    - Normalization towards standard deviation;
    - Normalization towards zero mean and unit standard deviation.


    In all these cases, normalization is performed on a 'per-property' basis, which
    means that the data points belonging to the same property set are treated as a
    single set and that normalization is only performed on the data points within
    each of these sets and not across all data points.


    Normalization may be important when comparing the Spectrophores of charged
    molecules with those of neutral molecules. For molecules carrying a global
    positive charge, the resulting Spectrophore data points of the charge and
    electrophilicity properties will both be shifted in absolute value compared to
    the corresponding data points of the respective neutral species. Normalization
    of the Spectrophores removes the original magnitude differences for the data
    points corresponding to the charge and electrophilicity properties of charged
    and neutral species. Therefore, if the emphasis of the virtual screening
    consists of the identification of molecules with similar property fields without
    taking into account differences in absolute charge, then Spectrophores
    should be normalized towards zero mean. However, if absolute charge differences
    should be taken into account to differentiate between molecules, unnormalized
    Spectrophores are recommended.


    version 2.3
    """

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    AngStepSize1 = _openbabel.OBSpectrophore_AngStepSize1
    AngStepSize2 = _openbabel.OBSpectrophore_AngStepSize2
    AngStepSize5 = _openbabel.OBSpectrophore_AngStepSize5
    AngStepSize10 = _openbabel.OBSpectrophore_AngStepSize10
    AngStepSize15 = _openbabel.OBSpectrophore_AngStepSize15
    AngStepSize20 = _openbabel.OBSpectrophore_AngStepSize20
    AngStepSize30 = _openbabel.OBSpectrophore_AngStepSize30
    AngStepSize36 = _openbabel.OBSpectrophore_AngStepSize36
    AngStepSize45 = _openbabel.OBSpectrophore_AngStepSize45
    AngStepSize60 = _openbabel.OBSpectrophore_AngStepSize60
    NoNormalization = _openbabel.OBSpectrophore_NoNormalization
    NormalizationTowardsZeroMean = _openbabel.OBSpectrophore_NormalizationTowardsZeroMean
    NormalizationTowardsUnitStd = _openbabel.OBSpectrophore_NormalizationTowardsUnitStd
    NormalizationTowardsZeroMeanAndUnitStd = _openbabel.OBSpectrophore_NormalizationTowardsZeroMeanAndUnitStd
    NoStereoSpecificProbes = _openbabel.OBSpectrophore_NoStereoSpecificProbes
    UniqueStereoSpecificProbes = _openbabel.OBSpectrophore_UniqueStereoSpecificProbes
    MirrorStereoSpecificProbes = _openbabel.OBSpectrophore_MirrorStereoSpecificProbes
    AllStereoSpecificProbes = _openbabel.OBSpectrophore_AllStereoSpecificProbes

    def __init__(self, *args):
        r"""
        *Overload 1:*
        Default constructor to create an OBSpectrophore object.

        |

        *Overload 2:*
        Copy constructor to create an OBSpectrophore object by taking
                a copy from another OBSpectrophore object.

                :type sphore: :py:class:`OBSpectrophore`
                :param sphore: A reference to the source OBSpectrophore object
        """
        _openbabel.OBSpectrophore_swiginit(self, _openbabel.new_OBSpectrophore(*args))
    __swig_destroy__ = _openbabel.delete_OBSpectrophore
    SetResolution = _swig_new_instance_method(_openbabel.OBSpectrophore_SetResolution)
    SetAccuracy = _swig_new_instance_method(_openbabel.OBSpectrophore_SetAccuracy)
    SetStereo = _swig_new_instance_method(_openbabel.OBSpectrophore_SetStereo)
    SetNormalization = _swig_new_instance_method(_openbabel.OBSpectrophore_SetNormalization)
    GetAccuracy = _swig_new_instance_method(_openbabel.OBSpectrophore_GetAccuracy)
    GetResolution = _swig_new_instance_method(_openbabel.OBSpectrophore_GetResolution)
    GetStereo = _swig_new_instance_method(_openbabel.OBSpectrophore_GetStereo)
    GetNormalization = _swig_new_instance_method(_openbabel.OBSpectrophore_GetNormalization)
    GetSpectrophore = _swig_new_instance_method(_openbabel.OBSpectrophore_GetSpectrophore)

# Register OBSpectrophore in _openbabel:
_openbabel.OBSpectrophore_swigregister(OBSpectrophore)
class OBConformerFilter(object):
    r"""
    <openbabel/conformersearch.h>
    Interface used by OBConformerSearch for filtering conformers.

    The OBConformerFilter class defines an interface used by the OBConformerSearch
    class. A conformer filter is used as a first selection method when generating
    conformers. A typical example is a steric filter to ensure atoms are never
    closer than some specified distance.

    See also: OBConformerSearch OBConformerFilters
    Since: 2.3
    """

    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
    IsGood = _swig_new_instance_method(_openbabel.OBConformerFilter_IsGood)
    __swig_destroy__ = _openbabel.delete_OBConformerFilter

# Register OBConformerFilter in _openbabel:
_openbabel.OBConformerFilter_swigregister(OBConformerFilter)
class OBConformerFilters(OBConformerFilter):
    r"""
    <openbabel/conformersearch.h>
    Class for combining OBConformerFilter objects.

    The OBConformerFilters class makes it easy to combine OBConformerFilter
    objects. A list of OBConformerFilter objects is specified when constructing
    this class. The IsGood implementation simply checks all the specified
    filters and returns false if any of the filters returns false.

    See also: OBConformerSearch OBConformerFilter
    Since: 2.3
    """

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

    def __init__(self, filters):
        r"""Constructor specifiying the filters to combine."""
        _openbabel.OBConformerFilters_swiginit(self, _openbabel.new_OBConformerFilters(filters))
    __swig_destroy__ = _openbabel.delete_OBConformerFilters

# Register OBConformerFilters in _openbabel:
_openbabel.OBConformerFilters_swigregister(OBConformerFilters)
class OBStericConformerFilter(OBConformerFilter):
    r"""
    <openbabel/conformersearch.h>
    A steric conformer filter class.

    The OBStericConformerFilter class is the default filter used by OBConformerSearch.
    The filter removes all molecules which have at least 2 atoms closer together than
    the specified distance.
    Since: 2.3
    """

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

    def __init__(self, *args):
        _openbabel.OBStericConformerFilter_swiginit(self, _openbabel.new_OBStericConformerFilter(*args))
    __swig_destroy__ = _openbabel.delete_OBStericConformerFilter

# Register OBStericConformerFilter in _openbabel:
_openbabel.OBStericConformerFilter_swigregister(OBStericConformerFilter)
class OBConformerScore(object):
    r"""
    <openbabel/conformersearch.h>
    Interface used by OBConformerSearch for scoring conformers.

    The OBConformerScore class defines an interface to assign scores to conformers.
    This class is used by OBConformerSearch to make the class flexible. A higher
    score means the conformer with index is more favourable. A typical example is
    the force field energy to find the lowest energy conformer (note: the energy is
    not directly usable as score since lower values are better). Another example
    is to use some measure of diversity (e.g. RMSD) to generate a diverse set of
    conformers.
    Since: 2.3
    """

    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
    HighScore = _openbabel.OBConformerScore_HighScore
    LowScore = _openbabel.OBConformerScore_LowScore
    GetPreferred = _swig_new_instance_method(_openbabel.OBConformerScore_GetPreferred)
    Highest = _openbabel.OBConformerScore_Highest
    Lowest = _openbabel.OBConformerScore_Lowest
    Sum = _openbabel.OBConformerScore_Sum
    Average = _openbabel.OBConformerScore_Average
    GetConvergence = _swig_new_instance_method(_openbabel.OBConformerScore_GetConvergence)
    Score = _swig_new_instance_method(_openbabel.OBConformerScore_Score)
    __swig_destroy__ = _openbabel.delete_OBConformerScore

# Register OBConformerScore in _openbabel:
_openbabel.OBConformerScore_swigregister(OBConformerScore)
class OBRMSDConformerScore(OBConformerScore):
    r"""
    <openbabel/conformersearch.h>
    A RMSD conformer scoring class.

    Score conformers by the RMSD between the conformer with specified index and
    the closest conformer. This results in a diverse set of conformers.
    Since: 2.3
    """

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

    def __init__(self):
        _openbabel.OBRMSDConformerScore_swiginit(self, _openbabel.new_OBRMSDConformerScore())
    __swig_destroy__ = _openbabel.delete_OBRMSDConformerScore

# Register OBRMSDConformerScore in _openbabel:
_openbabel.OBRMSDConformerScore_swigregister(OBRMSDConformerScore)
class OBEnergyConformerScore(OBConformerScore):
    r"""
    <openbabel/conformersearch.h>
    A lowest energy conformer scoring class.
    Since: 2.3
    """

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

    def __init__(self):
        _openbabel.OBEnergyConformerScore_swiginit(self, _openbabel.new_OBEnergyConformerScore())
    GetNbEnergyCompute = _swig_new_instance_method(_openbabel.OBEnergyConformerScore_GetNbEnergyCompute)
    GetNbEnergyRequest = _swig_new_instance_method(_openbabel.OBEnergyConformerScore_GetNbEnergyRequest)
    __swig_destroy__ = _openbabel.delete_OBEnergyConformerScore

# Register OBEnergyConformerScore in _openbabel:
_openbabel.OBEnergyConformerScore_swigregister(OBEnergyConformerScore)
class OBMinimizingEnergyConformerScore(OBConformerScore):
    r"""
    <openbabel/conformersearch.h>
    A lowest energy conformer scoring class (after minimization)
    Since: 2.4
    """

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

    def __init__(self):
        _openbabel.OBMinimizingEnergyConformerScore_swiginit(self, _openbabel.new_OBMinimizingEnergyConformerScore())
    GetNbEnergyCompute = _swig_new_instance_method(_openbabel.OBMinimizingEnergyConformerScore_GetNbEnergyCompute)
    GetNbEnergyRequest = _swig_new_instance_method(_openbabel.OBMinimizingEnergyConformerScore_GetNbEnergyRequest)
    __swig_destroy__ = _openbabel.delete_OBMinimizingEnergyConformerScore

# Register OBMinimizingEnergyConformerScore in _openbabel:
_openbabel.OBMinimizingEnergyConformerScore_swigregister(OBMinimizingEnergyConformerScore)
class OBMinimizingRMSDConformerScore(OBConformerScore):
    r"""
    <openbabel/conformersearch.h>
    An RMSD conformer scoring class, after a short minimization

    This scores conformers by the RMSD between the conformer and the closest, to produce a
    diverse set of conformers, but after minimization. This ensures each conformer is
    "reasonable" and avoids steric clashes.
    Since: 2.4
    """

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

    def __init__(self):
        _openbabel.OBMinimizingRMSDConformerScore_swiginit(self, _openbabel.new_OBMinimizingRMSDConformerScore())
    __swig_destroy__ = _openbabel.delete_OBMinimizingRMSDConformerScore

# Register OBMinimizingRMSDConformerScore in _openbabel:
_openbabel.OBMinimizingRMSDConformerScore_swigregister(OBMinimizingRMSDConformerScore)
class OBConformerSearch(object):
    r"""
    <openbabel/conformersearch.h>
    Conformer searching using genetic algorithm.
    See 'ConformerSearching'
    Since: 2.3
    """

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

    def __init__(self):
        _openbabel.OBConformerSearch_swiginit(self, _openbabel.new_OBConformerSearch())
    __swig_destroy__ = _openbabel.delete_OBConformerSearch
    Setup = _swig_new_instance_method(_openbabel.OBConformerSearch_Setup)
    SetNumConformers = _swig_new_instance_method(_openbabel.OBConformerSearch_SetNumConformers)
    SetNumChildren = _swig_new_instance_method(_openbabel.OBConformerSearch_SetNumChildren)
    SetMutability = _swig_new_instance_method(_openbabel.OBConformerSearch_SetMutability)
    SetConvergence = _swig_new_instance_method(_openbabel.OBConformerSearch_SetConvergence)
    SetFixedBonds = _swig_new_instance_method(_openbabel.OBConformerSearch_SetFixedBonds)
    SetFilter = _swig_new_instance_method(_openbabel.OBConformerSearch_SetFilter)
    SetScore = _swig_new_instance_method(_openbabel.OBConformerSearch_SetScore)
    PrintRotors = _swig_new_instance_method(_openbabel.OBConformerSearch_PrintRotors)
    Search = _swig_new_instance_method(_openbabel.OBConformerSearch_Search)
    GetRotorKeys = _swig_new_instance_method(_openbabel.OBConformerSearch_GetRotorKeys)
    GetConformers = _swig_new_instance_method(_openbabel.OBConformerSearch_GetConformers)
    SetLogStream = _swig_new_instance_method(_openbabel.OBConformerSearch_SetLogStream)
    SetSharing = _swig_new_instance_method(_openbabel.OBConformerSearch_SetSharing)
    GetNbNiches = _swig_new_instance_method(_openbabel.OBConformerSearch_GetNbNiches)
    SetNbNiches = _swig_new_instance_method(_openbabel.OBConformerSearch_SetNbNiches)
    GetNicheRadius = _swig_new_instance_method(_openbabel.OBConformerSearch_GetNicheRadius)
    SetNicheRadius = _swig_new_instance_method(_openbabel.OBConformerSearch_SetNicheRadius)
    GetAlphaSharing = _swig_new_instance_method(_openbabel.OBConformerSearch_GetAlphaSharing)
    SetAlphaSharing = _swig_new_instance_method(_openbabel.OBConformerSearch_SetAlphaSharing)
    GetSigmaSharing = _swig_new_instance_method(_openbabel.OBConformerSearch_GetSigmaSharing)
    SetSigmaSharing = _swig_new_instance_method(_openbabel.OBConformerSearch_SetSigmaSharing)
    GetCrossoverProbability = _swig_new_instance_method(_openbabel.OBConformerSearch_GetCrossoverProbability)
    SetCrossoverProbability = _swig_new_instance_method(_openbabel.OBConformerSearch_SetCrossoverProbability)
    GetNicheMating = _swig_new_instance_method(_openbabel.OBConformerSearch_GetNicheMating)
    SetNicheMating = _swig_new_instance_method(_openbabel.OBConformerSearch_SetNicheMating)
    SetLocalOptRate = _swig_new_instance_method(_openbabel.OBConformerSearch_SetLocalOptRate)

# Register OBConformerSearch in _openbabel:
_openbabel.OBConformerSearch_swigregister(OBConformerSearch)
class OBAlign(object):
    r"""
    <openbabel/math/align.h>
    Perform a least-squares alignment of two molecules or two vectors of vector3 objects

    This class may be used to perform a least-squares alignment of two OBMol
    objects or two vector<vector3> objects. The Kabsch algorithm is used
    for the alignment.

    During the alignment, the Target is aligned to the Reference. Note that
    mutiple alignments to the same Reference will be much faster than multiple
    alignments to the same Target. When carrying out multiple alignments,
    a single OBAlign instance should be reused by calling
    SetTarget() or SetTargetMol() for each additional Target and then calling
    Align().

    When aligning molecules, the atoms of the two molecules must be in the same
    order for the results to be sensible. By default, hydrogens are not
    included in the least-squares fitting procedure (set ``includeH`` to
    true if you wish to include them) and so the resulting RMSD is the
    heavy-atom RMSD (which is usually what you want).

    By default, symmetry is taken
    into account when comparing molecules. For example, if a benzene is flipped
    by 180 degrees along one of its 2-fold symmetry axes, it will only have an
    RMSD of 0 (with respect to its original orientation) if symmetry is
    enabled. To turn off handling of symmetry set ``symmetry`` to false (this
    will speed up the alignment).

    Note that neither the Target nor the Reference
    are modified by the algorithm. As a result, to update a TargetMol with the
    new coordinates from the alignment, you need to use UpdateCoords().

    Since: version 2.3
    """

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

    def __init__(self, *args):
        r"""
        *Overload 1:*

        If this constructor is used, the Target and Reference must be
        set using SetRef/SetRefMol and SetTarget/SetTargetMol before running
        the alignment.

        |

        *Overload 2:*

        Align two molecules.

        |

        *Overload 3:*

        Align two molecules.

        |

        *Overload 4:*

        Align two molecules.

        |

        *Overload 5:*

        Align two vectors of vector3 objects.
        """
        _openbabel.OBAlign_swiginit(self, _openbabel.new_OBAlign(*args))
    SetRef = _swig_new_instance_method(_openbabel.OBAlign_SetRef)
    SetTarget = _swig_new_instance_method(_openbabel.OBAlign_SetTarget)
    SetRefMol = _swig_new_instance_method(_openbabel.OBAlign_SetRefMol)
    SetTargetMol = _swig_new_instance_method(_openbabel.OBAlign_SetTargetMol)
    Align = _swig_new_instance_method(_openbabel.OBAlign_Align)
    Kabsch = _openbabel.OBAlign_Kabsch
    QCP = _openbabel.OBAlign_QCP
    SetMethod = _swig_new_instance_method(_openbabel.OBAlign_SetMethod)
    GetRMSD = _swig_new_instance_method(_openbabel.OBAlign_GetRMSD)
    GetRotMatrix = _swig_new_instance_method(_openbabel.OBAlign_GetRotMatrix)
    GetAlignment = _swig_new_instance_method(_openbabel.OBAlign_GetAlignment)
    UpdateCoords = _swig_new_instance_method(_openbabel.OBAlign_UpdateCoords)
    __swig_destroy__ = _openbabel.delete_OBAlign

# Register OBAlign in _openbabel:
_openbabel.OBAlign_swigregister(OBAlign)
class _OBMolAtomIter(object):
    r"""Iterate over all atoms in an OBMol"""

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

    def __init__(self, *args):
        _openbabel._OBMolAtomIter_swiginit(self, _openbabel.new__OBMolAtomIter(*args))
    __swig_destroy__ = _openbabel.delete__OBMolAtomIter

    def __nonzero__(self):
        return _openbabel._OBMolAtomIter___nonzero__(self)
    __bool__ = __nonzero__


    inc = _swig_new_instance_method(_openbabel._OBMolAtomIter_inc)
    __ref__ = _swig_new_instance_method(_openbabel._OBMolAtomIter___ref__)

# Register _OBMolAtomIter in _openbabel:
_openbabel._OBMolAtomIter_swigregister(_OBMolAtomIter)
class _OBMolAtomDFSIter(object):
    r"""Iterate over all atoms in an OBMol in a depth-first search (DFS)"""

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

    def __init__(self, *args):
        _openbabel._OBMolAtomDFSIter_swiginit(self, _openbabel.new__OBMolAtomDFSIter(*args))
    __swig_destroy__ = _openbabel.delete__OBMolAtomDFSIter

    def __nonzero__(self):
        return _openbabel._OBMolAtomDFSIter___nonzero__(self)
    __bool__ = __nonzero__


    inc = _swig_new_instance_method(_openbabel._OBMolAtomDFSIter_inc)
    __ref__ = _swig_new_instance_method(_openbabel._OBMolAtomDFSIter___ref__)
    next = _swig_new_instance_method(_openbabel._OBMolAtomDFSIter_next)

# Register _OBMolAtomDFSIter in _openbabel:
_openbabel._OBMolAtomDFSIter_swigregister(_OBMolAtomDFSIter)
class _OBMolAtomBFSIter(object):
    r"""Iterate over all atoms in an OBMol in a breadth-first search (BFS)"""

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

    def __init__(self, *args):
        _openbabel._OBMolAtomBFSIter_swiginit(self, _openbabel.new__OBMolAtomBFSIter(*args))
    __swig_destroy__ = _openbabel.delete__OBMolAtomBFSIter

    def __nonzero__(self):
        return _openbabel._OBMolAtomBFSIter___nonzero__(self)
    __bool__ = __nonzero__


    inc = _swig_new_instance_method(_openbabel._OBMolAtomBFSIter_inc)
    __ref__ = _swig_new_instance_method(_openbabel._OBMolAtomBFSIter___ref__)
    CurrentDepth = _swig_new_instance_method(_openbabel._OBMolAtomBFSIter_CurrentDepth)

# Register _OBMolAtomBFSIter in _openbabel:
_openbabel._OBMolAtomBFSIter_swigregister(_OBMolAtomBFSIter)
class OBMolBondBFSIter(object):
    r"""Iterate over all bonds in an OBMol in a breadth-first search (BFS)"""

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

    def __init__(self, *args):
        _openbabel.OBMolBondBFSIter_swiginit(self, _openbabel.new_OBMolBondBFSIter(*args))
    __swig_destroy__ = _openbabel.delete_OBMolBondBFSIter

    def __nonzero__(self):
        return _openbabel.OBMolBondBFSIter___nonzero__(self)
    __bool__ = __nonzero__


    inc = _swig_new_instance_method(_openbabel.OBMolBondBFSIter_inc)
    __ref__ = _swig_new_instance_method(_openbabel.OBMolBondBFSIter___ref__)
    CurrentDepth = _swig_new_instance_method(_openbabel.OBMolBondBFSIter_CurrentDepth)

# Register OBMolBondBFSIter in _openbabel:
_openbabel.OBMolBondBFSIter_swigregister(OBMolBondBFSIter)
class _OBMolBondIter(object):
    r"""Iterate over all bonds in an OBMol"""

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

    def __init__(self, *args):
        _openbabel._OBMolBondIter_swiginit(self, _openbabel.new__OBMolBondIter(*args))
    __swig_destroy__ = _openbabel.delete__OBMolBondIter

    def __nonzero__(self):
        return _openbabel._OBMolBondIter___nonzero__(self)
    __bool__ = __nonzero__


    inc = _swig_new_instance_method(_openbabel._OBMolBondIter_inc)
    __ref__ = _swig_new_instance_method(_openbabel._OBMolBondIter___ref__)

# Register _OBMolBondIter in _openbabel:
_openbabel._OBMolBondIter_swigregister(_OBMolBondIter)
class _OBAtomAtomIter(object):
    r"""Iterate over all neighboring atoms to an OBAtom"""

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

    def __init__(self, *args):
        _openbabel._OBAtomAtomIter_swiginit(self, _openbabel.new__OBAtomAtomIter(*args))
    __swig_destroy__ = _openbabel.delete__OBAtomAtomIter

    def __nonzero__(self):
        return _openbabel._OBAtomAtomIter___nonzero__(self)
    __bool__ = __nonzero__


    inc = _swig_new_instance_method(_openbabel._OBAtomAtomIter_inc)
    __ref__ = _swig_new_instance_method(_openbabel._OBAtomAtomIter___ref__)

# Register _OBAtomAtomIter in _openbabel:
_openbabel._OBAtomAtomIter_swigregister(_OBAtomAtomIter)
class _OBAtomBondIter(object):
    r"""Iterate over all bonds on an OBAtom"""

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

    def __init__(self, *args):
        _openbabel._OBAtomBondIter_swiginit(self, _openbabel.new__OBAtomBondIter(*args))
    __swig_destroy__ = _openbabel.delete__OBAtomBondIter

    def __nonzero__(self):
        return _openbabel._OBAtomBondIter___nonzero__(self)
    __bool__ = __nonzero__


    inc = _swig_new_instance_method(_openbabel._OBAtomBondIter_inc)
    __ref__ = _swig_new_instance_method(_openbabel._OBAtomBondIter___ref__)

# Register _OBAtomBondIter in _openbabel:
_openbabel._OBAtomBondIter_swigregister(_OBAtomBondIter)
class _OBResidueIter(object):
    r"""Iterate over all residues in an OBMol"""

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

    def __init__(self, *args):
        _openbabel._OBResidueIter_swiginit(self, _openbabel.new__OBResidueIter(*args))
    __swig_destroy__ = _openbabel.delete__OBResidueIter

    def __nonzero__(self):
        return _openbabel._OBResidueIter___nonzero__(self)
    __bool__ = __nonzero__


    inc = _swig_new_instance_method(_openbabel._OBResidueIter_inc)
    __ref__ = _swig_new_instance_method(_openbabel._OBResidueIter___ref__)

# Register _OBResidueIter in _openbabel:
_openbabel._OBResidueIter_swigregister(_OBResidueIter)
class _OBResidueAtomIter(object):
    r"""Iterate over all atoms in an OBResidue"""

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

    def __init__(self, *args):
        _openbabel._OBResidueAtomIter_swiginit(self, _openbabel.new__OBResidueAtomIter(*args))
    __swig_destroy__ = _openbabel.delete__OBResidueAtomIter

    def __nonzero__(self):
        return _openbabel._OBResidueAtomIter___nonzero__(self)
    __bool__ = __nonzero__


    inc = _swig_new_instance_method(_openbabel._OBResidueAtomIter_inc)
    __ref__ = _swig_new_instance_method(_openbabel._OBResidueAtomIter___ref__)

# Register _OBResidueAtomIter in _openbabel:
_openbabel._OBResidueAtomIter_swigregister(_OBResidueAtomIter)
class _OBMolAngleIter(object):
    r"""Iterate over all angles in an OBMol"""

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

    def __init__(self, *args):
        _openbabel._OBMolAngleIter_swiginit(self, _openbabel.new__OBMolAngleIter(*args))
    __swig_destroy__ = _openbabel.delete__OBMolAngleIter

    def __nonzero__(self):
        return _openbabel._OBMolAngleIter___nonzero__(self)
    __bool__ = __nonzero__


    inc = _swig_new_instance_method(_openbabel._OBMolAngleIter_inc)
    __ref__ = _swig_new_instance_method(_openbabel._OBMolAngleIter___ref__)

# Register _OBMolAngleIter in _openbabel:
_openbabel._OBMolAngleIter_swigregister(_OBMolAngleIter)
class _OBMolTorsionIter(object):
    r"""Iterate over all torsions in an OBMol"""

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

    def __init__(self, *args):
        _openbabel._OBMolTorsionIter_swiginit(self, _openbabel.new__OBMolTorsionIter(*args))
    __swig_destroy__ = _openbabel.delete__OBMolTorsionIter

    def __nonzero__(self):
        return _openbabel._OBMolTorsionIter___nonzero__(self)
    __bool__ = __nonzero__


    inc = _swig_new_instance_method(_openbabel._OBMolTorsionIter_inc)
    __ref__ = _swig_new_instance_method(_openbabel._OBMolTorsionIter___ref__)

# Register _OBMolTorsionIter in _openbabel:
_openbabel._OBMolTorsionIter_swigregister(_OBMolTorsionIter)
class _OBMolPairIter(object):
    r"""Iterate over all pairs of atoms (>1-4) in an OBMol"""

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

    def __init__(self, *args):
        _openbabel._OBMolPairIter_swiginit(self, _openbabel.new__OBMolPairIter(*args))
    __swig_destroy__ = _openbabel.delete__OBMolPairIter

    def __nonzero__(self):
        return _openbabel._OBMolPairIter___nonzero__(self)
    __bool__ = __nonzero__


    inc = _swig_new_instance_method(_openbabel._OBMolPairIter_inc)
    __ref__ = _swig_new_instance_method(_openbabel._OBMolPairIter___ref__)

# Register _OBMolPairIter in _openbabel:
_openbabel._OBMolPairIter_swigregister(_OBMolPairIter)
class _OBMolRingIter(object):
    r"""Iterate over all rings in an OBMol"""

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

    def __init__(self, *args):
        _openbabel._OBMolRingIter_swiginit(self, _openbabel.new__OBMolRingIter(*args))
    __swig_destroy__ = _openbabel.delete__OBMolRingIter

    def __nonzero__(self):
        return _openbabel._OBMolRingIter___nonzero__(self)
    __bool__ = __nonzero__


    inc = _swig_new_instance_method(_openbabel._OBMolRingIter_inc)
    __ref__ = _swig_new_instance_method(_openbabel._OBMolRingIter___ref__)

# Register _OBMolRingIter in _openbabel:
_openbabel._OBMolRingIter_swigregister(_OBMolRingIter)
MolGetAtoms = _openbabel.MolGetAtoms
MolGetBonds = _openbabel.MolGetBonds
AtomGetBonds = _openbabel.AtomGetBonds
AtomGetNbrs = _openbabel.AtomGetNbrs

class OBIter(object):
    OBiterator = None # This is defined by the subclasses

    def __init__(self, *params):
        self.iter = self.OBiterator(*params)
        self.finished = False
        if not self.iter.__bool__():
            self.finished = True

    def __iter__(self):
        return self

    def next(self):
        if not self.finished:
            b = self.iter.__ref__()
            self.iter.inc()
            if not self.iter.__bool__():
# There is nothing left to iterate over
                self.finished = True
            return b
        else:
            raise StopIteration

    __next__ = next

class OBIterWithDepth(OBIter):
    def next(self):
        if not self.finished:
            b = self.iter.__ref__()
            depth = self.iter.CurrentDepth()
            self.iter.inc()
            if not self.iter.__bool__():
# There is nothing left to iterate over
                self.finished = True
            return b, depth
        else:
            raise StopIteration

    __next__ = next

class OBAtomAtomIter(OBIter):
    """Iterator over the atoms attached to an atom."""
    OBiterator = _OBAtomAtomIter
class OBAtomBondIter(OBIter):
    """Iterator over the bonds attached to an atom."""
    OBiterator = _OBAtomBondIter
class OBMolAngleIter(OBIter):
    """Iterator over the angles in a molecule."""
    OBiterator = _OBMolAngleIter
class OBMolAtomIter(OBIter):
    """Iterator over the atoms in a molecule."""
    OBiterator = _OBMolAtomIter
class OBMolAtomBFSIter(OBIterWithDepth):
    """Iterator over the atoms in a molecule in a breadth-first manner."""
    OBiterator = _OBMolAtomBFSIter
class OBMolAtomDFSIter(OBIter):
    """Iterator over the atoms in a molecule in a depth-first manner."""
    OBiterator = _OBMolAtomDFSIter
class OBMolBondIter(OBIter):
    """Iterator over the bonds in a molecule."""
    OBiterator = _OBMolBondIter
class OBMolPairIter(OBIter):
    """Iterator over pairs of atoms in a molecule."""
    OBiterator = _OBMolPairIter
class OBMolRingIter(OBIter):
    """Iterator over the rings in a molecule."""
    OBiterator = _OBMolRingIter
class OBMolTorsionIter(OBIter):
    """Iterator over the torsion angles in a molecule."""
    OBiterator = _OBMolTorsionIter
class OBResidueIter(OBIter):
    """Iterator over the residues in a molecule."""
    OBiterator = _OBResidueIter
class OBResidueAtomIter(OBIter):
    """Iterator over the atoms in a residue."""
    OBiterator = _OBResidueAtomIter

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

    def __init__(self, nelements):
        _openbabel.doubleArray_swiginit(self, _openbabel.new_doubleArray(nelements))
    __swig_destroy__ = _openbabel.delete_doubleArray
    __getitem__ = _swig_new_instance_method(_openbabel.doubleArray___getitem__)
    __setitem__ = _swig_new_instance_method(_openbabel.doubleArray___setitem__)
    cast = _swig_new_instance_method(_openbabel.doubleArray_cast)
    frompointer = _swig_new_static_method(_openbabel.doubleArray_frompointer)

# Register doubleArray in _openbabel:
_openbabel.doubleArray_swigregister(doubleArray)

def double_array(mylist):
    """Create a C array of doubles from a list."""
    c = doubleArray(len(mylist))
    for i,v in enumerate(mylist):
        c[i] = v
    return c


obErrorLog = cvar.obErrorLog
ttab = cvar.ttab
atomtyper = cvar.atomtyper
aromtyper = cvar.aromtyper


def exception(*args):
    raise Exception("Use OBMol.CloneData instead. OBMol.SetData is only for use from C++.")
OBMol.SetData = exception

class OBTetraNonPlanarStereo(OBStereoBase):
    r"""
    <openbabel/stereo/tetranonplanar.h>
    Base class for handling and storing non-planar stereochemistry with 4 reference atom ids.

    Image: tetranonplanar.png


    The four reference ids can be treated like a sequence of 4 numbers. Each element can
    only occur once. This means there are 4! = 24 combinations.

    These are the 24 possible combinations or permutations.

    .. code-block:: c++

        1234   2134   3124   4123
        1243   2143   3142   4132
        1324   2314   3214   4213
        1342   2341   3241   4231
        1423   2413   3412   4312
        1432   2431   3421   4321

    However, when dealing with tetrahedral stereochemistry, it is often easier
    to visualize by viewing from/towards one of the reference atoms to/from the
    center atom. This reduces the 24 possible combinations to 3! = 6.

    .. code-block:: c++

        123   321
        231   213
        312   132

    These can be devided in 2 groups: clockwise or anti-clockwise

    .. code-block:: c++

        clockwise: 123, 231, 312
        anti-clockwise: 321, 213, 132

    Since subclass ConfigType structs accept refs viewing from/towards any atom,
    it is needed to have some rules for converting.

    A single permutation of two consecutive elements in a sequence of 3
    changes the winding. All permutations can be expressed as a combination
    of consecutive permutations. The number of consecutive permutations can
    be calculated from the difference in inversions (NumInversions()).

    If we exchange the from atom with another atom in the sequence, the oddness
    of the difference in inversions between the 2 sequences is calculated. If this
    is even, no extra permutation is needed. If this is odd, an extra permutation
    is needed.

    Switching between viewing from and viewing towards reverses the winding.

    Like all stereo classes, errors, warnings or info is reported using OBMessageHandler.

    Since: version 2.3
    """

    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__ = _openbabel.delete_OBTetraNonPlanarStereo

# Register OBTetraNonPlanarStereo in _openbabel:
_openbabel.OBTetraNonPlanarStereo_swigregister(OBTetraNonPlanarStereo)
class OBTetraPlanarStereo(OBStereoBase):
    r"""
    <openbabel/stereo/tetraplanar.h>
    Base class for handling and storing planar stereochemistry with 4 reference atoms.

    Image: tetraplanar.png


    The four reference ids can be treated like a sequence of 4 numbers. Each element can
    only occur once. This means there are 4! = 24 combinations.

    These are the 24 possible combinations or permutations.

    .. code-block:: c++

        1234   2134   3124   4123
        1243   2143   3142   4132
        1324   2314   3214   4213
        1342   2341   3241   4231
        1423   2413   3412   4312
        1432   2431   3421   4321

    Based on which reference ids are on opposite sides (180 deg), it is possible
    to divide these 24 combinations in three sets. For this it is also needed
    to make use of a shape to map the reference id indexes on the points in
    the plane. Without these shapes or a fixed meaning, these sequences have
    no meaning. The use of these shapes (U, Z & 4) is illustrated in the figure
    below:
    Image: SPshapes.png

    In the figure, it can be seen the OBStereo::ShapeU implies the 1st
    reference id in the sequence is opposite to the 3th and the 2nd is opposite
    to the 4th. The same can be done for OBStereo::ShapeZ and OBStereo::Shape

    Grouped by opposite reference ids using OBStereo::Shape4

    .. code-block:: c++

        1-2, 3-4 : 1234, 1243, 2134, 2143, 3412, 3421, 4312, 4321
        1-3, 2-4 : 1324, 1242, 2413, 2431, 3124, 3142, 4213, 4231
        1-4, 2-3 : 1423, 1432, 2314, 2341, 3214, 3241, 4123, 4132

    Internally the reference ids are stored in a U shape. The OBTetraPlanarStereo::ToInternal()
    and OBTetraPlanarStereo::ToShape() methods convert between the internally used U shape
    and the other shapes.

    Like all stereo classes, errors, warnings or info is reported using OBMessageHandler.

    Notes: U shaped ordering can also be considered circular and is the only shape
    that can be rotated lexicographically.

    Since: version 2.3
    """

    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__ = _openbabel.delete_OBTetraPlanarStereo

# Register OBTetraPlanarStereo in _openbabel:
_openbabel.OBTetraPlanarStereo_swigregister(OBTetraPlanarStereo)
class OBTetrahedralStereo(OBTetraNonPlanarStereo):
    r"""
    <openbabel/stereo/tetrahedral.h>
    Class for handling and storing tetrahedral atom stereochemistry.

    The OBTetrahedralStereo class is used to represent tetrahedral atom
    stereo chemistry. Before continuing reading, it is recommeded to
    read the OBTetraNonPlanar documentation first. Since this
    class inherits OBTetraNonPlanerStereo it should be clear that the class
    stores the spacial arrangement of 4 non-planer atoms. However, for the
    tetrahedral case, one additional OBStereo::Ref is needed: the atom id for
    the center atom.

    The stereochemistry is set, retrieved and internally stored using the
    OBTetrahedralStereo::Config struct. OBTetrahedralStereo functions as a
    wrapper around the Config struct and provides functions to get a copy of
    the Config struct converted to any view direction or atom and winding
    (OBTetrahedralStereo::GetConfig).

    Image: tetrahedral.png

    Like all stereo classes, errors, warnings or info is reported using OBMessageHandler.

    See also: OBStereo OBStereoBase OBTetraNonPlanarStereo OBStereoFacade
    Since: version 2.3
    """

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

    def __init__(self, mol):
        r"""Constructor."""
        _openbabel.OBTetrahedralStereo_swiginit(self, _openbabel.new_OBTetrahedralStereo(mol))
    __swig_destroy__ = _openbabel.delete_OBTetrahedralStereo
    IsValid = _swig_new_instance_method(_openbabel.OBTetrahedralStereo_IsValid)
    __eq__ = _swig_new_instance_method(_openbabel.OBTetrahedralStereo___eq__)
    __ne__ = _swig_new_instance_method(_openbabel.OBTetrahedralStereo___ne__)
    SetConfig = _swig_new_instance_method(_openbabel.OBTetrahedralStereo_SetConfig)
    GetConfig = _swig_new_instance_method(_openbabel.OBTetrahedralStereo_GetConfig)

# Register OBTetrahedralStereo in _openbabel:
_openbabel.OBTetrahedralStereo_swigregister(OBTetrahedralStereo)
class OBCisTransStereo(OBTetraPlanarStereo):
    r"""
    <openbabel/stereo/cistrans.h>
    Class for handling and storing cis/trans stereochemistry.

    Image: cistrans.png

    The OBCisTransStereo class is used to represent cis/trans stereochemistry.
    Like all OBTetraPlanarStereo subclasses, it uses the OBStereo::Shape parameters
    to set/get the OBStereo::Ref values in the Config struct. However, since the
    orientation of the double bond matters, all methods in the "query methods"
    section check the bonding by actually checking the atoms in the molecule
    provided through OBStereoBase's constructor. If OBMol::GetAtomById(id) returns
    0 for a single id, it will be considered a deleted or implicit hydrogen if
    the valences confirm this.

    The use of OBStereo::Shape is illustarted in the image below.
    Image: SPshapes.png

    .. code-block:: c++

        //
        // 3       6        3       6
        //  \     /         |       |
        //   0===1      =   | 0   1 |
        //  /     \         |       |
        // 4       5        4-------5
        //
        OBCisTransStereo ct;
        ct.SetCenters(0, 1);
        ct.SetRefs(OBStereo::MakeRefs(3, 4, 5, 6), OBStereo::ShapeU);

        ct.IsTrans(3, 5); // true
        ct.IsTrans(3, 4); // false
        ct.IsTrans(3, 6); // false

        ct.IsCis(3, 6); // true
        ct.IsCis(3, 4); // false
        ct.IsCis(3, 5); // false

    Since: version 2.3
    """

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

    def __init__(self, mol):
        r"""
        <openbabel/stereo/cistrans.h>
        Stereochemical configuration for double-bond cis/trans stereochemistry

        The config struct represents the stereochemistry in a well defined way.
        For cis/trans stereo bonds, the following data members define the spacial
        arrengement of the atoms.

        - OBStereo::Ref ``begin``: The begin atom for the double bond.
        - OBStereo::Ref ``end``: The end atom for the double bond.
        - OBStereo::Refs ``refs``: The 4 atoms connected to the double bond.
        - OBStereo::Shape ``shape``: The shape formed by the ``refs`` by connecting them
          in the same order as they occur in ``refs``.

        Image: cistrans.png
        Image: SPshapes.png

        Only ``begin`` and ``end`` are specific for OBCisTransStereo::Config. The other
        data members occur in all OBTetraPlanarStereo derived classes.

        Constructor.
        """
        _openbabel.OBCisTransStereo_swiginit(self, _openbabel.new_OBCisTransStereo(mol))
    __swig_destroy__ = _openbabel.delete_OBCisTransStereo
    IsValid = _swig_new_instance_method(_openbabel.OBCisTransStereo_IsValid)
    __eq__ = _swig_new_instance_method(_openbabel.OBCisTransStereo___eq__)
    __ne__ = _swig_new_instance_method(_openbabel.OBCisTransStereo___ne__)
    IsOnSameAtom = _swig_new_instance_method(_openbabel.OBCisTransStereo_IsOnSameAtom)
    IsTrans = _swig_new_instance_method(_openbabel.OBCisTransStereo_IsTrans)
    IsCis = _swig_new_instance_method(_openbabel.OBCisTransStereo_IsCis)
    GetTransRef = _swig_new_instance_method(_openbabel.OBCisTransStereo_GetTransRef)
    GetCisRef = _swig_new_instance_method(_openbabel.OBCisTransStereo_GetCisRef)
    SetConfig = _swig_new_instance_method(_openbabel.OBCisTransStereo_SetConfig)
    GetConfig = _swig_new_instance_method(_openbabel.OBCisTransStereo_GetConfig)

# Register OBCisTransStereo in _openbabel:
_openbabel.OBCisTransStereo_swigregister(OBCisTransStereo)
class OBSquarePlanarStereo(OBTetraPlanarStereo):
    r"""
    <openbabel/stereo/squareplanar.h>
    Class for handling and storing square planar stereochemistry.

    Image: squareplanar.png

    The OBSquarePlanarStereo class is used to represent square planar stereochemistry.
    Like all OBTetraPlanarStereo subclasses, it uses the OBStereo::Shape parameters
    to set/get the reference ids.

    This class works with reference ids only, it never uses the molecule
    to get more information. Like all stereo classes, errors,
    warnings or info is reported using OBMessageHandler.
    """

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

    def __init__(self, mol):
        r"""
        <openbabel/stereo/squareplanar.h>
        Stereochemical configuration for square planar stereocenters

        The config struct represents the stereochemistry in a well defined way.
        For squareplanar stereocenters, the following data members define the spacial
        arrengement of the atoms.

        - OBStereo::Ref ``center``: The central atom.
        - OBStereo::Refs ``refs``: The 4 atoms connected to the double bond.
        - OBStereo::Shape ``shape``: The shape formed by the ``refs`` by connecting them
          in the same order as they occur in ``refs``.

        Image: squareplanar.png
        Image: SPshapes.png

        Only ``center`` are specific for OBSquarePlanarStereo::Config. The other
        data members occur in all OBTetraPlanarStereo derived classes.

        Constructor.
        """
        _openbabel.OBSquarePlanarStereo_swiginit(self, _openbabel.new_OBSquarePlanarStereo(mol))
    __swig_destroy__ = _openbabel.delete_OBSquarePlanarStereo
    IsValid = _swig_new_instance_method(_openbabel.OBSquarePlanarStereo_IsValid)
    __eq__ = _swig_new_instance_method(_openbabel.OBSquarePlanarStereo___eq__)
    __ne__ = _swig_new_instance_method(_openbabel.OBSquarePlanarStereo___ne__)
    IsTrans = _swig_new_instance_method(_openbabel.OBSquarePlanarStereo_IsTrans)
    IsCis = _swig_new_instance_method(_openbabel.OBSquarePlanarStereo_IsCis)
    GetTransRef = _swig_new_instance_method(_openbabel.OBSquarePlanarStereo_GetTransRef)
    GetCisRefs = _swig_new_instance_method(_openbabel.OBSquarePlanarStereo_GetCisRefs)
    SetConfig = _swig_new_instance_method(_openbabel.OBSquarePlanarStereo_SetConfig)
    GetConfig = _swig_new_instance_method(_openbabel.OBSquarePlanarStereo_GetConfig)

# Register OBSquarePlanarStereo in _openbabel:
_openbabel.OBSquarePlanarStereo_swigregister(OBSquarePlanarStereo)
class OBTetrahedralConfig(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    __eq__ = _swig_new_instance_method(_openbabel.OBTetrahedralConfig___eq__)
    __ne__ = _swig_new_instance_method(_openbabel.OBTetrahedralConfig___ne__)
    center = property(_openbabel.OBTetrahedralConfig_center_get, _openbabel.OBTetrahedralConfig_center_set)
    from_or_towards = property(_openbabel.OBTetrahedralConfig_from_or_towards_get, _openbabel.OBTetrahedralConfig_from_or_towards_set)
    refs = property(_openbabel.OBTetrahedralConfig_refs_get, _openbabel.OBTetrahedralConfig_refs_set)
    winding = property(_openbabel.OBTetrahedralConfig_winding_get, _openbabel.OBTetrahedralConfig_winding_set)
    view = property(_openbabel.OBTetrahedralConfig_view_get, _openbabel.OBTetrahedralConfig_view_set)
    specified = property(_openbabel.OBTetrahedralConfig_specified_get, _openbabel.OBTetrahedralConfig_specified_set)

    def __init__(self):
        _openbabel.OBTetrahedralConfig_swiginit(self, _openbabel.new_OBTetrahedralConfig())
    __swig_destroy__ = _openbabel.delete_OBTetrahedralConfig

# Register OBTetrahedralConfig in _openbabel:
_openbabel.OBTetrahedralConfig_swigregister(OBTetrahedralConfig)
class OBCisTransConfig(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    __eq__ = _swig_new_instance_method(_openbabel.OBCisTransConfig___eq__)
    __ne__ = _swig_new_instance_method(_openbabel.OBCisTransConfig___ne__)
    begin = property(_openbabel.OBCisTransConfig_begin_get, _openbabel.OBCisTransConfig_begin_set)
    end = property(_openbabel.OBCisTransConfig_end_get, _openbabel.OBCisTransConfig_end_set)
    refs = property(_openbabel.OBCisTransConfig_refs_get, _openbabel.OBCisTransConfig_refs_set)
    shape = property(_openbabel.OBCisTransConfig_shape_get, _openbabel.OBCisTransConfig_shape_set)
    specified = property(_openbabel.OBCisTransConfig_specified_get, _openbabel.OBCisTransConfig_specified_set)

    def __init__(self):
        _openbabel.OBCisTransConfig_swiginit(self, _openbabel.new_OBCisTransConfig())
    __swig_destroy__ = _openbabel.delete_OBCisTransConfig

# Register OBCisTransConfig in _openbabel:
_openbabel.OBCisTransConfig_swigregister(OBCisTransConfig)
class OBSquarePlanarConfig(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    __eq__ = _swig_new_instance_method(_openbabel.OBSquarePlanarConfig___eq__)
    __ne__ = _swig_new_instance_method(_openbabel.OBSquarePlanarConfig___ne__)
    center = property(_openbabel.OBSquarePlanarConfig_center_get, _openbabel.OBSquarePlanarConfig_center_set)
    refs = property(_openbabel.OBSquarePlanarConfig_refs_get, _openbabel.OBSquarePlanarConfig_refs_set)
    shape = property(_openbabel.OBSquarePlanarConfig_shape_get, _openbabel.OBSquarePlanarConfig_shape_set)
    specified = property(_openbabel.OBSquarePlanarConfig_specified_get, _openbabel.OBSquarePlanarConfig_specified_set)

    def __init__(self):
        _openbabel.OBSquarePlanarConfig_swiginit(self, _openbabel.new_OBSquarePlanarConfig())
    __swig_destroy__ = _openbabel.delete_OBSquarePlanarConfig

# Register OBSquarePlanarConfig in _openbabel:
_openbabel.OBSquarePlanarConfig_swigregister(OBSquarePlanarConfig)

