Mercurial > pytave
annotate octave_to_python.cc @ 134:f93288b72f3e
maint: Use Array<T>::numel instead of deprecated Array<T>::length
* octave_to_python.cc (pytave::octmap_to_pyobject): Use Array<T>::numel
instead of deprecated Array<T>::length.
author | Mike Miller <mtmiller@octave.org> |
---|---|
date | Mon, 04 Apr 2016 15:14:10 -0700 |
parents | 386772f4e12d |
children | b12908ffa6df |
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 |
132
386772f4e12d
Clean up includes thanks to Octave header changes
Mike Miller <mtmiller@octave.org>
parents:
108
diff
changeset
|
21 #if defined (HAVE_CONFIG_H) |
386772f4e12d
Clean up includes thanks to Octave header changes
Mike Miller <mtmiller@octave.org>
parents:
108
diff
changeset
|
22 # include <config.h> |
386772f4e12d
Clean up includes thanks to Octave header changes
Mike Miller <mtmiller@octave.org>
parents:
108
diff
changeset
|
23 #endif |
386772f4e12d
Clean up includes thanks to Octave header changes
Mike Miller <mtmiller@octave.org>
parents:
108
diff
changeset
|
24 |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
25 #include <boost/python.hpp> |
45
3eb653452a38
avoid useless instances in octave_to_python.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
41
diff
changeset
|
26 #include <boost/type_traits/integral_constant.hpp> |
100
ff70627aa203
Undef HAVE_STAT and HAVE_FSTAT consistently through-out all files
David Grundberg <individ@acc.umu.se>
parents:
76
diff
changeset
|
27 |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
28 #include <octave/oct.h> |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
29 #include <octave/ov.h> |
9 | 30 #include <octave/oct-map.h> |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
31 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
32 #include <iostream> |
75
b0991511a16d
a few fixes to numpy support
Jaroslav Hajek <highegg@gmail.com>
parents:
70
diff
changeset
|
33 #include "arrayobjectdefs.h" |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
34 #include "exceptions.h" |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
35 #include "octave_to_python.h" |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
36 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
37 /* From docs: |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
38 * 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
|
39 * 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
|
40 * 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
|
41 * listed above do not have corresponding Python scalar types |
108 | 42 * (e.g. NPY_INT ). |
0
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 |
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) { |
108 | 57 unsigned char *ptr = (unsigned char*) PyArray_DATA (pyarr); |
58 if (dimension == PyArray_NDIM (pyarr) - 1) { | |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
59 // Last dimension, base case |
108 | 60 for (int i = 0; i < PyArray_DIM (pyarr, dimension); i++) { |
61 *(PythonPrimitive *)&ptr[offset + i*PyArray_STRIDE (pyarr, 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 { |
108 | 65 for (int i = 0; i < PyArray_DIM (pyarr, dimension); i++) { |
0
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, |
108 | 70 matstride * PyArray_DIM (pyarr, dimension), |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
71 dimension + 1, |
108 | 72 offset + i*PyArray_STRIDE (pyarr, dimension)); |
0
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) { |
108 | 85 unsigned char *ptr = (unsigned char*) PyArray_DATA (pyarr); |
86 if (dimension == PyArray_NDIM (pyarr) - 1) { | |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
87 // Last dimension, base case |
108 | 88 for (int i = 0; i < PyArray_DIM (pyarr, dimension); i++) { |
56
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()); |
108 | 92 *(PyObject **)&ptr[offset + i*PyArray_STRIDE (pyarr, dimension)] |
56
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 { |
108 | 96 for (int i = 0; i < PyArray_DIM (pyarr, dimension); i++) { |
56
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, |
108 | 101 matstride * PyArray_DIM (pyarr, dimension), |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
102 dimension + 1, |
108 | 103 offset + i*PyArray_STRIDE (pyarr, dimension)); |
56
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 |
101
0c19ed1ce349
Remove Numeric array support. Use numpy exclusively.
David Grundberg <individ@acc.umu.se>
parents:
100
diff
changeset
|
116 return (PyArrayObject *)PyArray_SimpleNew( |
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; |
108 | 151 return create_array<unsigned int, CLASS>(value, NPY_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; |
108 | 154 return create_array<unsigned char, CLASS>(value, NPY_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; |
108 | 158 return create_array<unsigned short, CLASS>(value, NPY_USHORT, inst); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
159 } else { |
107
691ef5c6b9e2
maint: Clean up std namespace pollution
Mike Miller <mtmiller@octave.org>
parents:
106
diff
changeset
|
160 std::ostringstream os; |
108 | 161 os << "NumPy arrays do not support unsigned " << (bytes*8) |
0
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; |
108 | 173 return create_array<signed int, CLASS>(value, NPY_INT, inst); |
102
4e7307dd52a2
Experimental long long support.
David Grundberg <individ@acc.umu.se>
parents:
101
diff
changeset
|
174 } |
4e7307dd52a2
Experimental long long support.
David Grundberg <individ@acc.umu.se>
parents:
101
diff
changeset
|
175 else if (bytes == sizeof(long long)) { |
4e7307dd52a2
Experimental long long support.
David Grundberg <individ@acc.umu.se>
parents:
101
diff
changeset
|
176 boost::integral_constant<bool, bytes == sizeof(long long) && bytes != sizeof(int)> inst; |
108 | 177 return create_array<long, CLASS>(value, NPY_LONGLONG, inst); |
102
4e7307dd52a2
Experimental long long support.
David Grundberg <individ@acc.umu.se>
parents:
101
diff
changeset
|
178 } |
4e7307dd52a2
Experimental long long support.
David Grundberg <individ@acc.umu.se>
parents:
101
diff
changeset
|
179 else if (bytes == sizeof(long)) { |
4e7307dd52a2
Experimental long long support.
David Grundberg <individ@acc.umu.se>
parents:
101
diff
changeset
|
180 boost::integral_constant<bool, bytes == sizeof(long) && bytes != sizeof(int) && bytes != sizeof(long long)> inst; |
108 | 181 return create_array<long, CLASS>(value, NPY_LONG, inst); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
182 } else if (bytes == sizeof(char)) { |
47
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
183 boost::integral_constant<bool, bytes == sizeof(char)> inst; |
108 | 184 return create_array<signed char, CLASS>(value, NPY_BYTE, inst); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
185 } else if (bytes == sizeof(short)) { |
47
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
186 boost::integral_constant<bool, |
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
187 bytes==sizeof(short) && bytes != sizeof(int)> inst; |
108 | 188 return create_array<signed short, CLASS>(value, NPY_SHORT, inst); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
189 } else { |
107
691ef5c6b9e2
maint: Clean up std namespace pollution
Mike Miller <mtmiller@octave.org>
parents:
106
diff
changeset
|
190 std::ostringstream os; |
108 | 191 os << "NumPy arrays do not support signed " << (bytes*8) |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
192 << "-bit values on this architecture."; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
193 throw value_convert_exception(os.str()); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
194 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
195 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
196 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
197 static PyArrayObject *octvalue_to_pyarrobj(const octave_value &matrix) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
198 if (matrix.is_double_type ()) { |
46 | 199 if (matrix.is_complex_type ()) { |
200 return create_array<Complex, ComplexNDArray> | |
108 | 201 (matrix.complex_array_value(), NPY_CDOUBLE); |
46 | 202 } else if (matrix.is_real_type()) { |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
203 return create_array<double, NDArray>(matrix.array_value(), |
108 | 204 NPY_DOUBLE); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
205 } else |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
206 throw value_convert_exception("Unknown double matrix type"); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
207 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
208 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
209 if (matrix.is_single_type ()) { |
46 | 210 if (matrix.is_complex_type ()) { |
211 return create_array<FloatComplex, FloatComplexNDArray> | |
108 | 212 (matrix.float_complex_array_value(), NPY_CFLOAT); |
46 | 213 } else if (matrix.is_real_type()) { |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
214 return create_array<float, FloatNDArray>( |
108 | 215 matrix.float_array_value(), NPY_FLOAT); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
216 } else |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
217 throw value_convert_exception("Unknown float matrix type"); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
218 } |
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_int64_type()) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
221 return create_sint_array<int64NDArray, sizeof(int64_t)>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
222 matrix.int64_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_uint32_type()) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
225 return create_uint_array<uint32NDArray, sizeof(uint32_t)>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
226 matrix.uint32_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_int32_type()) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
229 return create_sint_array<int32NDArray, sizeof(int32_t)>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
230 matrix.int32_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_uint16_type()) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
233 return create_uint_array<uint16NDArray, sizeof(uint16_t)>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
234 matrix.uint16_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_int16_type()) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
237 return create_sint_array<int16NDArray, sizeof(int16_t)>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
238 matrix.int16_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_uint8_type()) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
241 return create_uint_array<uint8NDArray, sizeof(uint8_t)>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
242 matrix.uint8_array_value()); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
243 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
244 if (matrix.is_int8_type()) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
245 return create_sint_array<int8NDArray, sizeof(int8_t)>( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
246 matrix.int8_array_value()); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
247 } |
68
2f4d6286fb36
make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
56
diff
changeset
|
248 if (matrix.is_bool_type()) { |
70
e3de0f6f1552
experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents:
68
diff
changeset
|
249 return create_array<bool, boolNDArray>( |
108 | 250 matrix.bool_array_value(), NPY_BOOL); |
68
2f4d6286fb36
make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
56
diff
changeset
|
251 } |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
252 if (matrix.is_string()) { |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
253 return create_array<char, charNDArray>( |
108 | 254 matrix.char_array_value(), NPY_CHAR); |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
255 } |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
256 if (matrix.is_cell()) { |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
257 return create_array<PyObject *, Cell>( |
108 | 258 matrix.cell_value(), NPY_OBJECT); |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
259 } |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
260 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
261 throw value_convert_exception("Octave matrix type not known, " |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
262 "conversion not implemented"); |
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 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
265 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
|
266 const octave_value& octvalue) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
267 PyArrayObject *pyarr = octvalue_to_pyarrobj(octvalue); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
268 py_object = object(handle<PyObject>((PyObject *)pyarr)); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
269 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
270 |
9 | 271 static void octmap_to_pyobject(boost::python::object &py_object, |
106
896fdc369789
Use latest Octave library API
Mike Miller <mtmiller@octave.org>
parents:
105
diff
changeset
|
272 const octave_map& map) { |
9 | 273 py_object = boost::python::dict(); |
274 string_vector keys = map.keys(); | |
275 | |
134
f93288b72f3e
maint: Use Array<T>::numel instead of deprecated Array<T>::length
Mike Miller <mtmiller@octave.org>
parents:
132
diff
changeset
|
276 for(octave_idx_type i = 0 ; i < keys.numel(); i++) { |
9 | 277 boost::python::object py_val; |
278 | |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
279 const Cell c = map.contents(keys[i]); |
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
280 |
68
2f4d6286fb36
make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
56
diff
changeset
|
281 octvalue_to_pyarr(py_val, c); |
9 | 282 |
283 py_object[keys[i]] = py_val; | |
284 } | |
285 } | |
286 | |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
287 void octvalue_to_pyobj(boost::python::object &py_object, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
288 const octave_value& octvalue) { |
68
2f4d6286fb36
make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
56
diff
changeset
|
289 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
|
290 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
|
291 "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
|
292 } 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
|
293 || octvalue.is_cell()) { |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
294 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
|
295 } else if (octvalue.is_map()) { |
9 | 296 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
|
297 } else |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
298 throw value_convert_exception( |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
299 "Conversion from Octave value not implemented"); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
300 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
301 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
302 void octlist_to_pytuple(boost::python::tuple &python_tuple, |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
303 const octave_value_list &octave_list) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
304 boost::python::list seq; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
305 int length = octave_list.length(); |
76
ba609c4d77db
load/unload_package, workaround undefined values bug
Jaroslav Hajek <highegg@gmail.com>
parents:
75
diff
changeset
|
306 |
ba609c4d77db
load/unload_package, workaround undefined values bug
Jaroslav Hajek <highegg@gmail.com>
parents:
75
diff
changeset
|
307 // FIXME: due to bugs in Octave 3.2.3 and earlier, lists returned from |
ba609c4d77db
load/unload_package, workaround undefined values bug
Jaroslav Hajek <highegg@gmail.com>
parents:
75
diff
changeset
|
308 // eval_string and feval may be padded by trailing undefined values. |
ba609c4d77db
load/unload_package, workaround undefined values bug
Jaroslav Hajek <highegg@gmail.com>
parents:
75
diff
changeset
|
309 // Fix is already upstream, so this may be eventually removed. |
ba609c4d77db
load/unload_package, workaround undefined values bug
Jaroslav Hajek <highegg@gmail.com>
parents:
75
diff
changeset
|
310 while (length > 0 && octave_list(length-1).is_undefined()) |
ba609c4d77db
load/unload_package, workaround undefined values bug
Jaroslav Hajek <highegg@gmail.com>
parents:
75
diff
changeset
|
311 length--; |
ba609c4d77db
load/unload_package, workaround undefined values bug
Jaroslav Hajek <highegg@gmail.com>
parents:
75
diff
changeset
|
312 |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
313 for (int i = 0; i < length; i++) { |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
314 boost::python::object py_object; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
315 octvalue_to_pyobj(py_object, octave_list(i)); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
316 seq.append(py_object); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
317 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
318 python_tuple = tuple(seq); |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
319 } |
25 | 320 } |
9 | 321 |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
322 /* Emacs |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
323 * Local Variables: |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
324 * fill-column:79 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
325 * coding:utf-8 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
326 * indent-tabs-mode:nil |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
327 * c-basic-offset:3 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
328 * End: |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
329 * vim: set textwidth=79 expandtab shiftwidth=3 : |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
330 */ |