blob: 47595f63fe70f206cb57f364020d91a2edb8f95e [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;
Wenzel Jakob382484a2016-09-10 15:28:37 +090093 }, py::is_operator())
Wenzel Jakob93296692015-10-13 23:21:54 +020094
95This can be useful for exposing additional operators that don't exist on the
Wenzel Jakob382484a2016-09-10 15:28:37 +090096C++ side, or to perform other types of customization. The ``py::is_operator``
97flag marker is needed to inform pybind11 that this is an operator, which
98returns ``NotImplemented`` when invoked with incompatible arguments rather than
99throwing a type error.
Wenzel Jakob93296692015-10-13 23:21:54 +0200100
101.. note::
102
103 To use the more convenient ``py::self`` notation, the additional
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200104 header file :file:`pybind11/operators.h` must be included.
Wenzel Jakob93296692015-10-13 23:21:54 +0200105
106.. seealso::
107
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200108 The file :file:`tests/test_operator_overloading.cpp` contains a
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400109 complete example that demonstrates how to work with overloaded operators in
110 more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200111
112Callbacks and passing anonymous functions
113=========================================
114
115The C++11 standard brought lambda functions and the generic polymorphic
116function wrapper ``std::function<>`` to the C++ programming language, which
117enable powerful new ways of working with functions. Lambda functions come in
118two flavors: stateless lambda function resemble classic function pointers that
119link to an anonymous piece of code, while stateful lambda functions
120additionally depend on captured variables that are stored in an anonymous
121*lambda closure object*.
122
123Here is a simple example of a C++ function that takes an arbitrary function
124(stateful or stateless) with signature ``int -> int`` as an argument and runs
125it with the value 10.
126
127.. code-block:: cpp
128
129 int func_arg(const std::function<int(int)> &f) {
130 return f(10);
131 }
132
133The example below is more involved: it takes a function of signature ``int -> int``
134and returns another function of the same kind. The return value is a stateful
135lambda function, which stores the value ``f`` in the capture object and adds 1 to
136its return value upon execution.
137
138.. code-block:: cpp
139
140 std::function<int(int)> func_ret(const std::function<int(int)> &f) {
141 return [f](int i) {
142 return f(i) + 1;
143 };
144 }
145
Brad Harmon835fc062016-06-16 13:19:15 -0500146This example demonstrates using python named parameters in C++ callbacks which
147requires using ``py::cpp_function`` as a wrapper. Usage is similar to defining
148methods of classes:
149
150.. code-block:: cpp
151
152 py::cpp_function func_cpp() {
153 return py::cpp_function([](int i) { return i+1; },
154 py::arg("number"));
155 }
156
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200157After including the extra header file :file:`pybind11/functional.h`, it is almost
Brad Harmon835fc062016-06-16 13:19:15 -0500158trivial to generate binding code for all of these functions.
Wenzel Jakob93296692015-10-13 23:21:54 +0200159
160.. code-block:: cpp
161
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200162 #include <pybind11/functional.h>
Wenzel Jakob93296692015-10-13 23:21:54 +0200163
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200164 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200165 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200166
167 m.def("func_arg", &func_arg);
168 m.def("func_ret", &func_ret);
Brad Harmon835fc062016-06-16 13:19:15 -0500169 m.def("func_cpp", &func_cpp);
Wenzel Jakob93296692015-10-13 23:21:54 +0200170
171 return m.ptr();
172 }
173
174The following interactive session shows how to call them from Python.
175
Wenzel Jakob99279f72016-06-03 11:19:29 +0200176.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200177
178 $ python
179 >>> import example
180 >>> def square(i):
181 ... return i * i
182 ...
183 >>> example.func_arg(square)
184 100L
185 >>> square_plus_1 = example.func_ret(square)
186 >>> square_plus_1(4)
187 17L
Brad Harmon835fc062016-06-16 13:19:15 -0500188 >>> plus_1 = func_cpp()
189 >>> plus_1(number=43)
190 44L
Wenzel Jakob93296692015-10-13 23:21:54 +0200191
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100192.. warning::
193
194 Keep in mind that passing a function from C++ to Python (or vice versa)
195 will instantiate a piece of wrapper code that translates function
Wenzel Jakob954b7932016-07-10 10:13:18 +0200196 invocations between the two languages. Naturally, this translation
197 increases the computational cost of each function call somewhat. A
198 problematic situation can arise when a function is copied back and forth
199 between Python and C++ many times in a row, in which case the underlying
200 wrappers will accumulate correspondingly. The resulting long sequence of
201 C++ -> Python -> C++ -> ... roundtrips can significantly decrease
202 performance.
203
204 There is one exception: pybind11 detects case where a stateless function
205 (i.e. a function pointer or a lambda function without captured variables)
206 is passed as an argument to another C++ function exposed in Python. In this
207 case, there is no overhead. Pybind11 will extract the underlying C++
208 function pointer from the wrapped function to sidestep a potential C++ ->
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200209 Python -> C++ roundtrip. This is demonstrated in :file:`tests/test_callbacks.cpp`.
Wenzel Jakob954b7932016-07-10 10:13:18 +0200210
211.. note::
212
213 This functionality is very useful when generating bindings for callbacks in
214 C++ libraries (e.g. GUI libraries, asynchronous networking libraries, etc.).
215
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200216 The file :file:`tests/test_callbacks.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400217 that demonstrates how to work with callbacks and anonymous functions in
218 more detail.
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100219
Wenzel Jakob8e5dceb2016-09-11 20:00:40 +0900220.. _overriding_virtuals:
221
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200222Overriding virtual functions in Python
223======================================
224
Wenzel Jakob93296692015-10-13 23:21:54 +0200225Suppose that a C++ class or interface has a virtual function that we'd like to
226to override from within Python (we'll focus on the class ``Animal``; ``Dog`` is
227given as a specific example of how one would do this with traditional C++
228code).
229
230.. code-block:: cpp
231
232 class Animal {
233 public:
234 virtual ~Animal() { }
235 virtual std::string go(int n_times) = 0;
236 };
237
238 class Dog : public Animal {
239 public:
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400240 std::string go(int n_times) override {
Wenzel Jakob93296692015-10-13 23:21:54 +0200241 std::string result;
242 for (int i=0; i<n_times; ++i)
243 result += "woof! ";
244 return result;
245 }
246 };
247
248Let's also suppose that we are given a plain function which calls the
249function ``go()`` on an arbitrary ``Animal`` instance.
250
251.. code-block:: cpp
252
253 std::string call_go(Animal *animal) {
254 return animal->go(3);
255 }
256
257Normally, the binding code for these classes would look as follows:
258
259.. code-block:: cpp
260
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200261 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200262 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200263
264 py::class_<Animal> animal(m, "Animal");
265 animal
266 .def("go", &Animal::go);
267
268 py::class_<Dog>(m, "Dog", animal)
269 .def(py::init<>());
270
271 m.def("call_go", &call_go);
272
273 return m.ptr();
274 }
275
276However, these bindings are impossible to extend: ``Animal`` is not
277constructible, and we clearly require some kind of "trampoline" that
278redirects virtual calls back to Python.
279
280Defining a new type of ``Animal`` from within Python is possible but requires a
281helper class that is defined as follows:
282
283.. code-block:: cpp
284
285 class PyAnimal : public Animal {
286 public:
287 /* Inherit the constructors */
288 using Animal::Animal;
289
290 /* Trampoline (need one for each virtual function) */
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400291 std::string go(int n_times) override {
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200292 PYBIND11_OVERLOAD_PURE(
Wenzel Jakob93296692015-10-13 23:21:54 +0200293 std::string, /* Return type */
294 Animal, /* Parent class */
295 go, /* Name of function */
296 n_times /* Argument(s) */
297 );
298 }
299 };
300
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200301The macro :func:`PYBIND11_OVERLOAD_PURE` should be used for pure virtual
302functions, and :func:`PYBIND11_OVERLOAD` should be used for functions which have
Jason Rhinelander7dfb9322016-09-08 14:49:43 -0400303a default implementation. There are also two alternate macros
304:func:`PYBIND11_OVERLOAD_PURE_NAME` and :func:`PYBIND11_OVERLOAD_NAME` which
305take a string-valued name argument between the *Parent class* and *Name of the
306function* slots. This is useful when the C++ and Python versions of the
307function have different names, e.g. ``operator()`` vs ``__call__``.
Wenzel Jakob1e3be732016-05-24 23:42:05 +0200308
309The binding code also needs a few minor adaptations (highlighted):
Wenzel Jakob93296692015-10-13 23:21:54 +0200310
311.. code-block:: cpp
312 :emphasize-lines: 4,6,7
313
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200314 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200315 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200316
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400317 py::class_<Animal, PyAnimal /* <--- trampoline*/> animal(m, "Animal");
Wenzel Jakob93296692015-10-13 23:21:54 +0200318 animal
Wenzel Jakob93296692015-10-13 23:21:54 +0200319 .def(py::init<>())
320 .def("go", &Animal::go);
321
322 py::class_<Dog>(m, "Dog", animal)
323 .def(py::init<>());
324
325 m.def("call_go", &call_go);
326
327 return m.ptr();
328 }
329
Jason Rhinelander6eca0832016-09-08 13:25:45 -0400330Importantly, pybind11 is made aware of the trampoline helper class by
331specifying it as an extra template argument to :class:`class_`. (This can also
332be combined with other template arguments such as a custom holder type; the
333order of template types does not matter). Following this, we are able to
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400334define a constructor as usual.
Wenzel Jakob93296692015-10-13 23:21:54 +0200335
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400336Note, however, that the above is sufficient for allowing python classes to
337extend ``Animal``, but not ``Dog``: see ref:`virtual_and_inheritance` for the
338necessary steps required to providing proper overload support for inherited
339classes.
340
Wenzel Jakob93296692015-10-13 23:21:54 +0200341The Python session below shows how to override ``Animal::go`` and invoke it via
342a virtual method call.
343
Wenzel Jakob99279f72016-06-03 11:19:29 +0200344.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200345
346 >>> from example import *
347 >>> d = Dog()
348 >>> call_go(d)
349 u'woof! woof! woof! '
350 >>> class Cat(Animal):
351 ... def go(self, n_times):
352 ... return "meow! " * n_times
353 ...
354 >>> c = Cat()
355 >>> call_go(c)
356 u'meow! meow! meow! '
357
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200358Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakobbd986fe2016-05-21 10:48:30 +0200359
Jason Rhinelander7dfb9322016-09-08 14:49:43 -0400360.. note::
361
362 When the overridden type returns a reference or pointer to a type that
363 pybind11 converts from Python (for example, numeric values, std::string,
364 and other built-in value-converting types), there are some limitations to
365 be aware of:
366
367 - because in these cases there is no C++ variable to reference (the value
368 is stored in the referenced Python variable), pybind11 provides one in
369 the PYBIND11_OVERLOAD macros (when needed) with static storage duration.
370 Note that this means that invoking the overloaded method on *any*
371 instance will change the referenced value stored in *all* instances of
372 that type.
373
374 - Attempts to modify a non-const reference will not have the desired
375 effect: it will change only the static cache variable, but this change
376 will not propagate to underlying Python instance, and the change will be
377 replaced the next time the overload is invoked.
378
Wenzel Jakob93296692015-10-13 23:21:54 +0200379.. seealso::
380
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200381 The file :file:`tests/test_virtual_functions.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400382 example that demonstrates how to override virtual functions using pybind11
383 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200384
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400385.. _virtual_and_inheritance:
386
387Combining virtual functions and inheritance
388===========================================
389
390When combining virtual methods with inheritance, you need to be sure to provide
391an override for each method for which you want to allow overrides from derived
392python classes. For example, suppose we extend the above ``Animal``/``Dog``
393example as follows:
394
395.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200396
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400397 class Animal {
398 public:
399 virtual std::string go(int n_times) = 0;
400 virtual std::string name() { return "unknown"; }
401 };
402 class Dog : public class Animal {
403 public:
404 std::string go(int n_times) override {
405 std::string result;
406 for (int i=0; i<n_times; ++i)
407 result += bark() + " ";
408 return result;
409 }
410 virtual std::string bark() { return "woof!"; }
411 };
412
413then the trampoline class for ``Animal`` must, as described in the previous
414section, override ``go()`` and ``name()``, but in order to allow python code to
415inherit properly from ``Dog``, we also need a trampoline class for ``Dog`` that
416overrides both the added ``bark()`` method *and* the ``go()`` and ``name()``
417methods inherited from ``Animal`` (even though ``Dog`` doesn't directly
418override the ``name()`` method):
419
420.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200421
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400422 class PyAnimal : public Animal {
423 public:
424 using Animal::Animal; // Inherit constructors
425 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Animal, go, n_times); }
426 std::string name() override { PYBIND11_OVERLOAD(std::string, Animal, name, ); }
427 };
428 class PyDog : public Dog {
429 public:
430 using Dog::Dog; // Inherit constructors
431 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Dog, go, n_times); }
432 std::string name() override { PYBIND11_OVERLOAD(std::string, Dog, name, ); }
433 std::string bark() override { PYBIND11_OVERLOAD(std::string, Dog, bark, ); }
434 };
435
436A registered class derived from a pybind11-registered class with virtual
437methods requires a similar trampoline class, *even if* it doesn't explicitly
438declare or override any virtual methods itself:
439
440.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200441
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400442 class Husky : public Dog {};
443 class PyHusky : public Husky {
444 using Dog::Dog; // Inherit constructors
445 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Husky, go, n_times); }
446 std::string name() override { PYBIND11_OVERLOAD(std::string, Husky, name, ); }
447 std::string bark() override { PYBIND11_OVERLOAD(std::string, Husky, bark, ); }
448 };
449
450There is, however, a technique that can be used to avoid this duplication
451(which can be especially helpful for a base class with several virtual
452methods). The technique involves using template trampoline classes, as
453follows:
454
455.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200456
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400457 template <class AnimalBase = Animal> class PyAnimal : public AnimalBase {
458 using AnimalBase::AnimalBase; // Inherit constructors
459 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, AnimalBase, go, n_times); }
460 std::string name() override { PYBIND11_OVERLOAD(std::string, AnimalBase, name, ); }
461 };
462 template <class DogBase = Dog> class PyDog : public PyAnimal<DogBase> {
463 using PyAnimal<DogBase>::PyAnimal; // Inherit constructors
464 // Override PyAnimal's pure virtual go() with a non-pure one:
465 std::string go(int n_times) override { PYBIND11_OVERLOAD(std::string, DogBase, go, n_times); }
466 std::string bark() override { PYBIND11_OVERLOAD(std::string, DogBase, bark, ); }
467 };
468
469This technique has the advantage of requiring just one trampoline method to be
470declared per virtual method and pure virtual method override. It does,
471however, require the compiler to generate at least as many methods (and
472possibly more, if both pure virtual and overridden pure virtual methods are
473exposed, as above).
474
475The classes are then registered with pybind11 using:
476
477.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200478
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400479 py::class_<Animal, PyAnimal<>> animal(m, "Animal");
480 py::class_<Dog, PyDog<>> dog(m, "Dog");
481 py::class_<Husky, PyDog<Husky>> husky(m, "Husky");
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400482 // ... add animal, dog, husky definitions
483
484Note that ``Husky`` did not require a dedicated trampoline template class at
485all, since it neither declares any new virtual methods nor provides any pure
486virtual method implementations.
487
488With either the repeated-virtuals or templated trampoline methods in place, you
489can now create a python class that inherits from ``Dog``:
490
491.. code-block:: python
492
493 class ShihTzu(Dog):
494 def bark(self):
495 return "yip!"
496
497.. seealso::
498
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200499 See the file :file:`tests/test_virtual_functions.cpp` for complete examples
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400500 using both the duplication and templated trampoline approaches.
501
Jason Rhinelanderec62d972016-09-09 02:42:51 -0400502Extended trampoline class functionality
503=======================================
504
505The trampoline classes described in the previous sections are, by default, only
506initialized when needed. More specifically, they are initialized when a python
507class actually inherits from a registered type (instead of merely creating an
508instance of the registered type), or when a registered constructor is only
509valid for the trampoline class but not the registered class. This is primarily
510for performance reasons: when the trampoline class is not needed for anything
511except virtual method dispatching, not initializing the trampoline class
512improves performance by avoiding needing to do a run-time check to see if the
513inheriting python instance has an overloaded method.
514
515Sometimes, however, it is useful to always initialize a trampoline class as an
516intermediate class that does more than just handle virtual method dispatching.
517For example, such a class might perform extra class initialization, extra
518destruction operations, and might define new members and methods to enable a
519more python-like interface to a class.
520
521In order to tell pybind11 that it should *always* initialize the trampoline
522class when creating new instances of a type, the class constructors should be
523declared using ``py::init_alias<Args, ...>()`` instead of the usual
524``py::init<Args, ...>()``. This forces construction via the trampoline class,
525ensuring member initialization and (eventual) destruction.
526
527.. seealso::
528
529 See the file :file:`tests/test_alias_initialization.cpp` for complete examples
530 showing both normal and forced trampoline instantiation.
531
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200532.. _macro_notes:
533
534General notes regarding convenience macros
535==========================================
536
537pybind11 provides a few convenience macros such as
538:func:`PYBIND11_MAKE_OPAQUE` and :func:`PYBIND11_DECLARE_HOLDER_TYPE`, and
539``PYBIND11_OVERLOAD_*``. Since these are "just" macros that are evaluated
540in the preprocessor (which has no concept of types), they *will* get confused
541by commas in a template argument such as ``PYBIND11_OVERLOAD(MyReturnValue<T1,
542T2>, myFunc)``. In this case, the preprocessor assumes that the comma indicates
Jason Rhinelander20ef6262016-09-21 13:39:02 -0400543the beginning of the next parameter. Use a ``typedef`` to bind the template to
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200544another name and use it in the macro to avoid this problem.
545
546
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100547Global Interpreter Lock (GIL)
548=============================
549
550The classes :class:`gil_scoped_release` and :class:`gil_scoped_acquire` can be
551used to acquire and release the global interpreter lock in the body of a C++
552function call. In this way, long-running C++ code can be parallelized using
553multiple Python threads. Taking the previous section as an example, this could
554be realized as follows (important changes highlighted):
555
556.. code-block:: cpp
557 :emphasize-lines: 8,9,33,34
558
559 class PyAnimal : public Animal {
560 public:
561 /* Inherit the constructors */
562 using Animal::Animal;
563
564 /* Trampoline (need one for each virtual function) */
565 std::string go(int n_times) {
566 /* Acquire GIL before calling Python code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100567 py::gil_scoped_acquire acquire;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100568
569 PYBIND11_OVERLOAD_PURE(
570 std::string, /* Return type */
571 Animal, /* Parent class */
572 go, /* Name of function */
573 n_times /* Argument(s) */
574 );
575 }
576 };
577
578 PYBIND11_PLUGIN(example) {
579 py::module m("example", "pybind11 example plugin");
580
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400581 py::class_<Animal, PyAnimal> animal(m, "Animal");
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100582 animal
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100583 .def(py::init<>())
584 .def("go", &Animal::go);
585
586 py::class_<Dog>(m, "Dog", animal)
587 .def(py::init<>());
588
589 m.def("call_go", [](Animal *animal) -> std::string {
590 /* Release GIL before calling into (potentially long-running) C++ code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100591 py::gil_scoped_release release;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100592 return call_go(animal);
593 });
594
595 return m.ptr();
596 }
597
Wenzel Jakob93296692015-10-13 23:21:54 +0200598Passing STL data structures
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200599===========================
600
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200601When including the additional header file :file:`pybind11/stl.h`, conversions
Wenzel Jakob978e3762016-04-07 18:00:41 +0200602between ``std::vector<>``, ``std::list<>``, ``std::set<>``, and ``std::map<>``
603and the Python ``list``, ``set`` and ``dict`` data structures are automatically
604enabled. The types ``std::pair<>`` and ``std::tuple<>`` are already supported
605out of the box with just the core :file:`pybind11/pybind11.h` header.
Wenzel Jakob93296692015-10-13 23:21:54 +0200606
Wenzel Jakobfe342412016-09-06 13:02:29 +0900607The major downside of these implicit conversions is that containers must be
608converted (i.e. copied) on every Python->C++ and C++->Python transition, which
609can have implications on the program semantics and performance. Please read the
610next sections for more details and alternative approaches that avoid this.
Sergey Lyskov75204182016-08-29 22:50:38 -0400611
Wenzel Jakob93296692015-10-13 23:21:54 +0200612.. note::
613
Wenzel Jakobfe342412016-09-06 13:02:29 +0900614 Arbitrary nesting of any of these types is possible.
Wenzel Jakob93296692015-10-13 23:21:54 +0200615
616.. seealso::
617
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200618 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400619 example that demonstrates how to pass STL data types in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200620
Wenzel Jakobfe342412016-09-06 13:02:29 +0900621.. _opaque:
622
623Treating STL data structures as opaque objects
624==============================================
625
626pybind11 heavily relies on a template matching mechanism to convert parameters
627and return values that are constructed from STL data types such as vectors,
628linked lists, hash tables, etc. This even works in a recursive manner, for
629instance to deal with lists of hash maps of pairs of elementary and custom
630types, etc.
631
632However, a fundamental limitation of this approach is that internal conversions
633between Python and C++ types involve a copy operation that prevents
634pass-by-reference semantics. What does this mean?
635
636Suppose we bind the following function
637
638.. code-block:: cpp
639
640 void append_1(std::vector<int> &v) {
641 v.push_back(1);
642 }
643
644and call it from Python, the following happens:
645
646.. code-block:: pycon
647
648 >>> v = [5, 6]
649 >>> append_1(v)
650 >>> print(v)
651 [5, 6]
652
653As you can see, when passing STL data structures by reference, modifications
654are not propagated back the Python side. A similar situation arises when
655exposing STL data structures using the ``def_readwrite`` or ``def_readonly``
656functions:
657
658.. code-block:: cpp
659
660 /* ... definition ... */
661
662 class MyClass {
663 std::vector<int> contents;
664 };
665
666 /* ... binding code ... */
667
668 py::class_<MyClass>(m, "MyClass")
669 .def(py::init<>)
670 .def_readwrite("contents", &MyClass::contents);
671
672In this case, properties can be read and written in their entirety. However, an
Jason Rhinelander20ef6262016-09-21 13:39:02 -0400673``append`` operation involving such a list type has no effect:
Wenzel Jakobfe342412016-09-06 13:02:29 +0900674
675.. code-block:: pycon
676
677 >>> m = MyClass()
678 >>> m.contents = [5, 6]
679 >>> print(m.contents)
680 [5, 6]
681 >>> m.contents.append(7)
682 >>> print(m.contents)
683 [5, 6]
684
685Finally, the involved copy operations can be costly when dealing with very
686large lists. To deal with all of the above situations, pybind11 provides a
687macro named ``PYBIND11_MAKE_OPAQUE(T)`` that disables the template-based
688conversion machinery of types, thus rendering them *opaque*. The contents of
689opaque objects are never inspected or extracted, hence they *can* be passed by
690reference. For instance, to turn ``std::vector<int>`` into an opaque type, add
691the declaration
692
693.. code-block:: cpp
694
695 PYBIND11_MAKE_OPAQUE(std::vector<int>);
696
697before any binding code (e.g. invocations to ``class_::def()``, etc.). This
698macro must be specified at the top level (and outside of any namespaces), since
699it instantiates a partial template overload. If your binding code consists of
700multiple compilation units, it must be present in every file preceding any
701usage of ``std::vector<int>``. Opaque types must also have a corresponding
702``class_`` declaration to associate them with a name in Python, and to define a
703set of available operations, e.g.:
704
705.. code-block:: cpp
706
707 py::class_<std::vector<int>>(m, "IntVector")
708 .def(py::init<>())
709 .def("clear", &std::vector<int>::clear)
710 .def("pop_back", &std::vector<int>::pop_back)
711 .def("__len__", [](const std::vector<int> &v) { return v.size(); })
712 .def("__iter__", [](std::vector<int> &v) {
713 return py::make_iterator(v.begin(), v.end());
714 }, py::keep_alive<0, 1>()) /* Keep vector alive while iterator is used */
715 // ....
716
717The ability to expose STL containers as native Python objects is a fairly
718common request, hence pybind11 also provides an optional header file named
719:file:`pybind11/stl_bind.h` that does exactly this. The mapped containers try
720to match the behavior of their native Python counterparts as much as possible.
721
722The following example showcases usage of :file:`pybind11/stl_bind.h`:
723
724.. code-block:: cpp
725
726 // Don't forget this
727 #include <pybind11/stl_bind.h>
728
729 PYBIND11_MAKE_OPAQUE(std::vector<int>);
730 PYBIND11_MAKE_OPAQUE(std::map<std::string, double>);
731
732 // ...
733
734 // later in binding code:
735 py::bind_vector<std::vector<int>>(m, "VectorInt");
736 py::bind_map<std::map<std::string, double>>(m, "MapStringDouble");
737
738Please take a look at the :ref:`macro_notes` before using the
739``PYBIND11_MAKE_OPAQUE`` macro.
740
741.. seealso::
742
743 The file :file:`tests/test_opaque_types.cpp` contains a complete
744 example that demonstrates how to create and expose opaque types using
745 pybind11 in more detail.
746
747 The file :file:`tests/test_stl_binders.cpp` shows how to use the
748 convenience STL container wrappers.
749
750
Wenzel Jakobb2825952016-04-13 23:33:00 +0200751Binding sequence data types, iterators, the slicing protocol, etc.
752==================================================================
Wenzel Jakob93296692015-10-13 23:21:54 +0200753
754Please refer to the supplemental example for details.
755
756.. seealso::
757
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200758 The file :file:`tests/test_sequences_and_iterators.cpp` contains a
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400759 complete example that shows how to bind a sequence data type, including
760 length queries (``__len__``), iterators (``__iter__``), the slicing
761 protocol and other kinds of useful operations.
Wenzel Jakob93296692015-10-13 23:21:54 +0200762
Trent Houliston352149e2016-08-25 23:08:04 +1000763C++11 chrono datatypes
764======================
Trent Houliston352149e2016-08-25 23:08:04 +1000765
Trent Houliston10a6a902016-09-28 01:01:59 +1000766When including the additional header file :file:`pybind11/chrono.h` conversions
767from C++11 chrono datatypes to python datetime objects are automatically enabled.
768This header also enables conversions of python floats (often from sources such
769as `time.monotonic()`, `time.perf_counter()` and `time.process_time()`) into
770durations.
Trent Houliston352149e2016-08-25 23:08:04 +1000771
Trent Houliston10a6a902016-09-28 01:01:59 +1000772An overview of clocks in C++11
773------------------------------
Trent Houliston352149e2016-08-25 23:08:04 +1000774
Trent Houliston10a6a902016-09-28 01:01:59 +1000775A point of confusion when using these conversions is the differences between
776clocks provided in C++11. There are three clock types defined by the C++11
777standard and users can define their own if needed. Each of these clocks have
778different properties and when converting to and from python will give different
779results.
Trent Houliston2f597682016-09-13 20:40:28 +1000780
Trent Houliston10a6a902016-09-28 01:01:59 +1000781The first clock defined by the standard is ``std::chrono::system_clock``. This
782clock measures the current date and time. However, this clock changes with to
783updates to the operating system time. For example, if your time is synchronised
784with a time server this clock will change. This makes this clock a poor choice
785for timing purposes but good for measuring the wall time.
Trent Houliston352149e2016-08-25 23:08:04 +1000786
Trent Houliston10a6a902016-09-28 01:01:59 +1000787The second clock defined in the standard is ``std::chrono::steady_clock``.
788This clock ticks at a steady rate and is never adjusted. This makes it excellent
789for timing purposes, however the value in this clock does not correspond to the
790current date and time. Often this clock will be the amount of time your system
791has been on, although it does not have to be. This clock will never be the same
792clock as the system clock as the system clock can change but steady clocks
793cannot.
Trent Houliston352149e2016-08-25 23:08:04 +1000794
Trent Houliston10a6a902016-09-28 01:01:59 +1000795The third clock defined in the standard is ``std::chrono::high_resolution_clock``.
796This clock is the clock that has the highest resolution out of the clocks in the
797system. It is normally a typedef to either the system clock or the steady clock
798but can be its own independent clock. This is important as when using these
799conversions as the types you get in python for this clock might be different
800depending on the system.
801If it is a typedef of the system clock, python will get datetime objects, but if
802it is a different clock they will be timedelta objects.
Trent Houliston2f597682016-09-13 20:40:28 +1000803
Trent Houliston10a6a902016-09-28 01:01:59 +1000804Conversions Provided
805--------------------
806
807C++ to Python
808 - ``std::chrono::system_clock::time_point`` → ``datetime.datetime``
809 System clock times are converted to python datetime instances. They are
810 in the local timezone, but do not have any timezone information attached
811 to them (they are naive datetime objects).
812
813 - ``std::chrono::duration`` → ``datetime.timedelta``
814 Durations are converted to timedeltas, any precision in the duration
815 greater than microseconds is lost by rounding towards zero.
816
817 - ``std::chrono::[other_clocks]::time_point`` → ``datetime.timedelta``
818 Any clock time that is not the system clock is converted to a time delta. This timedelta measures the time from the clocks epoch to now.
819
820Python to C++
821 - ``datetime.datetime`` → ``std::chrono::system_clock::time_point``
822 Date/time objects are converted into system clock timepoints. Any
823 timezone information is ignored and the type is treated as a naive
824 object.
825
826 - ``datetime.timedelta`` → ``std::chrono::duration``
827 Time delta are converted into durations with microsecond precision.
828
829 - ``datetime.timedelta`` → ``std::chrono::[other_clocks]::time_point``
830 Time deltas that are converted into clock timepoints are treated as
831 the amount of time from the start of the clocks epoch.
832
833 - ``float`` → ``std::chrono::duration``
834 Floats that are passed to C++ as durations be interpreted as a number of
835 seconds. These will be converted to the duration using ``duration_cast``
836 from the float.
837
838 - ``float`` → ``std::chrono::[other_clocks]::time_point``
839 Floats that are passed to C++ as time points will be interpreted as the
840 number of seconds from the start of the clocks epoch.
Trent Houliston352149e2016-08-25 23:08:04 +1000841
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200842Return value policies
843=====================
844
Wenzel Jakob93296692015-10-13 23:21:54 +0200845Python and C++ use wildly different ways of managing the memory and lifetime of
846objects managed by them. This can lead to issues when creating bindings for
847functions that return a non-trivial type. Just by looking at the type
848information, it is not clear whether Python should take charge of the returned
849value and eventually free its resources, or if this is handled on the C++ side.
850For this reason, pybind11 provides a several `return value policy` annotations
851that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100852functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200853
Wenzel Jakobbf099582016-08-22 12:52:02 +0200854Return value policies can also be applied to properties, in which case the
855arguments must be passed through the :class:`cpp_function` constructor:
856
857.. code-block:: cpp
858
859 class_<MyClass>(m, "MyClass")
860 def_property("data"
861 py::cpp_function(&MyClass::getData, py::return_value_policy::copy),
862 py::cpp_function(&MyClass::setData)
863 );
864
865The following table provides an overview of the available return value policies:
866
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200867.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
868
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200869+--------------------------------------------------+----------------------------------------------------------------------------+
870| Return value policy | Description |
871+==================================================+============================================================================+
872| :enum:`return_value_policy::automatic` | This is the default return value policy, which falls back to the policy |
873| | :enum:`return_value_policy::take_ownership` when the return value is a |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200874| | pointer. Otherwise, it uses :enum:`return_value::move` or |
875| | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200876| | See below for a description of what all of these different policies do. |
877+--------------------------------------------------+----------------------------------------------------------------------------+
878| :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 +0200879| | return value is a pointer. This is the default conversion policy for |
880| | function arguments when calling Python functions manually from C++ code |
881| | (i.e. via handle::operator()). You probably won't need to use this. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200882+--------------------------------------------------+----------------------------------------------------------------------------+
883| :enum:`return_value_policy::take_ownership` | Reference an existing object (i.e. do not create a new copy) and take |
884| | ownership. Python will call the destructor and delete operator when the |
885| | object's reference count reaches zero. Undefined behavior ensues when the |
Wenzel Jakobf53e3002016-06-30 14:59:23 +0200886| | C++ side does the same. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200887+--------------------------------------------------+----------------------------------------------------------------------------+
888| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python. |
889| | This policy is comparably safe because the lifetimes of the two instances |
890| | are decoupled. |
891+--------------------------------------------------+----------------------------------------------------------------------------+
892| :enum:`return_value_policy::move` | Use ``std::move`` to move the return value contents into a new instance |
893| | that will be owned by Python. This policy is comparably safe because the |
894| | lifetimes of the two instances (move source and destination) are decoupled.|
895+--------------------------------------------------+----------------------------------------------------------------------------+
896| :enum:`return_value_policy::reference` | Reference an existing object, but do not take ownership. The C++ side is |
897| | responsible for managing the object's lifetime and deallocating it when |
898| | it is no longer used. Warning: undefined behavior will ensue when the C++ |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200899| | side deletes an object that is still referenced and used by Python. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200900+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakobbf099582016-08-22 12:52:02 +0200901| :enum:`return_value_policy::reference_internal` | Indicates that the lifetime of the return value is tied to the lifetime |
902| | of a parent object, namely the implicit ``this``, or ``self`` argument of |
903| | the called method or property. Internally, this policy works just like |
904| | :enum:`return_value_policy::reference` but additionally applies a |
905| | ``keep_alive<0, 1>`` *call policy* (described in the next section) that |
906| | prevents the parent object from being garbage collected as long as the |
907| | return value is referenced by Python. This is the default policy for |
Trent Houliston10a6a902016-09-28 01:01:59 +1000908| | property getters created via ``def_property``, ``def_readwrite``, etc. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200909+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200910
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200911.. warning::
912
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400913 Code with invalid return value policies might access unitialized memory or
914 free data structures multiple times, which can lead to hard-to-debug
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200915 non-determinism and segmentation faults, hence it is worth spending the
916 time to understand all the different options in the table above.
917
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400918One important aspect of the above policies is that they only apply to instances
919which pybind11 has *not* seen before, in which case the policy clarifies
920essential questions about the return value's lifetime and ownership. When
921pybind11 knows the instance already (as identified by its type and address in
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200922memory), it will return the existing Python object wrapper rather than creating
Wenzel Jakobbf099582016-08-22 12:52:02 +0200923a new copy.
nafur717df752016-06-28 18:07:11 +0200924
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200925.. note::
926
927 The next section on :ref:`call_policies` discusses *call policies* that can be
928 specified *in addition* to a return value policy from the list above. Call
929 policies indicate reference relationships that can involve both return values
930 and parameters of functions.
931
932.. note::
933
934 As an alternative to elaborate call policies and lifetime management logic,
935 consider using smart pointers (see the section on :ref:`smart_pointers` for
936 details). Smart pointers can tell whether an object is still referenced from
937 C++ or Python, which generally eliminates the kinds of inconsistencies that
938 can lead to crashes or undefined behavior. For functions returning smart
939 pointers, it is not necessary to specify a return value policy.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100940
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200941.. _call_policies:
942
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100943Additional call policies
944========================
945
946In addition to the above return value policies, further `call policies` can be
947specified to indicate dependencies between parameters. There is currently just
948one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
949argument with index ``Patient`` should be kept alive at least until the
Wenzel Jakob0b632312016-08-18 10:58:21 +0200950argument with index ``Nurse`` is freed by the garbage collector. Argument
951indices start at one, while zero refers to the return value. For methods, index
952``1`` refers to the implicit ``this`` pointer, while regular arguments begin at
953index ``2``. Arbitrarily many call policies can be specified. When a ``Nurse``
954with value ``None`` is detected at runtime, the call policy does nothing.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100955
Wenzel Jakob0b632312016-08-18 10:58:21 +0200956This feature internally relies on the ability to create a *weak reference* to
957the nurse object, which is permitted by all classes exposed via pybind11. When
958the nurse object does not support weak references, an exception will be thrown.
959
960Consider the following example: here, the binding code for a list append
961operation ties the lifetime of the newly added element to the underlying
962container:
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100963
964.. code-block:: cpp
965
966 py::class_<List>(m, "List")
967 .def("append", &List::append, py::keep_alive<1, 2>());
968
969.. note::
970
971 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
972 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
973 0) policies from Boost.Python.
974
Wenzel Jakob61587162016-01-18 22:38:52 +0100975.. seealso::
976
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200977 The file :file:`tests/test_keep_alive.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400978 that demonstrates using :class:`keep_alive` in more detail.
Wenzel Jakob61587162016-01-18 22:38:52 +0100979
Wenzel Jakob93296692015-10-13 23:21:54 +0200980Implicit type conversions
981=========================
982
983Suppose that instances of two types ``A`` and ``B`` are used in a project, and
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200984that an ``A`` can easily be converted into an instance of type ``B`` (examples of this
Wenzel Jakob93296692015-10-13 23:21:54 +0200985could be a fixed and an arbitrary precision number type).
986
987.. code-block:: cpp
988
989 py::class_<A>(m, "A")
990 /// ... members ...
991
992 py::class_<B>(m, "B")
993 .def(py::init<A>())
994 /// ... members ...
995
996 m.def("func",
997 [](const B &) { /* .... */ }
998 );
999
1000To invoke the function ``func`` using a variable ``a`` containing an ``A``
1001instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
1002will automatically apply an implicit type conversion, which makes it possible
1003to directly write ``func(a)``.
1004
1005In this situation (i.e. where ``B`` has a constructor that converts from
1006``A``), the following statement enables similar implicit conversions on the
1007Python side:
1008
1009.. code-block:: cpp
1010
1011 py::implicitly_convertible<A, B>();
1012
Wenzel Jakob3eeea6f2016-06-30 18:10:28 +02001013.. note::
1014
1015 Implicit conversions from ``A`` to ``B`` only work when ``B`` is a custom
1016 data type that is exposed to Python via pybind11.
1017
Wenzel Jakobf88af0c2016-06-22 13:52:31 +02001018.. _static_properties:
1019
1020Static properties
1021=================
1022
1023The section on :ref:`properties` discussed the creation of instance properties
1024that are implemented in terms of C++ getters and setters.
1025
1026Static properties can also be created in a similar way to expose getters and
1027setters of static class attributes. It is important to note that the implicit
1028``self`` argument also exists in this case and is used to pass the Python
1029``type`` subclass instance. This parameter will often not be needed by the C++
1030side, and the following example illustrates how to instantiate a lambda getter
1031function that ignores it:
1032
1033.. code-block:: cpp
1034
1035 py::class_<Foo>(m, "Foo")
1036 .def_property_readonly_static("foo", [](py::object /* self */) { return Foo(); });
1037
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +02001038Unique pointers
1039===============
1040
1041Given a class ``Example`` with Python bindings, it's possible to return
1042instances wrapped in C++11 unique pointers, like so
1043
1044.. code-block:: cpp
1045
1046 std::unique_ptr<Example> create_example() { return std::unique_ptr<Example>(new Example()); }
1047
1048.. code-block:: cpp
1049
1050 m.def("create_example", &create_example);
1051
1052In other words, there is nothing special that needs to be done. While returning
1053unique pointers in this way is allowed, it is *illegal* to use them as function
1054arguments. For instance, the following function signature cannot be processed
1055by pybind11.
1056
1057.. code-block:: cpp
1058
1059 void do_something_with_example(std::unique_ptr<Example> ex) { ... }
1060
1061The above signature would imply that Python needs to give up ownership of an
1062object that is passed to this function, which is generally not possible (for
1063instance, the object might be referenced elsewhere).
1064
Wenzel Jakobf7b58742016-04-25 23:04:27 +02001065.. _smart_pointers:
1066
Wenzel Jakob93296692015-10-13 23:21:54 +02001067Smart pointers
1068==============
1069
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +02001070This section explains how to pass values that are wrapped in "smart" pointer
Wenzel Jakobe84f5572016-04-26 23:19:19 +02001071types with internal reference counting. For the simpler C++11 unique pointers,
1072refer to the previous section.
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +02001073
Jason Rhinelander5fffe202016-09-06 12:17:06 -04001074The binding generator for classes, :class:`class_`, can be passed a template
1075type that denotes a special *holder* type that is used to manage references to
1076the object. If no such holder type template argument is given, the default for
1077a type named ``Type`` is ``std::unique_ptr<Type>``, which means that the object
1078is deallocated when Python's reference count goes to zero.
Wenzel Jakob93296692015-10-13 23:21:54 +02001079
Wenzel Jakob1853b652015-10-18 15:38:50 +02001080It is possible to switch to other types of reference counting wrappers or smart
1081pointers, which is useful in codebases that rely on them. For instance, the
1082following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +02001083
1084.. code-block:: cpp
1085
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001086 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001087
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001088Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +02001089
Wenzel Jakob1853b652015-10-18 15:38:50 +02001090To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001091argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +02001092be declared at the top level before any binding code:
1093
1094.. code-block:: cpp
1095
Wenzel Jakobb1b71402015-10-18 16:48:30 +02001096 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +02001097
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001098.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +01001099
1100 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
1101 placeholder name that is used as a template parameter of the second
1102 argument. Thus, feel free to use any identifier, but use it consistently on
1103 both sides; also, don't use the name of a type that already exists in your
1104 codebase.
1105
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001106One potential stumbling block when using holder types is that they need to be
1107applied consistently. Can you guess what's broken about the following binding
1108code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001109
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001110.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001111
Jason Rhinelander5fffe202016-09-06 12:17:06 -04001112 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
1113
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001114 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001115
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001116 class Parent {
1117 public:
1118 Parent() : child(std::make_shared<Child>()) { }
1119 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
1120 private:
1121 std::shared_ptr<Child> child;
1122 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001123
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001124 PYBIND11_PLUGIN(example) {
1125 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001126
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001127 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
1128
1129 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
1130 .def(py::init<>())
1131 .def("get_child", &Parent::get_child);
1132
1133 return m.ptr();
1134 }
1135
1136The following Python code will cause undefined behavior (and likely a
1137segmentation fault).
1138
1139.. code-block:: python
1140
1141 from example import Parent
1142 print(Parent().get_child())
1143
1144The problem is that ``Parent::get_child()`` returns a pointer to an instance of
1145``Child``, but the fact that this instance is already managed by
1146``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
1147pybind11 will create a second independent ``std::shared_ptr<...>`` that also
1148claims ownership of the pointer. In the end, the object will be freed **twice**
1149since these shared pointers have no way of knowing about each other.
1150
1151There are two ways to resolve this issue:
1152
11531. For types that are managed by a smart pointer class, never use raw pointers
1154 in function arguments or return values. In other words: always consistently
1155 wrap pointers into their designated holder types (such as
1156 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
1157 should be modified as follows:
1158
1159.. code-block:: cpp
1160
1161 std::shared_ptr<Child> get_child() { return child; }
1162
11632. Adjust the definition of ``Child`` by specifying
1164 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
1165 base class. This adds a small bit of information to ``Child`` that allows
1166 pybind11 to realize that there is already an existing
1167 ``std::shared_ptr<...>`` and communicate with it. In this case, the
1168 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001169
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001170.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
1171
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001172.. code-block:: cpp
1173
1174 class Child : public std::enable_shared_from_this<Child> { };
1175
Wenzel Jakob9bb97c12016-06-03 11:19:41 +02001176
1177Please take a look at the :ref:`macro_notes` before using this feature.
1178
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001179.. seealso::
1180
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001181 The file :file:`tests/test_smart_ptr.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001182 that demonstrates how to work with custom reference-counting holder types
1183 in more detail.
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001184
Wenzel Jakob93296692015-10-13 23:21:54 +02001185.. _custom_constructors:
1186
1187Custom constructors
1188===================
1189
1190The syntax for binding constructors was previously introduced, but it only
1191works when a constructor with the given parameters actually exists on the C++
1192side. To extend this to more general cases, let's take a look at what actually
1193happens under the hood: the following statement
1194
1195.. code-block:: cpp
1196
1197 py::class_<Example>(m, "Example")
1198 .def(py::init<int>());
1199
1200is short hand notation for
1201
1202.. code-block:: cpp
1203
1204 py::class_<Example>(m, "Example")
1205 .def("__init__",
1206 [](Example &instance, int arg) {
1207 new (&instance) Example(arg);
1208 }
1209 );
1210
1211In other words, :func:`init` creates an anonymous function that invokes an
1212in-place constructor. Memory allocation etc. is already take care of beforehand
1213within pybind11.
1214
Nickolai Belakovski63338252016-08-27 11:57:55 -07001215.. _classes_with_non_public_destructors:
1216
1217Classes with non-public destructors
1218===================================
1219
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001220If a class has a private or protected destructor (as might e.g. be the case in
1221a singleton pattern), a compile error will occur when creating bindings via
1222pybind11. The underlying issue is that the ``std::unique_ptr`` holder type that
1223is responsible for managing the lifetime of instances will reference the
1224destructor even if no deallocations ever take place. In order to expose classes
1225with private or protected destructors, it is possible to override the holder
Jason Rhinelander5fffe202016-09-06 12:17:06 -04001226type via a holder type argument to ``class_``. Pybind11 provides a helper class
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001227``py::nodelete`` that disables any destructor invocations. In this case, it is
1228crucial that instances are deallocated on the C++ side to avoid memory leaks.
Nickolai Belakovski63338252016-08-27 11:57:55 -07001229
1230.. code-block:: cpp
1231
1232 /* ... definition ... */
1233
1234 class MyClass {
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001235 private:
1236 ~MyClass() { }
Nickolai Belakovski63338252016-08-27 11:57:55 -07001237 };
1238
1239 /* ... binding code ... */
1240
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001241 py::class_<MyClass, std::unique_ptr<MyClass, py::nodelete>>(m, "MyClass")
Nickolai Belakovski63338252016-08-27 11:57:55 -07001242 .def(py::init<>)
1243
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001244.. _catching_and_throwing_exceptions:
1245
Wenzel Jakob93296692015-10-13 23:21:54 +02001246Catching and throwing exceptions
1247================================
1248
1249When C++ code invoked from Python throws an ``std::exception``, it is
1250automatically converted into a Python ``Exception``. pybind11 defines multiple
1251special exception classes that will map to different types of Python
1252exceptions:
1253
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001254.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
1255
Wenzel Jakob978e3762016-04-07 18:00:41 +02001256+--------------------------------------+------------------------------+
1257| C++ exception type | Python exception type |
1258+======================================+==============================+
1259| :class:`std::exception` | ``RuntimeError`` |
1260+--------------------------------------+------------------------------+
1261| :class:`std::bad_alloc` | ``MemoryError`` |
1262+--------------------------------------+------------------------------+
1263| :class:`std::domain_error` | ``ValueError`` |
1264+--------------------------------------+------------------------------+
1265| :class:`std::invalid_argument` | ``ValueError`` |
1266+--------------------------------------+------------------------------+
1267| :class:`std::length_error` | ``ValueError`` |
1268+--------------------------------------+------------------------------+
1269| :class:`std::out_of_range` | ``ValueError`` |
1270+--------------------------------------+------------------------------+
1271| :class:`std::range_error` | ``ValueError`` |
1272+--------------------------------------+------------------------------+
1273| :class:`pybind11::stop_iteration` | ``StopIteration`` (used to |
1274| | implement custom iterators) |
1275+--------------------------------------+------------------------------+
1276| :class:`pybind11::index_error` | ``IndexError`` (used to |
1277| | indicate out of bounds |
1278| | accesses in ``__getitem__``, |
1279| | ``__setitem__``, etc.) |
1280+--------------------------------------+------------------------------+
Sergey Lyskova95bde12016-05-08 19:31:55 -04001281| :class:`pybind11::value_error` | ``ValueError`` (used to |
1282| | indicate wrong value passed |
1283| | in ``container.remove(...)`` |
1284+--------------------------------------+------------------------------+
Jason Rhinelander5aa85be2016-08-11 21:22:05 -04001285| :class:`pybind11::key_error` | ``KeyError`` (used to |
1286| | indicate out of bounds |
1287| | accesses in ``__getitem__``, |
1288| | ``__setitem__`` in dict-like |
1289| | objects, etc.) |
1290+--------------------------------------+------------------------------+
Wenzel Jakob978e3762016-04-07 18:00:41 +02001291| :class:`pybind11::error_already_set` | Indicates that the Python |
1292| | exception flag has already |
1293| | been initialized |
1294+--------------------------------------+------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +02001295
1296When a Python function invoked from C++ throws an exception, it is converted
1297into a C++ exception of type :class:`error_already_set` whose string payload
1298contains a textual summary.
1299
1300There is also a special exception :class:`cast_error` that is thrown by
1301:func:`handle::call` when the input arguments cannot be converted to Python
1302objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001303
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001304Registering custom exception translators
1305========================================
1306
1307If the default exception conversion policy described
1308:ref:`above <catching_and_throwing_exceptions>`
1309is insufficient, pybind11 also provides support for registering custom
1310exception translators.
1311
Jason Rhinelanderb3794f12016-09-16 02:04:15 -04001312To register a simple exception conversion that translates a C++ exception into
1313a new Python exception using the C++ exception's ``what()`` method, a helper
1314function is available:
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001315
1316.. code-block:: cpp
1317
Jason Rhinelanderb3794f12016-09-16 02:04:15 -04001318 py::register_exception<CppExp>(module, "PyExp");
1319
1320This call creates a Python exception class with the name ``PyExp`` in the given
1321module and automatically converts any encountered exceptions of type ``CppExp``
1322into Python exceptions of type ``PyExp``.
1323
1324When more advanced exception translation is needed, the function
1325``py::register_exception_translator(translator)`` can be used to register
1326functions that can translate arbitrary exception types (and which may include
1327additional logic to do so). The function takes a stateless callable (e.g. a
1328function pointer or a lambda function without captured variables) with the call
1329signature ``void(std::exception_ptr)``.
1330
1331When a C++ exception is thrown, the registered exception translators are tried
1332in reverse order of registration (i.e. the last registered translator gets the
1333first shot at handling the exception).
1334
1335Inside the translator, ``std::rethrow_exception`` should be used within
1336a try block to re-throw the exception. One or more catch clauses to catch
1337the appropriate exceptions should then be used with each clause using
1338``PyErr_SetString`` to set a Python exception or ``ex(string)`` to set
1339the python exception to a custom exception type (see below).
1340
1341To declare a custom Python exception type, declare a ``py::exception`` variable
1342and use this in the associated exception translator (note: it is often useful
1343to make this a static declaration when using it inside a lambda expression
1344without requiring capturing).
1345
1346
1347The following example demonstrates this for a hypothetical exception classes
1348``MyCustomException`` and ``OtherException``: the first is translated to a
1349custom python exception ``MyCustomError``, while the second is translated to a
1350standard python RuntimeError:
1351
1352.. code-block:: cpp
1353
1354 static py::exception<MyCustomException> exc(m, "MyCustomError");
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001355 py::register_exception_translator([](std::exception_ptr p) {
1356 try {
1357 if (p) std::rethrow_exception(p);
1358 } catch (const MyCustomException &e) {
Jason Rhinelanderb3794f12016-09-16 02:04:15 -04001359 exc(e.what());
1360 } catch (const OtherException &e) {
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001361 PyErr_SetString(PyExc_RuntimeError, e.what());
1362 }
1363 });
1364
Jason Rhinelanderb3794f12016-09-16 02:04:15 -04001365Multiple exceptions can be handled by a single translator, as shown in the
1366example above. If the exception is not caught by the current translator, the
1367previously registered one gets a chance.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001368
1369If none of the registered exception translators is able to handle the
1370exception, it is handled by the default converter as described in the previous
1371section.
1372
Jason Rhinelanderb3794f12016-09-16 02:04:15 -04001373.. seealso::
1374
1375 The file :file:`tests/test_exceptions.cpp` contains examples
1376 of various custom exception translators and custom exception types.
1377
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001378.. note::
1379
Jason Rhinelanderb3794f12016-09-16 02:04:15 -04001380 You must call either ``PyErr_SetString`` or a custom exception's call
1381 operator (``exc(string)``) for every exception caught in a custom exception
1382 translator. Failure to do so will cause Python to crash with ``SystemError:
1383 error return without exception set``.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001384
Jason Rhinelanderb3794f12016-09-16 02:04:15 -04001385 Exceptions that you do not plan to handle should simply not be caught, or
1386 may be explicity (re-)thrown to delegate it to the other,
1387 previously-declared existing exception translators.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001388
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001389.. _eigen:
1390
1391Transparent conversion of dense and sparse Eigen data types
1392===========================================================
1393
1394Eigen [#f1]_ is C++ header-based library for dense and sparse linear algebra. Due to
1395its popularity and widespread adoption, pybind11 provides transparent
1396conversion support between Eigen and Scientific Python linear algebra data types.
1397
1398Specifically, when including the optional header file :file:`pybind11/eigen.h`,
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001399pybind11 will automatically and transparently convert
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001400
14011. Static and dynamic Eigen dense vectors and matrices to instances of
1402 ``numpy.ndarray`` (and vice versa).
1403
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040014042. Returned matrix expressions such as blocks (including columns or rows) and
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001405 diagonals will be converted to ``numpy.ndarray`` of the expression
1406 values.
1407
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040014083. Returned matrix-like objects such as Eigen::DiagonalMatrix or
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001409 Eigen::SelfAdjointView will be converted to ``numpy.ndarray`` containing the
1410 expressed value.
1411
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040014124. Eigen sparse vectors and matrices to instances of
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001413 ``scipy.sparse.csr_matrix``/``scipy.sparse.csc_matrix`` (and vice versa).
1414
1415This makes it possible to bind most kinds of functions that rely on these types.
1416One major caveat are functions that take Eigen matrices *by reference* and modify
1417them somehow, in which case the information won't be propagated to the caller.
1418
1419.. code-block:: cpp
1420
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001421 /* The Python bindings of these functions won't replicate
1422 the intended effect of modifying the function arguments */
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001423 void scale_by_2(Eigen::Vector3f &v) {
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001424 v *= 2;
1425 }
1426 void scale_by_2(Eigen::Ref<Eigen::MatrixXd> &v) {
1427 v *= 2;
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001428 }
1429
1430To see why this is, refer to the section on :ref:`opaque` (although that
1431section specifically covers STL data types, the underlying issue is the same).
1432The next two sections discuss an efficient alternative for exposing the
1433underlying native Eigen types as opaque objects in a way that still integrates
1434with NumPy and SciPy.
1435
1436.. [#f1] http://eigen.tuxfamily.org
1437
1438.. seealso::
1439
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001440 The file :file:`tests/test_eigen.cpp` contains a complete example that
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001441 shows how to pass Eigen sparse and dense data types in more detail.
1442
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001443Buffer protocol
1444===============
1445
1446Python supports an extremely general and convenient approach for exchanging
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001447data between plugin libraries. Types can expose a buffer view [#f2]_, which
1448provides fast direct access to the raw internal data representation. Suppose we
1449want to bind the following simplistic Matrix class:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001450
1451.. code-block:: cpp
1452
1453 class Matrix {
1454 public:
1455 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
1456 m_data = new float[rows*cols];
1457 }
1458 float *data() { return m_data; }
1459 size_t rows() const { return m_rows; }
1460 size_t cols() const { return m_cols; }
1461 private:
1462 size_t m_rows, m_cols;
1463 float *m_data;
1464 };
1465
1466The following binding code exposes the ``Matrix`` contents as a buffer object,
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001467making it possible to cast Matrices into NumPy arrays. It is even possible to
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001468completely avoid copy operations with Python expressions like
1469``np.array(matrix_instance, copy = False)``.
1470
1471.. code-block:: cpp
1472
1473 py::class_<Matrix>(m, "Matrix")
1474 .def_buffer([](Matrix &m) -> py::buffer_info {
1475 return py::buffer_info(
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001476 m.data(), /* Pointer to buffer */
1477 sizeof(float), /* Size of one scalar */
1478 py::format_descriptor<float>::format(), /* Python struct-style format descriptor */
1479 2, /* Number of dimensions */
1480 { m.rows(), m.cols() }, /* Buffer dimensions */
1481 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001482 sizeof(float) }
1483 );
1484 });
1485
1486The snippet above binds a lambda function, which can create ``py::buffer_info``
1487description records on demand describing a given matrix. The contents of
1488``py::buffer_info`` mirror the Python buffer protocol specification.
1489
1490.. code-block:: cpp
1491
1492 struct buffer_info {
1493 void *ptr;
1494 size_t itemsize;
1495 std::string format;
1496 int ndim;
1497 std::vector<size_t> shape;
1498 std::vector<size_t> strides;
1499 };
1500
1501To create a C++ function that can take a Python buffer object as an argument,
1502simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
1503in a great variety of configurations, hence some safety checks are usually
1504necessary in the function body. Below, you can see an basic example on how to
1505define a custom constructor for the Eigen double precision matrix
1506(``Eigen::MatrixXd``) type, which supports initialization from compatible
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001507buffer objects (e.g. a NumPy matrix).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001508
1509.. code-block:: cpp
1510
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001511 /* Bind MatrixXd (or some other Eigen type) to Python */
1512 typedef Eigen::MatrixXd Matrix;
1513
1514 typedef Matrix::Scalar Scalar;
1515 constexpr bool rowMajor = Matrix::Flags & Eigen::RowMajorBit;
1516
1517 py::class_<Matrix>(m, "Matrix")
1518 .def("__init__", [](Matrix &m, py::buffer b) {
Wenzel Jakobe7628532016-05-05 10:04:44 +02001519 typedef Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic> Strides;
Wenzel Jakobe7628532016-05-05 10:04:44 +02001520
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001521 /* Request a buffer descriptor from Python */
1522 py::buffer_info info = b.request();
1523
1524 /* Some sanity checks ... */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001525 if (info.format != py::format_descriptor<Scalar>::format())
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001526 throw std::runtime_error("Incompatible format: expected a double array!");
1527
1528 if (info.ndim != 2)
1529 throw std::runtime_error("Incompatible buffer dimension!");
1530
Wenzel Jakobe7628532016-05-05 10:04:44 +02001531 auto strides = Strides(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001532 info.strides[rowMajor ? 0 : 1] / sizeof(Scalar),
1533 info.strides[rowMajor ? 1 : 0] / sizeof(Scalar));
Wenzel Jakobe7628532016-05-05 10:04:44 +02001534
1535 auto map = Eigen::Map<Matrix, 0, Strides>(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001536 static_cat<Scalar *>(info.ptr), info.shape[0], info.shape[1], strides);
Wenzel Jakobe7628532016-05-05 10:04:44 +02001537
1538 new (&m) Matrix(map);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001539 });
1540
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001541For reference, the ``def_buffer()`` call for this Eigen data type should look
1542as follows:
1543
1544.. code-block:: cpp
1545
1546 .def_buffer([](Matrix &m) -> py::buffer_info {
1547 return py::buffer_info(
1548 m.data(), /* Pointer to buffer */
1549 sizeof(Scalar), /* Size of one scalar */
1550 /* Python struct-style format descriptor */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001551 py::format_descriptor<Scalar>::format(),
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001552 /* Number of dimensions */
1553 2,
1554 /* Buffer dimensions */
1555 { (size_t) m.rows(),
1556 (size_t) m.cols() },
1557 /* Strides (in bytes) for each index */
1558 { sizeof(Scalar) * (rowMajor ? m.cols() : 1),
1559 sizeof(Scalar) * (rowMajor ? 1 : m.rows()) }
1560 );
1561 })
1562
1563For a much easier approach of binding Eigen types (although with some
1564limitations), refer to the section on :ref:`eigen`.
1565
Wenzel Jakob93296692015-10-13 23:21:54 +02001566.. seealso::
1567
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001568 The file :file:`tests/test_buffers.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001569 that demonstrates using the buffer protocol with pybind11 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +02001570
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001571.. [#f2] http://docs.python.org/3/c-api/buffer.html
Wenzel Jakob978e3762016-04-07 18:00:41 +02001572
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001573NumPy support
1574=============
1575
1576By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
1577restrict the function so that it only accepts NumPy arrays (rather than any
Wenzel Jakob978e3762016-04-07 18:00:41 +02001578type of Python object satisfying the buffer protocol).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001579
1580In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +02001581array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001582template. For instance, the following function requires the argument to be a
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001583NumPy array containing double precision values.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001584
1585.. code-block:: cpp
1586
Wenzel Jakob93296692015-10-13 23:21:54 +02001587 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001588
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001589When it is invoked with a different type (e.g. an integer or a list of
1590integers), the binding code will attempt to cast the input into a NumPy array
1591of the requested type. Note that this feature requires the
1592:file:``pybind11/numpy.h`` header to be included.
1593
1594Data in NumPy arrays is not guaranteed to packed in a dense manner;
1595furthermore, entries can be separated by arbitrary column and row strides.
1596Sometimes, it can be useful to require a function to only accept dense arrays
1597using either the C (row-major) or Fortran (column-major) ordering. This can be
1598accomplished via a second template argument with values ``py::array::c_style``
1599or ``py::array::f_style``.
1600
1601.. code-block:: cpp
1602
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001603 void f(py::array_t<double, py::array::c_style | py::array::forcecast> array);
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001604
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001605The ``py::array::forcecast`` argument is the default value of the second
Jason Rhinelander20ef6262016-09-21 13:39:02 -04001606template parameter, and it ensures that non-conforming arguments are converted
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001607into an array satisfying the specified requirements instead of trying the next
1608function overload.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001609
Ivan Smirnov223afe32016-07-02 15:33:04 +01001610NumPy structured types
1611======================
1612
1613In order for ``py::array_t`` to work with structured (record) types, we first need
Ivan Smirnov5412a052016-07-02 16:18:42 +01001614to register the memory layout of the type. This can be done via ``PYBIND11_NUMPY_DTYPE``
Ivan Smirnov223afe32016-07-02 15:33:04 +01001615macro which expects the type followed by field names:
1616
1617.. code-block:: cpp
1618
1619 struct A {
1620 int x;
1621 double y;
1622 };
1623
1624 struct B {
1625 int z;
1626 A a;
1627 };
1628
Ivan Smirnov5412a052016-07-02 16:18:42 +01001629 PYBIND11_NUMPY_DTYPE(A, x, y);
1630 PYBIND11_NUMPY_DTYPE(B, z, a);
Ivan Smirnov223afe32016-07-02 15:33:04 +01001631
1632 /* now both A and B can be used as template arguments to py::array_t */
1633
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001634Vectorizing functions
1635=====================
1636
1637Suppose we want to bind a function with the following signature to Python so
1638that it can process arbitrary NumPy array arguments (vectors, matrices, general
1639N-D arrays) in addition to its normal arguments:
1640
1641.. code-block:: cpp
1642
1643 double my_func(int x, float y, double z);
1644
Wenzel Jakob8f4eb002015-10-15 18:13:33 +02001645After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001646
1647.. code-block:: cpp
1648
1649 m.def("vectorized_func", py::vectorize(my_func));
1650
1651Invoking the function like below causes 4 calls to be made to ``my_func`` with
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001652each of the array elements. The significant advantage of this compared to
Wenzel Jakob978e3762016-04-07 18:00:41 +02001653solutions like ``numpy.vectorize()`` is that the loop over the elements runs
1654entirely on the C++ side and can be crunched down into a tight, optimized loop
1655by the compiler. The result is returned as a NumPy array of type
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001656``numpy.dtype.float64``.
1657
Wenzel Jakob99279f72016-06-03 11:19:29 +02001658.. code-block:: pycon
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001659
1660 >>> x = np.array([[1, 3],[5, 7]])
1661 >>> y = np.array([[2, 4],[6, 8]])
1662 >>> z = 3
1663 >>> result = vectorized_func(x, y, z)
1664
1665The scalar argument ``z`` is transparently replicated 4 times. The input
1666arrays ``x`` and ``y`` are automatically converted into the right types (they
1667are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
1668``numpy.dtype.float32``, respectively)
1669
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001670Sometimes we might want to explicitly exclude an argument from the vectorization
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001671because it makes little sense to wrap it in a NumPy array. For instance,
1672suppose the function signature was
1673
1674.. code-block:: cpp
1675
1676 double my_func(int x, float y, my_custom_type *z);
1677
1678This can be done with a stateful Lambda closure:
1679
1680.. code-block:: cpp
1681
1682 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
1683 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +02001684 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001685 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
1686 return py::vectorize(stateful_closure)(x, y);
1687 }
1688 );
1689
Wenzel Jakob61587162016-01-18 22:38:52 +01001690In cases where the computation is too complicated to be reduced to
1691``vectorize``, it will be necessary to create and access the buffer contents
1692manually. The following snippet contains a complete example that shows how this
1693works (the code is somewhat contrived, since it could have been done more
1694simply using ``vectorize``).
1695
1696.. code-block:: cpp
1697
1698 #include <pybind11/pybind11.h>
1699 #include <pybind11/numpy.h>
1700
1701 namespace py = pybind11;
1702
1703 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
1704 auto buf1 = input1.request(), buf2 = input2.request();
1705
1706 if (buf1.ndim != 1 || buf2.ndim != 1)
1707 throw std::runtime_error("Number of dimensions must be one");
1708
Ivan Smirnovb6518592016-08-13 13:28:56 +01001709 if (buf1.size != buf2.size)
Wenzel Jakob61587162016-01-18 22:38:52 +01001710 throw std::runtime_error("Input shapes must match");
1711
Ivan Smirnovb6518592016-08-13 13:28:56 +01001712 /* No pointer is passed, so NumPy will allocate the buffer */
1713 auto result = py::array_t<double>(buf1.size);
Wenzel Jakob61587162016-01-18 22:38:52 +01001714
1715 auto buf3 = result.request();
1716
1717 double *ptr1 = (double *) buf1.ptr,
1718 *ptr2 = (double *) buf2.ptr,
1719 *ptr3 = (double *) buf3.ptr;
1720
1721 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
1722 ptr3[idx] = ptr1[idx] + ptr2[idx];
1723
1724 return result;
1725 }
1726
1727 PYBIND11_PLUGIN(test) {
1728 py::module m("test");
1729 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
1730 return m.ptr();
1731 }
1732
Wenzel Jakob93296692015-10-13 23:21:54 +02001733.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001734
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001735 The file :file:`tests/test_numpy_vectorize.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001736 example that demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001737
Wenzel Jakob93296692015-10-13 23:21:54 +02001738Functions taking Python objects as arguments
1739============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001740
Wenzel Jakob93296692015-10-13 23:21:54 +02001741pybind11 exposes all major Python types using thin C++ wrapper classes. These
1742wrapper classes can also be used as parameters of functions in bindings, which
1743makes it possible to directly work with native Python types on the C++ side.
1744For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001745
Wenzel Jakob93296692015-10-13 23:21:54 +02001746.. code-block:: cpp
1747
1748 void print_dict(py::dict dict) {
1749 /* Easily interact with Python types */
1750 for (auto item : dict)
1751 std::cout << "key=" << item.first << ", "
1752 << "value=" << item.second << std::endl;
1753 }
1754
1755Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +01001756:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001757:class:`list`, :class:`dict`, :class:`slice`, :class:`none`, :class:`capsule`,
1758:class:`iterable`, :class:`iterator`, :class:`function`, :class:`buffer`,
1759:class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +02001760
Wenzel Jakob436b7312015-10-20 01:04:30 +02001761In this kind of mixed code, it is often necessary to convert arbitrary C++
1762types to Python, which can be done using :func:`cast`:
1763
1764.. code-block:: cpp
1765
1766 MyClass *cls = ..;
1767 py::object obj = py::cast(cls);
1768
1769The reverse direction uses the following syntax:
1770
1771.. code-block:: cpp
1772
1773 py::object obj = ...;
1774 MyClass *cls = obj.cast<MyClass *>();
1775
1776When conversion fails, both directions throw the exception :class:`cast_error`.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001777It is also possible to call python functions via ``operator()``.
1778
1779.. code-block:: cpp
1780
1781 py::function f = <...>;
1782 py::object result_py = f(1234, "hello", some_instance);
1783 MyClass &result = result_py.cast<MyClass>();
1784
Dean Moldovan625bd482016-09-02 16:40:49 +02001785Keyword arguments are also supported. In Python, there is the usual call syntax:
1786
1787.. code-block:: python
1788
1789 def f(number, say, to):
1790 ... # function code
1791
1792 f(1234, say="hello", to=some_instance) # keyword call in Python
1793
1794In C++, the same call can be made using:
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001795
1796.. code-block:: cpp
1797
Dean Moldovan625bd482016-09-02 16:40:49 +02001798 using pybind11::literals; // to bring in the `_a` literal
1799 f(1234, "say"_a="hello", "to"_a=some_instance); // keyword call in C++
1800
1801Unpacking of ``*args`` and ``**kwargs`` is also possible and can be mixed with
1802other arguments:
1803
1804.. code-block:: cpp
1805
1806 // * unpacking
1807 py::tuple args = py::make_tuple(1234, "hello", some_instance);
1808 f(*args);
1809
1810 // ** unpacking
1811 py::dict kwargs = py::dict("number"_a=1234, "say"_a="hello", "to"_a=some_instance);
1812 f(**kwargs);
1813
1814 // mixed keywords, * and ** unpacking
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001815 py::tuple args = py::make_tuple(1234);
Dean Moldovan625bd482016-09-02 16:40:49 +02001816 py::dict kwargs = py::dict("to"_a=some_instance);
1817 f(*args, "say"_a="hello", **kwargs);
1818
1819Generalized unpacking according to PEP448_ is also supported:
1820
1821.. code-block:: cpp
1822
1823 py::dict kwargs1 = py::dict("number"_a=1234);
1824 py::dict kwargs2 = py::dict("to"_a=some_instance);
1825 f(**kwargs1, "say"_a="hello", **kwargs2);
Wenzel Jakob436b7312015-10-20 01:04:30 +02001826
Wenzel Jakob93296692015-10-13 23:21:54 +02001827.. seealso::
1828
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001829 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001830 example that demonstrates passing native Python types in more detail. The
Dean Moldovan625bd482016-09-02 16:40:49 +02001831 file :file:`tests/test_callbacks.cpp` presents a few examples of calling
1832 Python functions from C++, including keywords arguments and unpacking.
1833
1834.. _PEP448: https://www.python.org/dev/peps/pep-0448/
1835
1836Using Python's print function in C++
1837====================================
1838
1839The usual way to write output in C++ is using ``std::cout`` while in Python one
1840would use ``print``. Since these methods use different buffers, mixing them can
1841lead to output order issues. To resolve this, pybind11 modules can use the
1842:func:`py::print` function which writes to Python's ``sys.stdout`` for consistency.
1843
1844Python's ``print`` function is replicated in the C++ API including optional
1845keyword arguments ``sep``, ``end``, ``file``, ``flush``. Everything works as
1846expected in Python:
1847
1848.. code-block:: cpp
1849
1850 py::print(1, 2.0, "three"); // 1 2.0 three
1851 py::print(1, 2.0, "three", "sep"_a="-"); // 1-2.0-three
1852
1853 auto args = py::make_tuple("unpacked", true);
1854 py::print("->", *args, "end"_a="<-"); // -> unpacked True <-
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001855
1856Default arguments revisited
1857===========================
1858
1859The section on :ref:`default_args` previously discussed basic usage of default
1860arguments using pybind11. One noteworthy aspect of their implementation is that
1861default arguments are converted to Python objects right at declaration time.
1862Consider the following example:
1863
1864.. code-block:: cpp
1865
1866 py::class_<MyClass>("MyClass")
1867 .def("myFunction", py::arg("arg") = SomeType(123));
1868
1869In this case, pybind11 must already be set up to deal with values of the type
1870``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
1871exception will be thrown.
1872
1873Another aspect worth highlighting is that the "preview" of the default argument
1874in the function signature is generated using the object's ``__repr__`` method.
1875If not available, the signature may not be very helpful, e.g.:
1876
Wenzel Jakob99279f72016-06-03 11:19:29 +02001877.. code-block:: pycon
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001878
1879 FUNCTIONS
1880 ...
1881 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +01001882 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001883 ...
1884
1885The first way of addressing this is by defining ``SomeType.__repr__``.
1886Alternatively, it is possible to specify the human-readable preview of the
1887default argument manually using the ``arg_t`` notation:
1888
1889.. code-block:: cpp
1890
1891 py::class_<MyClass>("MyClass")
1892 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
1893
Wenzel Jakobc769fce2016-03-03 12:03:30 +01001894Sometimes it may be necessary to pass a null pointer value as a default
1895argument. In this case, remember to cast it to the underlying type in question,
1896like so:
1897
1898.. code-block:: cpp
1899
1900 py::class_<MyClass>("MyClass")
1901 .def("myFunction", py::arg("arg") = (SomeType *) nullptr);
1902
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001903Binding functions that accept arbitrary numbers of arguments and keywords arguments
1904===================================================================================
1905
1906Python provides a useful mechanism to define functions that accept arbitrary
1907numbers of arguments and keyword arguments:
1908
1909.. code-block:: cpp
1910
1911 def generic(*args, **kwargs):
1912 # .. do something with args and kwargs
1913
1914Such functions can also be created using pybind11:
1915
1916.. code-block:: cpp
1917
1918 void generic(py::args args, py::kwargs kwargs) {
1919 /// .. do something with args
1920 if (kwargs)
1921 /// .. do something with kwargs
1922 }
1923
1924 /// Binding code
1925 m.def("generic", &generic);
1926
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001927(See ``tests/test_kwargs_and_defaults.cpp``). The class ``py::args``
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001928derives from ``py::list`` and ``py::kwargs`` derives from ``py::dict`` Note
1929that the ``kwargs`` argument is invalid if no keyword arguments were actually
1930provided. Please refer to the other examples for details on how to iterate
1931over these, and on how to cast their entries into C++ objects.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001932
Wenzel Jakob3764e282016-08-01 23:34:48 +02001933.. warning::
1934
1935 Unlike Python, pybind11 does not allow combining normal parameters with the
1936 ``args`` / ``kwargs`` special parameters.
1937
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001938Partitioning code over multiple extension modules
1939=================================================
1940
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001941It's straightforward to split binding code over multiple extension modules,
1942while referencing types that are declared elsewhere. Everything "just" works
1943without any special precautions. One exception to this rule occurs when
1944extending a type declared in another extension module. Recall the basic example
1945from Section :ref:`inheritance`.
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001946
1947.. code-block:: cpp
1948
1949 py::class_<Pet> pet(m, "Pet");
1950 pet.def(py::init<const std::string &>())
1951 .def_readwrite("name", &Pet::name);
1952
1953 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1954 .def(py::init<const std::string &>())
1955 .def("bark", &Dog::bark);
1956
1957Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1958whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1959course that the variable ``pet`` is not available anymore though it is needed
1960to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1961However, it can be acquired as follows:
1962
1963.. code-block:: cpp
1964
1965 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1966
1967 py::class_<Dog>(m, "Dog", pet)
1968 .def(py::init<const std::string &>())
1969 .def("bark", &Dog::bark);
1970
Jason Rhinelander6b52c832016-09-06 12:27:00 -04001971Alternatively, you can specify the base class as a template parameter option to
1972``class_``, which performs an automated lookup of the corresponding Python
1973type. Like the above code, however, this also requires invoking the ``import``
1974function once to ensure that the pybind11 binding code of the module ``basic``
1975has been executed:
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001976
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001977.. code-block:: cpp
1978
1979 py::module::import("basic");
1980
Jason Rhinelander6b52c832016-09-06 12:27:00 -04001981 py::class_<Dog, Pet>(m, "Dog")
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001982 .def(py::init<const std::string &>())
1983 .def("bark", &Dog::bark);
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001984
Wenzel Jakob978e3762016-04-07 18:00:41 +02001985Naturally, both methods will fail when there are cyclic dependencies.
1986
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001987Note that compiling code which has its default symbol visibility set to
1988*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
1989ability to access types defined in another extension module. Workarounds
1990include changing the global symbol visibility (not recommended, because it will
1991lead unnecessarily large binaries) or manually exporting types that are
1992accessed by multiple extension modules:
1993
1994.. code-block:: cpp
1995
1996 #ifdef _WIN32
1997 # define EXPORT_TYPE __declspec(dllexport)
1998 #else
1999 # define EXPORT_TYPE __attribute__ ((visibility("default")))
2000 #endif
2001
2002 class EXPORT_TYPE Dog : public Animal {
2003 ...
2004 };
2005
2006
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02002007Pickling support
2008================
2009
2010Python's ``pickle`` module provides a powerful facility to serialize and
2011de-serialize a Python object graph into a binary data stream. To pickle and
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02002012unpickle C++ classes using pybind11, two additional functions must be provided.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02002013Suppose the class in question has the following signature:
2014
2015.. code-block:: cpp
2016
2017 class Pickleable {
2018 public:
2019 Pickleable(const std::string &value) : m_value(value) { }
2020 const std::string &value() const { return m_value; }
2021
2022 void setExtra(int extra) { m_extra = extra; }
2023 int extra() const { return m_extra; }
2024 private:
2025 std::string m_value;
2026 int m_extra = 0;
2027 };
2028
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02002029The binding code including the requisite ``__setstate__`` and ``__getstate__`` methods [#f3]_
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02002030looks as follows:
2031
2032.. code-block:: cpp
2033
2034 py::class_<Pickleable>(m, "Pickleable")
2035 .def(py::init<std::string>())
2036 .def("value", &Pickleable::value)
2037 .def("extra", &Pickleable::extra)
2038 .def("setExtra", &Pickleable::setExtra)
2039 .def("__getstate__", [](const Pickleable &p) {
2040 /* Return a tuple that fully encodes the state of the object */
2041 return py::make_tuple(p.value(), p.extra());
2042 })
2043 .def("__setstate__", [](Pickleable &p, py::tuple t) {
2044 if (t.size() != 2)
2045 throw std::runtime_error("Invalid state!");
2046
Wenzel Jakobd40885a2016-04-13 13:30:05 +02002047 /* Invoke the in-place constructor. Note that this is needed even
2048 when the object just has a trivial default constructor */
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02002049 new (&p) Pickleable(t[0].cast<std::string>());
2050
2051 /* Assign any additional state */
2052 p.setExtra(t[1].cast<int>());
2053 });
2054
2055An instance can now be pickled as follows:
2056
2057.. code-block:: python
2058
2059 try:
2060 import cPickle as pickle # Use cPickle on Python 2.7
2061 except ImportError:
2062 import pickle
2063
2064 p = Pickleable("test_value")
2065 p.setExtra(15)
Wenzel Jakob81e09752016-04-30 23:13:03 +02002066 data = pickle.dumps(p, 2)
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02002067
Wenzel Jakob81e09752016-04-30 23:13:03 +02002068Note that only the cPickle module is supported on Python 2.7. The second
2069argument to ``dumps`` is also crucial: it selects the pickle protocol version
20702, since the older version 1 is not supported. Newer versions are also fine—for
2071instance, specify ``-1`` to always use the latest available version. Beware:
2072failure to follow these instructions will cause important pybind11 memory
2073allocation routines to be skipped during unpickling, which will likely lead to
2074memory corruption and/or segmentation faults.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02002075
2076.. seealso::
2077
Dean Moldovanec0d38e2016-08-13 03:09:52 +02002078 The file :file:`tests/test_pickling.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04002079 that demonstrates how to pickle and unpickle types using pybind11 in more
2080 detail.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02002081
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02002082.. [#f3] http://docs.python.org/3/library/pickle.html#pickling-class-instances
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02002083
2084Generating documentation using Sphinx
2085=====================================
2086
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02002087Sphinx [#f4]_ has the ability to inspect the signatures and documentation
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02002088strings in pybind11-based extension modules to automatically generate beautiful
Wenzel Jakobca8dc082016-06-03 14:24:17 +02002089documentation in a variety formats. The python_example repository [#f5]_ contains a
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02002090simple example repository which uses this approach.
2091
2092There are two potential gotchas when using this approach: first, make sure that
2093the resulting strings do not contain any :kbd:`TAB` characters, which break the
2094docstring parsing routines. You may want to use C++11 raw string literals,
2095which are convenient for multi-line comments. Conveniently, any excess
2096indentation will be automatically be removed by Sphinx. However, for this to
2097work, it is important that all lines are indented consistently, i.e.:
2098
2099.. code-block:: cpp
2100
2101 // ok
2102 m.def("foo", &foo, R"mydelimiter(
2103 The foo function
2104
2105 Parameters
2106 ----------
2107 )mydelimiter");
2108
2109 // *not ok*
2110 m.def("foo", &foo, R"mydelimiter(The foo function
2111
2112 Parameters
2113 ----------
2114 )mydelimiter");
2115
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02002116.. [#f4] http://www.sphinx-doc.org
Wenzel Jakobca8dc082016-06-03 14:24:17 +02002117.. [#f5] http://github.com/pybind/python_example
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002118
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002119Evaluating Python expressions from strings and files
2120====================================================
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002121
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002122pybind11 provides the :func:`eval` and :func:`eval_file` functions to evaluate
2123Python expressions and statements. The following example illustrates how they
2124can be used.
2125
2126Both functions accept a template parameter that describes how the argument
2127should be interpreted. Possible choices include ``eval_expr`` (isolated
2128expression), ``eval_single_statement`` (a single statement, return value is
2129always ``none``), and ``eval_statements`` (sequence of statements, return value
2130is always ``none``).
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002131
2132.. code-block:: cpp
2133
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002134 // At beginning of file
2135 #include <pybind11/eval.h>
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002136
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002137 ...
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002138
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002139 // Evaluate in scope of main module
2140 py::object scope = py::module::import("__main__").attr("__dict__");
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002141
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002142 // Evaluate an isolated expression
2143 int result = py::eval("my_variable + 10", scope).cast<int>();
2144
2145 // Evaluate a sequence of statements
2146 py::eval<py::eval_statements>(
2147 "print('Hello')\n"
2148 "print('world!');",
2149 scope);
2150
2151 // Evaluate the statements in an separate Python file on disk
2152 py::eval_file("script.py", scope);
Wenzel Jakob48ce0722016-09-06 14:13:22 +09002153
2154Development of custom type casters
2155==================================
2156
2157In very rare cases, applications may require custom type casters that cannot be
2158expressed using the abstractions provided by pybind11, thus requiring raw
2159Python C API calls. This is fairly advanced usage and should only be pursued by
2160experts who are familiar with the intricacies of Python reference counting.
2161
2162The following snippets demonstrate how this works for a very simple ``inty``
2163type that that should be convertible from Python types that provide a
2164``__int__(self)`` method.
2165
2166.. code-block:: cpp
2167
2168 struct inty { long long_value; };
2169
2170 void print(inty s) {
2171 std::cout << s.long_value << std::endl;
2172 }
2173
2174The following Python snippet demonstrates the intended usage from the Python side:
2175
2176.. code-block:: python
2177
2178 class A:
2179 def __int__(self):
2180 return 123
2181
2182 from example import print
2183 print(A())
2184
2185To register the necessary conversion routines, it is necessary to add
2186a partial overload to the ``pybind11::detail::type_caster<T>`` template.
2187Although this is an implementation detail, adding partial overloads to this
2188type is explicitly allowed.
2189
2190.. code-block:: cpp
2191
2192 namespace pybind11 {
2193 namespace detail {
2194 template <> struct type_caster<inty> {
2195 public:
2196 /**
2197 * This macro establishes the name 'inty' in
2198 * function signatures and declares a local variable
2199 * 'value' of type inty
2200 */
2201 PYBIND11_TYPE_CASTER(inty, _("inty"));
2202
2203 /**
2204 * Conversion part 1 (Python->C++): convert a PyObject into a inty
2205 * instance or return false upon failure. The second argument
2206 * indicates whether implicit conversions should be applied.
2207 */
2208 bool load(handle src, bool) {
2209 /* Extract PyObject from handle */
2210 PyObject *source = src.ptr();
2211 /* Try converting into a Python integer value */
2212 PyObject *tmp = PyNumber_Long(source);
2213 if (!tmp)
2214 return false;
2215 /* Now try to convert into a C++ int */
2216 value.long_value = PyLong_AsLong(tmp);
2217 Py_DECREF(tmp);
2218 /* Ensure return code was OK (to avoid out-of-range errors etc) */
2219 return !(value.long_value == -1 && !PyErr_Occurred());
2220 }
2221
2222 /**
2223 * Conversion part 2 (C++ -> Python): convert an inty instance into
2224 * a Python object. The second and third arguments are used to
2225 * indicate the return value policy and parent object (for
2226 * ``return_value_policy::reference_internal``) and are generally
2227 * ignored by implicit casters.
2228 */
2229 static handle cast(inty src, return_value_policy /* policy */, handle /* parent */) {
2230 return PyLong_FromLong(src.long_value);
2231 }
2232 };
2233 }
2234 };
Wenzel Jakob8e5dceb2016-09-11 20:00:40 +09002235
2236Multiple Inheritance
2237====================
2238
2239pybind11 can create bindings for types that derive from multiple base types
2240(aka. *multiple inheritance*). To do so, specify all bases in the template
2241arguments of the ``class_`` declaration:
2242
2243.. code-block:: cpp
2244
2245 py::class_<MyType, BaseType1, BaseType2, BaseType3>(m, "MyType")
2246 ...
2247
2248The base types can be specified in arbitrary order, and they can even be
2249interspersed with alias types and holder types (discussed earlier in this
2250document)---pybind11 will automatically find out which is which. The only
2251requirement is that the first template argument is the type to be declared.
2252
2253There are two caveats regarding the implementation of this feature:
2254
22551. When only one base type is specified for a C++ type that actually has
2256 multiple bases, pybind11 will assume that it does not participate in
2257 multiple inheritance, which can lead to undefined behavior. In such cases,
2258 add the tag ``multiple_inheritance``:
2259
2260 .. code-block:: cpp
2261
2262 py::class_<MyType, BaseType2>(m, "MyType", py::multiple_inheritance());
2263
2264 The tag is redundant and does not need to be specified when multiple base
2265 types are listed.
2266
22672. As was previously discussed in the section on :ref:`overriding_virtuals`, it
2268 is easy to create Python types that derive from C++ classes. It is even
2269 possible to make use of multiple inheritance to declare a Python class which
2270 has e.g. a C++ and a Python class as bases. However, any attempt to create a
2271 type that has *two or more* C++ classes in its hierarchy of base types will
2272 fail with a fatal error message: ``TypeError: multiple bases have instance
2273 lay-out conflict``. Core Python types that are implemented in C (e.g.
2274 ``dict``, ``list``, ``Exception``, etc.) also fall under this combination
2275 and cannot be combined with C++ types bound using pybind11 via multiple
2276 inheritance.