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

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

import _libBornAgainBase

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

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


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


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


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


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


import weakref

class SwigPyIterator(object):
    r"""Proxy of C++ swig::SwigPyIterator class."""

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

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

    def value(self):
        r"""value(SwigPyIterator self) -> PyObject *"""
        return _libBornAgainBase.SwigPyIterator_value(self)

    def incr(self, n=1):
        r"""incr(SwigPyIterator self, size_t n=1) -> SwigPyIterator"""
        return _libBornAgainBase.SwigPyIterator_incr(self, n)

    def decr(self, n=1):
        r"""decr(SwigPyIterator self, size_t n=1) -> SwigPyIterator"""
        return _libBornAgainBase.SwigPyIterator_decr(self, n)

    def distance(self, x):
        r"""distance(SwigPyIterator self, SwigPyIterator x) -> ptrdiff_t"""
        return _libBornAgainBase.SwigPyIterator_distance(self, x)

    def equal(self, x):
        r"""equal(SwigPyIterator self, SwigPyIterator x) -> bool"""
        return _libBornAgainBase.SwigPyIterator_equal(self, x)

    def copy(self):
        r"""copy(SwigPyIterator self) -> SwigPyIterator"""
        return _libBornAgainBase.SwigPyIterator_copy(self)

    def next(self):
        r"""next(SwigPyIterator self) -> PyObject *"""
        return _libBornAgainBase.SwigPyIterator_next(self)

    def __next__(self):
        r"""__next__(SwigPyIterator self) -> PyObject *"""
        return _libBornAgainBase.SwigPyIterator___next__(self)

    def previous(self):
        r"""previous(SwigPyIterator self) -> PyObject *"""
        return _libBornAgainBase.SwigPyIterator_previous(self)

    def advance(self, n):
        r"""advance(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"""
        return _libBornAgainBase.SwigPyIterator_advance(self, n)

    def __eq__(self, x):
        r"""__eq__(SwigPyIterator self, SwigPyIterator x) -> bool"""
        return _libBornAgainBase.SwigPyIterator___eq__(self, x)

    def __ne__(self, x):
        r"""__ne__(SwigPyIterator self, SwigPyIterator x) -> bool"""
        return _libBornAgainBase.SwigPyIterator___ne__(self, x)

    def __iadd__(self, n):
        r"""__iadd__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"""
        return _libBornAgainBase.SwigPyIterator___iadd__(self, n)

    def __isub__(self, n):
        r"""__isub__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"""
        return _libBornAgainBase.SwigPyIterator___isub__(self, n)

    def __add__(self, n):
        r"""__add__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"""
        return _libBornAgainBase.SwigPyIterator___add__(self, n)

    def __sub__(self, *args):
        r"""
        __sub__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator
        __sub__(SwigPyIterator self, SwigPyIterator x) -> ptrdiff_t
        """
        return _libBornAgainBase.SwigPyIterator___sub__(self, *args)
    def __iter__(self):
        return self

# Register SwigPyIterator in _libBornAgainBase:
_libBornAgainBase.SwigPyIterator_swigregister(SwigPyIterator)

SHARED_PTR_DISOWN = _libBornAgainBase.SHARED_PTR_DISOWN

