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