Example #1
0
def convert_from_numpy_array(ll_a):
    data = (ll_a + NumpyData.data_offset)[0]
    strides = ffi.cast("intptr_t*", (ll_a + NumpyData.strides_offset)[0])
    dims = ffi.cast("intptr_t*", (ll_a + NumpyData.dimensions_offset)[0])
    nd = ffi.cast('int *', (ll_a + NumpyData.nd_offset))[0]
    dims = [dims[i] for i in range(nd)]
    strides = [strides[i] for i in range(nd)]
    data = ffi.buffer(ffi.cast("char*", data), sys.maxint)
    # XXX strides
    descr = ffi.cast('char*', (ll_a + NumpyData.descr_offset)[0])
    type_num = ffi.cast('int*', descr + NumpyData.type_num_offset)[0]
    dtype = numpy_types[type_num]
    return numpy.ndarray(dims, buffer=data, dtype=dtype, strides=strides)
Example #2
0
def convert_from_numpy_array(ll_a):
    data = (ll_a + NumpyData.data_offset)[0]
    strides = ffi.cast("intptr_t*", (ll_a + NumpyData.strides_offset)[0])
    dims = ffi.cast("intptr_t*", (ll_a + NumpyData.dimensions_offset)[0])
    nd = ffi.cast('int *', (ll_a + NumpyData.nd_offset))[0]
    dims = [dims[i] for i in range(nd)]
    strides = [strides[i] for i in range(nd)]
    data = ffi.buffer(ffi.cast("char*", data), sys.maxint)
    # XXX strides
    descr = ffi.cast('char*', (ll_a + NumpyData.descr_offset)[0])
    type_num = ffi.cast('int*', descr + NumpyData.type_num_offset)[0]
    dtype = numpy_types[type_num]
    return numpy.ndarray(dims, buffer=data, dtype=dtype, strides=strides)
Example #3
0
 def test_pass_ndarray_object_to_c(self):
     from _numpypy.multiarray import ndarray
     mod = self.import_extension('foo', [
             ("check_array", "METH_VARARGS",
             '''
                 PyObject* obj;
                 if (!PyArg_ParseTuple(args, "O!", &PyArray_Type, &obj))
                     return NULL;
                 Py_INCREF(obj);
                 return obj;
             '''),
             ], prologue='#include <numpy/arrayobject.h>')
     array = ndarray((3, 4), dtype='d')
     assert mod.check_array(array) is array
     raises(TypeError, "mod.check_array(42)")
Example #4
0
 def test_pass_ndarray_object_to_c(self):
     from _numpypy.multiarray import ndarray
     mod = self.import_extension('foo', [
         ("check_array", "METH_VARARGS", '''
                 PyObject* obj;
                 if (!PyArg_ParseTuple(args, "O!", &PyArray_Type, &obj))
                     return NULL;
                 Py_INCREF(obj);
                 return obj;
             '''),
     ],
                                 prologue='#include <numpy/arrayobject.h>')
     array = ndarray((3, 4), dtype='d')
     assert mod.check_array(array) is array
     raises(TypeError, "mod.check_array(42)")