class vdouble1d_t(object):
    r"""Proxy of C++ std::vector< double > class."""

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

    def iterator(self):
        r"""iterator(vdouble1d_t self) -> SwigPyIterator"""
        return _libBornAgainBase.vdouble1d_t_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self):
        r"""__nonzero__(vdouble1d_t self) -> bool"""
        return _libBornAgainBase.vdouble1d_t___nonzero__(self)

    def __bool__(self):
        r"""__bool__(vdouble1d_t self) -> bool"""
        return _libBornAgainBase.vdouble1d_t___bool__(self)

    def __len__(self):
        r"""__len__(vdouble1d_t self) -> std::vector< double >::size_type"""
        return _libBornAgainBase.vdouble1d_t___len__(self)

    def __getslice__(self, i, j):
        r"""__getslice__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::difference_type j) -> vdouble1d_t"""
        return _libBornAgainBase.vdouble1d_t___getslice__(self, i, j)

    def __setslice__(self, *args):
        r"""
        __setslice__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::difference_type j)
        __setslice__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::difference_type j, vdouble1d_t v)
        """
        return _libBornAgainBase.vdouble1d_t___setslice__(self, *args)

    def __delslice__(self, i, j):
        r"""__delslice__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::difference_type j)"""
        return _libBornAgainBase.vdouble1d_t___delslice__(self, i, j)

    def __delitem__(self, *args):
        r"""
        __delitem__(vdouble1d_t self, std::vector< double >::difference_type i)
        __delitem__(vdouble1d_t self, PySliceObject * slice)
        """
        return _libBornAgainBase.vdouble1d_t___delitem__(self, *args)

    def __getitem__(self, *args):
        r"""
        __getitem__(vdouble1d_t self, PySliceObject * slice) -> vdouble1d_t
        __getitem__(vdouble1d_t self, std::vector< double >::difference_type i) -> std::vector< double >::value_type const &
        """
        return _libBornAgainBase.vdouble1d_t___getitem__(self, *args)

    def __setitem__(self, *args):
        r"""
        __setitem__(vdouble1d_t self, PySliceObject * slice, vdouble1d_t v)
        __setitem__(vdouble1d_t self, PySliceObject * slice)
        __setitem__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::value_type const & x)
        """
        return _libBornAgainBase.vdouble1d_t___setitem__(self, *args)

    def pop(self):
        r"""pop(vdouble1d_t self) -> std::vector< double >::value_type"""
        return _libBornAgainBase.vdouble1d_t_pop(self)

    def append(self, x):
        r"""append(vdouble1d_t self, std::vector< double >::value_type const & x)"""
        return _libBornAgainBase.vdouble1d_t_append(self, x)

    def empty(self):
        r"""empty(vdouble1d_t self) -> bool"""
        return _libBornAgainBase.vdouble1d_t_empty(self)

    def size(self):
        r"""size(vdouble1d_t self) -> std::vector< double >::size_type"""
        return _libBornAgainBase.vdouble1d_t_size(self)

    def swap(self, v):
        r"""swap(vdouble1d_t self, vdouble1d_t v)"""
        return _libBornAgainBase.vdouble1d_t_swap(self, v)

    def begin(self):
        r"""begin(vdouble1d_t self) -> std::vector< double >::iterator"""
        return _libBornAgainBase.vdouble1d_t_begin(self)

    def end(self):
        r"""end(vdouble1d_t self) -> std::vector< double >::iterator"""
        return _libBornAgainBase.vdouble1d_t_end(self)

    def rbegin(self):
        r"""rbegin(vdouble1d_t self) -> std::vector< double >::reverse_iterator"""
        return _libBornAgainBase.vdouble1d_t_rbegin(self)

    def rend(self):
        r"""rend(vdouble1d_t self) -> std::vector< double >::reverse_iterator"""
        return _libBornAgainBase.vdouble1d_t_rend(self)

    def clear(self):
        r"""clear(vdouble1d_t self)"""
        return _libBornAgainBase.vdouble1d_t_clear(self)

    def get_allocator(self):
        r"""get_allocator(vdouble1d_t self) -> std::vector< double >::allocator_type"""
        return _libBornAgainBase.vdouble1d_t_get_allocator(self)

    def pop_back(self):
        r"""pop_back(vdouble1d_t self)"""
        return _libBornAgainBase.vdouble1d_t_pop_back(self)

    def erase(self, *args):
        r"""
        erase(vdouble1d_t self, std::vector< double >::iterator pos) -> std::vector< double >::iterator
        erase(vdouble1d_t self, std::vector< double >::iterator first, std::vector< double >::iterator last) -> std::vector< double >::iterator
        """
        return _libBornAgainBase.vdouble1d_t_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(vdouble1d_t self) -> vdouble1d_t
        __init__(vdouble1d_t self, vdouble1d_t other) -> vdouble1d_t
        __init__(vdouble1d_t self, std::vector< double >::size_type size) -> vdouble1d_t
        __init__(vdouble1d_t self, std::vector< double >::size_type size, std::vector< double >::value_type const & value) -> vdouble1d_t
        """
        _libBornAgainBase.vdouble1d_t_swiginit(self, _libBornAgainBase.new_vdouble1d_t(*args))

    def push_back(self, x):
        r"""push_back(vdouble1d_t self, std::vector< double >::value_type const & x)"""
        return _libBornAgainBase.vdouble1d_t_push_back(self, x)

    def front(self):
        r"""front(vdouble1d_t self) -> std::vector< double >::value_type const &"""
        return _libBornAgainBase.vdouble1d_t_front(self)

    def back(self):
        r"""back(vdouble1d_t self) -> std::vector< double >::value_type const &"""
        return _libBornAgainBase.vdouble1d_t_back(self)

    def assign(self, n, x):
        r"""assign(vdouble1d_t self, std::vector< double >::size_type n, std::vector< double >::value_type const & x)"""
        return _libBornAgainBase.vdouble1d_t_assign(self, n, x)

    def resize(self, *args):
        r"""
        resize(vdouble1d_t self, std::vector< double >::size_type new_size)
        resize(vdouble1d_t self, std::vector< double >::size_type new_size, std::vector< double >::value_type const & x)
        """
        return _libBornAgainBase.vdouble1d_t_resize(self, *args)

    def insert(self, *args):
        r"""
        insert(vdouble1d_t self, std::vector< double >::iterator pos, std::vector< double >::value_type const & x) -> std::vector< double >::iterator
        insert(vdouble1d_t self, std::vector< double >::iterator pos, std::vector< double >::size_type n, std::vector< double >::value_type const & x)
        """
        return _libBornAgainBase.vdouble1d_t_insert(self, *args)

    def reserve(self, n):
        r"""reserve(vdouble1d_t self, std::vector< double >::size_type n)"""
        return _libBornAgainBase.vdouble1d_t_reserve(self, n)

    def capacity(self):
        r"""capacity(vdouble1d_t self) -> std::vector< double >::size_type"""
        return _libBornAgainBase.vdouble1d_t_capacity(self)
    __swig_destroy__ = _libBornAgainBase.delete_vdouble1d_t

# Register vdouble1d_t in _libBornAgainBase:
_libBornAgainBase.vdouble1d_t_swigregister(vdouble1d_t)

class vdouble2d_t(object):
    r"""Proxy of C++ std::vector< std::vector< double > > class."""

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

    def iterator(self):
        r"""iterator(vdouble2d_t self) -> SwigPyIterator"""
        return _libBornAgainBase.vdouble2d_t_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self):
        r"""__nonzero__(vdouble2d_t self) -> bool"""
        return _libBornAgainBase.vdouble2d_t___nonzero__(self)

    def __bool__(self):
        r"""__bool__(vdouble2d_t self) -> bool"""
        return _libBornAgainBase.vdouble2d_t___bool__(self)

    def __len__(self):
        r"""__len__(vdouble2d_t self) -> std::vector< std::vector< double > >::size_type"""
        return _libBornAgainBase.vdouble2d_t___len__(self)

    def __getslice__(self, i, j):
        r"""__getslice__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, std::vector< std::vector< double > >::difference_type j) -> vdouble2d_t"""
        return _libBornAgainBase.vdouble2d_t___getslice__(self, i, j)

    def __setslice__(self, *args):
        r"""
        __setslice__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, std::vector< std::vector< double > >::difference_type j)
        __setslice__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, std::vector< std::vector< double > >::difference_type j, vdouble2d_t v)
        """
        return _libBornAgainBase.vdouble2d_t___setslice__(self, *args)

    def __delslice__(self, i, j):
        r"""__delslice__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, std::vector< std::vector< double > >::difference_type j)"""
        return _libBornAgainBase.vdouble2d_t___delslice__(self, i, j)

    def __delitem__(self, *args):
        r"""
        __delitem__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i)
        __delitem__(vdouble2d_t self, PySliceObject * slice)
        """
        return _libBornAgainBase.vdouble2d_t___delitem__(self, *args)

    def __getitem__(self, *args):
        r"""
        __getitem__(vdouble2d_t self, PySliceObject * slice) -> vdouble2d_t
        __getitem__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i) -> vdouble1d_t
        """
        return _libBornAgainBase.vdouble2d_t___getitem__(self, *args)

    def __setitem__(self, *args):
        r"""
        __setitem__(vdouble2d_t self, PySliceObject * slice, vdouble2d_t v)
        __setitem__(vdouble2d_t self, PySliceObject * slice)
        __setitem__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, vdouble1d_t x)
        """
        return _libBornAgainBase.vdouble2d_t___setitem__(self, *args)

    def pop(self):
        r"""pop(vdouble2d_t self) -> vdouble1d_t"""
        return _libBornAgainBase.vdouble2d_t_pop(self)

    def append(self, x):
        r"""append(vdouble2d_t self, vdouble1d_t x)"""
        return _libBornAgainBase.vdouble2d_t_append(self, x)

    def empty(self):
        r"""empty(vdouble2d_t self) -> bool"""
        return _libBornAgainBase.vdouble2d_t_empty(self)

    def size(self):
        r"""size(vdouble2d_t self) -> std::vector< std::vector< double > >::size_type"""
        return _libBornAgainBase.vdouble2d_t_size(self)

    def swap(self, v):
        r"""swap(vdouble2d_t self, vdouble2d_t v)"""
        return _libBornAgainBase.vdouble2d_t_swap(self, v)

    def begin(self):
        r"""begin(vdouble2d_t self) -> std::vector< std::vector< double > >::iterator"""
        return _libBornAgainBase.vdouble2d_t_begin(self)

    def end(self):
        r"""end(vdouble2d_t self) -> std::vector< std::vector< double > >::iterator"""
        return _libBornAgainBase.vdouble2d_t_end(self)

    def rbegin(self):
        r"""rbegin(vdouble2d_t self) -> std::vector< std::vector< double > >::reverse_iterator"""
        return _libBornAgainBase.vdouble2d_t_rbegin(self)

    def rend(self):
        r"""rend(vdouble2d_t self) -> std::vector< std::vector< double > >::reverse_iterator"""
        return _libBornAgainBase.vdouble2d_t_rend(self)

    def clear(self):
        r"""clear(vdouble2d_t self)"""
        return _libBornAgainBase.vdouble2d_t_clear(self)

    def get_allocator(self):
        r"""get_allocator(vdouble2d_t self) -> std::vector< std::vector< double > >::allocator_type"""
        return _libBornAgainBase.vdouble2d_t_get_allocator(self)

    def pop_back(self):
        r"""pop_back(vdouble2d_t self)"""
        return _libBornAgainBase.vdouble2d_t_pop_back(self)

    def erase(self, *args):
        r"""
        erase(vdouble2d_t self, std::vector< std::vector< double > >::iterator pos) -> std::vector< std::vector< double > >::iterator
        erase(vdouble2d_t self, std::vector< std::vector< double > >::iterator first, std::vector< std::vector< double > >::iterator last) -> std::vector< std::vector< double > >::iterator
        """
        return _libBornAgainBase.vdouble2d_t_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(vdouble2d_t self) -> vdouble2d_t
        __init__(vdouble2d_t self, vdouble2d_t other) -> vdouble2d_t
        __init__(vdouble2d_t self, std::vector< std::vector< double > >::size_type size) -> vdouble2d_t
        __init__(vdouble2d_t self, std::vector< std::vector< double > >::size_type size, vdouble1d_t value) -> vdouble2d_t
        """
        _libBornAgainBase.vdouble2d_t_swiginit(self, _libBornAgainBase.new_vdouble2d_t(*args))

    def push_back(self, x):
        r"""push_back(vdouble2d_t self, vdouble1d_t x)"""
        return _libBornAgainBase.vdouble2d_t_push_back(self, x)

    def front(self):
        r"""front(vdouble2d_t self) -> vdouble1d_t"""
        return _libBornAgainBase.vdouble2d_t_front(self)

    def back(self):
        r"""back(vdouble2d_t self) -> vdouble1d_t"""
        return _libBornAgainBase.vdouble2d_t_back(self)

    def assign(self, n, x):
        r"""assign(vdouble2d_t self, std::vector< std::vector< double > >::size_type n, vdouble1d_t x)"""
        return _libBornAgainBase.vdouble2d_t_assign(self, n, x)

    def resize(self, *args):
        r"""
        resize(vdouble2d_t self, std::vector< std::vector< double > >::size_type new_size)
        resize(vdouble2d_t self, std::vector< std::vector< double > >::size_type new_size, vdouble1d_t x)
        """
        return _libBornAgainBase.vdouble2d_t_resize(self, *args)

    def insert(self, *args):
        r"""
        insert(vdouble2d_t self, std::vector< std::vector< double > >::iterator pos, vdouble1d_t x) -> std::vector< std::vector< double > >::iterator
        insert(vdouble2d_t self, std::vector< std::vector< double > >::iterator pos, std::vector< std::vector< double > >::size_type n, vdouble1d_t x)
        """
        return _libBornAgainBase.vdouble2d_t_insert(self, *args)

    def reserve(self, n):
        r"""reserve(vdouble2d_t self, std::vector< std::vector< double > >::size_type n)"""
        return _libBornAgainBase.vdouble2d_t_reserve(self, n)

    def capacity(self):
        r"""capacity(vdouble2d_t self) -> std::vector< std::vector< double > >::size_type"""
        return _libBornAgainBase.vdouble2d_t_capacity(self)
    __swig_destroy__ = _libBornAgainBase.delete_vdouble2d_t

# Register vdouble2d_t in _libBornAgainBase:
_libBornAgainBase.vdouble2d_t_swigregister(vdouble2d_t)

