comparison python_to_octave.cc @ 79:d60165bfc849

Support 0D Numeric arrays
author Jaroslav Hajek <highegg@gmail.com>
date Fri, 18 Sep 2009 10:31:15 +0200
parents b0991511a16d
children 2e8b52a5e1b1
comparison
equal deleted inserted replaced
78:2357a9a5fc34 79:d60165bfc849
54 for (int i = 0; i < pyarr->dimensions[dimension]; i++) { 54 for (int i = 0; i < pyarr->dimensions[dimension]; i++) {
55 matrix.elem(matindex + i*matstride) 55 matrix.elem(matindex + i*matstride)
56 = *(PythonPrimitive*) 56 = *(PythonPrimitive*)
57 &ptr[offset + i*pyarr->strides[dimension]]; 57 &ptr[offset + i*pyarr->strides[dimension]];
58 } 58 }
59 } else if (pyarr->nd == 0) {
60 matrix.elem(0) = *(PythonPrimitive*) ptr;
59 } else { 61 } else {
60 for (int i = 0; i < pyarr->dimensions[dimension]; i++) { 62 for (int i = 0; i < pyarr->dimensions[dimension]; i++) {
61 copy_pyarrobj_to_octarray<PythonPrimitive, OctaveBase>( 63 copy_pyarrobj_to_octarray<PythonPrimitive, OctaveBase>(
62 matrix, 64 matrix,
63 pyarr, 65 pyarr,
83 PyObject *pobj = *(PyObject **) 85 PyObject *pobj = *(PyObject **)
84 &ptr[offset + i*pyarr->strides[dimension]]; 86 &ptr[offset + i*pyarr->strides[dimension]];
85 pyobj_to_octvalue (matrix.elem(matindex + i*matstride), 87 pyobj_to_octvalue (matrix.elem(matindex + i*matstride),
86 object(handle<PyObject> (borrowed (pobj)))); 88 object(handle<PyObject> (borrowed (pobj))));
87 } 89 }
90 } else if (pyarr->nd == 0) {
91 PyObject *pobj = *(PyObject **) ptr;
92 pyobj_to_octvalue (matrix.elem(0),
93 object(handle<PyObject> (borrowed (pobj))));
88 } else { 94 } else {
89 for (int i = 0; i < pyarr->dimensions[dimension]; i++) { 95 for (int i = 0; i < pyarr->dimensions[dimension]; i++) {
90 copy_pyarrobj_to_octarray<PyObject *, Cell>( 96 copy_pyarrobj_to_octarray<PyObject *, Cell>(
91 matrix, 97 matrix,
92 pyarr, 98 pyarr,
202 octvalue = array; 208 octvalue = array;
203 } 209 }
204 210
205 static void pyarr_to_octvalue(octave_value &octvalue, 211 static void pyarr_to_octvalue(octave_value &octvalue,
206 const PyArrayObject *pyarr) { 212 const PyArrayObject *pyarr) {
207 if (pyarr->nd < 1)
208 throw object_convert_exception("Less than 1 dimensions not supported");
209 dim_vector dims; 213 dim_vector dims;
210 switch (pyarr->nd) { 214 switch (pyarr->nd) {
215 case 0:
216 dims = dim_vector (1, 1);
217 break;
211 case 1: 218 case 1:
212 // Always make PyArray vectors row vectors. 219 // Always make PyArray vectors row vectors.
213 dims = dim_vector(1, pyarr->dimensions[0]); 220 dims = dim_vector(1, pyarr->dimensions[0]);
214 break; 221 break;
215 default: 222 default: