blob: 9ae48b8c596730ef9b108cd8c518cd97f839af4b [file] [log] [blame]
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001.. _advanced:
2
3Advanced topics
4###############
5
Wenzel Jakob93296692015-10-13 23:21:54 +02006For brevity, the rest of this chapter assumes that the following two lines are
7present:
8
9.. code-block:: cpp
10
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020011 #include <pybind11/pybind11.h>
Wenzel Jakob93296692015-10-13 23:21:54 +020012
Wenzel Jakob10e62e12015-10-15 22:46:07 +020013 namespace py = pybind11;
Wenzel Jakob93296692015-10-13 23:21:54 +020014
Wenzel Jakobde3ad072016-02-02 11:38:21 +010015Exporting constants and mutable objects
16=======================================
17
18To expose a C++ constant, use the ``attr`` function to register it in a module
19as shown below. The ``int_`` class is one of many small wrapper objects defined
20in ``pybind11/pytypes.h``. General objects (including integers) can also be
21converted using the function ``cast``.
22
23.. code-block:: cpp
24
25 PYBIND11_PLUGIN(example) {
26 py::module m("example", "pybind11 example plugin");
27 m.attr("MY_CONSTANT") = py::int_(123);
28 m.attr("MY_CONSTANT_2") = py::cast(new MyObject());
29 }
30
Wenzel Jakob28f98aa2015-10-13 02:57:16 +020031Operator overloading
32====================
33
Wenzel Jakob93296692015-10-13 23:21:54 +020034Suppose that we're given the following ``Vector2`` class with a vector addition
35and scalar multiplication operation, all implemented using overloaded operators
36in C++.
37
38.. code-block:: cpp
39
40 class Vector2 {
41 public:
42 Vector2(float x, float y) : x(x), y(y) { }
43
Wenzel Jakob93296692015-10-13 23:21:54 +020044 Vector2 operator+(const Vector2 &v) const { return Vector2(x + v.x, y + v.y); }
45 Vector2 operator*(float value) const { return Vector2(x * value, y * value); }
46 Vector2& operator+=(const Vector2 &v) { x += v.x; y += v.y; return *this; }
47 Vector2& operator*=(float v) { x *= v; y *= v; return *this; }
48
Wenzel Jakobf64feaf2016-04-28 14:33:45 +020049 friend Vector2 operator*(float f, const Vector2 &v) {
50 return Vector2(f * v.x, f * v.y);
51 }
Wenzel Jakob93296692015-10-13 23:21:54 +020052
Wenzel Jakobf64feaf2016-04-28 14:33:45 +020053 std::string toString() const {
54 return "[" + std::to_string(x) + ", " + std::to_string(y) + "]";
55 }
Wenzel Jakob93296692015-10-13 23:21:54 +020056 private:
57 float x, y;
58 };
59
60The following snippet shows how the above operators can be conveniently exposed
61to Python.
62
63.. code-block:: cpp
64
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020065 #include <pybind11/operators.h>
Wenzel Jakob93296692015-10-13 23:21:54 +020066
Wenzel Jakobb1b71402015-10-18 16:48:30 +020067 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020068 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +020069
70 py::class_<Vector2>(m, "Vector2")
71 .def(py::init<float, float>())
72 .def(py::self + py::self)
73 .def(py::self += py::self)
74 .def(py::self *= float())
75 .def(float() * py::self)
76 .def("__repr__", &Vector2::toString);
77
78 return m.ptr();
79 }
80
81Note that a line like
82
83.. code-block:: cpp
84
85 .def(py::self * float())
86
87is really just short hand notation for
88
89.. code-block:: cpp
90
91 .def("__mul__", [](const Vector2 &a, float b) {
92 return a * b;
93 })
94
95This can be useful for exposing additional operators that don't exist on the
96C++ side, or to perform other types of customization.
97
98.. note::
99
100 To use the more convenient ``py::self`` notation, the additional
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200101 header file :file:`pybind11/operators.h` must be included.
Wenzel Jakob93296692015-10-13 23:21:54 +0200102
103.. seealso::
104
105 The file :file:`example/example3.cpp` contains a complete example that
106 demonstrates how to work with overloaded operators in more detail.
107
108Callbacks and passing anonymous functions
109=========================================
110
111The C++11 standard brought lambda functions and the generic polymorphic
112function wrapper ``std::function<>`` to the C++ programming language, which
113enable powerful new ways of working with functions. Lambda functions come in
114two flavors: stateless lambda function resemble classic function pointers that
115link to an anonymous piece of code, while stateful lambda functions
116additionally depend on captured variables that are stored in an anonymous
117*lambda closure object*.
118
119Here is a simple example of a C++ function that takes an arbitrary function
120(stateful or stateless) with signature ``int -> int`` as an argument and runs
121it with the value 10.
122
123.. code-block:: cpp
124
125 int func_arg(const std::function<int(int)> &f) {
126 return f(10);
127 }
128
129The example below is more involved: it takes a function of signature ``int -> int``
130and returns another function of the same kind. The return value is a stateful
131lambda function, which stores the value ``f`` in the capture object and adds 1 to
132its return value upon execution.
133
134.. code-block:: cpp
135
136 std::function<int(int)> func_ret(const std::function<int(int)> &f) {
137 return [f](int i) {
138 return f(i) + 1;
139 };
140 }
141
Brad Harmon835fc062016-06-16 13:19:15 -0500142This example demonstrates using python named parameters in C++ callbacks which
143requires using ``py::cpp_function`` as a wrapper. Usage is similar to defining
144methods of classes:
145
146.. code-block:: cpp
147
148 py::cpp_function func_cpp() {
149 return py::cpp_function([](int i) { return i+1; },
150 py::arg("number"));
151 }
152
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200153After including the extra header file :file:`pybind11/functional.h`, it is almost
Brad Harmon835fc062016-06-16 13:19:15 -0500154trivial to generate binding code for all of these functions.
Wenzel Jakob93296692015-10-13 23:21:54 +0200155
156.. code-block:: cpp
157
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200158 #include <pybind11/functional.h>
Wenzel Jakob93296692015-10-13 23:21:54 +0200159
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200160 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200161 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200162
163 m.def("func_arg", &func_arg);
164 m.def("func_ret", &func_ret);
Brad Harmon835fc062016-06-16 13:19:15 -0500165 m.def("func_cpp", &func_cpp);
Wenzel Jakob93296692015-10-13 23:21:54 +0200166
167 return m.ptr();
168 }
169
170The following interactive session shows how to call them from Python.
171
Wenzel Jakob99279f72016-06-03 11:19:29 +0200172.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200173
174 $ python
175 >>> import example
176 >>> def square(i):
177 ... return i * i
178 ...
179 >>> example.func_arg(square)
180 100L
181 >>> square_plus_1 = example.func_ret(square)
182 >>> square_plus_1(4)
183 17L
Brad Harmon835fc062016-06-16 13:19:15 -0500184 >>> plus_1 = func_cpp()
185 >>> plus_1(number=43)
186 44L
Wenzel Jakob93296692015-10-13 23:21:54 +0200187
188.. note::
189
190 This functionality is very useful when generating bindings for callbacks in
191 C++ libraries (e.g. a graphical user interface library).
192
193 The file :file:`example/example5.cpp` contains a complete example that
194 demonstrates how to work with callbacks and anonymous functions in more detail.
195
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100196.. warning::
197
198 Keep in mind that passing a function from C++ to Python (or vice versa)
199 will instantiate a piece of wrapper code that translates function
200 invocations between the two languages. Copying the same function back and
201 forth between Python and C++ many times in a row will cause these wrappers
202 to accumulate, which can decrease performance.
203
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200204Overriding virtual functions in Python
205======================================
206
Wenzel Jakob93296692015-10-13 23:21:54 +0200207Suppose that a C++ class or interface has a virtual function that we'd like to
208to override from within Python (we'll focus on the class ``Animal``; ``Dog`` is
209given as a specific example of how one would do this with traditional C++
210code).
211
212.. code-block:: cpp
213
214 class Animal {
215 public:
216 virtual ~Animal() { }
217 virtual std::string go(int n_times) = 0;
218 };
219
220 class Dog : public Animal {
221 public:
222 std::string go(int n_times) {
223 std::string result;
224 for (int i=0; i<n_times; ++i)
225 result += "woof! ";
226 return result;
227 }
228 };
229
230Let's also suppose that we are given a plain function which calls the
231function ``go()`` on an arbitrary ``Animal`` instance.
232
233.. code-block:: cpp
234
235 std::string call_go(Animal *animal) {
236 return animal->go(3);
237 }
238
239Normally, the binding code for these classes would look as follows:
240
241.. code-block:: cpp
242
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200243 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200244 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200245
246 py::class_<Animal> animal(m, "Animal");
247 animal
248 .def("go", &Animal::go);
249
250 py::class_<Dog>(m, "Dog", animal)
251 .def(py::init<>());
252
253 m.def("call_go", &call_go);
254
255 return m.ptr();
256 }
257
258However, these bindings are impossible to extend: ``Animal`` is not
259constructible, and we clearly require some kind of "trampoline" that
260redirects virtual calls back to Python.
261
262Defining a new type of ``Animal`` from within Python is possible but requires a
263helper class that is defined as follows:
264
265.. code-block:: cpp
266
267 class PyAnimal : public Animal {
268 public:
269 /* Inherit the constructors */
270 using Animal::Animal;
271
272 /* Trampoline (need one for each virtual function) */
273 std::string go(int n_times) {
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200274 PYBIND11_OVERLOAD_PURE(
Wenzel Jakob93296692015-10-13 23:21:54 +0200275 std::string, /* Return type */
276 Animal, /* Parent class */
277 go, /* Name of function */
278 n_times /* Argument(s) */
279 );
280 }
281 };
282
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200283The macro :func:`PYBIND11_OVERLOAD_PURE` should be used for pure virtual
284functions, and :func:`PYBIND11_OVERLOAD` should be used for functions which have
Wenzel Jakob0d3fc352016-07-08 10:52:10 +0200285a default implementation.
Wenzel Jakob1e3be732016-05-24 23:42:05 +0200286
287There are also two alternate macros :func:`PYBIND11_OVERLOAD_PURE_NAME` and
288:func:`PYBIND11_OVERLOAD_NAME` which take a string-valued name argument
289after the *Name of the function* slot. This is useful when the C++ and Python
290versions of the function have different names, e.g. ``operator()`` vs ``__call__``.
291
292The binding code also needs a few minor adaptations (highlighted):
Wenzel Jakob93296692015-10-13 23:21:54 +0200293
294.. code-block:: cpp
295 :emphasize-lines: 4,6,7
296
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200297 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200298 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200299
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200300 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal /* <--- trampoline*/> animal(m, "Animal");
Wenzel Jakob93296692015-10-13 23:21:54 +0200301 animal
Wenzel Jakob93296692015-10-13 23:21:54 +0200302 .def(py::init<>())
303 .def("go", &Animal::go);
304
305 py::class_<Dog>(m, "Dog", animal)
306 .def(py::init<>());
307
308 m.def("call_go", &call_go);
309
310 return m.ptr();
311 }
312
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200313Importantly, pybind11 is made aware of the trampoline trampoline helper class
314by specifying it as the *third* template argument to :class:`class_`. The
315second argument with the unique pointer is simply the default holder type used
316by pybind11. Following this, we are able to define a constructor as usual.
Wenzel Jakob93296692015-10-13 23:21:54 +0200317
318The Python session below shows how to override ``Animal::go`` and invoke it via
319a virtual method call.
320
Wenzel Jakob99279f72016-06-03 11:19:29 +0200321.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200322
323 >>> from example import *
324 >>> d = Dog()
325 >>> call_go(d)
326 u'woof! woof! woof! '
327 >>> class Cat(Animal):
328 ... def go(self, n_times):
329 ... return "meow! " * n_times
330 ...
331 >>> c = Cat()
332 >>> call_go(c)
333 u'meow! meow! meow! '
334
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200335Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakobbd986fe2016-05-21 10:48:30 +0200336
Wenzel Jakob93296692015-10-13 23:21:54 +0200337.. seealso::
338
339 The file :file:`example/example12.cpp` contains a complete example that
340 demonstrates how to override virtual functions using pybind11 in more
341 detail.
342
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100343
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200344.. _macro_notes:
345
346General notes regarding convenience macros
347==========================================
348
349pybind11 provides a few convenience macros such as
350:func:`PYBIND11_MAKE_OPAQUE` and :func:`PYBIND11_DECLARE_HOLDER_TYPE`, and
351``PYBIND11_OVERLOAD_*``. Since these are "just" macros that are evaluated
352in the preprocessor (which has no concept of types), they *will* get confused
353by commas in a template argument such as ``PYBIND11_OVERLOAD(MyReturnValue<T1,
354T2>, myFunc)``. In this case, the preprocessor assumes that the comma indicates
355the beginnning of the next parameter. Use a ``typedef`` to bind the template to
356another name and use it in the macro to avoid this problem.
357
358
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100359Global Interpreter Lock (GIL)
360=============================
361
362The classes :class:`gil_scoped_release` and :class:`gil_scoped_acquire` can be
363used to acquire and release the global interpreter lock in the body of a C++
364function call. In this way, long-running C++ code can be parallelized using
365multiple Python threads. Taking the previous section as an example, this could
366be realized as follows (important changes highlighted):
367
368.. code-block:: cpp
369 :emphasize-lines: 8,9,33,34
370
371 class PyAnimal : public Animal {
372 public:
373 /* Inherit the constructors */
374 using Animal::Animal;
375
376 /* Trampoline (need one for each virtual function) */
377 std::string go(int n_times) {
378 /* Acquire GIL before calling Python code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100379 py::gil_scoped_acquire acquire;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100380
381 PYBIND11_OVERLOAD_PURE(
382 std::string, /* Return type */
383 Animal, /* Parent class */
384 go, /* Name of function */
385 n_times /* Argument(s) */
386 );
387 }
388 };
389
390 PYBIND11_PLUGIN(example) {
391 py::module m("example", "pybind11 example plugin");
392
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200393 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal> animal(m, "Animal");
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100394 animal
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100395 .def(py::init<>())
396 .def("go", &Animal::go);
397
398 py::class_<Dog>(m, "Dog", animal)
399 .def(py::init<>());
400
401 m.def("call_go", [](Animal *animal) -> std::string {
402 /* Release GIL before calling into (potentially long-running) C++ code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100403 py::gil_scoped_release release;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100404 return call_go(animal);
405 });
406
407 return m.ptr();
408 }
409
Wenzel Jakob93296692015-10-13 23:21:54 +0200410Passing STL data structures
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200411===========================
412
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200413When including the additional header file :file:`pybind11/stl.h`, conversions
Wenzel Jakob978e3762016-04-07 18:00:41 +0200414between ``std::vector<>``, ``std::list<>``, ``std::set<>``, and ``std::map<>``
415and the Python ``list``, ``set`` and ``dict`` data structures are automatically
416enabled. The types ``std::pair<>`` and ``std::tuple<>`` are already supported
417out of the box with just the core :file:`pybind11/pybind11.h` header.
Wenzel Jakob93296692015-10-13 23:21:54 +0200418
419.. note::
420
Wenzel Jakob44db04f2015-12-14 12:40:45 +0100421 Arbitrary nesting of any of these types is supported.
Wenzel Jakob93296692015-10-13 23:21:54 +0200422
423.. seealso::
424
425 The file :file:`example/example2.cpp` contains a complete example that
426 demonstrates how to pass STL data types in more detail.
427
Wenzel Jakobb2825952016-04-13 23:33:00 +0200428Binding sequence data types, iterators, the slicing protocol, etc.
429==================================================================
Wenzel Jakob93296692015-10-13 23:21:54 +0200430
431Please refer to the supplemental example for details.
432
433.. seealso::
434
435 The file :file:`example/example6.cpp` contains a complete example that
436 shows how to bind a sequence data type, including length queries
437 (``__len__``), iterators (``__iter__``), the slicing protocol and other
438 kinds of useful operations.
439
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200440Return value policies
441=====================
442
Wenzel Jakob93296692015-10-13 23:21:54 +0200443Python and C++ use wildly different ways of managing the memory and lifetime of
444objects managed by them. This can lead to issues when creating bindings for
445functions that return a non-trivial type. Just by looking at the type
446information, it is not clear whether Python should take charge of the returned
447value and eventually free its resources, or if this is handled on the C++ side.
448For this reason, pybind11 provides a several `return value policy` annotations
449that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100450functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200451
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200452.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
453
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200454+--------------------------------------------------+----------------------------------------------------------------------------+
455| Return value policy | Description |
456+==================================================+============================================================================+
457| :enum:`return_value_policy::automatic` | This is the default return value policy, which falls back to the policy |
458| | :enum:`return_value_policy::take_ownership` when the return value is a |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200459| | pointer. Otherwise, it uses :enum:`return_value::move` or |
460| | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200461| | See below for a description of what all of these different policies do. |
462+--------------------------------------------------+----------------------------------------------------------------------------+
463| :enum:`return_value_policy::automatic_reference` | As above, but use policy :enum:`return_value_policy::reference` when the |
Wenzel Jakob37e1f612016-06-22 14:29:13 +0200464| | return value is a pointer. This is the default conversion policy for |
465| | function arguments when calling Python functions manually from C++ code |
466| | (i.e. via handle::operator()). You probably won't need to use this. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200467+--------------------------------------------------+----------------------------------------------------------------------------+
468| :enum:`return_value_policy::take_ownership` | Reference an existing object (i.e. do not create a new copy) and take |
469| | ownership. Python will call the destructor and delete operator when the |
470| | object's reference count reaches zero. Undefined behavior ensues when the |
Wenzel Jakobf53e3002016-06-30 14:59:23 +0200471| | C++ side does the same. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200472+--------------------------------------------------+----------------------------------------------------------------------------+
473| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python. |
474| | This policy is comparably safe because the lifetimes of the two instances |
475| | are decoupled. |
476+--------------------------------------------------+----------------------------------------------------------------------------+
477| :enum:`return_value_policy::move` | Use ``std::move`` to move the return value contents into a new instance |
478| | that will be owned by Python. This policy is comparably safe because the |
479| | lifetimes of the two instances (move source and destination) are decoupled.|
480+--------------------------------------------------+----------------------------------------------------------------------------+
481| :enum:`return_value_policy::reference` | Reference an existing object, but do not take ownership. The C++ side is |
482| | responsible for managing the object's lifetime and deallocating it when |
483| | it is no longer used. Warning: undefined behavior will ensue when the C++ |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200484| | side deletes an object that is still referenced and used by Python. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200485+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200486| :enum:`return_value_policy::reference_internal` | This policy only applies to methods and properties. It references the |
487| | object without taking ownership similar to the above |
488| | :enum:`return_value_policy::reference` policy. In contrast to that policy, |
489| | the function or property's implicit ``this`` argument (called the *parent*)|
490| | is considered to be the the owner of the return value (the *child*). |
491| | pybind11 then couples the lifetime of the parent to the child via a |
492| | reference relationship that ensures that the parent cannot be garbage |
493| | collected while Python is still using the child. More advanced variations |
494| | of this scheme are also possible using combinations of |
495| | :enum:`return_value_policy::reference` and the :class:`keep_alive` call |
496| | policy described next. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200497+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200498
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200499The following example snippet shows a use case of the
Wenzel Jakob93296692015-10-13 23:21:54 +0200500:enum:`return_value_policy::reference_internal` policy.
501
502.. code-block:: cpp
503
504 class Example {
505 public:
506 Internal &get_internal() { return internal; }
507 private:
508 Internal internal;
509 };
510
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200511 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200512 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200513
514 py::class_<Example>(m, "Example")
515 .def(py::init<>())
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200516 .def("get_internal", &Example::get_internal, "Return the internal data",
517 py::return_value_policy::reference_internal);
Wenzel Jakob93296692015-10-13 23:21:54 +0200518
519 return m.ptr();
520 }
521
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200522.. warning::
523
524 Code with invalid call policies might access unitialized memory or free
525 data structures multiple times, which can lead to hard-to-debug
526 non-determinism and segmentation faults, hence it is worth spending the
527 time to understand all the different options in the table above.
528
Wenzel Jakobf53e3002016-06-30 14:59:23 +0200529 It is worth highlighting one common issue where a method (e.g. a getter)
530 returns a reference (or pointer) to the first attribute of a class. In this
531 case, the class and attribute will be located at the same address in
532 memory, which pybind11 will recongnize and return the parent instance
533 instead of creating a new Python object that represents the attribute.
534 Here, the :enum:`return_value_policy::reference_internal` policy should be
535 used rather than relying on the automatic one.
nafur717df752016-06-28 18:07:11 +0200536
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200537.. note::
538
539 The next section on :ref:`call_policies` discusses *call policies* that can be
540 specified *in addition* to a return value policy from the list above. Call
541 policies indicate reference relationships that can involve both return values
542 and parameters of functions.
543
544.. note::
545
546 As an alternative to elaborate call policies and lifetime management logic,
547 consider using smart pointers (see the section on :ref:`smart_pointers` for
548 details). Smart pointers can tell whether an object is still referenced from
549 C++ or Python, which generally eliminates the kinds of inconsistencies that
550 can lead to crashes or undefined behavior. For functions returning smart
551 pointers, it is not necessary to specify a return value policy.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100552
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200553.. _call_policies:
554
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100555Additional call policies
556========================
557
558In addition to the above return value policies, further `call policies` can be
559specified to indicate dependencies between parameters. There is currently just
560one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
561argument with index ``Patient`` should be kept alive at least until the
562argument with index ``Nurse`` is freed by the garbage collector; argument
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200563indices start at one, while zero refers to the return value. For methods, index
564one refers to the implicit ``this`` pointer, while regular arguments begin at
565index two. Arbitrarily many call policies can be specified.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100566
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200567Consider the following example: the binding code for a list append operation
568that ties the lifetime of the newly added element to the underlying container
569might be declared as follows:
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100570
571.. code-block:: cpp
572
573 py::class_<List>(m, "List")
574 .def("append", &List::append, py::keep_alive<1, 2>());
575
576.. note::
577
578 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
579 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
580 0) policies from Boost.Python.
581
Wenzel Jakob61587162016-01-18 22:38:52 +0100582.. seealso::
583
584 The file :file:`example/example13.cpp` contains a complete example that
585 demonstrates using :class:`keep_alive` in more detail.
586
Wenzel Jakob93296692015-10-13 23:21:54 +0200587Implicit type conversions
588=========================
589
590Suppose that instances of two types ``A`` and ``B`` are used in a project, and
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200591that an ``A`` can easily be converted into an instance of type ``B`` (examples of this
Wenzel Jakob93296692015-10-13 23:21:54 +0200592could be a fixed and an arbitrary precision number type).
593
594.. code-block:: cpp
595
596 py::class_<A>(m, "A")
597 /// ... members ...
598
599 py::class_<B>(m, "B")
600 .def(py::init<A>())
601 /// ... members ...
602
603 m.def("func",
604 [](const B &) { /* .... */ }
605 );
606
607To invoke the function ``func`` using a variable ``a`` containing an ``A``
608instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
609will automatically apply an implicit type conversion, which makes it possible
610to directly write ``func(a)``.
611
612In this situation (i.e. where ``B`` has a constructor that converts from
613``A``), the following statement enables similar implicit conversions on the
614Python side:
615
616.. code-block:: cpp
617
618 py::implicitly_convertible<A, B>();
619
Wenzel Jakob3eeea6f2016-06-30 18:10:28 +0200620.. note::
621
622 Implicit conversions from ``A`` to ``B`` only work when ``B`` is a custom
623 data type that is exposed to Python via pybind11.
624
Wenzel Jakobf88af0c2016-06-22 13:52:31 +0200625.. _static_properties:
626
627Static properties
628=================
629
630The section on :ref:`properties` discussed the creation of instance properties
631that are implemented in terms of C++ getters and setters.
632
633Static properties can also be created in a similar way to expose getters and
634setters of static class attributes. It is important to note that the implicit
635``self`` argument also exists in this case and is used to pass the Python
636``type`` subclass instance. This parameter will often not be needed by the C++
637side, and the following example illustrates how to instantiate a lambda getter
638function that ignores it:
639
640.. code-block:: cpp
641
642 py::class_<Foo>(m, "Foo")
643 .def_property_readonly_static("foo", [](py::object /* self */) { return Foo(); });
644
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200645Unique pointers
646===============
647
648Given a class ``Example`` with Python bindings, it's possible to return
649instances wrapped in C++11 unique pointers, like so
650
651.. code-block:: cpp
652
653 std::unique_ptr<Example> create_example() { return std::unique_ptr<Example>(new Example()); }
654
655.. code-block:: cpp
656
657 m.def("create_example", &create_example);
658
659In other words, there is nothing special that needs to be done. While returning
660unique pointers in this way is allowed, it is *illegal* to use them as function
661arguments. For instance, the following function signature cannot be processed
662by pybind11.
663
664.. code-block:: cpp
665
666 void do_something_with_example(std::unique_ptr<Example> ex) { ... }
667
668The above signature would imply that Python needs to give up ownership of an
669object that is passed to this function, which is generally not possible (for
670instance, the object might be referenced elsewhere).
671
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200672.. _smart_pointers:
673
Wenzel Jakob93296692015-10-13 23:21:54 +0200674Smart pointers
675==============
676
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200677This section explains how to pass values that are wrapped in "smart" pointer
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200678types with internal reference counting. For the simpler C++11 unique pointers,
679refer to the previous section.
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200680
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200681The binding generator for classes, :class:`class_`, takes an optional second
Wenzel Jakob93296692015-10-13 23:21:54 +0200682template type, which denotes a special *holder* type that is used to manage
683references to the object. When wrapping a type named ``Type``, the default
684value of this template parameter is ``std::unique_ptr<Type>``, which means that
685the object is deallocated when Python's reference count goes to zero.
686
Wenzel Jakob1853b652015-10-18 15:38:50 +0200687It is possible to switch to other types of reference counting wrappers or smart
688pointers, which is useful in codebases that rely on them. For instance, the
689following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +0200690
691.. code-block:: cpp
692
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100693 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100694
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100695Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +0200696
Wenzel Jakob1853b652015-10-18 15:38:50 +0200697To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100698argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +0200699be declared at the top level before any binding code:
700
701.. code-block:: cpp
702
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200703 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +0200704
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100705.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100706
707 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
708 placeholder name that is used as a template parameter of the second
709 argument. Thus, feel free to use any identifier, but use it consistently on
710 both sides; also, don't use the name of a type that already exists in your
711 codebase.
712
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100713One potential stumbling block when using holder types is that they need to be
714applied consistently. Can you guess what's broken about the following binding
715code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100716
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100717.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100718
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100719 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100720
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100721 class Parent {
722 public:
723 Parent() : child(std::make_shared<Child>()) { }
724 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
725 private:
726 std::shared_ptr<Child> child;
727 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100728
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100729 PYBIND11_PLUGIN(example) {
730 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100731
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100732 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
733
734 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
735 .def(py::init<>())
736 .def("get_child", &Parent::get_child);
737
738 return m.ptr();
739 }
740
741The following Python code will cause undefined behavior (and likely a
742segmentation fault).
743
744.. code-block:: python
745
746 from example import Parent
747 print(Parent().get_child())
748
749The problem is that ``Parent::get_child()`` returns a pointer to an instance of
750``Child``, but the fact that this instance is already managed by
751``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
752pybind11 will create a second independent ``std::shared_ptr<...>`` that also
753claims ownership of the pointer. In the end, the object will be freed **twice**
754since these shared pointers have no way of knowing about each other.
755
756There are two ways to resolve this issue:
757
7581. For types that are managed by a smart pointer class, never use raw pointers
759 in function arguments or return values. In other words: always consistently
760 wrap pointers into their designated holder types (such as
761 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
762 should be modified as follows:
763
764.. code-block:: cpp
765
766 std::shared_ptr<Child> get_child() { return child; }
767
7682. Adjust the definition of ``Child`` by specifying
769 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
770 base class. This adds a small bit of information to ``Child`` that allows
771 pybind11 to realize that there is already an existing
772 ``std::shared_ptr<...>`` and communicate with it. In this case, the
773 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100774
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100775.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
776
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100777.. code-block:: cpp
778
779 class Child : public std::enable_shared_from_this<Child> { };
780
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200781
782Please take a look at the :ref:`macro_notes` before using this feature.
783
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100784.. seealso::
785
786 The file :file:`example/example8.cpp` contains a complete example that
787 demonstrates how to work with custom reference-counting holder types in
788 more detail.
789
Wenzel Jakob93296692015-10-13 23:21:54 +0200790.. _custom_constructors:
791
792Custom constructors
793===================
794
795The syntax for binding constructors was previously introduced, but it only
796works when a constructor with the given parameters actually exists on the C++
797side. To extend this to more general cases, let's take a look at what actually
798happens under the hood: the following statement
799
800.. code-block:: cpp
801
802 py::class_<Example>(m, "Example")
803 .def(py::init<int>());
804
805is short hand notation for
806
807.. code-block:: cpp
808
809 py::class_<Example>(m, "Example")
810 .def("__init__",
811 [](Example &instance, int arg) {
812 new (&instance) Example(arg);
813 }
814 );
815
816In other words, :func:`init` creates an anonymous function that invokes an
817in-place constructor. Memory allocation etc. is already take care of beforehand
818within pybind11.
819
Pim Schellart5a7d17f2016-06-17 17:35:59 -0400820.. _catching_and_throwing_exceptions:
821
Wenzel Jakob93296692015-10-13 23:21:54 +0200822Catching and throwing exceptions
823================================
824
825When C++ code invoked from Python throws an ``std::exception``, it is
826automatically converted into a Python ``Exception``. pybind11 defines multiple
827special exception classes that will map to different types of Python
828exceptions:
829
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200830.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
831
Wenzel Jakob978e3762016-04-07 18:00:41 +0200832+--------------------------------------+------------------------------+
833| C++ exception type | Python exception type |
834+======================================+==============================+
835| :class:`std::exception` | ``RuntimeError`` |
836+--------------------------------------+------------------------------+
837| :class:`std::bad_alloc` | ``MemoryError`` |
838+--------------------------------------+------------------------------+
839| :class:`std::domain_error` | ``ValueError`` |
840+--------------------------------------+------------------------------+
841| :class:`std::invalid_argument` | ``ValueError`` |
842+--------------------------------------+------------------------------+
843| :class:`std::length_error` | ``ValueError`` |
844+--------------------------------------+------------------------------+
845| :class:`std::out_of_range` | ``ValueError`` |
846+--------------------------------------+------------------------------+
847| :class:`std::range_error` | ``ValueError`` |
848+--------------------------------------+------------------------------+
849| :class:`pybind11::stop_iteration` | ``StopIteration`` (used to |
850| | implement custom iterators) |
851+--------------------------------------+------------------------------+
852| :class:`pybind11::index_error` | ``IndexError`` (used to |
853| | indicate out of bounds |
854| | accesses in ``__getitem__``, |
855| | ``__setitem__``, etc.) |
856+--------------------------------------+------------------------------+
Sergey Lyskova95bde12016-05-08 19:31:55 -0400857| :class:`pybind11::value_error` | ``ValueError`` (used to |
858| | indicate wrong value passed |
859| | in ``container.remove(...)`` |
860+--------------------------------------+------------------------------+
Wenzel Jakob978e3762016-04-07 18:00:41 +0200861| :class:`pybind11::error_already_set` | Indicates that the Python |
862| | exception flag has already |
863| | been initialized |
864+--------------------------------------+------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200865
866When a Python function invoked from C++ throws an exception, it is converted
867into a C++ exception of type :class:`error_already_set` whose string payload
868contains a textual summary.
869
870There is also a special exception :class:`cast_error` that is thrown by
871:func:`handle::call` when the input arguments cannot be converted to Python
872objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200873
Pim Schellart5a7d17f2016-06-17 17:35:59 -0400874Registering custom exception translators
875========================================
876
877If the default exception conversion policy described
878:ref:`above <catching_and_throwing_exceptions>`
879is insufficient, pybind11 also provides support for registering custom
880exception translators.
881
882The function ``register_exception_translator(translator)`` takes a stateless
883callable (e.g. a function pointer or a lambda function without captured
884variables) with the following call signature: ``void(std::exception_ptr)``.
885
886When a C++ exception is thrown, registered exception translators are tried
887in reverse order of registration (i.e. the last registered translator gets
888a first shot at handling the exception).
889
890Inside the translator, ``std::rethrow_exception`` should be used within
891a try block to re-throw the exception. A catch clause can then use
892``PyErr_SetString`` to set a Python exception as demonstrated
893in :file:`example19.cpp``.
894
895This example also demonstrates how to create custom exception types
896with ``py::exception``.
897
898The following example demonstrates this for a hypothetical exception class
899``MyCustomException``:
900
901.. code-block:: cpp
902
903 py::register_exception_translator([](std::exception_ptr p) {
904 try {
905 if (p) std::rethrow_exception(p);
906 } catch (const MyCustomException &e) {
907 PyErr_SetString(PyExc_RuntimeError, e.what());
908 }
909 });
910
911Multiple exceptions can be handled by a single translator. If the exception is
912not caught by the current translator, the previously registered one gets a
913chance.
914
915If none of the registered exception translators is able to handle the
916exception, it is handled by the default converter as described in the previous
917section.
918
919.. note::
920
921 You must either call ``PyErr_SetString`` for every exception caught in a
922 custom exception translator. Failure to do so will cause Python to crash
923 with ``SystemError: error return without exception set``.
924
925 Exceptions that you do not plan to handle should simply not be caught.
926
927 You may also choose to explicity (re-)throw the exception to delegate it to
928 the other existing exception translators.
929
930 The ``py::exception`` wrapper for creating custom exceptions cannot (yet)
931 be used as a ``py::base``.
932
Wenzel Jakob9e0a0562016-05-05 20:33:54 +0200933.. _opaque:
934
935Treating STL data structures as opaque objects
936==============================================
937
938pybind11 heavily relies on a template matching mechanism to convert parameters
939and return values that are constructed from STL data types such as vectors,
940linked lists, hash tables, etc. This even works in a recursive manner, for
941instance to deal with lists of hash maps of pairs of elementary and custom
942types, etc.
943
944However, a fundamental limitation of this approach is that internal conversions
945between Python and C++ types involve a copy operation that prevents
946pass-by-reference semantics. What does this mean?
947
948Suppose we bind the following function
949
950.. code-block:: cpp
951
952 void append_1(std::vector<int> &v) {
953 v.push_back(1);
954 }
955
956and call it from Python, the following happens:
957
Wenzel Jakob99279f72016-06-03 11:19:29 +0200958.. code-block:: pycon
Wenzel Jakob9e0a0562016-05-05 20:33:54 +0200959
960 >>> v = [5, 6]
961 >>> append_1(v)
962 >>> print(v)
963 [5, 6]
964
965As you can see, when passing STL data structures by reference, modifications
966are not propagated back the Python side. A similar situation arises when
967exposing STL data structures using the ``def_readwrite`` or ``def_readonly``
968functions:
969
970.. code-block:: cpp
971
972 /* ... definition ... */
973
974 class MyClass {
975 std::vector<int> contents;
976 };
977
978 /* ... binding code ... */
979
980 py::class_<MyClass>(m, "MyClass")
981 .def(py::init<>)
982 .def_readwrite("contents", &MyClass::contents);
983
984In this case, properties can be read and written in their entirety. However, an
985``append`` operaton involving such a list type has no effect:
986
Wenzel Jakob99279f72016-06-03 11:19:29 +0200987.. code-block:: pycon
Wenzel Jakob9e0a0562016-05-05 20:33:54 +0200988
989 >>> m = MyClass()
990 >>> m.contents = [5, 6]
991 >>> print(m.contents)
992 [5, 6]
993 >>> m.contents.append(7)
994 >>> print(m.contents)
995 [5, 6]
996
997To deal with both of the above situations, pybind11 provides a macro named
998``PYBIND11_MAKE_OPAQUE(T)`` that disables the template-based conversion
999machinery of types, thus rendering them *opaque*. The contents of opaque
1000objects are never inspected or extracted, hence they can be passed by
1001reference. For instance, to turn ``std::vector<int>`` into an opaque type, add
1002the declaration
1003
1004.. code-block:: cpp
1005
1006 PYBIND11_MAKE_OPAQUE(std::vector<int>);
1007
1008before any binding code (e.g. invocations to ``class_::def()``, etc.). This
1009macro must be specified at the top level, since instantiates a partial template
1010overload. If your binding code consists of multiple compilation units, it must
1011be present in every file preceding any usage of ``std::vector<int>``. Opaque
1012types must also have a corresponding ``class_`` declaration to associate them
1013with a name in Python, and to define a set of available operations:
1014
1015.. code-block:: cpp
1016
1017 py::class_<std::vector<int>>(m, "IntVector")
1018 .def(py::init<>())
1019 .def("clear", &std::vector<int>::clear)
1020 .def("pop_back", &std::vector<int>::pop_back)
1021 .def("__len__", [](const std::vector<int> &v) { return v.size(); })
1022 .def("__iter__", [](std::vector<int> &v) {
1023 return py::make_iterator(v.begin(), v.end());
1024 }, py::keep_alive<0, 1>()) /* Keep vector alive while iterator is used */
1025 // ....
1026
Wenzel Jakob9bb97c12016-06-03 11:19:41 +02001027Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001028
1029.. seealso::
1030
1031 The file :file:`example/example14.cpp` contains a complete example that
1032 demonstrates how to create and expose opaque types using pybind11 in more
1033 detail.
1034
1035.. _eigen:
1036
1037Transparent conversion of dense and sparse Eigen data types
1038===========================================================
1039
1040Eigen [#f1]_ is C++ header-based library for dense and sparse linear algebra. Due to
1041its popularity and widespread adoption, pybind11 provides transparent
1042conversion support between Eigen and Scientific Python linear algebra data types.
1043
1044Specifically, when including the optional header file :file:`pybind11/eigen.h`,
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001045pybind11 will automatically and transparently convert
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001046
10471. Static and dynamic Eigen dense vectors and matrices to instances of
1048 ``numpy.ndarray`` (and vice versa).
1049
10501. Eigen sparse vectors and matrices to instances of
1051 ``scipy.sparse.csr_matrix``/``scipy.sparse.csc_matrix`` (and vice versa).
1052
1053This makes it possible to bind most kinds of functions that rely on these types.
1054One major caveat are functions that take Eigen matrices *by reference* and modify
1055them somehow, in which case the information won't be propagated to the caller.
1056
1057.. code-block:: cpp
1058
1059 /* The Python bindings of this function won't replicate
1060 the intended effect of modifying the function argument */
1061 void scale_by_2(Eigen::Vector3f &v) {
1062 v *= 2;
1063 }
1064
1065To see why this is, refer to the section on :ref:`opaque` (although that
1066section specifically covers STL data types, the underlying issue is the same).
1067The next two sections discuss an efficient alternative for exposing the
1068underlying native Eigen types as opaque objects in a way that still integrates
1069with NumPy and SciPy.
1070
1071.. [#f1] http://eigen.tuxfamily.org
1072
1073.. seealso::
1074
1075 The file :file:`example/eigen.cpp` contains a complete example that
1076 shows how to pass Eigen sparse and dense data types in more detail.
1077
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001078Buffer protocol
1079===============
1080
1081Python supports an extremely general and convenient approach for exchanging
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001082data between plugin libraries. Types can expose a buffer view [#f2]_, which
1083provides fast direct access to the raw internal data representation. Suppose we
1084want to bind the following simplistic Matrix class:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001085
1086.. code-block:: cpp
1087
1088 class Matrix {
1089 public:
1090 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
1091 m_data = new float[rows*cols];
1092 }
1093 float *data() { return m_data; }
1094 size_t rows() const { return m_rows; }
1095 size_t cols() const { return m_cols; }
1096 private:
1097 size_t m_rows, m_cols;
1098 float *m_data;
1099 };
1100
1101The following binding code exposes the ``Matrix`` contents as a buffer object,
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001102making it possible to cast Matrices into NumPy arrays. It is even possible to
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001103completely avoid copy operations with Python expressions like
1104``np.array(matrix_instance, copy = False)``.
1105
1106.. code-block:: cpp
1107
1108 py::class_<Matrix>(m, "Matrix")
1109 .def_buffer([](Matrix &m) -> py::buffer_info {
1110 return py::buffer_info(
Wenzel Jakob876eeab2016-05-04 22:22:48 +02001111 m.data(), /* Pointer to buffer */
1112 sizeof(float), /* Size of one scalar */
1113 py::format_descriptor<float>::value, /* Python struct-style format descriptor */
1114 2, /* Number of dimensions */
1115 { m.rows(), m.cols() }, /* Buffer dimensions */
1116 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001117 sizeof(float) }
1118 );
1119 });
1120
1121The snippet above binds a lambda function, which can create ``py::buffer_info``
1122description records on demand describing a given matrix. The contents of
1123``py::buffer_info`` mirror the Python buffer protocol specification.
1124
1125.. code-block:: cpp
1126
1127 struct buffer_info {
1128 void *ptr;
1129 size_t itemsize;
1130 std::string format;
1131 int ndim;
1132 std::vector<size_t> shape;
1133 std::vector<size_t> strides;
1134 };
1135
1136To create a C++ function that can take a Python buffer object as an argument,
1137simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
1138in a great variety of configurations, hence some safety checks are usually
1139necessary in the function body. Below, you can see an basic example on how to
1140define a custom constructor for the Eigen double precision matrix
1141(``Eigen::MatrixXd``) type, which supports initialization from compatible
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001142buffer objects (e.g. a NumPy matrix).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001143
1144.. code-block:: cpp
1145
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001146 /* Bind MatrixXd (or some other Eigen type) to Python */
1147 typedef Eigen::MatrixXd Matrix;
1148
1149 typedef Matrix::Scalar Scalar;
1150 constexpr bool rowMajor = Matrix::Flags & Eigen::RowMajorBit;
1151
1152 py::class_<Matrix>(m, "Matrix")
1153 .def("__init__", [](Matrix &m, py::buffer b) {
Wenzel Jakobe7628532016-05-05 10:04:44 +02001154 typedef Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic> Strides;
Wenzel Jakobe7628532016-05-05 10:04:44 +02001155
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001156 /* Request a buffer descriptor from Python */
1157 py::buffer_info info = b.request();
1158
1159 /* Some sanity checks ... */
Wenzel Jakobe7628532016-05-05 10:04:44 +02001160 if (info.format != py::format_descriptor<Scalar>::value)
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001161 throw std::runtime_error("Incompatible format: expected a double array!");
1162
1163 if (info.ndim != 2)
1164 throw std::runtime_error("Incompatible buffer dimension!");
1165
Wenzel Jakobe7628532016-05-05 10:04:44 +02001166 auto strides = Strides(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001167 info.strides[rowMajor ? 0 : 1] / sizeof(Scalar),
1168 info.strides[rowMajor ? 1 : 0] / sizeof(Scalar));
Wenzel Jakobe7628532016-05-05 10:04:44 +02001169
1170 auto map = Eigen::Map<Matrix, 0, Strides>(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001171 static_cat<Scalar *>(info.ptr), info.shape[0], info.shape[1], strides);
Wenzel Jakobe7628532016-05-05 10:04:44 +02001172
1173 new (&m) Matrix(map);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001174 });
1175
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001176For reference, the ``def_buffer()`` call for this Eigen data type should look
1177as follows:
1178
1179.. code-block:: cpp
1180
1181 .def_buffer([](Matrix &m) -> py::buffer_info {
1182 return py::buffer_info(
1183 m.data(), /* Pointer to buffer */
1184 sizeof(Scalar), /* Size of one scalar */
1185 /* Python struct-style format descriptor */
1186 py::format_descriptor<Scalar>::value,
1187 /* Number of dimensions */
1188 2,
1189 /* Buffer dimensions */
1190 { (size_t) m.rows(),
1191 (size_t) m.cols() },
1192 /* Strides (in bytes) for each index */
1193 { sizeof(Scalar) * (rowMajor ? m.cols() : 1),
1194 sizeof(Scalar) * (rowMajor ? 1 : m.rows()) }
1195 );
1196 })
1197
1198For a much easier approach of binding Eigen types (although with some
1199limitations), refer to the section on :ref:`eigen`.
1200
Wenzel Jakob93296692015-10-13 23:21:54 +02001201.. seealso::
1202
1203 The file :file:`example/example7.cpp` contains a complete example that
1204 demonstrates using the buffer protocol with pybind11 in more detail.
1205
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001206.. [#f2] http://docs.python.org/3/c-api/buffer.html
Wenzel Jakob978e3762016-04-07 18:00:41 +02001207
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001208NumPy support
1209=============
1210
1211By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
1212restrict the function so that it only accepts NumPy arrays (rather than any
Wenzel Jakob978e3762016-04-07 18:00:41 +02001213type of Python object satisfying the buffer protocol).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001214
1215In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +02001216array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001217template. For instance, the following function requires the argument to be a
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001218NumPy array containing double precision values.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001219
1220.. code-block:: cpp
1221
Wenzel Jakob93296692015-10-13 23:21:54 +02001222 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001223
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001224When it is invoked with a different type (e.g. an integer or a list of
1225integers), the binding code will attempt to cast the input into a NumPy array
1226of the requested type. Note that this feature requires the
1227:file:``pybind11/numpy.h`` header to be included.
1228
1229Data in NumPy arrays is not guaranteed to packed in a dense manner;
1230furthermore, entries can be separated by arbitrary column and row strides.
1231Sometimes, it can be useful to require a function to only accept dense arrays
1232using either the C (row-major) or Fortran (column-major) ordering. This can be
1233accomplished via a second template argument with values ``py::array::c_style``
1234or ``py::array::f_style``.
1235
1236.. code-block:: cpp
1237
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001238 void f(py::array_t<double, py::array::c_style | py::array::forcecast> array);
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001239
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001240The ``py::array::forcecast`` argument is the default value of the second
1241template paramenter, and it ensures that non-conforming arguments are converted
1242into an array satisfying the specified requirements instead of trying the next
1243function overload.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001244
1245Vectorizing functions
1246=====================
1247
1248Suppose we want to bind a function with the following signature to Python so
1249that it can process arbitrary NumPy array arguments (vectors, matrices, general
1250N-D arrays) in addition to its normal arguments:
1251
1252.. code-block:: cpp
1253
1254 double my_func(int x, float y, double z);
1255
Wenzel Jakob8f4eb002015-10-15 18:13:33 +02001256After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001257
1258.. code-block:: cpp
1259
1260 m.def("vectorized_func", py::vectorize(my_func));
1261
1262Invoking the function like below causes 4 calls to be made to ``my_func`` with
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001263each of the array elements. The significant advantage of this compared to
Wenzel Jakob978e3762016-04-07 18:00:41 +02001264solutions like ``numpy.vectorize()`` is that the loop over the elements runs
1265entirely on the C++ side and can be crunched down into a tight, optimized loop
1266by the compiler. The result is returned as a NumPy array of type
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001267``numpy.dtype.float64``.
1268
Wenzel Jakob99279f72016-06-03 11:19:29 +02001269.. code-block:: pycon
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001270
1271 >>> x = np.array([[1, 3],[5, 7]])
1272 >>> y = np.array([[2, 4],[6, 8]])
1273 >>> z = 3
1274 >>> result = vectorized_func(x, y, z)
1275
1276The scalar argument ``z`` is transparently replicated 4 times. The input
1277arrays ``x`` and ``y`` are automatically converted into the right types (they
1278are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
1279``numpy.dtype.float32``, respectively)
1280
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001281Sometimes we might want to explicitly exclude an argument from the vectorization
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001282because it makes little sense to wrap it in a NumPy array. For instance,
1283suppose the function signature was
1284
1285.. code-block:: cpp
1286
1287 double my_func(int x, float y, my_custom_type *z);
1288
1289This can be done with a stateful Lambda closure:
1290
1291.. code-block:: cpp
1292
1293 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
1294 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +02001295 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001296 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
1297 return py::vectorize(stateful_closure)(x, y);
1298 }
1299 );
1300
Wenzel Jakob61587162016-01-18 22:38:52 +01001301In cases where the computation is too complicated to be reduced to
1302``vectorize``, it will be necessary to create and access the buffer contents
1303manually. The following snippet contains a complete example that shows how this
1304works (the code is somewhat contrived, since it could have been done more
1305simply using ``vectorize``).
1306
1307.. code-block:: cpp
1308
1309 #include <pybind11/pybind11.h>
1310 #include <pybind11/numpy.h>
1311
1312 namespace py = pybind11;
1313
1314 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
1315 auto buf1 = input1.request(), buf2 = input2.request();
1316
1317 if (buf1.ndim != 1 || buf2.ndim != 1)
1318 throw std::runtime_error("Number of dimensions must be one");
1319
1320 if (buf1.shape[0] != buf2.shape[0])
1321 throw std::runtime_error("Input shapes must match");
1322
1323 auto result = py::array(py::buffer_info(
1324 nullptr, /* Pointer to data (nullptr -> ask NumPy to allocate!) */
1325 sizeof(double), /* Size of one item */
Nils Wernerf7048f22016-05-19 11:17:17 +02001326 py::format_descriptor<double>::value(), /* Buffer format */
Wenzel Jakob61587162016-01-18 22:38:52 +01001327 buf1.ndim, /* How many dimensions? */
1328 { buf1.shape[0] }, /* Number of elements for each dimension */
1329 { sizeof(double) } /* Strides for each dimension */
1330 ));
1331
1332 auto buf3 = result.request();
1333
1334 double *ptr1 = (double *) buf1.ptr,
1335 *ptr2 = (double *) buf2.ptr,
1336 *ptr3 = (double *) buf3.ptr;
1337
1338 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
1339 ptr3[idx] = ptr1[idx] + ptr2[idx];
1340
1341 return result;
1342 }
1343
1344 PYBIND11_PLUGIN(test) {
1345 py::module m("test");
1346 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
1347 return m.ptr();
1348 }
1349
Wenzel Jakob93296692015-10-13 23:21:54 +02001350.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001351
Wenzel Jakob93296692015-10-13 23:21:54 +02001352 The file :file:`example/example10.cpp` contains a complete example that
1353 demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001354
Wenzel Jakob93296692015-10-13 23:21:54 +02001355Functions taking Python objects as arguments
1356============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001357
Wenzel Jakob93296692015-10-13 23:21:54 +02001358pybind11 exposes all major Python types using thin C++ wrapper classes. These
1359wrapper classes can also be used as parameters of functions in bindings, which
1360makes it possible to directly work with native Python types on the C++ side.
1361For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001362
Wenzel Jakob93296692015-10-13 23:21:54 +02001363.. code-block:: cpp
1364
1365 void print_dict(py::dict dict) {
1366 /* Easily interact with Python types */
1367 for (auto item : dict)
1368 std::cout << "key=" << item.first << ", "
1369 << "value=" << item.second << std::endl;
1370 }
1371
1372Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +01001373:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001374:class:`list`, :class:`dict`, :class:`slice`, :class:`none`, :class:`capsule`,
1375:class:`iterable`, :class:`iterator`, :class:`function`, :class:`buffer`,
1376:class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +02001377
Wenzel Jakob436b7312015-10-20 01:04:30 +02001378In this kind of mixed code, it is often necessary to convert arbitrary C++
1379types to Python, which can be done using :func:`cast`:
1380
1381.. code-block:: cpp
1382
1383 MyClass *cls = ..;
1384 py::object obj = py::cast(cls);
1385
1386The reverse direction uses the following syntax:
1387
1388.. code-block:: cpp
1389
1390 py::object obj = ...;
1391 MyClass *cls = obj.cast<MyClass *>();
1392
1393When conversion fails, both directions throw the exception :class:`cast_error`.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001394It is also possible to call python functions via ``operator()``.
1395
1396.. code-block:: cpp
1397
1398 py::function f = <...>;
1399 py::object result_py = f(1234, "hello", some_instance);
1400 MyClass &result = result_py.cast<MyClass>();
1401
1402The special ``f(*args)`` and ``f(*args, **kwargs)`` syntax is also supported to
1403supply arbitrary argument and keyword lists, although these cannot be mixed
1404with other parameters.
1405
1406.. code-block:: cpp
1407
1408 py::function f = <...>;
1409 py::tuple args = py::make_tuple(1234);
1410 py::dict kwargs;
1411 kwargs["y"] = py::cast(5678);
1412 py::object result = f(*args, **kwargs);
Wenzel Jakob436b7312015-10-20 01:04:30 +02001413
Wenzel Jakob93296692015-10-13 23:21:54 +02001414.. seealso::
1415
1416 The file :file:`example/example2.cpp` contains a complete example that
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001417 demonstrates passing native Python types in more detail. The file
1418 :file:`example/example11.cpp` discusses usage of ``args`` and ``kwargs``.
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001419
1420Default arguments revisited
1421===========================
1422
1423The section on :ref:`default_args` previously discussed basic usage of default
1424arguments using pybind11. One noteworthy aspect of their implementation is that
1425default arguments are converted to Python objects right at declaration time.
1426Consider the following example:
1427
1428.. code-block:: cpp
1429
1430 py::class_<MyClass>("MyClass")
1431 .def("myFunction", py::arg("arg") = SomeType(123));
1432
1433In this case, pybind11 must already be set up to deal with values of the type
1434``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
1435exception will be thrown.
1436
1437Another aspect worth highlighting is that the "preview" of the default argument
1438in the function signature is generated using the object's ``__repr__`` method.
1439If not available, the signature may not be very helpful, e.g.:
1440
Wenzel Jakob99279f72016-06-03 11:19:29 +02001441.. code-block:: pycon
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001442
1443 FUNCTIONS
1444 ...
1445 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +01001446 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001447 ...
1448
1449The first way of addressing this is by defining ``SomeType.__repr__``.
1450Alternatively, it is possible to specify the human-readable preview of the
1451default argument manually using the ``arg_t`` notation:
1452
1453.. code-block:: cpp
1454
1455 py::class_<MyClass>("MyClass")
1456 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
1457
Wenzel Jakobc769fce2016-03-03 12:03:30 +01001458Sometimes it may be necessary to pass a null pointer value as a default
1459argument. In this case, remember to cast it to the underlying type in question,
1460like so:
1461
1462.. code-block:: cpp
1463
1464 py::class_<MyClass>("MyClass")
1465 .def("myFunction", py::arg("arg") = (SomeType *) nullptr);
1466
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001467Binding functions that accept arbitrary numbers of arguments and keywords arguments
1468===================================================================================
1469
1470Python provides a useful mechanism to define functions that accept arbitrary
1471numbers of arguments and keyword arguments:
1472
1473.. code-block:: cpp
1474
1475 def generic(*args, **kwargs):
1476 # .. do something with args and kwargs
1477
1478Such functions can also be created using pybind11:
1479
1480.. code-block:: cpp
1481
1482 void generic(py::args args, py::kwargs kwargs) {
1483 /// .. do something with args
1484 if (kwargs)
1485 /// .. do something with kwargs
1486 }
1487
1488 /// Binding code
1489 m.def("generic", &generic);
1490
1491(See ``example/example11.cpp``). The class ``py::args`` derives from
1492``py::list`` and ``py::kwargs`` derives from ``py::dict`` Note that the
1493``kwargs`` argument is invalid if no keyword arguments were actually provided.
1494Please refer to the other examples for details on how to iterate over these,
1495and on how to cast their entries into C++ objects.
1496
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001497Partitioning code over multiple extension modules
1498=================================================
1499
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001500It's straightforward to split binding code over multiple extension modules,
1501while referencing types that are declared elsewhere. Everything "just" works
1502without any special precautions. One exception to this rule occurs when
1503extending a type declared in another extension module. Recall the basic example
1504from Section :ref:`inheritance`.
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001505
1506.. code-block:: cpp
1507
1508 py::class_<Pet> pet(m, "Pet");
1509 pet.def(py::init<const std::string &>())
1510 .def_readwrite("name", &Pet::name);
1511
1512 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1513 .def(py::init<const std::string &>())
1514 .def("bark", &Dog::bark);
1515
1516Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1517whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1518course that the variable ``pet`` is not available anymore though it is needed
1519to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1520However, it can be acquired as follows:
1521
1522.. code-block:: cpp
1523
1524 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1525
1526 py::class_<Dog>(m, "Dog", pet)
1527 .def(py::init<const std::string &>())
1528 .def("bark", &Dog::bark);
1529
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001530Alternatively, we can rely on the ``base`` tag, which performs an automated
1531lookup of the corresponding Python type. However, this also requires invoking
1532the ``import`` function once to ensure that the pybind11 binding code of the
1533module ``basic`` has been executed.
1534
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001535.. code-block:: cpp
1536
1537 py::module::import("basic");
1538
1539 py::class_<Dog>(m, "Dog", py::base<Pet>())
1540 .def(py::init<const std::string &>())
1541 .def("bark", &Dog::bark);
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001542
Wenzel Jakob978e3762016-04-07 18:00:41 +02001543Naturally, both methods will fail when there are cyclic dependencies.
1544
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001545Note that compiling code which has its default symbol visibility set to
1546*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
1547ability to access types defined in another extension module. Workarounds
1548include changing the global symbol visibility (not recommended, because it will
1549lead unnecessarily large binaries) or manually exporting types that are
1550accessed by multiple extension modules:
1551
1552.. code-block:: cpp
1553
1554 #ifdef _WIN32
1555 # define EXPORT_TYPE __declspec(dllexport)
1556 #else
1557 # define EXPORT_TYPE __attribute__ ((visibility("default")))
1558 #endif
1559
1560 class EXPORT_TYPE Dog : public Animal {
1561 ...
1562 };
1563
1564
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001565Pickling support
1566================
1567
1568Python's ``pickle`` module provides a powerful facility to serialize and
1569de-serialize a Python object graph into a binary data stream. To pickle and
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02001570unpickle C++ classes using pybind11, two additional functions must be provided.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001571Suppose the class in question has the following signature:
1572
1573.. code-block:: cpp
1574
1575 class Pickleable {
1576 public:
1577 Pickleable(const std::string &value) : m_value(value) { }
1578 const std::string &value() const { return m_value; }
1579
1580 void setExtra(int extra) { m_extra = extra; }
1581 int extra() const { return m_extra; }
1582 private:
1583 std::string m_value;
1584 int m_extra = 0;
1585 };
1586
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001587The binding code including the requisite ``__setstate__`` and ``__getstate__`` methods [#f3]_
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001588looks as follows:
1589
1590.. code-block:: cpp
1591
1592 py::class_<Pickleable>(m, "Pickleable")
1593 .def(py::init<std::string>())
1594 .def("value", &Pickleable::value)
1595 .def("extra", &Pickleable::extra)
1596 .def("setExtra", &Pickleable::setExtra)
1597 .def("__getstate__", [](const Pickleable &p) {
1598 /* Return a tuple that fully encodes the state of the object */
1599 return py::make_tuple(p.value(), p.extra());
1600 })
1601 .def("__setstate__", [](Pickleable &p, py::tuple t) {
1602 if (t.size() != 2)
1603 throw std::runtime_error("Invalid state!");
1604
Wenzel Jakobd40885a2016-04-13 13:30:05 +02001605 /* Invoke the in-place constructor. Note that this is needed even
1606 when the object just has a trivial default constructor */
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001607 new (&p) Pickleable(t[0].cast<std::string>());
1608
1609 /* Assign any additional state */
1610 p.setExtra(t[1].cast<int>());
1611 });
1612
1613An instance can now be pickled as follows:
1614
1615.. code-block:: python
1616
1617 try:
1618 import cPickle as pickle # Use cPickle on Python 2.7
1619 except ImportError:
1620 import pickle
1621
1622 p = Pickleable("test_value")
1623 p.setExtra(15)
Wenzel Jakob81e09752016-04-30 23:13:03 +02001624 data = pickle.dumps(p, 2)
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001625
Wenzel Jakob81e09752016-04-30 23:13:03 +02001626Note that only the cPickle module is supported on Python 2.7. The second
1627argument to ``dumps`` is also crucial: it selects the pickle protocol version
16282, since the older version 1 is not supported. Newer versions are also fine—for
1629instance, specify ``-1`` to always use the latest available version. Beware:
1630failure to follow these instructions will cause important pybind11 memory
1631allocation routines to be skipped during unpickling, which will likely lead to
1632memory corruption and/or segmentation faults.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001633
1634.. seealso::
1635
1636 The file :file:`example/example15.cpp` contains a complete example that
1637 demonstrates how to pickle and unpickle types using pybind11 in more detail.
1638
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001639.. [#f3] http://docs.python.org/3/library/pickle.html#pickling-class-instances
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001640
1641Generating documentation using Sphinx
1642=====================================
1643
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001644Sphinx [#f4]_ has the ability to inspect the signatures and documentation
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001645strings in pybind11-based extension modules to automatically generate beautiful
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001646documentation in a variety formats. The python_example repository [#f5]_ contains a
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001647simple example repository which uses this approach.
1648
1649There are two potential gotchas when using this approach: first, make sure that
1650the resulting strings do not contain any :kbd:`TAB` characters, which break the
1651docstring parsing routines. You may want to use C++11 raw string literals,
1652which are convenient for multi-line comments. Conveniently, any excess
1653indentation will be automatically be removed by Sphinx. However, for this to
1654work, it is important that all lines are indented consistently, i.e.:
1655
1656.. code-block:: cpp
1657
1658 // ok
1659 m.def("foo", &foo, R"mydelimiter(
1660 The foo function
1661
1662 Parameters
1663 ----------
1664 )mydelimiter");
1665
1666 // *not ok*
1667 m.def("foo", &foo, R"mydelimiter(The foo function
1668
1669 Parameters
1670 ----------
1671 )mydelimiter");
1672
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001673.. [#f4] http://www.sphinx-doc.org
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001674.. [#f5] http://github.com/pybind/python_example
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001675
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001676Evaluating Python expressions from strings and files
1677====================================================
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001678
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001679pybind11 provides the :func:`eval` and :func:`eval_file` functions to evaluate
1680Python expressions and statements. The following example illustrates how they
1681can be used.
1682
1683Both functions accept a template parameter that describes how the argument
1684should be interpreted. Possible choices include ``eval_expr`` (isolated
1685expression), ``eval_single_statement`` (a single statement, return value is
1686always ``none``), and ``eval_statements`` (sequence of statements, return value
1687is always ``none``).
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001688
1689.. code-block:: cpp
1690
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001691 // At beginning of file
1692 #include <pybind11/eval.h>
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001693
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001694 ...
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001695
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001696 // Evaluate in scope of main module
1697 py::object scope = py::module::import("__main__").attr("__dict__");
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001698
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001699 // Evaluate an isolated expression
1700 int result = py::eval("my_variable + 10", scope).cast<int>();
1701
1702 // Evaluate a sequence of statements
1703 py::eval<py::eval_statements>(
1704 "print('Hello')\n"
1705 "print('world!');",
1706 scope);
1707
1708 // Evaluate the statements in an separate Python file on disk
1709 py::eval_file("script.py", scope);
1710