class ICloneable(object):
    r"""


    Interface for polymorphic classes that should not be copied, except by explicit cloning.

    Child classes of  ICloneable must provide clone().

    C++ includes: ICloneable.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__ = _libBornAgainBase.delete_ICloneable

    def clone(self):
        r"""
        clone(ICloneable self) -> ICloneable
        virtual ICloneable* ICloneable::clone() const =0

        """
        return _libBornAgainBase.ICloneable_clone(self)

    def transferToCPP(self):
        r"""
        transferToCPP(ICloneable self)
        virtual void ICloneable::transferToCPP()

        Used for Python overriding of clone (see swig/tweaks.py) 

        """
        return self.__disown__()

# Register ICloneable in _libBornAgainBase:
_libBornAgainBase.ICloneable_swigregister(ICloneable)


def mul_I(z):
    r"""
    mul_I(complex_t z) -> complex_t
    complex_t mul_I(complex_t z)

    Returns product I*z, where I is the imaginary unit. 

    """
    return _libBornAgainBase.mul_I(z)

def exp_I(z):
    r"""
    exp_I(complex_t z) -> complex_t
    complex_t exp_I(complex_t z)

    Returns exp(I*z), where I is the imaginary unit. 

    """
    return _libBornAgainBase.exp_I(z)

def rad2deg(angle):
    r"""
    rad2deg(double angle) -> double
    double Units::rad2deg(double angle)

    """
    return _libBornAgainBase.rad2deg(angle)

def deg2rad(angle):
    r"""
    deg2rad(double angle) -> double
    double Units::deg2rad(double angle)

    """
    return _libBornAgainBase.deg2rad(angle)

def StandardNormal(x):
    r"""
    StandardNormal(double x) -> double
    double MathFunctions::StandardNormal(double x)

    """
    return _libBornAgainBase.StandardNormal(x)

def Gaussian(x, average, std_dev):
    r"""
    Gaussian(double x, double average, double std_dev) -> double
    double MathFunctions::Gaussian(double x, double average, double std_dev)

    """
    return _libBornAgainBase.Gaussian(x, average, std_dev)

def IntegratedGaussian(x, average, std_dev):
    r"""
    IntegratedGaussian(double x, double average, double std_dev) -> double
    double MathFunctions::IntegratedGaussian(double x, double average, double std_dev)

    """
    return _libBornAgainBase.IntegratedGaussian(x, average, std_dev)

def cot(x):
    r"""
    cot(double x) -> double
    double MathFunctions::cot(double x)

    cotangent function:  $cot(x)\\equiv1/tan(x)$

    """
    return _libBornAgainBase.cot(x)

def Si(x):
    r"""
    Si(double x) -> double
    double MathFunctions::Si(double x)

    Sine integral function:  $Si(x)\\equiv\\int_0^x du \\sin(u)/u$. 

    """
    return _libBornAgainBase.Si(x)

def sinc(*args):
    r"""
    sinc(double x) -> double
    sinc(complex_t const z) -> complex_t
    complex_t MathFunctions::sinc(const complex_t z)

    Complex sinc function:  $sinc(x)\\equiv\\sin(x)/x$. 

    """
    return _libBornAgainBase.sinc(*args)

def tanhc(z):
    r"""
    tanhc(complex_t const z) -> complex_t
    complex_t MathFunctions::tanhc(const complex_t z)

    Complex tanhc function:  $tanhc(x)\\equiv\\tanh(x)/x$. 

    """
    return _libBornAgainBase.tanhc(z)

def Laue(x, N):
    r"""
    Laue(double const x, size_t N) -> double
    double MathFunctions::Laue(const double x, size_t N)

    Real Laue function:  $Laue(x,N)\\equiv\\sin(Nx)/sin(x)$. 

    """
    return _libBornAgainBase.Laue(x, N)

def erf(arg):
    r"""
    erf(double arg) -> double
    double MathFunctions::erf(double arg)

    Error function of real-valued argument. 

    """
    return _libBornAgainBase.erf(arg)

def Bessel_I0(x):
    r"""
    Bessel_I0(double x) -> double
    double MathFunctions::Bessel_I0(double x)

    Modified Bessel function of the first kind and order 0. 

    """
    return _libBornAgainBase.Bessel_I0(x)

def Bessel_J0(*args):
    r"""
    Bessel_J0(double x) -> double
    Bessel_J0(complex_t const z) -> complex_t
    complex_t MathFunctions::Bessel_J0(const complex_t z)

    Complex Bessel function of the first kind and order 0. 

    """
    return _libBornAgainBase.Bessel_J0(*args)

def Bessel_J1(*args):
    r"""
    Bessel_J1(double x) -> double
    Bessel_J1(complex_t const z) -> complex_t
    complex_t MathFunctions::Bessel_J1(const complex_t z)

    Complex Bessel function of the first kind and order 1. 

    """
    return _libBornAgainBase.Bessel_J1(*args)

def Bessel_J1c(*args):
    r"""
    Bessel_J1c(double x) -> double
    Bessel_J1c(complex_t const z) -> complex_t
    complex_t MathFunctions::Bessel_J1c(const complex_t z)

    Complex Bessel function Bessel_J1(x)/x. 

    """
    return _libBornAgainBase.Bessel_J1c(*args)
FORWARD_FFT = _libBornAgainBase.FORWARD_FFT

BACKWARD_FFT = _libBornAgainBase.BACKWARD_FFT


def FastFourierTransform(*args):
    r"""
    FastFourierTransform(std::vector< complex_t,std::allocator< complex_t > > const & data, MathFunctions::EFFTDirection tcase) -> std::vector< complex_t,std::allocator< complex_t > >
    FastFourierTransform(vdouble1d_t data, MathFunctions::EFFTDirection tcase) -> std::vector< complex_t,std::allocator< complex_t > >
    std::vector< complex_t > MathFunctions::FastFourierTransform(const std::vector< double > &data, EFFTDirection tcase)

    simple (and unoptimized) wrapper function for the discrete fast Fourier transformation library (fftw3); transforms real to complex 

    """
    return _libBornAgainBase.FastFourierTransform(*args)

def ConvolveFFT(signal, resfunc):
    r"""
    ConvolveFFT(vdouble1d_t signal, vdouble1d_t resfunc) -> std::vector< complex_t,std::allocator< complex_t > >
    std::vector< complex_t > MathFunctions::ConvolveFFT(const std::vector< double > &signal, const std::vector< double > &resfunc)

    convolution of two real vectors of equal size 

    """
    return _libBornAgainBase.ConvolveFFT(signal, resfunc)

def GenerateUniformRandom():
    r"""
    GenerateUniformRandom() -> double
    double MathFunctions::GenerateUniformRandom()

    """
    return _libBornAgainBase.GenerateUniformRandom()

def GenerateStandardNormalRandom():
    r"""
    GenerateStandardNormalRandom() -> double
    double MathFunctions::GenerateStandardNormalRandom()

    """
    return _libBornAgainBase.GenerateStandardNormalRandom()

def GenerateNormalRandom(average, std_dev):
    r"""
    GenerateNormalRandom(double average, double std_dev) -> double
    double MathFunctions::GenerateNormalRandom(double average, double std_dev)

    """
    return _libBornAgainBase.GenerateNormalRandom(average, std_dev)

def GeneratePoissonRandom(average):
    r"""
    GeneratePoissonRandom(double average) -> double
    double MathFunctions::GeneratePoissonRandom(double average)

    """
    return _libBornAgainBase.GeneratePoissonRandom(average)
class ThreadInfo(object):
    r"""


    Information to run simulation with dedicated number of threads.

    C++ includes: ThreadInfo.h

    """

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

    def __init__(self):
        r"""
        __init__(ThreadInfo self) -> ThreadInfo
        ThreadInfo::ThreadInfo()

        """
        _libBornAgainBase.ThreadInfo_swiginit(self, _libBornAgainBase.new_ThreadInfo())
    n_threads = property(_libBornAgainBase.ThreadInfo_n_threads_get, _libBornAgainBase.ThreadInfo_n_threads_set, doc=r"""n_threads : unsigned int""")
    n_batches = property(_libBornAgainBase.ThreadInfo_n_batches_get, _libBornAgainBase.ThreadInfo_n_batches_set, doc=r"""n_batches : unsigned int""")
    current_batch = property(_libBornAgainBase.ThreadInfo_current_batch_get, _libBornAgainBase.ThreadInfo_current_batch_set, doc=r"""current_batch : unsigned int""")
    __swig_destroy__ = _libBornAgainBase.delete_ThreadInfo

# Register ThreadInfo in _libBornAgainBase:
_libBornAgainBase.ThreadInfo_swigregister(ThreadInfo)
cvar = _libBornAgainBase.cvar
I = cvar.I
nanometer = cvar.nanometer
angstrom = cvar.angstrom
micrometer = cvar.micrometer
millimeter = cvar.millimeter
meter = cvar.meter
nm = cvar.nm
nm2 = cvar.nm2
barn = cvar.barn
radian = cvar.radian
milliradian = cvar.milliradian
degree = cvar.degree
steradian = cvar.steradian
rad = cvar.rad
mrad = cvar.mrad
sr = cvar.sr
deg = cvar.deg
tesla = cvar.tesla
gauss = cvar.gauss


def vecOfLambdaAlphaPhi(_lambda, _alpha, _phi):
    r"""
    vecOfLambdaAlphaPhi(double _lambda, double _alpha, double _phi) -> kvector_t
    BasicVector3D<double> vecOfLambdaAlphaPhi(double _lambda, double _alpha, double _phi)

    Creates a vector<double> as a wavevector with given wavelength and angles. Specifically needed for grazing-incidence scattering. 

    """
    return _libBornAgainBase.vecOfLambdaAlphaPhi(_lambda, _alpha, _phi)
class Bin1D(object):
    r"""Proxy of C++ Bin1D class."""

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

    def __init__(self, *args):
        r"""
        __init__(Bin1D self) -> Bin1D
        __init__(Bin1D self, double lower, double upper) -> Bin1D
        Bin1D::Bin1D(double lower, double upper)

        """
        _libBornAgainBase.Bin1D_swiginit(self, _libBornAgainBase.new_Bin1D(*args))
    m_lower = property(_libBornAgainBase.Bin1D_m_lower_get, _libBornAgainBase.Bin1D_m_lower_set, doc=r"""m_lower : double""")
    m_upper = property(_libBornAgainBase.Bin1D_m_upper_get, _libBornAgainBase.Bin1D_m_upper_set, doc=r"""m_upper : double""")

    def getMidPoint(self):
        r"""
        getMidPoint(Bin1D self) -> double
        double Bin1D::getMidPoint() const

        """
        return _libBornAgainBase.Bin1D_getMidPoint(self)

    def getBinSize(self):
        r"""
        getBinSize(Bin1D self) -> double
        double Bin1D::getBinSize() const

        """
        return _libBornAgainBase.Bin1D_getBinSize(self)
    __swig_destroy__ = _libBornAgainBase.delete_Bin1D

# Register Bin1D in _libBornAgainBase:
_libBornAgainBase.Bin1D_swigregister(Bin1D)


def BinContains(bin, value):
    r"""
    BinContains(Bin1D bin, double value) -> bool
    bool BinContains(const Bin1D &bin, double value)

    Checks if value is contained in bin: value in [m_lower, m_upper) 

    """
    return _libBornAgainBase.BinContains(bin, value)
class Bin1DKVector(object):
    r"""


    An one-dimensional range of kvector_t's.

    C++ includes: Bin.h

    """

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

    def __init__(self, *args):
        r"""
        __init__(Bin1DKVector self) -> Bin1DKVector
        __init__(Bin1DKVector self, kvector_t lower, kvector_t upper) -> Bin1DKVector
        __init__(Bin1DKVector self, double wavelength, Bin1D alpha_bin, Bin1D phi_bin) -> Bin1DKVector
        Bin1DKVector::Bin1DKVector(double wavelength, const Bin1D &alpha_bin, const Bin1D &phi_bin)

        creation on  Bin1DKVector from alpha and phi bins 

        """
        _libBornAgainBase.Bin1DKVector_swiginit(self, _libBornAgainBase.new_Bin1DKVector(*args))

    def getMidPoint(self):
        r"""
        getMidPoint(Bin1DKVector self) -> kvector_t
        kvector_t Bin1DKVector::getMidPoint() const

        """
        return _libBornAgainBase.Bin1DKVector_getMidPoint(self)

    def getDelta(self):
        r"""
        getDelta(Bin1DKVector self) -> kvector_t
        kvector_t Bin1DKVector::getDelta() const

        """
        return _libBornAgainBase.Bin1DKVector_getDelta(self)
    m_q_lower = property(_libBornAgainBase.Bin1DKVector_m_q_lower_get, _libBornAgainBase.Bin1DKVector_m_q_lower_set, doc=r"""m_q_lower : kvector_t""")
    m_q_upper = property(_libBornAgainBase.Bin1DKVector_m_q_upper_get, _libBornAgainBase.Bin1DKVector_m_q_upper_set, doc=r"""m_q_upper : kvector_t""")
    __swig_destroy__ = _libBornAgainBase.delete_Bin1DKVector

# Register Bin1DKVector in _libBornAgainBase:
_libBornAgainBase.Bin1DKVector_swigregister(Bin1DKVector)

class Bin1DCVector(object):
    r"""


    An one-dimensional range of cvector_t's.

    C++ includes: Bin.h

    """

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

    def __init__(self, *args):
        r"""
        __init__(Bin1DCVector self) -> Bin1DCVector
        __init__(Bin1DCVector self, cvector_t lower, cvector_t upper) -> Bin1DCVector
        __init__(Bin1DCVector self, double wavelength, Bin1D alpha_bin, Bin1D phi_bin) -> Bin1DCVector
        Bin1DCVector::Bin1DCVector(double wavelength, const Bin1D &alpha_bin, const Bin1D &phi_bin)

        creation on  Bin1DCVector from alpha and phi bins 

        """
        _libBornAgainBase.Bin1DCVector_swiginit(self, _libBornAgainBase.new_Bin1DCVector(*args))

    def getMidPoint(self):
        r"""
        getMidPoint(Bin1DCVector self) -> cvector_t
        cvector_t Bin1DCVector::getMidPoint() const

        """
        return _libBornAgainBase.Bin1DCVector_getMidPoint(self)

    def getDelta(self):
        r"""
        getDelta(Bin1DCVector self) -> cvector_t
        cvector_t Bin1DCVector::getDelta() const

        """
        return _libBornAgainBase.Bin1DCVector_getDelta(self)
    m_q_lower = property(_libBornAgainBase.Bin1DCVector_m_q_lower_get, _libBornAgainBase.Bin1DCVector_m_q_lower_set, doc=r"""m_q_lower : cvector_t""")
    m_q_upper = property(_libBornAgainBase.Bin1DCVector_m_q_upper_get, _libBornAgainBase.Bin1DCVector_m_q_upper_set, doc=r"""m_q_upper : cvector_t""")
    __swig_destroy__ = _libBornAgainBase.delete_Bin1DCVector

# Register Bin1DCVector in _libBornAgainBase:
_libBornAgainBase.Bin1DCVector_swigregister(Bin1DCVector)

class IAxis(object):
    r"""


    Interface for one-dimensional axes.

    C++ includes: IAxis.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

    def clone(self):
        r"""
        clone(IAxis self) -> IAxis
        virtual IAxis* IAxis::clone() const =0

        clone function 

        """
        return _libBornAgainBase.IAxis_clone(self)
    __swig_destroy__ = _libBornAgainBase.delete_IAxis

    def size(self):
        r"""
        size(IAxis self) -> size_t
        virtual size_t IAxis::size() const =0

        retrieve the number of bins 

        """
        return _libBornAgainBase.IAxis_size(self)

    def getName(self):
        r"""
        getName(IAxis self) -> std::string
        std::string IAxis::getName() const

        retrieve the label of the axis 

        """
        return _libBornAgainBase.IAxis_getName(self)

    def setName(self, name):
        r"""
        setName(IAxis self, std::string name)
        void IAxis::setName(std::string name)

        Sets the axis label. 

        """
        return _libBornAgainBase.IAxis_setName(self, name)

    def getBin(self, index):
        r"""
        getBin(IAxis self, size_t index) -> Bin1D
        virtual Bin1D IAxis::getBin(size_t index) const =0

        retrieve a 1d bin for the given index 

        """
        return _libBornAgainBase.IAxis_getBin(self, index)

    def getMin(self):
        r"""
        getMin(IAxis self) -> double
        virtual double IAxis::getMin() const =0

        Returns value of first point of axis. 

        """
        return _libBornAgainBase.IAxis_getMin(self)

    def getMax(self):
        r"""
        getMax(IAxis self) -> double
        virtual double IAxis::getMax() const =0

        Returns value of last point of axis. 

        """
        return _libBornAgainBase.IAxis_getMax(self)

    def getBinCenter(self, index):
        r"""
        getBinCenter(IAxis self, size_t index) -> double
        virtual double IAxis::getBinCenter(size_t index) const =0

        """
        return _libBornAgainBase.IAxis_getBinCenter(self, index)

    def findClosestIndex(self, value):
        r"""
        findClosestIndex(IAxis self, double value) -> size_t
        virtual size_t IAxis::findClosestIndex(double value) const =0

        find bin index which is best match for given value 

        """
        return _libBornAgainBase.IAxis_findClosestIndex(self, value)

    def __eq__(self, right):
        r"""__eq__(IAxis self, IAxis right) -> bool"""
        return _libBornAgainBase.IAxis___eq__(self, right)

    def __ne__(self, right):
        r"""__ne__(IAxis self, IAxis right) -> bool"""
        return _libBornAgainBase.IAxis___ne__(self, right)

    def getBinCenters(self):
        r"""
        getBinCenters(IAxis self) -> vdouble1d_t
        std::vector< double > IAxis::getBinCenters() const

        """
        return _libBornAgainBase.IAxis_getBinCenters(self)

    def getBinBoundaries(self):
        r"""
        getBinBoundaries(IAxis self) -> vdouble1d_t
        std::vector< double > IAxis::getBinBoundaries() const

        """
        return _libBornAgainBase.IAxis_getBinBoundaries(self)

    def createClippedAxis(self, left, right):
        r"""
        createClippedAxis(IAxis self, double left, double right) -> IAxis
        IAxis * IAxis::createClippedAxis(double left, double right) const

        Creates a new clipped axis. 

        """
        return _libBornAgainBase.IAxis_createClippedAxis(self, left, right)

    def contains(self, value):
        r"""
        contains(IAxis self, double value) -> bool
        bool IAxis::contains(double value) const

        Returns true if axis contains given point. 

        """
        return _libBornAgainBase.IAxis_contains(self, value)

