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

from sys import version_info as _swig_python_version_info
# Import the low-level C/C++ module
if __package__ or "." in __name__:
    from . import _Cdi
else:
    import _Cdi

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

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


def _swig_setattr_nondynamic_instance_variable(set):
    def set_instance_attr(self, name, value):
        if name == "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__)


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__ = _Cdi.delete_SwigPyIterator

    def value(self):
        return _Cdi.SwigPyIterator_value(self)

    def incr(self, n=1):
        return _Cdi.SwigPyIterator_incr(self, n)

    def decr(self, n=1):
        return _Cdi.SwigPyIterator_decr(self, n)

    def distance(self, x):
        return _Cdi.SwigPyIterator_distance(self, x)

    def equal(self, x):
        return _Cdi.SwigPyIterator_equal(self, x)

    def copy(self):
        return _Cdi.SwigPyIterator_copy(self)

    def next(self):
        return _Cdi.SwigPyIterator_next(self)

    def __next__(self):
        return _Cdi.SwigPyIterator___next__(self)

    def previous(self):
        return _Cdi.SwigPyIterator_previous(self)

    def advance(self, n):
        return _Cdi.SwigPyIterator_advance(self, n)

    def __eq__(self, x):
        return _Cdi.SwigPyIterator___eq__(self, x)

    def __ne__(self, x):
        return _Cdi.SwigPyIterator___ne__(self, x)

    def __iadd__(self, n):
        return _Cdi.SwigPyIterator___iadd__(self, n)

    def __isub__(self, n):
        return _Cdi.SwigPyIterator___isub__(self, n)

    def __add__(self, n):
        return _Cdi.SwigPyIterator___add__(self, n)

    def __sub__(self, *args):
        return _Cdi.SwigPyIterator___sub__(self, *args)
    def __iter__(self):
        return self

