1
- \section {Marrying \cpp and python }
1
+ \section [ python ] {Marrying \cpp and python }
2
2
3
3
\subsection [module ]{Writing a python module }
4
4
5
5
\begin {frame }[fragile]
6
6
\frametitle {How to build a python module around \cpp code}
7
- \begin {block }{\cpp code : mendel .hpp}
7
+ \begin {block }{\cpp code : mandel .hpp}
8
8
\begin {cppcode* }{}
9
- int mendel (const Complex &a);
9
+ int mandel (const Complex &a);
10
10
\end {cppcode* }
11
11
\end {block }
12
12
\end {frame }
13
13
14
14
\begin {frame }[fragile]
15
15
\frametitle {Basic Module(1) : wrap your method}
16
- \begin {block }{mendelModule .cpp}
16
+ \begin {block }{mandelModule .cpp}
17
17
\begin {cppcode* }{}
18
18
#include <Python.h>
19
- #include "mendel .hpp"
20
- static PyObject * mendel_wrapper (PyObject * self,
19
+ #include "mandel .hpp"
20
+ static PyObject * mandel_wrapper (PyObject * self,
21
21
PyObject * args) {
22
22
// Parse Input
23
23
float r, i;
24
24
if (!PyArg_ParseTuple(args, "ff" , &r, &i))
25
25
return NULL;
26
26
// Call C++ function
27
- int result = mendel (Complex(r, i));
27
+ int result = mandel (Complex(r, i));
28
28
// Build returned objects
29
29
return Py_BuildValue("i", result);
30
30
}
@@ -34,28 +34,28 @@ \section{Marrying \cpp and python}
34
34
35
35
\begin {frame }[fragile]
36
36
\frametitle {Basic Module(2) : create the python module}
37
- \begin {block }{mendelModule .cpp}
37
+ \begin {block }{mandelModule .cpp}
38
38
\begin {cppcode* }{}
39
39
// declare the modules' methods
40
- static PyMethodDef MendelMethods [] = {
41
- {"mendel ", mendel_wrapper , METH_VARARGS,
42
- "computes nb of iterations for mendelbrot set" },
40
+ static PyMethodDef MandelMethods [] = {
41
+ {"mandel ", mandel_wrapper , METH_VARARGS,
42
+ "computes nb of iterations for mandelbrot set" },
43
43
{NULL, NULL, 0, NULL}
44
44
};
45
45
// initialize the module
46
- PyMODINIT_FUNC initmendel (void) {
47
- (void) Py_InitModule("mendel ", MendelMethods );
46
+ PyMODINIT_FUNC initmandel (void) {
47
+ (void) Py_InitModule("mandel ", MandelMethods );
48
48
}
49
49
\end {cppcode* }
50
50
\end {block }
51
51
\end {frame }
52
52
53
53
\begin {frame }[fragile]
54
54
\frametitle {Basic Module(3) : use it}
55
- \begin {block }{mendel .py}
55
+ \begin {block }{mandel .py}
56
56
\begin {minted }[gobble=4,linenos]{python}
57
- from mendel import mendel
58
- v = mendel (0.7, 1.2)
57
+ from mandel import mandel
58
+ v = mandel (0.7, 1.2)
59
59
\end {minted }
60
60
\end {block }
61
61
\end {frame }
@@ -157,25 +157,25 @@ \section{Marrying \cpp and python}
157
157
158
158
\begin {frame }[fragile]
159
159
\frametitle {ctypes : usage example}
160
- \begin {block }{\cpp code : mendel .hpp}
160
+ \begin {block }{\cpp code : mandel .hpp}
161
161
\begin {cppcode* }{}
162
- int mendel (const Complex &a);
162
+ int mandel (const Complex &a);
163
163
\end {cppcode* }
164
164
\end {block }
165
- \begin {block }{`` C'' code : mendel \_ cwrapper.hpp}
165
+ \begin {block }{`` C'' code : mandel \_ cwrapper.hpp}
166
166
\begin {cppcode* }{}
167
167
extern "C" {
168
- int mendel (float r, float i) {
169
- return mendel (Complex(r, i));
168
+ int mandel (float r, float i) {
169
+ return mandel (Complex(r, i));
170
170
};
171
171
}
172
172
\end {cppcode* }
173
173
\end {block }
174
- \begin {exampleblock }{calling the mendel library}
174
+ \begin {exampleblock }{calling the mandel library}
175
175
\begin {minted }[gobble=4,linenos]{python}
176
176
from ctypes import *
177
- libmendel = CDLL('libmendelc .so')
178
- v = libmendel.mendel (c_float(0.3), c_float(1.2))
177
+ libmandel = CDLL('libmandelc .so')
178
+ v = libmandel.mandel (c_float(0.3), c_float(1.2))
179
179
\end {minted }
180
180
\end {exampleblock }
181
181
\end {frame }
@@ -185,14 +185,14 @@ \section{Marrying \cpp and python}
185
185
\begin {alertblock }{Exercise Time}
186
186
\begin {itemize }
187
187
\item go to code/python
188
- \item look at the original python code mendel .py
188
+ \item look at the original python code mandel .py
189
189
\item time it
190
- \item look at the code in mendel .hpp/cpp
191
- \item look at the python module mendel \_ module.cpp
192
- \item compile and modify mendel .py to use it
190
+ \item look at the code in mandel .hpp/cpp
191
+ \item look at the python module mandel \_ module.cpp
192
+ \item compile and modify mandel .py to use it
193
193
\item see the gain in time
194
- \item look at the C wrapper in mendel \_ cwrapper.cpp
195
- \item modify mendel .py to use libmendelc directly with ctypes
194
+ \item look at the C wrapper in mandel \_ cwrapper.cpp
195
+ \item modify mandel .py to use libmandelc directly with ctypes
196
196
\end {itemize }
197
197
\end {alertblock }
198
198
\end {frame }
0 commit comments