# Register IAxis in _libBornAgainBase:
_libBornAgainBase.IAxis_swigregister(IAxis)


def HaveSameNameAndShape(left, right):
    r"""
    HaveSameNameAndShape(IAxis left, IAxis right) -> bool
    bool HaveSameNameAndShape(const IAxis &left, const IAxis &right)

    global helper function for comparison of axes 

    """
    return _libBornAgainBase.HaveSameNameAndShape(left, right)
class VariableBinAxis(IAxis):
    r"""


    Axis with variable bin size.

    C++ includes: VariableBinAxis.h

    """

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

    def __init__(self, name, nbins, bin_boundaries):
        r"""
        __init__(VariableBinAxis self, std::string const & name, size_t nbins, vdouble1d_t bin_boundaries) -> VariableBinAxis
        VariableBinAxis::VariableBinAxis(const std::string &name, size_t nbins, const std::vector< double > &bin_boundaries)

        VariableBinAxis constructor.

        Parameters:
        -----------

        name: 
        Axis name

        nbins: 
        number of bins

        bin_boundaries: 
        Array of size nbins+1 containing low-edges for each bin and upper edge of last bin. 

        """
        _libBornAgainBase.VariableBinAxis_swiginit(self, _libBornAgainBase.new_VariableBinAxis(name, nbins, bin_boundaries))
    __swig_destroy__ = _libBornAgainBase.delete_VariableBinAxis

    def clone(self):
        r"""
        clone(VariableBinAxis self) -> VariableBinAxis
        VariableBinAxis * VariableBinAxis::clone() const

        clone function 

        """
        return _libBornAgainBase.VariableBinAxis_clone(self)

    def size(self):
        r"""
        size(VariableBinAxis self) -> size_t
        size_t VariableBinAxis::size() const

        retrieve the number of bins 

        """
        return _libBornAgainBase.VariableBinAxis_size(self)

    def getBin(self, index):
        r"""
        getBin(VariableBinAxis self, size_t index) -> Bin1D
        Bin1D VariableBinAxis::getBin(size_t index) const

        retrieve a 1d bin for the given index 

        """
        return _libBornAgainBase.VariableBinAxis_getBin(self, index)

    def getMin(self):
        r"""
        getMin(VariableBinAxis self) -> double
        double VariableBinAxis::getMin() const

        Returns value of first point of axis. 

        """
        return _libBornAgainBase.VariableBinAxis_getMin(self)

    def getMax(self):
        r"""
        getMax(VariableBinAxis self) -> double
        double VariableBinAxis::getMax() const

        Returns value of last point of axis. 

        """
        return _libBornAgainBase.VariableBinAxis_getMax(self)

    def getBinCenter(self, index):
        r"""
        getBinCenter(VariableBinAxis self, size_t index) -> double
        double VariableBinAxis::getBinCenter(size_t index) const

        """
        return _libBornAgainBase.VariableBinAxis_getBinCenter(self, index)

    def findClosestIndex(self, value):
        r"""
        findClosestIndex(VariableBinAxis self, double value) -> size_t
        size_t VariableBinAxis::findClosestIndex(double value) const

        find bin index which is best match for given value 

        """
        return _libBornAgainBase.VariableBinAxis_findClosestIndex(self, value)

    def getBinCenters(self):
        r"""
        getBinCenters(VariableBinAxis self) -> vdouble1d_t
        std::vector< double > VariableBinAxis::getBinCenters() const

        """
        return _libBornAgainBase.VariableBinAxis_getBinCenters(self)

    def getBinBoundaries(self):
        r"""
        getBinBoundaries(VariableBinAxis self) -> vdouble1d_t
        std::vector<double> VariableBinAxis::getBinBoundaries() const

        """
        return _libBornAgainBase.VariableBinAxis_getBinBoundaries(self)

    def createClippedAxis(self, left, right):
        r"""
        createClippedAxis(VariableBinAxis self, double left, double right) -> VariableBinAxis
        VariableBinAxis * VariableBinAxis::createClippedAxis(double left, double right) const

        Creates a new clipped axis. 

        """
        return _libBornAgainBase.VariableBinAxis_createClippedAxis(self, left, right)

    def __getitem__(self, i):
        r"""__getitem__(VariableBinAxis self, unsigned int i) -> double"""
        return _libBornAgainBase.VariableBinAxis___getitem__(self, i)

