annotate octave_to_python.cc @ 9:9a773d71a973

celler & structar ^_^
author Håkan Fors nilsson <c04hfn@cs.umu.se>
date Mon, 17 Nov 2008 09:57:29 +0100
parents d95e9d46f538
children 905659caf44b
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
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
3 *
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
4 * This file is part of Pytave.
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
5 *
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
6 * 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
7 * 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
8 * 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
9 * (at your option) any later version.
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
10 *
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
11 * 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
12 * 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
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
14 * GNU General Public License for more details.
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
15 *
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
16 * 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
17 * 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
18 */
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 #include "arrayobjectdefs.h"
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
21 #include <boost/python.hpp>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
22 #include <boost/python/numeric.hpp>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
23 #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
24 #include <octave/oct.h>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
25 #include <octave/Matrix.h>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
26 #include <octave/ov.h>
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
27 #include <octave/oct-map.h>
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
28
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
29 #include <iostream>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
30 #include "pytavedefs.h"
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
31 #include "exceptions.h"
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
32
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
33 /* From docs:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
34 * 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
35 * 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
36 * 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
37 * listed above do not have corresponding Python scalar types
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
38 * (e.g. PyArray_INT ).
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
39 */
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
40
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
41 using namespace std;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
42 using namespace boost::python;
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 namespace pytave {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
45
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
46 void octvalue_to_pyobj(boost::python::object &py_object,
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
47 const octave_value& octvalue);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
48
0
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]]
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
62 = matrix.elem(matindex + i*matstride).value();
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
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
77 template <>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
78 static void copy_octarray_to_pyarrobj<double, NDArray>(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
79 PyArrayObject *pyarr,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
80 const NDArray &matrix,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
81 const unsigned int matindex,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
82 const unsigned int matstride,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
83 const int dimension,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
84 const unsigned int offset) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
85 unsigned char *ptr = (unsigned char*) pyarr->data;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
86 if (dimension == pyarr->nd - 1) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
87 // Last dimension, base case
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
88 for (int i = 0; i < pyarr->dimensions[dimension]; i++) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
89 *(double *)&ptr[offset + i*pyarr->strides[dimension]]
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
90 = matrix.elem(matindex + i*matstride);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
91 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
92 } else {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
93 for (int i = 0; i < pyarr->dimensions[dimension]; i++) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
94 copy_octarray_to_pyarrobj<double, NDArray>(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
95 pyarr,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
96 matrix,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
97 matindex + i*matstride,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
98 matstride * pyarr->dimensions[dimension],
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
99 dimension + 1,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
100 offset + i*pyarr->strides[dimension]);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
101 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
102 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
103 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
104
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
105 #ifdef PYTAVE_USE_OCTAVE_FLOATS
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
106 template <>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
107 static void copy_octarray_to_pyarrobj<float, FloatNDArray>(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
108 PyArrayObject *pyarr,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
109 const FloatNDArray &matrix,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
110 const unsigned int matindex,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
111 const unsigned int matstride,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
112 const int dimension,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
113 const unsigned int offset) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
114 unsigned char *ptr = (unsigned char*) pyarr->data;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
115 if (dimension == pyarr->nd - 1) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
116 // Last dimension, base case
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
117 for (int i = 0; i < pyarr->dimensions[dimension]; i++) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
118 *(float *)&ptr[offset + i*pyarr->strides[dimension]]
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
119 = matrix.elem(matindex + i*matstride);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
120 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
121 } else {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
122 for (int i = 0; i < pyarr->dimensions[dimension]; i++) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
123 copy_octarray_to_pyarrobj<float, FloatNDArray>(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
124 pyarr,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
125 matrix,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
126 matindex + i*matstride,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
127 matstride * pyarr->dimensions[dimension],
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
128 dimension + 1,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
129 offset + i*pyarr->strides[dimension]);
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 }
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 #endif /* PYTAVE_USE_OCTAVE_FLOATS */
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
134
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
135 static PyArrayObject *createPyArr(const dim_vector &dims,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
136 int pyarrtype) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
137 int dimensions[dims.length()];
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
138 for (int i = 0; i < dims.length(); i++) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
139 dimensions[i] = dims(i);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
140 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
141
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
142 return (PyArrayObject *)PyArray_FromDims(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
143 dims.length(), dimensions, pyarrtype);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
144 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
145
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
146 template <class PythonPrimitive, class OctaveBase>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
147 static PyArrayObject *create_array(const OctaveBase &octarr,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
148 int pyarraytype) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
149 PyArrayObject *pyarr = createPyArr(octarr.dims(), pyarraytype);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
150 try {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
151 copy_octarray_to_pyarrobj
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
152 <PythonPrimitive, OctaveBase>(pyarr, octarr, 0, 1, 0, 0);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
153 } catch (value_convert_exception &pe) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
154 Py_DECREF(pyarr);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
155 throw;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
156 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
157 return pyarr;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
158 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
159
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
160 template <class CLASS, size_t bytes>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
161 inline static PyArrayObject *create_uint_array(CLASS value) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
162 if (bytes == sizeof(int)) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
163 return create_array<unsigned int, CLASS>(value, PyArray_UINT);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
164 } else if (bytes == sizeof(char)) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
165 return create_array<unsigned char, CLASS>(value, PyArray_UBYTE);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
166 } else if (bytes == sizeof(short)) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
167 return create_array<unsigned short, CLASS>(value, PyArray_USHORT);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
168 } else {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
169 ostringstream os;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
170 os << "Numeric arrays doesn't support unsigned " << (bytes*8)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
171 << "-bit values on this architecture.";
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
172 throw value_convert_exception(os.str());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
173 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
174 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
175
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
176 template <class CLASS, size_t bytes>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
177 inline static PyArrayObject *create_sint_array(CLASS value) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
178 if (bytes == sizeof(long)) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
179 return create_array<long, CLASS>(value, PyArray_LONG);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
180 } else if (bytes == sizeof(int)) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
181 return create_array<signed int, CLASS>(value, PyArray_INT);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
182 } else if (bytes == sizeof(char)) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
183 return create_array<signed char, CLASS>(value, PyArray_SBYTE);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
184 } else if (bytes == sizeof(short)) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
185 return create_array<signed short, CLASS>(value, PyArray_SHORT);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
186 } else {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
187 ostringstream os;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
188 os << "Numeric arrays doesn't support signed " << (bytes*8)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
189 << "-bit values on this architecture.";
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
190 throw value_convert_exception(os.str());
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
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
194 static PyArrayObject *octvalue_to_pyarrobj(const octave_value &matrix) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
195 if (matrix.is_complex_type ()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
196 throw value_convert_exception(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
197 "Complex Octave matrices conversion not implemented");
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
198 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
199
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
200 if (matrix.is_double_type ()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
201 if (matrix.is_real_type()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
202 return create_array<double, NDArray>(matrix.array_value(),
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
203 PyArray_DOUBLE);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
204 } else
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
205 throw value_convert_exception("Unknown double matrix type");
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
206 }
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 #ifdef PYTAVE_USE_OCTAVE_FLOATS
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
209 if (matrix.is_single_type ()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
210 if (matrix.is_real_type()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
211 return create_array<float, FloatNDArray>(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
212 matrix.float_array_value(), PyArray_FLOAT);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
213 } else
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
214 throw value_convert_exception("Unknown float matrix type");
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 #endif
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
217
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
218 if (matrix.is_int64_type()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
219 return create_sint_array<int64NDArray, sizeof(int64_t)>(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
220 matrix.int64_array_value());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
221 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
222 if (matrix.is_uint32_type()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
223 return create_uint_array<uint32NDArray, sizeof(uint32_t)>(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
224 matrix.uint32_array_value());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
225 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
226 if (matrix.is_int32_type()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
227 return create_sint_array<int32NDArray, sizeof(int32_t)>(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
228 matrix.int32_array_value());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
229 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
230 if (matrix.is_uint16_type()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
231 return create_uint_array<uint16NDArray, sizeof(uint16_t)>(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
232 matrix.uint16_array_value());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
233 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
234 if (matrix.is_int16_type()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
235 return create_sint_array<int16NDArray, sizeof(int16_t)>(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
236 matrix.int16_array_value());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
237 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
238 if (matrix.is_uint8_type()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
239 return create_uint_array<uint8NDArray, sizeof(uint8_t)>(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
240 matrix.uint8_array_value());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
241 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
242 if (matrix.is_int8_type()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
243 return create_sint_array<int8NDArray, sizeof(int8_t)>(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
244 matrix.int8_array_value());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
245 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
246
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
247 throw value_convert_exception("Octave matrix type not known, "
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
248 "conversion not implemented");
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
249 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
250
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
251 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
252 const octave_value& octvalue) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
253 PyArrayObject *pyarr = octvalue_to_pyarrobj(octvalue);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
254 py_object = object(handle<PyObject>((PyObject *)pyarr));
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
255 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
256
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
257
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
258 static void octcell_to_pyobject(boost::python::object &py_object,
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
259 const Cell& cell) {
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
260 py_object = boost::python::list();
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
261
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
262 if(cell.dim1() != 1) {
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
263 throw value_convert_exception(
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
264 "Only one dimensional cell arrays are allowed, "
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
265 "conversion not implemented");
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
266 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
267
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
268 for(octave_idx_type i = 0 ; i < cell.length(); i++) {
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
269 boost::python::object py_val;
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
270
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
271 octvalue_to_pyobj(py_val, cell.elem(i));
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
272
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
273 ((boost::python::list&)py_object).insert(i, py_val);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
274 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
275 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
276
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
277 static void octmap_to_pyobject(boost::python::object &py_object,
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
278 const Octave_map& map) {
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
279 py_object = boost::python::dict();
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
280 string_vector keys = map.keys();
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
281
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
282 for(octave_idx_type i = 0 ; i < keys.length(); i++) {
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
283 boost::python::object 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 octvalue_to_pyobj(py_val, map.contents(keys[i]));
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
286
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
287 py_object[keys[i]] = py_val;
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
288 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
289 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
290
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
291 void octvalue_to_pyobj(boost::python::object &py_object,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
292 const octave_value& octvalue) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
293 if (octvalue.is_scalar_type()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
294 if (octvalue.is_bool_type())
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
295 py_object = object(octvalue.bool_value());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
296 else if (octvalue.is_real_scalar())
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
297 py_object = object(octvalue.double_value());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
298 else if (octvalue.is_integer_type())
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
299 py_object = object(octvalue.int_value());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
300 else
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 for this scalar not implemented");
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
303 } else if (octvalue.is_string())
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
304 py_object = str(octvalue.string_value());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
305 else if (octvalue.is_matrix_type())
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
306 octvalue_to_pyarr(py_object, octvalue);
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
307 else if (octvalue.is_map())
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
308 octmap_to_pyobject(py_object, octvalue.map_value());
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
309 else if (octvalue.is_cell())
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
310 octcell_to_pyobject(py_object, octvalue.cell_value());
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
311 else if (octvalue.is_undefined())
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
312 throw value_convert_exception(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
313 "Octave value `undefined'. Can not convert to a Python object");
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
314 else
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
315 throw value_convert_exception(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
316 "Conversion from Octave value not implemented");
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
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
319 void octlist_to_pytuple(boost::python::tuple &python_tuple,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
320 const octave_value_list &octave_list) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
321 boost::python::list seq;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
322 int length = octave_list.length();
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
323 for (int i = 0; i < length; i++) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
324 boost::python::object py_object;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
325 octvalue_to_pyobj(py_object, octave_list(i));
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
326 seq.append(py_object);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
327 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
328 python_tuple = tuple(seq);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
329 }
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
330
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
331
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
332 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
333 /* Emacs
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
334 * Local Variables:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
335 * fill-column:79
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
336 * coding:utf-8
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
337 * indent-tabs-mode:nil
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
338 * c-basic-offset:3
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
339 * End:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
340 * vim: set textwidth=79 expandtab shiftwidth=3 :
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
341 */