Mercurial > pytave
annotate octave_to_python.cc @ 227:c56b85f405ba
maint: apply Octave whitespace rules
* @pyobject/display.m, @pyobject/dummy.m, @pyobject/methods.m,
@pyobject/pyobject.m, @pyobject/subsref.m, octave_to_python.cc: Use Octave
whitespace conventions around operators and function argument lists.
* pyeval.cc: Break up long line for readability.
author | Mike Miller <mtmiller@octave.org> |
---|---|
date | Wed, 20 Jul 2016 11:57:14 -0700 |
parents | 0c6f7ae8a95b |
children | d51b3d120c85 |
rev | line source |
---|---|
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
1 /* |
139
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
2 |
150
a3dc9d24ae38
maint: Add myself to copyright notices
Mike Miller <mtmiller@octave.org>
parents:
146
diff
changeset
|
3 Copyright (C) 2015-2016 Mike Miller |
139
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
4 Copyright (C) 2008 David Grundberg, HÃ¥kan Fors Nilsson |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
5 Copyright (C) 2009 VZLU Prague |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
6 |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
7 This file is part of Pytave. |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
8 |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
9 Pytave is free software: you can redistribute it and/or modify it |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
10 under the terms of the GNU General Public License as published by the |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
11 Free Software Foundation, either version 3 of the License, or (at your |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
12 option) any later version. |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
13 |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
14 Pytave is distributed in the hope that it will be useful, but WITHOUT |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
17 for more details. |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
18 |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
19 You should have received a copy of the GNU General Public License |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
20 along with Pytave; see the file COPYING. If not, see |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
21 <http://www.gnu.org/licenses/>. |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
22 |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
134
diff
changeset
|
23 */ |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
24 |
132
386772f4e12d
Clean up includes thanks to Octave header changes
Mike Miller <mtmiller@octave.org>
parents:
108
diff
changeset
|
25 #if defined (HAVE_CONFIG_H) |
386772f4e12d
Clean up includes thanks to Octave header changes
Mike Miller <mtmiller@octave.org>
parents:
108
diff
changeset
|
26 # include <config.h> |
386772f4e12d
Clean up includes thanks to Octave header changes
Mike Miller <mtmiller@octave.org>
parents:
108
diff
changeset
|
27 #endif |
386772f4e12d
Clean up includes thanks to Octave header changes
Mike Miller <mtmiller@octave.org>
parents:
108
diff
changeset
|
28 |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
29 #include <boost/python.hpp> |
100
ff70627aa203
Undef HAVE_STAT and HAVE_FSTAT consistently through-out all files
David Grundberg <individ@acc.umu.se>
parents:
76
diff
changeset
|
30 |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
31 #include <octave/oct.h> |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
32 #include <octave/ov.h> |
9 | 33 #include <octave/oct-map.h> |
217
69abda471c67
Attempt at moving pyobject from octave to python
Colin Macdonald <cbm@m.fsf.org>
parents:
167
diff
changeset
|
34 #include <octave/parse.h> |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
35 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
36 #include <iostream> |
75
b0991511a16d
a few fixes to numpy support
Jaroslav Hajek <highegg@gmail.com>
parents:
70
diff
changeset
|
37 #include "arrayobjectdefs.h" |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
38 #include "exceptions.h" |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
39 #include "octave_to_python.h" |
0
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 boost::python; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
42 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
43 namespace pytave |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
44 { |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
45 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
46 template <class PythonPrimitive, class OctaveBase> |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
47 static void |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
48 copy_octarray_to_pyarrobj (PyArrayObject *pyarr, const OctaveBase& matrix, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
49 const unsigned int matindex, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
50 const unsigned int matstride, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
51 const int dimension, const unsigned int offset) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
52 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
53 unsigned char *ptr = (unsigned char*) PyArray_DATA (pyarr); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
54 if (dimension == PyArray_NDIM (pyarr) - 1) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
55 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
56 // Last dimension, base case |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
57 for (int i = 0; i < PyArray_DIM (pyarr, dimension); i++) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
58 { |
108 | 59 *(PythonPrimitive *)&ptr[offset + i*PyArray_STRIDE (pyarr, dimension)] |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
60 = matrix.elem (matindex + i*matstride); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
61 } |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
62 } |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
63 else |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
64 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
65 for (int i = 0; i < PyArray_DIM (pyarr, dimension); i++) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
66 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
67 copy_octarray_to_pyarrobj<PythonPrimitive, OctaveBase> ( |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
68 pyarr, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
69 matrix, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
70 matindex + i*matstride, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
71 matstride * PyArray_DIM (pyarr, dimension), |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
72 dimension + 1, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
73 offset + i*PyArray_STRIDE (pyarr, dimension)); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
74 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
75 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
76 } |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
77 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
78 template <> |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
79 void |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
80 copy_octarray_to_pyarrobj<PyObject *, Cell> (PyArrayObject *pyarr, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
81 const Cell& matrix, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
82 const unsigned int matindex, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
83 const unsigned int matstride, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
84 const int dimension, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
85 const unsigned int offset) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
86 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
87 unsigned char *ptr = (unsigned char*) PyArray_DATA (pyarr); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
88 if (dimension == PyArray_NDIM (pyarr) - 1) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
89 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
90 // Last dimension, base case |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
91 for (int i = 0; i < PyArray_DIM (pyarr, dimension); i++) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
92 { |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
93 object pyobj; |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
94 octvalue_to_pyobj (pyobj, matrix.elem (matindex + i*matstride)); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
95 Py_INCREF (pyobj.ptr ()); |
108 | 96 *(PyObject **)&ptr[offset + i*PyArray_STRIDE (pyarr, dimension)] |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
97 = pyobj.ptr (); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
98 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
99 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
100 else |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
101 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
102 for (int i = 0; i < PyArray_DIM (pyarr, dimension); i++) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
103 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
104 copy_octarray_to_pyarrobj<PyObject *, Cell> ( |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
105 pyarr, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
106 matrix, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
107 matindex + i*matstride, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
108 matstride * PyArray_DIM (pyarr, dimension), |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
109 dimension + 1, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
110 offset + i*PyArray_STRIDE (pyarr, dimension)); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
111 } |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
112 } |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
113 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
114 |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
115 static PyArrayObject * |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
116 createPyArr (const dim_vector& dims, int pyarrtype) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
117 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
118 int len = dims.length (); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
119 npy_intp dimensions[len]; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
120 for (int i = 0; i < dims.length (); i++) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
121 dimensions[i] = dims(i); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
122 |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
123 return (PyArrayObject *)PyArray_SimpleNew (len, dimensions, pyarrtype); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
124 } |
56
43a413b7c151
improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
125 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
126 template <class PythonPrimitive, class OctaveBase> |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
127 static PyArrayObject * |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
128 create_array (const OctaveBase& octarr, int pyarraytype) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
129 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
130 PyArrayObject *pyarr = createPyArr (octarr.dims (), pyarraytype); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
131 try |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
132 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
133 copy_octarray_to_pyarrobj<PythonPrimitive, OctaveBase> (pyarr, octarr, 0, 1, 0, 0); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
134 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
135 catch (const value_convert_exception&) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
136 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
137 Py_DECREF (pyarr); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
138 throw; |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
139 } |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
140 return pyarr; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
141 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
142 |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
143 static PyArrayObject * |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
144 octvalue_to_pyarrobj (const octave_value& matrix) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
145 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
146 if (matrix.is_double_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
147 if (matrix.is_complex_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
148 return create_array<Complex, ComplexNDArray> (matrix.complex_array_value (), NPY_CDOUBLE); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
149 else if (matrix.is_real_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
150 return create_array<double, NDArray> (matrix.array_value (), NPY_DOUBLE); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
151 else |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
152 throw value_convert_exception ("Unknown double matrix type"); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
153 |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
154 if (matrix.is_single_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
155 if (matrix.is_complex_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
156 return create_array<FloatComplex, FloatComplexNDArray> (matrix.float_complex_array_value (), NPY_CFLOAT); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
157 else if (matrix.is_real_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
158 return create_array<float, FloatNDArray> (matrix.float_array_value (), NPY_FLOAT); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
159 else |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
160 throw value_convert_exception ("Unknown float matrix type"); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
161 |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
162 if (matrix.is_int8_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
163 return create_array<int8_t, int8NDArray> (matrix.int8_array_value (), NPY_INT8); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
164 if (matrix.is_int16_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
165 return create_array<int16_t, int16NDArray> (matrix.int16_array_value (), NPY_INT16); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
166 if (matrix.is_int32_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
167 return create_array<int32_t, int32NDArray> (matrix.int32_array_value (), NPY_INT32); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
168 if (matrix.is_int64_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
169 return create_array<int64_t, int64NDArray> (matrix.int64_array_value (), NPY_INT64); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
170 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
171 if (matrix.is_uint8_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
172 return create_array<uint8_t, uint8NDArray> (matrix.uint8_array_value (), NPY_UINT8); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
173 if (matrix.is_uint16_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
174 return create_array<uint16_t, uint16NDArray> (matrix.uint16_array_value (), NPY_UINT16); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
175 if (matrix.is_uint32_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
176 return create_array<uint32_t, uint32NDArray> (matrix.uint32_array_value (), NPY_UINT32); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
177 if (matrix.is_uint64_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
178 return create_array<uint64_t, uint64NDArray> (matrix.uint64_array_value (), NPY_UINT64); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
179 |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
180 if (matrix.is_bool_type ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
181 return create_array<bool, boolNDArray> (matrix.bool_array_value (), NPY_BOOL); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
182 if (matrix.is_string ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
183 return create_array<char, charNDArray> (matrix.char_array_value (), NPY_CHAR); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
184 if (matrix.is_cell ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
185 return create_array<PyObject *, Cell> (matrix.cell_value (), NPY_OBJECT); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
186 |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
187 throw value_convert_exception ("Octave matrix type not known, conversion not implemented"); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
188 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
189 |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
190 static void |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
191 octvalue_to_pyarr (boost::python::object& py_object, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
192 const octave_value& octvalue) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
193 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
194 PyArrayObject *pyarr = octvalue_to_pyarrobj (octvalue); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
195 py_object = object (handle<PyObject> ((PyObject *)pyarr)); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
196 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
197 |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
198 static void |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
199 octmap_to_pyobject (boost::python::object& py_object, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
200 const octave_map& map) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
201 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
202 py_object = boost::python::dict (); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
203 string_vector keys = map.keys (); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
204 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
205 for (octave_idx_type i = 0 ; i < keys.numel (); i++) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
206 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
207 boost::python::object py_val; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
208 const Cell c = map.contents (keys[i]); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
209 octvalue_to_pyarr (py_val, c); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
210 py_object[keys[i]] = py_val; |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
211 } |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
212 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
213 |
185
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
214 static void |
197
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
215 octscalar_to_pyobject (boost::python::object& py_object, |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
216 const octave_value& arg) |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
217 { |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
218 PyObject *obj = 0; |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
219 |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
220 if (arg.is_complex_type ()) |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
221 obj = PyComplex_FromDoubles (arg.real ().double_value (), |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
222 arg.imag ().double_value ()); |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
223 else if (arg.is_float_type ()) |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
224 obj = PyFloat_FromDouble (arg.double_value ()); |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
225 |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
226 else if (arg.is_int8_type ()) |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
227 obj = PyLong_FromLong (arg.int8_scalar_value ().value ()); |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
228 else if (arg.is_int16_type ()) |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
229 obj = PyLong_FromLong (arg.int16_scalar_value ().value ()); |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
230 else if (arg.is_int32_type ()) |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
231 obj = PyLong_FromLong (arg.int32_scalar_value ().value ()); |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
232 else if (arg.is_int64_type ()) |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
233 obj = PyLong_FromLong (arg.int64_scalar_value ().value ()); |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
234 |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
235 else if (arg.is_uint8_type ()) |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
236 obj = PyLong_FromUnsignedLong (arg.uint8_scalar_value ().value ()); |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
237 else if (arg.is_uint16_type ()) |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
238 obj = PyLong_FromUnsignedLong (arg.uint16_scalar_value ().value ()); |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
239 else if (arg.is_uint32_type ()) |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
240 obj = PyLong_FromUnsignedLong (arg.uint32_scalar_value ().value ()); |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
241 else if (arg.is_uint64_type ()) |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
242 obj = PyLong_FromUnsignedLong (arg.uint64_scalar_value ().value ()); |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
243 |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
244 else if (arg.is_bool_type ()) |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
245 obj = PyBool_FromLong (arg.bool_value ()); |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
246 |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
247 if (obj) |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
248 py_object = object (handle<PyObject> (obj)); |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
249 else |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
250 throw value_convert_exception ("unhandled scalar type"); |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
251 } |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
252 |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
253 static void |
185
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
254 octstring_to_pyobject (boost::python::object& py_object, |
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
255 const std::string& str) |
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
256 { |
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
257 py_object = object (handle<PyObject> ( |
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
258 #if PY_VERSION_HEX >= 0x03000000 |
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
259 PyUnicode_FromStringAndSize (str.data (), str.size ()) |
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
260 #else |
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
261 PyString_FromStringAndSize (str.data (), str.size ()) |
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
262 #endif |
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
263 )); |
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
264 } |
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
265 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
266 void octvalue_to_pyobj (boost::python::object& py_object, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
267 const octave_value& octvalue) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
268 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
269 if (octvalue.is_undefined ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
270 throw value_convert_exception ( |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
271 "Octave value `undefined'. Can not convert to a Python object"); |
185
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
272 else if (octvalue.is_string ()) |
cede17a86ccf
Convert Octave char arrays into Python strings (fixes issue #7)
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
273 octstring_to_pyobject (py_object, octvalue.string_value ()); |
197
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
274 else if (octvalue.is_scalar_type ()) |
d6c44d680482
Convert Octave scalars into Python scalars (fixes issue #14)
Mike Miller <mtmiller@octave.org>
parents:
185
diff
changeset
|
275 octscalar_to_pyobject (py_object, octvalue); |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
276 else if (octvalue.is_numeric_type () || octvalue.is_string () |
183
2b03585d4ddd
Add proper conversion of booleans between octave and python. (fixes issue #6)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
167
diff
changeset
|
277 || octvalue.is_cell () || octvalue.is_bool_type ()) |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
278 octvalue_to_pyarr (py_object, octvalue); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
279 else if (octvalue.is_map ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
280 octmap_to_pyobject (py_object, octvalue.map_value ()); |
217
69abda471c67
Attempt at moving pyobject from octave to python
Colin Macdonald <cbm@m.fsf.org>
parents:
167
diff
changeset
|
281 else if (octvalue.is_object ()) { |
69abda471c67
Attempt at moving pyobject from octave to python
Colin Macdonald <cbm@m.fsf.org>
parents:
167
diff
changeset
|
282 octave_value_list tmp = feval ("getid", ovl (octvalue), 1); |
227
c56b85f405ba
maint: apply Octave whitespace rules
Mike Miller <mtmiller@octave.org>
parents:
225
diff
changeset
|
283 std::string hexid = tmp(0).string_value (); |
217
69abda471c67
Attempt at moving pyobject from octave to python
Colin Macdonald <cbm@m.fsf.org>
parents:
167
diff
changeset
|
284 // FIXME: added a messy ref to __InOct__ in __main__, find a better way |
227
c56b85f405ba
maint: apply Octave whitespace rules
Mike Miller <mtmiller@octave.org>
parents:
225
diff
changeset
|
285 py_object = boost::python::import ("__main__").attr ("__InOct__")[hexid]; |
217
69abda471c67
Attempt at moving pyobject from octave to python
Colin Macdonald <cbm@m.fsf.org>
parents:
167
diff
changeset
|
286 } else |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
287 throw value_convert_exception ( |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
288 "Conversion from Octave value not implemented"); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
289 } |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
290 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
291 void octlist_to_pytuple (boost::python::tuple& python_tuple, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
292 const octave_value_list& octave_list) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
293 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
294 boost::python::list seq; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
295 int length = octave_list.length (); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
296 |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
297 for (int i = 0; i < length; i++) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
298 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
299 boost::python::object py_object; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
300 octvalue_to_pyobj (py_object, octave_list(i)); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
301 seq.append (py_object); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
302 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
303 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
304 python_tuple = tuple (seq); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
305 } |
25 | 306 } |