# Register VariableBinAxis in _libBornAgainBase:
_libBornAgainBase.VariableBinAxis_swigregister(VariableBinAxis)

class ConstKBinAxis(VariableBinAxis):
    r"""


    Axis with fixed bin size in sin(angle) space.

    C++ includes: ConstKBinAxis.h

    """

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

    def __init__(self, name, nbins, start, end):
        r"""
        __init__(ConstKBinAxis self, std::string const & name, size_t nbins, double start, double end) -> ConstKBinAxis
        ConstKBinAxis::ConstKBinAxis(const std::string &name, size_t nbins, double start, double end)

        ConstKBinAxis constructor.

        Parameters:
        -----------

        name: 
        Axis name

        nbins: 
        number of bins

        start: 
        low edge of first bin

        end: 
        upper edge of last bin 

        """
        _libBornAgainBase.ConstKBinAxis_swiginit(self, _libBornAgainBase.new_ConstKBinAxis(name, nbins, start, end))
    __swig_destroy__ = _libBornAgainBase.delete_ConstKBinAxis

    def clone(self):
        r"""
        clone(ConstKBinAxis self) -> ConstKBinAxis
        ConstKBinAxis * ConstKBinAxis::clone() const final

        clone function 

        """
        return _libBornAgainBase.ConstKBinAxis_clone(self)

    def createClippedAxis(self, left, right):
        r"""
        createClippedAxis(ConstKBinAxis self, double left, double right) -> ConstKBinAxis
        ConstKBinAxis * ConstKBinAxis::createClippedAxis(double left, double right) const final

        Creates a new clipped axis. 

        """
        return _libBornAgainBase.ConstKBinAxis_createClippedAxis(self, left, right)

# Register ConstKBinAxis in _libBornAgainBase:
_libBornAgainBase.ConstKBinAxis_swigregister(ConstKBinAxis)

class CustomBinAxis(VariableBinAxis):
    r"""


    Axis with fixed bin size in sin(angle) space used for numerical comparison with IsGisaxs. The main feature of the axis is that it produces zero bin sizes.

    C++ includes: CustomBinAxis.h

    """

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

    def __init__(self, name, nbins, start, end):
        r"""
        __init__(CustomBinAxis self, std::string const & name, size_t nbins, double start, double end) -> CustomBinAxis
        CustomBinAxis::CustomBinAxis(const std::string &name, size_t nbins, double start, double end)

        CustomBinAxis constructor.

        Parameters:
        -----------

        name: 
        Axis name

        nbins: 
        number of bins

        start: 
        center of first bin (IsGisaxs convention)

        end: 
        center of last bin (IsGisaxs convention) 

        """
        _libBornAgainBase.CustomBinAxis_swiginit(self, _libBornAgainBase.new_CustomBinAxis(name, nbins, start, end))
    __swig_destroy__ = _libBornAgainBase.delete_CustomBinAxis

    def clone(self):
        r"""
        clone(CustomBinAxis self) -> CustomBinAxis
        CustomBinAxis * CustomBinAxis::clone() const

        clone function 

        """
        return _libBornAgainBase.CustomBinAxis_clone(self)

    def getBin(self, index):
        r"""
        getBin(CustomBinAxis self, size_t index) -> Bin1D
        Bin1D CustomBinAxis::getBin(size_t index) const

        retrieve a 1d bin for the given index 

        """
        return _libBornAgainBase.CustomBinAxis_getBin(self, index)

    def getBinCenters(self):
        r"""
        getBinCenters(CustomBinAxis self) -> vdouble1d_t
        std::vector< double > CustomBinAxis::getBinCenters() const

        """
        return _libBornAgainBase.CustomBinAxis_getBinCenters(self)

    def createClippedAxis(self, left, right):
        r"""
        createClippedAxis(CustomBinAxis self, double left, double right) -> CustomBinAxis
        CustomBinAxis * CustomBinAxis::createClippedAxis(double left, double right) const

        Creates a new clipped axis. 

        """
        return _libBornAgainBase.CustomBinAxis_createClippedAxis(self, left, right)

# Register CustomBinAxis in _libBornAgainBase:
_libBornAgainBase.CustomBinAxis_swigregister(CustomBinAxis)

class FixedBinAxis(IAxis):
    r"""


    Axis with fixed bin size.

    C++ includes: FixedBinAxis.h

    """

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

    def __init__(self, name, nbins, start, end):
        r"""
        __init__(FixedBinAxis self, std::string const & name, size_t nbins, double start, double end) -> FixedBinAxis
        FixedBinAxis::FixedBinAxis(const std::string &name, size_t nbins, double start, double end)

        FixedBinAxis constructor.

        Parameters:
        -----------

        name: 
        Axis name

        nbins: 
        number of bins

        start: 
        low edge of first bin

        end: 
        upper edge of last bin 

        """
        _libBornAgainBase.FixedBinAxis_swiginit(self, _libBornAgainBase.new_FixedBinAxis(name, nbins, start, end))
    __swig_destroy__ = _libBornAgainBase.delete_FixedBinAxis

    def clone(self):
        r"""
        clone(FixedBinAxis self) -> FixedBinAxis
        FixedBinAxis * FixedBinAxis::clone() const

        clone function 

        """
        return _libBornAgainBase.FixedBinAxis_clone(self)

    def size(self):
        r"""
        size(FixedBinAxis self) -> size_t
        size_t FixedBinAxis::size() const

        retrieve the number of bins 

        """
        return _libBornAgainBase.FixedBinAxis_size(self)

    def getBin(self, index):
        r"""
        getBin(FixedBinAxis self, size_t index) -> Bin1D
        Bin1D FixedBinAxis::getBin(size_t index) const

        retrieve a 1d bin for the given index 

        """
        return _libBornAgainBase.FixedBinAxis_getBin(self, index)

    def getMin(self):
        r"""
        getMin(FixedBinAxis self) -> double
        double FixedBinAxis::getMin() const

        Returns value of first point of axis. 

        """
        return _libBornAgainBase.FixedBinAxis_getMin(self)

    def getMax(self):
        r"""
        getMax(FixedBinAxis self) -> double
        double FixedBinAxis::getMax() const

        Returns value of last point of axis. 

        """
        return _libBornAgainBase.FixedBinAxis_getMax(self)

    def getBinCenter(self, index):
        r"""
        getBinCenter(FixedBinAxis self, size_t index) -> double
        double FixedBinAxis::getBinCenter(size_t index) const

        """
        return _libBornAgainBase.FixedBinAxis_getBinCenter(self, index)

    def findClosestIndex(self, value):
        r"""
        findClosestIndex(FixedBinAxis self, double value) -> size_t
        size_t FixedBinAxis::findClosestIndex(double value) const

        find bin index which is best match for given value 

        """
        return _libBornAgainBase.FixedBinAxis_findClosestIndex(self, value)

    def getBinCenters(self):
        r"""
        getBinCenters(FixedBinAxis self) -> vdouble1d_t
        std::vector< double > FixedBinAxis::getBinCenters() const

        """
        return _libBornAgainBase.FixedBinAxis_getBinCenters(self)

    def getBinBoundaries(self):
        r"""
        getBinBoundaries(FixedBinAxis self) -> vdouble1d_t
        std::vector< double > FixedBinAxis::getBinBoundaries() const

        """
        return _libBornAgainBase.FixedBinAxis_getBinBoundaries(self)

    def createClippedAxis(self, left, right):
        r"""
        createClippedAxis(FixedBinAxis self, double left, double right) -> FixedBinAxis
        FixedBinAxis * FixedBinAxis::createClippedAxis(double left, double right) const

        Creates a new clipped axis. 

        """
        return _libBornAgainBase.FixedBinAxis_createClippedAxis(self, left, right)

    def __getitem__(self, i):
        r"""__getitem__(FixedBinAxis self, unsigned int i) -> double"""
        return _libBornAgainBase.FixedBinAxis___getitem__(self, i)

