annotate python_to_octave.cc @ 139:b12908ffa6df

maint: Use Octave style for file copyright block, delete editor footer * arrayobjectdefs.h, exceptions.{cc,h}, octave_to_python.{cc,h}, py.cc, pytave.cc, python_to_octave.{cc,h}, package/__init__.py, package/pytave.py: Use consistent Octave style for file copyright block. Delete editor footer. * ChangeLog, test/test.py: Delete editor footer.
author Mike Miller <mtmiller@octave.org>
date Mon, 04 Apr 2016 17:16:58 -0700
parents 386772f4e12d
children dc2876fdbfaf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
1 /*
139
b12908ffa6df maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents: 132
diff changeset
2
b12908ffa6df maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents: 132
diff changeset
3 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
4 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
5
b12908ffa6df maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents: 132
diff changeset
6 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
7
b12908ffa6df maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents: 132
diff changeset
8 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
9 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
10 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
11 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
12
b12908ffa6df maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents: 132
diff changeset
13 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
14 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
15 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
16 for more details.
b12908ffa6df maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents: 132
diff changeset
17
b12908ffa6df maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents: 132
diff changeset
18 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
19 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
20 <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
21
b12908ffa6df maint: Use Octave style for file copyright block, delete editor footer
Mike Miller <mtmiller@octave.org>
parents: 132
diff changeset
22 */
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
23
132
386772f4e12d Clean up includes thanks to Octave header changes
Mike Miller <mtmiller@octave.org>
parents: 108
diff changeset
24 #if defined (HAVE_CONFIG_H)
386772f4e12d Clean up includes thanks to Octave header changes
Mike Miller <mtmiller@octave.org>
parents: 108
diff changeset
25 # include <config.h>
386772f4e12d Clean up includes thanks to Octave header changes
Mike Miller <mtmiller@octave.org>
parents: 108
diff changeset
26 #endif
386772f4e12d Clean up includes thanks to Octave header changes
Mike Miller <mtmiller@octave.org>
parents: 108
diff changeset
27
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
28 #include <iostream>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
29 #include <boost/python.hpp>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
30 #include <boost/python/numeric.hpp>
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
31 #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
32
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
33 #include <octave/oct.h>
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
34 #include <octave/oct-map.h>
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
35 #include <octave/Cell.h>
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
36 #include <octave/ov.h>
106
896fdc369789 Use latest Octave library API
Mike Miller <mtmiller@octave.org>
parents: 102
diff changeset
37 #include <octave/Array.h>
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
38
75
b0991511a16d a few fixes to numpy support
Jaroslav Hajek <highegg@gmail.com>
parents: 70
diff changeset
39 #include "arrayobjectdefs.h"
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
40 #include "exceptions.h"
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
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
44 namespace pytave {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
45
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
46 void pyobj_to_octvalue(octave_value &oct_value,
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
47 const boost::python::object &py_object);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
48
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
49 template <class PythonPrimitive, class OctaveBase>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
50 static void copy_pyarrobj_to_octarray(OctaveBase &matrix,
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
51 PyArrayObject* pyarr,
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
52 const int unsigned matindex,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
53 const unsigned int matstride,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
54 const int dimension,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
55 const unsigned int offset) {
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
56 unsigned char *ptr = (unsigned char*) PyArray_DATA (pyarr);
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
57 if (dimension == PyArray_NDIM (pyarr) - 1) {
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
58 // Last dimension, base case
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
59 for (int i = 0; i < PyArray_DIM (pyarr, dimension); i++) {
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
60 matrix.elem(matindex + i*matstride)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
61 = *(PythonPrimitive*)
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
62 &ptr[offset + i*PyArray_STRIDE (pyarr, dimension)];
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
63 }
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
64 } else if (PyArray_NDIM (pyarr) == 0) {
79
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
65 matrix.elem(0) = *(PythonPrimitive*) ptr;
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
66 } else {
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
67 for (int i = 0; i < PyArray_DIM (pyarr, dimension); i++) {
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
68 copy_pyarrobj_to_octarray<PythonPrimitive, OctaveBase>(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
69 matrix,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
70 pyarr,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
71 matindex + i*matstride,
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
72 matstride * PyArray_DIM (pyarr, dimension),
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
73 dimension + 1,
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
74 offset + i*PyArray_STRIDE (pyarr, dimension));
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
75 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
76 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
77 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
78
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
79 template <>
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
80 void copy_pyarrobj_to_octarray<PyObject *, Cell>(Cell &matrix,
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
81 PyArrayObject* pyarr,
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
82 const int unsigned matindex,
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
83 const unsigned int matstride,
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
84 const int dimension,
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
85 const unsigned int offset) {
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
86 unsigned char *ptr = (unsigned char*) PyArray_DATA (pyarr);
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
87 if (dimension == PyArray_NDIM (pyarr) - 1) {
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
88 // Last dimension, base case
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
89 for (int i = 0; i < PyArray_DIM (pyarr, dimension); i++) {
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
90 PyObject *pobj = *(PyObject **)
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
91 &ptr[offset + i*PyArray_STRIDE (pyarr, dimension)];
107
691ef5c6b9e2 maint: Clean up std namespace pollution
Mike Miller <mtmiller@octave.org>
parents: 106
diff changeset
92 pyobj_to_octvalue (matrix.elem(matindex + i*matstride),
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
93 object(handle<PyObject> (borrowed (pobj))));
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
94 }
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
95 } else if (PyArray_NDIM (pyarr) == 0) {
79
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
96 PyObject *pobj = *(PyObject **) ptr;
107
691ef5c6b9e2 maint: Clean up std namespace pollution
Mike Miller <mtmiller@octave.org>
parents: 106
diff changeset
97 pyobj_to_octvalue (matrix.elem(0),
79
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
98 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
99 } else {
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
100 for (int i = 0; i < PyArray_DIM (pyarr, dimension); i++) {
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
101 copy_pyarrobj_to_octarray<PyObject *, Cell>(
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
102 matrix,
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
103 pyarr,
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
104 matindex + i*matstride,
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
105 matstride * PyArray_DIM (pyarr, dimension),
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
106 dimension + 1,
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
107 offset + i*PyArray_STRIDE (pyarr, dimension));
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
108 }
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
109 }
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
110 }
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
111
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
112 template <class PythonPrimitive, class OctaveBase>
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
113 static void copy_pyarrobj_to_octarray_dispatch(OctaveBase &matrix,
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
114 PyArrayObject* pyarr,
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
115 const boost::true_type&) {
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
116 copy_pyarrobj_to_octarray<PythonPrimitive, OctaveBase>
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
117 (matrix, pyarr, 0, 1, 0, 0);
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
118 }
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
119
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
120 template <class PythonPrimitive, class OctaveBase>
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
121 static void copy_pyarrobj_to_octarray_dispatch(OctaveBase &matrix,
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
122 PyArrayObject* pyarr,
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
123 const boost::false_type&) {
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
124 assert(0);
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
125 }
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
126
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
127 template <class X, class Y> class matching_type : public boost::false_type { };
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
128 template <class X> class matching_type<X, X> : public boost::true_type { };
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
129 template <class X> class matching_type<X, octave_int<X> > : public boost::true_type { };
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
130 template <> class matching_type<float, double> : public boost::true_type { };
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
131 template <> class matching_type<FloatComplex, Complex> : public boost::true_type { };
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
132 template <> class matching_type<PyObject *, octave_value> : public boost::true_type { };
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
133
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
134 template <class PythonPrimitive, class OctaveBase>
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
135 static void copy_pyarrobj_to_octarray_dispatch(OctaveBase &matrix,
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
136 PyArrayObject* pyarr) {
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
137 matching_type<PythonPrimitive, typename OctaveBase::element_type> inst;
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
138 copy_pyarrobj_to_octarray_dispatch<PythonPrimitive, OctaveBase> (matrix, pyarr, inst);
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
139 }
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
140
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
141 template <class OctaveBase>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
142 static void copy_pyarrobj_to_octarray_boot(OctaveBase &matrix,
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
143 PyArrayObject* pyarr) {
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
144
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
145 #define ARRAYCASE(AC_pyarrtype, AC_primitive) case AC_pyarrtype: \
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
146 copy_pyarrobj_to_octarray_dispatch<AC_primitive, OctaveBase>\
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
147 (matrix, pyarr); \
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
148 break; \
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
149
47
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
150 // Prefer int to other types of the same size.
50
22e74c46bea2 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 48 47
diff changeset
151 // E.g. on 32-bit x86 architectures: sizeof(long) == sizeof(int).
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
152 int type_num = PyArray_TYPE (pyarr);
47
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
153 switch (type_num) {
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
154 case NPY_LONG:
47
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
155 if (sizeof(long) == sizeof(int)) {
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
156 type_num = NPY_INT;
47
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
157 }
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
158 break;
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
159 case NPY_SHORT:
47
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
160 if (sizeof(short) == sizeof(int)) {
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
161 type_num = NPY_INT;
47
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
162 }
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
163 break;
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
164 case NPY_USHORT:
47
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
165 if (sizeof(unsigned short) == sizeof(unsigned int)) {
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
166 type_num = NPY_UINT;
47
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
167 }
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
168 break;
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
169 }
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
170
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
171 switch (type_num) {
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
172 ARRAYCASE(NPY_CHAR, char)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
173 ARRAYCASE(NPY_BYTE, signed char)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
174 ARRAYCASE(NPY_UBYTE, unsigned char)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
175 ARRAYCASE(NPY_SHORT, signed short)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
176 ARRAYCASE(NPY_USHORT, unsigned short)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
177 ARRAYCASE(NPY_INT, signed int)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
178 ARRAYCASE(NPY_UINT, unsigned int)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
179 ARRAYCASE(NPY_LONG, signed long)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
180 ARRAYCASE(NPY_LONGLONG, signed long long)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
181 ARRAYCASE(NPY_FLOAT, float)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
182 ARRAYCASE(NPY_DOUBLE, double)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
183 ARRAYCASE(NPY_CFLOAT, FloatComplex)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
184 ARRAYCASE(NPY_CDOUBLE, Complex)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
185 ARRAYCASE(NPY_BOOL, bool)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
186 ARRAYCASE(NPY_STRING, char)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
187 ARRAYCASE(NPY_OBJECT, PyObject *)
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
188
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
189 default:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
190 throw object_convert_exception(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
191 PyEval_GetFuncName((PyObject*)pyarr)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
192 + (PyEval_GetFuncDesc((PyObject*)pyarr)
107
691ef5c6b9e2 maint: Clean up std namespace pollution
Mike Miller <mtmiller@octave.org>
parents: 106
diff changeset
193 + std::string(": Unsupported Python array type")));
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
194 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
195 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
196
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
197 template <class OctaveBase>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
198 static void pyarrobj_to_octvalueNd(octave_value &octvalue,
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
199 PyArrayObject* pyarr,
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
200 dim_vector dims) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
201 OctaveBase array(dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
202 copy_pyarrobj_to_octarray_boot<OctaveBase>(array, pyarr);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
203 octvalue = array;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
204 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
205
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
206 static void pyarr_to_octvalue(octave_value &octvalue,
81
2e8b52a5e1b1 support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 79
diff changeset
207 PyArrayObject *pyarr) {
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
208 dim_vector dims;
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
209 switch (PyArray_NDIM (pyarr)) {
79
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
210 case 0:
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
211 dims = dim_vector (1, 1);
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
212 break;
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
213 case 1:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
214 // Always make PyArray vectors row vectors.
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
215 dims = dim_vector(1, PyArray_DIM (pyarr, 0));
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
216 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
217 default:
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
218 dims.resize(PyArray_NDIM (pyarr));
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
219 for (int d = 0; d < PyArray_NDIM (pyarr); d++) {
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
220 dims(d) = PyArray_DIM (pyarr, d);
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
221 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
222 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
223 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
224
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
225 switch (PyArray_TYPE (pyarr)) {
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
226 case NPY_UBYTE:
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
227 case NPY_USHORT:
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
228 case NPY_UINT:
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
229 switch (PyArray_ITEMSIZE (pyarr)) {
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
230 case 1:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
231 pyarrobj_to_octvalueNd<uint8NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
232 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
233 case 2:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
234 pyarrobj_to_octvalueNd<uint16NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
235 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
236 case 4:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
237 pyarrobj_to_octvalueNd<uint32NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
238 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
239 default:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
240 throw object_convert_exception("Unknown unsigned integer.");
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
241 }
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
242 case NPY_BYTE:
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
243 case NPY_SHORT:
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
244 case NPY_INT:
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
245 case NPY_LONG:
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
246 case NPY_LONGLONG:
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
247 switch (PyArray_ITEMSIZE (pyarr)) {
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
248 case 1:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
249 pyarrobj_to_octvalueNd<int8NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
250 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
251 case 2:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
252 pyarrobj_to_octvalueNd<int16NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
253 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
254 case 4:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
255 pyarrobj_to_octvalueNd<int32NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
256 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
257 case 8:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
258 pyarrobj_to_octvalueNd<int64NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
259 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
260 default:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
261 throw object_convert_exception("Unknown integer.");
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
262 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
263 break;
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
264 case NPY_FLOAT:
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
265 pyarrobj_to_octvalueNd<FloatNDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
266 break;
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
267 case NPY_DOUBLE:
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
268 pyarrobj_to_octvalueNd<NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
269 break;
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
270 case NPY_CFLOAT:
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
271 pyarrobj_to_octvalueNd<FloatComplexNDArray>(octvalue, pyarr, dims);
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
272 break;
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
273 case NPY_CDOUBLE:
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
274 pyarrobj_to_octvalueNd<ComplexNDArray>(octvalue, pyarr, dims);
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
275 break;
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
276 case NPY_CHAR:
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
277 case_NPY_CHAR:
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
278 pyarrobj_to_octvalueNd<charNDArray>(octvalue, pyarr, dims);
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
279 // FIXME: is the following needed?
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
280 octvalue = octvalue.convert_to_str(true, true, '"');
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
281 break;
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
282 case NPY_BOOL:
70
e3de0f6f1552 experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents: 68
diff changeset
283 pyarrobj_to_octvalueNd<boolNDArray>(octvalue, pyarr, dims);
e3de0f6f1552 experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents: 68
diff changeset
284 break;
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
285 case NPY_STRING:
81
2e8b52a5e1b1 support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 79
diff changeset
286 {
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
287 if (PyArray_ITEMSIZE (pyarr) == 1)
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
288 goto case_NPY_CHAR;
81
2e8b52a5e1b1 support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 79
diff changeset
289 else {
2e8b52a5e1b1 support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 79
diff changeset
290 // Create a new descriptor of the data.
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
291 PyArray_Descr *view_descr = PyArray_DescrFromType(NPY_CHAR);
81
2e8b52a5e1b1 support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 79
diff changeset
292 // Create a new view of the NumPy array.
2e8b52a5e1b1 support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 79
diff changeset
293 PyArrayObject *view = (PyArrayObject *)PyArray_View (pyarr, view_descr, NULL);
2e8b52a5e1b1 support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 79
diff changeset
294 // Store in a handle to ensure proper destruction.
2e8b52a5e1b1 support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 79
diff changeset
295 handle<PyObject> view_handle (allow_null ((PyObject *)view));
2e8b52a5e1b1 support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 79
diff changeset
296 // Call recursively.
2e8b52a5e1b1 support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 79
diff changeset
297 pyarr_to_octvalue (octvalue, view);
2e8b52a5e1b1 support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 79
diff changeset
298 }
2e8b52a5e1b1 support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 79
diff changeset
299 }
2e8b52a5e1b1 support NumPy string arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 79
diff changeset
300 break;
108
74f17b2a5d45 Use the latest NumPy API
Mike Miller <mtmiller@octave.org>
parents: 107
diff changeset
301 case NPY_OBJECT:
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
302 pyarrobj_to_octvalueNd<Cell>(octvalue, pyarr, dims);
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
303 break;
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
304 default:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
305 throw object_convert_exception(
107
691ef5c6b9e2 maint: Clean up std namespace pollution
Mike Miller <mtmiller@octave.org>
parents: 106
diff changeset
306 PyEval_GetFuncDesc((PyObject*)(pyarr)) + std::string(" ")
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
307 + PyEval_GetFuncName((PyObject*)(pyarr))
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
308 + ": Encountered unsupported Python array");
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
309 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
310 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
311 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
312
25
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
313 static void pylist_to_cellarray(octave_value &oct_value,
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
314 const boost::python::list &list) {
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
315
31
d3c4fa6c6272 Fixed incorrect cell wrapping. Removed misc compiler warnings.
David Grundberg <individ@acc.umu.se>
parents: 27
diff changeset
316 octave_idx_type length = boost::python::extract<octave_idx_type>(
d3c4fa6c6272 Fixed incorrect cell wrapping. Removed misc compiler warnings.
David Grundberg <individ@acc.umu.se>
parents: 27
diff changeset
317 list.attr("__len__")());
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
318 octave_value_list values;
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
319
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
320 for(octave_idx_type i = 0; i < length; i++) {
25
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
321 octave_value val;
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
322
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
323 pyobj_to_octvalue(val, list[i]);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
324 values.append(val);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
325
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
326 }
25
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
327
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
328 oct_value = Cell(values);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
329 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
330
25
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
331 static void pydict_to_octmap(octave_value &oct_value,
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
332 const boost::python::dict &dict) {
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
333
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
334 boost::python::list list = dict.items();
31
d3c4fa6c6272 Fixed incorrect cell wrapping. Removed misc compiler warnings.
David Grundberg <individ@acc.umu.se>
parents: 27
diff changeset
335 octave_idx_type length = boost::python::extract<octave_idx_type>(
d3c4fa6c6272 Fixed incorrect cell wrapping. Removed misc compiler warnings.
David Grundberg <individ@acc.umu.se>
parents: 27
diff changeset
336 list.attr("__len__")());
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
337
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
338 dim_vector dims = dim_vector(1, 1);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
339
106
896fdc369789 Use latest Octave library API
Mike Miller <mtmiller@octave.org>
parents: 102
diff changeset
340 octave_value_list vals (length);
896fdc369789 Use latest Octave library API
Mike Miller <mtmiller@octave.org>
parents: 102
diff changeset
341 string_vector keys (length);
43
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
342
56
43a413b7c151 improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 51
diff changeset
343 // Extract all keys and convert values. Remember whether dimensions
43a413b7c151 improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 51
diff changeset
344 // match.
107
691ef5c6b9e2 maint: Clean up std namespace pollution
Mike Miller <mtmiller@octave.org>
parents: 106
diff changeset
345
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
346 for(octave_idx_type i = 0; i < length; i++) {
43
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
347
106
896fdc369789 Use latest Octave library API
Mike Miller <mtmiller@octave.org>
parents: 102
diff changeset
348 std::string& key = keys[i];
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
349
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
350 boost::python::tuple tuple =
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
351 boost::python::extract<boost::python::tuple>(list[i])();
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
352
43
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
353 boost::python::extract<std::string> str(tuple[0]);
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
354 if(!str.check()) {
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
355 throw object_convert_exception(
107
691ef5c6b9e2 maint: Clean up std namespace pollution
Mike Miller <mtmiller@octave.org>
parents: 106
diff changeset
356 std::string("Can not convert key of type ")
43
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
357 + PyEval_GetFuncName(boost::python::object(tuple[0]).ptr())
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
358 + PyEval_GetFuncDesc(boost::python::object(tuple[0]).ptr())
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
359 + " to a structure field name. Field names must be strings.");
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
360 }
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
361
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
362 key = str();
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
363
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
364 if (!valid_identifier(key)) {
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
365 throw object_convert_exception(
107
691ef5c6b9e2 maint: Clean up std namespace pollution
Mike Miller <mtmiller@octave.org>
parents: 106
diff changeset
366 std::string("Can not convert key `") + key + "' to a structure "
43
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
367 "field name. Field names must be valid Octave identifiers.");
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
368 }
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
369
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
370 octave_value& val = vals(i);
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
371
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
372 pyobj_to_octvalue(val, tuple[1]);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
373
68
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
374 if(val.is_cell()) {
56
43a413b7c151 improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 51
diff changeset
375 if(i == 0) {
68
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
376 dims = val.dims();
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
377 } else if (val.numel() != 1 && val.dims() != dims){
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
378 throw object_convert_exception(
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
379 "Dimensions of the struct fields do not match");
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
380 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
381 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
382 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
383
106
896fdc369789 Use latest Octave library API
Mike Miller <mtmiller@octave.org>
parents: 102
diff changeset
384 octave_map map = octave_map(dims);
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
385
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
386 for(octave_idx_type i = 0; i < length; i++) {
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
387
106
896fdc369789 Use latest Octave library API
Mike Miller <mtmiller@octave.org>
parents: 102
diff changeset
388 std::string& key = keys[i];
43
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
389 octave_value val = vals(i);
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
390
68
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
391 if(val.is_cell()) {
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
392 const Cell c = val.cell_value();
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
393 if (c.numel () == 1) {
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
394 map.assign(key, Cell(dims, c(0)));
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
395 } else {
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
396 map.assign(key, c);
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
397 }
31
d3c4fa6c6272 Fixed incorrect cell wrapping. Removed misc compiler warnings.
David Grundberg <individ@acc.umu.se>
parents: 27
diff changeset
398 } else {
68
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
399 map.assign(key, Cell(dims, val));
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
400 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
401 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
402 oct_value = map;
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
403 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
404
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
405 void pyobj_to_octvalue(octave_value &oct_value,
25
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
406 const boost::python::object &py_object) {
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
407 extract<int> intx(py_object);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
408 extract<double> doublex(py_object);
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
409 extract<Complex> complexx(py_object);
107
691ef5c6b9e2 maint: Clean up std namespace pollution
Mike Miller <mtmiller@octave.org>
parents: 106
diff changeset
410 extract<std::string> stringx(py_object);
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
411 extract<numeric::array> arrayx(py_object);
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
412 extract<boost::python::list> listx(py_object);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
413 extract<boost::python::dict> dictx(py_object);
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
414 if (intx.check()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
415 oct_value = intx();
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
416 } else if (doublex.check()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
417 oct_value = doublex();
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
418 } else if (complexx.check()) {
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
419 oct_value = complexx();
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
420 } else if (arrayx.check()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
421 pyarr_to_octvalue(oct_value, (PyArrayObject*)py_object.ptr());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
422 } else if (stringx.check()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
423 oct_value = stringx();
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
424 } else if (listx.check()) {
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
425 pylist_to_cellarray(oct_value, (boost::python::list&)py_object);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
426 } else if (dictx.check()) {
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
427 pydict_to_octmap(oct_value, (boost::python::dict&)py_object);
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
428 } else {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
429 throw object_convert_exception(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
430 PyEval_GetFuncName(py_object.ptr())
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
431 + (PyEval_GetFuncDesc(py_object.ptr())
107
691ef5c6b9e2 maint: Clean up std namespace pollution
Mike Miller <mtmiller@octave.org>
parents: 106
diff changeset
432 + std::string(": Unsupported Python object type, "
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
433 "cannot convert to Octave value")));
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
434 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
435 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
436
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
437 void pytuple_to_octlist(octave_value_list &octave_list,
25
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
438 const boost::python::tuple &python_tuple) {
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
439 int length = extract<int>(python_tuple.attr("__len__")());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
440
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
441 for (int i = 0; i < length; i++) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
442 pyobj_to_octvalue(octave_list(i), python_tuple[i]);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
443 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
444 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
445 }