blob: 8cf771beffe50f437051f7619a95cb48906724cc [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 Jakob28f98aa2015-10-13 02:57:16 +0200220Overriding virtual functions in Python
221======================================
222
Wenzel Jakob93296692015-10-13 23:21:54 +0200223Suppose that a C++ class or interface has a virtual function that we'd like to
224to override from within Python (we'll focus on the class ``Animal``; ``Dog`` is
225given as a specific example of how one would do this with traditional C++
226code).
227
228.. code-block:: cpp
229
230 class Animal {
231 public:
232 virtual ~Animal() { }
233 virtual std::string go(int n_times) = 0;
234 };
235
236 class Dog : public Animal {
237 public:
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400238 std::string go(int n_times) override {
Wenzel Jakob93296692015-10-13 23:21:54 +0200239 std::string result;
240 for (int i=0; i<n_times; ++i)
241 result += "woof! ";
242 return result;
243 }
244 };
245
246Let's also suppose that we are given a plain function which calls the
247function ``go()`` on an arbitrary ``Animal`` instance.
248
249.. code-block:: cpp
250
251 std::string call_go(Animal *animal) {
252 return animal->go(3);
253 }
254
255Normally, the binding code for these classes would look as follows:
256
257.. code-block:: cpp
258
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200259 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200260 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200261
262 py::class_<Animal> animal(m, "Animal");
263 animal
264 .def("go", &Animal::go);
265
266 py::class_<Dog>(m, "Dog", animal)
267 .def(py::init<>());
268
269 m.def("call_go", &call_go);
270
271 return m.ptr();
272 }
273
274However, these bindings are impossible to extend: ``Animal`` is not
275constructible, and we clearly require some kind of "trampoline" that
276redirects virtual calls back to Python.
277
278Defining a new type of ``Animal`` from within Python is possible but requires a
279helper class that is defined as follows:
280
281.. code-block:: cpp
282
283 class PyAnimal : public Animal {
284 public:
285 /* Inherit the constructors */
286 using Animal::Animal;
287
288 /* Trampoline (need one for each virtual function) */
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400289 std::string go(int n_times) override {
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200290 PYBIND11_OVERLOAD_PURE(
Wenzel Jakob93296692015-10-13 23:21:54 +0200291 std::string, /* Return type */
292 Animal, /* Parent class */
293 go, /* Name of function */
294 n_times /* Argument(s) */
295 );
296 }
297 };
298
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200299The macro :func:`PYBIND11_OVERLOAD_PURE` should be used for pure virtual
300functions, and :func:`PYBIND11_OVERLOAD` should be used for functions which have
Jason Rhinelander7dfb9322016-09-08 14:49:43 -0400301a default implementation. There are also two alternate macros
302:func:`PYBIND11_OVERLOAD_PURE_NAME` and :func:`PYBIND11_OVERLOAD_NAME` which
303take a string-valued name argument between the *Parent class* and *Name of the
304function* slots. This is useful when the C++ and Python versions of the
305function have different names, e.g. ``operator()`` vs ``__call__``.
Wenzel Jakob1e3be732016-05-24 23:42:05 +0200306
307The binding code also needs a few minor adaptations (highlighted):
Wenzel Jakob93296692015-10-13 23:21:54 +0200308
309.. code-block:: cpp
310 :emphasize-lines: 4,6,7
311
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200312 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200313 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200314
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400315 py::class_<Animal, PyAnimal /* <--- trampoline*/> animal(m, "Animal");
Wenzel Jakob93296692015-10-13 23:21:54 +0200316 animal
Wenzel Jakob93296692015-10-13 23:21:54 +0200317 .def(py::init<>())
318 .def("go", &Animal::go);
319
320 py::class_<Dog>(m, "Dog", animal)
321 .def(py::init<>());
322
323 m.def("call_go", &call_go);
324
325 return m.ptr();
326 }
327
Jason Rhinelander6eca0832016-09-08 13:25:45 -0400328Importantly, pybind11 is made aware of the trampoline helper class by
329specifying it as an extra template argument to :class:`class_`. (This can also
330be combined with other template arguments such as a custom holder type; the
331order of template types does not matter). Following this, we are able to
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400332define a constructor as usual.
Wenzel Jakob93296692015-10-13 23:21:54 +0200333
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400334Note, however, that the above is sufficient for allowing python classes to
335extend ``Animal``, but not ``Dog``: see ref:`virtual_and_inheritance` for the
336necessary steps required to providing proper overload support for inherited
337classes.
338
Wenzel Jakob93296692015-10-13 23:21:54 +0200339The Python session below shows how to override ``Animal::go`` and invoke it via
340a virtual method call.
341
Wenzel Jakob99279f72016-06-03 11:19:29 +0200342.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200343
344 >>> from example import *
345 >>> d = Dog()
346 >>> call_go(d)
347 u'woof! woof! woof! '
348 >>> class Cat(Animal):
349 ... def go(self, n_times):
350 ... return "meow! " * n_times
351 ...
352 >>> c = Cat()
353 >>> call_go(c)
354 u'meow! meow! meow! '
355
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200356Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakobbd986fe2016-05-21 10:48:30 +0200357
Jason Rhinelander7dfb9322016-09-08 14:49:43 -0400358.. note::
359
360 When the overridden type returns a reference or pointer to a type that
361 pybind11 converts from Python (for example, numeric values, std::string,
362 and other built-in value-converting types), there are some limitations to
363 be aware of:
364
365 - because in these cases there is no C++ variable to reference (the value
366 is stored in the referenced Python variable), pybind11 provides one in
367 the PYBIND11_OVERLOAD macros (when needed) with static storage duration.
368 Note that this means that invoking the overloaded method on *any*
369 instance will change the referenced value stored in *all* instances of
370 that type.
371
372 - Attempts to modify a non-const reference will not have the desired
373 effect: it will change only the static cache variable, but this change
374 will not propagate to underlying Python instance, and the change will be
375 replaced the next time the overload is invoked.
376
Wenzel Jakob93296692015-10-13 23:21:54 +0200377.. seealso::
378
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200379 The file :file:`tests/test_virtual_functions.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400380 example that demonstrates how to override virtual functions using pybind11
381 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200382
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400383.. _virtual_and_inheritance:
384
385Combining virtual functions and inheritance
386===========================================
387
388When combining virtual methods with inheritance, you need to be sure to provide
389an override for each method for which you want to allow overrides from derived
390python classes. For example, suppose we extend the above ``Animal``/``Dog``
391example as follows:
392
393.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200394
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400395 class Animal {
396 public:
397 virtual std::string go(int n_times) = 0;
398 virtual std::string name() { return "unknown"; }
399 };
400 class Dog : public class Animal {
401 public:
402 std::string go(int n_times) override {
403 std::string result;
404 for (int i=0; i<n_times; ++i)
405 result += bark() + " ";
406 return result;
407 }
408 virtual std::string bark() { return "woof!"; }
409 };
410
411then the trampoline class for ``Animal`` must, as described in the previous
412section, override ``go()`` and ``name()``, but in order to allow python code to
413inherit properly from ``Dog``, we also need a trampoline class for ``Dog`` that
414overrides both the added ``bark()`` method *and* the ``go()`` and ``name()``
415methods inherited from ``Animal`` (even though ``Dog`` doesn't directly
416override the ``name()`` method):
417
418.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200419
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400420 class PyAnimal : public Animal {
421 public:
422 using Animal::Animal; // Inherit constructors
423 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Animal, go, n_times); }
424 std::string name() override { PYBIND11_OVERLOAD(std::string, Animal, name, ); }
425 };
426 class PyDog : public Dog {
427 public:
428 using Dog::Dog; // Inherit constructors
429 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Dog, go, n_times); }
430 std::string name() override { PYBIND11_OVERLOAD(std::string, Dog, name, ); }
431 std::string bark() override { PYBIND11_OVERLOAD(std::string, Dog, bark, ); }
432 };
433
434A registered class derived from a pybind11-registered class with virtual
435methods requires a similar trampoline class, *even if* it doesn't explicitly
436declare or override any virtual methods itself:
437
438.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200439
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400440 class Husky : public Dog {};
441 class PyHusky : public Husky {
442 using Dog::Dog; // Inherit constructors
443 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Husky, go, n_times); }
444 std::string name() override { PYBIND11_OVERLOAD(std::string, Husky, name, ); }
445 std::string bark() override { PYBIND11_OVERLOAD(std::string, Husky, bark, ); }
446 };
447
448There is, however, a technique that can be used to avoid this duplication
449(which can be especially helpful for a base class with several virtual
450methods). The technique involves using template trampoline classes, as
451follows:
452
453.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200454
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400455 template <class AnimalBase = Animal> class PyAnimal : public AnimalBase {
456 using AnimalBase::AnimalBase; // Inherit constructors
457 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, AnimalBase, go, n_times); }
458 std::string name() override { PYBIND11_OVERLOAD(std::string, AnimalBase, name, ); }
459 };
460 template <class DogBase = Dog> class PyDog : public PyAnimal<DogBase> {
461 using PyAnimal<DogBase>::PyAnimal; // Inherit constructors
462 // Override PyAnimal's pure virtual go() with a non-pure one:
463 std::string go(int n_times) override { PYBIND11_OVERLOAD(std::string, DogBase, go, n_times); }
464 std::string bark() override { PYBIND11_OVERLOAD(std::string, DogBase, bark, ); }
465 };
466
467This technique has the advantage of requiring just one trampoline method to be
468declared per virtual method and pure virtual method override. It does,
469however, require the compiler to generate at least as many methods (and
470possibly more, if both pure virtual and overridden pure virtual methods are
471exposed, as above).
472
473The classes are then registered with pybind11 using:
474
475.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200476
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400477 py::class_<Animal, PyAnimal<>> animal(m, "Animal");
478 py::class_<Dog, PyDog<>> dog(m, "Dog");
479 py::class_<Husky, PyDog<Husky>> husky(m, "Husky");
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400480 // ... add animal, dog, husky definitions
481
482Note that ``Husky`` did not require a dedicated trampoline template class at
483all, since it neither declares any new virtual methods nor provides any pure
484virtual method implementations.
485
486With either the repeated-virtuals or templated trampoline methods in place, you
487can now create a python class that inherits from ``Dog``:
488
489.. code-block:: python
490
491 class ShihTzu(Dog):
492 def bark(self):
493 return "yip!"
494
495.. seealso::
496
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200497 See the file :file:`tests/test_virtual_functions.cpp` for complete examples
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400498 using both the duplication and templated trampoline approaches.
499
Jason Rhinelanderec62d972016-09-09 02:42:51 -0400500Extended trampoline class functionality
501=======================================
502
503The trampoline classes described in the previous sections are, by default, only
504initialized when needed. More specifically, they are initialized when a python
505class actually inherits from a registered type (instead of merely creating an
506instance of the registered type), or when a registered constructor is only
507valid for the trampoline class but not the registered class. This is primarily
508for performance reasons: when the trampoline class is not needed for anything
509except virtual method dispatching, not initializing the trampoline class
510improves performance by avoiding needing to do a run-time check to see if the
511inheriting python instance has an overloaded method.
512
513Sometimes, however, it is useful to always initialize a trampoline class as an
514intermediate class that does more than just handle virtual method dispatching.
515For example, such a class might perform extra class initialization, extra
516destruction operations, and might define new members and methods to enable a
517more python-like interface to a class.
518
519In order to tell pybind11 that it should *always* initialize the trampoline
520class when creating new instances of a type, the class constructors should be
521declared using ``py::init_alias<Args, ...>()`` instead of the usual
522``py::init<Args, ...>()``. This forces construction via the trampoline class,
523ensuring member initialization and (eventual) destruction.
524
525.. seealso::
526
527 See the file :file:`tests/test_alias_initialization.cpp` for complete examples
528 showing both normal and forced trampoline instantiation.
529
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200530.. _macro_notes:
531
532General notes regarding convenience macros
533==========================================
534
535pybind11 provides a few convenience macros such as
536:func:`PYBIND11_MAKE_OPAQUE` and :func:`PYBIND11_DECLARE_HOLDER_TYPE`, and
537``PYBIND11_OVERLOAD_*``. Since these are "just" macros that are evaluated
538in the preprocessor (which has no concept of types), they *will* get confused
539by commas in a template argument such as ``PYBIND11_OVERLOAD(MyReturnValue<T1,
540T2>, myFunc)``. In this case, the preprocessor assumes that the comma indicates
541the beginnning of the next parameter. Use a ``typedef`` to bind the template to
542another name and use it in the macro to avoid this problem.
543
544
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100545Global Interpreter Lock (GIL)
546=============================
547
548The classes :class:`gil_scoped_release` and :class:`gil_scoped_acquire` can be
549used to acquire and release the global interpreter lock in the body of a C++
550function call. In this way, long-running C++ code can be parallelized using
551multiple Python threads. Taking the previous section as an example, this could
552be realized as follows (important changes highlighted):
553
554.. code-block:: cpp
555 :emphasize-lines: 8,9,33,34
556
557 class PyAnimal : public Animal {
558 public:
559 /* Inherit the constructors */
560 using Animal::Animal;
561
562 /* Trampoline (need one for each virtual function) */
563 std::string go(int n_times) {
564 /* Acquire GIL before calling Python code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100565 py::gil_scoped_acquire acquire;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100566
567 PYBIND11_OVERLOAD_PURE(
568 std::string, /* Return type */
569 Animal, /* Parent class */
570 go, /* Name of function */
571 n_times /* Argument(s) */
572 );
573 }
574 };
575
576 PYBIND11_PLUGIN(example) {
577 py::module m("example", "pybind11 example plugin");
578
Jason Rhinelander5fffe202016-09-06 12:17:06 -0400579 py::class_<Animal, PyAnimal> animal(m, "Animal");
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100580 animal
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100581 .def(py::init<>())
582 .def("go", &Animal::go);
583
584 py::class_<Dog>(m, "Dog", animal)
585 .def(py::init<>());
586
587 m.def("call_go", [](Animal *animal) -> std::string {
588 /* Release GIL before calling into (potentially long-running) C++ code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100589 py::gil_scoped_release release;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100590 return call_go(animal);
591 });
592
593 return m.ptr();
594 }
595
Wenzel Jakob93296692015-10-13 23:21:54 +0200596Passing STL data structures
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200597===========================
598
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200599When including the additional header file :file:`pybind11/stl.h`, conversions
Wenzel Jakob978e3762016-04-07 18:00:41 +0200600between ``std::vector<>``, ``std::list<>``, ``std::set<>``, and ``std::map<>``
601and the Python ``list``, ``set`` and ``dict`` data structures are automatically
602enabled. The types ``std::pair<>`` and ``std::tuple<>`` are already supported
603out of the box with just the core :file:`pybind11/pybind11.h` header.
Wenzel Jakob93296692015-10-13 23:21:54 +0200604
Wenzel Jakobfe342412016-09-06 13:02:29 +0900605The major downside of these implicit conversions is that containers must be
606converted (i.e. copied) on every Python->C++ and C++->Python transition, which
607can have implications on the program semantics and performance. Please read the
608next sections for more details and alternative approaches that avoid this.
Sergey Lyskov75204182016-08-29 22:50:38 -0400609
Wenzel Jakob93296692015-10-13 23:21:54 +0200610.. note::
611
Wenzel Jakobfe342412016-09-06 13:02:29 +0900612 Arbitrary nesting of any of these types is possible.
Wenzel Jakob93296692015-10-13 23:21:54 +0200613
614.. seealso::
615
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200616 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400617 example that demonstrates how to pass STL data types in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200618
Wenzel Jakobfe342412016-09-06 13:02:29 +0900619.. _opaque:
620
621Treating STL data structures as opaque objects
622==============================================
623
624pybind11 heavily relies on a template matching mechanism to convert parameters
625and return values that are constructed from STL data types such as vectors,
626linked lists, hash tables, etc. This even works in a recursive manner, for
627instance to deal with lists of hash maps of pairs of elementary and custom
628types, etc.
629
630However, a fundamental limitation of this approach is that internal conversions
631between Python and C++ types involve a copy operation that prevents
632pass-by-reference semantics. What does this mean?
633
634Suppose we bind the following function
635
636.. code-block:: cpp
637
638 void append_1(std::vector<int> &v) {
639 v.push_back(1);
640 }
641
642and call it from Python, the following happens:
643
644.. code-block:: pycon
645
646 >>> v = [5, 6]
647 >>> append_1(v)
648 >>> print(v)
649 [5, 6]
650
651As you can see, when passing STL data structures by reference, modifications
652are not propagated back the Python side. A similar situation arises when
653exposing STL data structures using the ``def_readwrite`` or ``def_readonly``
654functions:
655
656.. code-block:: cpp
657
658 /* ... definition ... */
659
660 class MyClass {
661 std::vector<int> contents;
662 };
663
664 /* ... binding code ... */
665
666 py::class_<MyClass>(m, "MyClass")
667 .def(py::init<>)
668 .def_readwrite("contents", &MyClass::contents);
669
670In this case, properties can be read and written in their entirety. However, an
671``append`` operaton involving such a list type has no effect:
672
673.. code-block:: pycon
674
675 >>> m = MyClass()
676 >>> m.contents = [5, 6]
677 >>> print(m.contents)
678 [5, 6]
679 >>> m.contents.append(7)
680 >>> print(m.contents)
681 [5, 6]
682
683Finally, the involved copy operations can be costly when dealing with very
684large lists. To deal with all of the above situations, pybind11 provides a
685macro named ``PYBIND11_MAKE_OPAQUE(T)`` that disables the template-based
686conversion machinery of types, thus rendering them *opaque*. The contents of
687opaque objects are never inspected or extracted, hence they *can* be passed by
688reference. For instance, to turn ``std::vector<int>`` into an opaque type, add
689the declaration
690
691.. code-block:: cpp
692
693 PYBIND11_MAKE_OPAQUE(std::vector<int>);
694
695before any binding code (e.g. invocations to ``class_::def()``, etc.). This
696macro must be specified at the top level (and outside of any namespaces), since
697it instantiates a partial template overload. If your binding code consists of
698multiple compilation units, it must be present in every file preceding any
699usage of ``std::vector<int>``. Opaque types must also have a corresponding
700``class_`` declaration to associate them with a name in Python, and to define a
701set of available operations, e.g.:
702
703.. code-block:: cpp
704
705 py::class_<std::vector<int>>(m, "IntVector")
706 .def(py::init<>())
707 .def("clear", &std::vector<int>::clear)
708 .def("pop_back", &std::vector<int>::pop_back)
709 .def("__len__", [](const std::vector<int> &v) { return v.size(); })
710 .def("__iter__", [](std::vector<int> &v) {
711 return py::make_iterator(v.begin(), v.end());
712 }, py::keep_alive<0, 1>()) /* Keep vector alive while iterator is used */
713 // ....
714
715The ability to expose STL containers as native Python objects is a fairly
716common request, hence pybind11 also provides an optional header file named
717:file:`pybind11/stl_bind.h` that does exactly this. The mapped containers try
718to match the behavior of their native Python counterparts as much as possible.
719
720The following example showcases usage of :file:`pybind11/stl_bind.h`:
721
722.. code-block:: cpp
723
724 // Don't forget this
725 #include <pybind11/stl_bind.h>
726
727 PYBIND11_MAKE_OPAQUE(std::vector<int>);
728 PYBIND11_MAKE_OPAQUE(std::map<std::string, double>);
729
730 // ...
731
732 // later in binding code:
733 py::bind_vector<std::vector<int>>(m, "VectorInt");
734 py::bind_map<std::map<std::string, double>>(m, "MapStringDouble");
735
736Please take a look at the :ref:`macro_notes` before using the
737``PYBIND11_MAKE_OPAQUE`` macro.
738
739.. seealso::
740
741 The file :file:`tests/test_opaque_types.cpp` contains a complete
742 example that demonstrates how to create and expose opaque types using
743 pybind11 in more detail.
744
745 The file :file:`tests/test_stl_binders.cpp` shows how to use the
746 convenience STL container wrappers.
747
748
Wenzel Jakobb2825952016-04-13 23:33:00 +0200749Binding sequence data types, iterators, the slicing protocol, etc.
750==================================================================
Wenzel Jakob93296692015-10-13 23:21:54 +0200751
752Please refer to the supplemental example for details.
753
754.. seealso::
755
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200756 The file :file:`tests/test_sequences_and_iterators.cpp` contains a
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400757 complete example that shows how to bind a sequence data type, including
758 length queries (``__len__``), iterators (``__iter__``), the slicing
759 protocol and other kinds of useful operations.
Wenzel Jakob93296692015-10-13 23:21:54 +0200760
Trent Houliston352149e2016-08-25 23:08:04 +1000761C++11 chrono datatypes
762======================
Trent Houliston352149e2016-08-25 23:08:04 +1000763
Trent Houliston10a6a902016-09-28 01:01:59 +1000764When including the additional header file :file:`pybind11/chrono.h` conversions
765from C++11 chrono datatypes to python datetime objects are automatically enabled.
766This header also enables conversions of python floats (often from sources such
767as `time.monotonic()`, `time.perf_counter()` and `time.process_time()`) into
768durations.
Trent Houliston352149e2016-08-25 23:08:04 +1000769
Trent Houliston10a6a902016-09-28 01:01:59 +1000770An overview of clocks in C++11
771------------------------------
Trent Houliston352149e2016-08-25 23:08:04 +1000772
Trent Houliston10a6a902016-09-28 01:01:59 +1000773A point of confusion when using these conversions is the differences between
774clocks provided in C++11. There are three clock types defined by the C++11
775standard and users can define their own if needed. Each of these clocks have
776different properties and when converting to and from python will give different
777results.
Trent Houliston2f597682016-09-13 20:40:28 +1000778
Trent Houliston10a6a902016-09-28 01:01:59 +1000779The first clock defined by the standard is ``std::chrono::system_clock``. This
780clock measures the current date and time. However, this clock changes with to
781updates to the operating system time. For example, if your time is synchronised
782with a time server this clock will change. This makes this clock a poor choice
783for timing purposes but good for measuring the wall time.
Trent Houliston352149e2016-08-25 23:08:04 +1000784
Trent Houliston10a6a902016-09-28 01:01:59 +1000785The second clock defined in the standard is ``std::chrono::steady_clock``.
786This clock ticks at a steady rate and is never adjusted. This makes it excellent
787for timing purposes, however the value in this clock does not correspond to the
788current date and time. Often this clock will be the amount of time your system
789has been on, although it does not have to be. This clock will never be the same
790clock as the system clock as the system clock can change but steady clocks
791cannot.
Trent Houliston352149e2016-08-25 23:08:04 +1000792
Trent Houliston10a6a902016-09-28 01:01:59 +1000793The third clock defined in the standard is ``std::chrono::high_resolution_clock``.
794This clock is the clock that has the highest resolution out of the clocks in the
795system. It is normally a typedef to either the system clock or the steady clock
796but can be its own independent clock. This is important as when using these
797conversions as the types you get in python for this clock might be different
798depending on the system.
799If it is a typedef of the system clock, python will get datetime objects, but if
800it is a different clock they will be timedelta objects.
Trent Houliston2f597682016-09-13 20:40:28 +1000801
Trent Houliston10a6a902016-09-28 01:01:59 +1000802Conversions Provided
803--------------------
804
805C++ to Python
806 - ``std::chrono::system_clock::time_point`` → ``datetime.datetime``
807 System clock times are converted to python datetime instances. They are
808 in the local timezone, but do not have any timezone information attached
809 to them (they are naive datetime objects).
810
811 - ``std::chrono::duration`` → ``datetime.timedelta``
812 Durations are converted to timedeltas, any precision in the duration
813 greater than microseconds is lost by rounding towards zero.
814
815 - ``std::chrono::[other_clocks]::time_point`` → ``datetime.timedelta``
816 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.
817
818Python to C++
819 - ``datetime.datetime`` → ``std::chrono::system_clock::time_point``
820 Date/time objects are converted into system clock timepoints. Any
821 timezone information is ignored and the type is treated as a naive
822 object.
823
824 - ``datetime.timedelta`` → ``std::chrono::duration``
825 Time delta are converted into durations with microsecond precision.
826
827 - ``datetime.timedelta`` → ``std::chrono::[other_clocks]::time_point``
828 Time deltas that are converted into clock timepoints are treated as
829 the amount of time from the start of the clocks epoch.
830
831 - ``float`` → ``std::chrono::duration``
832 Floats that are passed to C++ as durations be interpreted as a number of
833 seconds. These will be converted to the duration using ``duration_cast``
834 from the float.
835
836 - ``float`` → ``std::chrono::[other_clocks]::time_point``
837 Floats that are passed to C++ as time points will be interpreted as the
838 number of seconds from the start of the clocks epoch.
Trent Houliston352149e2016-08-25 23:08:04 +1000839
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200840Return value policies
841=====================
842
Wenzel Jakob93296692015-10-13 23:21:54 +0200843Python and C++ use wildly different ways of managing the memory and lifetime of
844objects managed by them. This can lead to issues when creating bindings for
845functions that return a non-trivial type. Just by looking at the type
846information, it is not clear whether Python should take charge of the returned
847value and eventually free its resources, or if this is handled on the C++ side.
848For this reason, pybind11 provides a several `return value policy` annotations
849that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100850functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200851
Wenzel Jakobbf099582016-08-22 12:52:02 +0200852Return value policies can also be applied to properties, in which case the
853arguments must be passed through the :class:`cpp_function` constructor:
854
855.. code-block:: cpp
856
857 class_<MyClass>(m, "MyClass")
858 def_property("data"
859 py::cpp_function(&MyClass::getData, py::return_value_policy::copy),
860 py::cpp_function(&MyClass::setData)
861 );
862
863The following table provides an overview of the available return value policies:
864
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200865.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
866
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200867+--------------------------------------------------+----------------------------------------------------------------------------+
868| Return value policy | Description |
869+==================================================+============================================================================+
870| :enum:`return_value_policy::automatic` | This is the default return value policy, which falls back to the policy |
871| | :enum:`return_value_policy::take_ownership` when the return value is a |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200872| | pointer. Otherwise, it uses :enum:`return_value::move` or |
873| | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200874| | See below for a description of what all of these different policies do. |
875+--------------------------------------------------+----------------------------------------------------------------------------+
876| :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 +0200877| | return value is a pointer. This is the default conversion policy for |
878| | function arguments when calling Python functions manually from C++ code |
879| | (i.e. via handle::operator()). You probably won't need to use this. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200880+--------------------------------------------------+----------------------------------------------------------------------------+
881| :enum:`return_value_policy::take_ownership` | Reference an existing object (i.e. do not create a new copy) and take |
882| | ownership. Python will call the destructor and delete operator when the |
883| | object's reference count reaches zero. Undefined behavior ensues when the |
Wenzel Jakobf53e3002016-06-30 14:59:23 +0200884| | C++ side does the same. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200885+--------------------------------------------------+----------------------------------------------------------------------------+
886| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python. |
887| | This policy is comparably safe because the lifetimes of the two instances |
888| | are decoupled. |
889+--------------------------------------------------+----------------------------------------------------------------------------+
890| :enum:`return_value_policy::move` | Use ``std::move`` to move the return value contents into a new instance |
891| | that will be owned by Python. This policy is comparably safe because the |
892| | lifetimes of the two instances (move source and destination) are decoupled.|
893+--------------------------------------------------+----------------------------------------------------------------------------+
894| :enum:`return_value_policy::reference` | Reference an existing object, but do not take ownership. The C++ side is |
895| | responsible for managing the object's lifetime and deallocating it when |
896| | it is no longer used. Warning: undefined behavior will ensue when the C++ |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200897| | side deletes an object that is still referenced and used by Python. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200898+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakobbf099582016-08-22 12:52:02 +0200899| :enum:`return_value_policy::reference_internal` | Indicates that the lifetime of the return value is tied to the lifetime |
900| | of a parent object, namely the implicit ``this``, or ``self`` argument of |
901| | the called method or property. Internally, this policy works just like |
902| | :enum:`return_value_policy::reference` but additionally applies a |
903| | ``keep_alive<0, 1>`` *call policy* (described in the next section) that |
904| | prevents the parent object from being garbage collected as long as the |
905| | return value is referenced by Python. This is the default policy for |
Trent Houliston10a6a902016-09-28 01:01:59 +1000906| | property getters created via ``def_property``, ``def_readwrite``, etc. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200907+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200908
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200909.. warning::
910
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400911 Code with invalid return value policies might access unitialized memory or
912 free data structures multiple times, which can lead to hard-to-debug
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200913 non-determinism and segmentation faults, hence it is worth spending the
914 time to understand all the different options in the table above.
915
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400916One important aspect of the above policies is that they only apply to instances
917which pybind11 has *not* seen before, in which case the policy clarifies
918essential questions about the return value's lifetime and ownership. When
919pybind11 knows the instance already (as identified by its type and address in
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200920memory), it will return the existing Python object wrapper rather than creating
Wenzel Jakobbf099582016-08-22 12:52:02 +0200921a new copy.
nafur717df752016-06-28 18:07:11 +0200922
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200923.. note::
924
925 The next section on :ref:`call_policies` discusses *call policies* that can be
926 specified *in addition* to a return value policy from the list above. Call
927 policies indicate reference relationships that can involve both return values
928 and parameters of functions.
929
930.. note::
931
932 As an alternative to elaborate call policies and lifetime management logic,
933 consider using smart pointers (see the section on :ref:`smart_pointers` for
934 details). Smart pointers can tell whether an object is still referenced from
935 C++ or Python, which generally eliminates the kinds of inconsistencies that
936 can lead to crashes or undefined behavior. For functions returning smart
937 pointers, it is not necessary to specify a return value policy.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100938
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200939.. _call_policies:
940
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100941Additional call policies
942========================
943
944In addition to the above return value policies, further `call policies` can be
945specified to indicate dependencies between parameters. There is currently just
946one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
947argument with index ``Patient`` should be kept alive at least until the
Wenzel Jakob0b632312016-08-18 10:58:21 +0200948argument with index ``Nurse`` is freed by the garbage collector. Argument
949indices start at one, while zero refers to the return value. For methods, index
950``1`` refers to the implicit ``this`` pointer, while regular arguments begin at
951index ``2``. Arbitrarily many call policies can be specified. When a ``Nurse``
952with value ``None`` is detected at runtime, the call policy does nothing.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100953
Wenzel Jakob0b632312016-08-18 10:58:21 +0200954This feature internally relies on the ability to create a *weak reference* to
955the nurse object, which is permitted by all classes exposed via pybind11. When
956the nurse object does not support weak references, an exception will be thrown.
957
958Consider the following example: here, the binding code for a list append
959operation ties the lifetime of the newly added element to the underlying
960container:
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100961
962.. code-block:: cpp
963
964 py::class_<List>(m, "List")
965 .def("append", &List::append, py::keep_alive<1, 2>());
966
967.. note::
968
969 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
970 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
971 0) policies from Boost.Python.
972
Wenzel Jakob61587162016-01-18 22:38:52 +0100973.. seealso::
974
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200975 The file :file:`tests/test_keep_alive.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400976 that demonstrates using :class:`keep_alive` in more detail.
Wenzel Jakob61587162016-01-18 22:38:52 +0100977
Wenzel Jakob93296692015-10-13 23:21:54 +0200978Implicit type conversions
979=========================
980
981Suppose that instances of two types ``A`` and ``B`` are used in a project, and
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200982that an ``A`` can easily be converted into an instance of type ``B`` (examples of this
Wenzel Jakob93296692015-10-13 23:21:54 +0200983could be a fixed and an arbitrary precision number type).
984
985.. code-block:: cpp
986
987 py::class_<A>(m, "A")
988 /// ... members ...
989
990 py::class_<B>(m, "B")
991 .def(py::init<A>())
992 /// ... members ...
993
994 m.def("func",
995 [](const B &) { /* .... */ }
996 );
997
998To invoke the function ``func`` using a variable ``a`` containing an ``A``
999instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
1000will automatically apply an implicit type conversion, which makes it possible
1001to directly write ``func(a)``.
1002
1003In this situation (i.e. where ``B`` has a constructor that converts from
1004``A``), the following statement enables similar implicit conversions on the
1005Python side:
1006
1007.. code-block:: cpp
1008
1009 py::implicitly_convertible<A, B>();
1010
Wenzel Jakob3eeea6f2016-06-30 18:10:28 +02001011.. note::
1012
1013 Implicit conversions from ``A`` to ``B`` only work when ``B`` is a custom
1014 data type that is exposed to Python via pybind11.
1015
Wenzel Jakobf88af0c2016-06-22 13:52:31 +02001016.. _static_properties:
1017
1018Static properties
1019=================
1020
1021The section on :ref:`properties` discussed the creation of instance properties
1022that are implemented in terms of C++ getters and setters.
1023
1024Static properties can also be created in a similar way to expose getters and
1025setters of static class attributes. It is important to note that the implicit
1026``self`` argument also exists in this case and is used to pass the Python
1027``type`` subclass instance. This parameter will often not be needed by the C++
1028side, and the following example illustrates how to instantiate a lambda getter
1029function that ignores it:
1030
1031.. code-block:: cpp
1032
1033 py::class_<Foo>(m, "Foo")
1034 .def_property_readonly_static("foo", [](py::object /* self */) { return Foo(); });
1035
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +02001036Unique pointers
1037===============
1038
1039Given a class ``Example`` with Python bindings, it's possible to return
1040instances wrapped in C++11 unique pointers, like so
1041
1042.. code-block:: cpp
1043
1044 std::unique_ptr<Example> create_example() { return std::unique_ptr<Example>(new Example()); }
1045
1046.. code-block:: cpp
1047
1048 m.def("create_example", &create_example);
1049
1050In other words, there is nothing special that needs to be done. While returning
1051unique pointers in this way is allowed, it is *illegal* to use them as function
1052arguments. For instance, the following function signature cannot be processed
1053by pybind11.
1054
1055.. code-block:: cpp
1056
1057 void do_something_with_example(std::unique_ptr<Example> ex) { ... }
1058
1059The above signature would imply that Python needs to give up ownership of an
1060object that is passed to this function, which is generally not possible (for
1061instance, the object might be referenced elsewhere).
1062
Wenzel Jakobf7b58742016-04-25 23:04:27 +02001063.. _smart_pointers:
1064
Wenzel Jakob93296692015-10-13 23:21:54 +02001065Smart pointers
1066==============
1067
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +02001068This section explains how to pass values that are wrapped in "smart" pointer
Wenzel Jakobe84f5572016-04-26 23:19:19 +02001069types with internal reference counting. For the simpler C++11 unique pointers,
1070refer to the previous section.
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +02001071
Jason Rhinelander5fffe202016-09-06 12:17:06 -04001072The binding generator for classes, :class:`class_`, can be passed a template
1073type that denotes a special *holder* type that is used to manage references to
1074the object. If no such holder type template argument is given, the default for
1075a type named ``Type`` is ``std::unique_ptr<Type>``, which means that the object
1076is deallocated when Python's reference count goes to zero.
Wenzel Jakob93296692015-10-13 23:21:54 +02001077
Wenzel Jakob1853b652015-10-18 15:38:50 +02001078It is possible to switch to other types of reference counting wrappers or smart
1079pointers, which is useful in codebases that rely on them. For instance, the
1080following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +02001081
1082.. code-block:: cpp
1083
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001084 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001085
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001086Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +02001087
Wenzel Jakob1853b652015-10-18 15:38:50 +02001088To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001089argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +02001090be declared at the top level before any binding code:
1091
1092.. code-block:: cpp
1093
Wenzel Jakobb1b71402015-10-18 16:48:30 +02001094 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +02001095
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001096.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +01001097
1098 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
1099 placeholder name that is used as a template parameter of the second
1100 argument. Thus, feel free to use any identifier, but use it consistently on
1101 both sides; also, don't use the name of a type that already exists in your
1102 codebase.
1103
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001104One potential stumbling block when using holder types is that they need to be
1105applied consistently. Can you guess what's broken about the following binding
1106code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001107
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001108.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001109
Jason Rhinelander5fffe202016-09-06 12:17:06 -04001110 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
1111
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001112 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001113
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001114 class Parent {
1115 public:
1116 Parent() : child(std::make_shared<Child>()) { }
1117 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
1118 private:
1119 std::shared_ptr<Child> child;
1120 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001121
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001122 PYBIND11_PLUGIN(example) {
1123 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001124
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001125 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
1126
1127 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
1128 .def(py::init<>())
1129 .def("get_child", &Parent::get_child);
1130
1131 return m.ptr();
1132 }
1133
1134The following Python code will cause undefined behavior (and likely a
1135segmentation fault).
1136
1137.. code-block:: python
1138
1139 from example import Parent
1140 print(Parent().get_child())
1141
1142The problem is that ``Parent::get_child()`` returns a pointer to an instance of
1143``Child``, but the fact that this instance is already managed by
1144``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
1145pybind11 will create a second independent ``std::shared_ptr<...>`` that also
1146claims ownership of the pointer. In the end, the object will be freed **twice**
1147since these shared pointers have no way of knowing about each other.
1148
1149There are two ways to resolve this issue:
1150
11511. For types that are managed by a smart pointer class, never use raw pointers
1152 in function arguments or return values. In other words: always consistently
1153 wrap pointers into their designated holder types (such as
1154 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
1155 should be modified as follows:
1156
1157.. code-block:: cpp
1158
1159 std::shared_ptr<Child> get_child() { return child; }
1160
11612. Adjust the definition of ``Child`` by specifying
1162 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
1163 base class. This adds a small bit of information to ``Child`` that allows
1164 pybind11 to realize that there is already an existing
1165 ``std::shared_ptr<...>`` and communicate with it. In this case, the
1166 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001167
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001168.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
1169
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001170.. code-block:: cpp
1171
1172 class Child : public std::enable_shared_from_this<Child> { };
1173
Wenzel Jakob9bb97c12016-06-03 11:19:41 +02001174
1175Please take a look at the :ref:`macro_notes` before using this feature.
1176
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001177.. seealso::
1178
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001179 The file :file:`tests/test_smart_ptr.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001180 that demonstrates how to work with custom reference-counting holder types
1181 in more detail.
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001182
Wenzel Jakob93296692015-10-13 23:21:54 +02001183.. _custom_constructors:
1184
1185Custom constructors
1186===================
1187
1188The syntax for binding constructors was previously introduced, but it only
1189works when a constructor with the given parameters actually exists on the C++
1190side. To extend this to more general cases, let's take a look at what actually
1191happens under the hood: the following statement
1192
1193.. code-block:: cpp
1194
1195 py::class_<Example>(m, "Example")
1196 .def(py::init<int>());
1197
1198is short hand notation for
1199
1200.. code-block:: cpp
1201
1202 py::class_<Example>(m, "Example")
1203 .def("__init__",
1204 [](Example &instance, int arg) {
1205 new (&instance) Example(arg);
1206 }
1207 );
1208
1209In other words, :func:`init` creates an anonymous function that invokes an
1210in-place constructor. Memory allocation etc. is already take care of beforehand
1211within pybind11.
1212
Nickolai Belakovski63338252016-08-27 11:57:55 -07001213.. _classes_with_non_public_destructors:
1214
1215Classes with non-public destructors
1216===================================
1217
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001218If a class has a private or protected destructor (as might e.g. be the case in
1219a singleton pattern), a compile error will occur when creating bindings via
1220pybind11. The underlying issue is that the ``std::unique_ptr`` holder type that
1221is responsible for managing the lifetime of instances will reference the
1222destructor even if no deallocations ever take place. In order to expose classes
1223with private or protected destructors, it is possible to override the holder
Jason Rhinelander5fffe202016-09-06 12:17:06 -04001224type via a holder type argument to ``class_``. Pybind11 provides a helper class
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001225``py::nodelete`` that disables any destructor invocations. In this case, it is
1226crucial that instances are deallocated on the C++ side to avoid memory leaks.
Nickolai Belakovski63338252016-08-27 11:57:55 -07001227
1228.. code-block:: cpp
1229
1230 /* ... definition ... */
1231
1232 class MyClass {
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001233 private:
1234 ~MyClass() { }
Nickolai Belakovski63338252016-08-27 11:57:55 -07001235 };
1236
1237 /* ... binding code ... */
1238
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001239 py::class_<MyClass, std::unique_ptr<MyClass, py::nodelete>>(m, "MyClass")
Nickolai Belakovski63338252016-08-27 11:57:55 -07001240 .def(py::init<>)
1241
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001242.. _catching_and_throwing_exceptions:
1243
Wenzel Jakob93296692015-10-13 23:21:54 +02001244Catching and throwing exceptions
1245================================
1246
1247When C++ code invoked from Python throws an ``std::exception``, it is
1248automatically converted into a Python ``Exception``. pybind11 defines multiple
1249special exception classes that will map to different types of Python
1250exceptions:
1251
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001252.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
1253
Wenzel Jakob978e3762016-04-07 18:00:41 +02001254+--------------------------------------+------------------------------+
1255| C++ exception type | Python exception type |
1256+======================================+==============================+
1257| :class:`std::exception` | ``RuntimeError`` |
1258+--------------------------------------+------------------------------+
1259| :class:`std::bad_alloc` | ``MemoryError`` |
1260+--------------------------------------+------------------------------+
1261| :class:`std::domain_error` | ``ValueError`` |
1262+--------------------------------------+------------------------------+
1263| :class:`std::invalid_argument` | ``ValueError`` |
1264+--------------------------------------+------------------------------+
1265| :class:`std::length_error` | ``ValueError`` |
1266+--------------------------------------+------------------------------+
1267| :class:`std::out_of_range` | ``ValueError`` |
1268+--------------------------------------+------------------------------+
1269| :class:`std::range_error` | ``ValueError`` |
1270+--------------------------------------+------------------------------+
1271| :class:`pybind11::stop_iteration` | ``StopIteration`` (used to |
1272| | implement custom iterators) |
1273+--------------------------------------+------------------------------+
1274| :class:`pybind11::index_error` | ``IndexError`` (used to |
1275| | indicate out of bounds |
1276| | accesses in ``__getitem__``, |
1277| | ``__setitem__``, etc.) |
1278+--------------------------------------+------------------------------+
Sergey Lyskova95bde12016-05-08 19:31:55 -04001279| :class:`pybind11::value_error` | ``ValueError`` (used to |
1280| | indicate wrong value passed |
1281| | in ``container.remove(...)`` |
1282+--------------------------------------+------------------------------+
Jason Rhinelander5aa85be2016-08-11 21:22:05 -04001283| :class:`pybind11::key_error` | ``KeyError`` (used to |
1284| | indicate out of bounds |
1285| | accesses in ``__getitem__``, |
1286| | ``__setitem__`` in dict-like |
1287| | objects, etc.) |
1288+--------------------------------------+------------------------------+
Wenzel Jakob978e3762016-04-07 18:00:41 +02001289| :class:`pybind11::error_already_set` | Indicates that the Python |
1290| | exception flag has already |
1291| | been initialized |
1292+--------------------------------------+------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +02001293
1294When a Python function invoked from C++ throws an exception, it is converted
1295into a C++ exception of type :class:`error_already_set` whose string payload
1296contains a textual summary.
1297
1298There is also a special exception :class:`cast_error` that is thrown by
1299:func:`handle::call` when the input arguments cannot be converted to Python
1300objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001301
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001302Registering custom exception translators
1303========================================
1304
1305If the default exception conversion policy described
1306:ref:`above <catching_and_throwing_exceptions>`
1307is insufficient, pybind11 also provides support for registering custom
1308exception translators.
1309
1310The function ``register_exception_translator(translator)`` takes a stateless
1311callable (e.g. a function pointer or a lambda function without captured
1312variables) with the following call signature: ``void(std::exception_ptr)``.
1313
1314When a C++ exception is thrown, registered exception translators are tried
1315in reverse order of registration (i.e. the last registered translator gets
1316a first shot at handling the exception).
1317
1318Inside the translator, ``std::rethrow_exception`` should be used within
1319a try block to re-throw the exception. A catch clause can then use
1320``PyErr_SetString`` to set a Python exception as demonstrated
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001321in :file:`tests/test_exceptions.cpp`.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001322
1323This example also demonstrates how to create custom exception types
1324with ``py::exception``.
1325
1326The following example demonstrates this for a hypothetical exception class
1327``MyCustomException``:
1328
1329.. code-block:: cpp
1330
1331 py::register_exception_translator([](std::exception_ptr p) {
1332 try {
1333 if (p) std::rethrow_exception(p);
1334 } catch (const MyCustomException &e) {
1335 PyErr_SetString(PyExc_RuntimeError, e.what());
1336 }
1337 });
1338
1339Multiple exceptions can be handled by a single translator. If the exception is
1340not caught by the current translator, the previously registered one gets a
1341chance.
1342
1343If none of the registered exception translators is able to handle the
1344exception, it is handled by the default converter as described in the previous
1345section.
1346
1347.. note::
1348
1349 You must either call ``PyErr_SetString`` for every exception caught in a
1350 custom exception translator. Failure to do so will cause Python to crash
1351 with ``SystemError: error return without exception set``.
1352
1353 Exceptions that you do not plan to handle should simply not be caught.
1354
1355 You may also choose to explicity (re-)throw the exception to delegate it to
1356 the other existing exception translators.
1357
1358 The ``py::exception`` wrapper for creating custom exceptions cannot (yet)
Jason Rhinelander6b52c832016-09-06 12:27:00 -04001359 be used as a base type.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001360
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001361.. _eigen:
1362
1363Transparent conversion of dense and sparse Eigen data types
1364===========================================================
1365
1366Eigen [#f1]_ is C++ header-based library for dense and sparse linear algebra. Due to
1367its popularity and widespread adoption, pybind11 provides transparent
1368conversion support between Eigen and Scientific Python linear algebra data types.
1369
1370Specifically, when including the optional header file :file:`pybind11/eigen.h`,
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001371pybind11 will automatically and transparently convert
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001372
13731. Static and dynamic Eigen dense vectors and matrices to instances of
1374 ``numpy.ndarray`` (and vice versa).
1375
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040013762. Returned matrix expressions such as blocks (including columns or rows) and
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001377 diagonals will be converted to ``numpy.ndarray`` of the expression
1378 values.
1379
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040013803. Returned matrix-like objects such as Eigen::DiagonalMatrix or
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001381 Eigen::SelfAdjointView will be converted to ``numpy.ndarray`` containing the
1382 expressed value.
1383
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040013844. Eigen sparse vectors and matrices to instances of
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001385 ``scipy.sparse.csr_matrix``/``scipy.sparse.csc_matrix`` (and vice versa).
1386
1387This makes it possible to bind most kinds of functions that rely on these types.
1388One major caveat are functions that take Eigen matrices *by reference* and modify
1389them somehow, in which case the information won't be propagated to the caller.
1390
1391.. code-block:: cpp
1392
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001393 /* The Python bindings of these functions won't replicate
1394 the intended effect of modifying the function arguments */
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001395 void scale_by_2(Eigen::Vector3f &v) {
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001396 v *= 2;
1397 }
1398 void scale_by_2(Eigen::Ref<Eigen::MatrixXd> &v) {
1399 v *= 2;
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001400 }
1401
1402To see why this is, refer to the section on :ref:`opaque` (although that
1403section specifically covers STL data types, the underlying issue is the same).
1404The next two sections discuss an efficient alternative for exposing the
1405underlying native Eigen types as opaque objects in a way that still integrates
1406with NumPy and SciPy.
1407
1408.. [#f1] http://eigen.tuxfamily.org
1409
1410.. seealso::
1411
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001412 The file :file:`tests/test_eigen.cpp` contains a complete example that
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001413 shows how to pass Eigen sparse and dense data types in more detail.
1414
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001415Buffer protocol
1416===============
1417
1418Python supports an extremely general and convenient approach for exchanging
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001419data between plugin libraries. Types can expose a buffer view [#f2]_, which
1420provides fast direct access to the raw internal data representation. Suppose we
1421want to bind the following simplistic Matrix class:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001422
1423.. code-block:: cpp
1424
1425 class Matrix {
1426 public:
1427 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
1428 m_data = new float[rows*cols];
1429 }
1430 float *data() { return m_data; }
1431 size_t rows() const { return m_rows; }
1432 size_t cols() const { return m_cols; }
1433 private:
1434 size_t m_rows, m_cols;
1435 float *m_data;
1436 };
1437
1438The following binding code exposes the ``Matrix`` contents as a buffer object,
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001439making it possible to cast Matrices into NumPy arrays. It is even possible to
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001440completely avoid copy operations with Python expressions like
1441``np.array(matrix_instance, copy = False)``.
1442
1443.. code-block:: cpp
1444
1445 py::class_<Matrix>(m, "Matrix")
1446 .def_buffer([](Matrix &m) -> py::buffer_info {
1447 return py::buffer_info(
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001448 m.data(), /* Pointer to buffer */
1449 sizeof(float), /* Size of one scalar */
1450 py::format_descriptor<float>::format(), /* Python struct-style format descriptor */
1451 2, /* Number of dimensions */
1452 { m.rows(), m.cols() }, /* Buffer dimensions */
1453 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001454 sizeof(float) }
1455 );
1456 });
1457
1458The snippet above binds a lambda function, which can create ``py::buffer_info``
1459description records on demand describing a given matrix. The contents of
1460``py::buffer_info`` mirror the Python buffer protocol specification.
1461
1462.. code-block:: cpp
1463
1464 struct buffer_info {
1465 void *ptr;
1466 size_t itemsize;
1467 std::string format;
1468 int ndim;
1469 std::vector<size_t> shape;
1470 std::vector<size_t> strides;
1471 };
1472
1473To create a C++ function that can take a Python buffer object as an argument,
1474simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
1475in a great variety of configurations, hence some safety checks are usually
1476necessary in the function body. Below, you can see an basic example on how to
1477define a custom constructor for the Eigen double precision matrix
1478(``Eigen::MatrixXd``) type, which supports initialization from compatible
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001479buffer objects (e.g. a NumPy matrix).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001480
1481.. code-block:: cpp
1482
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001483 /* Bind MatrixXd (or some other Eigen type) to Python */
1484 typedef Eigen::MatrixXd Matrix;
1485
1486 typedef Matrix::Scalar Scalar;
1487 constexpr bool rowMajor = Matrix::Flags & Eigen::RowMajorBit;
1488
1489 py::class_<Matrix>(m, "Matrix")
1490 .def("__init__", [](Matrix &m, py::buffer b) {
Wenzel Jakobe7628532016-05-05 10:04:44 +02001491 typedef Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic> Strides;
Wenzel Jakobe7628532016-05-05 10:04:44 +02001492
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001493 /* Request a buffer descriptor from Python */
1494 py::buffer_info info = b.request();
1495
1496 /* Some sanity checks ... */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001497 if (info.format != py::format_descriptor<Scalar>::format())
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001498 throw std::runtime_error("Incompatible format: expected a double array!");
1499
1500 if (info.ndim != 2)
1501 throw std::runtime_error("Incompatible buffer dimension!");
1502
Wenzel Jakobe7628532016-05-05 10:04:44 +02001503 auto strides = Strides(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001504 info.strides[rowMajor ? 0 : 1] / sizeof(Scalar),
1505 info.strides[rowMajor ? 1 : 0] / sizeof(Scalar));
Wenzel Jakobe7628532016-05-05 10:04:44 +02001506
1507 auto map = Eigen::Map<Matrix, 0, Strides>(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001508 static_cat<Scalar *>(info.ptr), info.shape[0], info.shape[1], strides);
Wenzel Jakobe7628532016-05-05 10:04:44 +02001509
1510 new (&m) Matrix(map);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001511 });
1512
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001513For reference, the ``def_buffer()`` call for this Eigen data type should look
1514as follows:
1515
1516.. code-block:: cpp
1517
1518 .def_buffer([](Matrix &m) -> py::buffer_info {
1519 return py::buffer_info(
1520 m.data(), /* Pointer to buffer */
1521 sizeof(Scalar), /* Size of one scalar */
1522 /* Python struct-style format descriptor */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001523 py::format_descriptor<Scalar>::format(),
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001524 /* Number of dimensions */
1525 2,
1526 /* Buffer dimensions */
1527 { (size_t) m.rows(),
1528 (size_t) m.cols() },
1529 /* Strides (in bytes) for each index */
1530 { sizeof(Scalar) * (rowMajor ? m.cols() : 1),
1531 sizeof(Scalar) * (rowMajor ? 1 : m.rows()) }
1532 );
1533 })
1534
1535For a much easier approach of binding Eigen types (although with some
1536limitations), refer to the section on :ref:`eigen`.
1537
Wenzel Jakob93296692015-10-13 23:21:54 +02001538.. seealso::
1539
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001540 The file :file:`tests/test_buffers.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001541 that demonstrates using the buffer protocol with pybind11 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +02001542
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001543.. [#f2] http://docs.python.org/3/c-api/buffer.html
Wenzel Jakob978e3762016-04-07 18:00:41 +02001544
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001545NumPy support
1546=============
1547
1548By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
1549restrict the function so that it only accepts NumPy arrays (rather than any
Wenzel Jakob978e3762016-04-07 18:00:41 +02001550type of Python object satisfying the buffer protocol).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001551
1552In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +02001553array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001554template. For instance, the following function requires the argument to be a
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001555NumPy array containing double precision values.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001556
1557.. code-block:: cpp
1558
Wenzel Jakob93296692015-10-13 23:21:54 +02001559 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001560
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001561When it is invoked with a different type (e.g. an integer or a list of
1562integers), the binding code will attempt to cast the input into a NumPy array
1563of the requested type. Note that this feature requires the
1564:file:``pybind11/numpy.h`` header to be included.
1565
1566Data in NumPy arrays is not guaranteed to packed in a dense manner;
1567furthermore, entries can be separated by arbitrary column and row strides.
1568Sometimes, it can be useful to require a function to only accept dense arrays
1569using either the C (row-major) or Fortran (column-major) ordering. This can be
1570accomplished via a second template argument with values ``py::array::c_style``
1571or ``py::array::f_style``.
1572
1573.. code-block:: cpp
1574
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001575 void f(py::array_t<double, py::array::c_style | py::array::forcecast> array);
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001576
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001577The ``py::array::forcecast`` argument is the default value of the second
1578template paramenter, and it ensures that non-conforming arguments are converted
1579into an array satisfying the specified requirements instead of trying the next
1580function overload.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001581
Ivan Smirnov223afe32016-07-02 15:33:04 +01001582NumPy structured types
1583======================
1584
1585In order for ``py::array_t`` to work with structured (record) types, we first need
Ivan Smirnov5412a052016-07-02 16:18:42 +01001586to register the memory layout of the type. This can be done via ``PYBIND11_NUMPY_DTYPE``
Ivan Smirnov223afe32016-07-02 15:33:04 +01001587macro which expects the type followed by field names:
1588
1589.. code-block:: cpp
1590
1591 struct A {
1592 int x;
1593 double y;
1594 };
1595
1596 struct B {
1597 int z;
1598 A a;
1599 };
1600
Ivan Smirnov5412a052016-07-02 16:18:42 +01001601 PYBIND11_NUMPY_DTYPE(A, x, y);
1602 PYBIND11_NUMPY_DTYPE(B, z, a);
Ivan Smirnov223afe32016-07-02 15:33:04 +01001603
1604 /* now both A and B can be used as template arguments to py::array_t */
1605
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001606Vectorizing functions
1607=====================
1608
1609Suppose we want to bind a function with the following signature to Python so
1610that it can process arbitrary NumPy array arguments (vectors, matrices, general
1611N-D arrays) in addition to its normal arguments:
1612
1613.. code-block:: cpp
1614
1615 double my_func(int x, float y, double z);
1616
Wenzel Jakob8f4eb002015-10-15 18:13:33 +02001617After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001618
1619.. code-block:: cpp
1620
1621 m.def("vectorized_func", py::vectorize(my_func));
1622
1623Invoking the function like below causes 4 calls to be made to ``my_func`` with
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001624each of the array elements. The significant advantage of this compared to
Wenzel Jakob978e3762016-04-07 18:00:41 +02001625solutions like ``numpy.vectorize()`` is that the loop over the elements runs
1626entirely on the C++ side and can be crunched down into a tight, optimized loop
1627by the compiler. The result is returned as a NumPy array of type
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001628``numpy.dtype.float64``.
1629
Wenzel Jakob99279f72016-06-03 11:19:29 +02001630.. code-block:: pycon
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001631
1632 >>> x = np.array([[1, 3],[5, 7]])
1633 >>> y = np.array([[2, 4],[6, 8]])
1634 >>> z = 3
1635 >>> result = vectorized_func(x, y, z)
1636
1637The scalar argument ``z`` is transparently replicated 4 times. The input
1638arrays ``x`` and ``y`` are automatically converted into the right types (they
1639are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
1640``numpy.dtype.float32``, respectively)
1641
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001642Sometimes we might want to explicitly exclude an argument from the vectorization
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001643because it makes little sense to wrap it in a NumPy array. For instance,
1644suppose the function signature was
1645
1646.. code-block:: cpp
1647
1648 double my_func(int x, float y, my_custom_type *z);
1649
1650This can be done with a stateful Lambda closure:
1651
1652.. code-block:: cpp
1653
1654 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
1655 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +02001656 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001657 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
1658 return py::vectorize(stateful_closure)(x, y);
1659 }
1660 );
1661
Wenzel Jakob61587162016-01-18 22:38:52 +01001662In cases where the computation is too complicated to be reduced to
1663``vectorize``, it will be necessary to create and access the buffer contents
1664manually. The following snippet contains a complete example that shows how this
1665works (the code is somewhat contrived, since it could have been done more
1666simply using ``vectorize``).
1667
1668.. code-block:: cpp
1669
1670 #include <pybind11/pybind11.h>
1671 #include <pybind11/numpy.h>
1672
1673 namespace py = pybind11;
1674
1675 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
1676 auto buf1 = input1.request(), buf2 = input2.request();
1677
1678 if (buf1.ndim != 1 || buf2.ndim != 1)
1679 throw std::runtime_error("Number of dimensions must be one");
1680
Ivan Smirnovb6518592016-08-13 13:28:56 +01001681 if (buf1.size != buf2.size)
Wenzel Jakob61587162016-01-18 22:38:52 +01001682 throw std::runtime_error("Input shapes must match");
1683
Ivan Smirnovb6518592016-08-13 13:28:56 +01001684 /* No pointer is passed, so NumPy will allocate the buffer */
1685 auto result = py::array_t<double>(buf1.size);
Wenzel Jakob61587162016-01-18 22:38:52 +01001686
1687 auto buf3 = result.request();
1688
1689 double *ptr1 = (double *) buf1.ptr,
1690 *ptr2 = (double *) buf2.ptr,
1691 *ptr3 = (double *) buf3.ptr;
1692
1693 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
1694 ptr3[idx] = ptr1[idx] + ptr2[idx];
1695
1696 return result;
1697 }
1698
1699 PYBIND11_PLUGIN(test) {
1700 py::module m("test");
1701 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
1702 return m.ptr();
1703 }
1704
Wenzel Jakob93296692015-10-13 23:21:54 +02001705.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001706
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001707 The file :file:`tests/test_numpy_vectorize.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001708 example that demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001709
Wenzel Jakob93296692015-10-13 23:21:54 +02001710Functions taking Python objects as arguments
1711============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001712
Wenzel Jakob93296692015-10-13 23:21:54 +02001713pybind11 exposes all major Python types using thin C++ wrapper classes. These
1714wrapper classes can also be used as parameters of functions in bindings, which
1715makes it possible to directly work with native Python types on the C++ side.
1716For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001717
Wenzel Jakob93296692015-10-13 23:21:54 +02001718.. code-block:: cpp
1719
1720 void print_dict(py::dict dict) {
1721 /* Easily interact with Python types */
1722 for (auto item : dict)
1723 std::cout << "key=" << item.first << ", "
1724 << "value=" << item.second << std::endl;
1725 }
1726
1727Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +01001728:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001729:class:`list`, :class:`dict`, :class:`slice`, :class:`none`, :class:`capsule`,
1730:class:`iterable`, :class:`iterator`, :class:`function`, :class:`buffer`,
1731:class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +02001732
Wenzel Jakob436b7312015-10-20 01:04:30 +02001733In this kind of mixed code, it is often necessary to convert arbitrary C++
1734types to Python, which can be done using :func:`cast`:
1735
1736.. code-block:: cpp
1737
1738 MyClass *cls = ..;
1739 py::object obj = py::cast(cls);
1740
1741The reverse direction uses the following syntax:
1742
1743.. code-block:: cpp
1744
1745 py::object obj = ...;
1746 MyClass *cls = obj.cast<MyClass *>();
1747
1748When conversion fails, both directions throw the exception :class:`cast_error`.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001749It is also possible to call python functions via ``operator()``.
1750
1751.. code-block:: cpp
1752
1753 py::function f = <...>;
1754 py::object result_py = f(1234, "hello", some_instance);
1755 MyClass &result = result_py.cast<MyClass>();
1756
Dean Moldovan625bd482016-09-02 16:40:49 +02001757Keyword arguments are also supported. In Python, there is the usual call syntax:
1758
1759.. code-block:: python
1760
1761 def f(number, say, to):
1762 ... # function code
1763
1764 f(1234, say="hello", to=some_instance) # keyword call in Python
1765
1766In C++, the same call can be made using:
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001767
1768.. code-block:: cpp
1769
Dean Moldovan625bd482016-09-02 16:40:49 +02001770 using pybind11::literals; // to bring in the `_a` literal
1771 f(1234, "say"_a="hello", "to"_a=some_instance); // keyword call in C++
1772
1773Unpacking of ``*args`` and ``**kwargs`` is also possible and can be mixed with
1774other arguments:
1775
1776.. code-block:: cpp
1777
1778 // * unpacking
1779 py::tuple args = py::make_tuple(1234, "hello", some_instance);
1780 f(*args);
1781
1782 // ** unpacking
1783 py::dict kwargs = py::dict("number"_a=1234, "say"_a="hello", "to"_a=some_instance);
1784 f(**kwargs);
1785
1786 // mixed keywords, * and ** unpacking
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001787 py::tuple args = py::make_tuple(1234);
Dean Moldovan625bd482016-09-02 16:40:49 +02001788 py::dict kwargs = py::dict("to"_a=some_instance);
1789 f(*args, "say"_a="hello", **kwargs);
1790
1791Generalized unpacking according to PEP448_ is also supported:
1792
1793.. code-block:: cpp
1794
1795 py::dict kwargs1 = py::dict("number"_a=1234);
1796 py::dict kwargs2 = py::dict("to"_a=some_instance);
1797 f(**kwargs1, "say"_a="hello", **kwargs2);
Wenzel Jakob436b7312015-10-20 01:04:30 +02001798
Wenzel Jakob93296692015-10-13 23:21:54 +02001799.. seealso::
1800
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001801 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001802 example that demonstrates passing native Python types in more detail. The
Dean Moldovan625bd482016-09-02 16:40:49 +02001803 file :file:`tests/test_callbacks.cpp` presents a few examples of calling
1804 Python functions from C++, including keywords arguments and unpacking.
1805
1806.. _PEP448: https://www.python.org/dev/peps/pep-0448/
1807
1808Using Python's print function in C++
1809====================================
1810
1811The usual way to write output in C++ is using ``std::cout`` while in Python one
1812would use ``print``. Since these methods use different buffers, mixing them can
1813lead to output order issues. To resolve this, pybind11 modules can use the
1814:func:`py::print` function which writes to Python's ``sys.stdout`` for consistency.
1815
1816Python's ``print`` function is replicated in the C++ API including optional
1817keyword arguments ``sep``, ``end``, ``file``, ``flush``. Everything works as
1818expected in Python:
1819
1820.. code-block:: cpp
1821
1822 py::print(1, 2.0, "three"); // 1 2.0 three
1823 py::print(1, 2.0, "three", "sep"_a="-"); // 1-2.0-three
1824
1825 auto args = py::make_tuple("unpacked", true);
1826 py::print("->", *args, "end"_a="<-"); // -> unpacked True <-
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001827
1828Default arguments revisited
1829===========================
1830
1831The section on :ref:`default_args` previously discussed basic usage of default
1832arguments using pybind11. One noteworthy aspect of their implementation is that
1833default arguments are converted to Python objects right at declaration time.
1834Consider the following example:
1835
1836.. code-block:: cpp
1837
1838 py::class_<MyClass>("MyClass")
1839 .def("myFunction", py::arg("arg") = SomeType(123));
1840
1841In this case, pybind11 must already be set up to deal with values of the type
1842``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
1843exception will be thrown.
1844
1845Another aspect worth highlighting is that the "preview" of the default argument
1846in the function signature is generated using the object's ``__repr__`` method.
1847If not available, the signature may not be very helpful, e.g.:
1848
Wenzel Jakob99279f72016-06-03 11:19:29 +02001849.. code-block:: pycon
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001850
1851 FUNCTIONS
1852 ...
1853 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +01001854 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001855 ...
1856
1857The first way of addressing this is by defining ``SomeType.__repr__``.
1858Alternatively, it is possible to specify the human-readable preview of the
1859default argument manually using the ``arg_t`` notation:
1860
1861.. code-block:: cpp
1862
1863 py::class_<MyClass>("MyClass")
1864 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
1865
Wenzel Jakobc769fce2016-03-03 12:03:30 +01001866Sometimes it may be necessary to pass a null pointer value as a default
1867argument. In this case, remember to cast it to the underlying type in question,
1868like so:
1869
1870.. code-block:: cpp
1871
1872 py::class_<MyClass>("MyClass")
1873 .def("myFunction", py::arg("arg") = (SomeType *) nullptr);
1874
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001875Binding functions that accept arbitrary numbers of arguments and keywords arguments
1876===================================================================================
1877
1878Python provides a useful mechanism to define functions that accept arbitrary
1879numbers of arguments and keyword arguments:
1880
1881.. code-block:: cpp
1882
1883 def generic(*args, **kwargs):
1884 # .. do something with args and kwargs
1885
1886Such functions can also be created using pybind11:
1887
1888.. code-block:: cpp
1889
1890 void generic(py::args args, py::kwargs kwargs) {
1891 /// .. do something with args
1892 if (kwargs)
1893 /// .. do something with kwargs
1894 }
1895
1896 /// Binding code
1897 m.def("generic", &generic);
1898
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001899(See ``tests/test_kwargs_and_defaults.cpp``). The class ``py::args``
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001900derives from ``py::list`` and ``py::kwargs`` derives from ``py::dict`` Note
1901that the ``kwargs`` argument is invalid if no keyword arguments were actually
1902provided. Please refer to the other examples for details on how to iterate
1903over these, and on how to cast their entries into C++ objects.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001904
Wenzel Jakob3764e282016-08-01 23:34:48 +02001905.. warning::
1906
1907 Unlike Python, pybind11 does not allow combining normal parameters with the
1908 ``args`` / ``kwargs`` special parameters.
1909
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001910Partitioning code over multiple extension modules
1911=================================================
1912
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001913It's straightforward to split binding code over multiple extension modules,
1914while referencing types that are declared elsewhere. Everything "just" works
1915without any special precautions. One exception to this rule occurs when
1916extending a type declared in another extension module. Recall the basic example
1917from Section :ref:`inheritance`.
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001918
1919.. code-block:: cpp
1920
1921 py::class_<Pet> pet(m, "Pet");
1922 pet.def(py::init<const std::string &>())
1923 .def_readwrite("name", &Pet::name);
1924
1925 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1926 .def(py::init<const std::string &>())
1927 .def("bark", &Dog::bark);
1928
1929Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1930whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1931course that the variable ``pet`` is not available anymore though it is needed
1932to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1933However, it can be acquired as follows:
1934
1935.. code-block:: cpp
1936
1937 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1938
1939 py::class_<Dog>(m, "Dog", pet)
1940 .def(py::init<const std::string &>())
1941 .def("bark", &Dog::bark);
1942
Jason Rhinelander6b52c832016-09-06 12:27:00 -04001943Alternatively, you can specify the base class as a template parameter option to
1944``class_``, which performs an automated lookup of the corresponding Python
1945type. Like the above code, however, this also requires invoking the ``import``
1946function once to ensure that the pybind11 binding code of the module ``basic``
1947has been executed:
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001948
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001949.. code-block:: cpp
1950
1951 py::module::import("basic");
1952
Jason Rhinelander6b52c832016-09-06 12:27:00 -04001953 py::class_<Dog, Pet>(m, "Dog")
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001954 .def(py::init<const std::string &>())
1955 .def("bark", &Dog::bark);
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001956
Wenzel Jakob978e3762016-04-07 18:00:41 +02001957Naturally, both methods will fail when there are cyclic dependencies.
1958
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001959Note that compiling code which has its default symbol visibility set to
1960*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
1961ability to access types defined in another extension module. Workarounds
1962include changing the global symbol visibility (not recommended, because it will
1963lead unnecessarily large binaries) or manually exporting types that are
1964accessed by multiple extension modules:
1965
1966.. code-block:: cpp
1967
1968 #ifdef _WIN32
1969 # define EXPORT_TYPE __declspec(dllexport)
1970 #else
1971 # define EXPORT_TYPE __attribute__ ((visibility("default")))
1972 #endif
1973
1974 class EXPORT_TYPE Dog : public Animal {
1975 ...
1976 };
1977
1978
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001979Pickling support
1980================
1981
1982Python's ``pickle`` module provides a powerful facility to serialize and
1983de-serialize a Python object graph into a binary data stream. To pickle and
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02001984unpickle C++ classes using pybind11, two additional functions must be provided.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001985Suppose the class in question has the following signature:
1986
1987.. code-block:: cpp
1988
1989 class Pickleable {
1990 public:
1991 Pickleable(const std::string &value) : m_value(value) { }
1992 const std::string &value() const { return m_value; }
1993
1994 void setExtra(int extra) { m_extra = extra; }
1995 int extra() const { return m_extra; }
1996 private:
1997 std::string m_value;
1998 int m_extra = 0;
1999 };
2000
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02002001The binding code including the requisite ``__setstate__`` and ``__getstate__`` methods [#f3]_
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02002002looks as follows:
2003
2004.. code-block:: cpp
2005
2006 py::class_<Pickleable>(m, "Pickleable")
2007 .def(py::init<std::string>())
2008 .def("value", &Pickleable::value)
2009 .def("extra", &Pickleable::extra)
2010 .def("setExtra", &Pickleable::setExtra)
2011 .def("__getstate__", [](const Pickleable &p) {
2012 /* Return a tuple that fully encodes the state of the object */
2013 return py::make_tuple(p.value(), p.extra());
2014 })
2015 .def("__setstate__", [](Pickleable &p, py::tuple t) {
2016 if (t.size() != 2)
2017 throw std::runtime_error("Invalid state!");
2018
Wenzel Jakobd40885a2016-04-13 13:30:05 +02002019 /* Invoke the in-place constructor. Note that this is needed even
2020 when the object just has a trivial default constructor */
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02002021 new (&p) Pickleable(t[0].cast<std::string>());
2022
2023 /* Assign any additional state */
2024 p.setExtra(t[1].cast<int>());
2025 });
2026
2027An instance can now be pickled as follows:
2028
2029.. code-block:: python
2030
2031 try:
2032 import cPickle as pickle # Use cPickle on Python 2.7
2033 except ImportError:
2034 import pickle
2035
2036 p = Pickleable("test_value")
2037 p.setExtra(15)
Wenzel Jakob81e09752016-04-30 23:13:03 +02002038 data = pickle.dumps(p, 2)
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02002039
Wenzel Jakob81e09752016-04-30 23:13:03 +02002040Note that only the cPickle module is supported on Python 2.7. The second
2041argument to ``dumps`` is also crucial: it selects the pickle protocol version
20422, since the older version 1 is not supported. Newer versions are also fine—for
2043instance, specify ``-1`` to always use the latest available version. Beware:
2044failure to follow these instructions will cause important pybind11 memory
2045allocation routines to be skipped during unpickling, which will likely lead to
2046memory corruption and/or segmentation faults.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02002047
2048.. seealso::
2049
Dean Moldovanec0d38e2016-08-13 03:09:52 +02002050 The file :file:`tests/test_pickling.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04002051 that demonstrates how to pickle and unpickle types using pybind11 in more
2052 detail.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02002053
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02002054.. [#f3] http://docs.python.org/3/library/pickle.html#pickling-class-instances
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02002055
2056Generating documentation using Sphinx
2057=====================================
2058
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02002059Sphinx [#f4]_ has the ability to inspect the signatures and documentation
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02002060strings in pybind11-based extension modules to automatically generate beautiful
Wenzel Jakobca8dc082016-06-03 14:24:17 +02002061documentation in a variety formats. The python_example repository [#f5]_ contains a
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02002062simple example repository which uses this approach.
2063
2064There are two potential gotchas when using this approach: first, make sure that
2065the resulting strings do not contain any :kbd:`TAB` characters, which break the
2066docstring parsing routines. You may want to use C++11 raw string literals,
2067which are convenient for multi-line comments. Conveniently, any excess
2068indentation will be automatically be removed by Sphinx. However, for this to
2069work, it is important that all lines are indented consistently, i.e.:
2070
2071.. code-block:: cpp
2072
2073 // ok
2074 m.def("foo", &foo, R"mydelimiter(
2075 The foo function
2076
2077 Parameters
2078 ----------
2079 )mydelimiter");
2080
2081 // *not ok*
2082 m.def("foo", &foo, R"mydelimiter(The foo function
2083
2084 Parameters
2085 ----------
2086 )mydelimiter");
2087
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02002088.. [#f4] http://www.sphinx-doc.org
Wenzel Jakobca8dc082016-06-03 14:24:17 +02002089.. [#f5] http://github.com/pybind/python_example
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002090
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002091Evaluating Python expressions from strings and files
2092====================================================
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002093
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002094pybind11 provides the :func:`eval` and :func:`eval_file` functions to evaluate
2095Python expressions and statements. The following example illustrates how they
2096can be used.
2097
2098Both functions accept a template parameter that describes how the argument
2099should be interpreted. Possible choices include ``eval_expr`` (isolated
2100expression), ``eval_single_statement`` (a single statement, return value is
2101always ``none``), and ``eval_statements`` (sequence of statements, return value
2102is always ``none``).
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002103
2104.. code-block:: cpp
2105
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002106 // At beginning of file
2107 #include <pybind11/eval.h>
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002108
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002109 ...
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002110
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002111 // Evaluate in scope of main module
2112 py::object scope = py::module::import("__main__").attr("__dict__");
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002113
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002114 // Evaluate an isolated expression
2115 int result = py::eval("my_variable + 10", scope).cast<int>();
2116
2117 // Evaluate a sequence of statements
2118 py::eval<py::eval_statements>(
2119 "print('Hello')\n"
2120 "print('world!');",
2121 scope);
2122
2123 // Evaluate the statements in an separate Python file on disk
2124 py::eval_file("script.py", scope);
Wenzel Jakob48ce0722016-09-06 14:13:22 +09002125
2126Development of custom type casters
2127==================================
2128
2129In very rare cases, applications may require custom type casters that cannot be
2130expressed using the abstractions provided by pybind11, thus requiring raw
2131Python C API calls. This is fairly advanced usage and should only be pursued by
2132experts who are familiar with the intricacies of Python reference counting.
2133
2134The following snippets demonstrate how this works for a very simple ``inty``
2135type that that should be convertible from Python types that provide a
2136``__int__(self)`` method.
2137
2138.. code-block:: cpp
2139
2140 struct inty { long long_value; };
2141
2142 void print(inty s) {
2143 std::cout << s.long_value << std::endl;
2144 }
2145
2146The following Python snippet demonstrates the intended usage from the Python side:
2147
2148.. code-block:: python
2149
2150 class A:
2151 def __int__(self):
2152 return 123
2153
2154 from example import print
2155 print(A())
2156
2157To register the necessary conversion routines, it is necessary to add
2158a partial overload to the ``pybind11::detail::type_caster<T>`` template.
2159Although this is an implementation detail, adding partial overloads to this
2160type is explicitly allowed.
2161
2162.. code-block:: cpp
2163
2164 namespace pybind11 {
2165 namespace detail {
2166 template <> struct type_caster<inty> {
2167 public:
2168 /**
2169 * This macro establishes the name 'inty' in
2170 * function signatures and declares a local variable
2171 * 'value' of type inty
2172 */
2173 PYBIND11_TYPE_CASTER(inty, _("inty"));
2174
2175 /**
2176 * Conversion part 1 (Python->C++): convert a PyObject into a inty
2177 * instance or return false upon failure. The second argument
2178 * indicates whether implicit conversions should be applied.
2179 */
2180 bool load(handle src, bool) {
2181 /* Extract PyObject from handle */
2182 PyObject *source = src.ptr();
2183 /* Try converting into a Python integer value */
2184 PyObject *tmp = PyNumber_Long(source);
2185 if (!tmp)
2186 return false;
2187 /* Now try to convert into a C++ int */
2188 value.long_value = PyLong_AsLong(tmp);
2189 Py_DECREF(tmp);
2190 /* Ensure return code was OK (to avoid out-of-range errors etc) */
2191 return !(value.long_value == -1 && !PyErr_Occurred());
2192 }
2193
2194 /**
2195 * Conversion part 2 (C++ -> Python): convert an inty instance into
2196 * a Python object. The second and third arguments are used to
2197 * indicate the return value policy and parent object (for
2198 * ``return_value_policy::reference_internal``) and are generally
2199 * ignored by implicit casters.
2200 */
2201 static handle cast(inty src, return_value_policy /* policy */, handle /* parent */) {
2202 return PyLong_FromLong(src.long_value);
2203 }
2204 };
2205 }
2206 };