# Register FixedBinAxis in _libBornAgainBase:
_libBornAgainBase.FixedBinAxis_swigregister(FixedBinAxis)

class IPixel(object):
    r"""


    Interface for a function that maps [0,1]x[0,1] to the kvectors in a pixel.

    C++ includes: IPixel.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__ = _libBornAgainBase.delete_IPixel

    def clone(self):
        r"""
        clone(IPixel self) -> IPixel
        virtual IPixel* IPixel::clone() const =0

        """
        return _libBornAgainBase.IPixel_clone(self)

    def createZeroSizePixel(self, x, y):
        r"""
        createZeroSizePixel(IPixel self, double x, double y) -> IPixel
        virtual IPixel* IPixel::createZeroSizePixel(double x, double y) const =0

        """
        return _libBornAgainBase.IPixel_createZeroSizePixel(self, x, y)

    def getK(self, x, y, wavelength):
        r"""
        getK(IPixel self, double x, double y, double wavelength) -> kvector_t
        virtual kvector_t IPixel::getK(double x, double y, double wavelength) const =0

        """
        return _libBornAgainBase.IPixel_getK(self, x, y, wavelength)

    def getIntegrationFactor(self, x, y):
        r"""
        getIntegrationFactor(IPixel self, double x, double y) -> double
        virtual double IPixel::getIntegrationFactor(double x, double y) const =0

        """
        return _libBornAgainBase.IPixel_getIntegrationFactor(self, x, y)

    def getSolidAngle(self):
        r"""
        getSolidAngle(IPixel self) -> double
        virtual double IPixel::getSolidAngle() const =0

        """
        return _libBornAgainBase.IPixel_getSolidAngle(self)

# Register IPixel in _libBornAgainBase:
_libBornAgainBase.IPixel_swigregister(IPixel)

class kvector_t(object):
    r"""


    Forked from CLHEP/Geometry by E. Chernyaev Evgueni.Tcherniaev@cern.ch, then reworked beyond recognition. Removed split of point and vector semantics. Transforms are relegated to a separate class  Transform3D. Three-dimensional vector template, for use with integer, double, or complex components.

    C++ includes: BasicVector3D.h

    """

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

    def __init__(self, *args):
        r"""
        __init__(kvector_t self) -> kvector_t
        __init__(kvector_t self, double const x1, double const y1, double const z1) -> kvector_t
        BasicVector3D< T >::BasicVector3D(const T x1, const T y1, const T z1)

        Constructor from cartesian components. 

        """
        _libBornAgainBase.kvector_t_swiginit(self, _libBornAgainBase.new_kvector_t(*args))

    def x(self):
        r"""
        x(kvector_t self) -> double
        T BasicVector3D< T >::x() const

        Returns x-component in cartesian coordinate system. 

        """
        return _libBornAgainBase.kvector_t_x(self)

    def y(self):
        r"""
        y(kvector_t self) -> double
        T BasicVector3D< T >::y() const

        Returns y-component in cartesian coordinate system. 

        """
        return _libBornAgainBase.kvector_t_y(self)

    def z(self):
        r"""
        z(kvector_t self) -> double
        T BasicVector3D< T >::z() const

        Returns z-component in cartesian coordinate system. 

        """
        return _libBornAgainBase.kvector_t_z(self)

    def setX(self, a):
        r"""
        setX(kvector_t self, double const & a)
        void BasicVector3D< T >::setX(const T &a)

        Sets x-component in cartesian coordinate system. 

        """
        return _libBornAgainBase.kvector_t_setX(self, a)

    def setY(self, a):
        r"""
        setY(kvector_t self, double const & a)
        void BasicVector3D< T >::setY(const T &a)

        Sets y-component in cartesian coordinate system. 

        """
        return _libBornAgainBase.kvector_t_setY(self, a)

    def setZ(self, a):
        r"""
        setZ(kvector_t self, double const & a)
        void BasicVector3D< T >::setZ(const T &a)

        Sets z-component in cartesian coordinate system. 

        """
        return _libBornAgainBase.kvector_t_setZ(self, a)

    def __iadd__(self, v):
        r"""__iadd__(kvector_t self, kvector_t v) -> kvector_t"""
        return _libBornAgainBase.kvector_t___iadd__(self, v)

    def __isub__(self, v):
        r"""__isub__(kvector_t self, kvector_t v) -> kvector_t"""
        return _libBornAgainBase.kvector_t___isub__(self, v)

    def conj(self):
        r"""
        conj(kvector_t self) -> kvector_t
        BasicVector3D< complex_t > BasicVector3D< complex_t >::conj() const

        """
        return _libBornAgainBase.kvector_t_conj(self)

    def mag2(self):
        r"""
        mag2(kvector_t self) -> double
        double BasicVector3D< T >::mag2() const

        Returns magnitude squared of the vector. 

        """
        return _libBornAgainBase.kvector_t_mag2(self)

    def mag(self):
        r"""
        mag(kvector_t self) -> double
        double BasicVector3D< T >::mag() const

        Returns magnitude of the vector. 

        """
        return _libBornAgainBase.kvector_t_mag(self)

    def magxy2(self):
        r"""
        magxy2(kvector_t self) -> double
        double BasicVector3D< T >::magxy2() const

        Returns squared distance from z axis. 

        """
        return _libBornAgainBase.kvector_t_magxy2(self)

    def magxy(self):
        r"""
        magxy(kvector_t self) -> double
        double BasicVector3D< T >::magxy() const

        Returns distance from z axis. 

        """
        return _libBornAgainBase.kvector_t_magxy(self)

    def phi(self):
        r"""
        phi(kvector_t self) -> double
        double BasicVector3D< T >::phi() const

        Returns azimuth angle. 

        """
        return _libBornAgainBase.kvector_t_phi(self)

    def theta(self):
        r"""
        theta(kvector_t self) -> double
        double BasicVector3D< T >::theta() const

        Returns polar angle. 

        """
        return _libBornAgainBase.kvector_t_theta(self)

    def cosTheta(self):
        r"""
        cosTheta(kvector_t self) -> double
        double BasicVector3D< T >::cosTheta() const

        Returns cosine of polar angle. 

        """
        return _libBornAgainBase.kvector_t_cosTheta(self)

    def sin2Theta(self):
        r"""
        sin2Theta(kvector_t self) -> double
        double BasicVector3D< T >::sin2Theta() const

        Returns squared sine of polar angle. 

        """
        return _libBornAgainBase.kvector_t_sin2Theta(self)

    def unit(self):
        r"""
        unit(kvector_t self) -> kvector_t
        BasicVector3D< complex_t > BasicVector3D< complex_t >::unit() const

        """
        return _libBornAgainBase.kvector_t_unit(self)

    def complex(self):
        r"""
        complex(kvector_t self) -> cvector_t
        BasicVector3D<std::complex<double> > BasicVector3D< T >::complex() const

        Returns this, trivially converted to complex type. 

        """
        return _libBornAgainBase.kvector_t_complex(self)

    def real(self):
        r"""
        real(kvector_t self) -> kvector_t
        BasicVector3D< double > BasicVector3D< complex_t >::real() const

        """
        return _libBornAgainBase.kvector_t_real(self)

    def angle(self, v):
        r"""
        angle(kvector_t self, kvector_t v) -> double
        double BasicVector3D< T >::angle(const BasicVector3D< T > &v) const

        Returns angle with respect to another vector. 

        """
        return _libBornAgainBase.kvector_t_angle(self, v)

    def project(self, v):
        r"""
        project(kvector_t self, kvector_t v) -> kvector_t
        BasicVector3D<T> BasicVector3D< T >::project(const BasicVector3D< T > &v) const

        Returns projection of this onto other vector: (this*v)*v/|v|^2. 

        """
        return _libBornAgainBase.kvector_t_project(self, v)
    __swig_destroy__ = _libBornAgainBase.delete_kvector_t

# Register kvector_t in _libBornAgainBase:
_libBornAgainBase.kvector_t_swigregister(kvector_t)

class vector_kvector_t(object):
    r"""Proxy of C++ std::vector< BasicVector3D< double > > class."""

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

    def iterator(self):
        r"""iterator(vector_kvector_t self) -> SwigPyIterator"""
        return _libBornAgainBase.vector_kvector_t_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self):
        r"""__nonzero__(vector_kvector_t self) -> bool"""
        return _libBornAgainBase.vector_kvector_t___nonzero__(self)

    def __bool__(self):
        r"""__bool__(vector_kvector_t self) -> bool"""
        return _libBornAgainBase.vector_kvector_t___bool__(self)

    def __len__(self):
        r"""__len__(vector_kvector_t self) -> std::vector< BasicVector3D< double > >::size_type"""
        return _libBornAgainBase.vector_kvector_t___len__(self)

    def __getslice__(self, i, j):
        r"""__getslice__(vector_kvector_t self, std::vector< BasicVector3D< double > >::difference_type i, std::vector< BasicVector3D< double > >::difference_type j) -> vector_kvector_t"""
        return _libBornAgainBase.vector_kvector_t___getslice__(self, i, j)

    def __setslice__(self, *args):
        r"""
        __setslice__(vector_kvector_t self, std::vector< BasicVector3D< double > >::difference_type i, std::vector< BasicVector3D< double > >::difference_type j)
        __setslice__(vector_kvector_t self, std::vector< BasicVector3D< double > >::difference_type i, std::vector< BasicVector3D< double > >::difference_type j, vector_kvector_t v)
        """
        return _libBornAgainBase.vector_kvector_t___setslice__(self, *args)

    def __delslice__(self, i, j):
        r"""__delslice__(vector_kvector_t self, std::vector< BasicVector3D< double > >::difference_type i, std::vector< BasicVector3D< double > >::difference_type j)"""
        return _libBornAgainBase.vector_kvector_t___delslice__(self, i, j)

    def __delitem__(self, *args):
        r"""
        __delitem__(vector_kvector_t self, std::vector< BasicVector3D< double > >::difference_type i)
        __delitem__(vector_kvector_t self, PySliceObject * slice)
        """
        return _libBornAgainBase.vector_kvector_t___delitem__(self, *args)

    def __getitem__(self, *args):
        r"""
        __getitem__(vector_kvector_t self, PySliceObject * slice) -> vector_kvector_t
        __getitem__(vector_kvector_t self, std::vector< BasicVector3D< double > >::difference_type i) -> kvector_t
        """
        return _libBornAgainBase.vector_kvector_t___getitem__(self, *args)

    def __setitem__(self, *args):
        r"""
        __setitem__(vector_kvector_t self, PySliceObject * slice, vector_kvector_t v)
        __setitem__(vector_kvector_t self, PySliceObject * slice)
        __setitem__(vector_kvector_t self, std::vector< BasicVector3D< double > >::difference_type i, kvector_t x)
        """
        return _libBornAgainBase.vector_kvector_t___setitem__(self, *args)

    def pop(self):
        r"""pop(vector_kvector_t self) -> kvector_t"""
        return _libBornAgainBase.vector_kvector_t_pop(self)

    def append(self, x):
        r"""append(vector_kvector_t self, kvector_t x)"""
        return _libBornAgainBase.vector_kvector_t_append(self, x)

    def empty(self):
        r"""empty(vector_kvector_t self) -> bool"""
        return _libBornAgainBase.vector_kvector_t_empty(self)

    def size(self):
        r"""size(vector_kvector_t self) -> std::vector< BasicVector3D< double > >::size_type"""
        return _libBornAgainBase.vector_kvector_t_size(self)

    def swap(self, v):
        r"""swap(vector_kvector_t self, vector_kvector_t v)"""
        return _libBornAgainBase.vector_kvector_t_swap(self, v)

    def begin(self):
        r"""begin(vector_kvector_t self) -> std::vector< BasicVector3D< double > >::iterator"""
        return _libBornAgainBase.vector_kvector_t_begin(self)

    def end(self):
        r"""end(vector_kvector_t self) -> std::vector< BasicVector3D< double > >::iterator"""
        return _libBornAgainBase.vector_kvector_t_end(self)

    def rbegin(self):
        r"""rbegin(vector_kvector_t self) -> std::vector< BasicVector3D< double > >::reverse_iterator"""
        return _libBornAgainBase.vector_kvector_t_rbegin(self)

    def rend(self):
        r"""rend(vector_kvector_t self) -> std::vector< BasicVector3D< double > >::reverse_iterator"""
        return _libBornAgainBase.vector_kvector_t_rend(self)

    def clear(self):
        r"""clear(vector_kvector_t self)"""
        return _libBornAgainBase.vector_kvector_t_clear(self)

    def get_allocator(self):
        r"""get_allocator(vector_kvector_t self) -> std::vector< BasicVector3D< double > >::allocator_type"""
        return _libBornAgainBase.vector_kvector_t_get_allocator(self)

    def pop_back(self):
        r"""pop_back(vector_kvector_t self)"""
        return _libBornAgainBase.vector_kvector_t_pop_back(self)

    def erase(self, *args):
        r"""
        erase(vector_kvector_t self, std::vector< BasicVector3D< double > >::iterator pos) -> std::vector< BasicVector3D< double > >::iterator
        erase(vector_kvector_t self, std::vector< BasicVector3D< double > >::iterator first, std::vector< BasicVector3D< double > >::iterator last) -> std::vector< BasicVector3D< double > >::iterator
        """
        return _libBornAgainBase.vector_kvector_t_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(vector_kvector_t self) -> vector_kvector_t
        __init__(vector_kvector_t self, vector_kvector_t other) -> vector_kvector_t
        __init__(vector_kvector_t self, std::vector< BasicVector3D< double > >::size_type size) -> vector_kvector_t
        __init__(vector_kvector_t self, std::vector< BasicVector3D< double > >::size_type size, kvector_t value) -> vector_kvector_t
        """
        _libBornAgainBase.vector_kvector_t_swiginit(self, _libBornAgainBase.new_vector_kvector_t(*args))

    def push_back(self, x):
        r"""push_back(vector_kvector_t self, kvector_t x)"""
        return _libBornAgainBase.vector_kvector_t_push_back(self, x)

    def front(self):
        r"""front(vector_kvector_t self) -> kvector_t"""
        return _libBornAgainBase.vector_kvector_t_front(self)

    def back(self):
        r"""back(vector_kvector_t self) -> kvector_t"""
        return _libBornAgainBase.vector_kvector_t_back(self)

    def assign(self, n, x):
        r"""assign(vector_kvector_t self, std::vector< BasicVector3D< double > >::size_type n, kvector_t x)"""
        return _libBornAgainBase.vector_kvector_t_assign(self, n, x)

    def resize(self, *args):
        r"""
        resize(vector_kvector_t self, std::vector< BasicVector3D< double > >::size_type new_size)
        resize(vector_kvector_t self, std::vector< BasicVector3D< double > >::size_type new_size, kvector_t x)
        """
        return _libBornAgainBase.vector_kvector_t_resize(self, *args)

    def insert(self, *args):
        r"""
        insert(vector_kvector_t self, std::vector< BasicVector3D< double > >::iterator pos, kvector_t x) -> std::vector< BasicVector3D< double > >::iterator
        insert(vector_kvector_t self, std::vector< BasicVector3D< double > >::iterator pos, std::vector< BasicVector3D< double > >::size_type n, kvector_t x)
        """
        return _libBornAgainBase.vector_kvector_t_insert(self, *args)

    def reserve(self, n):
        r"""reserve(vector_kvector_t self, std::vector< BasicVector3D< double > >::size_type n)"""
        return _libBornAgainBase.vector_kvector_t_reserve(self, n)

    def capacity(self):
        r"""capacity(vector_kvector_t self) -> std::vector< BasicVector3D< double > >::size_type"""
        return _libBornAgainBase.vector_kvector_t_capacity(self)
    __swig_destroy__ = _libBornAgainBase.delete_vector_kvector_t

