blob: f719c80756e15458dc79282da9cc54b11e042411 [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
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400105 The file :file:`example/example-operator-overloading.cpp` contains a
106 complete example that demonstrates how to work with overloaded operators in
107 more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200108
109Callbacks and passing anonymous functions
110=========================================
111
112The C++11 standard brought lambda functions and the generic polymorphic
113function wrapper ``std::function<>`` to the C++ programming language, which
114enable powerful new ways of working with functions. Lambda functions come in
115two flavors: stateless lambda function resemble classic function pointers that
116link to an anonymous piece of code, while stateful lambda functions
117additionally depend on captured variables that are stored in an anonymous
118*lambda closure object*.
119
120Here is a simple example of a C++ function that takes an arbitrary function
121(stateful or stateless) with signature ``int -> int`` as an argument and runs
122it with the value 10.
123
124.. code-block:: cpp
125
126 int func_arg(const std::function<int(int)> &f) {
127 return f(10);
128 }
129
130The example below is more involved: it takes a function of signature ``int -> int``
131and returns another function of the same kind. The return value is a stateful
132lambda function, which stores the value ``f`` in the capture object and adds 1 to
133its return value upon execution.
134
135.. code-block:: cpp
136
137 std::function<int(int)> func_ret(const std::function<int(int)> &f) {
138 return [f](int i) {
139 return f(i) + 1;
140 };
141 }
142
Brad Harmon835fc062016-06-16 13:19:15 -0500143This example demonstrates using python named parameters in C++ callbacks which
144requires using ``py::cpp_function`` as a wrapper. Usage is similar to defining
145methods of classes:
146
147.. code-block:: cpp
148
149 py::cpp_function func_cpp() {
150 return py::cpp_function([](int i) { return i+1; },
151 py::arg("number"));
152 }
153
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200154After including the extra header file :file:`pybind11/functional.h`, it is almost
Brad Harmon835fc062016-06-16 13:19:15 -0500155trivial to generate binding code for all of these functions.
Wenzel Jakob93296692015-10-13 23:21:54 +0200156
157.. code-block:: cpp
158
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200159 #include <pybind11/functional.h>
Wenzel Jakob93296692015-10-13 23:21:54 +0200160
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200161 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200162 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200163
164 m.def("func_arg", &func_arg);
165 m.def("func_ret", &func_ret);
Brad Harmon835fc062016-06-16 13:19:15 -0500166 m.def("func_cpp", &func_cpp);
Wenzel Jakob93296692015-10-13 23:21:54 +0200167
168 return m.ptr();
169 }
170
171The following interactive session shows how to call them from Python.
172
Wenzel Jakob99279f72016-06-03 11:19:29 +0200173.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200174
175 $ python
176 >>> import example
177 >>> def square(i):
178 ... return i * i
179 ...
180 >>> example.func_arg(square)
181 100L
182 >>> square_plus_1 = example.func_ret(square)
183 >>> square_plus_1(4)
184 17L
Brad Harmon835fc062016-06-16 13:19:15 -0500185 >>> plus_1 = func_cpp()
186 >>> plus_1(number=43)
187 44L
Wenzel Jakob93296692015-10-13 23:21:54 +0200188
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100189.. warning::
190
191 Keep in mind that passing a function from C++ to Python (or vice versa)
192 will instantiate a piece of wrapper code that translates function
Wenzel Jakob954b7932016-07-10 10:13:18 +0200193 invocations between the two languages. Naturally, this translation
194 increases the computational cost of each function call somewhat. A
195 problematic situation can arise when a function is copied back and forth
196 between Python and C++ many times in a row, in which case the underlying
197 wrappers will accumulate correspondingly. The resulting long sequence of
198 C++ -> Python -> C++ -> ... roundtrips can significantly decrease
199 performance.
200
201 There is one exception: pybind11 detects case where a stateless function
202 (i.e. a function pointer or a lambda function without captured variables)
203 is passed as an argument to another C++ function exposed in Python. In this
204 case, there is no overhead. Pybind11 will extract the underlying C++
205 function pointer from the wrapped function to sidestep a potential C++ ->
206 Python -> C++ roundtrip. This is demonstrated in Example 5.
207
208.. note::
209
210 This functionality is very useful when generating bindings for callbacks in
211 C++ libraries (e.g. GUI libraries, asynchronous networking libraries, etc.).
212
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400213 The file :file:`example/example-callbacks.cpp` contains a complete example
214 that demonstrates how to work with callbacks and anonymous functions in
215 more detail.
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100216
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200217Overriding virtual functions in Python
218======================================
219
Wenzel Jakob93296692015-10-13 23:21:54 +0200220Suppose that a C++ class or interface has a virtual function that we'd like to
221to override from within Python (we'll focus on the class ``Animal``; ``Dog`` is
222given as a specific example of how one would do this with traditional C++
223code).
224
225.. code-block:: cpp
226
227 class Animal {
228 public:
229 virtual ~Animal() { }
230 virtual std::string go(int n_times) = 0;
231 };
232
233 class Dog : public Animal {
234 public:
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400235 std::string go(int n_times) override {
Wenzel Jakob93296692015-10-13 23:21:54 +0200236 std::string result;
237 for (int i=0; i<n_times; ++i)
238 result += "woof! ";
239 return result;
240 }
241 };
242
243Let's also suppose that we are given a plain function which calls the
244function ``go()`` on an arbitrary ``Animal`` instance.
245
246.. code-block:: cpp
247
248 std::string call_go(Animal *animal) {
249 return animal->go(3);
250 }
251
252Normally, the binding code for these classes would look as follows:
253
254.. code-block:: cpp
255
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200256 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200257 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200258
259 py::class_<Animal> animal(m, "Animal");
260 animal
261 .def("go", &Animal::go);
262
263 py::class_<Dog>(m, "Dog", animal)
264 .def(py::init<>());
265
266 m.def("call_go", &call_go);
267
268 return m.ptr();
269 }
270
271However, these bindings are impossible to extend: ``Animal`` is not
272constructible, and we clearly require some kind of "trampoline" that
273redirects virtual calls back to Python.
274
275Defining a new type of ``Animal`` from within Python is possible but requires a
276helper class that is defined as follows:
277
278.. code-block:: cpp
279
280 class PyAnimal : public Animal {
281 public:
282 /* Inherit the constructors */
283 using Animal::Animal;
284
285 /* Trampoline (need one for each virtual function) */
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400286 std::string go(int n_times) override {
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200287 PYBIND11_OVERLOAD_PURE(
Wenzel Jakob93296692015-10-13 23:21:54 +0200288 std::string, /* Return type */
289 Animal, /* Parent class */
290 go, /* Name of function */
291 n_times /* Argument(s) */
292 );
293 }
294 };
295
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200296The macro :func:`PYBIND11_OVERLOAD_PURE` should be used for pure virtual
297functions, and :func:`PYBIND11_OVERLOAD` should be used for functions which have
Wenzel Jakob0d3fc352016-07-08 10:52:10 +0200298a default implementation.
Wenzel Jakob1e3be732016-05-24 23:42:05 +0200299
300There are also two alternate macros :func:`PYBIND11_OVERLOAD_PURE_NAME` and
301:func:`PYBIND11_OVERLOAD_NAME` which take a string-valued name argument
302after the *Name of the function* slot. This is useful when the C++ and Python
303versions of the function have different names, e.g. ``operator()`` vs ``__call__``.
304
305The binding code also needs a few minor adaptations (highlighted):
Wenzel Jakob93296692015-10-13 23:21:54 +0200306
307.. code-block:: cpp
308 :emphasize-lines: 4,6,7
309
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200310 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200311 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200312
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200313 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal /* <--- trampoline*/> animal(m, "Animal");
Wenzel Jakob93296692015-10-13 23:21:54 +0200314 animal
Wenzel Jakob93296692015-10-13 23:21:54 +0200315 .def(py::init<>())
316 .def("go", &Animal::go);
317
318 py::class_<Dog>(m, "Dog", animal)
319 .def(py::init<>());
320
321 m.def("call_go", &call_go);
322
323 return m.ptr();
324 }
325
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200326Importantly, pybind11 is made aware of the trampoline trampoline helper class
327by specifying it as the *third* template argument to :class:`class_`. The
328second argument with the unique pointer is simply the default holder type used
329by pybind11. Following this, we are able to define a constructor as usual.
Wenzel Jakob93296692015-10-13 23:21:54 +0200330
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400331Note, however, that the above is sufficient for allowing python classes to
332extend ``Animal``, but not ``Dog``: see ref:`virtual_and_inheritance` for the
333necessary steps required to providing proper overload support for inherited
334classes.
335
Wenzel Jakob93296692015-10-13 23:21:54 +0200336The Python session below shows how to override ``Animal::go`` and invoke it via
337a virtual method call.
338
Wenzel Jakob99279f72016-06-03 11:19:29 +0200339.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200340
341 >>> from example import *
342 >>> d = Dog()
343 >>> call_go(d)
344 u'woof! woof! woof! '
345 >>> class Cat(Animal):
346 ... def go(self, n_times):
347 ... return "meow! " * n_times
348 ...
349 >>> c = Cat()
350 >>> call_go(c)
351 u'meow! meow! meow! '
352
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200353Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakobbd986fe2016-05-21 10:48:30 +0200354
Wenzel Jakob93296692015-10-13 23:21:54 +0200355.. seealso::
356
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400357 The file :file:`example/example-virtual-functions.cpp` contains a complete
358 example that demonstrates how to override virtual functions using pybind11
359 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200360
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400361.. _virtual_and_inheritance:
362
363Combining virtual functions and inheritance
364===========================================
365
366When combining virtual methods with inheritance, you need to be sure to provide
367an override for each method for which you want to allow overrides from derived
368python classes. For example, suppose we extend the above ``Animal``/``Dog``
369example as follows:
370
371.. code-block:: cpp
372 class Animal {
373 public:
374 virtual std::string go(int n_times) = 0;
375 virtual std::string name() { return "unknown"; }
376 };
377 class Dog : public class Animal {
378 public:
379 std::string go(int n_times) override {
380 std::string result;
381 for (int i=0; i<n_times; ++i)
382 result += bark() + " ";
383 return result;
384 }
385 virtual std::string bark() { return "woof!"; }
386 };
387
388then the trampoline class for ``Animal`` must, as described in the previous
389section, override ``go()`` and ``name()``, but in order to allow python code to
390inherit properly from ``Dog``, we also need a trampoline class for ``Dog`` that
391overrides both the added ``bark()`` method *and* the ``go()`` and ``name()``
392methods inherited from ``Animal`` (even though ``Dog`` doesn't directly
393override the ``name()`` method):
394
395.. code-block:: cpp
396 class PyAnimal : public Animal {
397 public:
398 using Animal::Animal; // Inherit constructors
399 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Animal, go, n_times); }
400 std::string name() override { PYBIND11_OVERLOAD(std::string, Animal, name, ); }
401 };
402 class PyDog : public Dog {
403 public:
404 using Dog::Dog; // Inherit constructors
405 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Dog, go, n_times); }
406 std::string name() override { PYBIND11_OVERLOAD(std::string, Dog, name, ); }
407 std::string bark() override { PYBIND11_OVERLOAD(std::string, Dog, bark, ); }
408 };
409
410A registered class derived from a pybind11-registered class with virtual
411methods requires a similar trampoline class, *even if* it doesn't explicitly
412declare or override any virtual methods itself:
413
414.. code-block:: cpp
415 class Husky : public Dog {};
416 class PyHusky : public Husky {
417 using Dog::Dog; // Inherit constructors
418 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Husky, go, n_times); }
419 std::string name() override { PYBIND11_OVERLOAD(std::string, Husky, name, ); }
420 std::string bark() override { PYBIND11_OVERLOAD(std::string, Husky, bark, ); }
421 };
422
423There is, however, a technique that can be used to avoid this duplication
424(which can be especially helpful for a base class with several virtual
425methods). The technique involves using template trampoline classes, as
426follows:
427
428.. code-block:: cpp
429 template <class AnimalBase = Animal> class PyAnimal : public AnimalBase {
430 using AnimalBase::AnimalBase; // Inherit constructors
431 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, AnimalBase, go, n_times); }
432 std::string name() override { PYBIND11_OVERLOAD(std::string, AnimalBase, name, ); }
433 };
434 template <class DogBase = Dog> class PyDog : public PyAnimal<DogBase> {
435 using PyAnimal<DogBase>::PyAnimal; // Inherit constructors
436 // Override PyAnimal's pure virtual go() with a non-pure one:
437 std::string go(int n_times) override { PYBIND11_OVERLOAD(std::string, DogBase, go, n_times); }
438 std::string bark() override { PYBIND11_OVERLOAD(std::string, DogBase, bark, ); }
439 };
440
441This technique has the advantage of requiring just one trampoline method to be
442declared per virtual method and pure virtual method override. It does,
443however, require the compiler to generate at least as many methods (and
444possibly more, if both pure virtual and overridden pure virtual methods are
445exposed, as above).
446
447The classes are then registered with pybind11 using:
448
449.. code-block:: cpp
450 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal<>> animal(m, "Animal");
451 py::class_<Dog, std::unique_ptr<Dog>, PyDog<>> dog(m, "Dog");
452 py::class_<Husky, std::unique_ptr<Husky>, PyDog<Husky>> husky(m, "Husky");
453 // ... add animal, dog, husky definitions
454
455Note that ``Husky`` did not require a dedicated trampoline template class at
456all, since it neither declares any new virtual methods nor provides any pure
457virtual method implementations.
458
459With either the repeated-virtuals or templated trampoline methods in place, you
460can now create a python class that inherits from ``Dog``:
461
462.. code-block:: python
463
464 class ShihTzu(Dog):
465 def bark(self):
466 return "yip!"
467
468.. seealso::
469
470 See the file :file:`example-virtual-functions.cpp` for complete examples
471 using both the duplication and templated trampoline approaches.
472
473 The file also contains a more intrusive approach using multiple
474 inheritance, which may be useful in special situations with deep class
475 hierarchies to avoid code generation.
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100476
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200477.. _macro_notes:
478
479General notes regarding convenience macros
480==========================================
481
482pybind11 provides a few convenience macros such as
483:func:`PYBIND11_MAKE_OPAQUE` and :func:`PYBIND11_DECLARE_HOLDER_TYPE`, and
484``PYBIND11_OVERLOAD_*``. Since these are "just" macros that are evaluated
485in the preprocessor (which has no concept of types), they *will* get confused
486by commas in a template argument such as ``PYBIND11_OVERLOAD(MyReturnValue<T1,
487T2>, myFunc)``. In this case, the preprocessor assumes that the comma indicates
488the beginnning of the next parameter. Use a ``typedef`` to bind the template to
489another name and use it in the macro to avoid this problem.
490
491
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100492Global Interpreter Lock (GIL)
493=============================
494
495The classes :class:`gil_scoped_release` and :class:`gil_scoped_acquire` can be
496used to acquire and release the global interpreter lock in the body of a C++
497function call. In this way, long-running C++ code can be parallelized using
498multiple Python threads. Taking the previous section as an example, this could
499be realized as follows (important changes highlighted):
500
501.. code-block:: cpp
502 :emphasize-lines: 8,9,33,34
503
504 class PyAnimal : public Animal {
505 public:
506 /* Inherit the constructors */
507 using Animal::Animal;
508
509 /* Trampoline (need one for each virtual function) */
510 std::string go(int n_times) {
511 /* Acquire GIL before calling Python code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100512 py::gil_scoped_acquire acquire;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100513
514 PYBIND11_OVERLOAD_PURE(
515 std::string, /* Return type */
516 Animal, /* Parent class */
517 go, /* Name of function */
518 n_times /* Argument(s) */
519 );
520 }
521 };
522
523 PYBIND11_PLUGIN(example) {
524 py::module m("example", "pybind11 example plugin");
525
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200526 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal> animal(m, "Animal");
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100527 animal
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100528 .def(py::init<>())
529 .def("go", &Animal::go);
530
531 py::class_<Dog>(m, "Dog", animal)
532 .def(py::init<>());
533
534 m.def("call_go", [](Animal *animal) -> std::string {
535 /* Release GIL before calling into (potentially long-running) C++ code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100536 py::gil_scoped_release release;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100537 return call_go(animal);
538 });
539
540 return m.ptr();
541 }
542
Wenzel Jakob93296692015-10-13 23:21:54 +0200543Passing STL data structures
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200544===========================
545
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200546When including the additional header file :file:`pybind11/stl.h`, conversions
Wenzel Jakob978e3762016-04-07 18:00:41 +0200547between ``std::vector<>``, ``std::list<>``, ``std::set<>``, and ``std::map<>``
548and the Python ``list``, ``set`` and ``dict`` data structures are automatically
549enabled. The types ``std::pair<>`` and ``std::tuple<>`` are already supported
550out of the box with just the core :file:`pybind11/pybind11.h` header.
Wenzel Jakob93296692015-10-13 23:21:54 +0200551
552.. note::
553
Wenzel Jakob44db04f2015-12-14 12:40:45 +0100554 Arbitrary nesting of any of these types is supported.
Wenzel Jakob93296692015-10-13 23:21:54 +0200555
556.. seealso::
557
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400558 The file :file:`example/example-python-types.cpp` contains a complete
559 example that demonstrates how to pass STL data types in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200560
Wenzel Jakobb2825952016-04-13 23:33:00 +0200561Binding sequence data types, iterators, the slicing protocol, etc.
562==================================================================
Wenzel Jakob93296692015-10-13 23:21:54 +0200563
564Please refer to the supplemental example for details.
565
566.. seealso::
567
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400568 The file :file:`example/example-sequences-and-iterators.cpp` contains a
569 complete example that shows how to bind a sequence data type, including
570 length queries (``__len__``), iterators (``__iter__``), the slicing
571 protocol and other kinds of useful operations.
Wenzel Jakob93296692015-10-13 23:21:54 +0200572
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200573Return value policies
574=====================
575
Wenzel Jakob93296692015-10-13 23:21:54 +0200576Python and C++ use wildly different ways of managing the memory and lifetime of
577objects managed by them. This can lead to issues when creating bindings for
578functions that return a non-trivial type. Just by looking at the type
579information, it is not clear whether Python should take charge of the returned
580value and eventually free its resources, or if this is handled on the C++ side.
581For this reason, pybind11 provides a several `return value policy` annotations
582that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100583functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200584
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200585.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
586
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200587+--------------------------------------------------+----------------------------------------------------------------------------+
588| Return value policy | Description |
589+==================================================+============================================================================+
590| :enum:`return_value_policy::automatic` | This is the default return value policy, which falls back to the policy |
591| | :enum:`return_value_policy::take_ownership` when the return value is a |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200592| | pointer. Otherwise, it uses :enum:`return_value::move` or |
593| | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200594| | See below for a description of what all of these different policies do. |
595+--------------------------------------------------+----------------------------------------------------------------------------+
596| :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 +0200597| | return value is a pointer. This is the default conversion policy for |
598| | function arguments when calling Python functions manually from C++ code |
599| | (i.e. via handle::operator()). You probably won't need to use this. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200600+--------------------------------------------------+----------------------------------------------------------------------------+
601| :enum:`return_value_policy::take_ownership` | Reference an existing object (i.e. do not create a new copy) and take |
602| | ownership. Python will call the destructor and delete operator when the |
603| | object's reference count reaches zero. Undefined behavior ensues when the |
Wenzel Jakobf53e3002016-06-30 14:59:23 +0200604| | C++ side does the same. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200605+--------------------------------------------------+----------------------------------------------------------------------------+
606| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python. |
607| | This policy is comparably safe because the lifetimes of the two instances |
608| | are decoupled. |
609+--------------------------------------------------+----------------------------------------------------------------------------+
610| :enum:`return_value_policy::move` | Use ``std::move`` to move the return value contents into a new instance |
611| | that will be owned by Python. This policy is comparably safe because the |
612| | lifetimes of the two instances (move source and destination) are decoupled.|
613+--------------------------------------------------+----------------------------------------------------------------------------+
614| :enum:`return_value_policy::reference` | Reference an existing object, but do not take ownership. The C++ side is |
615| | responsible for managing the object's lifetime and deallocating it when |
616| | it is no longer used. Warning: undefined behavior will ensue when the C++ |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200617| | side deletes an object that is still referenced and used by Python. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200618+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200619| :enum:`return_value_policy::reference_internal` | This policy only applies to methods and properties. It references the |
620| | object without taking ownership similar to the above |
621| | :enum:`return_value_policy::reference` policy. In contrast to that policy, |
622| | the function or property's implicit ``this`` argument (called the *parent*)|
623| | is considered to be the the owner of the return value (the *child*). |
624| | pybind11 then couples the lifetime of the parent to the child via a |
625| | reference relationship that ensures that the parent cannot be garbage |
626| | collected while Python is still using the child. More advanced variations |
627| | of this scheme are also possible using combinations of |
628| | :enum:`return_value_policy::reference` and the :class:`keep_alive` call |
629| | policy described next. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200630+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200631
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200632.. warning::
633
634 Code with invalid call policies might access unitialized memory or free
635 data structures multiple times, which can lead to hard-to-debug
636 non-determinism and segmentation faults, hence it is worth spending the
637 time to understand all the different options in the table above.
638
639One important aspect regarding the above policies is that they only apply to
640instances which pybind11 has *not* seen before, in which case the policy
641clarifies essential questions about the return value's lifetime and ownership.
642
643When pybind11 knows the instance already (as identified via its address in
644memory), it will return the existing Python object wrapper rather than creating
645a copy. This means that functions which merely cast a reference (or pointer)
646into a different type don't do what one would expect:
647
648.. code-block:: cpp
649
650 A &func(B &value) { return (A&) value; }
651
652The wrapped version of this function will return the original ``B`` instance.
653To force a cast, the argument should be returned by value.
654
655More common (and equally problematic) are cases where methods (e.g. getters)
656return a pointer or reference to the first attribute of a class.
657
658.. code-block:: cpp
659 :emphasize-lines: 3, 13
660
661 class Example {
662 public:
663 Internal &get_internal() { return internal; }
664 private:
665 Internal internal;
666 };
667
668 PYBIND11_PLUGIN(example) {
669 py::module m("example", "pybind11 example plugin");
670
671 py::class_<Example>(m, "Example")
672 .def(py::init<>())
673 .def("get_internal", &Example::get_internal); /* Note: don't do this! */
674
675 return m.ptr();
676 }
677
678As in the above casting example, the instance and its attribute will be located
679at the same address in memory, which pybind11 will recongnize and return the
680parent instance instead of creating a new Python object that represents the
681attribute. The special :enum:`return_value_policy::reference_internal` policy
682should be used in this case: it disables the same-address optimization and
683ensures that pybind11 returns a reference.
684The following example snippet shows the correct usage:
Wenzel Jakob93296692015-10-13 23:21:54 +0200685
686.. code-block:: cpp
687
688 class Example {
689 public:
690 Internal &get_internal() { return internal; }
691 private:
692 Internal internal;
693 };
694
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200695 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200696 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200697
698 py::class_<Example>(m, "Example")
699 .def(py::init<>())
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200700 .def("get_internal", &Example::get_internal, "Return the internal data",
701 py::return_value_policy::reference_internal);
Wenzel Jakob93296692015-10-13 23:21:54 +0200702
703 return m.ptr();
704 }
705
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200706
nafur717df752016-06-28 18:07:11 +0200707
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200708.. note::
709
710 The next section on :ref:`call_policies` discusses *call policies* that can be
711 specified *in addition* to a return value policy from the list above. Call
712 policies indicate reference relationships that can involve both return values
713 and parameters of functions.
714
715.. note::
716
717 As an alternative to elaborate call policies and lifetime management logic,
718 consider using smart pointers (see the section on :ref:`smart_pointers` for
719 details). Smart pointers can tell whether an object is still referenced from
720 C++ or Python, which generally eliminates the kinds of inconsistencies that
721 can lead to crashes or undefined behavior. For functions returning smart
722 pointers, it is not necessary to specify a return value policy.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100723
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200724.. _call_policies:
725
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100726Additional call policies
727========================
728
729In addition to the above return value policies, further `call policies` can be
730specified to indicate dependencies between parameters. There is currently just
731one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
732argument with index ``Patient`` should be kept alive at least until the
733argument with index ``Nurse`` is freed by the garbage collector; argument
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200734indices start at one, while zero refers to the return value. For methods, index
735one refers to the implicit ``this`` pointer, while regular arguments begin at
736index two. Arbitrarily many call policies can be specified.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100737
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200738Consider the following example: the binding code for a list append operation
739that ties the lifetime of the newly added element to the underlying container
740might be declared as follows:
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100741
742.. code-block:: cpp
743
744 py::class_<List>(m, "List")
745 .def("append", &List::append, py::keep_alive<1, 2>());
746
747.. note::
748
749 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
750 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
751 0) policies from Boost.Python.
752
Wenzel Jakob61587162016-01-18 22:38:52 +0100753.. seealso::
754
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400755 The file :file:`example/example-keep-alive.cpp` contains a complete example
756 that demonstrates using :class:`keep_alive` in more detail.
Wenzel Jakob61587162016-01-18 22:38:52 +0100757
Wenzel Jakob93296692015-10-13 23:21:54 +0200758Implicit type conversions
759=========================
760
761Suppose that instances of two types ``A`` and ``B`` are used in a project, and
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200762that an ``A`` can easily be converted into an instance of type ``B`` (examples of this
Wenzel Jakob93296692015-10-13 23:21:54 +0200763could be a fixed and an arbitrary precision number type).
764
765.. code-block:: cpp
766
767 py::class_<A>(m, "A")
768 /// ... members ...
769
770 py::class_<B>(m, "B")
771 .def(py::init<A>())
772 /// ... members ...
773
774 m.def("func",
775 [](const B &) { /* .... */ }
776 );
777
778To invoke the function ``func`` using a variable ``a`` containing an ``A``
779instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
780will automatically apply an implicit type conversion, which makes it possible
781to directly write ``func(a)``.
782
783In this situation (i.e. where ``B`` has a constructor that converts from
784``A``), the following statement enables similar implicit conversions on the
785Python side:
786
787.. code-block:: cpp
788
789 py::implicitly_convertible<A, B>();
790
Wenzel Jakob3eeea6f2016-06-30 18:10:28 +0200791.. note::
792
793 Implicit conversions from ``A`` to ``B`` only work when ``B`` is a custom
794 data type that is exposed to Python via pybind11.
795
Wenzel Jakobf88af0c2016-06-22 13:52:31 +0200796.. _static_properties:
797
798Static properties
799=================
800
801The section on :ref:`properties` discussed the creation of instance properties
802that are implemented in terms of C++ getters and setters.
803
804Static properties can also be created in a similar way to expose getters and
805setters of static class attributes. It is important to note that the implicit
806``self`` argument also exists in this case and is used to pass the Python
807``type`` subclass instance. This parameter will often not be needed by the C++
808side, and the following example illustrates how to instantiate a lambda getter
809function that ignores it:
810
811.. code-block:: cpp
812
813 py::class_<Foo>(m, "Foo")
814 .def_property_readonly_static("foo", [](py::object /* self */) { return Foo(); });
815
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200816Unique pointers
817===============
818
819Given a class ``Example`` with Python bindings, it's possible to return
820instances wrapped in C++11 unique pointers, like so
821
822.. code-block:: cpp
823
824 std::unique_ptr<Example> create_example() { return std::unique_ptr<Example>(new Example()); }
825
826.. code-block:: cpp
827
828 m.def("create_example", &create_example);
829
830In other words, there is nothing special that needs to be done. While returning
831unique pointers in this way is allowed, it is *illegal* to use them as function
832arguments. For instance, the following function signature cannot be processed
833by pybind11.
834
835.. code-block:: cpp
836
837 void do_something_with_example(std::unique_ptr<Example> ex) { ... }
838
839The above signature would imply that Python needs to give up ownership of an
840object that is passed to this function, which is generally not possible (for
841instance, the object might be referenced elsewhere).
842
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200843.. _smart_pointers:
844
Wenzel Jakob93296692015-10-13 23:21:54 +0200845Smart pointers
846==============
847
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200848This section explains how to pass values that are wrapped in "smart" pointer
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200849types with internal reference counting. For the simpler C++11 unique pointers,
850refer to the previous section.
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200851
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200852The binding generator for classes, :class:`class_`, takes an optional second
Wenzel Jakob93296692015-10-13 23:21:54 +0200853template type, which denotes a special *holder* type that is used to manage
854references to the object. When wrapping a type named ``Type``, the default
855value of this template parameter is ``std::unique_ptr<Type>``, which means that
856the object is deallocated when Python's reference count goes to zero.
857
Wenzel Jakob1853b652015-10-18 15:38:50 +0200858It is possible to switch to other types of reference counting wrappers or smart
859pointers, which is useful in codebases that rely on them. For instance, the
860following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +0200861
862.. code-block:: cpp
863
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100864 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100865
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100866Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +0200867
Wenzel Jakob1853b652015-10-18 15:38:50 +0200868To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100869argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +0200870be declared at the top level before any binding code:
871
872.. code-block:: cpp
873
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200874 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +0200875
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100876.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100877
878 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
879 placeholder name that is used as a template parameter of the second
880 argument. Thus, feel free to use any identifier, but use it consistently on
881 both sides; also, don't use the name of a type that already exists in your
882 codebase.
883
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100884One potential stumbling block when using holder types is that they need to be
885applied consistently. Can you guess what's broken about the following binding
886code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100887
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100888.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100889
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100890 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100891
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100892 class Parent {
893 public:
894 Parent() : child(std::make_shared<Child>()) { }
895 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
896 private:
897 std::shared_ptr<Child> child;
898 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100899
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100900 PYBIND11_PLUGIN(example) {
901 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100902
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100903 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
904
905 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
906 .def(py::init<>())
907 .def("get_child", &Parent::get_child);
908
909 return m.ptr();
910 }
911
912The following Python code will cause undefined behavior (and likely a
913segmentation fault).
914
915.. code-block:: python
916
917 from example import Parent
918 print(Parent().get_child())
919
920The problem is that ``Parent::get_child()`` returns a pointer to an instance of
921``Child``, but the fact that this instance is already managed by
922``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
923pybind11 will create a second independent ``std::shared_ptr<...>`` that also
924claims ownership of the pointer. In the end, the object will be freed **twice**
925since these shared pointers have no way of knowing about each other.
926
927There are two ways to resolve this issue:
928
9291. For types that are managed by a smart pointer class, never use raw pointers
930 in function arguments or return values. In other words: always consistently
931 wrap pointers into their designated holder types (such as
932 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
933 should be modified as follows:
934
935.. code-block:: cpp
936
937 std::shared_ptr<Child> get_child() { return child; }
938
9392. Adjust the definition of ``Child`` by specifying
940 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
941 base class. This adds a small bit of information to ``Child`` that allows
942 pybind11 to realize that there is already an existing
943 ``std::shared_ptr<...>`` and communicate with it. In this case, the
944 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100945
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100946.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
947
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100948.. code-block:: cpp
949
950 class Child : public std::enable_shared_from_this<Child> { };
951
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200952
953Please take a look at the :ref:`macro_notes` before using this feature.
954
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100955.. seealso::
956
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400957 The file :file:`example/example-smart-ptr.cpp` contains a complete example
958 that demonstrates how to work with custom reference-counting holder types
959 in more detail.
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100960
Wenzel Jakob93296692015-10-13 23:21:54 +0200961.. _custom_constructors:
962
963Custom constructors
964===================
965
966The syntax for binding constructors was previously introduced, but it only
967works when a constructor with the given parameters actually exists on the C++
968side. To extend this to more general cases, let's take a look at what actually
969happens under the hood: the following statement
970
971.. code-block:: cpp
972
973 py::class_<Example>(m, "Example")
974 .def(py::init<int>());
975
976is short hand notation for
977
978.. code-block:: cpp
979
980 py::class_<Example>(m, "Example")
981 .def("__init__",
982 [](Example &instance, int arg) {
983 new (&instance) Example(arg);
984 }
985 );
986
987In other words, :func:`init` creates an anonymous function that invokes an
988in-place constructor. Memory allocation etc. is already take care of beforehand
989within pybind11.
990
Pim Schellart5a7d17f2016-06-17 17:35:59 -0400991.. _catching_and_throwing_exceptions:
992
Wenzel Jakob93296692015-10-13 23:21:54 +0200993Catching and throwing exceptions
994================================
995
996When C++ code invoked from Python throws an ``std::exception``, it is
997automatically converted into a Python ``Exception``. pybind11 defines multiple
998special exception classes that will map to different types of Python
999exceptions:
1000
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001001.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
1002
Wenzel Jakob978e3762016-04-07 18:00:41 +02001003+--------------------------------------+------------------------------+
1004| C++ exception type | Python exception type |
1005+======================================+==============================+
1006| :class:`std::exception` | ``RuntimeError`` |
1007+--------------------------------------+------------------------------+
1008| :class:`std::bad_alloc` | ``MemoryError`` |
1009+--------------------------------------+------------------------------+
1010| :class:`std::domain_error` | ``ValueError`` |
1011+--------------------------------------+------------------------------+
1012| :class:`std::invalid_argument` | ``ValueError`` |
1013+--------------------------------------+------------------------------+
1014| :class:`std::length_error` | ``ValueError`` |
1015+--------------------------------------+------------------------------+
1016| :class:`std::out_of_range` | ``ValueError`` |
1017+--------------------------------------+------------------------------+
1018| :class:`std::range_error` | ``ValueError`` |
1019+--------------------------------------+------------------------------+
1020| :class:`pybind11::stop_iteration` | ``StopIteration`` (used to |
1021| | implement custom iterators) |
1022+--------------------------------------+------------------------------+
1023| :class:`pybind11::index_error` | ``IndexError`` (used to |
1024| | indicate out of bounds |
1025| | accesses in ``__getitem__``, |
1026| | ``__setitem__``, etc.) |
1027+--------------------------------------+------------------------------+
Sergey Lyskova95bde12016-05-08 19:31:55 -04001028| :class:`pybind11::value_error` | ``ValueError`` (used to |
1029| | indicate wrong value passed |
1030| | in ``container.remove(...)`` |
1031+--------------------------------------+------------------------------+
Wenzel Jakob978e3762016-04-07 18:00:41 +02001032| :class:`pybind11::error_already_set` | Indicates that the Python |
1033| | exception flag has already |
1034| | been initialized |
1035+--------------------------------------+------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +02001036
1037When a Python function invoked from C++ throws an exception, it is converted
1038into a C++ exception of type :class:`error_already_set` whose string payload
1039contains a textual summary.
1040
1041There is also a special exception :class:`cast_error` that is thrown by
1042:func:`handle::call` when the input arguments cannot be converted to Python
1043objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001044
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001045Registering custom exception translators
1046========================================
1047
1048If the default exception conversion policy described
1049:ref:`above <catching_and_throwing_exceptions>`
1050is insufficient, pybind11 also provides support for registering custom
1051exception translators.
1052
1053The function ``register_exception_translator(translator)`` takes a stateless
1054callable (e.g. a function pointer or a lambda function without captured
1055variables) with the following call signature: ``void(std::exception_ptr)``.
1056
1057When a C++ exception is thrown, registered exception translators are tried
1058in reverse order of registration (i.e. the last registered translator gets
1059a first shot at handling the exception).
1060
1061Inside the translator, ``std::rethrow_exception`` should be used within
1062a try block to re-throw the exception. A catch clause can then use
1063``PyErr_SetString`` to set a Python exception as demonstrated
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001064in :file:`example-custom-exceptions.cpp``.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001065
1066This example also demonstrates how to create custom exception types
1067with ``py::exception``.
1068
1069The following example demonstrates this for a hypothetical exception class
1070``MyCustomException``:
1071
1072.. code-block:: cpp
1073
1074 py::register_exception_translator([](std::exception_ptr p) {
1075 try {
1076 if (p) std::rethrow_exception(p);
1077 } catch (const MyCustomException &e) {
1078 PyErr_SetString(PyExc_RuntimeError, e.what());
1079 }
1080 });
1081
1082Multiple exceptions can be handled by a single translator. If the exception is
1083not caught by the current translator, the previously registered one gets a
1084chance.
1085
1086If none of the registered exception translators is able to handle the
1087exception, it is handled by the default converter as described in the previous
1088section.
1089
1090.. note::
1091
1092 You must either call ``PyErr_SetString`` for every exception caught in a
1093 custom exception translator. Failure to do so will cause Python to crash
1094 with ``SystemError: error return without exception set``.
1095
1096 Exceptions that you do not plan to handle should simply not be caught.
1097
1098 You may also choose to explicity (re-)throw the exception to delegate it to
1099 the other existing exception translators.
1100
1101 The ``py::exception`` wrapper for creating custom exceptions cannot (yet)
1102 be used as a ``py::base``.
1103
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001104.. _opaque:
1105
1106Treating STL data structures as opaque objects
1107==============================================
1108
1109pybind11 heavily relies on a template matching mechanism to convert parameters
1110and return values that are constructed from STL data types such as vectors,
1111linked lists, hash tables, etc. This even works in a recursive manner, for
1112instance to deal with lists of hash maps of pairs of elementary and custom
1113types, etc.
1114
1115However, a fundamental limitation of this approach is that internal conversions
1116between Python and C++ types involve a copy operation that prevents
1117pass-by-reference semantics. What does this mean?
1118
1119Suppose we bind the following function
1120
1121.. code-block:: cpp
1122
1123 void append_1(std::vector<int> &v) {
1124 v.push_back(1);
1125 }
1126
1127and call it from Python, the following happens:
1128
Wenzel Jakob99279f72016-06-03 11:19:29 +02001129.. code-block:: pycon
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001130
1131 >>> v = [5, 6]
1132 >>> append_1(v)
1133 >>> print(v)
1134 [5, 6]
1135
1136As you can see, when passing STL data structures by reference, modifications
1137are not propagated back the Python side. A similar situation arises when
1138exposing STL data structures using the ``def_readwrite`` or ``def_readonly``
1139functions:
1140
1141.. code-block:: cpp
1142
1143 /* ... definition ... */
1144
1145 class MyClass {
1146 std::vector<int> contents;
1147 };
1148
1149 /* ... binding code ... */
1150
1151 py::class_<MyClass>(m, "MyClass")
1152 .def(py::init<>)
1153 .def_readwrite("contents", &MyClass::contents);
1154
1155In this case, properties can be read and written in their entirety. However, an
1156``append`` operaton involving such a list type has no effect:
1157
Wenzel Jakob99279f72016-06-03 11:19:29 +02001158.. code-block:: pycon
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001159
1160 >>> m = MyClass()
1161 >>> m.contents = [5, 6]
1162 >>> print(m.contents)
1163 [5, 6]
1164 >>> m.contents.append(7)
1165 >>> print(m.contents)
1166 [5, 6]
1167
1168To deal with both of the above situations, pybind11 provides a macro named
1169``PYBIND11_MAKE_OPAQUE(T)`` that disables the template-based conversion
1170machinery of types, thus rendering them *opaque*. The contents of opaque
1171objects are never inspected or extracted, hence they can be passed by
1172reference. For instance, to turn ``std::vector<int>`` into an opaque type, add
1173the declaration
1174
1175.. code-block:: cpp
1176
1177 PYBIND11_MAKE_OPAQUE(std::vector<int>);
1178
1179before any binding code (e.g. invocations to ``class_::def()``, etc.). This
1180macro must be specified at the top level, since instantiates a partial template
1181overload. If your binding code consists of multiple compilation units, it must
1182be present in every file preceding any usage of ``std::vector<int>``. Opaque
1183types must also have a corresponding ``class_`` declaration to associate them
1184with a name in Python, and to define a set of available operations:
1185
1186.. code-block:: cpp
1187
1188 py::class_<std::vector<int>>(m, "IntVector")
1189 .def(py::init<>())
1190 .def("clear", &std::vector<int>::clear)
1191 .def("pop_back", &std::vector<int>::pop_back)
1192 .def("__len__", [](const std::vector<int> &v) { return v.size(); })
1193 .def("__iter__", [](std::vector<int> &v) {
1194 return py::make_iterator(v.begin(), v.end());
1195 }, py::keep_alive<0, 1>()) /* Keep vector alive while iterator is used */
1196 // ....
1197
Wenzel Jakob9bb97c12016-06-03 11:19:41 +02001198Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001199
1200.. seealso::
1201
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001202 The file :file:`example/example-opaque-types.cpp` contains a complete
1203 example that demonstrates how to create and expose opaque types using
1204 pybind11 in more detail.
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001205
1206.. _eigen:
1207
1208Transparent conversion of dense and sparse Eigen data types
1209===========================================================
1210
1211Eigen [#f1]_ is C++ header-based library for dense and sparse linear algebra. Due to
1212its popularity and widespread adoption, pybind11 provides transparent
1213conversion support between Eigen and Scientific Python linear algebra data types.
1214
1215Specifically, when including the optional header file :file:`pybind11/eigen.h`,
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001216pybind11 will automatically and transparently convert
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001217
12181. Static and dynamic Eigen dense vectors and matrices to instances of
1219 ``numpy.ndarray`` (and vice versa).
1220
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012212. Returned matrix expressions such as blocks (including columns or rows) and
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001222 diagonals will be converted to ``numpy.ndarray`` of the expression
1223 values.
1224
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012253. Returned matrix-like objects such as Eigen::DiagonalMatrix or
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001226 Eigen::SelfAdjointView will be converted to ``numpy.ndarray`` containing the
1227 expressed value.
1228
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012294. Eigen sparse vectors and matrices to instances of
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001230 ``scipy.sparse.csr_matrix``/``scipy.sparse.csc_matrix`` (and vice versa).
1231
1232This makes it possible to bind most kinds of functions that rely on these types.
1233One major caveat are functions that take Eigen matrices *by reference* and modify
1234them somehow, in which case the information won't be propagated to the caller.
1235
1236.. code-block:: cpp
1237
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001238 /* The Python bindings of these functions won't replicate
1239 the intended effect of modifying the function arguments */
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001240 void scale_by_2(Eigen::Vector3f &v) {
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001241 v *= 2;
1242 }
1243 void scale_by_2(Eigen::Ref<Eigen::MatrixXd> &v) {
1244 v *= 2;
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001245 }
1246
1247To see why this is, refer to the section on :ref:`opaque` (although that
1248section specifically covers STL data types, the underlying issue is the same).
1249The next two sections discuss an efficient alternative for exposing the
1250underlying native Eigen types as opaque objects in a way that still integrates
1251with NumPy and SciPy.
1252
1253.. [#f1] http://eigen.tuxfamily.org
1254
1255.. seealso::
1256
1257 The file :file:`example/eigen.cpp` contains a complete example that
1258 shows how to pass Eigen sparse and dense data types in more detail.
1259
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001260Buffer protocol
1261===============
1262
1263Python supports an extremely general and convenient approach for exchanging
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001264data between plugin libraries. Types can expose a buffer view [#f2]_, which
1265provides fast direct access to the raw internal data representation. Suppose we
1266want to bind the following simplistic Matrix class:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001267
1268.. code-block:: cpp
1269
1270 class Matrix {
1271 public:
1272 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
1273 m_data = new float[rows*cols];
1274 }
1275 float *data() { return m_data; }
1276 size_t rows() const { return m_rows; }
1277 size_t cols() const { return m_cols; }
1278 private:
1279 size_t m_rows, m_cols;
1280 float *m_data;
1281 };
1282
1283The following binding code exposes the ``Matrix`` contents as a buffer object,
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001284making it possible to cast Matrices into NumPy arrays. It is even possible to
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001285completely avoid copy operations with Python expressions like
1286``np.array(matrix_instance, copy = False)``.
1287
1288.. code-block:: cpp
1289
1290 py::class_<Matrix>(m, "Matrix")
1291 .def_buffer([](Matrix &m) -> py::buffer_info {
1292 return py::buffer_info(
Wenzel Jakob876eeab2016-05-04 22:22:48 +02001293 m.data(), /* Pointer to buffer */
1294 sizeof(float), /* Size of one scalar */
1295 py::format_descriptor<float>::value, /* Python struct-style format descriptor */
1296 2, /* Number of dimensions */
1297 { m.rows(), m.cols() }, /* Buffer dimensions */
1298 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001299 sizeof(float) }
1300 );
1301 });
1302
1303The snippet above binds a lambda function, which can create ``py::buffer_info``
1304description records on demand describing a given matrix. The contents of
1305``py::buffer_info`` mirror the Python buffer protocol specification.
1306
1307.. code-block:: cpp
1308
1309 struct buffer_info {
1310 void *ptr;
1311 size_t itemsize;
1312 std::string format;
1313 int ndim;
1314 std::vector<size_t> shape;
1315 std::vector<size_t> strides;
1316 };
1317
1318To create a C++ function that can take a Python buffer object as an argument,
1319simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
1320in a great variety of configurations, hence some safety checks are usually
1321necessary in the function body. Below, you can see an basic example on how to
1322define a custom constructor for the Eigen double precision matrix
1323(``Eigen::MatrixXd``) type, which supports initialization from compatible
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001324buffer objects (e.g. a NumPy matrix).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001325
1326.. code-block:: cpp
1327
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001328 /* Bind MatrixXd (or some other Eigen type) to Python */
1329 typedef Eigen::MatrixXd Matrix;
1330
1331 typedef Matrix::Scalar Scalar;
1332 constexpr bool rowMajor = Matrix::Flags & Eigen::RowMajorBit;
1333
1334 py::class_<Matrix>(m, "Matrix")
1335 .def("__init__", [](Matrix &m, py::buffer b) {
Wenzel Jakobe7628532016-05-05 10:04:44 +02001336 typedef Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic> Strides;
Wenzel Jakobe7628532016-05-05 10:04:44 +02001337
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001338 /* Request a buffer descriptor from Python */
1339 py::buffer_info info = b.request();
1340
1341 /* Some sanity checks ... */
Wenzel Jakobe7628532016-05-05 10:04:44 +02001342 if (info.format != py::format_descriptor<Scalar>::value)
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001343 throw std::runtime_error("Incompatible format: expected a double array!");
1344
1345 if (info.ndim != 2)
1346 throw std::runtime_error("Incompatible buffer dimension!");
1347
Wenzel Jakobe7628532016-05-05 10:04:44 +02001348 auto strides = Strides(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001349 info.strides[rowMajor ? 0 : 1] / sizeof(Scalar),
1350 info.strides[rowMajor ? 1 : 0] / sizeof(Scalar));
Wenzel Jakobe7628532016-05-05 10:04:44 +02001351
1352 auto map = Eigen::Map<Matrix, 0, Strides>(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001353 static_cat<Scalar *>(info.ptr), info.shape[0], info.shape[1], strides);
Wenzel Jakobe7628532016-05-05 10:04:44 +02001354
1355 new (&m) Matrix(map);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001356 });
1357
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001358For reference, the ``def_buffer()`` call for this Eigen data type should look
1359as follows:
1360
1361.. code-block:: cpp
1362
1363 .def_buffer([](Matrix &m) -> py::buffer_info {
1364 return py::buffer_info(
1365 m.data(), /* Pointer to buffer */
1366 sizeof(Scalar), /* Size of one scalar */
1367 /* Python struct-style format descriptor */
1368 py::format_descriptor<Scalar>::value,
1369 /* Number of dimensions */
1370 2,
1371 /* Buffer dimensions */
1372 { (size_t) m.rows(),
1373 (size_t) m.cols() },
1374 /* Strides (in bytes) for each index */
1375 { sizeof(Scalar) * (rowMajor ? m.cols() : 1),
1376 sizeof(Scalar) * (rowMajor ? 1 : m.rows()) }
1377 );
1378 })
1379
1380For a much easier approach of binding Eigen types (although with some
1381limitations), refer to the section on :ref:`eigen`.
1382
Wenzel Jakob93296692015-10-13 23:21:54 +02001383.. seealso::
1384
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001385 The file :file:`example/example-buffers.cpp` contains a complete example
1386 that demonstrates using the buffer protocol with pybind11 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +02001387
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001388.. [#f2] http://docs.python.org/3/c-api/buffer.html
Wenzel Jakob978e3762016-04-07 18:00:41 +02001389
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001390NumPy support
1391=============
1392
1393By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
1394restrict the function so that it only accepts NumPy arrays (rather than any
Wenzel Jakob978e3762016-04-07 18:00:41 +02001395type of Python object satisfying the buffer protocol).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001396
1397In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +02001398array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001399template. For instance, the following function requires the argument to be a
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001400NumPy array containing double precision values.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001401
1402.. code-block:: cpp
1403
Wenzel Jakob93296692015-10-13 23:21:54 +02001404 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001405
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001406When it is invoked with a different type (e.g. an integer or a list of
1407integers), the binding code will attempt to cast the input into a NumPy array
1408of the requested type. Note that this feature requires the
1409:file:``pybind11/numpy.h`` header to be included.
1410
1411Data in NumPy arrays is not guaranteed to packed in a dense manner;
1412furthermore, entries can be separated by arbitrary column and row strides.
1413Sometimes, it can be useful to require a function to only accept dense arrays
1414using either the C (row-major) or Fortran (column-major) ordering. This can be
1415accomplished via a second template argument with values ``py::array::c_style``
1416or ``py::array::f_style``.
1417
1418.. code-block:: cpp
1419
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001420 void f(py::array_t<double, py::array::c_style | py::array::forcecast> array);
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001421
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001422The ``py::array::forcecast`` argument is the default value of the second
1423template paramenter, and it ensures that non-conforming arguments are converted
1424into an array satisfying the specified requirements instead of trying the next
1425function overload.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001426
1427Vectorizing functions
1428=====================
1429
1430Suppose we want to bind a function with the following signature to Python so
1431that it can process arbitrary NumPy array arguments (vectors, matrices, general
1432N-D arrays) in addition to its normal arguments:
1433
1434.. code-block:: cpp
1435
1436 double my_func(int x, float y, double z);
1437
Wenzel Jakob8f4eb002015-10-15 18:13:33 +02001438After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001439
1440.. code-block:: cpp
1441
1442 m.def("vectorized_func", py::vectorize(my_func));
1443
1444Invoking the function like below causes 4 calls to be made to ``my_func`` with
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001445each of the array elements. The significant advantage of this compared to
Wenzel Jakob978e3762016-04-07 18:00:41 +02001446solutions like ``numpy.vectorize()`` is that the loop over the elements runs
1447entirely on the C++ side and can be crunched down into a tight, optimized loop
1448by the compiler. The result is returned as a NumPy array of type
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001449``numpy.dtype.float64``.
1450
Wenzel Jakob99279f72016-06-03 11:19:29 +02001451.. code-block:: pycon
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001452
1453 >>> x = np.array([[1, 3],[5, 7]])
1454 >>> y = np.array([[2, 4],[6, 8]])
1455 >>> z = 3
1456 >>> result = vectorized_func(x, y, z)
1457
1458The scalar argument ``z`` is transparently replicated 4 times. The input
1459arrays ``x`` and ``y`` are automatically converted into the right types (they
1460are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
1461``numpy.dtype.float32``, respectively)
1462
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001463Sometimes we might want to explicitly exclude an argument from the vectorization
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001464because it makes little sense to wrap it in a NumPy array. For instance,
1465suppose the function signature was
1466
1467.. code-block:: cpp
1468
1469 double my_func(int x, float y, my_custom_type *z);
1470
1471This can be done with a stateful Lambda closure:
1472
1473.. code-block:: cpp
1474
1475 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
1476 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +02001477 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001478 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
1479 return py::vectorize(stateful_closure)(x, y);
1480 }
1481 );
1482
Wenzel Jakob61587162016-01-18 22:38:52 +01001483In cases where the computation is too complicated to be reduced to
1484``vectorize``, it will be necessary to create and access the buffer contents
1485manually. The following snippet contains a complete example that shows how this
1486works (the code is somewhat contrived, since it could have been done more
1487simply using ``vectorize``).
1488
1489.. code-block:: cpp
1490
1491 #include <pybind11/pybind11.h>
1492 #include <pybind11/numpy.h>
1493
1494 namespace py = pybind11;
1495
1496 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
1497 auto buf1 = input1.request(), buf2 = input2.request();
1498
1499 if (buf1.ndim != 1 || buf2.ndim != 1)
1500 throw std::runtime_error("Number of dimensions must be one");
1501
1502 if (buf1.shape[0] != buf2.shape[0])
1503 throw std::runtime_error("Input shapes must match");
1504
1505 auto result = py::array(py::buffer_info(
1506 nullptr, /* Pointer to data (nullptr -> ask NumPy to allocate!) */
1507 sizeof(double), /* Size of one item */
Wenzel Jakobf38f3592016-07-19 17:48:42 +02001508 py::format_descriptor<double>::value, /* Buffer format */
Wenzel Jakob61587162016-01-18 22:38:52 +01001509 buf1.ndim, /* How many dimensions? */
1510 { buf1.shape[0] }, /* Number of elements for each dimension */
1511 { sizeof(double) } /* Strides for each dimension */
1512 ));
1513
1514 auto buf3 = result.request();
1515
1516 double *ptr1 = (double *) buf1.ptr,
1517 *ptr2 = (double *) buf2.ptr,
1518 *ptr3 = (double *) buf3.ptr;
1519
1520 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
1521 ptr3[idx] = ptr1[idx] + ptr2[idx];
1522
1523 return result;
1524 }
1525
1526 PYBIND11_PLUGIN(test) {
1527 py::module m("test");
1528 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
1529 return m.ptr();
1530 }
1531
Wenzel Jakob93296692015-10-13 23:21:54 +02001532.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001533
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001534 The file :file:`example/example-numpy-vectorize.cpp` contains a complete
1535 example that demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001536
Wenzel Jakob93296692015-10-13 23:21:54 +02001537Functions taking Python objects as arguments
1538============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001539
Wenzel Jakob93296692015-10-13 23:21:54 +02001540pybind11 exposes all major Python types using thin C++ wrapper classes. These
1541wrapper classes can also be used as parameters of functions in bindings, which
1542makes it possible to directly work with native Python types on the C++ side.
1543For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001544
Wenzel Jakob93296692015-10-13 23:21:54 +02001545.. code-block:: cpp
1546
1547 void print_dict(py::dict dict) {
1548 /* Easily interact with Python types */
1549 for (auto item : dict)
1550 std::cout << "key=" << item.first << ", "
1551 << "value=" << item.second << std::endl;
1552 }
1553
1554Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +01001555:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001556:class:`list`, :class:`dict`, :class:`slice`, :class:`none`, :class:`capsule`,
1557:class:`iterable`, :class:`iterator`, :class:`function`, :class:`buffer`,
1558:class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +02001559
Wenzel Jakob436b7312015-10-20 01:04:30 +02001560In this kind of mixed code, it is often necessary to convert arbitrary C++
1561types to Python, which can be done using :func:`cast`:
1562
1563.. code-block:: cpp
1564
1565 MyClass *cls = ..;
1566 py::object obj = py::cast(cls);
1567
1568The reverse direction uses the following syntax:
1569
1570.. code-block:: cpp
1571
1572 py::object obj = ...;
1573 MyClass *cls = obj.cast<MyClass *>();
1574
1575When conversion fails, both directions throw the exception :class:`cast_error`.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001576It is also possible to call python functions via ``operator()``.
1577
1578.. code-block:: cpp
1579
1580 py::function f = <...>;
1581 py::object result_py = f(1234, "hello", some_instance);
1582 MyClass &result = result_py.cast<MyClass>();
1583
1584The special ``f(*args)`` and ``f(*args, **kwargs)`` syntax is also supported to
1585supply arbitrary argument and keyword lists, although these cannot be mixed
1586with other parameters.
1587
1588.. code-block:: cpp
1589
1590 py::function f = <...>;
1591 py::tuple args = py::make_tuple(1234);
1592 py::dict kwargs;
1593 kwargs["y"] = py::cast(5678);
1594 py::object result = f(*args, **kwargs);
Wenzel Jakob436b7312015-10-20 01:04:30 +02001595
Wenzel Jakob93296692015-10-13 23:21:54 +02001596.. seealso::
1597
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001598 The file :file:`example/example-python-types.cpp` contains a complete
1599 example that demonstrates passing native Python types in more detail. The
1600 file :file:`example/example-arg-keywords-and-defaults.cpp` discusses usage
1601 of ``args`` and ``kwargs``.
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001602
1603Default arguments revisited
1604===========================
1605
1606The section on :ref:`default_args` previously discussed basic usage of default
1607arguments using pybind11. One noteworthy aspect of their implementation is that
1608default arguments are converted to Python objects right at declaration time.
1609Consider the following example:
1610
1611.. code-block:: cpp
1612
1613 py::class_<MyClass>("MyClass")
1614 .def("myFunction", py::arg("arg") = SomeType(123));
1615
1616In this case, pybind11 must already be set up to deal with values of the type
1617``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
1618exception will be thrown.
1619
1620Another aspect worth highlighting is that the "preview" of the default argument
1621in the function signature is generated using the object's ``__repr__`` method.
1622If not available, the signature may not be very helpful, e.g.:
1623
Wenzel Jakob99279f72016-06-03 11:19:29 +02001624.. code-block:: pycon
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001625
1626 FUNCTIONS
1627 ...
1628 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +01001629 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001630 ...
1631
1632The first way of addressing this is by defining ``SomeType.__repr__``.
1633Alternatively, it is possible to specify the human-readable preview of the
1634default argument manually using the ``arg_t`` notation:
1635
1636.. code-block:: cpp
1637
1638 py::class_<MyClass>("MyClass")
1639 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
1640
Wenzel Jakobc769fce2016-03-03 12:03:30 +01001641Sometimes it may be necessary to pass a null pointer value as a default
1642argument. In this case, remember to cast it to the underlying type in question,
1643like so:
1644
1645.. code-block:: cpp
1646
1647 py::class_<MyClass>("MyClass")
1648 .def("myFunction", py::arg("arg") = (SomeType *) nullptr);
1649
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001650Binding functions that accept arbitrary numbers of arguments and keywords arguments
1651===================================================================================
1652
1653Python provides a useful mechanism to define functions that accept arbitrary
1654numbers of arguments and keyword arguments:
1655
1656.. code-block:: cpp
1657
1658 def generic(*args, **kwargs):
1659 # .. do something with args and kwargs
1660
1661Such functions can also be created using pybind11:
1662
1663.. code-block:: cpp
1664
1665 void generic(py::args args, py::kwargs kwargs) {
1666 /// .. do something with args
1667 if (kwargs)
1668 /// .. do something with kwargs
1669 }
1670
1671 /// Binding code
1672 m.def("generic", &generic);
1673
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001674(See ``example/example-arg-keywords-and-defaults.cpp``). The class ``py::args``
1675derives from ``py::list`` and ``py::kwargs`` derives from ``py::dict`` Note
1676that the ``kwargs`` argument is invalid if no keyword arguments were actually
1677provided. Please refer to the other examples for details on how to iterate
1678over these, and on how to cast their entries into C++ objects.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001679
Wenzel Jakob3764e282016-08-01 23:34:48 +02001680.. warning::
1681
1682 Unlike Python, pybind11 does not allow combining normal parameters with the
1683 ``args`` / ``kwargs`` special parameters.
1684
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001685Partitioning code over multiple extension modules
1686=================================================
1687
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001688It's straightforward to split binding code over multiple extension modules,
1689while referencing types that are declared elsewhere. Everything "just" works
1690without any special precautions. One exception to this rule occurs when
1691extending a type declared in another extension module. Recall the basic example
1692from Section :ref:`inheritance`.
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001693
1694.. code-block:: cpp
1695
1696 py::class_<Pet> pet(m, "Pet");
1697 pet.def(py::init<const std::string &>())
1698 .def_readwrite("name", &Pet::name);
1699
1700 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1701 .def(py::init<const std::string &>())
1702 .def("bark", &Dog::bark);
1703
1704Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1705whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1706course that the variable ``pet`` is not available anymore though it is needed
1707to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1708However, it can be acquired as follows:
1709
1710.. code-block:: cpp
1711
1712 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1713
1714 py::class_<Dog>(m, "Dog", pet)
1715 .def(py::init<const std::string &>())
1716 .def("bark", &Dog::bark);
1717
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001718Alternatively, we can rely on the ``base`` tag, which performs an automated
1719lookup of the corresponding Python type. However, this also requires invoking
1720the ``import`` function once to ensure that the pybind11 binding code of the
1721module ``basic`` has been executed.
1722
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001723.. code-block:: cpp
1724
1725 py::module::import("basic");
1726
1727 py::class_<Dog>(m, "Dog", py::base<Pet>())
1728 .def(py::init<const std::string &>())
1729 .def("bark", &Dog::bark);
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001730
Wenzel Jakob978e3762016-04-07 18:00:41 +02001731Naturally, both methods will fail when there are cyclic dependencies.
1732
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001733Note that compiling code which has its default symbol visibility set to
1734*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
1735ability to access types defined in another extension module. Workarounds
1736include changing the global symbol visibility (not recommended, because it will
1737lead unnecessarily large binaries) or manually exporting types that are
1738accessed by multiple extension modules:
1739
1740.. code-block:: cpp
1741
1742 #ifdef _WIN32
1743 # define EXPORT_TYPE __declspec(dllexport)
1744 #else
1745 # define EXPORT_TYPE __attribute__ ((visibility("default")))
1746 #endif
1747
1748 class EXPORT_TYPE Dog : public Animal {
1749 ...
1750 };
1751
1752
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001753Pickling support
1754================
1755
1756Python's ``pickle`` module provides a powerful facility to serialize and
1757de-serialize a Python object graph into a binary data stream. To pickle and
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02001758unpickle C++ classes using pybind11, two additional functions must be provided.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001759Suppose the class in question has the following signature:
1760
1761.. code-block:: cpp
1762
1763 class Pickleable {
1764 public:
1765 Pickleable(const std::string &value) : m_value(value) { }
1766 const std::string &value() const { return m_value; }
1767
1768 void setExtra(int extra) { m_extra = extra; }
1769 int extra() const { return m_extra; }
1770 private:
1771 std::string m_value;
1772 int m_extra = 0;
1773 };
1774
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001775The binding code including the requisite ``__setstate__`` and ``__getstate__`` methods [#f3]_
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001776looks as follows:
1777
1778.. code-block:: cpp
1779
1780 py::class_<Pickleable>(m, "Pickleable")
1781 .def(py::init<std::string>())
1782 .def("value", &Pickleable::value)
1783 .def("extra", &Pickleable::extra)
1784 .def("setExtra", &Pickleable::setExtra)
1785 .def("__getstate__", [](const Pickleable &p) {
1786 /* Return a tuple that fully encodes the state of the object */
1787 return py::make_tuple(p.value(), p.extra());
1788 })
1789 .def("__setstate__", [](Pickleable &p, py::tuple t) {
1790 if (t.size() != 2)
1791 throw std::runtime_error("Invalid state!");
1792
Wenzel Jakobd40885a2016-04-13 13:30:05 +02001793 /* Invoke the in-place constructor. Note that this is needed even
1794 when the object just has a trivial default constructor */
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001795 new (&p) Pickleable(t[0].cast<std::string>());
1796
1797 /* Assign any additional state */
1798 p.setExtra(t[1].cast<int>());
1799 });
1800
1801An instance can now be pickled as follows:
1802
1803.. code-block:: python
1804
1805 try:
1806 import cPickle as pickle # Use cPickle on Python 2.7
1807 except ImportError:
1808 import pickle
1809
1810 p = Pickleable("test_value")
1811 p.setExtra(15)
Wenzel Jakob81e09752016-04-30 23:13:03 +02001812 data = pickle.dumps(p, 2)
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001813
Wenzel Jakob81e09752016-04-30 23:13:03 +02001814Note that only the cPickle module is supported on Python 2.7. The second
1815argument to ``dumps`` is also crucial: it selects the pickle protocol version
18162, since the older version 1 is not supported. Newer versions are also fine—for
1817instance, specify ``-1`` to always use the latest available version. Beware:
1818failure to follow these instructions will cause important pybind11 memory
1819allocation routines to be skipped during unpickling, which will likely lead to
1820memory corruption and/or segmentation faults.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001821
1822.. seealso::
1823
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001824 The file :file:`example/example-pickling.cpp` contains a complete example
1825 that demonstrates how to pickle and unpickle types using pybind11 in more
1826 detail.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001827
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001828.. [#f3] http://docs.python.org/3/library/pickle.html#pickling-class-instances
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001829
1830Generating documentation using Sphinx
1831=====================================
1832
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001833Sphinx [#f4]_ has the ability to inspect the signatures and documentation
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001834strings in pybind11-based extension modules to automatically generate beautiful
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001835documentation in a variety formats. The python_example repository [#f5]_ contains a
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001836simple example repository which uses this approach.
1837
1838There are two potential gotchas when using this approach: first, make sure that
1839the resulting strings do not contain any :kbd:`TAB` characters, which break the
1840docstring parsing routines. You may want to use C++11 raw string literals,
1841which are convenient for multi-line comments. Conveniently, any excess
1842indentation will be automatically be removed by Sphinx. However, for this to
1843work, it is important that all lines are indented consistently, i.e.:
1844
1845.. code-block:: cpp
1846
1847 // ok
1848 m.def("foo", &foo, R"mydelimiter(
1849 The foo function
1850
1851 Parameters
1852 ----------
1853 )mydelimiter");
1854
1855 // *not ok*
1856 m.def("foo", &foo, R"mydelimiter(The foo function
1857
1858 Parameters
1859 ----------
1860 )mydelimiter");
1861
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001862.. [#f4] http://www.sphinx-doc.org
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001863.. [#f5] http://github.com/pybind/python_example
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001864
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001865Evaluating Python expressions from strings and files
1866====================================================
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001867
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001868pybind11 provides the :func:`eval` and :func:`eval_file` functions to evaluate
1869Python expressions and statements. The following example illustrates how they
1870can be used.
1871
1872Both functions accept a template parameter that describes how the argument
1873should be interpreted. Possible choices include ``eval_expr`` (isolated
1874expression), ``eval_single_statement`` (a single statement, return value is
1875always ``none``), and ``eval_statements`` (sequence of statements, return value
1876is always ``none``).
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001877
1878.. code-block:: cpp
1879
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001880 // At beginning of file
1881 #include <pybind11/eval.h>
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001882
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001883 ...
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001884
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001885 // Evaluate in scope of main module
1886 py::object scope = py::module::import("__main__").attr("__dict__");
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001887
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001888 // Evaluate an isolated expression
1889 int result = py::eval("my_variable + 10", scope).cast<int>();
1890
1891 // Evaluate a sequence of statements
1892 py::eval<py::eval_statements>(
1893 "print('Hello')\n"
1894 "print('world!');",
1895 scope);
1896
1897 // Evaluate the statements in an separate Python file on disk
1898 py::eval_file("script.py", scope);
1899