annotate python_to_octave.cc @ 79:d60165bfc849

Support 0D Numeric arrays
author Jaroslav Hajek <highegg@gmail.com>
date Fri, 18 Sep 2009 10:31:15 +0200
parents b0991511a16d
children 2e8b52a5e1b1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
1 /*
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
2 * Copyright 2008 David Grundberg, HÃ¥kan Fors Nilsson
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
3 * Copyright 2009 VZLU Prague
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
4 *
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
5 * This file is part of Pytave.
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
6 *
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
7 * Pytave is free software: you can redistribute it and/or modify
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
6
d95e9d46f538 License change to GPLv3
David Grundberg <individ@acc.umu.se>
parents: 0
diff changeset
9 * the Free Software Foundation, either version 3 of the License, or
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
10 * (at your option) any later version.
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
11 *
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
12 * Pytave is distributed in the hope that it will be useful,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
15 * GNU General Public License for more details.
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
16 *
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
18 * along with Pytave. If not, see <http://www.gnu.org/licenses/>.
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
19 */
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
20
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
21 #include <iostream>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
22 #include <boost/python.hpp>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
23 #include <boost/python/numeric.hpp>
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
24 #include <boost/type_traits/integral_constant.hpp>
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
25 #undef HAVE_STAT /* both boost.python and octave defines HAVE_STAT... */
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
26 #include <octave/oct.h>
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
27 #include <octave/oct-map.h>
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
28 #include <octave/Cell.h>
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
29 #include <octave/Matrix.h>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
30 #include <octave/ov.h>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
31
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
32 #include "pytavedefs.h"
75
b0991511a16d a few fixes to numpy support
Jaroslav Hajek <highegg@gmail.com>
parents: 70
diff changeset
33 #include "arrayobjectdefs.h"
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
34 #include "exceptions.h"
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 using namespace std;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
37 using namespace boost::python;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
38
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
39 namespace pytave {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
40
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
41 void pyobj_to_octvalue(octave_value &oct_value,
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
42 const boost::python::object &py_object);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
43
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
44 template <class PythonPrimitive, class OctaveBase>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
45 static void copy_pyarrobj_to_octarray(OctaveBase &matrix,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
46 const PyArrayObject* const pyarr,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
47 const int unsigned matindex,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
48 const unsigned int matstride,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
49 const int dimension,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
50 const unsigned int offset) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
51 unsigned char *ptr = (unsigned char*) pyarr->data;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
52 if (dimension == pyarr->nd - 1) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
53 // Last dimension, base case
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
54 for (int i = 0; i < pyarr->dimensions[dimension]; i++) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
55 matrix.elem(matindex + i*matstride)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
56 = *(PythonPrimitive*)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
57 &ptr[offset + i*pyarr->strides[dimension]];
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
58 }
79
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
59 } else if (pyarr->nd == 0) {
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
60 matrix.elem(0) = *(PythonPrimitive*) ptr;
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
61 } else {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
62 for (int i = 0; i < pyarr->dimensions[dimension]; i++) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
63 copy_pyarrobj_to_octarray<PythonPrimitive, OctaveBase>(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
64 matrix,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
65 pyarr,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
66 matindex + i*matstride,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
67 matstride * pyarr->dimensions[dimension],
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
68 dimension + 1,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
69 offset + i*pyarr->strides[dimension]);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
70 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
71 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
72 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
73
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
74 template <>
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
75 void copy_pyarrobj_to_octarray<PyObject *, Cell>(Cell &matrix,
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
76 const PyArrayObject* const pyarr,
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
77 const int unsigned matindex,
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
78 const unsigned int matstride,
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
79 const int dimension,
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
80 const unsigned int offset) {
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
81 unsigned char *ptr = (unsigned char*) pyarr->data;
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
82 if (dimension == pyarr->nd - 1) {
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
83 // Last dimension, base case
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
84 for (int i = 0; i < pyarr->dimensions[dimension]; i++) {
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
85 PyObject *pobj = *(PyObject **)
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
86 &ptr[offset + i*pyarr->strides[dimension]];
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
87 pyobj_to_octvalue (matrix.elem(matindex + i*matstride),
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
88 object(handle<PyObject> (borrowed (pobj))));
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
89 }
79
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
90 } else if (pyarr->nd == 0) {
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
91 PyObject *pobj = *(PyObject **) ptr;
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
92 pyobj_to_octvalue (matrix.elem(0),
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
93 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
94 } else {
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
95 for (int i = 0; i < pyarr->dimensions[dimension]; i++) {
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
96 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
97 matrix,
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
98 pyarr,
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
99 matindex + i*matstride,
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
100 matstride * pyarr->dimensions[dimension],
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
101 dimension + 1,
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
102 offset + i*pyarr->strides[dimension]);
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
103 }
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
104 }
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
105 }
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
106
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
107 template <class PythonPrimitive, class OctaveBase>
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
108 static void copy_pyarrobj_to_octarray_dispatch(OctaveBase &matrix,
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
109 const PyArrayObject* const pyarr,
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
110 const boost::true_type&) {
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
111 copy_pyarrobj_to_octarray<PythonPrimitive, OctaveBase>
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
112 (matrix, pyarr, 0, 1, 0, 0);
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
113 }
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
114
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
115 template <class PythonPrimitive, class OctaveBase>
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
116 static void copy_pyarrobj_to_octarray_dispatch(OctaveBase &matrix,
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
117 const PyArrayObject* const pyarr,
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
118 const boost::false_type&) {
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
119 assert(0);
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
120 }
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
121
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
122 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
123 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
124 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
125 template <> class matching_type<float, double> : public boost::true_type { };
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
126 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
127 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
128
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
129 template <class PythonPrimitive, class OctaveBase>
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
130 static void copy_pyarrobj_to_octarray_dispatch(OctaveBase &matrix,
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
131 const PyArrayObject* const pyarr) {
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
132 matching_type<PythonPrimitive, typename OctaveBase::element_type> inst;
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
133 copy_pyarrobj_to_octarray_dispatch<PythonPrimitive, OctaveBase> (matrix, pyarr, inst);
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
134 }
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
135
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
136 template <class OctaveBase>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
137 static void copy_pyarrobj_to_octarray_boot(OctaveBase &matrix,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
138 const PyArrayObject* const pyarr) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
139
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
140 #define ARRAYCASE(AC_pyarrtype, AC_primitive) case AC_pyarrtype: \
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
141 copy_pyarrobj_to_octarray_dispatch<AC_primitive, OctaveBase>\
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
142 (matrix, pyarr); \
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
143 break; \
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
144
47
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
145 // 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
146 // E.g. on 32-bit x86 architectures: sizeof(long) == sizeof(int).
47
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
147 int type_num = pyarr->descr->type_num;
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
148 switch (type_num) {
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
149 case PyArray_LONG:
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
150 if (sizeof(long) == sizeof(int)) {
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
151 type_num = PyArray_INT;
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
152 }
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
153 break;
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
154 case PyArray_SHORT:
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
155 if (sizeof(short) == sizeof(int)) {
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
156 type_num = PyArray_INT;
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;
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
159 case PyArray_USHORT:
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
160 if (sizeof(unsigned short) == sizeof(unsigned int)) {
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
161 type_num = PyArray_UINT;
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;
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
164 }
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
165
c83754e57d26 Fix compilation on 32-bit x86.
David Grundberg <individ@acc.umu.se>
parents: 46
diff changeset
166 switch (type_num) {
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
167 ARRAYCASE(PyArray_CHAR, char)
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
168 ARRAYCASE(PyArray_UBYTE, unsigned char)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
169 ARRAYCASE(PyArray_SBYTE, signed char)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
170 ARRAYCASE(PyArray_SHORT, signed short)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
171 ARRAYCASE(PyArray_USHORT, unsigned short)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
172 ARRAYCASE(PyArray_INT, signed int)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
173 ARRAYCASE(PyArray_UINT, unsigned int)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
174 ARRAYCASE(PyArray_LONG, signed long)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
175
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
176 /* Commonly Numeric.array(..., Numeric.Float32) */
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
177 ARRAYCASE(PyArray_FLOAT, float)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
178
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
179 /* Commonly Numeric.array(..., Numeric.Float) */
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
180 ARRAYCASE(PyArray_DOUBLE, double)
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
181
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
182 /* Commonly Numeric.array(..., Numeric.Complex32) */
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
183 ARRAYCASE(PyArray_CFLOAT, FloatComplex)
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
184
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
185 /* Commonly Numeric.array(..., Numeric.Complex) */
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
186 ARRAYCASE(PyArray_CDOUBLE, Complex)
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
187
70
e3de0f6f1552 experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents: 68
diff changeset
188 #ifdef HAVE_NUMPY
e3de0f6f1552 experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents: 68
diff changeset
189 ARRAYCASE(PyArray_BOOL, bool)
e3de0f6f1552 experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents: 68
diff changeset
190 #endif
e3de0f6f1552 experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents: 68
diff changeset
191
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
192 ARRAYCASE(PyArray_OBJECT, PyObject *)
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
193
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
194 default:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
195 throw object_convert_exception(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
196 PyEval_GetFuncName((PyObject*)pyarr)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
197 + (PyEval_GetFuncDesc((PyObject*)pyarr)
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
198 + string(": Unsupported Python array type")));
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
199 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
200 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
201
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
202 template <class OctaveBase>
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
203 static void pyarrobj_to_octvalueNd(octave_value &octvalue,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
204 const PyArrayObject* const pyarr,
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
205 dim_vector dims) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
206 OctaveBase array(dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
207 copy_pyarrobj_to_octarray_boot<OctaveBase>(array, pyarr);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
208 octvalue = array;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
209 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
210
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
211 static void pyarr_to_octvalue(octave_value &octvalue,
25
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
212 const PyArrayObject *pyarr) {
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
213 dim_vector dims;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
214 switch (pyarr->nd) {
79
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
215 case 0:
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
216 dims = dim_vector (1, 1);
d60165bfc849 Support 0D Numeric arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 75
diff changeset
217 break;
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
218 case 1:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
219 // Always make PyArray vectors row vectors.
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
220 dims = dim_vector(1, pyarr->dimensions[0]);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
221 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
222 default:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
223 dims.resize(pyarr->nd);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
224 for (int d = 0; d < pyarr->nd; d++) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
225 dims(d) = pyarr->dimensions[d];
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
226 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
227 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
228 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
229
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
230 switch (pyarr->descr->type_num) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
231 case PyArray_UBYTE:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
232 case PyArray_USHORT:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
233 case PyArray_UINT:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
234 switch (pyarr->descr->elsize) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
235 case 1:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
236 pyarrobj_to_octvalueNd<uint8NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
237 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
238 case 2:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
239 pyarrobj_to_octvalueNd<uint16NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
240 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
241 case 4:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
242 pyarrobj_to_octvalueNd<uint32NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
243 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
244 default:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
245 throw object_convert_exception("Unknown unsigned integer.");
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
246 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
247 case PyArray_SBYTE:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
248 case PyArray_SHORT:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
249 case PyArray_INT:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
250 case PyArray_LONG:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
251 switch (pyarr->descr->elsize) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
252 case 1:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
253 pyarrobj_to_octvalueNd<int8NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
254 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
255 case 2:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
256 pyarrobj_to_octvalueNd<int16NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
257 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
258 case 4:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
259 pyarrobj_to_octvalueNd<int32NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
260 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
261 case 8:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
262 pyarrobj_to_octvalueNd<int64NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
263 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
264 default:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
265 throw object_convert_exception("Unknown integer.");
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
266 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
267 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
268 case PyArray_FLOAT:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
269 pyarrobj_to_octvalueNd<FloatNDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
270 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
271 case PyArray_DOUBLE:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
272 pyarrobj_to_octvalueNd<NDArray>(octvalue, pyarr, dims);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
273 break;
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
274 case PyArray_CFLOAT:
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
275 pyarrobj_to_octvalueNd<FloatComplexNDArray>(octvalue, pyarr, dims);
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
276 break;
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
277 case PyArray_CDOUBLE:
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
278 pyarrobj_to_octvalueNd<ComplexNDArray>(octvalue, pyarr, dims);
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
279 break;
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
280 case PyArray_CHAR:
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
281 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
282 // FIXME: is the following needed?
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
283 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
284 break;
70
e3de0f6f1552 experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents: 68
diff changeset
285 #ifdef HAVE_NUMPY
e3de0f6f1552 experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents: 68
diff changeset
286 case PyArray_BOOL:
e3de0f6f1552 experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents: 68
diff changeset
287 pyarrobj_to_octvalueNd<boolNDArray>(octvalue, pyarr, dims);
e3de0f6f1552 experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents: 68
diff changeset
288 break;
e3de0f6f1552 experimental NumPy support
Jaroslav Hajek <highegg@gmail.com>
parents: 68
diff changeset
289 #endif
51
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
290 case PyArray_OBJECT:
b001edc0f81a implement Python->Octave conversions of Character and PyObject arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 50
diff changeset
291 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
292 break;
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
293 default:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
294 throw object_convert_exception(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
295 PyEval_GetFuncDesc((PyObject*)(pyarr)) + string(" ")
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
296 + PyEval_GetFuncName((PyObject*)(pyarr))
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
297 + ": Encountered unsupported Python array");
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
298 break;
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
299 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
300 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
301
25
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
302 static void pylist_to_cellarray(octave_value &oct_value,
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
303 const boost::python::list &list) {
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
304
31
d3c4fa6c6272 Fixed incorrect cell wrapping. Removed misc compiler warnings.
David Grundberg <individ@acc.umu.se>
parents: 27
diff changeset
305 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
306 list.attr("__len__")());
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
307 octave_value_list values;
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
308
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
309 for(octave_idx_type i = 0; i < length; i++) {
25
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
310 octave_value val;
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
311
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
312 pyobj_to_octvalue(val, list[i]);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
313 values.append(val);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
314
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
315 }
25
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
316
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
317 oct_value = Cell(values);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
318 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
319
25
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
320 static void pydict_to_octmap(octave_value &oct_value,
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
321 const boost::python::dict &dict) {
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 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
324 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
325 list.attr("__len__")());
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
326
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
327 dim_vector dims = dim_vector(1, 1);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
328
43
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
329 Array<octave_value> vals (length);
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
330 Array<std::string> keys (length);
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
331
56
43a413b7c151 improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 51
diff changeset
332 // 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
333 // match.
43a413b7c151 improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 51
diff changeset
334
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
335 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
336
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
337 std::string& key = keys(i);
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
338
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
339 boost::python::tuple tuple =
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
340 boost::python::extract<boost::python::tuple>(list[i])();
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
341
43
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
342 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
343 if(!str.check()) {
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
344 throw object_convert_exception(
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
345 string("Can not convert key of type ")
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
346 + 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
347 + 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
348 + " 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
349 }
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
350
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
351 key = str();
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
352
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
353 if (!valid_identifier(key)) {
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
354 throw object_convert_exception(
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
355 string("Can not convert key `") + key + "' to a structure "
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
356 "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
357 }
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
358
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
359 octave_value& val = vals(i);
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
360
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
361 pyobj_to_octvalue(val, tuple[1]);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
362
68
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
363 if(val.is_cell()) {
56
43a413b7c151 improve conversions, handle POobject and char arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 51
diff changeset
364 if(i == 0) {
68
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
365 dims = val.dims();
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
366 } else if (val.numel() != 1 && val.dims() != dims){
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
367 throw object_convert_exception(
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
368 "Dimensions of the struct fields do not match");
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
369 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
370 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
371 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
372
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
373 Octave_map map = Octave_map(dims);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
374
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
375 for(octave_idx_type i = 0; i < length; i++) {
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
376
43
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
377 std::string& key = keys(i);
31df83060183 avoid duplicate conversions in python dict->octave map
Jaroslav Hajek <highegg@gmail.com>
parents: 31
diff changeset
378 octave_value val = vals(i);
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
379
68
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
380 if(val.is_cell()) {
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
381 const Cell c = val.cell_value();
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
382 if (c.numel () == 1) {
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
383 map.assign(key, Cell(dims, c(0)));
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
384 } else {
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
385 map.assign(key, c);
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
386 }
31
d3c4fa6c6272 Fixed incorrect cell wrapping. Removed misc compiler warnings.
David Grundberg <individ@acc.umu.se>
parents: 27
diff changeset
387 } else {
68
2f4d6286fb36 make Octave->Python conversions uniformly arrays
Jaroslav Hajek <highegg@gmail.com>
parents: 56
diff changeset
388 map.assign(key, Cell(dims, val));
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
389 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
390 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
391 oct_value = map;
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
392 }
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
393
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
394 void pyobj_to_octvalue(octave_value &oct_value,
25
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
395 const boost::python::object &py_object) {
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
396 extract<int> intx(py_object);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
397 extract<double> doublex(py_object);
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
398 extract<Complex> complexx(py_object);
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
399 extract<string> stringx(py_object);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
400 extract<numeric::array> arrayx(py_object);
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
401 extract<boost::python::list> listx(py_object);
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
402 extract<boost::python::dict> dictx(py_object);
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
403 if (intx.check()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
404 oct_value = intx();
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
405 } else if (doublex.check()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
406 oct_value = doublex();
46
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
407 } else if (complexx.check()) {
095e26d93935 support complex numbers
Jaroslav Hajek <highegg@gmail.com>
parents: 43
diff changeset
408 oct_value = complexx();
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
409 } else if (arrayx.check()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
410 pyarr_to_octvalue(oct_value, (PyArrayObject*)py_object.ptr());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
411 } else if (stringx.check()) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
412 oct_value = stringx();
9
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
413 } else if (listx.check()) {
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
414 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
415 } else if (dictx.check()) {
9a773d71a973 celler & structar ^_^
Håkan Fors nilsson <c04hfn@cs.umu.se>
parents: 6
diff changeset
416 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
417 } else {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
418 throw object_convert_exception(
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
419 PyEval_GetFuncName(py_object.ptr())
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
420 + (PyEval_GetFuncDesc(py_object.ptr())
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
421 + string(": Unsupported Python object type, "
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
422 "cannot convert to Octave value")));
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
423 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
424 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
425
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
426 void pytuple_to_octlist(octave_value_list &octave_list,
25
113428ba033c Whitespace fixes
David Grundberg <individ@acc.umu.se>
parents: 9
diff changeset
427 const boost::python::tuple &python_tuple) {
0
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
428 int length = extract<int>(python_tuple.attr("__len__")());
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
429
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
430 for (int i = 0; i < length; i++) {
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
431 pyobj_to_octvalue(octave_list(i), python_tuple[i]);
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
432 }
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
433 }
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 /* Emacs
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
437 * Local Variables:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
438 * fill-column:79
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
439 * coding:utf-8
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
440 * indent-tabs-mode:nil
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
441 * c-basic-offset:3
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
442 * End:
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
443 * vim: set textwidth=79 expandtab shiftwidth=3 :
4da14cce0890 First launchpad.net check in.
David Grundberg <c04dgg@cs.umu.se>
parents:
diff changeset
444 */