    '''
        module gls_setup, file gsl_setup.py

        load the gsl shared libraries and ctypes

            consider gsl_set_error_handler_off();
	    (gsl errors cause core dumps which I choose to live with for now)
    '''
    import sys
    if sys.version_info[0] != 3:
        raise Exception('This code has been tried in python version 3')

    from ctypes import *
    from array import array

    # probably add some OS specific code here to encompass more than linux
    # load dependencies first, making the symbols available.
    gslcblas = CDLL('libgslcblas.so',mode=RTLD_GLOBAL)
    gsl = CDLL('libgsl.so')

    def setup(f,argument_types_list,result_type=c_long):
        f.argtypes = argument_types_list
        f.restype = result_type
        return f

    def as_array(a,typecode='d'):
        return (
            a if (isinstance(a,array) and a.typecode == typecode)
            else array(typecode,a)
        )

    def ADDRESS(a):
        return a.buffer_info()[0]