# Register vector_kvector_t in _libBornAgainBase:
_libBornAgainBase.vector_kvector_t_swigregister(vector_kvector_t)

class cvector_t(object):
    r"""


    Forked from CLHEP/Geometry by E. Chernyaev Evgueni.Tcherniaev@cern.ch, then reworked beyond recognition. Removed split of point and vector semantics. Transforms are relegated to a separate class  Transform3D. Three-dimensional vector template, for use with integer, double, or complex components.

    C++ includes: BasicVector3D.h

    """

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

    def __init__(self, *args):
        r"""
        __init__(cvector_t self) -> cvector_t
        __init__(cvector_t self, std::complex< double > const x1, std::complex< double > const y1, std::complex< double > const z1) -> cvector_t
        BasicVector3D< T >::BasicVector3D(const T x1, const T y1, const T z1)

        Constructor from cartesian components. 

        """
        _libBornAgainBase.cvector_t_swiginit(self, _libBornAgainBase.new_cvector_t(*args))

    def x(self):
        r"""
        x(cvector_t self) -> std::complex< double >
        T BasicVector3D< T >::x() const

        Returns x-component in cartesian coordinate system. 

        """
        return _libBornAgainBase.cvector_t_x(self)

    def y(self):
        r"""
        y(cvector_t self) -> std::complex< double >
        T BasicVector3D< T >::y() const

        Returns y-component in cartesian coordinate system. 

        """
        return _libBornAgainBase.cvector_t_y(self)

    def z(self):
        r"""
        z(cvector_t self) -> std::complex< double >
        T BasicVector3D< T >::z() const

        Returns z-component in cartesian coordinate system. 

        """
        return _libBornAgainBase.cvector_t_z(self)

    def setX(self, a):
        r"""
        setX(cvector_t self, std::complex< double > const & a)
        void BasicVector3D< T >::setX(const T &a)

        Sets x-component in cartesian coordinate system. 

        """
        return _libBornAgainBase.cvector_t_setX(self, a)

    def setY(self, a):
        r"""
        setY(cvector_t self, std::complex< double > const & a)
        void BasicVector3D< T >::setY(const T &a)

        Sets y-component in cartesian coordinate system. 

        """
        return _libBornAgainBase.cvector_t_setY(self, a)

    def setZ(self, a):
        r"""
        setZ(cvector_t self, std::complex< double > const & a)
        void BasicVector3D< T >::setZ(const T &a)

        Sets z-component in cartesian coordinate system. 

        """
        return _libBornAgainBase.cvector_t_setZ(self, a)

    def __iadd__(self, v):
        r"""__iadd__(cvector_t self, cvector_t v) -> cvector_t"""
        return _libBornAgainBase.cvector_t___iadd__(self, v)

    def __isub__(self, v):
        r"""__isub__(cvector_t self, cvector_t v) -> cvector_t"""
        return _libBornAgainBase.cvector_t___isub__(self, v)

    def conj(self):
        r"""
        conj(cvector_t self) -> cvector_t
        BasicVector3D< complex_t > BasicVector3D< complex_t >::conj() const

        """
        return _libBornAgainBase.cvector_t_conj(self)

    def mag2(self):
        r"""
        mag2(cvector_t self) -> double
        double BasicVector3D< T >::mag2() const

        Returns magnitude squared of the vector. 

        """
        return _libBornAgainBase.cvector_t_mag2(self)

    def mag(self):
        r"""
        mag(cvector_t self) -> double
        double BasicVector3D< T >::mag() const

        Returns magnitude of the vector. 

        """
        return _libBornAgainBase.cvector_t_mag(self)

    def magxy2(self):
        r"""
        magxy2(cvector_t self) -> double
        double BasicVector3D< T >::magxy2() const

        Returns squared distance from z axis. 

        """
        return _libBornAgainBase.cvector_t_magxy2(self)

    def magxy(self):
        r"""
        magxy(cvector_t self) -> double
        double BasicVector3D< T >::magxy() const

        Returns distance from z axis. 

        """
        return _libBornAgainBase.cvector_t_magxy(self)

    def unit(self):
        r"""
        unit(cvector_t self) -> cvector_t
        BasicVector3D< complex_t > BasicVector3D< complex_t >::unit() const

        """
        return _libBornAgainBase.cvector_t_unit(self)

    def real(self):
        r"""
        real(cvector_t self) -> kvector_t
        BasicVector3D< double > BasicVector3D< complex_t >::real() const

        """
        return _libBornAgainBase.cvector_t_real(self)

    def project(self, v):
        r"""
        project(cvector_t self, cvector_t v) -> cvector_t
        BasicVector3D<T> BasicVector3D< T >::project(const BasicVector3D< T > &v) const

        Returns projection of this onto other vector: (this*v)*v/|v|^2. 

        """
        return _libBornAgainBase.cvector_t_project(self, v)
    __swig_destroy__ = _libBornAgainBase.delete_cvector_t

