blob: abb9ec0e397e18e6fd2165e6b60a4ce4da7f8125 [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======================
763When including the additional header file :file:`pybind11/chrono.h` conversions from c++11 chrono datatypes
764to corresponding python datetime objects are automatically enabled.
765The following rules describe how the conversions are applied.
766
Trent Houliston2f597682016-09-13 20:40:28 +1000767When passed to python objects of type ``std::chrono::system_clock::time_point`` are converted into datetime.datetime objects.
Trent Houliston352149e2016-08-25 23:08:04 +1000768These objects are those that specifically come from the system_clock as this is the only clock that measures wall time.
769
Trent Houliston2f597682016-09-13 20:40:28 +1000770When passed to python of type ``std::chrono::[other_clock]::time_point`` are converted into datetime.timedelta objects.
Trent Houliston352149e2016-08-25 23:08:04 +1000771These objects are those that come from all clocks that are not the system_clock (e.g. steady_clock).
772Clocks other than the system_clock are not measured from wall date/time and instead have any start time
773(often when the computer was turned on).
Trent Houliston2f597682016-09-13 20:40:28 +1000774Therefore as these clocks can only measure time from an arbitrary start point they are represented as timedelta from this start point.
Trent Houliston352149e2016-08-25 23:08:04 +1000775
Trent Houliston2f597682016-09-13 20:40:28 +1000776When passed to python of type ``std::chrono::duration`` are converted into datetime.timedelta objects.
777
778When python objects are passed to c++ for the case of non system clocks and durations instances of both datetime.timedelta
779and float are accepted. The float arguments are interpreted as a number of seconds since the epoch.
Trent Houliston352149e2016-08-25 23:08:04 +1000780
781.. note::
782
Trent Houliston2f597682016-09-13 20:40:28 +1000783 Other clocks may be the same as system_clock. For example on many platforms std::high_resolution_clock is the same as system_clock.
784 Because of this if you are converting a timepoint from one of these clocks they may appear to python as a datetime.datetime object.
785
Trent Houliston352149e2016-08-25 23:08:04 +1000786 Pythons datetime implementation is limited to microsecond precision.
787 The extra precision that c++11 clocks can have have (nanoseconds) will be lost upon conversion.
788 The rounding policy from c++ to python is via ``std::chrono::duration_cast<>`` (rounding towards 0 in microseconds).
789
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200790Return value policies
791=====================
792
Wenzel Jakob93296692015-10-13 23:21:54 +0200793Python and C++ use wildly different ways of managing the memory and lifetime of
794objects managed by them. This can lead to issues when creating bindings for
795functions that return a non-trivial type. Just by looking at the type
796information, it is not clear whether Python should take charge of the returned
797value and eventually free its resources, or if this is handled on the C++ side.
798For this reason, pybind11 provides a several `return value policy` annotations
799that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100800functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200801
Wenzel Jakobbf099582016-08-22 12:52:02 +0200802Return value policies can also be applied to properties, in which case the
803arguments must be passed through the :class:`cpp_function` constructor:
804
805.. code-block:: cpp
806
807 class_<MyClass>(m, "MyClass")
808 def_property("data"
809 py::cpp_function(&MyClass::getData, py::return_value_policy::copy),
810 py::cpp_function(&MyClass::setData)
811 );
812
813The following table provides an overview of the available return value policies:
814
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200815.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
816
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200817+--------------------------------------------------+----------------------------------------------------------------------------+
818| Return value policy | Description |
819+==================================================+============================================================================+
820| :enum:`return_value_policy::automatic` | This is the default return value policy, which falls back to the policy |
821| | :enum:`return_value_policy::take_ownership` when the return value is a |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200822| | pointer. Otherwise, it uses :enum:`return_value::move` or |
823| | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200824| | See below for a description of what all of these different policies do. |
825+--------------------------------------------------+----------------------------------------------------------------------------+
826| :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 +0200827| | return value is a pointer. This is the default conversion policy for |
828| | function arguments when calling Python functions manually from C++ code |
829| | (i.e. via handle::operator()). You probably won't need to use this. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200830+--------------------------------------------------+----------------------------------------------------------------------------+
831| :enum:`return_value_policy::take_ownership` | Reference an existing object (i.e. do not create a new copy) and take |
832| | ownership. Python will call the destructor and delete operator when the |
833| | object's reference count reaches zero. Undefined behavior ensues when the |
Wenzel Jakobf53e3002016-06-30 14:59:23 +0200834| | C++ side does the same. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200835+--------------------------------------------------+----------------------------------------------------------------------------+
836| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python. |
837| | This policy is comparably safe because the lifetimes of the two instances |
838| | are decoupled. |
839+--------------------------------------------------+----------------------------------------------------------------------------+
840| :enum:`return_value_policy::move` | Use ``std::move`` to move the return value contents into a new instance |
841| | that will be owned by Python. This policy is comparably safe because the |
842| | lifetimes of the two instances (move source and destination) are decoupled.|
843+--------------------------------------------------+----------------------------------------------------------------------------+
844| :enum:`return_value_policy::reference` | Reference an existing object, but do not take ownership. The C++ side is |
845| | responsible for managing the object's lifetime and deallocating it when |
846| | it is no longer used. Warning: undefined behavior will ensue when the C++ |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200847| | side deletes an object that is still referenced and used by Python. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200848+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakobbf099582016-08-22 12:52:02 +0200849| :enum:`return_value_policy::reference_internal` | Indicates that the lifetime of the return value is tied to the lifetime |
850| | of a parent object, namely the implicit ``this``, or ``self`` argument of |
851| | the called method or property. Internally, this policy works just like |
852| | :enum:`return_value_policy::reference` but additionally applies a |
853| | ``keep_alive<0, 1>`` *call policy* (described in the next section) that |
854| | prevents the parent object from being garbage collected as long as the |
855| | return value is referenced by Python. This is the default policy for |
856| | property getters created via ``def_property``, ``def_readwrite``, etc.) |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200857+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200858
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200859.. warning::
860
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400861 Code with invalid return value policies might access unitialized memory or
862 free data structures multiple times, which can lead to hard-to-debug
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200863 non-determinism and segmentation faults, hence it is worth spending the
864 time to understand all the different options in the table above.
865
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400866One important aspect of the above policies is that they only apply to instances
867which pybind11 has *not* seen before, in which case the policy clarifies
868essential questions about the return value's lifetime and ownership. When
869pybind11 knows the instance already (as identified by its type and address in
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200870memory), it will return the existing Python object wrapper rather than creating
Wenzel Jakobbf099582016-08-22 12:52:02 +0200871a new copy.
nafur717df752016-06-28 18:07:11 +0200872
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200873.. note::
874
875 The next section on :ref:`call_policies` discusses *call policies* that can be
876 specified *in addition* to a return value policy from the list above. Call
877 policies indicate reference relationships that can involve both return values
878 and parameters of functions.
879
880.. note::
881
882 As an alternative to elaborate call policies and lifetime management logic,
883 consider using smart pointers (see the section on :ref:`smart_pointers` for
884 details). Smart pointers can tell whether an object is still referenced from
885 C++ or Python, which generally eliminates the kinds of inconsistencies that
886 can lead to crashes or undefined behavior. For functions returning smart
887 pointers, it is not necessary to specify a return value policy.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100888
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200889.. _call_policies:
890
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100891Additional call policies
892========================
893
894In addition to the above return value policies, further `call policies` can be
895specified to indicate dependencies between parameters. There is currently just
896one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
897argument with index ``Patient`` should be kept alive at least until the
Wenzel Jakob0b632312016-08-18 10:58:21 +0200898argument with index ``Nurse`` is freed by the garbage collector. Argument
899indices start at one, while zero refers to the return value. For methods, index
900``1`` refers to the implicit ``this`` pointer, while regular arguments begin at
901index ``2``. Arbitrarily many call policies can be specified. When a ``Nurse``
902with value ``None`` is detected at runtime, the call policy does nothing.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100903
Wenzel Jakob0b632312016-08-18 10:58:21 +0200904This feature internally relies on the ability to create a *weak reference* to
905the nurse object, which is permitted by all classes exposed via pybind11. When
906the nurse object does not support weak references, an exception will be thrown.
907
908Consider the following example: here, the binding code for a list append
909operation ties the lifetime of the newly added element to the underlying
910container:
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100911
912.. code-block:: cpp
913
914 py::class_<List>(m, "List")
915 .def("append", &List::append, py::keep_alive<1, 2>());
916
917.. note::
918
919 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
920 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
921 0) policies from Boost.Python.
922
Wenzel Jakob61587162016-01-18 22:38:52 +0100923.. seealso::
924
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200925 The file :file:`tests/test_keep_alive.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400926 that demonstrates using :class:`keep_alive` in more detail.
Wenzel Jakob61587162016-01-18 22:38:52 +0100927
Wenzel Jakob93296692015-10-13 23:21:54 +0200928Implicit type conversions
929=========================
930
931Suppose that instances of two types ``A`` and ``B`` are used in a project, and
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200932that an ``A`` can easily be converted into an instance of type ``B`` (examples of this
Wenzel Jakob93296692015-10-13 23:21:54 +0200933could be a fixed and an arbitrary precision number type).
934
935.. code-block:: cpp
936
937 py::class_<A>(m, "A")
938 /// ... members ...
939
940 py::class_<B>(m, "B")
941 .def(py::init<A>())
942 /// ... members ...
943
944 m.def("func",
945 [](const B &) { /* .... */ }
946 );
947
948To invoke the function ``func`` using a variable ``a`` containing an ``A``
949instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
950will automatically apply an implicit type conversion, which makes it possible
951to directly write ``func(a)``.
952
953In this situation (i.e. where ``B`` has a constructor that converts from
954``A``), the following statement enables similar implicit conversions on the
955Python side:
956
957.. code-block:: cpp
958
959 py::implicitly_convertible<A, B>();
960
Wenzel Jakob3eeea6f2016-06-30 18:10:28 +0200961.. note::
962
963 Implicit conversions from ``A`` to ``B`` only work when ``B`` is a custom
964 data type that is exposed to Python via pybind11.
965
Wenzel Jakobf88af0c2016-06-22 13:52:31 +0200966.. _static_properties:
967
968Static properties
969=================
970
971The section on :ref:`properties` discussed the creation of instance properties
972that are implemented in terms of C++ getters and setters.
973
974Static properties can also be created in a similar way to expose getters and
975setters of static class attributes. It is important to note that the implicit
976``self`` argument also exists in this case and is used to pass the Python
977``type`` subclass instance. This parameter will often not be needed by the C++
978side, and the following example illustrates how to instantiate a lambda getter
979function that ignores it:
980
981.. code-block:: cpp
982
983 py::class_<Foo>(m, "Foo")
984 .def_property_readonly_static("foo", [](py::object /* self */) { return Foo(); });
985
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200986Unique pointers
987===============
988
989Given a class ``Example`` with Python bindings, it's possible to return
990instances wrapped in C++11 unique pointers, like so
991
992.. code-block:: cpp
993
994 std::unique_ptr<Example> create_example() { return std::unique_ptr<Example>(new Example()); }
995
996.. code-block:: cpp
997
998 m.def("create_example", &create_example);
999
1000In other words, there is nothing special that needs to be done. While returning
1001unique pointers in this way is allowed, it is *illegal* to use them as function
1002arguments. For instance, the following function signature cannot be processed
1003by pybind11.
1004
1005.. code-block:: cpp
1006
1007 void do_something_with_example(std::unique_ptr<Example> ex) { ... }
1008
1009The above signature would imply that Python needs to give up ownership of an
1010object that is passed to this function, which is generally not possible (for
1011instance, the object might be referenced elsewhere).
1012
Wenzel Jakobf7b58742016-04-25 23:04:27 +02001013.. _smart_pointers:
1014
Wenzel Jakob93296692015-10-13 23:21:54 +02001015Smart pointers
1016==============
1017
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +02001018This section explains how to pass values that are wrapped in "smart" pointer
Wenzel Jakobe84f5572016-04-26 23:19:19 +02001019types with internal reference counting. For the simpler C++11 unique pointers,
1020refer to the previous section.
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +02001021
Jason Rhinelander5fffe202016-09-06 12:17:06 -04001022The binding generator for classes, :class:`class_`, can be passed a template
1023type that denotes a special *holder* type that is used to manage references to
1024the object. If no such holder type template argument is given, the default for
1025a type named ``Type`` is ``std::unique_ptr<Type>``, which means that the object
1026is deallocated when Python's reference count goes to zero.
Wenzel Jakob93296692015-10-13 23:21:54 +02001027
Wenzel Jakob1853b652015-10-18 15:38:50 +02001028It is possible to switch to other types of reference counting wrappers or smart
1029pointers, which is useful in codebases that rely on them. For instance, the
1030following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +02001031
1032.. code-block:: cpp
1033
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001034 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001035
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001036Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +02001037
Wenzel Jakob1853b652015-10-18 15:38:50 +02001038To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001039argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +02001040be declared at the top level before any binding code:
1041
1042.. code-block:: cpp
1043
Wenzel Jakobb1b71402015-10-18 16:48:30 +02001044 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +02001045
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001046.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +01001047
1048 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
1049 placeholder name that is used as a template parameter of the second
1050 argument. Thus, feel free to use any identifier, but use it consistently on
1051 both sides; also, don't use the name of a type that already exists in your
1052 codebase.
1053
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001054One potential stumbling block when using holder types is that they need to be
1055applied consistently. Can you guess what's broken about the following binding
1056code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001057
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001058.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001059
Jason Rhinelander5fffe202016-09-06 12:17:06 -04001060 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
1061
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001062 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001063
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001064 class Parent {
1065 public:
1066 Parent() : child(std::make_shared<Child>()) { }
1067 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
1068 private:
1069 std::shared_ptr<Child> child;
1070 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001071
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001072 PYBIND11_PLUGIN(example) {
1073 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001074
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001075 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
1076
1077 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
1078 .def(py::init<>())
1079 .def("get_child", &Parent::get_child);
1080
1081 return m.ptr();
1082 }
1083
1084The following Python code will cause undefined behavior (and likely a
1085segmentation fault).
1086
1087.. code-block:: python
1088
1089 from example import Parent
1090 print(Parent().get_child())
1091
1092The problem is that ``Parent::get_child()`` returns a pointer to an instance of
1093``Child``, but the fact that this instance is already managed by
1094``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
1095pybind11 will create a second independent ``std::shared_ptr<...>`` that also
1096claims ownership of the pointer. In the end, the object will be freed **twice**
1097since these shared pointers have no way of knowing about each other.
1098
1099There are two ways to resolve this issue:
1100
11011. For types that are managed by a smart pointer class, never use raw pointers
1102 in function arguments or return values. In other words: always consistently
1103 wrap pointers into their designated holder types (such as
1104 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
1105 should be modified as follows:
1106
1107.. code-block:: cpp
1108
1109 std::shared_ptr<Child> get_child() { return child; }
1110
11112. Adjust the definition of ``Child`` by specifying
1112 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
1113 base class. This adds a small bit of information to ``Child`` that allows
1114 pybind11 to realize that there is already an existing
1115 ``std::shared_ptr<...>`` and communicate with it. In this case, the
1116 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001117
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001118.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
1119
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001120.. code-block:: cpp
1121
1122 class Child : public std::enable_shared_from_this<Child> { };
1123
Wenzel Jakob9bb97c12016-06-03 11:19:41 +02001124
1125Please take a look at the :ref:`macro_notes` before using this feature.
1126
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001127.. seealso::
1128
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001129 The file :file:`tests/test_smart_ptr.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001130 that demonstrates how to work with custom reference-counting holder types
1131 in more detail.
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001132
Wenzel Jakob93296692015-10-13 23:21:54 +02001133.. _custom_constructors:
1134
1135Custom constructors
1136===================
1137
1138The syntax for binding constructors was previously introduced, but it only
1139works when a constructor with the given parameters actually exists on the C++
1140side. To extend this to more general cases, let's take a look at what actually
1141happens under the hood: the following statement
1142
1143.. code-block:: cpp
1144
1145 py::class_<Example>(m, "Example")
1146 .def(py::init<int>());
1147
1148is short hand notation for
1149
1150.. code-block:: cpp
1151
1152 py::class_<Example>(m, "Example")
1153 .def("__init__",
1154 [](Example &instance, int arg) {
1155 new (&instance) Example(arg);
1156 }
1157 );
1158
1159In other words, :func:`init` creates an anonymous function that invokes an
1160in-place constructor. Memory allocation etc. is already take care of beforehand
1161within pybind11.
1162
Nickolai Belakovski63338252016-08-27 11:57:55 -07001163.. _classes_with_non_public_destructors:
1164
1165Classes with non-public destructors
1166===================================
1167
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001168If a class has a private or protected destructor (as might e.g. be the case in
1169a singleton pattern), a compile error will occur when creating bindings via
1170pybind11. The underlying issue is that the ``std::unique_ptr`` holder type that
1171is responsible for managing the lifetime of instances will reference the
1172destructor even if no deallocations ever take place. In order to expose classes
1173with private or protected destructors, it is possible to override the holder
Jason Rhinelander5fffe202016-09-06 12:17:06 -04001174type via a holder type argument to ``class_``. Pybind11 provides a helper class
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001175``py::nodelete`` that disables any destructor invocations. In this case, it is
1176crucial that instances are deallocated on the C++ side to avoid memory leaks.
Nickolai Belakovski63338252016-08-27 11:57:55 -07001177
1178.. code-block:: cpp
1179
1180 /* ... definition ... */
1181
1182 class MyClass {
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001183 private:
1184 ~MyClass() { }
Nickolai Belakovski63338252016-08-27 11:57:55 -07001185 };
1186
1187 /* ... binding code ... */
1188
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001189 py::class_<MyClass, std::unique_ptr<MyClass, py::nodelete>>(m, "MyClass")
Nickolai Belakovski63338252016-08-27 11:57:55 -07001190 .def(py::init<>)
1191
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001192.. _catching_and_throwing_exceptions:
1193
Wenzel Jakob93296692015-10-13 23:21:54 +02001194Catching and throwing exceptions
1195================================
1196
1197When C++ code invoked from Python throws an ``std::exception``, it is
1198automatically converted into a Python ``Exception``. pybind11 defines multiple
1199special exception classes that will map to different types of Python
1200exceptions:
1201
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001202.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
1203
Wenzel Jakob978e3762016-04-07 18:00:41 +02001204+--------------------------------------+------------------------------+
1205| C++ exception type | Python exception type |
1206+======================================+==============================+
1207| :class:`std::exception` | ``RuntimeError`` |
1208+--------------------------------------+------------------------------+
1209| :class:`std::bad_alloc` | ``MemoryError`` |
1210+--------------------------------------+------------------------------+
1211| :class:`std::domain_error` | ``ValueError`` |
1212+--------------------------------------+------------------------------+
1213| :class:`std::invalid_argument` | ``ValueError`` |
1214+--------------------------------------+------------------------------+
1215| :class:`std::length_error` | ``ValueError`` |
1216+--------------------------------------+------------------------------+
1217| :class:`std::out_of_range` | ``ValueError`` |
1218+--------------------------------------+------------------------------+
1219| :class:`std::range_error` | ``ValueError`` |
1220+--------------------------------------+------------------------------+
1221| :class:`pybind11::stop_iteration` | ``StopIteration`` (used to |
1222| | implement custom iterators) |
1223+--------------------------------------+------------------------------+
1224| :class:`pybind11::index_error` | ``IndexError`` (used to |
1225| | indicate out of bounds |
1226| | accesses in ``__getitem__``, |
1227| | ``__setitem__``, etc.) |
1228+--------------------------------------+------------------------------+
Sergey Lyskova95bde12016-05-08 19:31:55 -04001229| :class:`pybind11::value_error` | ``ValueError`` (used to |
1230| | indicate wrong value passed |
1231| | in ``container.remove(...)`` |
1232+--------------------------------------+------------------------------+
Jason Rhinelander5aa85be2016-08-11 21:22:05 -04001233| :class:`pybind11::key_error` | ``KeyError`` (used to |
1234| | indicate out of bounds |
1235| | accesses in ``__getitem__``, |
1236| | ``__setitem__`` in dict-like |
1237| | objects, etc.) |
1238+--------------------------------------+------------------------------+
Wenzel Jakob978e3762016-04-07 18:00:41 +02001239| :class:`pybind11::error_already_set` | Indicates that the Python |
1240| | exception flag has already |
1241| | been initialized |
1242+--------------------------------------+------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +02001243
1244When a Python function invoked from C++ throws an exception, it is converted
1245into a C++ exception of type :class:`error_already_set` whose string payload
1246contains a textual summary.
1247
1248There is also a special exception :class:`cast_error` that is thrown by
1249:func:`handle::call` when the input arguments cannot be converted to Python
1250objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001251
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001252Registering custom exception translators
1253========================================
1254
1255If the default exception conversion policy described
1256:ref:`above <catching_and_throwing_exceptions>`
1257is insufficient, pybind11 also provides support for registering custom
1258exception translators.
1259
1260The function ``register_exception_translator(translator)`` takes a stateless
1261callable (e.g. a function pointer or a lambda function without captured
1262variables) with the following call signature: ``void(std::exception_ptr)``.
1263
1264When a C++ exception is thrown, registered exception translators are tried
1265in reverse order of registration (i.e. the last registered translator gets
1266a first shot at handling the exception).
1267
1268Inside the translator, ``std::rethrow_exception`` should be used within
1269a try block to re-throw the exception. A catch clause can then use
1270``PyErr_SetString`` to set a Python exception as demonstrated
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001271in :file:`tests/test_exceptions.cpp`.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001272
1273This example also demonstrates how to create custom exception types
1274with ``py::exception``.
1275
1276The following example demonstrates this for a hypothetical exception class
1277``MyCustomException``:
1278
1279.. code-block:: cpp
1280
1281 py::register_exception_translator([](std::exception_ptr p) {
1282 try {
1283 if (p) std::rethrow_exception(p);
1284 } catch (const MyCustomException &e) {
1285 PyErr_SetString(PyExc_RuntimeError, e.what());
1286 }
1287 });
1288
1289Multiple exceptions can be handled by a single translator. If the exception is
1290not caught by the current translator, the previously registered one gets a
1291chance.
1292
1293If none of the registered exception translators is able to handle the
1294exception, it is handled by the default converter as described in the previous
1295section.
1296
1297.. note::
1298
1299 You must either call ``PyErr_SetString`` for every exception caught in a
1300 custom exception translator. Failure to do so will cause Python to crash
1301 with ``SystemError: error return without exception set``.
1302
1303 Exceptions that you do not plan to handle should simply not be caught.
1304
1305 You may also choose to explicity (re-)throw the exception to delegate it to
1306 the other existing exception translators.
1307
1308 The ``py::exception`` wrapper for creating custom exceptions cannot (yet)
Jason Rhinelander6b52c832016-09-06 12:27:00 -04001309 be used as a base type.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001310
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001311.. _eigen:
1312
1313Transparent conversion of dense and sparse Eigen data types
1314===========================================================
1315
1316Eigen [#f1]_ is C++ header-based library for dense and sparse linear algebra. Due to
1317its popularity and widespread adoption, pybind11 provides transparent
1318conversion support between Eigen and Scientific Python linear algebra data types.
1319
1320Specifically, when including the optional header file :file:`pybind11/eigen.h`,
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001321pybind11 will automatically and transparently convert
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001322
13231. Static and dynamic Eigen dense vectors and matrices to instances of
1324 ``numpy.ndarray`` (and vice versa).
1325
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040013262. Returned matrix expressions such as blocks (including columns or rows) and
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001327 diagonals will be converted to ``numpy.ndarray`` of the expression
1328 values.
1329
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040013303. Returned matrix-like objects such as Eigen::DiagonalMatrix or
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001331 Eigen::SelfAdjointView will be converted to ``numpy.ndarray`` containing the
1332 expressed value.
1333
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040013344. Eigen sparse vectors and matrices to instances of
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001335 ``scipy.sparse.csr_matrix``/``scipy.sparse.csc_matrix`` (and vice versa).
1336
1337This makes it possible to bind most kinds of functions that rely on these types.
1338One major caveat are functions that take Eigen matrices *by reference* and modify
1339them somehow, in which case the information won't be propagated to the caller.
1340
1341.. code-block:: cpp
1342
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001343 /* The Python bindings of these functions won't replicate
1344 the intended effect of modifying the function arguments */
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001345 void scale_by_2(Eigen::Vector3f &v) {
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001346 v *= 2;
1347 }
1348 void scale_by_2(Eigen::Ref<Eigen::MatrixXd> &v) {
1349 v *= 2;
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001350 }
1351
1352To see why this is, refer to the section on :ref:`opaque` (although that
1353section specifically covers STL data types, the underlying issue is the same).
1354The next two sections discuss an efficient alternative for exposing the
1355underlying native Eigen types as opaque objects in a way that still integrates
1356with NumPy and SciPy.
1357
1358.. [#f1] http://eigen.tuxfamily.org
1359
1360.. seealso::
1361
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001362 The file :file:`tests/test_eigen.cpp` contains a complete example that
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001363 shows how to pass Eigen sparse and dense data types in more detail.
1364
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001365Buffer protocol
1366===============
1367
1368Python supports an extremely general and convenient approach for exchanging
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001369data between plugin libraries. Types can expose a buffer view [#f2]_, which
1370provides fast direct access to the raw internal data representation. Suppose we
1371want to bind the following simplistic Matrix class:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001372
1373.. code-block:: cpp
1374
1375 class Matrix {
1376 public:
1377 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
1378 m_data = new float[rows*cols];
1379 }
1380 float *data() { return m_data; }
1381 size_t rows() const { return m_rows; }
1382 size_t cols() const { return m_cols; }
1383 private:
1384 size_t m_rows, m_cols;
1385 float *m_data;
1386 };
1387
1388The following binding code exposes the ``Matrix`` contents as a buffer object,
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001389making it possible to cast Matrices into NumPy arrays. It is even possible to
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001390completely avoid copy operations with Python expressions like
1391``np.array(matrix_instance, copy = False)``.
1392
1393.. code-block:: cpp
1394
1395 py::class_<Matrix>(m, "Matrix")
1396 .def_buffer([](Matrix &m) -> py::buffer_info {
1397 return py::buffer_info(
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001398 m.data(), /* Pointer to buffer */
1399 sizeof(float), /* Size of one scalar */
1400 py::format_descriptor<float>::format(), /* Python struct-style format descriptor */
1401 2, /* Number of dimensions */
1402 { m.rows(), m.cols() }, /* Buffer dimensions */
1403 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001404 sizeof(float) }
1405 );
1406 });
1407
1408The snippet above binds a lambda function, which can create ``py::buffer_info``
1409description records on demand describing a given matrix. The contents of
1410``py::buffer_info`` mirror the Python buffer protocol specification.
1411
1412.. code-block:: cpp
1413
1414 struct buffer_info {
1415 void *ptr;
1416 size_t itemsize;
1417 std::string format;
1418 int ndim;
1419 std::vector<size_t> shape;
1420 std::vector<size_t> strides;
1421 };
1422
1423To create a C++ function that can take a Python buffer object as an argument,
1424simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
1425in a great variety of configurations, hence some safety checks are usually
1426necessary in the function body. Below, you can see an basic example on how to
1427define a custom constructor for the Eigen double precision matrix
1428(``Eigen::MatrixXd``) type, which supports initialization from compatible
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001429buffer objects (e.g. a NumPy matrix).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001430
1431.. code-block:: cpp
1432
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001433 /* Bind MatrixXd (or some other Eigen type) to Python */
1434 typedef Eigen::MatrixXd Matrix;
1435
1436 typedef Matrix::Scalar Scalar;
1437 constexpr bool rowMajor = Matrix::Flags & Eigen::RowMajorBit;
1438
1439 py::class_<Matrix>(m, "Matrix")
1440 .def("__init__", [](Matrix &m, py::buffer b) {
Wenzel Jakobe7628532016-05-05 10:04:44 +02001441 typedef Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic> Strides;
Wenzel Jakobe7628532016-05-05 10:04:44 +02001442
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001443 /* Request a buffer descriptor from Python */
1444 py::buffer_info info = b.request();
1445
1446 /* Some sanity checks ... */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001447 if (info.format != py::format_descriptor<Scalar>::format())
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001448 throw std::runtime_error("Incompatible format: expected a double array!");
1449
1450 if (info.ndim != 2)
1451 throw std::runtime_error("Incompatible buffer dimension!");
1452
Wenzel Jakobe7628532016-05-05 10:04:44 +02001453 auto strides = Strides(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001454 info.strides[rowMajor ? 0 : 1] / sizeof(Scalar),
1455 info.strides[rowMajor ? 1 : 0] / sizeof(Scalar));
Wenzel Jakobe7628532016-05-05 10:04:44 +02001456
1457 auto map = Eigen::Map<Matrix, 0, Strides>(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001458 static_cat<Scalar *>(info.ptr), info.shape[0], info.shape[1], strides);
Wenzel Jakobe7628532016-05-05 10:04:44 +02001459
1460 new (&m) Matrix(map);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001461 });
1462
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001463For reference, the ``def_buffer()`` call for this Eigen data type should look
1464as follows:
1465
1466.. code-block:: cpp
1467
1468 .def_buffer([](Matrix &m) -> py::buffer_info {
1469 return py::buffer_info(
1470 m.data(), /* Pointer to buffer */
1471 sizeof(Scalar), /* Size of one scalar */
1472 /* Python struct-style format descriptor */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001473 py::format_descriptor<Scalar>::format(),
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001474 /* Number of dimensions */
1475 2,
1476 /* Buffer dimensions */
1477 { (size_t) m.rows(),
1478 (size_t) m.cols() },
1479 /* Strides (in bytes) for each index */
1480 { sizeof(Scalar) * (rowMajor ? m.cols() : 1),
1481 sizeof(Scalar) * (rowMajor ? 1 : m.rows()) }
1482 );
1483 })
1484
1485For a much easier approach of binding Eigen types (although with some
1486limitations), refer to the section on :ref:`eigen`.
1487
Wenzel Jakob93296692015-10-13 23:21:54 +02001488.. seealso::
1489
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001490 The file :file:`tests/test_buffers.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001491 that demonstrates using the buffer protocol with pybind11 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +02001492
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001493.. [#f2] http://docs.python.org/3/c-api/buffer.html
Wenzel Jakob978e3762016-04-07 18:00:41 +02001494
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001495NumPy support
1496=============
1497
1498By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
1499restrict the function so that it only accepts NumPy arrays (rather than any
Wenzel Jakob978e3762016-04-07 18:00:41 +02001500type of Python object satisfying the buffer protocol).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001501
1502In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +02001503array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001504template. For instance, the following function requires the argument to be a
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001505NumPy array containing double precision values.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001506
1507.. code-block:: cpp
1508
Wenzel Jakob93296692015-10-13 23:21:54 +02001509 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001510
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001511When it is invoked with a different type (e.g. an integer or a list of
1512integers), the binding code will attempt to cast the input into a NumPy array
1513of the requested type. Note that this feature requires the
1514:file:``pybind11/numpy.h`` header to be included.
1515
1516Data in NumPy arrays is not guaranteed to packed in a dense manner;
1517furthermore, entries can be separated by arbitrary column and row strides.
1518Sometimes, it can be useful to require a function to only accept dense arrays
1519using either the C (row-major) or Fortran (column-major) ordering. This can be
1520accomplished via a second template argument with values ``py::array::c_style``
1521or ``py::array::f_style``.
1522
1523.. code-block:: cpp
1524
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001525 void f(py::array_t<double, py::array::c_style | py::array::forcecast> array);
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001526
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001527The ``py::array::forcecast`` argument is the default value of the second
1528template paramenter, and it ensures that non-conforming arguments are converted
1529into an array satisfying the specified requirements instead of trying the next
1530function overload.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001531
Ivan Smirnov223afe32016-07-02 15:33:04 +01001532NumPy structured types
1533======================
1534
1535In order for ``py::array_t`` to work with structured (record) types, we first need
Ivan Smirnov5412a052016-07-02 16:18:42 +01001536to register the memory layout of the type. This can be done via ``PYBIND11_NUMPY_DTYPE``
Ivan Smirnov223afe32016-07-02 15:33:04 +01001537macro which expects the type followed by field names:
1538
1539.. code-block:: cpp
1540
1541 struct A {
1542 int x;
1543 double y;
1544 };
1545
1546 struct B {
1547 int z;
1548 A a;
1549 };
1550
Ivan Smirnov5412a052016-07-02 16:18:42 +01001551 PYBIND11_NUMPY_DTYPE(A, x, y);
1552 PYBIND11_NUMPY_DTYPE(B, z, a);
Ivan Smirnov223afe32016-07-02 15:33:04 +01001553
1554 /* now both A and B can be used as template arguments to py::array_t */
1555
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001556Vectorizing functions
1557=====================
1558
1559Suppose we want to bind a function with the following signature to Python so
1560that it can process arbitrary NumPy array arguments (vectors, matrices, general
1561N-D arrays) in addition to its normal arguments:
1562
1563.. code-block:: cpp
1564
1565 double my_func(int x, float y, double z);
1566
Wenzel Jakob8f4eb002015-10-15 18:13:33 +02001567After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001568
1569.. code-block:: cpp
1570
1571 m.def("vectorized_func", py::vectorize(my_func));
1572
1573Invoking the function like below causes 4 calls to be made to ``my_func`` with
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001574each of the array elements. The significant advantage of this compared to
Wenzel Jakob978e3762016-04-07 18:00:41 +02001575solutions like ``numpy.vectorize()`` is that the loop over the elements runs
1576entirely on the C++ side and can be crunched down into a tight, optimized loop
1577by the compiler. The result is returned as a NumPy array of type
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001578``numpy.dtype.float64``.
1579
Wenzel Jakob99279f72016-06-03 11:19:29 +02001580.. code-block:: pycon
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001581
1582 >>> x = np.array([[1, 3],[5, 7]])
1583 >>> y = np.array([[2, 4],[6, 8]])
1584 >>> z = 3
1585 >>> result = vectorized_func(x, y, z)
1586
1587The scalar argument ``z`` is transparently replicated 4 times. The input
1588arrays ``x`` and ``y`` are automatically converted into the right types (they
1589are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
1590``numpy.dtype.float32``, respectively)
1591
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001592Sometimes we might want to explicitly exclude an argument from the vectorization
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001593because it makes little sense to wrap it in a NumPy array. For instance,
1594suppose the function signature was
1595
1596.. code-block:: cpp
1597
1598 double my_func(int x, float y, my_custom_type *z);
1599
1600This can be done with a stateful Lambda closure:
1601
1602.. code-block:: cpp
1603
1604 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
1605 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +02001606 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001607 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
1608 return py::vectorize(stateful_closure)(x, y);
1609 }
1610 );
1611
Wenzel Jakob61587162016-01-18 22:38:52 +01001612In cases where the computation is too complicated to be reduced to
1613``vectorize``, it will be necessary to create and access the buffer contents
1614manually. The following snippet contains a complete example that shows how this
1615works (the code is somewhat contrived, since it could have been done more
1616simply using ``vectorize``).
1617
1618.. code-block:: cpp
1619
1620 #include <pybind11/pybind11.h>
1621 #include <pybind11/numpy.h>
1622
1623 namespace py = pybind11;
1624
1625 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
1626 auto buf1 = input1.request(), buf2 = input2.request();
1627
1628 if (buf1.ndim != 1 || buf2.ndim != 1)
1629 throw std::runtime_error("Number of dimensions must be one");
1630
Ivan Smirnovb6518592016-08-13 13:28:56 +01001631 if (buf1.size != buf2.size)
Wenzel Jakob61587162016-01-18 22:38:52 +01001632 throw std::runtime_error("Input shapes must match");
1633
Ivan Smirnovb6518592016-08-13 13:28:56 +01001634 /* No pointer is passed, so NumPy will allocate the buffer */
1635 auto result = py::array_t<double>(buf1.size);
Wenzel Jakob61587162016-01-18 22:38:52 +01001636
1637 auto buf3 = result.request();
1638
1639 double *ptr1 = (double *) buf1.ptr,
1640 *ptr2 = (double *) buf2.ptr,
1641 *ptr3 = (double *) buf3.ptr;
1642
1643 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
1644 ptr3[idx] = ptr1[idx] + ptr2[idx];
1645
1646 return result;
1647 }
1648
1649 PYBIND11_PLUGIN(test) {
1650 py::module m("test");
1651 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
1652 return m.ptr();
1653 }
1654
Wenzel Jakob93296692015-10-13 23:21:54 +02001655.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001656
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001657 The file :file:`tests/test_numpy_vectorize.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001658 example that demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001659
Wenzel Jakob93296692015-10-13 23:21:54 +02001660Functions taking Python objects as arguments
1661============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001662
Wenzel Jakob93296692015-10-13 23:21:54 +02001663pybind11 exposes all major Python types using thin C++ wrapper classes. These
1664wrapper classes can also be used as parameters of functions in bindings, which
1665makes it possible to directly work with native Python types on the C++ side.
1666For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001667
Wenzel Jakob93296692015-10-13 23:21:54 +02001668.. code-block:: cpp
1669
1670 void print_dict(py::dict dict) {
1671 /* Easily interact with Python types */
1672 for (auto item : dict)
1673 std::cout << "key=" << item.first << ", "
1674 << "value=" << item.second << std::endl;
1675 }
1676
1677Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +01001678:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001679:class:`list`, :class:`dict`, :class:`slice`, :class:`none`, :class:`capsule`,
1680:class:`iterable`, :class:`iterator`, :class:`function`, :class:`buffer`,
1681:class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +02001682
Wenzel Jakob436b7312015-10-20 01:04:30 +02001683In this kind of mixed code, it is often necessary to convert arbitrary C++
1684types to Python, which can be done using :func:`cast`:
1685
1686.. code-block:: cpp
1687
1688 MyClass *cls = ..;
1689 py::object obj = py::cast(cls);
1690
1691The reverse direction uses the following syntax:
1692
1693.. code-block:: cpp
1694
1695 py::object obj = ...;
1696 MyClass *cls = obj.cast<MyClass *>();
1697
1698When conversion fails, both directions throw the exception :class:`cast_error`.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001699It is also possible to call python functions via ``operator()``.
1700
1701.. code-block:: cpp
1702
1703 py::function f = <...>;
1704 py::object result_py = f(1234, "hello", some_instance);
1705 MyClass &result = result_py.cast<MyClass>();
1706
Dean Moldovan625bd482016-09-02 16:40:49 +02001707Keyword arguments are also supported. In Python, there is the usual call syntax:
1708
1709.. code-block:: python
1710
1711 def f(number, say, to):
1712 ... # function code
1713
1714 f(1234, say="hello", to=some_instance) # keyword call in Python
1715
1716In C++, the same call can be made using:
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001717
1718.. code-block:: cpp
1719
Dean Moldovan625bd482016-09-02 16:40:49 +02001720 using pybind11::literals; // to bring in the `_a` literal
1721 f(1234, "say"_a="hello", "to"_a=some_instance); // keyword call in C++
1722
1723Unpacking of ``*args`` and ``**kwargs`` is also possible and can be mixed with
1724other arguments:
1725
1726.. code-block:: cpp
1727
1728 // * unpacking
1729 py::tuple args = py::make_tuple(1234, "hello", some_instance);
1730 f(*args);
1731
1732 // ** unpacking
1733 py::dict kwargs = py::dict("number"_a=1234, "say"_a="hello", "to"_a=some_instance);
1734 f(**kwargs);
1735
1736 // mixed keywords, * and ** unpacking
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001737 py::tuple args = py::make_tuple(1234);
Dean Moldovan625bd482016-09-02 16:40:49 +02001738 py::dict kwargs = py::dict("to"_a=some_instance);
1739 f(*args, "say"_a="hello", **kwargs);
1740
1741Generalized unpacking according to PEP448_ is also supported:
1742
1743.. code-block:: cpp
1744
1745 py::dict kwargs1 = py::dict("number"_a=1234);
1746 py::dict kwargs2 = py::dict("to"_a=some_instance);
1747 f(**kwargs1, "say"_a="hello", **kwargs2);
Wenzel Jakob436b7312015-10-20 01:04:30 +02001748
Wenzel Jakob93296692015-10-13 23:21:54 +02001749.. seealso::
1750
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001751 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001752 example that demonstrates passing native Python types in more detail. The
Dean Moldovan625bd482016-09-02 16:40:49 +02001753 file :file:`tests/test_callbacks.cpp` presents a few examples of calling
1754 Python functions from C++, including keywords arguments and unpacking.
1755
1756.. _PEP448: https://www.python.org/dev/peps/pep-0448/
1757
1758Using Python's print function in C++
1759====================================
1760
1761The usual way to write output in C++ is using ``std::cout`` while in Python one
1762would use ``print``. Since these methods use different buffers, mixing them can
1763lead to output order issues. To resolve this, pybind11 modules can use the
1764:func:`py::print` function which writes to Python's ``sys.stdout`` for consistency.
1765
1766Python's ``print`` function is replicated in the C++ API including optional
1767keyword arguments ``sep``, ``end``, ``file``, ``flush``. Everything works as
1768expected in Python:
1769
1770.. code-block:: cpp
1771
1772 py::print(1, 2.0, "three"); // 1 2.0 three
1773 py::print(1, 2.0, "three", "sep"_a="-"); // 1-2.0-three
1774
1775 auto args = py::make_tuple("unpacked", true);
1776 py::print("->", *args, "end"_a="<-"); // -> unpacked True <-
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001777
1778Default arguments revisited
1779===========================
1780
1781The section on :ref:`default_args` previously discussed basic usage of default
1782arguments using pybind11. One noteworthy aspect of their implementation is that
1783default arguments are converted to Python objects right at declaration time.
1784Consider the following example:
1785
1786.. code-block:: cpp
1787
1788 py::class_<MyClass>("MyClass")
1789 .def("myFunction", py::arg("arg") = SomeType(123));
1790
1791In this case, pybind11 must already be set up to deal with values of the type
1792``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
1793exception will be thrown.
1794
1795Another aspect worth highlighting is that the "preview" of the default argument
1796in the function signature is generated using the object's ``__repr__`` method.
1797If not available, the signature may not be very helpful, e.g.:
1798
Wenzel Jakob99279f72016-06-03 11:19:29 +02001799.. code-block:: pycon
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001800
1801 FUNCTIONS
1802 ...
1803 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +01001804 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001805 ...
1806
1807The first way of addressing this is by defining ``SomeType.__repr__``.
1808Alternatively, it is possible to specify the human-readable preview of the
1809default argument manually using the ``arg_t`` notation:
1810
1811.. code-block:: cpp
1812
1813 py::class_<MyClass>("MyClass")
1814 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
1815
Wenzel Jakobc769fce2016-03-03 12:03:30 +01001816Sometimes it may be necessary to pass a null pointer value as a default
1817argument. In this case, remember to cast it to the underlying type in question,
1818like so:
1819
1820.. code-block:: cpp
1821
1822 py::class_<MyClass>("MyClass")
1823 .def("myFunction", py::arg("arg") = (SomeType *) nullptr);
1824
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001825Binding functions that accept arbitrary numbers of arguments and keywords arguments
1826===================================================================================
1827
1828Python provides a useful mechanism to define functions that accept arbitrary
1829numbers of arguments and keyword arguments:
1830
1831.. code-block:: cpp
1832
1833 def generic(*args, **kwargs):
1834 # .. do something with args and kwargs
1835
1836Such functions can also be created using pybind11:
1837
1838.. code-block:: cpp
1839
1840 void generic(py::args args, py::kwargs kwargs) {
1841 /// .. do something with args
1842 if (kwargs)
1843 /// .. do something with kwargs
1844 }
1845
1846 /// Binding code
1847 m.def("generic", &generic);
1848
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001849(See ``tests/test_kwargs_and_defaults.cpp``). The class ``py::args``
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001850derives from ``py::list`` and ``py::kwargs`` derives from ``py::dict`` Note
1851that the ``kwargs`` argument is invalid if no keyword arguments were actually
1852provided. Please refer to the other examples for details on how to iterate
1853over these, and on how to cast their entries into C++ objects.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001854
Wenzel Jakob3764e282016-08-01 23:34:48 +02001855.. warning::
1856
1857 Unlike Python, pybind11 does not allow combining normal parameters with the
1858 ``args`` / ``kwargs`` special parameters.
1859
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001860Partitioning code over multiple extension modules
1861=================================================
1862
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001863It's straightforward to split binding code over multiple extension modules,
1864while referencing types that are declared elsewhere. Everything "just" works
1865without any special precautions. One exception to this rule occurs when
1866extending a type declared in another extension module. Recall the basic example
1867from Section :ref:`inheritance`.
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001868
1869.. code-block:: cpp
1870
1871 py::class_<Pet> pet(m, "Pet");
1872 pet.def(py::init<const std::string &>())
1873 .def_readwrite("name", &Pet::name);
1874
1875 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1876 .def(py::init<const std::string &>())
1877 .def("bark", &Dog::bark);
1878
1879Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1880whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1881course that the variable ``pet`` is not available anymore though it is needed
1882to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1883However, it can be acquired as follows:
1884
1885.. code-block:: cpp
1886
1887 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1888
1889 py::class_<Dog>(m, "Dog", pet)
1890 .def(py::init<const std::string &>())
1891 .def("bark", &Dog::bark);
1892
Jason Rhinelander6b52c832016-09-06 12:27:00 -04001893Alternatively, you can specify the base class as a template parameter option to
1894``class_``, which performs an automated lookup of the corresponding Python
1895type. Like the above code, however, this also requires invoking the ``import``
1896function once to ensure that the pybind11 binding code of the module ``basic``
1897has been executed:
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001898
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001899.. code-block:: cpp
1900
1901 py::module::import("basic");
1902
Jason Rhinelander6b52c832016-09-06 12:27:00 -04001903 py::class_<Dog, Pet>(m, "Dog")
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001904 .def(py::init<const std::string &>())
1905 .def("bark", &Dog::bark);
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001906
Wenzel Jakob978e3762016-04-07 18:00:41 +02001907Naturally, both methods will fail when there are cyclic dependencies.
1908
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001909Note that compiling code which has its default symbol visibility set to
1910*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
1911ability to access types defined in another extension module. Workarounds
1912include changing the global symbol visibility (not recommended, because it will
1913lead unnecessarily large binaries) or manually exporting types that are
1914accessed by multiple extension modules:
1915
1916.. code-block:: cpp
1917
1918 #ifdef _WIN32
1919 # define EXPORT_TYPE __declspec(dllexport)
1920 #else
1921 # define EXPORT_TYPE __attribute__ ((visibility("default")))
1922 #endif
1923
1924 class EXPORT_TYPE Dog : public Animal {
1925 ...
1926 };
1927
1928
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001929Pickling support
1930================
1931
1932Python's ``pickle`` module provides a powerful facility to serialize and
1933de-serialize a Python object graph into a binary data stream. To pickle and
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02001934unpickle C++ classes using pybind11, two additional functions must be provided.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001935Suppose the class in question has the following signature:
1936
1937.. code-block:: cpp
1938
1939 class Pickleable {
1940 public:
1941 Pickleable(const std::string &value) : m_value(value) { }
1942 const std::string &value() const { return m_value; }
1943
1944 void setExtra(int extra) { m_extra = extra; }
1945 int extra() const { return m_extra; }
1946 private:
1947 std::string m_value;
1948 int m_extra = 0;
1949 };
1950
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001951The binding code including the requisite ``__setstate__`` and ``__getstate__`` methods [#f3]_
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001952looks as follows:
1953
1954.. code-block:: cpp
1955
1956 py::class_<Pickleable>(m, "Pickleable")
1957 .def(py::init<std::string>())
1958 .def("value", &Pickleable::value)
1959 .def("extra", &Pickleable::extra)
1960 .def("setExtra", &Pickleable::setExtra)
1961 .def("__getstate__", [](const Pickleable &p) {
1962 /* Return a tuple that fully encodes the state of the object */
1963 return py::make_tuple(p.value(), p.extra());
1964 })
1965 .def("__setstate__", [](Pickleable &p, py::tuple t) {
1966 if (t.size() != 2)
1967 throw std::runtime_error("Invalid state!");
1968
Wenzel Jakobd40885a2016-04-13 13:30:05 +02001969 /* Invoke the in-place constructor. Note that this is needed even
1970 when the object just has a trivial default constructor */
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001971 new (&p) Pickleable(t[0].cast<std::string>());
1972
1973 /* Assign any additional state */
1974 p.setExtra(t[1].cast<int>());
1975 });
1976
1977An instance can now be pickled as follows:
1978
1979.. code-block:: python
1980
1981 try:
1982 import cPickle as pickle # Use cPickle on Python 2.7
1983 except ImportError:
1984 import pickle
1985
1986 p = Pickleable("test_value")
1987 p.setExtra(15)
Wenzel Jakob81e09752016-04-30 23:13:03 +02001988 data = pickle.dumps(p, 2)
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001989
Wenzel Jakob81e09752016-04-30 23:13:03 +02001990Note that only the cPickle module is supported on Python 2.7. The second
1991argument to ``dumps`` is also crucial: it selects the pickle protocol version
19922, since the older version 1 is not supported. Newer versions are also fine—for
1993instance, specify ``-1`` to always use the latest available version. Beware:
1994failure to follow these instructions will cause important pybind11 memory
1995allocation routines to be skipped during unpickling, which will likely lead to
1996memory corruption and/or segmentation faults.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001997
1998.. seealso::
1999
Dean Moldovanec0d38e2016-08-13 03:09:52 +02002000 The file :file:`tests/test_pickling.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04002001 that demonstrates how to pickle and unpickle types using pybind11 in more
2002 detail.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02002003
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02002004.. [#f3] http://docs.python.org/3/library/pickle.html#pickling-class-instances
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02002005
2006Generating documentation using Sphinx
2007=====================================
2008
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02002009Sphinx [#f4]_ has the ability to inspect the signatures and documentation
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02002010strings in pybind11-based extension modules to automatically generate beautiful
Wenzel Jakobca8dc082016-06-03 14:24:17 +02002011documentation in a variety formats. The python_example repository [#f5]_ contains a
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02002012simple example repository which uses this approach.
2013
2014There are two potential gotchas when using this approach: first, make sure that
2015the resulting strings do not contain any :kbd:`TAB` characters, which break the
2016docstring parsing routines. You may want to use C++11 raw string literals,
2017which are convenient for multi-line comments. Conveniently, any excess
2018indentation will be automatically be removed by Sphinx. However, for this to
2019work, it is important that all lines are indented consistently, i.e.:
2020
2021.. code-block:: cpp
2022
2023 // ok
2024 m.def("foo", &foo, R"mydelimiter(
2025 The foo function
2026
2027 Parameters
2028 ----------
2029 )mydelimiter");
2030
2031 // *not ok*
2032 m.def("foo", &foo, R"mydelimiter(The foo function
2033
2034 Parameters
2035 ----------
2036 )mydelimiter");
2037
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02002038.. [#f4] http://www.sphinx-doc.org
Wenzel Jakobca8dc082016-06-03 14:24:17 +02002039.. [#f5] http://github.com/pybind/python_example
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002040
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002041Evaluating Python expressions from strings and files
2042====================================================
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002043
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002044pybind11 provides the :func:`eval` and :func:`eval_file` functions to evaluate
2045Python expressions and statements. The following example illustrates how they
2046can be used.
2047
2048Both functions accept a template parameter that describes how the argument
2049should be interpreted. Possible choices include ``eval_expr`` (isolated
2050expression), ``eval_single_statement`` (a single statement, return value is
2051always ``none``), and ``eval_statements`` (sequence of statements, return value
2052is always ``none``).
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002053
2054.. code-block:: cpp
2055
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002056 // At beginning of file
2057 #include <pybind11/eval.h>
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002058
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002059 ...
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002060
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002061 // Evaluate in scope of main module
2062 py::object scope = py::module::import("__main__").attr("__dict__");
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02002063
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02002064 // Evaluate an isolated expression
2065 int result = py::eval("my_variable + 10", scope).cast<int>();
2066
2067 // Evaluate a sequence of statements
2068 py::eval<py::eval_statements>(
2069 "print('Hello')\n"
2070 "print('world!');",
2071 scope);
2072
2073 // Evaluate the statements in an separate Python file on disk
2074 py::eval_file("script.py", scope);
Wenzel Jakob48ce0722016-09-06 14:13:22 +09002075
2076Development of custom type casters
2077==================================
2078
2079In very rare cases, applications may require custom type casters that cannot be
2080expressed using the abstractions provided by pybind11, thus requiring raw
2081Python C API calls. This is fairly advanced usage and should only be pursued by
2082experts who are familiar with the intricacies of Python reference counting.
2083
2084The following snippets demonstrate how this works for a very simple ``inty``
2085type that that should be convertible from Python types that provide a
2086``__int__(self)`` method.
2087
2088.. code-block:: cpp
2089
2090 struct inty { long long_value; };
2091
2092 void print(inty s) {
2093 std::cout << s.long_value << std::endl;
2094 }
2095
2096The following Python snippet demonstrates the intended usage from the Python side:
2097
2098.. code-block:: python
2099
2100 class A:
2101 def __int__(self):
2102 return 123
2103
2104 from example import print
2105 print(A())
2106
2107To register the necessary conversion routines, it is necessary to add
2108a partial overload to the ``pybind11::detail::type_caster<T>`` template.
2109Although this is an implementation detail, adding partial overloads to this
2110type is explicitly allowed.
2111
2112.. code-block:: cpp
2113
2114 namespace pybind11 {
2115 namespace detail {
2116 template <> struct type_caster<inty> {
2117 public:
2118 /**
2119 * This macro establishes the name 'inty' in
2120 * function signatures and declares a local variable
2121 * 'value' of type inty
2122 */
2123 PYBIND11_TYPE_CASTER(inty, _("inty"));
2124
2125 /**
2126 * Conversion part 1 (Python->C++): convert a PyObject into a inty
2127 * instance or return false upon failure. The second argument
2128 * indicates whether implicit conversions should be applied.
2129 */
2130 bool load(handle src, bool) {
2131 /* Extract PyObject from handle */
2132 PyObject *source = src.ptr();
2133 /* Try converting into a Python integer value */
2134 PyObject *tmp = PyNumber_Long(source);
2135 if (!tmp)
2136 return false;
2137 /* Now try to convert into a C++ int */
2138 value.long_value = PyLong_AsLong(tmp);
2139 Py_DECREF(tmp);
2140 /* Ensure return code was OK (to avoid out-of-range errors etc) */
2141 return !(value.long_value == -1 && !PyErr_Occurred());
2142 }
2143
2144 /**
2145 * Conversion part 2 (C++ -> Python): convert an inty instance into
2146 * a Python object. The second and third arguments are used to
2147 * indicate the return value policy and parent object (for
2148 * ``return_value_policy::reference_internal``) and are generally
2149 * ignored by implicit casters.
2150 */
2151 static handle cast(inty src, return_value_policy /* policy */, handle /* parent */) {
2152 return PyLong_FromLong(src.long_value);
2153 }
2154 };
2155 }
2156 };