Changeset: faf3f1a826b1 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=faf3f1a826b1
Modified Files:
monetdb5/extras/pyapi/pyapi.c
Branch: pyapi
Log Message:
Use PyArray_DATA instead of PyArray_SETITEM to avoid extra copying of Python
objects.
diffs (63 lines):
diff --git a/monetdb5/extras/pyapi/pyapi.c b/monetdb5/extras/pyapi/pyapi.c
--- a/monetdb5/extras/pyapi/pyapi.c
+++ b/monetdb5/extras/pyapi/pyapi.c
@@ -1770,8 +1770,7 @@ PyObject *PyArrayObject_FromBAT(PyInput
msg = createException(MAL, "pyapi.eval",
"Failed to decode string as UTF-8.");
goto wrapup;
}
- PyArray_SETITEM((PyArrayObject*)vararray,
PyArray_GETPTR1((PyArrayObject*)vararray, j - t_start), obj);
- Py_DECREF(obj);
+
((PyObject**)PyArray_DATA((PyArrayObject*)vararray))[j - t_start] = obj;
}
if (j == t_end) break;
j++;
@@ -1802,8 +1801,7 @@ PyObject *PyArrayObject_FromBAT(PyInput
msg = createException(MAL, "pyapi.eval",
"Failed to create string.");
goto wrapup;
}
- PyArray_SETITEM((PyArrayObject*)vararray,
PyArray_GETPTR1((PyArrayObject*)vararray, j - t_start), obj);
- Py_DECREF(obj);
+
((PyObject**)PyArray_DATA((PyArrayObject*)vararray))[j - t_start] = obj;
}
if (j == t_end) break;
j++;
@@ -1881,8 +1879,7 @@ PyObject *PyArrayObject_FromBAT(PyInput
msg = createException(MAL, "pyapi.eval", "Failed
to create string.");
goto wrapup;
}
- PyArray_SETITEM((PyArrayObject*)vararray,
PyArray_GETPTR1((PyArrayObject*)vararray, j - t_start), obj);
- Py_DECREF(obj);
+ ((PyObject**)PyArray_DATA((PyArrayObject*)vararray))[j
- t_start] = obj;
}
if (j == t_end) break;
j++;
@@ -1914,8 +1911,7 @@ PyObject *PyArrayObject_FromBAT(PyInput
PyObject *obj;
const hge *t = (const hge *) BUNtail(li, p);
obj = PyLong_FromHge(*t);
- PyArray_SETITEM((PyArrayObject*)vararray,
PyArray_GETPTR1((PyArrayObject*)vararray, j - t_start), obj);
- Py_DECREF(obj);
+ ((PyObject**)PyArray_DATA((PyArrayObject*)vararray))[j -
t_start] = obj;
}
if (j == t_end) break;
j++;
@@ -1936,8 +1932,7 @@ PyObject *PyArrayObject_FromBAT(PyInput
PyObject *mafunc =
PyObject_GetAttrString(PyImport_Import(PyString_FromString("numpy.ma")),
"masked_array");
PyObject *maargs = PyTuple_New(2);
// We will now construct the Masked array, we start by setting
everything to False
- PyArrayObject* nullmask = (PyArrayObject*) PyArray_ZEROS(1,
- (npy_intp[1]) {(t_end - t_start)}, NPY_BOOL, 0);
+ PyArrayObject* nullmask = (PyArrayObject*) PyArray_ZEROS(1,
(npy_intp[1]) {(t_end - t_start)}, NPY_BOOL, 0);
// Now we will loop over the BAT, for every value that is Null we
set the corresponding mask attribute to True
const void *nil = ATOMnilptr(b->ttype);
@@ -1946,8 +1941,7 @@ PyObject *PyArrayObject_FromBAT(PyInput
for (j = 0; j < t_end - t_start; j++) {
if ((*atomcmp)(BUNtail(bi, BUNfirst(b) + t_start + j), nil) ==
0) {
- // Houston we have a NULL
- PyArray_SETITEM(nullmask, PyArray_GETPTR1(nullmask, j),
Py_True);
+ ((bool*)PyArray_DATA(nullmask))[j] = true;
}
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list