# Register SwigPyIterator in _Cdi:
_Cdi.SwigPyIterator_swigregister(SwigPyIterator)
class IntVector(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

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

    def __nonzero__(self):
        return _Cdi.IntVector___nonzero__(self)

    def __bool__(self):
        return _Cdi.IntVector___bool__(self)

    def __len__(self):
        return _Cdi.IntVector___len__(self)

    def __getslice__(self, i, j):
        return _Cdi.IntVector___getslice__(self, i, j)

    def __setslice__(self, *args):
        return _Cdi.IntVector___setslice__(self, *args)

    def __delslice__(self, i, j):
        return _Cdi.IntVector___delslice__(self, i, j)

    def __delitem__(self, *args):
        return _Cdi.IntVector___delitem__(self, *args)

    def __getitem__(self, *args):
        return _Cdi.IntVector___getitem__(self, *args)

    def __setitem__(self, *args):
        return _Cdi.IntVector___setitem__(self, *args)

    def pop(self):
        return _Cdi.IntVector_pop(self)

    def append(self, x):
        return _Cdi.IntVector_append(self, x)

    def empty(self):
        return _Cdi.IntVector_empty(self)

    def size(self):
        return _Cdi.IntVector_size(self)

    def swap(self, v):
        return _Cdi.IntVector_swap(self, v)

    def begin(self):
        return _Cdi.IntVector_begin(self)

    def end(self):
        return _Cdi.IntVector_end(self)

    def rbegin(self):
        return _Cdi.IntVector_rbegin(self)

    def rend(self):
        return _Cdi.IntVector_rend(self)

    def clear(self):
        return _Cdi.IntVector_clear(self)

    def get_allocator(self):
        return _Cdi.IntVector_get_allocator(self)

    def pop_back(self):
        return _Cdi.IntVector_pop_back(self)

    def erase(self, *args):
        return _Cdi.IntVector_erase(self, *args)

    def __init__(self, *args):
        _Cdi.IntVector_swiginit(self, _Cdi.new_IntVector(*args))

    def push_back(self, x):
        return _Cdi.IntVector_push_back(self, x)

    def front(self):
        return _Cdi.IntVector_front(self)

    def back(self):
        return _Cdi.IntVector_back(self)

    def assign(self, n, x):
        return _Cdi.IntVector_assign(self, n, x)

    def resize(self, *args):
        return _Cdi.IntVector_resize(self, *args)

    def insert(self, *args):
        return _Cdi.IntVector_insert(self, *args)

    def reserve(self, n):
        return _Cdi.IntVector_reserve(self, n)

    def capacity(self):
        return _Cdi.IntVector_capacity(self)
    __swig_destroy__ = _Cdi.delete_IntVector

# Register IntVector in _Cdi:
_Cdi.IntVector_swigregister(IntVector)
class DoubleVector(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

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

    def __nonzero__(self):
        return _Cdi.DoubleVector___nonzero__(self)

    def __bool__(self):
        return _Cdi.DoubleVector___bool__(self)

    def __len__(self):
        return _Cdi.DoubleVector___len__(self)

    def __getslice__(self, i, j):
        return _Cdi.DoubleVector___getslice__(self, i, j)

    def __setslice__(self, *args):
        return _Cdi.DoubleVector___setslice__(self, *args)

    def __delslice__(self, i, j):
        return _Cdi.DoubleVector___delslice__(self, i, j)

    def __delitem__(self, *args):
        return _Cdi.DoubleVector___delitem__(self, *args)

    def __getitem__(self, *args):
        return _Cdi.DoubleVector___getitem__(self, *args)

    def __setitem__(self, *args):
        return _Cdi.DoubleVector___setitem__(self, *args)

    def pop(self):
        return _Cdi.DoubleVector_pop(self)

    def append(self, x):
        return _Cdi.DoubleVector_append(self, x)

    def empty(self):
        return _Cdi.DoubleVector_empty(self)

    def size(self):
        return _Cdi.DoubleVector_size(self)

    def swap(self, v):
        return _Cdi.DoubleVector_swap(self, v)

    def begin(self):
        return _Cdi.DoubleVector_begin(self)

    def end(self):
        return _Cdi.DoubleVector_end(self)

    def rbegin(self):
        return _Cdi.DoubleVector_rbegin(self)

    def rend(self):
        return _Cdi.DoubleVector_rend(self)

    def clear(self):
        return _Cdi.DoubleVector_clear(self)

    def get_allocator(self):
        return _Cdi.DoubleVector_get_allocator(self)

    def pop_back(self):
        return _Cdi.DoubleVector_pop_back(self)

    def erase(self, *args):
        return _Cdi.DoubleVector_erase(self, *args)

    def __init__(self, *args):
        _Cdi.DoubleVector_swiginit(self, _Cdi.new_DoubleVector(*args))

    def push_back(self, x):
        return _Cdi.DoubleVector_push_back(self, x)

    def front(self):
        return _Cdi.DoubleVector_front(self)

    def back(self):
        return _Cdi.DoubleVector_back(self)

    def assign(self, n, x):
        return _Cdi.DoubleVector_assign(self, n, x)

    def resize(self, *args):
        return _Cdi.DoubleVector_resize(self, *args)

    def insert(self, *args):
        return _Cdi.DoubleVector_insert(self, *args)

    def reserve(self, n):
        return _Cdi.DoubleVector_reserve(self, n)

    def capacity(self):
        return _Cdi.DoubleVector_capacity(self)
    __swig_destroy__ = _Cdi.delete_DoubleVector

# Register DoubleVector in _Cdi:
_Cdi.DoubleVector_swigregister(DoubleVector)
class DoubleDoubleVector(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

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

    def __nonzero__(self):
        return _Cdi.DoubleDoubleVector___nonzero__(self)

    def __bool__(self):
        return _Cdi.DoubleDoubleVector___bool__(self)

    def __len__(self):
        return _Cdi.DoubleDoubleVector___len__(self)

    def __getslice__(self, i, j):
        return _Cdi.DoubleDoubleVector___getslice__(self, i, j)

    def __setslice__(self, *args):
        return _Cdi.DoubleDoubleVector___setslice__(self, *args)

    def __delslice__(self, i, j):
        return _Cdi.DoubleDoubleVector___delslice__(self, i, j)

    def __delitem__(self, *args):
        return _Cdi.DoubleDoubleVector___delitem__(self, *args)

    def __getitem__(self, *args):
        return _Cdi.DoubleDoubleVector___getitem__(self, *args)

    def __setitem__(self, *args):
        return _Cdi.DoubleDoubleVector___setitem__(self, *args)

    def pop(self):
        return _Cdi.DoubleDoubleVector_pop(self)

    def append(self, x):
        return _Cdi.DoubleDoubleVector_append(self, x)

    def empty(self):
        return _Cdi.DoubleDoubleVector_empty(self)

    def size(self):
        return _Cdi.DoubleDoubleVector_size(self)

    def swap(self, v):
        return _Cdi.DoubleDoubleVector_swap(self, v)

    def begin(self):
        return _Cdi.DoubleDoubleVector_begin(self)

    def end(self):
        return _Cdi.DoubleDoubleVector_end(self)

    def rbegin(self):
        return _Cdi.DoubleDoubleVector_rbegin(self)

    def rend(self):
        return _Cdi.DoubleDoubleVector_rend(self)

    def clear(self):
        return _Cdi.DoubleDoubleVector_clear(self)

    def get_allocator(self):
        return _Cdi.DoubleDoubleVector_get_allocator(self)

    def pop_back(self):
        return _Cdi.DoubleDoubleVector_pop_back(self)

    def erase(self, *args):
        return _Cdi.DoubleDoubleVector_erase(self, *args)

    def __init__(self, *args):
        _Cdi.DoubleDoubleVector_swiginit(self, _Cdi.new_DoubleDoubleVector(*args))

    def push_back(self, x):
        return _Cdi.DoubleDoubleVector_push_back(self, x)

    def front(self):
        return _Cdi.DoubleDoubleVector_front(self)

    def back(self):
        return _Cdi.DoubleDoubleVector_back(self)

    def assign(self, n, x):
        return _Cdi.DoubleDoubleVector_assign(self, n, x)

    def resize(self, *args):
        return _Cdi.DoubleDoubleVector_resize(self, *args)

    def insert(self, *args):
        return _Cdi.DoubleDoubleVector_insert(self, *args)

    def reserve(self, n):
        return _Cdi.DoubleDoubleVector_reserve(self, n)

    def capacity(self):
        return _Cdi.DoubleDoubleVector_capacity(self)
    __swig_destroy__ = _Cdi.delete_DoubleDoubleVector

# Register DoubleDoubleVector in _Cdi:
_Cdi.DoubleDoubleVector_swigregister(DoubleDoubleVector)
class StringVector(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

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

    def __nonzero__(self):
        return _Cdi.StringVector___nonzero__(self)

    def __bool__(self):
        return _Cdi.StringVector___bool__(self)

    def __len__(self):
        return _Cdi.StringVector___len__(self)

    def __getslice__(self, i, j):
        return _Cdi.StringVector___getslice__(self, i, j)

    def __setslice__(self, *args):
        return _Cdi.StringVector___setslice__(self, *args)

    def __delslice__(self, i, j):
        return _Cdi.StringVector___delslice__(self, i, j)

    def __delitem__(self, *args):
        return _Cdi.StringVector___delitem__(self, *args)

    def __getitem__(self, *args):
        return _Cdi.StringVector___getitem__(self, *args)

    def __setitem__(self, *args):
        return _Cdi.StringVector___setitem__(self, *args)

    def pop(self):
        return _Cdi.StringVector_pop(self)

    def append(self, x):
        return _Cdi.StringVector_append(self, x)

    def empty(self):
        return _Cdi.StringVector_empty(self)

    def size(self):
        return _Cdi.StringVector_size(self)

    def swap(self, v):
        return _Cdi.StringVector_swap(self, v)

    def begin(self):
        return _Cdi.StringVector_begin(self)

    def end(self):
        return _Cdi.StringVector_end(self)

    def rbegin(self):
        return _Cdi.StringVector_rbegin(self)

    def rend(self):
        return _Cdi.StringVector_rend(self)

    def clear(self):
        return _Cdi.StringVector_clear(self)

    def get_allocator(self):
        return _Cdi.StringVector_get_allocator(self)

    def pop_back(self):
        return _Cdi.StringVector_pop_back(self)

    def erase(self, *args):
        return _Cdi.StringVector_erase(self, *args)

    def __init__(self, *args):
        _Cdi.StringVector_swiginit(self, _Cdi.new_StringVector(*args))

    def push_back(self, x):
        return _Cdi.StringVector_push_back(self, x)

    def front(self):
        return _Cdi.StringVector_front(self)

    def back(self):
        return _Cdi.StringVector_back(self)

    def assign(self, n, x):
        return _Cdi.StringVector_assign(self, n, x)

    def resize(self, *args):
        return _Cdi.StringVector_resize(self, *args)

    def insert(self, *args):
        return _Cdi.StringVector_insert(self, *args)

    def reserve(self, n):
        return _Cdi.StringVector_reserve(self, n)

    def capacity(self):
        return _Cdi.StringVector_capacity(self)
    __swig_destroy__ = _Cdi.delete_StringVector

# Register StringVector in _Cdi:
_Cdi.StringVector_swigregister(StringVector)
class VarsVector(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

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

    def __nonzero__(self):
        return _Cdi.VarsVector___nonzero__(self)

    def __bool__(self):
        return _Cdi.VarsVector___bool__(self)

    def __len__(self):
        return _Cdi.VarsVector___len__(self)

    def __getslice__(self, i, j):
        return _Cdi.VarsVector___getslice__(self, i, j)

    def __setslice__(self, *args):
        return _Cdi.VarsVector___setslice__(self, *args)

    def __delslice__(self, i, j):
        return _Cdi.VarsVector___delslice__(self, i, j)

    def __delitem__(self, *args):
        return _Cdi.VarsVector___delitem__(self, *args)

    def __getitem__(self, *args):
        return _Cdi.VarsVector___getitem__(self, *args)

    def __setitem__(self, *args):
        return _Cdi.VarsVector___setitem__(self, *args)

    def pop(self):
        return _Cdi.VarsVector_pop(self)

    def append(self, x):
        return _Cdi.VarsVector_append(self, x)

    def empty(self):
        return _Cdi.VarsVector_empty(self)

    def size(self):
        return _Cdi.VarsVector_size(self)

    def swap(self, v):
        return _Cdi.VarsVector_swap(self, v)

    def begin(self):
        return _Cdi.VarsVector_begin(self)

    def end(self):
        return _Cdi.VarsVector_end(self)

    def rbegin(self):
        return _Cdi.VarsVector_rbegin(self)

    def rend(self):
        return _Cdi.VarsVector_rend(self)

    def clear(self):
        return _Cdi.VarsVector_clear(self)

    def get_allocator(self):
        return _Cdi.VarsVector_get_allocator(self)

    def pop_back(self):
        return _Cdi.VarsVector_pop_back(self)

    def erase(self, *args):
        return _Cdi.VarsVector_erase(self, *args)

    def __init__(self, *args):
        _Cdi.VarsVector_swiginit(self, _Cdi.new_VarsVector(*args))

    def push_back(self, x):
        return _Cdi.VarsVector_push_back(self, x)

    def front(self):
        return _Cdi.VarsVector_front(self)

    def back(self):
        return _Cdi.VarsVector_back(self)

    def assign(self, n, x):
        return _Cdi.VarsVector_assign(self, n, x)

    def resize(self, *args):
        return _Cdi.VarsVector_resize(self, *args)

    def insert(self, *args):
        return _Cdi.VarsVector_insert(self, *args)

    def reserve(self, n):
        return _Cdi.VarsVector_reserve(self, n)

    def capacity(self):
        return _Cdi.VarsVector_capacity(self)
    __swig_destroy__ = _Cdi.delete_VarsVector

# Register VarsVector in _Cdi:
_Cdi.VarsVector_swigregister(VarsVector)
class VarsMap(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

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

    def __nonzero__(self):
        return _Cdi.VarsMap___nonzero__(self)

    def __bool__(self):
        return _Cdi.VarsMap___bool__(self)

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

    def __getitem__(self, key):
        return _Cdi.VarsMap___getitem__(self, key)

    def __delitem__(self, key):
        return _Cdi.VarsMap___delitem__(self, key)

    def has_key(self, key):
        return _Cdi.VarsMap_has_key(self, key)

    def keys(self):
        return _Cdi.VarsMap_keys(self)

    def values(self):
        return _Cdi.VarsMap_values(self)

    def items(self):
        return _Cdi.VarsMap_items(self)

    def __contains__(self, key):
        return _Cdi.VarsMap___contains__(self, key)

    def key_iterator(self):
        return _Cdi.VarsMap_key_iterator(self)

    def value_iterator(self):
        return _Cdi.VarsMap_value_iterator(self)

    def __setitem__(self, *args):
        return _Cdi.VarsMap___setitem__(self, *args)

    def asdict(self):
        return _Cdi.VarsMap_asdict(self)

    def __init__(self, *args):
        _Cdi.VarsMap_swiginit(self, _Cdi.new_VarsMap(*args))

    def empty(self):
        return _Cdi.VarsMap_empty(self)

    def size(self):
        return _Cdi.VarsMap_size(self)

    def swap(self, v):
        return _Cdi.VarsMap_swap(self, v)

    def begin(self):
        return _Cdi.VarsMap_begin(self)

    def end(self):
        return _Cdi.VarsMap_end(self)

    def rbegin(self):
        return _Cdi.VarsMap_rbegin(self)

    def rend(self):
        return _Cdi.VarsMap_rend(self)

    def clear(self):
        return _Cdi.VarsMap_clear(self)

    def get_allocator(self):
        return _Cdi.VarsMap_get_allocator(self)

    def count(self, x):
        return _Cdi.VarsMap_count(self, x)

    def erase(self, *args):
        return _Cdi.VarsMap_erase(self, *args)

    def find(self, x):
        return _Cdi.VarsMap_find(self, x)

    def lower_bound(self, x):
        return _Cdi.VarsMap_lower_bound(self, x)

    def upper_bound(self, x):
        return _Cdi.VarsMap_upper_bound(self, x)
    __swig_destroy__ = _Cdi.delete_VarsMap

# Register VarsMap in _Cdi:
_Cdi.VarsMap_swigregister(VarsMap)
class VarsByCode(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

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

    def __nonzero__(self):
        return _Cdi.VarsByCode___nonzero__(self)

    def __bool__(self):
        return _Cdi.VarsByCode___bool__(self)

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

    def __getitem__(self, key):
        return _Cdi.VarsByCode___getitem__(self, key)

    def __delitem__(self, key):
        return _Cdi.VarsByCode___delitem__(self, key)

    def has_key(self, key):
        return _Cdi.VarsByCode_has_key(self, key)

    def keys(self):
        return _Cdi.VarsByCode_keys(self)

    def values(self):
        return _Cdi.VarsByCode_values(self)

    def items(self):
        return _Cdi.VarsByCode_items(self)

    def __contains__(self, key):
        return _Cdi.VarsByCode___contains__(self, key)

    def key_iterator(self):
        return _Cdi.VarsByCode_key_iterator(self)

    def value_iterator(self):
        return _Cdi.VarsByCode_value_iterator(self)

    def __setitem__(self, *args):
        return _Cdi.VarsByCode___setitem__(self, *args)

    def asdict(self):
        return _Cdi.VarsByCode_asdict(self)

    def __init__(self, *args):
        _Cdi.VarsByCode_swiginit(self, _Cdi.new_VarsByCode(*args))

    def empty(self):
        return _Cdi.VarsByCode_empty(self)

    def size(self):
        return _Cdi.VarsByCode_size(self)

    def swap(self, v):
        return _Cdi.VarsByCode_swap(self, v)

    def begin(self):
        return _Cdi.VarsByCode_begin(self)

    def end(self):
        return _Cdi.VarsByCode_end(self)

    def rbegin(self):
        return _Cdi.VarsByCode_rbegin(self)

    def rend(self):
        return _Cdi.VarsByCode_rend(self)

    def clear(self):
        return _Cdi.VarsByCode_clear(self)

    def get_allocator(self):
        return _Cdi.VarsByCode_get_allocator(self)

    def count(self, x):
        return _Cdi.VarsByCode_count(self, x)

    def erase(self, *args):
        return _Cdi.VarsByCode_erase(self, *args)

    def find(self, x):
        return _Cdi.VarsByCode_find(self, x)

    def lower_bound(self, x):
        return _Cdi.VarsByCode_lower_bound(self, x)

    def upper_bound(self, x):
        return _Cdi.VarsByCode_upper_bound(self, x)
    __swig_destroy__ = _Cdi.delete_VarsByCode

# Register VarsByCode in _Cdi:
_Cdi.VarsByCode_swigregister(VarsByCode)
class TaxesMap(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

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

    def __nonzero__(self):
        return _Cdi.TaxesMap___nonzero__(self)

    def __bool__(self):
        return _Cdi.TaxesMap___bool__(self)

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

    def __getitem__(self, key):
        return _Cdi.TaxesMap___getitem__(self, key)

    def __delitem__(self, key):
        return _Cdi.TaxesMap___delitem__(self, key)

    def has_key(self, key):
        return _Cdi.TaxesMap_has_key(self, key)

    def keys(self):
        return _Cdi.TaxesMap_keys(self)

    def values(self):
        return _Cdi.TaxesMap_values(self)

    def items(self):
        return _Cdi.TaxesMap_items(self)

    def __contains__(self, key):
        return _Cdi.TaxesMap___contains__(self, key)

    def key_iterator(self):
        return _Cdi.TaxesMap_key_iterator(self)

    def value_iterator(self):
        return _Cdi.TaxesMap_value_iterator(self)

    def __setitem__(self, *args):
        return _Cdi.TaxesMap___setitem__(self, *args)

    def asdict(self):
        return _Cdi.TaxesMap_asdict(self)

    def __init__(self, *args):
        _Cdi.TaxesMap_swiginit(self, _Cdi.new_TaxesMap(*args))

    def empty(self):
        return _Cdi.TaxesMap_empty(self)

    def size(self):
        return _Cdi.TaxesMap_size(self)

    def swap(self, v):
        return _Cdi.TaxesMap_swap(self, v)

    def begin(self):
        return _Cdi.TaxesMap_begin(self)

    def end(self):
        return _Cdi.TaxesMap_end(self)

    def rbegin(self):
        return _Cdi.TaxesMap_rbegin(self)

    def rend(self):
        return _Cdi.TaxesMap_rend(self)

    def clear(self):
        return _Cdi.TaxesMap_clear(self)

    def get_allocator(self):
        return _Cdi.TaxesMap_get_allocator(self)

    def count(self, x):
        return _Cdi.TaxesMap_count(self, x)

    def erase(self, *args):
        return _Cdi.TaxesMap_erase(self, *args)

    def find(self, x):
        return _Cdi.TaxesMap_find(self, x)

    def lower_bound(self, x):
        return _Cdi.TaxesMap_lower_bound(self, x)

    def upper_bound(self, x):
        return _Cdi.TaxesMap_upper_bound(self, x)
    __swig_destroy__ = _Cdi.delete_TaxesMap

# Register TaxesMap in _Cdi:
_Cdi.TaxesMap_swigregister(TaxesMap)
class ZaxesMap(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

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

    def __nonzero__(self):
        return _Cdi.ZaxesMap___nonzero__(self)

    def __bool__(self):
        return _Cdi.ZaxesMap___bool__(self)

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

    def __getitem__(self, key):
        return _Cdi.ZaxesMap___getitem__(self, key)

    def __delitem__(self, key):
        return _Cdi.ZaxesMap___delitem__(self, key)

    def has_key(self, key):
        return _Cdi.ZaxesMap_has_key(self, key)

    def keys(self):
        return _Cdi.ZaxesMap_keys(self)

    def values(self):
        return _Cdi.ZaxesMap_values(self)

    def items(self):
        return _Cdi.ZaxesMap_items(self)

    def __contains__(self, key):
        return _Cdi.ZaxesMap___contains__(self, key)

    def key_iterator(self):
        return _Cdi.ZaxesMap_key_iterator(self)

    def value_iterator(self):
        return _Cdi.ZaxesMap_value_iterator(self)

    def __setitem__(self, *args):
        return _Cdi.ZaxesMap___setitem__(self, *args)

    def asdict(self):
        return _Cdi.ZaxesMap_asdict(self)

    def __init__(self, *args):
        _Cdi.ZaxesMap_swiginit(self, _Cdi.new_ZaxesMap(*args))

    def empty(self):
        return _Cdi.ZaxesMap_empty(self)

    def size(self):
        return _Cdi.ZaxesMap_size(self)

    def swap(self, v):
        return _Cdi.ZaxesMap_swap(self, v)

    def begin(self):
        return _Cdi.ZaxesMap_begin(self)

    def end(self):
        return _Cdi.ZaxesMap_end(self)

    def rbegin(self):
        return _Cdi.ZaxesMap_rbegin(self)

    def rend(self):
        return _Cdi.ZaxesMap_rend(self)

    def clear(self):
        return _Cdi.ZaxesMap_clear(self)

    def get_allocator(self):
        return _Cdi.ZaxesMap_get_allocator(self)

    def count(self, x):
        return _Cdi.ZaxesMap_count(self, x)

    def erase(self, *args):
        return _Cdi.ZaxesMap_erase(self, *args)

    def find(self, x):
        return _Cdi.ZaxesMap_find(self, x)

    def lower_bound(self, x):
        return _Cdi.ZaxesMap_lower_bound(self, x)

    def upper_bound(self, x):
        return _Cdi.ZaxesMap_upper_bound(self, x)
    __swig_destroy__ = _Cdi.delete_ZaxesMap

# Register ZaxesMap in _Cdi:
_Cdi.ZaxesMap_swigregister(ZaxesMap)
class GridsMap(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

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

    def __nonzero__(self):
        return _Cdi.GridsMap___nonzero__(self)

    def __bool__(self):
        return _Cdi.GridsMap___bool__(self)

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

    def __getitem__(self, key):
        return _Cdi.GridsMap___getitem__(self, key)

    def __delitem__(self, key):
        return _Cdi.GridsMap___delitem__(self, key)

    def has_key(self, key):
        return _Cdi.GridsMap_has_key(self, key)

    def keys(self):
        return _Cdi.GridsMap_keys(self)

    def values(self):
        return _Cdi.GridsMap_values(self)

    def items(self):
        return _Cdi.GridsMap_items(self)

    def __contains__(self, key):
        return _Cdi.GridsMap___contains__(self, key)

    def key_iterator(self):
        return _Cdi.GridsMap_key_iterator(self)

    def value_iterator(self):
        return _Cdi.GridsMap_value_iterator(self)

    def __setitem__(self, *args):
        return _Cdi.GridsMap___setitem__(self, *args)

    def asdict(self):
        return _Cdi.GridsMap_asdict(self)

    def __init__(self, *args):
        _Cdi.GridsMap_swiginit(self, _Cdi.new_GridsMap(*args))

    def empty(self):
        return _Cdi.GridsMap_empty(self)

    def size(self):
        return _Cdi.GridsMap_size(self)

    def swap(self, v):
        return _Cdi.GridsMap_swap(self, v)

    def begin(self):
        return _Cdi.GridsMap_begin(self)

    def end(self):
        return _Cdi.GridsMap_end(self)

    def rbegin(self):
        return _Cdi.GridsMap_rbegin(self)

    def rend(self):
        return _Cdi.GridsMap_rend(self)

    def clear(self):
        return _Cdi.GridsMap_clear(self)

    def get_allocator(self):
        return _Cdi.GridsMap_get_allocator(self)

    def count(self, x):
        return _Cdi.GridsMap_count(self, x)

    def erase(self, *args):
        return _Cdi.GridsMap_erase(self, *args)

    def find(self, x):
        return _Cdi.GridsMap_find(self, x)

    def lower_bound(self, x):
        return _Cdi.GridsMap_lower_bound(self, x)

    def upper_bound(self, x):
        return _Cdi.GridsMap_upper_bound(self, x)
    __swig_destroy__ = _Cdi.delete_GridsMap

# Register GridsMap in _Cdi:
_Cdi.GridsMap_swigregister(GridsMap)
class CdiGrid(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):
        _Cdi.CdiGrid_swiginit(self, _Cdi.new_CdiGrid(*args))
    __swig_destroy__ = _Cdi.delete_CdiGrid
    gridID = property(_Cdi.CdiGrid_gridID_get, _Cdi.CdiGrid_gridID_set)
    type = property(_Cdi.CdiGrid_type_get, _Cdi.CdiGrid_type_set)
    size = property(_Cdi.CdiGrid_size_get, _Cdi.CdiGrid_size_set)
    xsize = property(_Cdi.CdiGrid_xsize_get, _Cdi.CdiGrid_xsize_set)
    ysize = property(_Cdi.CdiGrid_ysize_get, _Cdi.CdiGrid_ysize_set)
    prec = property(_Cdi.CdiGrid_prec_get, _Cdi.CdiGrid_prec_set)
    ncorner = property(_Cdi.CdiGrid_ncorner_get, _Cdi.CdiGrid_ncorner_set)
    hasXValues = property(_Cdi.CdiGrid_hasXValues_get, _Cdi.CdiGrid_hasXValues_set)
    hasYValues = property(_Cdi.CdiGrid_hasYValues_get, _Cdi.CdiGrid_hasYValues_set)
    hasBounds = property(_Cdi.CdiGrid_hasBounds_get, _Cdi.CdiGrid_hasBounds_set)
    xvalues = property(_Cdi.CdiGrid_xvalues_get, _Cdi.CdiGrid_xvalues_set)
    yvalues = property(_Cdi.CdiGrid_yvalues_get, _Cdi.CdiGrid_yvalues_set)
    xbounds = property(_Cdi.CdiGrid_xbounds_get, _Cdi.CdiGrid_xbounds_set)
    ybounds = property(_Cdi.CdiGrid_ybounds_get, _Cdi.CdiGrid_ybounds_set)
    xname = property(_Cdi.CdiGrid_xname_get, _Cdi.CdiGrid_xname_set)
    xlongname = property(_Cdi.CdiGrid_xlongname_get, _Cdi.CdiGrid_xlongname_set)
    xstdname = property(_Cdi.CdiGrid_xstdname_get, _Cdi.CdiGrid_xstdname_set)
    xunits = property(_Cdi.CdiGrid_xunits_get, _Cdi.CdiGrid_xunits_set)
    yname = property(_Cdi.CdiGrid_yname_get, _Cdi.CdiGrid_yname_set)
    ylongname = property(_Cdi.CdiGrid_ylongname_get, _Cdi.CdiGrid_ylongname_set)
    ystdname = property(_Cdi.CdiGrid_ystdname_get, _Cdi.CdiGrid_ystdname_set)
    yunits = property(_Cdi.CdiGrid_yunits_get, _Cdi.CdiGrid_yunits_set)
    name = property(_Cdi.CdiGrid_name_get, _Cdi.CdiGrid_name_set)

    def getValues(self):
        return _Cdi.CdiGrid_getValues(self)

    def getBounds(self):
        return _Cdi.CdiGrid_getBounds(self)

    def getValuesAsPointer(self, xvals, yvals):
        return _Cdi.CdiGrid_getValuesAsPointer(self, xvals, yvals)

    def getBoundsAsPointer(self, xbnds, ybnds):
        return _Cdi.CdiGrid_getBoundsAsPointer(self, xbnds, ybnds)

    def getFloatVals(self, xvals, yvals):
        return _Cdi.CdiGrid_getFloatVals(self, xvals, yvals)

    def getFloatBounds(self, xbnds, ybnds):
        return _Cdi.CdiGrid_getFloatBounds(self, xbnds, ybnds)

# Register CdiGrid in _Cdi:
_Cdi.CdiGrid_swigregister(CdiGrid)
class CdiTaxis(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):
        _Cdi.CdiTaxis_swiginit(self, _Cdi.new_CdiTaxis(*args))
    __swig_destroy__ = _Cdi.delete_CdiTaxis
    taxisID = property(_Cdi.CdiTaxis_taxisID_get, _Cdi.CdiTaxis_taxisID_set)
    ntsteps = property(_Cdi.CdiTaxis_ntsteps_get, _Cdi.CdiTaxis_ntsteps_set)
    unit = property(_Cdi.CdiTaxis_unit_get, _Cdi.CdiTaxis_unit_set)
    rdate = property(_Cdi.CdiTaxis_rdate_get, _Cdi.CdiTaxis_rdate_set)
    rtime = property(_Cdi.CdiTaxis_rtime_get, _Cdi.CdiTaxis_rtime_set)
    vdate = property(_Cdi.CdiTaxis_vdate_get, _Cdi.CdiTaxis_vdate_set)
    vtime = property(_Cdi.CdiTaxis_vtime_get, _Cdi.CdiTaxis_vtime_set)
    type = property(_Cdi.CdiTaxis_type_get, _Cdi.CdiTaxis_type_set)
    calendar = property(_Cdi.CdiTaxis_calendar_get, _Cdi.CdiTaxis_calendar_set)
    hasBounds = property(_Cdi.CdiTaxis_hasBounds_get, _Cdi.CdiTaxis_hasBounds_set)
    name = property(_Cdi.CdiTaxis_name_get, _Cdi.CdiTaxis_name_set)
    unitname = property(_Cdi.CdiTaxis_unitname_get, _Cdi.CdiTaxis_unitname_set)

# Register CdiTaxis in _Cdi:
_Cdi.CdiTaxis_swigregister(CdiTaxis)
class CdiZaxis(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):
        _Cdi.CdiZaxis_swiginit(self, _Cdi.new_CdiZaxis(*args))
    __swig_destroy__ = _Cdi.delete_CdiZaxis
    zaxisID = property(_Cdi.CdiZaxis_zaxisID_get, _Cdi.CdiZaxis_zaxisID_set)
    type = property(_Cdi.CdiZaxis_type_get, _Cdi.CdiZaxis_type_set)
    ltype = property(_Cdi.CdiZaxis_ltype_get, _Cdi.CdiZaxis_ltype_set)
    size = property(_Cdi.CdiZaxis_size_get, _Cdi.CdiZaxis_size_set)
    prec = property(_Cdi.CdiZaxis_prec_get, _Cdi.CdiZaxis_prec_set)
    plevels = property(_Cdi.CdiZaxis_plevels_get, _Cdi.CdiZaxis_plevels_set)
    plbounds = property(_Cdi.CdiZaxis_plbounds_get, _Cdi.CdiZaxis_plbounds_set)
    pubounds = property(_Cdi.CdiZaxis_pubounds_get, _Cdi.CdiZaxis_pubounds_set)
    pweights = property(_Cdi.CdiZaxis_pweights_get, _Cdi.CdiZaxis_pweights_set)
    levels = property(_Cdi.CdiZaxis_levels_get, _Cdi.CdiZaxis_levels_set)
    lbounds = property(_Cdi.CdiZaxis_lbounds_get, _Cdi.CdiZaxis_lbounds_set)
    ubounds = property(_Cdi.CdiZaxis_ubounds_get, _Cdi.CdiZaxis_ubounds_set)
    weights = property(_Cdi.CdiZaxis_weights_get, _Cdi.CdiZaxis_weights_set)
    name = property(_Cdi.CdiZaxis_name_get, _Cdi.CdiZaxis_name_set)
    longname = property(_Cdi.CdiZaxis_longname_get, _Cdi.CdiZaxis_longname_set)
    units = property(_Cdi.CdiZaxis_units_get, _Cdi.CdiZaxis_units_set)

# Register CdiZaxis in _Cdi:
_Cdi.CdiZaxis_swigregister(CdiZaxis)
class CdiVariable(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):
        _Cdi.CdiVariable_swiginit(self, _Cdi.new_CdiVariable(*args))
    __swig_destroy__ = _Cdi.delete_CdiVariable
    varID = property(_Cdi.CdiVariable_varID_get, _Cdi.CdiVariable_varID_set)
    zaxisID = property(_Cdi.CdiVariable_zaxisID_get, _Cdi.CdiVariable_zaxisID_set)
    gridID = property(_Cdi.CdiVariable_gridID_get, _Cdi.CdiVariable_gridID_set)
    taxisID = property(_Cdi.CdiVariable_taxisID_get, _Cdi.CdiVariable_taxisID_set)
    timeID = property(_Cdi.CdiVariable_timeID_get, _Cdi.CdiVariable_timeID_set)
    vlistID = property(_Cdi.CdiVariable_vlistID_get, _Cdi.CdiVariable_vlistID_set)
    size = property(_Cdi.CdiVariable_size_get, _Cdi.CdiVariable_size_set)
    code = property(_Cdi.CdiVariable_code_get, _Cdi.CdiVariable_code_set)
    datatype = property(_Cdi.CdiVariable_datatype_get, _Cdi.CdiVariable_datatype_set)
    streamID = property(_Cdi.CdiVariable_streamID_get, _Cdi.CdiVariable_streamID_set)
    name = property(_Cdi.CdiVariable_name_get, _Cdi.CdiVariable_name_set)
    longname = property(_Cdi.CdiVariable_longname_get, _Cdi.CdiVariable_longname_set)
    units = property(_Cdi.CdiVariable_units_get, _Cdi.CdiVariable_units_set)
    stdname = property(_Cdi.CdiVariable_stdname_get, _Cdi.CdiVariable_stdname_set)
    missval = property(_Cdi.CdiVariable_missval_get, _Cdi.CdiVariable_missval_set)
    values = property(_Cdi.CdiVariable_values_get, _Cdi.CdiVariable_values_set)
    valuesWithLevel = property(_Cdi.CdiVariable_valuesWithLevel_get, _Cdi.CdiVariable_valuesWithLevel_set)
    grid = property(_Cdi.CdiVariable_grid_get, _Cdi.CdiVariable_grid_set)
    zaxis = property(_Cdi.CdiVariable_zaxis_get, _Cdi.CdiVariable_zaxis_set)
    taxis = property(_Cdi.CdiVariable_taxis_get, _Cdi.CdiVariable_taxis_set)

    def sinfo(self):
        return _Cdi.CdiVariable_sinfo(self)

    def getValues(self):
        return _Cdi.CdiVariable_getValues(self)

    def getValuesWithLevel(self, tsID=0):
        return _Cdi.CdiVariable_getValuesWithLevel(self, tsID)

    def getFValues(self):
        return _Cdi.CdiVariable_getFValues(self)

    def getFValuesWithLevel(self, tsID=0):
        return _Cdi.CdiVariable_getFValuesWithLevel(self, tsID)

    def getValuesAsPointer(self):
        return _Cdi.CdiVariable_getValuesAsPointer(self)

    def getValuesWithLevelAsPointer(self, tsID=0):
        return _Cdi.CdiVariable_getValuesWithLevelAsPointer(self, tsID)

# Register CdiVariable in _Cdi:
_Cdi.CdiVariable_swigregister(CdiVariable)
class Cdi(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, path):
        _Cdi.Cdi_swiginit(self, _Cdi.new_Cdi(path))
    __swig_destroy__ = _Cdi.delete_Cdi
    streamID = property(_Cdi.Cdi_streamID_get, _Cdi.Cdi_streamID_set)
    vlistID = property(_Cdi.Cdi_vlistID_get, _Cdi.Cdi_vlistID_set)
    nvars = property(_Cdi.Cdi_nvars_get, _Cdi.Cdi_nvars_set)
    nzaxes = property(_Cdi.Cdi_nzaxes_get, _Cdi.Cdi_nzaxes_set)
    ngrids = property(_Cdi.Cdi_ngrids_get, _Cdi.Cdi_ngrids_set)
    ntaxes = property(_Cdi.Cdi_ntaxes_get, _Cdi.Cdi_ntaxes_set)
    taxisID = property(_Cdi.Cdi_taxisID_get, _Cdi.Cdi_taxisID_set)
    varnames = property(_Cdi.Cdi_varnames_get, _Cdi.Cdi_varnames_set)
    codes = property(_Cdi.Cdi_codes_get, _Cdi.Cdi_codes_set)
    variables = property(_Cdi.Cdi_variables_get, _Cdi.Cdi_variables_set)
    var = property(_Cdi.Cdi_var_get, _Cdi.Cdi_var_set)
    varByCode = property(_Cdi.Cdi_varByCode_get, _Cdi.Cdi_varByCode_set)
    taxes = property(_Cdi.Cdi_taxes_get, _Cdi.Cdi_taxes_set)
    zaxes = property(_Cdi.Cdi_zaxes_get, _Cdi.Cdi_zaxes_set)
    grids = property(_Cdi.Cdi_grids_get, _Cdi.Cdi_grids_set)

    def griddes(self):
        return _Cdi.Cdi_griddes(self)

# Register Cdi in _Cdi:
_Cdi.Cdi_swigregister(Cdi)

