Mercurial > pytave
annotate octave_to_python.cc @ 70:e3de0f6f1552
experimental NumPy support
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Fri, 19 Jun 2009 13:51:36 +0200 |
parents | 2f4d6286fb36 |
children | b0991511a16d |
rev | line source |
---|---|
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
1 /* |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
2 * Copyright 2008 David Grundberg, HÃ¥kan Fors Nilsson |
46 | 3 * Copyright 2009 VZLU Prague |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
4 * |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
5 * This file is part of Pytave. |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
6 * |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
7 * Pytave is free software: you can redistribute it and/or modify |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
8 * it under the terms of the GNU General Public License as published by |
6 | 9 * the Free Software Foundation, either version 3 of the License, or |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
10 * (at your option) any later version. |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
11 * |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
12 * Pytave is distributed in the hope that it will be useful, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
15 * GNU General Public License for more details. |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
16 * |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
17 * You should have received a copy of the GNU General Public License |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
18 * along with Pytave. If not, see <http://www.gnu.org/licenses/>. |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
19 */ |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
20 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
21 #include "arrayobjectdefs.h" |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
22 #include <boost/python.hpp> |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
23 #include <boost/python/numeric.hpp> |
45
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
24 #include <boost/type_traits/integral_constant.hpp> |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
25 #undef HAVE_STAT /* both boost::python and octave define HAVE_STAT... */ |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
26 #include <octave/oct.h> |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
27 #include <octave/Matrix.h> |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
28 #include <octave/ov.h> |
9 | 29 #include <octave/oct-map.h> |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
30 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
31 #include <iostream> |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
32 #include "pytavedefs.h" |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
33 #include "exceptions.h" |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
34 #include "octave_to_python.h" |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
35 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
36 /* From docs: |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
37 * Note that the names of the element type constants refer to the C data |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
38 * types, not the Python data types. A Python int is equivalent to a C long, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
39 * and a Python float corresponds to a C double . Many of the element types |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
40 * listed above do not have corresponding Python scalar types |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
41 * (e.g. PyArray_INT ). |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
42 */ |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
43 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
44 using namespace std; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
45 using namespace boost::python; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
46 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
47 namespace pytave { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
48 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
49 template <class PythonPrimitive, class OctaveBase> |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
50 static void copy_octarray_to_pyarrobj( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
51 PyArrayObject *pyarr, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
52 const OctaveBase &matrix, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
53 const unsigned int matindex, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
54 const unsigned int matstride, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
55 const int dimension, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
56 const unsigned int offset) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
57 unsigned char *ptr = (unsigned char*) pyarr->data; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
58 if (dimension == pyarr->nd - 1) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
59 // Last dimension, base case |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
60 for (int i = 0; i < pyarr->dimensions[dimension]; i++) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
61 *(PythonPrimitive *)&ptr[offset + i*pyarr->strides[dimension]] |
45
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
62 = matrix.elem(matindex + i*matstride); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
63 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
64 } else { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
65 for (int i = 0; i < pyarr->dimensions[dimension]; i++) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
66 copy_octarray_to_pyarrobj<PythonPrimitive, OctaveBase>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
67 pyarr, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
68 matrix, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
69 matindex + i*matstride, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
70 matstride * pyarr->dimensions[dimension], |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
71 dimension + 1, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
72 offset + i*pyarr->strides[dimension]); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
73 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
74 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
75 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
76 |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
77 template <> |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
78 void copy_octarray_to_pyarrobj<PyObject *, Cell>( |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
79 PyArrayObject *pyarr, |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
80 const Cell &matrix, |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
81 const unsigned int matindex, |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
82 const unsigned int matstride, |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
83 const int dimension, |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
84 const unsigned int offset) { |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
85 unsigned char *ptr = (unsigned char*) pyarr->data; |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
86 if (dimension == pyarr->nd - 1) { |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
87 // Last dimension, base case |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
88 for (int i = 0; i < pyarr->dimensions[dimension]; i++) { |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
89 object pyobj; |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
90 octvalue_to_pyobj (pyobj, matrix.elem(matindex + i*matstride)); |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
91 Py_INCREF (pyobj.ptr()); |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
92 *(PyObject **)&ptr[offset + i*pyarr->strides[dimension]] |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
93 = pyobj.ptr(); |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
94 } |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
95 } else { |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
96 for (int i = 0; i < pyarr->dimensions[dimension]; i++) { |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
97 copy_octarray_to_pyarrobj<PyObject *, Cell>( |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
98 pyarr, |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
99 matrix, |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
100 matindex + i*matstride, |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
101 matstride * pyarr->dimensions[dimension], |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
102 dimension + 1, |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
103 offset + i*pyarr->strides[dimension]); |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
104 } |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
105 } |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
106 } |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
107 |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
108 static PyArrayObject *createPyArr(const dim_vector &dims, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
109 int pyarrtype) { |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
110 int len = dims.length(); |
70
e3de0f6f1552
experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents:
68
diff
changeset
|
111 npy_intp dimensions[len]; |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
112 for (int i = 0; i < dims.length(); i++) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
113 dimensions[i] = dims(i); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
114 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
115 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
116 return (PyArrayObject *)PyArray_FromDims( |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
117 len, dimensions, pyarrtype); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
118 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
119 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
120 template <class PythonPrimitive, class OctaveBase> |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
121 static PyArrayObject *create_array(const OctaveBase &octarr, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
122 int pyarraytype) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
123 PyArrayObject *pyarr = createPyArr(octarr.dims(), pyarraytype); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
124 try { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
125 copy_octarray_to_pyarrobj |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
126 <PythonPrimitive, OctaveBase>(pyarr, octarr, 0, 1, 0, 0); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
127 } catch (value_convert_exception &pe) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
128 Py_DECREF(pyarr); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
129 throw; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
130 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
131 return pyarr; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
132 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
133 |
45
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
134 template <class PythonPrimitive, class OctaveBase> |
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
135 static PyArrayObject *create_array(const OctaveBase &octarr, |
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
136 int pyarraytype, boost::true_type) { |
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
137 return create_array<PythonPrimitive, OctaveBase> (octarr, pyarraytype); |
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
138 } |
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
139 |
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
140 template <class PythonPrimitive, class OctaveBase> |
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
141 static PyArrayObject *create_array(const OctaveBase &octarr, |
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
142 int pyarraytype, boost::false_type) { |
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
143 assert(0); |
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
144 return 0; |
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
145 } |
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
146 |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
147 template <class CLASS, size_t bytes> |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
148 inline static PyArrayObject *create_uint_array(CLASS value) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
149 if (bytes == sizeof(int)) { |
47
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
150 boost::integral_constant<bool, bytes == sizeof(int)> inst; |
45
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
151 return create_array<unsigned int, CLASS>(value, PyArray_UINT, inst); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
152 } else if (bytes == sizeof(char)) { |
47
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
153 boost::integral_constant<bool, bytes == sizeof(char)> inst; |
45
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
154 return create_array<unsigned char, CLASS>(value, PyArray_UBYTE, inst); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
155 } else if (bytes == sizeof(short)) { |
47
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
156 boost::integral_constant<bool, |
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
157 bytes == sizeof(short) && bytes != sizeof(int)> inst; |
45
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
158 return create_array<unsigned short, CLASS>(value, PyArray_USHORT, inst); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
159 } else { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
160 ostringstream os; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
161 os << "Numeric arrays doesn't support unsigned " << (bytes*8) |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
162 << "-bit values on this architecture."; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
163 throw value_convert_exception(os.str()); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
164 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
165 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
166 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
167 template <class CLASS, size_t bytes> |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
168 inline static PyArrayObject *create_sint_array(CLASS value) { |
47
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
169 if (bytes == sizeof(int)) { |
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
170 // We test int first since we prefer int to other datatypes of the |
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
171 // same size. |
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
172 boost::integral_constant<bool, bytes == sizeof(int)> inst; |
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
173 return create_array<signed int, CLASS>(value, PyArray_INT, inst); |
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
174 } else if (bytes == sizeof(long)) { |
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
175 boost::integral_constant<bool, |
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
176 bytes==sizeof(long) && bytes != sizeof(int)> inst; |
45
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
177 return create_array<long, CLASS>(value, PyArray_LONG, inst); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
178 } else if (bytes == sizeof(char)) { |
47
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
179 boost::integral_constant<bool, bytes == sizeof(char)> inst; |
45
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
180 return create_array<signed char, CLASS>(value, PyArray_SBYTE, inst); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
181 } else if (bytes == sizeof(short)) { |
47
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
182 boost::integral_constant<bool, |
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
183 bytes==sizeof(short) && bytes != sizeof(int)> inst; |
45
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
184 return create_array<signed short, CLASS>(value, PyArray_SHORT, inst); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
185 } else { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
186 ostringstream os; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
187 os << "Numeric arrays doesn't support signed " << (bytes*8) |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
188 << "-bit values on this architecture."; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
189 throw value_convert_exception(os.str()); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
190 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
191 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
192 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
193 static PyArrayObject *octvalue_to_pyarrobj(const octave_value &matrix) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
194 if (matrix.is_double_type ()) { |
46 | 195 if (matrix.is_complex_type ()) { |
196 return create_array<Complex, ComplexNDArray> | |
197 (matrix.complex_array_value(), PyArray_CDOUBLE); | |
198 } else if (matrix.is_real_type()) { | |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
199 return create_array<double, NDArray>(matrix.array_value(), |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
200 PyArray_DOUBLE); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
201 } else |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
202 throw value_convert_exception("Unknown double matrix type"); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
203 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
204 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
205 if (matrix.is_single_type ()) { |
46 | 206 if (matrix.is_complex_type ()) { |
207 return create_array<FloatComplex, FloatComplexNDArray> | |
208 (matrix.float_complex_array_value(), PyArray_CFLOAT); | |
209 } else if (matrix.is_real_type()) { | |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
210 return create_array<float, FloatNDArray>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
211 matrix.float_array_value(), PyArray_FLOAT); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
212 } else |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
213 throw value_convert_exception("Unknown float matrix type"); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
214 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
215 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
216 if (matrix.is_int64_type()) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
217 return create_sint_array<int64NDArray, sizeof(int64_t)>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
218 matrix.int64_array_value()); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
219 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
220 if (matrix.is_uint32_type()) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
221 return create_uint_array<uint32NDArray, sizeof(uint32_t)>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
222 matrix.uint32_array_value()); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
223 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
224 if (matrix.is_int32_type()) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
225 return create_sint_array<int32NDArray, sizeof(int32_t)>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
226 matrix.int32_array_value()); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
227 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
228 if (matrix.is_uint16_type()) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
229 return create_uint_array<uint16NDArray, sizeof(uint16_t)>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
230 matrix.uint16_array_value()); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
231 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
232 if (matrix.is_int16_type()) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
233 return create_sint_array<int16NDArray, sizeof(int16_t)>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
234 matrix.int16_array_value()); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
235 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
236 if (matrix.is_uint8_type()) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
237 return create_uint_array<uint8NDArray, sizeof(uint8_t)>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
238 matrix.uint8_array_value()); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
239 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
240 if (matrix.is_int8_type()) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
241 return create_sint_array<int8NDArray, sizeof(int8_t)>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
242 matrix.int8_array_value()); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
243 } |
68
2f4d6286fb36
make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
56
diff
changeset
|
244 if (matrix.is_bool_type()) { |
70
e3de0f6f1552
experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents:
68
diff
changeset
|
245 #ifdef HAVE_NUMPY |
e3de0f6f1552
experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents:
68
diff
changeset
|
246 // NumPY has logical arrays, and even provides an old-style #define. |
e3de0f6f1552
experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents:
68
diff
changeset
|
247 return create_array<bool, boolNDArray>( |
e3de0f6f1552
experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents:
68
diff
changeset
|
248 matrix.bool_array_value(), PyArray_BOOL); |
e3de0f6f1552
experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents:
68
diff
changeset
|
249 #else |
68
2f4d6286fb36
make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
56
diff
changeset
|
250 // Numeric does not support bools, use uint8. |
2f4d6286fb36
make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
56
diff
changeset
|
251 return create_uint_array<uint8NDArray, sizeof(uint8_t)>( |
2f4d6286fb36
make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
56
diff
changeset
|
252 matrix.uint8_array_value()); |
70
e3de0f6f1552
experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents:
68
diff
changeset
|
253 #endif |
68
2f4d6286fb36
make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
56
diff
changeset
|
254 } |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
255 if (matrix.is_string()) { |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
256 return create_array<char, charNDArray>( |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
257 matrix.char_array_value(), PyArray_CHAR); |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
258 } |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
259 if (matrix.is_cell()) { |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
260 return create_array<PyObject *, Cell>( |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
261 matrix.cell_value(), PyArray_OBJECT); |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
262 } |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
263 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
264 throw value_convert_exception("Octave matrix type not known, " |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
265 "conversion not implemented"); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
266 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
267 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
268 static void octvalue_to_pyarr(boost::python::object &py_object, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
269 const octave_value& octvalue) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
270 PyArrayObject *pyarr = octvalue_to_pyarrobj(octvalue); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
271 py_object = object(handle<PyObject>((PyObject *)pyarr)); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
272 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
273 |
9 | 274 static void octmap_to_pyobject(boost::python::object &py_object, |
275 const Octave_map& map) { | |
276 py_object = boost::python::dict(); | |
277 string_vector keys = map.keys(); | |
278 | |
279 for(octave_idx_type i = 0 ; i < keys.length(); i++) { | |
280 boost::python::object py_val; | |
281 | |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
282 const Cell c = map.contents(keys[i]); |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
283 |
68
2f4d6286fb36
make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
56
diff
changeset
|
284 octvalue_to_pyarr(py_val, c); |
9 | 285 |
286 py_object[keys[i]] = py_val; | |
287 } | |
288 } | |
289 | |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
290 void octvalue_to_pyobj(boost::python::object &py_object, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
291 const octave_value& octvalue) { |
68
2f4d6286fb36
make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
56
diff
changeset
|
292 if (octvalue.is_undefined()) { |
27
c3cba408a7e6
Stop incorrect conversion of multi-row strings. More strict check for undefined values. Check for invalid structure field names. Better error messages. Documentation about dict/list conversion.
David Grundberg <individ@acc.umu.se>
parents:
25
diff
changeset
|
293 throw value_convert_exception( |
c3cba408a7e6
Stop incorrect conversion of multi-row strings. More strict check for undefined values. Check for invalid structure field names. Better error messages. Documentation about dict/list conversion.
David Grundberg <individ@acc.umu.se>
parents:
25
diff
changeset
|
294 "Octave value `undefined'. Can not convert to a Python object"); |
68
2f4d6286fb36
make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
56
diff
changeset
|
295 } else if (octvalue.is_numeric_type() || octvalue.is_string() |
2f4d6286fb36
make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
56
diff
changeset
|
296 || octvalue.is_cell()) { |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
297 octvalue_to_pyarr(py_object, octvalue); |
27
c3cba408a7e6
Stop incorrect conversion of multi-row strings. More strict check for undefined values. Check for invalid structure field names. Better error messages. Documentation about dict/list conversion.
David Grundberg <individ@acc.umu.se>
parents:
25
diff
changeset
|
298 } else if (octvalue.is_map()) { |
9 | 299 octmap_to_pyobject(py_object, octvalue.map_value()); |
27
c3cba408a7e6
Stop incorrect conversion of multi-row strings. More strict check for undefined values. Check for invalid structure field names. Better error messages. Documentation about dict/list conversion.
David Grundberg <individ@acc.umu.se>
parents:
25
diff
changeset
|
300 } else |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
301 throw value_convert_exception( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
302 "Conversion from Octave value not implemented"); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
303 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
304 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
305 void octlist_to_pytuple(boost::python::tuple &python_tuple, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
306 const octave_value_list &octave_list) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
307 boost::python::list seq; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
308 int length = octave_list.length(); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
309 for (int i = 0; i < length; i++) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
310 boost::python::object py_object; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
311 octvalue_to_pyobj(py_object, octave_list(i)); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
312 seq.append(py_object); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
313 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
314 python_tuple = tuple(seq); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
315 } |
25 | 316 } |
9 | 317 |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
318 /* Emacs |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
319 * Local Variables: |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
320 * fill-column:79 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
321 * coding:utf-8 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
322 * indent-tabs-mode:nil |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
323 * c-basic-offset:3 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
324 * End: |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
325 * vim: set textwidth=79 expandtab shiftwidth=3 : |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
326 */ |