Mercurial > pytave
annotate python_to_octave.cc @ 285:06a4b461b141
pyobject: hide methods which start with underscore (fixes issue #23)
* @pyobject/methods.m: Hide methods.
author | Colin Macdonald <cbm@m.fsf.org> |
---|---|
date | Tue, 02 Aug 2016 00:06:42 -0700 |
parents | 6e83efbcf1bc |
children | 4c4747646e12 |
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:
132
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:
132
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:
132
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:
132
diff
changeset
|
6 |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
132
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:
132
diff
changeset
|
8 |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
132
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:
132
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:
132
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:
132
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:
132
diff
changeset
|
13 |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
132
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:
132
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:
132
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:
132
diff
changeset
|
17 for more details. |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
132
diff
changeset
|
18 |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
132
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:
132
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:
132
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:
132
diff
changeset
|
22 |
b12908ffa6df
maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents:
132
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 <iostream> |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
30 #include <boost/python.hpp> |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
31 #include <boost/python/numeric.hpp> |
46 | 32 #include <boost/type_traits/integral_constant.hpp> |
100
ff70627aa203
Undef HAVE_STAT and HAVE_FSTAT consistently through-out all files
David Grundberg <individ@acc.umu.se>
parents:
81
diff
changeset
|
33 |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
34 #include <octave/oct.h> |
9 | 35 #include <octave/oct-map.h> |
36 #include <octave/Cell.h> | |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
37 #include <octave/ov.h> |
106
896fdc369789
Use latest Octave library API
Mike Miller <mtmiller@octave.org>
parents:
102
diff
changeset
|
38 #include <octave/Array.h> |
278
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
39 #include <octave/parse.h> |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
40 |
75
b0991511a16d
a few fixes to numpy support
Jaroslav Hajek <highegg@gmail.com>
parents:
70
diff
changeset
|
41 #include "arrayobjectdefs.h" |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
42 #include "exceptions.h" |
142
dc2876fdbfaf
* python_to_octave.cc: Include missing header file python_to_octave.h.
Mike Miller <mtmiller@octave.org>
parents:
139
diff
changeset
|
43 #include "python_to_octave.h" |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
44 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
45 using namespace boost::python; |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
46 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
47 namespace pytave |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
48 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
49 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
|
50 static void |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
51 copy_pyarrobj_to_octarray (OctaveBase& matrix, PyArrayObject *pyarr, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
52 const int unsigned matindex, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
53 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
|
54 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
|
55 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
56 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
|
57 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
|
58 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
59 // 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
|
60 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
|
61 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
62 matrix.elem (matindex + i*matstride) |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
63 = *(PythonPrimitive*) |
108 | 64 &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
|
65 } |
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 else if (PyArray_NDIM (pyarr) == 0) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
68 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
69 matrix.elem (0) = *(PythonPrimitive*) ptr; |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
70 } |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
71 else |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
72 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
73 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
|
74 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
75 copy_pyarrobj_to_octarray<PythonPrimitive, OctaveBase> ( |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
76 matrix, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
77 pyarr, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
78 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
|
79 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
|
80 dimension + 1, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
81 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
|
82 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
83 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
84 } |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
85 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
86 template <> |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
87 void |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
88 copy_pyarrobj_to_octarray<PyObject *, Cell> (Cell& matrix, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
89 PyArrayObject *pyarr, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
90 const int unsigned matindex, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
91 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
|
92 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
|
93 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
|
94 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
95 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
|
96 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
|
97 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
98 // 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
|
99 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
|
100 { |
51
b001edc0f81a
implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
101 PyObject *pobj = *(PyObject **) |
108 | 102 &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
|
103 pyobj_to_octvalue (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
|
104 object (handle<PyObject> (borrowed (pobj)))); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
105 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
106 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
107 else if (PyArray_NDIM (pyarr) == 0) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
108 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
109 PyObject *pobj = *(PyObject **) ptr; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
110 pyobj_to_octvalue (matrix.elem (0), |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
111 object (handle<PyObject> (borrowed (pobj)))); |
51
b001edc0f81a
implement Python->Octave conversions of Character and PyObject 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 else |
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 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
|
116 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
117 copy_pyarrobj_to_octarray<PyObject *, Cell> ( |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
118 matrix, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
119 pyarr, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
120 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
|
121 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
|
122 dimension + 1, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
123 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
|
124 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
125 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
126 } |
51
b001edc0f81a
implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
127 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
128 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
|
129 static void |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
130 copy_pyarrobj_to_octarray_dispatch (OctaveBase& matrix, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
131 PyArrayObject *pyarr, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
132 const boost::true_type&) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
133 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
134 copy_pyarrobj_to_octarray<PythonPrimitive, OctaveBase> (matrix, pyarr, 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
|
135 } |
46 | 136 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
137 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
|
138 static void |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
139 copy_pyarrobj_to_octarray_dispatch (OctaveBase& matrix, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
140 PyArrayObject *pyarr, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
141 const boost::false_type&) |
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 assert (0); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
144 } |
46 | 145 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
146 template <class X, class Y> class matching_type : public boost::false_type { }; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
147 template <class X> class matching_type<X, X> : public boost::true_type { }; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
148 template <class X> class matching_type<X, octave_int<X> > : public boost::true_type { }; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
149 template <> class matching_type<float, double> : public boost::true_type { }; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
150 template <> class matching_type<FloatComplex, Complex> : public boost::true_type { }; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
151 template <> class matching_type<PyObject *, octave_value> : public boost::true_type { }; |
46 | 152 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
153 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
|
154 static void |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
155 copy_pyarrobj_to_octarray_dispatch (OctaveBase& matrix, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
156 PyArrayObject *pyarr) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
157 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
158 matching_type<PythonPrimitive, typename OctaveBase::element_type> inst; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
159 copy_pyarrobj_to_octarray_dispatch<PythonPrimitive, OctaveBase> (matrix, pyarr, inst); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
160 } |
46 | 161 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
162 template <class OctaveBase> |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
163 static void |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
164 copy_pyarrobj_to_octarray_boot (OctaveBase& matrix, PyArrayObject *pyarr) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
165 { |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
166 |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
167 #define ARRAYCASE(AC_pyarrtype, AC_primitive) case AC_pyarrtype: \ |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
168 copy_pyarrobj_to_octarray_dispatch<AC_primitive, OctaveBase> \ |
46 | 169 (matrix, pyarr); \ |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
170 break; \ |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
171 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
172 // Coerce NumPy's long type into one of two possible sized integer types |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
173 int type_num = PyArray_TYPE (pyarr); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
174 switch (type_num) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
175 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
176 case NPY_LONG: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
177 if (sizeof (npy_long) == sizeof (int64_t)) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
178 type_num = NPY_INT64; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
179 else if (sizeof (npy_long) == sizeof (int32_t)) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
180 type_num = NPY_INT32; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
181 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
182 case NPY_LONGLONG: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
183 if (sizeof (npy_longlong) == sizeof (int64_t)) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
184 type_num = NPY_INT64; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
185 else if (sizeof (npy_longlong) == sizeof (int32_t)) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
186 type_num = NPY_INT32; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
187 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
188 case NPY_ULONG: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
189 if (sizeof (npy_ulong) == sizeof (uint64_t)) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
190 type_num = NPY_UINT64; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
191 else if (sizeof (npy_ulong) == sizeof (uint32_t)) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
192 type_num = NPY_UINT32; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
193 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
194 case NPY_ULONGLONG: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
195 if (sizeof (npy_ulonglong) == sizeof (uint64_t)) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
196 type_num = NPY_UINT64; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
197 else if (sizeof (npy_ulonglong) == sizeof (uint32_t)) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
198 type_num = NPY_UINT32; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
199 break; |
47
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
200 } |
c83754e57d26
Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents:
46
diff
changeset
|
201 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
202 switch (type_num) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
203 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
204 ARRAYCASE (NPY_INT8, int8_t) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
205 ARRAYCASE (NPY_INT16, int16_t) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
206 ARRAYCASE (NPY_INT32, int32_t) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
207 ARRAYCASE (NPY_INT64, int64_t) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
208 ARRAYCASE (NPY_UINT8, uint8_t) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
209 ARRAYCASE (NPY_UINT16, uint16_t) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
210 ARRAYCASE (NPY_UINT32, uint32_t) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
211 ARRAYCASE (NPY_UINT64, uint64_t) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
212 ARRAYCASE (NPY_FLOAT, float) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
213 ARRAYCASE (NPY_DOUBLE, double) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
214 ARRAYCASE (NPY_CFLOAT, FloatComplex) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
215 ARRAYCASE (NPY_CDOUBLE, Complex) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
216 ARRAYCASE (NPY_BOOL, bool) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
217 ARRAYCASE (NPY_CHAR, char) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
218 ARRAYCASE (NPY_STRING, char) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
219 ARRAYCASE (NPY_OBJECT, PyObject *) |
51
b001edc0f81a
implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
50
diff
changeset
|
220 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
221 default: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
222 throw object_convert_exception ( |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
223 PyEval_GetFuncName ((PyObject*)pyarr) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
224 + (PyEval_GetFuncDesc ((PyObject*)pyarr) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
225 + std::string (": Unsupported Python array type"))); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
226 } |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
227 } |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
228 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
229 template <class OctaveBase> |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
230 static void |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
231 pyarrobj_to_octvalueNd (octave_value& octvalue, PyArrayObject *pyarr, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
232 const dim_vector& dims) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
233 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
234 OctaveBase array (dims); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
235 copy_pyarrobj_to_octarray_boot<OctaveBase> (array, pyarr); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
236 octvalue = array; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
237 } |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
238 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
239 static void |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
240 pyarr_to_octvalue (octave_value& octvalue, PyArrayObject *pyarr) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
241 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
242 dim_vector dims; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
243 switch (PyArray_NDIM (pyarr)) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
244 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
245 case 0: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
246 dims = dim_vector (1, 1); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
247 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
248 case 1: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
249 // Always make PyArray vectors row vectors. |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
250 dims = dim_vector (1, PyArray_DIM (pyarr, 0)); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
251 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
252 default: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
253 dims.resize (PyArray_NDIM (pyarr)); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
254 for (int d = 0; d < PyArray_NDIM (pyarr); d++) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
255 dims(d) = PyArray_DIM (pyarr, d); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
256 break; |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
257 } |
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
258 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
259 switch (PyArray_TYPE (pyarr)) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
260 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
261 case NPY_BYTE: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
262 case NPY_SHORT: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
263 case NPY_INT: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
264 case NPY_LONG: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
265 case NPY_LONGLONG: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
266 switch (PyArray_ITEMSIZE (pyarr)) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
267 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
268 case 1: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
269 pyarrobj_to_octvalueNd<int8NDArray> (octvalue, pyarr, dims); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
270 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
271 case 2: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
272 pyarrobj_to_octvalueNd<int16NDArray> (octvalue, pyarr, dims); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
273 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
274 case 4: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
275 pyarrobj_to_octvalueNd<int32NDArray> (octvalue, pyarr, dims); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
276 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
277 case 8: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
278 pyarrobj_to_octvalueNd<int64NDArray> (octvalue, pyarr, dims); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
279 break; |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
280 default: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
281 throw object_convert_exception ("Unknown integer."); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
282 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
283 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
284 case NPY_UBYTE: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
285 case NPY_USHORT: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
286 case NPY_UINT: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
287 case NPY_ULONG: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
288 case NPY_ULONGLONG: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
289 switch (PyArray_ITEMSIZE (pyarr)) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
290 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
291 case 1: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
292 pyarrobj_to_octvalueNd<uint8NDArray> (octvalue, pyarr, dims); |
143
fe783134c61c
Fix conversion of integer types by using strictly sized integers
Mike Miller <mtmiller@octave.org>
parents:
142
diff
changeset
|
293 break; |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
294 case 2: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
295 pyarrobj_to_octvalueNd<uint16NDArray> (octvalue, pyarr, dims); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
296 break; |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
297 case 4: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
298 pyarrobj_to_octvalueNd<uint32NDArray> (octvalue, pyarr, dims); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
299 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
300 case 8: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
301 pyarrobj_to_octvalueNd<uint64NDArray> (octvalue, pyarr, dims); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
302 break; |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
303 default: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
304 throw object_convert_exception ("Unknown unsigned integer."); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
305 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
306 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
307 case NPY_FLOAT: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
308 pyarrobj_to_octvalueNd<FloatNDArray> (octvalue, pyarr, dims); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
309 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
310 case NPY_DOUBLE: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
311 pyarrobj_to_octvalueNd<NDArray> (octvalue, pyarr, dims); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
312 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
313 case NPY_CFLOAT: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
314 pyarrobj_to_octvalueNd<FloatComplexNDArray> (octvalue, pyarr, dims); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
315 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
316 case NPY_CDOUBLE: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
317 pyarrobj_to_octvalueNd<ComplexNDArray> (octvalue, pyarr, dims); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
318 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
319 case NPY_BOOL: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
320 pyarrobj_to_octvalueNd<boolNDArray> (octvalue, pyarr, dims); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
321 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
322 case NPY_CHAR: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
323 case_NPY_CHAR: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
324 pyarrobj_to_octvalueNd<charNDArray> (octvalue, pyarr, dims); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
325 // FIXME: is the following needed? |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
326 octvalue = octvalue.convert_to_str (true, true, '"'); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
327 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
328 case NPY_STRING: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
329 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
330 if (PyArray_ITEMSIZE (pyarr) == 1) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
331 goto case_NPY_CHAR; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
332 else |
81
2e8b52a5e1b1
support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
79
diff
changeset
|
333 { |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
334 // Create a new descriptor of the data. |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
335 PyArray_Descr *view_descr = PyArray_DescrFromType (NPY_CHAR); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
336 // Create a new view of the NumPy array. |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
337 PyArrayObject *view = (PyArrayObject *)PyArray_View (pyarr, view_descr, 0); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
338 // Store in a handle to ensure proper destruction. |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
339 handle<PyObject> view_handle (allow_null ((PyObject *)view)); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
340 // Call recursively. |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
341 pyarr_to_octvalue (octvalue, view); |
81
2e8b52a5e1b1
support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
79
diff
changeset
|
342 } |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
343 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
344 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
345 case NPY_OBJECT: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
346 pyarrobj_to_octvalueNd<Cell> (octvalue, pyarr, dims); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
347 break; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
348 default: |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
349 throw object_convert_exception ( |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
350 PyEval_GetFuncDesc ((PyObject*)(pyarr)) + std::string (" ") |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
351 + PyEval_GetFuncName ((PyObject*)(pyarr)) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
352 + ": Encountered unsupported Python array"); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
353 break; |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
354 } |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
355 } |
25 | 356 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
357 static void |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
358 pylist_to_cellarray (octave_value& oct_value, const boost::python::list& list) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
359 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
360 octave_idx_type length = boost::python::extract<octave_idx_type> (list.attr ("__len__") ()); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
361 octave_value_list values; |
9 | 362 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
363 for (octave_idx_type 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
|
364 { |
25 | 365 octave_value val; |
9 | 366 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
367 pyobj_to_octvalue (val, list[i]); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
368 values.append (val); |
9 | 369 |
370 } | |
25 | 371 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
372 oct_value = Cell (values); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
373 } |
9 | 374 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
375 static void |
179
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
376 pytuple_to_cellarray (octave_value& oct_value, const boost::python::tuple& tuple) |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
377 { |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
378 octave_idx_type length = boost::python::extract<octave_idx_type> (tuple.attr ("__len__") ()); |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
379 octave_value_list values; |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
380 |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
381 for (octave_idx_type i = 0; i < length; i++) |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
382 { |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
383 octave_value val; |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
384 |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
385 pyobj_to_octvalue (val, tuple[i]); |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
386 values.append (val); |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
387 |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
388 } |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
389 |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
390 oct_value = Cell (values); |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
391 } |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
392 |
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
393 static void |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
394 pydict_to_octmap (octave_value& oct_value, const boost::python::dict& dict) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
395 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
396 boost::python::list list = dict.items (); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
397 octave_idx_type length = boost::python::extract<octave_idx_type> (list.attr ("__len__") ()); |
9 | 398 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
399 dim_vector dims = dim_vector (1, 1); |
9 | 400 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
401 octave_value_list vals (length); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
402 string_vector keys (length); |
43
31df83060183
avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents:
31
diff
changeset
|
403 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
404 // Extract all keys and convert values. Remember whether dimensions |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
405 // match. |
107
691ef5c6b9e2
maint: Clean up std namespace pollution
Mike Miller <mtmiller@octave.org>
parents:
106
diff
changeset
|
406 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
407 for (octave_idx_type 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
|
408 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
409 std::string& key = keys[i]; |
43
31df83060183
avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents:
31
diff
changeset
|
410 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
411 boost::python::tuple tuple = |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
412 boost::python::extract<boost::python::tuple> (list[i]) (); |
9 | 413 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
414 boost::python::extract<std::string> str (tuple[0]); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
415 if (! str.check ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
416 throw object_convert_exception ( |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
417 std::string ("Can not convert key of type ") |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
418 + PyEval_GetFuncName (boost::python::object (tuple[0]).ptr ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
419 + PyEval_GetFuncDesc (boost::python::object (tuple[0]).ptr ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
420 + " to a structure field name. Field names must be strings."); |
43
31df83060183
avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents:
31
diff
changeset
|
421 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
422 key = str (); |
43
31df83060183
avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents:
31
diff
changeset
|
423 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
424 if (! valid_identifier (key)) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
425 throw object_convert_exception ( |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
426 std::string ("Can not convert key `") + key + "' to a structure " |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
427 "field name. Field names must be valid Octave identifiers."); |
43
31df83060183
avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents:
31
diff
changeset
|
428 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
429 octave_value& val = vals(i); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
430 |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
431 pyobj_to_octvalue (val, tuple[1]); |
43
31df83060183
avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents:
31
diff
changeset
|
432 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
433 if (val.is_cell ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
434 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
435 if (i == 0) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
436 dims = val.dims (); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
437 else if (val.numel () != 1 && val.dims () != dims) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
438 throw object_convert_exception ( |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
439 "Dimensions of the struct fields do not match"); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
440 } |
9 | 441 } |
442 | |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
443 octave_map map = octave_map (dims); |
9 | 444 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
445 for (octave_idx_type 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
|
446 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
447 std::string& key = keys[i]; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
448 octave_value val = vals(i); |
9 | 449 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
450 if (val.is_cell ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
451 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
452 const Cell c = val.cell_value (); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
453 if (c.numel () == 1) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
454 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
455 map.assign (key, Cell (dims, c(0))); |
68
2f4d6286fb36
make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
56
diff
changeset
|
456 } |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
457 else |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
458 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
459 map.assign (key, c); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
460 } |
9 | 461 } |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
462 else |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
463 map.assign (key, Cell (dims, val)); |
9 | 464 } |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
465 oct_value = map; |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
466 } |
9 | 467 |
177
c956f7a932e7
Convert Python unicode strings into UTF-8 char arrays (fixes issue #5)
Mike Miller <mtmiller@octave.org>
parents:
150
diff
changeset
|
468 static std::string |
c956f7a932e7
Convert Python unicode strings into UTF-8 char arrays (fixes issue #5)
Mike Miller <mtmiller@octave.org>
parents:
150
diff
changeset
|
469 pyunicode_to_utf8 (PyObject *unicode) |
c956f7a932e7
Convert Python unicode strings into UTF-8 char arrays (fixes issue #5)
Mike Miller <mtmiller@octave.org>
parents:
150
diff
changeset
|
470 { |
c956f7a932e7
Convert Python unicode strings into UTF-8 char arrays (fixes issue #5)
Mike Miller <mtmiller@octave.org>
parents:
150
diff
changeset
|
471 std::string str; |
c956f7a932e7
Convert Python unicode strings into UTF-8 char arrays (fixes issue #5)
Mike Miller <mtmiller@octave.org>
parents:
150
diff
changeset
|
472 PyObject *utf8 = PyUnicode_AsUTF8String (unicode); |
c956f7a932e7
Convert Python unicode strings into UTF-8 char arrays (fixes issue #5)
Mike Miller <mtmiller@octave.org>
parents:
150
diff
changeset
|
473 str.assign (PyBytes_AsString (utf8), PyBytes_Size (utf8)); |
c956f7a932e7
Convert Python unicode strings into UTF-8 char arrays (fixes issue #5)
Mike Miller <mtmiller@octave.org>
parents:
150
diff
changeset
|
474 Py_DECREF (utf8); |
c956f7a932e7
Convert Python unicode strings into UTF-8 char arrays (fixes issue #5)
Mike Miller <mtmiller@octave.org>
parents:
150
diff
changeset
|
475 return str; |
c956f7a932e7
Convert Python unicode strings into UTF-8 char arrays (fixes issue #5)
Mike Miller <mtmiller@octave.org>
parents:
150
diff
changeset
|
476 } |
c956f7a932e7
Convert Python unicode strings into UTF-8 char arrays (fixes issue #5)
Mike Miller <mtmiller@octave.org>
parents:
150
diff
changeset
|
477 |
278
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
478 static void |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
479 pyobj_to_oct_pyobject (octave_value& oct_value, |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
480 const boost::python::object& py_object) |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
481 { |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
482 object main_module = import ("__main__"); |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
483 object main_namespace = main_module.attr ("__dict__"); |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
484 #if PY_VERSION_HEX >= 0x03000000 |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
485 object builtins_module = import ("builtins"); |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
486 #else |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
487 object builtins_module = import ("__builtin__"); |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
488 #endif |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
489 object hex_function = builtins_module.attr ("hex"); |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
490 object id_function = builtins_module.attr ("id"); |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
491 object idtmp = hex_function (id_function (py_object)); |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
492 std::string id = extract<std::string> (idtmp); |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
493 |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
494 // Ensure we have a __InOct__ dict, and then put `res` into it |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
495 exec ("if not (\"__InOct__\" in vars() or \"__InOct__\" in globals()):\n" |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
496 " __InOct__ = dict()\n" |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
497 " # FIXME: make it accessible elsewhere?\n" |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
498 " import __main__\n" |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
499 " __main__.__InOct__ = __InOct__\n", |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
500 main_namespace, main_namespace); |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
501 main_namespace["__InOct__"][id] = py_object; |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
502 // Create @pyobject |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
503 oct_value = feval ("pyobject", ovl (id), 1); |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
504 } |
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
505 |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
506 void pyobj_to_octvalue (octave_value& oct_value, |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
507 const 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
|
508 { |
271
0a4f620da178
Convert numeric value to long instead of int to avoid overflow (fixes issue #40)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
509 extract<long> longx (py_object); |
183
2b03585d4ddd
Add proper conversion of booleans between octave and python. (fixes issue #6)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
179
diff
changeset
|
510 extract<bool> boolx (py_object); |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
511 extract<double> doublex (py_object); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
512 extract<Complex> complexx (py_object); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
513 extract<std::string> stringx (py_object); |
177
c956f7a932e7
Convert Python unicode strings into UTF-8 char arrays (fixes issue #5)
Mike Miller <mtmiller@octave.org>
parents:
150
diff
changeset
|
514 extract<std::wstring> wstringx (py_object); |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
515 extract<numeric::array> arrayx (py_object); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
516 extract<boost::python::list> listx (py_object); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
517 extract<boost::python::dict> dictx (py_object); |
179
c05ff3e85fec
Add conversion of python tuples to octave cell arrays.
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
177
diff
changeset
|
518 extract<boost::python::tuple> tuplex (py_object); |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
519 |
184
8b97647e48f1
maint: whitespace fixes for cset 2b03585d4ddd
Mike Miller <mtmiller@octave.org>
parents:
183
diff
changeset
|
520 if (boolx.check () && PyBool_Check ((PyArrayObject*)py_object.ptr ())) |
183
2b03585d4ddd
Add proper conversion of booleans between octave and python. (fixes issue #6)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
179
diff
changeset
|
521 oct_value = boolx (); |
271
0a4f620da178
Convert numeric value to long instead of int to avoid overflow (fixes issue #40)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
522 else if (longx.check ()) |
0a4f620da178
Convert numeric value to long instead of int to avoid overflow (fixes issue #40)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
523 oct_value = longx (); |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
524 else if (doublex.check ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
525 oct_value = doublex (); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
526 else if (complexx.check ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
527 oct_value = complexx (); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
528 else if (arrayx.check ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
529 pyarr_to_octvalue (oct_value, (PyArrayObject*)py_object.ptr ()); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
530 else if (stringx.check ()) |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
531 oct_value = stringx (); |
177
c956f7a932e7
Convert Python unicode strings into UTF-8 char arrays (fixes issue #5)
Mike Miller <mtmiller@octave.org>
parents:
150
diff
changeset
|
532 else if (wstringx.check ()) |
c956f7a932e7
Convert Python unicode strings into UTF-8 char arrays (fixes issue #5)
Mike Miller <mtmiller@octave.org>
parents:
150
diff
changeset
|
533 oct_value = pyunicode_to_utf8 (py_object.ptr ()); |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
534 else |
278
9278a272b1c8
Drop conversion of lists, dicts and tuples (fixes issues #27, #26)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
225
diff
changeset
|
535 pyobj_to_oct_pyobject (oct_value, py_object); |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
536 } |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
537 |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
538 void pytuple_to_octlist (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
|
539 const 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
|
540 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
541 int length = extract<int> (python_tuple.attr ("__len__") ()); |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
542 |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
543 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
|
544 { |
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
545 pyobj_to_octvalue (octave_list(i), python_tuple[i]); |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
546 } |
146
8e3d06f2f5cf
Use Octave coding style for C++ sources, PEP8 style for Python sources
Mike Miller <mtmiller@octave.org>
parents:
143
diff
changeset
|
547 } |
0
4da14cce0890
First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff
changeset
|
548 } |