# Register cvector_t in _libBornAgainBase:
_libBornAgainBase.cvector_t_swigregister(cvector_t)

class vector_cvector_t(object):
    r"""Proxy of C++ std::vector< BasicVector3D< std::complex< double > > > class."""

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

    def iterator(self):
        r"""iterator(vector_cvector_t self) -> SwigPyIterator"""
        return _libBornAgainBase.vector_cvector_t_iterator(self)
    def __iter__(self):
        return self.iterator()

    def __nonzero__(self):
        r"""__nonzero__(vector_cvector_t self) -> bool"""
        return _libBornAgainBase.vector_cvector_t___nonzero__(self)

    def __bool__(self):
        r"""__bool__(vector_cvector_t self) -> bool"""
        return _libBornAgainBase.vector_cvector_t___bool__(self)

    def __len__(self):
        r"""__len__(vector_cvector_t self) -> std::vector< BasicVector3D< std::complex< double > > >::size_type"""
        return _libBornAgainBase.vector_cvector_t___len__(self)

    def __getslice__(self, i, j):
        r"""__getslice__(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::difference_type i, std::vector< BasicVector3D< std::complex< double > > >::difference_type j) -> vector_cvector_t"""
        return _libBornAgainBase.vector_cvector_t___getslice__(self, i, j)

    def __setslice__(self, *args):
        r"""
        __setslice__(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::difference_type i, std::vector< BasicVector3D< std::complex< double > > >::difference_type j)
        __setslice__(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::difference_type i, std::vector< BasicVector3D< std::complex< double > > >::difference_type j, vector_cvector_t v)
        """
        return _libBornAgainBase.vector_cvector_t___setslice__(self, *args)

    def __delslice__(self, i, j):
        r"""__delslice__(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::difference_type i, std::vector< BasicVector3D< std::complex< double > > >::difference_type j)"""
        return _libBornAgainBase.vector_cvector_t___delslice__(self, i, j)

    def __delitem__(self, *args):
        r"""
        __delitem__(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::difference_type i)
        __delitem__(vector_cvector_t self, PySliceObject * slice)
        """
        return _libBornAgainBase.vector_cvector_t___delitem__(self, *args)

    def __getitem__(self, *args):
        r"""
        __getitem__(vector_cvector_t self, PySliceObject * slice) -> vector_cvector_t
        __getitem__(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::difference_type i) -> cvector_t
        """
        return _libBornAgainBase.vector_cvector_t___getitem__(self, *args)

    def __setitem__(self, *args):
        r"""
        __setitem__(vector_cvector_t self, PySliceObject * slice, vector_cvector_t v)
        __setitem__(vector_cvector_t self, PySliceObject * slice)
        __setitem__(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::difference_type i, cvector_t x)
        """
        return _libBornAgainBase.vector_cvector_t___setitem__(self, *args)

    def pop(self):
        r"""pop(vector_cvector_t self) -> cvector_t"""
        return _libBornAgainBase.vector_cvector_t_pop(self)

    def append(self, x):
        r"""append(vector_cvector_t self, cvector_t x)"""
        return _libBornAgainBase.vector_cvector_t_append(self, x)

    def empty(self):
        r"""empty(vector_cvector_t self) -> bool"""
        return _libBornAgainBase.vector_cvector_t_empty(self)

    def size(self):
        r"""size(vector_cvector_t self) -> std::vector< BasicVector3D< std::complex< double > > >::size_type"""
        return _libBornAgainBase.vector_cvector_t_size(self)

    def swap(self, v):
        r"""swap(vector_cvector_t self, vector_cvector_t v)"""
        return _libBornAgainBase.vector_cvector_t_swap(self, v)

    def begin(self):
        r"""begin(vector_cvector_t self) -> std::vector< BasicVector3D< std::complex< double > > >::iterator"""
        return _libBornAgainBase.vector_cvector_t_begin(self)

    def end(self):
        r"""end(vector_cvector_t self) -> std::vector< BasicVector3D< std::complex< double > > >::iterator"""
        return _libBornAgainBase.vector_cvector_t_end(self)

    def rbegin(self):
        r"""rbegin(vector_cvector_t self) -> std::vector< BasicVector3D< std::complex< double > > >::reverse_iterator"""
        return _libBornAgainBase.vector_cvector_t_rbegin(self)

    def rend(self):
        r"""rend(vector_cvector_t self) -> std::vector< BasicVector3D< std::complex< double > > >::reverse_iterator"""
        return _libBornAgainBase.vector_cvector_t_rend(self)

    def clear(self):
        r"""clear(vector_cvector_t self)"""
        return _libBornAgainBase.vector_cvector_t_clear(self)

    def get_allocator(self):
        r"""get_allocator(vector_cvector_t self) -> std::vector< BasicVector3D< std::complex< double > > >::allocator_type"""
        return _libBornAgainBase.vector_cvector_t_get_allocator(self)

    def pop_back(self):
        r"""pop_back(vector_cvector_t self)"""
        return _libBornAgainBase.vector_cvector_t_pop_back(self)

    def erase(self, *args):
        r"""
        erase(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::iterator pos) -> std::vector< BasicVector3D< std::complex< double > > >::iterator
        erase(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::iterator first, std::vector< BasicVector3D< std::complex< double > > >::iterator last) -> std::vector< BasicVector3D< std::complex< double > > >::iterator
        """
        return _libBornAgainBase.vector_cvector_t_erase(self, *args)

    def __init__(self, *args):
        r"""
        __init__(vector_cvector_t self) -> vector_cvector_t
        __init__(vector_cvector_t self, vector_cvector_t other) -> vector_cvector_t
        __init__(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::size_type size) -> vector_cvector_t
        __init__(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::size_type size, cvector_t value) -> vector_cvector_t
        """
        _libBornAgainBase.vector_cvector_t_swiginit(self, _libBornAgainBase.new_vector_cvector_t(*args))

    def push_back(self, x):
        r"""push_back(vector_cvector_t self, cvector_t x)"""
        return _libBornAgainBase.vector_cvector_t_push_back(self, x)

    def front(self):
        r"""front(vector_cvector_t self) -> cvector_t"""
        return _libBornAgainBase.vector_cvector_t_front(self)

    def back(self):
        r"""back(vector_cvector_t self) -> cvector_t"""
        return _libBornAgainBase.vector_cvector_t_back(self)

    def assign(self, n, x):
        r"""assign(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::size_type n, cvector_t x)"""
        return _libBornAgainBase.vector_cvector_t_assign(self, n, x)

    def resize(self, *args):
        r"""
        resize(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::size_type new_size)
        resize(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::size_type new_size, cvector_t x)
        """
        return _libBornAgainBase.vector_cvector_t_resize(self, *args)

    def insert(self, *args):
        r"""
        insert(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::iterator pos, cvector_t x) -> std::vector< BasicVector3D< std::complex< double > > >::iterator
        insert(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::iterator pos, std::vector< BasicVector3D< std::complex< double > > >::size_type n, cvector_t x)
        """
        return _libBornAgainBase.vector_cvector_t_insert(self, *args)

    def reserve(self, n):
        r"""reserve(vector_cvector_t self, std::vector< BasicVector3D< std::complex< double > > >::size_type n)"""
        return _libBornAgainBase.vector_cvector_t_reserve(self, n)

    def capacity(self):
        r"""capacity(vector_cvector_t self) -> std::vector< BasicVector3D< std::complex< double > > >::size_type"""
        return _libBornAgainBase.vector_cvector_t_capacity(self)
    __swig_destroy__ = _libBornAgainBase.delete_vector_cvector_t

# Register vector_cvector_t in _libBornAgainBase:
_libBornAgainBase.vector_cvector_t_swigregister(vector_cvector_t)