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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 45
diff changeset
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
d95e9d46f538 License change to GPLv3
David Grundberg <individ@acc.umu.se>
parents: 0
diff changeset
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
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
57 unsigned char *ptr = (unsigned char*) PyArray_DATA (pyarr);
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
60 for (int i = 0; i < PyArray_DIM (pyarr, dimension); i++) {
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
85 unsigned char *ptr = (unsigned char*) PyArray_DATA (pyarr);
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 45
diff changeset
199 if (matrix.is_complex_type ()) {
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 45
diff changeset
200 return create_array<Complex, ComplexNDArray>
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
201 (matrix.complex_array_value(), NPY_CDOUBLE);
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 45
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 45
diff changeset
210 if (matrix.is_complex_type ()) {
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 45
diff changeset
211 return create_array<FloatComplex, FloatComplexNDArray>
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
212 (matrix.float_complex_array_value(), NPY_CFLOAT);
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 45
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
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
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
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
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
273 py_object = boost::python::dict();
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
274 string_vector keys = map.keys();
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
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
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
277 boost::python::object py_val;
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
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
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
282
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
283 py_object[keys[i]] = py_val;
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
284 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
285 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
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
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
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
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 21
diff changeset
320 }
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
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 */