blob: ddb99c0891961ac86e1179cd26df5c75943be61c [file] [log] [blame]
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001.. _advanced:
2
3Advanced topics
4###############
5
Wenzel Jakob93296692015-10-13 23:21:54 +02006For brevity, the rest of this chapter assumes that the following two lines are
7present:
8
9.. code-block:: cpp
10
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020011 #include <pybind11/pybind11.h>
Wenzel Jakob93296692015-10-13 23:21:54 +020012
Wenzel Jakob10e62e12015-10-15 22:46:07 +020013 namespace py = pybind11;
Wenzel Jakob93296692015-10-13 23:21:54 +020014
Wenzel Jakobde3ad072016-02-02 11:38:21 +010015Exporting constants and mutable objects
16=======================================
17
18To expose a C++ constant, use the ``attr`` function to register it in a module
19as shown below. The ``int_`` class is one of many small wrapper objects defined
20in ``pybind11/pytypes.h``. General objects (including integers) can also be
21converted using the function ``cast``.
22
23.. code-block:: cpp
24
25 PYBIND11_PLUGIN(example) {
26 py::module m("example", "pybind11 example plugin");
27 m.attr("MY_CONSTANT") = py::int_(123);
28 m.attr("MY_CONSTANT_2") = py::cast(new MyObject());
29 }
30
Wenzel Jakob28f98aa2015-10-13 02:57:16 +020031Operator overloading
32====================
33
Wenzel Jakob93296692015-10-13 23:21:54 +020034Suppose that we're given the following ``Vector2`` class with a vector addition
35and scalar multiplication operation, all implemented using overloaded operators
36in C++.
37
38.. code-block:: cpp
39
40 class Vector2 {
41 public:
42 Vector2(float x, float y) : x(x), y(y) { }
43
Wenzel Jakob93296692015-10-13 23:21:54 +020044 Vector2 operator+(const Vector2 &v) const { return Vector2(x + v.x, y + v.y); }
45 Vector2 operator*(float value) const { return Vector2(x * value, y * value); }
46 Vector2& operator+=(const Vector2 &v) { x += v.x; y += v.y; return *this; }
47 Vector2& operator*=(float v) { x *= v; y *= v; return *this; }
48
Wenzel Jakobf64feaf2016-04-28 14:33:45 +020049 friend Vector2 operator*(float f, const Vector2 &v) {
50 return Vector2(f * v.x, f * v.y);
51 }
Wenzel Jakob93296692015-10-13 23:21:54 +020052
Wenzel Jakobf64feaf2016-04-28 14:33:45 +020053 std::string toString() const {
54 return "[" + std::to_string(x) + ", " + std::to_string(y) + "]";
55 }
Wenzel Jakob93296692015-10-13 23:21:54 +020056 private:
57 float x, y;
58 };
59
60The following snippet shows how the above operators can be conveniently exposed
61to Python.
62
63.. code-block:: cpp
64
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020065 #include <pybind11/operators.h>
Wenzel Jakob93296692015-10-13 23:21:54 +020066
Wenzel Jakobb1b71402015-10-18 16:48:30 +020067 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +020068 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +020069
70 py::class_<Vector2>(m, "Vector2")
71 .def(py::init<float, float>())
72 .def(py::self + py::self)
73 .def(py::self += py::self)
74 .def(py::self *= float())
75 .def(float() * py::self)
76 .def("__repr__", &Vector2::toString);
77
78 return m.ptr();
79 }
80
81Note that a line like
82
83.. code-block:: cpp
84
85 .def(py::self * float())
86
87is really just short hand notation for
88
89.. code-block:: cpp
90
91 .def("__mul__", [](const Vector2 &a, float b) {
92 return a * b;
93 })
94
95This can be useful for exposing additional operators that don't exist on the
96C++ side, or to perform other types of customization.
97
98.. note::
99
100 To use the more convenient ``py::self`` notation, the additional
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200101 header file :file:`pybind11/operators.h` must be included.
Wenzel Jakob93296692015-10-13 23:21:54 +0200102
103.. seealso::
104
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200105 The file :file:`tests/test_operator_overloading.cpp` contains a
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400106 complete example that demonstrates how to work with overloaded operators in
107 more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200108
109Callbacks and passing anonymous functions
110=========================================
111
112The C++11 standard brought lambda functions and the generic polymorphic
113function wrapper ``std::function<>`` to the C++ programming language, which
114enable powerful new ways of working with functions. Lambda functions come in
115two flavors: stateless lambda function resemble classic function pointers that
116link to an anonymous piece of code, while stateful lambda functions
117additionally depend on captured variables that are stored in an anonymous
118*lambda closure object*.
119
120Here is a simple example of a C++ function that takes an arbitrary function
121(stateful or stateless) with signature ``int -> int`` as an argument and runs
122it with the value 10.
123
124.. code-block:: cpp
125
126 int func_arg(const std::function<int(int)> &f) {
127 return f(10);
128 }
129
130The example below is more involved: it takes a function of signature ``int -> int``
131and returns another function of the same kind. The return value is a stateful
132lambda function, which stores the value ``f`` in the capture object and adds 1 to
133its return value upon execution.
134
135.. code-block:: cpp
136
137 std::function<int(int)> func_ret(const std::function<int(int)> &f) {
138 return [f](int i) {
139 return f(i) + 1;
140 };
141 }
142
Brad Harmon835fc062016-06-16 13:19:15 -0500143This example demonstrates using python named parameters in C++ callbacks which
144requires using ``py::cpp_function`` as a wrapper. Usage is similar to defining
145methods of classes:
146
147.. code-block:: cpp
148
149 py::cpp_function func_cpp() {
150 return py::cpp_function([](int i) { return i+1; },
151 py::arg("number"));
152 }
153
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200154After including the extra header file :file:`pybind11/functional.h`, it is almost
Brad Harmon835fc062016-06-16 13:19:15 -0500155trivial to generate binding code for all of these functions.
Wenzel Jakob93296692015-10-13 23:21:54 +0200156
157.. code-block:: cpp
158
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200159 #include <pybind11/functional.h>
Wenzel Jakob93296692015-10-13 23:21:54 +0200160
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200161 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200162 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200163
164 m.def("func_arg", &func_arg);
165 m.def("func_ret", &func_ret);
Brad Harmon835fc062016-06-16 13:19:15 -0500166 m.def("func_cpp", &func_cpp);
Wenzel Jakob93296692015-10-13 23:21:54 +0200167
168 return m.ptr();
169 }
170
171The following interactive session shows how to call them from Python.
172
Wenzel Jakob99279f72016-06-03 11:19:29 +0200173.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200174
175 $ python
176 >>> import example
177 >>> def square(i):
178 ... return i * i
179 ...
180 >>> example.func_arg(square)
181 100L
182 >>> square_plus_1 = example.func_ret(square)
183 >>> square_plus_1(4)
184 17L
Brad Harmon835fc062016-06-16 13:19:15 -0500185 >>> plus_1 = func_cpp()
186 >>> plus_1(number=43)
187 44L
Wenzel Jakob93296692015-10-13 23:21:54 +0200188
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100189.. warning::
190
191 Keep in mind that passing a function from C++ to Python (or vice versa)
192 will instantiate a piece of wrapper code that translates function
Wenzel Jakob954b7932016-07-10 10:13:18 +0200193 invocations between the two languages. Naturally, this translation
194 increases the computational cost of each function call somewhat. A
195 problematic situation can arise when a function is copied back and forth
196 between Python and C++ many times in a row, in which case the underlying
197 wrappers will accumulate correspondingly. The resulting long sequence of
198 C++ -> Python -> C++ -> ... roundtrips can significantly decrease
199 performance.
200
201 There is one exception: pybind11 detects case where a stateless function
202 (i.e. a function pointer or a lambda function without captured variables)
203 is passed as an argument to another C++ function exposed in Python. In this
204 case, there is no overhead. Pybind11 will extract the underlying C++
205 function pointer from the wrapped function to sidestep a potential C++ ->
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200206 Python -> C++ roundtrip. This is demonstrated in :file:`tests/test_callbacks.cpp`.
Wenzel Jakob954b7932016-07-10 10:13:18 +0200207
208.. note::
209
210 This functionality is very useful when generating bindings for callbacks in
211 C++ libraries (e.g. GUI libraries, asynchronous networking libraries, etc.).
212
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200213 The file :file:`tests/test_callbacks.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400214 that demonstrates how to work with callbacks and anonymous functions in
215 more detail.
Wenzel Jakoba4175d62015-11-17 08:30:34 +0100216
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200217Overriding virtual functions in Python
218======================================
219
Wenzel Jakob93296692015-10-13 23:21:54 +0200220Suppose that a C++ class or interface has a virtual function that we'd like to
221to override from within Python (we'll focus on the class ``Animal``; ``Dog`` is
222given as a specific example of how one would do this with traditional C++
223code).
224
225.. code-block:: cpp
226
227 class Animal {
228 public:
229 virtual ~Animal() { }
230 virtual std::string go(int n_times) = 0;
231 };
232
233 class Dog : public Animal {
234 public:
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400235 std::string go(int n_times) override {
Wenzel Jakob93296692015-10-13 23:21:54 +0200236 std::string result;
237 for (int i=0; i<n_times; ++i)
238 result += "woof! ";
239 return result;
240 }
241 };
242
243Let's also suppose that we are given a plain function which calls the
244function ``go()`` on an arbitrary ``Animal`` instance.
245
246.. code-block:: cpp
247
248 std::string call_go(Animal *animal) {
249 return animal->go(3);
250 }
251
252Normally, the binding code for these classes would look as follows:
253
254.. code-block:: cpp
255
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200256 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200257 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200258
259 py::class_<Animal> animal(m, "Animal");
260 animal
261 .def("go", &Animal::go);
262
263 py::class_<Dog>(m, "Dog", animal)
264 .def(py::init<>());
265
266 m.def("call_go", &call_go);
267
268 return m.ptr();
269 }
270
271However, these bindings are impossible to extend: ``Animal`` is not
272constructible, and we clearly require some kind of "trampoline" that
273redirects virtual calls back to Python.
274
275Defining a new type of ``Animal`` from within Python is possible but requires a
276helper class that is defined as follows:
277
278.. code-block:: cpp
279
280 class PyAnimal : public Animal {
281 public:
282 /* Inherit the constructors */
283 using Animal::Animal;
284
285 /* Trampoline (need one for each virtual function) */
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400286 std::string go(int n_times) override {
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200287 PYBIND11_OVERLOAD_PURE(
Wenzel Jakob93296692015-10-13 23:21:54 +0200288 std::string, /* Return type */
289 Animal, /* Parent class */
290 go, /* Name of function */
291 n_times /* Argument(s) */
292 );
293 }
294 };
295
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200296The macro :func:`PYBIND11_OVERLOAD_PURE` should be used for pure virtual
297functions, and :func:`PYBIND11_OVERLOAD` should be used for functions which have
Wenzel Jakob0d3fc352016-07-08 10:52:10 +0200298a default implementation.
Wenzel Jakob1e3be732016-05-24 23:42:05 +0200299
300There are also two alternate macros :func:`PYBIND11_OVERLOAD_PURE_NAME` and
301:func:`PYBIND11_OVERLOAD_NAME` which take a string-valued name argument
302after the *Name of the function* slot. This is useful when the C++ and Python
303versions of the function have different names, e.g. ``operator()`` vs ``__call__``.
304
305The binding code also needs a few minor adaptations (highlighted):
Wenzel Jakob93296692015-10-13 23:21:54 +0200306
307.. code-block:: cpp
308 :emphasize-lines: 4,6,7
309
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200310 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200311 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200312
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200313 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal /* <--- trampoline*/> animal(m, "Animal");
Wenzel Jakob93296692015-10-13 23:21:54 +0200314 animal
Wenzel Jakob93296692015-10-13 23:21:54 +0200315 .def(py::init<>())
316 .def("go", &Animal::go);
317
318 py::class_<Dog>(m, "Dog", animal)
319 .def(py::init<>());
320
321 m.def("call_go", &call_go);
322
323 return m.ptr();
324 }
325
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200326Importantly, pybind11 is made aware of the trampoline trampoline helper class
327by specifying it as the *third* template argument to :class:`class_`. The
328second argument with the unique pointer is simply the default holder type used
329by pybind11. Following this, we are able to define a constructor as usual.
Wenzel Jakob93296692015-10-13 23:21:54 +0200330
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400331Note, however, that the above is sufficient for allowing python classes to
332extend ``Animal``, but not ``Dog``: see ref:`virtual_and_inheritance` for the
333necessary steps required to providing proper overload support for inherited
334classes.
335
Wenzel Jakob93296692015-10-13 23:21:54 +0200336The Python session below shows how to override ``Animal::go`` and invoke it via
337a virtual method call.
338
Wenzel Jakob99279f72016-06-03 11:19:29 +0200339.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200340
341 >>> from example import *
342 >>> d = Dog()
343 >>> call_go(d)
344 u'woof! woof! woof! '
345 >>> class Cat(Animal):
346 ... def go(self, n_times):
347 ... return "meow! " * n_times
348 ...
349 >>> c = Cat()
350 >>> call_go(c)
351 u'meow! meow! meow! '
352
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200353Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakobbd986fe2016-05-21 10:48:30 +0200354
Wenzel Jakob93296692015-10-13 23:21:54 +0200355.. seealso::
356
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200357 The file :file:`tests/test_virtual_functions.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400358 example that demonstrates how to override virtual functions using pybind11
359 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200360
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400361.. _virtual_and_inheritance:
362
363Combining virtual functions and inheritance
364===========================================
365
366When combining virtual methods with inheritance, you need to be sure to provide
367an override for each method for which you want to allow overrides from derived
368python classes. For example, suppose we extend the above ``Animal``/``Dog``
369example as follows:
370
371.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200372
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400373 class Animal {
374 public:
375 virtual std::string go(int n_times) = 0;
376 virtual std::string name() { return "unknown"; }
377 };
378 class Dog : public class Animal {
379 public:
380 std::string go(int n_times) override {
381 std::string result;
382 for (int i=0; i<n_times; ++i)
383 result += bark() + " ";
384 return result;
385 }
386 virtual std::string bark() { return "woof!"; }
387 };
388
389then the trampoline class for ``Animal`` must, as described in the previous
390section, override ``go()`` and ``name()``, but in order to allow python code to
391inherit properly from ``Dog``, we also need a trampoline class for ``Dog`` that
392overrides both the added ``bark()`` method *and* the ``go()`` and ``name()``
393methods inherited from ``Animal`` (even though ``Dog`` doesn't directly
394override the ``name()`` method):
395
396.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200397
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400398 class PyAnimal : public Animal {
399 public:
400 using Animal::Animal; // Inherit constructors
401 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Animal, go, n_times); }
402 std::string name() override { PYBIND11_OVERLOAD(std::string, Animal, name, ); }
403 };
404 class PyDog : public Dog {
405 public:
406 using Dog::Dog; // Inherit constructors
407 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Dog, go, n_times); }
408 std::string name() override { PYBIND11_OVERLOAD(std::string, Dog, name, ); }
409 std::string bark() override { PYBIND11_OVERLOAD(std::string, Dog, bark, ); }
410 };
411
412A registered class derived from a pybind11-registered class with virtual
413methods requires a similar trampoline class, *even if* it doesn't explicitly
414declare or override any virtual methods itself:
415
416.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200417
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400418 class Husky : public Dog {};
419 class PyHusky : public Husky {
420 using Dog::Dog; // Inherit constructors
421 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Husky, go, n_times); }
422 std::string name() override { PYBIND11_OVERLOAD(std::string, Husky, name, ); }
423 std::string bark() override { PYBIND11_OVERLOAD(std::string, Husky, bark, ); }
424 };
425
426There is, however, a technique that can be used to avoid this duplication
427(which can be especially helpful for a base class with several virtual
428methods). The technique involves using template trampoline classes, as
429follows:
430
431.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200432
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400433 template <class AnimalBase = Animal> class PyAnimal : public AnimalBase {
434 using AnimalBase::AnimalBase; // Inherit constructors
435 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, AnimalBase, go, n_times); }
436 std::string name() override { PYBIND11_OVERLOAD(std::string, AnimalBase, name, ); }
437 };
438 template <class DogBase = Dog> class PyDog : public PyAnimal<DogBase> {
439 using PyAnimal<DogBase>::PyAnimal; // Inherit constructors
440 // Override PyAnimal's pure virtual go() with a non-pure one:
441 std::string go(int n_times) override { PYBIND11_OVERLOAD(std::string, DogBase, go, n_times); }
442 std::string bark() override { PYBIND11_OVERLOAD(std::string, DogBase, bark, ); }
443 };
444
445This technique has the advantage of requiring just one trampoline method to be
446declared per virtual method and pure virtual method override. It does,
447however, require the compiler to generate at least as many methods (and
448possibly more, if both pure virtual and overridden pure virtual methods are
449exposed, as above).
450
451The classes are then registered with pybind11 using:
452
453.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200454
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400455 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal<>> animal(m, "Animal");
456 py::class_<Dog, std::unique_ptr<Dog>, PyDog<>> dog(m, "Dog");
457 py::class_<Husky, std::unique_ptr<Husky>, PyDog<Husky>> husky(m, "Husky");
458 // ... add animal, dog, husky definitions
459
460Note that ``Husky`` did not require a dedicated trampoline template class at
461all, since it neither declares any new virtual methods nor provides any pure
462virtual method implementations.
463
464With either the repeated-virtuals or templated trampoline methods in place, you
465can now create a python class that inherits from ``Dog``:
466
467.. code-block:: python
468
469 class ShihTzu(Dog):
470 def bark(self):
471 return "yip!"
472
473.. seealso::
474
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200475 See the file :file:`tests/test_virtual_functions.cpp` for complete examples
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400476 using both the duplication and templated trampoline approaches.
477
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200478.. _macro_notes:
479
480General notes regarding convenience macros
481==========================================
482
483pybind11 provides a few convenience macros such as
484:func:`PYBIND11_MAKE_OPAQUE` and :func:`PYBIND11_DECLARE_HOLDER_TYPE`, and
485``PYBIND11_OVERLOAD_*``. Since these are "just" macros that are evaluated
486in the preprocessor (which has no concept of types), they *will* get confused
487by commas in a template argument such as ``PYBIND11_OVERLOAD(MyReturnValue<T1,
488T2>, myFunc)``. In this case, the preprocessor assumes that the comma indicates
489the beginnning of the next parameter. Use a ``typedef`` to bind the template to
490another name and use it in the macro to avoid this problem.
491
492
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100493Global Interpreter Lock (GIL)
494=============================
495
496The classes :class:`gil_scoped_release` and :class:`gil_scoped_acquire` can be
497used to acquire and release the global interpreter lock in the body of a C++
498function call. In this way, long-running C++ code can be parallelized using
499multiple Python threads. Taking the previous section as an example, this could
500be realized as follows (important changes highlighted):
501
502.. code-block:: cpp
503 :emphasize-lines: 8,9,33,34
504
505 class PyAnimal : public Animal {
506 public:
507 /* Inherit the constructors */
508 using Animal::Animal;
509
510 /* Trampoline (need one for each virtual function) */
511 std::string go(int n_times) {
512 /* Acquire GIL before calling Python code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100513 py::gil_scoped_acquire acquire;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100514
515 PYBIND11_OVERLOAD_PURE(
516 std::string, /* Return type */
517 Animal, /* Parent class */
518 go, /* Name of function */
519 n_times /* Argument(s) */
520 );
521 }
522 };
523
524 PYBIND11_PLUGIN(example) {
525 py::module m("example", "pybind11 example plugin");
526
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200527 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal> animal(m, "Animal");
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100528 animal
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100529 .def(py::init<>())
530 .def("go", &Animal::go);
531
532 py::class_<Dog>(m, "Dog", animal)
533 .def(py::init<>());
534
535 m.def("call_go", [](Animal *animal) -> std::string {
536 /* Release GIL before calling into (potentially long-running) C++ code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100537 py::gil_scoped_release release;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100538 return call_go(animal);
539 });
540
541 return m.ptr();
542 }
543
Wenzel Jakob93296692015-10-13 23:21:54 +0200544Passing STL data structures
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200545===========================
546
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200547When including the additional header file :file:`pybind11/stl.h`, conversions
Wenzel Jakob978e3762016-04-07 18:00:41 +0200548between ``std::vector<>``, ``std::list<>``, ``std::set<>``, and ``std::map<>``
549and the Python ``list``, ``set`` and ``dict`` data structures are automatically
550enabled. The types ``std::pair<>`` and ``std::tuple<>`` are already supported
551out of the box with just the core :file:`pybind11/pybind11.h` header.
Wenzel Jakob93296692015-10-13 23:21:54 +0200552
553.. note::
554
Wenzel Jakob44db04f2015-12-14 12:40:45 +0100555 Arbitrary nesting of any of these types is supported.
Wenzel Jakob93296692015-10-13 23:21:54 +0200556
557.. seealso::
558
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200559 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400560 example that demonstrates how to pass STL data types in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200561
Wenzel Jakobb2825952016-04-13 23:33:00 +0200562Binding sequence data types, iterators, the slicing protocol, etc.
563==================================================================
Wenzel Jakob93296692015-10-13 23:21:54 +0200564
565Please refer to the supplemental example for details.
566
567.. seealso::
568
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200569 The file :file:`tests/test_sequences_and_iterators.cpp` contains a
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400570 complete example that shows how to bind a sequence data type, including
571 length queries (``__len__``), iterators (``__iter__``), the slicing
572 protocol and other kinds of useful operations.
Wenzel Jakob93296692015-10-13 23:21:54 +0200573
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200574Return value policies
575=====================
576
Wenzel Jakob93296692015-10-13 23:21:54 +0200577Python and C++ use wildly different ways of managing the memory and lifetime of
578objects managed by them. This can lead to issues when creating bindings for
579functions that return a non-trivial type. Just by looking at the type
580information, it is not clear whether Python should take charge of the returned
581value and eventually free its resources, or if this is handled on the C++ side.
582For this reason, pybind11 provides a several `return value policy` annotations
583that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100584functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200585
Wenzel Jakobbf099582016-08-22 12:52:02 +0200586Return value policies can also be applied to properties, in which case the
587arguments must be passed through the :class:`cpp_function` constructor:
588
589.. code-block:: cpp
590
591 class_<MyClass>(m, "MyClass")
592 def_property("data"
593 py::cpp_function(&MyClass::getData, py::return_value_policy::copy),
594 py::cpp_function(&MyClass::setData)
595 );
596
597The following table provides an overview of the available return value policies:
598
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200599.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
600
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200601+--------------------------------------------------+----------------------------------------------------------------------------+
602| Return value policy | Description |
603+==================================================+============================================================================+
604| :enum:`return_value_policy::automatic` | This is the default return value policy, which falls back to the policy |
605| | :enum:`return_value_policy::take_ownership` when the return value is a |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200606| | pointer. Otherwise, it uses :enum:`return_value::move` or |
607| | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200608| | See below for a description of what all of these different policies do. |
609+--------------------------------------------------+----------------------------------------------------------------------------+
610| :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 +0200611| | return value is a pointer. This is the default conversion policy for |
612| | function arguments when calling Python functions manually from C++ code |
613| | (i.e. via handle::operator()). You probably won't need to use this. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200614+--------------------------------------------------+----------------------------------------------------------------------------+
615| :enum:`return_value_policy::take_ownership` | Reference an existing object (i.e. do not create a new copy) and take |
616| | ownership. Python will call the destructor and delete operator when the |
617| | object's reference count reaches zero. Undefined behavior ensues when the |
Wenzel Jakobf53e3002016-06-30 14:59:23 +0200618| | C++ side does the same. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200619+--------------------------------------------------+----------------------------------------------------------------------------+
620| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python. |
621| | This policy is comparably safe because the lifetimes of the two instances |
622| | are decoupled. |
623+--------------------------------------------------+----------------------------------------------------------------------------+
624| :enum:`return_value_policy::move` | Use ``std::move`` to move the return value contents into a new instance |
625| | that will be owned by Python. This policy is comparably safe because the |
626| | lifetimes of the two instances (move source and destination) are decoupled.|
627+--------------------------------------------------+----------------------------------------------------------------------------+
628| :enum:`return_value_policy::reference` | Reference an existing object, but do not take ownership. The C++ side is |
629| | responsible for managing the object's lifetime and deallocating it when |
630| | it is no longer used. Warning: undefined behavior will ensue when the C++ |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200631| | side deletes an object that is still referenced and used by Python. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200632+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakobbf099582016-08-22 12:52:02 +0200633| :enum:`return_value_policy::reference_internal` | Indicates that the lifetime of the return value is tied to the lifetime |
634| | of a parent object, namely the implicit ``this``, or ``self`` argument of |
635| | the called method or property. Internally, this policy works just like |
636| | :enum:`return_value_policy::reference` but additionally applies a |
637| | ``keep_alive<0, 1>`` *call policy* (described in the next section) that |
638| | prevents the parent object from being garbage collected as long as the |
639| | return value is referenced by Python. This is the default policy for |
640| | property getters created via ``def_property``, ``def_readwrite``, etc.) |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200641+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200642
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200643.. warning::
644
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400645 Code with invalid return value policies might access unitialized memory or
646 free data structures multiple times, which can lead to hard-to-debug
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200647 non-determinism and segmentation faults, hence it is worth spending the
648 time to understand all the different options in the table above.
649
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400650One important aspect of the above policies is that they only apply to instances
651which pybind11 has *not* seen before, in which case the policy clarifies
652essential questions about the return value's lifetime and ownership. When
653pybind11 knows the instance already (as identified by its type and address in
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200654memory), it will return the existing Python object wrapper rather than creating
Wenzel Jakobbf099582016-08-22 12:52:02 +0200655a new copy.
nafur717df752016-06-28 18:07:11 +0200656
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200657.. note::
658
659 The next section on :ref:`call_policies` discusses *call policies* that can be
660 specified *in addition* to a return value policy from the list above. Call
661 policies indicate reference relationships that can involve both return values
662 and parameters of functions.
663
664.. note::
665
666 As an alternative to elaborate call policies and lifetime management logic,
667 consider using smart pointers (see the section on :ref:`smart_pointers` for
668 details). Smart pointers can tell whether an object is still referenced from
669 C++ or Python, which generally eliminates the kinds of inconsistencies that
670 can lead to crashes or undefined behavior. For functions returning smart
671 pointers, it is not necessary to specify a return value policy.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100672
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200673.. _call_policies:
674
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100675Additional call policies
676========================
677
678In addition to the above return value policies, further `call policies` can be
679specified to indicate dependencies between parameters. There is currently just
680one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
681argument with index ``Patient`` should be kept alive at least until the
Wenzel Jakob0b632312016-08-18 10:58:21 +0200682argument with index ``Nurse`` is freed by the garbage collector. Argument
683indices start at one, while zero refers to the return value. For methods, index
684``1`` refers to the implicit ``this`` pointer, while regular arguments begin at
685index ``2``. Arbitrarily many call policies can be specified. When a ``Nurse``
686with value ``None`` is detected at runtime, the call policy does nothing.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100687
Wenzel Jakob0b632312016-08-18 10:58:21 +0200688This feature internally relies on the ability to create a *weak reference* to
689the nurse object, which is permitted by all classes exposed via pybind11. When
690the nurse object does not support weak references, an exception will be thrown.
691
692Consider the following example: here, the binding code for a list append
693operation ties the lifetime of the newly added element to the underlying
694container:
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100695
696.. code-block:: cpp
697
698 py::class_<List>(m, "List")
699 .def("append", &List::append, py::keep_alive<1, 2>());
700
701.. note::
702
703 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
704 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
705 0) policies from Boost.Python.
706
Wenzel Jakob61587162016-01-18 22:38:52 +0100707.. seealso::
708
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200709 The file :file:`tests/test_keep_alive.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400710 that demonstrates using :class:`keep_alive` in more detail.
Wenzel Jakob61587162016-01-18 22:38:52 +0100711
Wenzel Jakob93296692015-10-13 23:21:54 +0200712Implicit type conversions
713=========================
714
715Suppose that instances of two types ``A`` and ``B`` are used in a project, and
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200716that an ``A`` can easily be converted into an instance of type ``B`` (examples of this
Wenzel Jakob93296692015-10-13 23:21:54 +0200717could be a fixed and an arbitrary precision number type).
718
719.. code-block:: cpp
720
721 py::class_<A>(m, "A")
722 /// ... members ...
723
724 py::class_<B>(m, "B")
725 .def(py::init<A>())
726 /// ... members ...
727
728 m.def("func",
729 [](const B &) { /* .... */ }
730 );
731
732To invoke the function ``func`` using a variable ``a`` containing an ``A``
733instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
734will automatically apply an implicit type conversion, which makes it possible
735to directly write ``func(a)``.
736
737In this situation (i.e. where ``B`` has a constructor that converts from
738``A``), the following statement enables similar implicit conversions on the
739Python side:
740
741.. code-block:: cpp
742
743 py::implicitly_convertible<A, B>();
744
Wenzel Jakob3eeea6f2016-06-30 18:10:28 +0200745.. note::
746
747 Implicit conversions from ``A`` to ``B`` only work when ``B`` is a custom
748 data type that is exposed to Python via pybind11.
749
Wenzel Jakobf88af0c2016-06-22 13:52:31 +0200750.. _static_properties:
751
752Static properties
753=================
754
755The section on :ref:`properties` discussed the creation of instance properties
756that are implemented in terms of C++ getters and setters.
757
758Static properties can also be created in a similar way to expose getters and
759setters of static class attributes. It is important to note that the implicit
760``self`` argument also exists in this case and is used to pass the Python
761``type`` subclass instance. This parameter will often not be needed by the C++
762side, and the following example illustrates how to instantiate a lambda getter
763function that ignores it:
764
765.. code-block:: cpp
766
767 py::class_<Foo>(m, "Foo")
768 .def_property_readonly_static("foo", [](py::object /* self */) { return Foo(); });
769
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200770Unique pointers
771===============
772
773Given a class ``Example`` with Python bindings, it's possible to return
774instances wrapped in C++11 unique pointers, like so
775
776.. code-block:: cpp
777
778 std::unique_ptr<Example> create_example() { return std::unique_ptr<Example>(new Example()); }
779
780.. code-block:: cpp
781
782 m.def("create_example", &create_example);
783
784In other words, there is nothing special that needs to be done. While returning
785unique pointers in this way is allowed, it is *illegal* to use them as function
786arguments. For instance, the following function signature cannot be processed
787by pybind11.
788
789.. code-block:: cpp
790
791 void do_something_with_example(std::unique_ptr<Example> ex) { ... }
792
793The above signature would imply that Python needs to give up ownership of an
794object that is passed to this function, which is generally not possible (for
795instance, the object might be referenced elsewhere).
796
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200797.. _smart_pointers:
798
Wenzel Jakob93296692015-10-13 23:21:54 +0200799Smart pointers
800==============
801
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200802This section explains how to pass values that are wrapped in "smart" pointer
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200803types with internal reference counting. For the simpler C++11 unique pointers,
804refer to the previous section.
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200805
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200806The binding generator for classes, :class:`class_`, takes an optional second
Wenzel Jakob93296692015-10-13 23:21:54 +0200807template type, which denotes a special *holder* type that is used to manage
808references to the object. When wrapping a type named ``Type``, the default
809value of this template parameter is ``std::unique_ptr<Type>``, which means that
810the object is deallocated when Python's reference count goes to zero.
811
Wenzel Jakob1853b652015-10-18 15:38:50 +0200812It is possible to switch to other types of reference counting wrappers or smart
813pointers, which is useful in codebases that rely on them. For instance, the
814following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +0200815
816.. code-block:: cpp
817
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100818 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100819
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100820Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +0200821
Wenzel Jakob1853b652015-10-18 15:38:50 +0200822To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100823argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +0200824be declared at the top level before any binding code:
825
826.. code-block:: cpp
827
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200828 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +0200829
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100830.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100831
832 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
833 placeholder name that is used as a template parameter of the second
834 argument. Thus, feel free to use any identifier, but use it consistently on
835 both sides; also, don't use the name of a type that already exists in your
836 codebase.
837
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100838One potential stumbling block when using holder types is that they need to be
839applied consistently. Can you guess what's broken about the following binding
840code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100841
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100842.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100843
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100844 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100845
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100846 class Parent {
847 public:
848 Parent() : child(std::make_shared<Child>()) { }
849 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
850 private:
851 std::shared_ptr<Child> child;
852 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100853
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100854 PYBIND11_PLUGIN(example) {
855 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100856
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100857 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
858
859 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
860 .def(py::init<>())
861 .def("get_child", &Parent::get_child);
862
863 return m.ptr();
864 }
865
866The following Python code will cause undefined behavior (and likely a
867segmentation fault).
868
869.. code-block:: python
870
871 from example import Parent
872 print(Parent().get_child())
873
874The problem is that ``Parent::get_child()`` returns a pointer to an instance of
875``Child``, but the fact that this instance is already managed by
876``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
877pybind11 will create a second independent ``std::shared_ptr<...>`` that also
878claims ownership of the pointer. In the end, the object will be freed **twice**
879since these shared pointers have no way of knowing about each other.
880
881There are two ways to resolve this issue:
882
8831. For types that are managed by a smart pointer class, never use raw pointers
884 in function arguments or return values. In other words: always consistently
885 wrap pointers into their designated holder types (such as
886 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
887 should be modified as follows:
888
889.. code-block:: cpp
890
891 std::shared_ptr<Child> get_child() { return child; }
892
8932. Adjust the definition of ``Child`` by specifying
894 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
895 base class. This adds a small bit of information to ``Child`` that allows
896 pybind11 to realize that there is already an existing
897 ``std::shared_ptr<...>`` and communicate with it. In this case, the
898 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100899
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100900.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
901
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100902.. code-block:: cpp
903
904 class Child : public std::enable_shared_from_this<Child> { };
905
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200906
907Please take a look at the :ref:`macro_notes` before using this feature.
908
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100909.. seealso::
910
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200911 The file :file:`tests/test_smart_ptr.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400912 that demonstrates how to work with custom reference-counting holder types
913 in more detail.
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100914
Wenzel Jakob93296692015-10-13 23:21:54 +0200915.. _custom_constructors:
916
917Custom constructors
918===================
919
920The syntax for binding constructors was previously introduced, but it only
921works when a constructor with the given parameters actually exists on the C++
922side. To extend this to more general cases, let's take a look at what actually
923happens under the hood: the following statement
924
925.. code-block:: cpp
926
927 py::class_<Example>(m, "Example")
928 .def(py::init<int>());
929
930is short hand notation for
931
932.. code-block:: cpp
933
934 py::class_<Example>(m, "Example")
935 .def("__init__",
936 [](Example &instance, int arg) {
937 new (&instance) Example(arg);
938 }
939 );
940
941In other words, :func:`init` creates an anonymous function that invokes an
942in-place constructor. Memory allocation etc. is already take care of beforehand
943within pybind11.
944
Nickolai Belakovski63338252016-08-27 11:57:55 -0700945.. _classes_with_non_public_destructors:
946
947Classes with non-public destructors
948===================================
949
950If a class has a private or protected destructor, as might be the case in a singleton
951pattern for example, a compile error will occur when trying to expose the class because
952the std::unique_ptr holding the instance of the class will attempt to call its destructor
953when de-allocating the instance. In order to expose classes with private or protected
954destructors you can override the ``holder_type`` and provide a custom destructor. Pybind11
955provides a blank destructor for you to use as follows
956
957.. code-block:: cpp
958
959 /* ... definition ... */
960
961 class MyClass {
962 ~MyClass() {}
963 };
964
965 /* ... binding code ... */
966
967 py::class_<MyClass, std::unique_ptr<MyClass, py::blank_deleter<MyClass>>(m, "MyClass")
968 .def(py::init<>)
969
970The blank destructor provided by Pybind11 is a no-op, so you will still need to make sure
971you are cleaning up the memory in C++. Additionally, the blank destructor, or any custom
972destructor you provide to the unique_ptr will only be called if the object is initialized
973within Python. If the object is initialized in C++ via a getter function, the deleter will
974not be called at all.
975
Pim Schellart5a7d17f2016-06-17 17:35:59 -0400976.. _catching_and_throwing_exceptions:
977
Wenzel Jakob93296692015-10-13 23:21:54 +0200978Catching and throwing exceptions
979================================
980
981When C++ code invoked from Python throws an ``std::exception``, it is
982automatically converted into a Python ``Exception``. pybind11 defines multiple
983special exception classes that will map to different types of Python
984exceptions:
985
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200986.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
987
Wenzel Jakob978e3762016-04-07 18:00:41 +0200988+--------------------------------------+------------------------------+
989| C++ exception type | Python exception type |
990+======================================+==============================+
991| :class:`std::exception` | ``RuntimeError`` |
992+--------------------------------------+------------------------------+
993| :class:`std::bad_alloc` | ``MemoryError`` |
994+--------------------------------------+------------------------------+
995| :class:`std::domain_error` | ``ValueError`` |
996+--------------------------------------+------------------------------+
997| :class:`std::invalid_argument` | ``ValueError`` |
998+--------------------------------------+------------------------------+
999| :class:`std::length_error` | ``ValueError`` |
1000+--------------------------------------+------------------------------+
1001| :class:`std::out_of_range` | ``ValueError`` |
1002+--------------------------------------+------------------------------+
1003| :class:`std::range_error` | ``ValueError`` |
1004+--------------------------------------+------------------------------+
1005| :class:`pybind11::stop_iteration` | ``StopIteration`` (used to |
1006| | implement custom iterators) |
1007+--------------------------------------+------------------------------+
1008| :class:`pybind11::index_error` | ``IndexError`` (used to |
1009| | indicate out of bounds |
1010| | accesses in ``__getitem__``, |
1011| | ``__setitem__``, etc.) |
1012+--------------------------------------+------------------------------+
Sergey Lyskova95bde12016-05-08 19:31:55 -04001013| :class:`pybind11::value_error` | ``ValueError`` (used to |
1014| | indicate wrong value passed |
1015| | in ``container.remove(...)`` |
1016+--------------------------------------+------------------------------+
Jason Rhinelander5aa85be2016-08-11 21:22:05 -04001017| :class:`pybind11::key_error` | ``KeyError`` (used to |
1018| | indicate out of bounds |
1019| | accesses in ``__getitem__``, |
1020| | ``__setitem__`` in dict-like |
1021| | objects, etc.) |
1022+--------------------------------------+------------------------------+
Wenzel Jakob978e3762016-04-07 18:00:41 +02001023| :class:`pybind11::error_already_set` | Indicates that the Python |
1024| | exception flag has already |
1025| | been initialized |
1026+--------------------------------------+------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +02001027
1028When a Python function invoked from C++ throws an exception, it is converted
1029into a C++ exception of type :class:`error_already_set` whose string payload
1030contains a textual summary.
1031
1032There is also a special exception :class:`cast_error` that is thrown by
1033:func:`handle::call` when the input arguments cannot be converted to Python
1034objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001035
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001036Registering custom exception translators
1037========================================
1038
1039If the default exception conversion policy described
1040:ref:`above <catching_and_throwing_exceptions>`
1041is insufficient, pybind11 also provides support for registering custom
1042exception translators.
1043
1044The function ``register_exception_translator(translator)`` takes a stateless
1045callable (e.g. a function pointer or a lambda function without captured
1046variables) with the following call signature: ``void(std::exception_ptr)``.
1047
1048When a C++ exception is thrown, registered exception translators are tried
1049in reverse order of registration (i.e. the last registered translator gets
1050a first shot at handling the exception).
1051
1052Inside the translator, ``std::rethrow_exception`` should be used within
1053a try block to re-throw the exception. A catch clause can then use
1054``PyErr_SetString`` to set a Python exception as demonstrated
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001055in :file:`tests/test_exceptions.cpp`.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001056
1057This example also demonstrates how to create custom exception types
1058with ``py::exception``.
1059
1060The following example demonstrates this for a hypothetical exception class
1061``MyCustomException``:
1062
1063.. code-block:: cpp
1064
1065 py::register_exception_translator([](std::exception_ptr p) {
1066 try {
1067 if (p) std::rethrow_exception(p);
1068 } catch (const MyCustomException &e) {
1069 PyErr_SetString(PyExc_RuntimeError, e.what());
1070 }
1071 });
1072
1073Multiple exceptions can be handled by a single translator. If the exception is
1074not caught by the current translator, the previously registered one gets a
1075chance.
1076
1077If none of the registered exception translators is able to handle the
1078exception, it is handled by the default converter as described in the previous
1079section.
1080
1081.. note::
1082
1083 You must either call ``PyErr_SetString`` for every exception caught in a
1084 custom exception translator. Failure to do so will cause Python to crash
1085 with ``SystemError: error return without exception set``.
1086
1087 Exceptions that you do not plan to handle should simply not be caught.
1088
1089 You may also choose to explicity (re-)throw the exception to delegate it to
1090 the other existing exception translators.
1091
1092 The ``py::exception`` wrapper for creating custom exceptions cannot (yet)
1093 be used as a ``py::base``.
1094
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001095.. _opaque:
1096
1097Treating STL data structures as opaque objects
1098==============================================
1099
1100pybind11 heavily relies on a template matching mechanism to convert parameters
1101and return values that are constructed from STL data types such as vectors,
1102linked lists, hash tables, etc. This even works in a recursive manner, for
1103instance to deal with lists of hash maps of pairs of elementary and custom
1104types, etc.
1105
1106However, a fundamental limitation of this approach is that internal conversions
1107between Python and C++ types involve a copy operation that prevents
1108pass-by-reference semantics. What does this mean?
1109
1110Suppose we bind the following function
1111
1112.. code-block:: cpp
1113
1114 void append_1(std::vector<int> &v) {
1115 v.push_back(1);
1116 }
1117
1118and call it from Python, the following happens:
1119
Wenzel Jakob99279f72016-06-03 11:19:29 +02001120.. code-block:: pycon
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001121
1122 >>> v = [5, 6]
1123 >>> append_1(v)
1124 >>> print(v)
1125 [5, 6]
1126
1127As you can see, when passing STL data structures by reference, modifications
1128are not propagated back the Python side. A similar situation arises when
1129exposing STL data structures using the ``def_readwrite`` or ``def_readonly``
1130functions:
1131
1132.. code-block:: cpp
1133
1134 /* ... definition ... */
1135
1136 class MyClass {
1137 std::vector<int> contents;
1138 };
1139
1140 /* ... binding code ... */
1141
1142 py::class_<MyClass>(m, "MyClass")
1143 .def(py::init<>)
1144 .def_readwrite("contents", &MyClass::contents);
1145
1146In this case, properties can be read and written in their entirety. However, an
1147``append`` operaton involving such a list type has no effect:
1148
Wenzel Jakob99279f72016-06-03 11:19:29 +02001149.. code-block:: pycon
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001150
1151 >>> m = MyClass()
1152 >>> m.contents = [5, 6]
1153 >>> print(m.contents)
1154 [5, 6]
1155 >>> m.contents.append(7)
1156 >>> print(m.contents)
1157 [5, 6]
1158
1159To deal with both of the above situations, pybind11 provides a macro named
1160``PYBIND11_MAKE_OPAQUE(T)`` that disables the template-based conversion
1161machinery of types, thus rendering them *opaque*. The contents of opaque
1162objects are never inspected or extracted, hence they can be passed by
1163reference. For instance, to turn ``std::vector<int>`` into an opaque type, add
1164the declaration
1165
1166.. code-block:: cpp
1167
1168 PYBIND11_MAKE_OPAQUE(std::vector<int>);
1169
1170before any binding code (e.g. invocations to ``class_::def()``, etc.). This
1171macro must be specified at the top level, since instantiates a partial template
1172overload. If your binding code consists of multiple compilation units, it must
1173be present in every file preceding any usage of ``std::vector<int>``. Opaque
1174types must also have a corresponding ``class_`` declaration to associate them
1175with a name in Python, and to define a set of available operations:
1176
1177.. code-block:: cpp
1178
1179 py::class_<std::vector<int>>(m, "IntVector")
1180 .def(py::init<>())
1181 .def("clear", &std::vector<int>::clear)
1182 .def("pop_back", &std::vector<int>::pop_back)
1183 .def("__len__", [](const std::vector<int> &v) { return v.size(); })
1184 .def("__iter__", [](std::vector<int> &v) {
1185 return py::make_iterator(v.begin(), v.end());
1186 }, py::keep_alive<0, 1>()) /* Keep vector alive while iterator is used */
1187 // ....
1188
Wenzel Jakob9bb97c12016-06-03 11:19:41 +02001189Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001190
1191.. seealso::
1192
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001193 The file :file:`tests/test_opaque_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001194 example that demonstrates how to create and expose opaque types using
1195 pybind11 in more detail.
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001196
1197.. _eigen:
1198
1199Transparent conversion of dense and sparse Eigen data types
1200===========================================================
1201
1202Eigen [#f1]_ is C++ header-based library for dense and sparse linear algebra. Due to
1203its popularity and widespread adoption, pybind11 provides transparent
1204conversion support between Eigen and Scientific Python linear algebra data types.
1205
1206Specifically, when including the optional header file :file:`pybind11/eigen.h`,
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001207pybind11 will automatically and transparently convert
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001208
12091. Static and dynamic Eigen dense vectors and matrices to instances of
1210 ``numpy.ndarray`` (and vice versa).
1211
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012122. Returned matrix expressions such as blocks (including columns or rows) and
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001213 diagonals will be converted to ``numpy.ndarray`` of the expression
1214 values.
1215
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012163. Returned matrix-like objects such as Eigen::DiagonalMatrix or
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001217 Eigen::SelfAdjointView will be converted to ``numpy.ndarray`` containing the
1218 expressed value.
1219
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012204. Eigen sparse vectors and matrices to instances of
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001221 ``scipy.sparse.csr_matrix``/``scipy.sparse.csc_matrix`` (and vice versa).
1222
1223This makes it possible to bind most kinds of functions that rely on these types.
1224One major caveat are functions that take Eigen matrices *by reference* and modify
1225them somehow, in which case the information won't be propagated to the caller.
1226
1227.. code-block:: cpp
1228
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001229 /* The Python bindings of these functions won't replicate
1230 the intended effect of modifying the function arguments */
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001231 void scale_by_2(Eigen::Vector3f &v) {
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001232 v *= 2;
1233 }
1234 void scale_by_2(Eigen::Ref<Eigen::MatrixXd> &v) {
1235 v *= 2;
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001236 }
1237
1238To see why this is, refer to the section on :ref:`opaque` (although that
1239section specifically covers STL data types, the underlying issue is the same).
1240The next two sections discuss an efficient alternative for exposing the
1241underlying native Eigen types as opaque objects in a way that still integrates
1242with NumPy and SciPy.
1243
1244.. [#f1] http://eigen.tuxfamily.org
1245
1246.. seealso::
1247
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001248 The file :file:`tests/test_eigen.cpp` contains a complete example that
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001249 shows how to pass Eigen sparse and dense data types in more detail.
1250
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001251Buffer protocol
1252===============
1253
1254Python supports an extremely general and convenient approach for exchanging
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001255data between plugin libraries. Types can expose a buffer view [#f2]_, which
1256provides fast direct access to the raw internal data representation. Suppose we
1257want to bind the following simplistic Matrix class:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001258
1259.. code-block:: cpp
1260
1261 class Matrix {
1262 public:
1263 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
1264 m_data = new float[rows*cols];
1265 }
1266 float *data() { return m_data; }
1267 size_t rows() const { return m_rows; }
1268 size_t cols() const { return m_cols; }
1269 private:
1270 size_t m_rows, m_cols;
1271 float *m_data;
1272 };
1273
1274The following binding code exposes the ``Matrix`` contents as a buffer object,
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001275making it possible to cast Matrices into NumPy arrays. It is even possible to
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001276completely avoid copy operations with Python expressions like
1277``np.array(matrix_instance, copy = False)``.
1278
1279.. code-block:: cpp
1280
1281 py::class_<Matrix>(m, "Matrix")
1282 .def_buffer([](Matrix &m) -> py::buffer_info {
1283 return py::buffer_info(
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001284 m.data(), /* Pointer to buffer */
1285 sizeof(float), /* Size of one scalar */
1286 py::format_descriptor<float>::format(), /* Python struct-style format descriptor */
1287 2, /* Number of dimensions */
1288 { m.rows(), m.cols() }, /* Buffer dimensions */
1289 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001290 sizeof(float) }
1291 );
1292 });
1293
1294The snippet above binds a lambda function, which can create ``py::buffer_info``
1295description records on demand describing a given matrix. The contents of
1296``py::buffer_info`` mirror the Python buffer protocol specification.
1297
1298.. code-block:: cpp
1299
1300 struct buffer_info {
1301 void *ptr;
1302 size_t itemsize;
1303 std::string format;
1304 int ndim;
1305 std::vector<size_t> shape;
1306 std::vector<size_t> strides;
1307 };
1308
1309To create a C++ function that can take a Python buffer object as an argument,
1310simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
1311in a great variety of configurations, hence some safety checks are usually
1312necessary in the function body. Below, you can see an basic example on how to
1313define a custom constructor for the Eigen double precision matrix
1314(``Eigen::MatrixXd``) type, which supports initialization from compatible
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001315buffer objects (e.g. a NumPy matrix).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001316
1317.. code-block:: cpp
1318
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001319 /* Bind MatrixXd (or some other Eigen type) to Python */
1320 typedef Eigen::MatrixXd Matrix;
1321
1322 typedef Matrix::Scalar Scalar;
1323 constexpr bool rowMajor = Matrix::Flags & Eigen::RowMajorBit;
1324
1325 py::class_<Matrix>(m, "Matrix")
1326 .def("__init__", [](Matrix &m, py::buffer b) {
Wenzel Jakobe7628532016-05-05 10:04:44 +02001327 typedef Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic> Strides;
Wenzel Jakobe7628532016-05-05 10:04:44 +02001328
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001329 /* Request a buffer descriptor from Python */
1330 py::buffer_info info = b.request();
1331
1332 /* Some sanity checks ... */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001333 if (info.format != py::format_descriptor<Scalar>::format())
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001334 throw std::runtime_error("Incompatible format: expected a double array!");
1335
1336 if (info.ndim != 2)
1337 throw std::runtime_error("Incompatible buffer dimension!");
1338
Wenzel Jakobe7628532016-05-05 10:04:44 +02001339 auto strides = Strides(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001340 info.strides[rowMajor ? 0 : 1] / sizeof(Scalar),
1341 info.strides[rowMajor ? 1 : 0] / sizeof(Scalar));
Wenzel Jakobe7628532016-05-05 10:04:44 +02001342
1343 auto map = Eigen::Map<Matrix, 0, Strides>(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001344 static_cat<Scalar *>(info.ptr), info.shape[0], info.shape[1], strides);
Wenzel Jakobe7628532016-05-05 10:04:44 +02001345
1346 new (&m) Matrix(map);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001347 });
1348
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001349For reference, the ``def_buffer()`` call for this Eigen data type should look
1350as follows:
1351
1352.. code-block:: cpp
1353
1354 .def_buffer([](Matrix &m) -> py::buffer_info {
1355 return py::buffer_info(
1356 m.data(), /* Pointer to buffer */
1357 sizeof(Scalar), /* Size of one scalar */
1358 /* Python struct-style format descriptor */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001359 py::format_descriptor<Scalar>::format(),
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001360 /* Number of dimensions */
1361 2,
1362 /* Buffer dimensions */
1363 { (size_t) m.rows(),
1364 (size_t) m.cols() },
1365 /* Strides (in bytes) for each index */
1366 { sizeof(Scalar) * (rowMajor ? m.cols() : 1),
1367 sizeof(Scalar) * (rowMajor ? 1 : m.rows()) }
1368 );
1369 })
1370
1371For a much easier approach of binding Eigen types (although with some
1372limitations), refer to the section on :ref:`eigen`.
1373
Wenzel Jakob93296692015-10-13 23:21:54 +02001374.. seealso::
1375
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001376 The file :file:`tests/test_buffers.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001377 that demonstrates using the buffer protocol with pybind11 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +02001378
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001379.. [#f2] http://docs.python.org/3/c-api/buffer.html
Wenzel Jakob978e3762016-04-07 18:00:41 +02001380
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001381NumPy support
1382=============
1383
1384By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
1385restrict the function so that it only accepts NumPy arrays (rather than any
Wenzel Jakob978e3762016-04-07 18:00:41 +02001386type of Python object satisfying the buffer protocol).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001387
1388In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +02001389array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001390template. For instance, the following function requires the argument to be a
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001391NumPy array containing double precision values.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001392
1393.. code-block:: cpp
1394
Wenzel Jakob93296692015-10-13 23:21:54 +02001395 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001396
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001397When it is invoked with a different type (e.g. an integer or a list of
1398integers), the binding code will attempt to cast the input into a NumPy array
1399of the requested type. Note that this feature requires the
1400:file:``pybind11/numpy.h`` header to be included.
1401
1402Data in NumPy arrays is not guaranteed to packed in a dense manner;
1403furthermore, entries can be separated by arbitrary column and row strides.
1404Sometimes, it can be useful to require a function to only accept dense arrays
1405using either the C (row-major) or Fortran (column-major) ordering. This can be
1406accomplished via a second template argument with values ``py::array::c_style``
1407or ``py::array::f_style``.
1408
1409.. code-block:: cpp
1410
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001411 void f(py::array_t<double, py::array::c_style | py::array::forcecast> array);
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001412
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001413The ``py::array::forcecast`` argument is the default value of the second
1414template paramenter, and it ensures that non-conforming arguments are converted
1415into an array satisfying the specified requirements instead of trying the next
1416function overload.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001417
Ivan Smirnov223afe32016-07-02 15:33:04 +01001418NumPy structured types
1419======================
1420
1421In order for ``py::array_t`` to work with structured (record) types, we first need
Ivan Smirnov5412a052016-07-02 16:18:42 +01001422to register the memory layout of the type. This can be done via ``PYBIND11_NUMPY_DTYPE``
Ivan Smirnov223afe32016-07-02 15:33:04 +01001423macro which expects the type followed by field names:
1424
1425.. code-block:: cpp
1426
1427 struct A {
1428 int x;
1429 double y;
1430 };
1431
1432 struct B {
1433 int z;
1434 A a;
1435 };
1436
Ivan Smirnov5412a052016-07-02 16:18:42 +01001437 PYBIND11_NUMPY_DTYPE(A, x, y);
1438 PYBIND11_NUMPY_DTYPE(B, z, a);
Ivan Smirnov223afe32016-07-02 15:33:04 +01001439
1440 /* now both A and B can be used as template arguments to py::array_t */
1441
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001442Vectorizing functions
1443=====================
1444
1445Suppose we want to bind a function with the following signature to Python so
1446that it can process arbitrary NumPy array arguments (vectors, matrices, general
1447N-D arrays) in addition to its normal arguments:
1448
1449.. code-block:: cpp
1450
1451 double my_func(int x, float y, double z);
1452
Wenzel Jakob8f4eb002015-10-15 18:13:33 +02001453After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001454
1455.. code-block:: cpp
1456
1457 m.def("vectorized_func", py::vectorize(my_func));
1458
1459Invoking the function like below causes 4 calls to be made to ``my_func`` with
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001460each of the array elements. The significant advantage of this compared to
Wenzel Jakob978e3762016-04-07 18:00:41 +02001461solutions like ``numpy.vectorize()`` is that the loop over the elements runs
1462entirely on the C++ side and can be crunched down into a tight, optimized loop
1463by the compiler. The result is returned as a NumPy array of type
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001464``numpy.dtype.float64``.
1465
Wenzel Jakob99279f72016-06-03 11:19:29 +02001466.. code-block:: pycon
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001467
1468 >>> x = np.array([[1, 3],[5, 7]])
1469 >>> y = np.array([[2, 4],[6, 8]])
1470 >>> z = 3
1471 >>> result = vectorized_func(x, y, z)
1472
1473The scalar argument ``z`` is transparently replicated 4 times. The input
1474arrays ``x`` and ``y`` are automatically converted into the right types (they
1475are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
1476``numpy.dtype.float32``, respectively)
1477
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001478Sometimes we might want to explicitly exclude an argument from the vectorization
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001479because it makes little sense to wrap it in a NumPy array. For instance,
1480suppose the function signature was
1481
1482.. code-block:: cpp
1483
1484 double my_func(int x, float y, my_custom_type *z);
1485
1486This can be done with a stateful Lambda closure:
1487
1488.. code-block:: cpp
1489
1490 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
1491 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +02001492 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001493 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
1494 return py::vectorize(stateful_closure)(x, y);
1495 }
1496 );
1497
Wenzel Jakob61587162016-01-18 22:38:52 +01001498In cases where the computation is too complicated to be reduced to
1499``vectorize``, it will be necessary to create and access the buffer contents
1500manually. The following snippet contains a complete example that shows how this
1501works (the code is somewhat contrived, since it could have been done more
1502simply using ``vectorize``).
1503
1504.. code-block:: cpp
1505
1506 #include <pybind11/pybind11.h>
1507 #include <pybind11/numpy.h>
1508
1509 namespace py = pybind11;
1510
1511 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
1512 auto buf1 = input1.request(), buf2 = input2.request();
1513
1514 if (buf1.ndim != 1 || buf2.ndim != 1)
1515 throw std::runtime_error("Number of dimensions must be one");
1516
Ivan Smirnovb6518592016-08-13 13:28:56 +01001517 if (buf1.size != buf2.size)
Wenzel Jakob61587162016-01-18 22:38:52 +01001518 throw std::runtime_error("Input shapes must match");
1519
Ivan Smirnovb6518592016-08-13 13:28:56 +01001520 /* No pointer is passed, so NumPy will allocate the buffer */
1521 auto result = py::array_t<double>(buf1.size);
Wenzel Jakob61587162016-01-18 22:38:52 +01001522
1523 auto buf3 = result.request();
1524
1525 double *ptr1 = (double *) buf1.ptr,
1526 *ptr2 = (double *) buf2.ptr,
1527 *ptr3 = (double *) buf3.ptr;
1528
1529 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
1530 ptr3[idx] = ptr1[idx] + ptr2[idx];
1531
1532 return result;
1533 }
1534
1535 PYBIND11_PLUGIN(test) {
1536 py::module m("test");
1537 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
1538 return m.ptr();
1539 }
1540
Wenzel Jakob93296692015-10-13 23:21:54 +02001541.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001542
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001543 The file :file:`tests/test_numpy_vectorize.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001544 example that demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001545
Wenzel Jakob93296692015-10-13 23:21:54 +02001546Functions taking Python objects as arguments
1547============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001548
Wenzel Jakob93296692015-10-13 23:21:54 +02001549pybind11 exposes all major Python types using thin C++ wrapper classes. These
1550wrapper classes can also be used as parameters of functions in bindings, which
1551makes it possible to directly work with native Python types on the C++ side.
1552For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001553
Wenzel Jakob93296692015-10-13 23:21:54 +02001554.. code-block:: cpp
1555
1556 void print_dict(py::dict dict) {
1557 /* Easily interact with Python types */
1558 for (auto item : dict)
1559 std::cout << "key=" << item.first << ", "
1560 << "value=" << item.second << std::endl;
1561 }
1562
1563Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +01001564:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001565:class:`list`, :class:`dict`, :class:`slice`, :class:`none`, :class:`capsule`,
1566:class:`iterable`, :class:`iterator`, :class:`function`, :class:`buffer`,
1567:class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +02001568
Wenzel Jakob436b7312015-10-20 01:04:30 +02001569In this kind of mixed code, it is often necessary to convert arbitrary C++
1570types to Python, which can be done using :func:`cast`:
1571
1572.. code-block:: cpp
1573
1574 MyClass *cls = ..;
1575 py::object obj = py::cast(cls);
1576
1577The reverse direction uses the following syntax:
1578
1579.. code-block:: cpp
1580
1581 py::object obj = ...;
1582 MyClass *cls = obj.cast<MyClass *>();
1583
1584When conversion fails, both directions throw the exception :class:`cast_error`.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001585It is also possible to call python functions via ``operator()``.
1586
1587.. code-block:: cpp
1588
1589 py::function f = <...>;
1590 py::object result_py = f(1234, "hello", some_instance);
1591 MyClass &result = result_py.cast<MyClass>();
1592
1593The special ``f(*args)`` and ``f(*args, **kwargs)`` syntax is also supported to
1594supply arbitrary argument and keyword lists, although these cannot be mixed
1595with other parameters.
1596
1597.. code-block:: cpp
1598
1599 py::function f = <...>;
1600 py::tuple args = py::make_tuple(1234);
1601 py::dict kwargs;
1602 kwargs["y"] = py::cast(5678);
1603 py::object result = f(*args, **kwargs);
Wenzel Jakob436b7312015-10-20 01:04:30 +02001604
Wenzel Jakob93296692015-10-13 23:21:54 +02001605.. seealso::
1606
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001607 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001608 example that demonstrates passing native Python types in more detail. The
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001609 file :file:`tests/test_kwargs_and_defaults.cpp` discusses usage
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001610 of ``args`` and ``kwargs``.
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001611
1612Default arguments revisited
1613===========================
1614
1615The section on :ref:`default_args` previously discussed basic usage of default
1616arguments using pybind11. One noteworthy aspect of their implementation is that
1617default arguments are converted to Python objects right at declaration time.
1618Consider the following example:
1619
1620.. code-block:: cpp
1621
1622 py::class_<MyClass>("MyClass")
1623 .def("myFunction", py::arg("arg") = SomeType(123));
1624
1625In this case, pybind11 must already be set up to deal with values of the type
1626``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
1627exception will be thrown.
1628
1629Another aspect worth highlighting is that the "preview" of the default argument
1630in the function signature is generated using the object's ``__repr__`` method.
1631If not available, the signature may not be very helpful, e.g.:
1632
Wenzel Jakob99279f72016-06-03 11:19:29 +02001633.. code-block:: pycon
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001634
1635 FUNCTIONS
1636 ...
1637 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +01001638 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001639 ...
1640
1641The first way of addressing this is by defining ``SomeType.__repr__``.
1642Alternatively, it is possible to specify the human-readable preview of the
1643default argument manually using the ``arg_t`` notation:
1644
1645.. code-block:: cpp
1646
1647 py::class_<MyClass>("MyClass")
1648 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
1649
Wenzel Jakobc769fce2016-03-03 12:03:30 +01001650Sometimes it may be necessary to pass a null pointer value as a default
1651argument. In this case, remember to cast it to the underlying type in question,
1652like so:
1653
1654.. code-block:: cpp
1655
1656 py::class_<MyClass>("MyClass")
1657 .def("myFunction", py::arg("arg") = (SomeType *) nullptr);
1658
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001659Binding functions that accept arbitrary numbers of arguments and keywords arguments
1660===================================================================================
1661
1662Python provides a useful mechanism to define functions that accept arbitrary
1663numbers of arguments and keyword arguments:
1664
1665.. code-block:: cpp
1666
1667 def generic(*args, **kwargs):
1668 # .. do something with args and kwargs
1669
1670Such functions can also be created using pybind11:
1671
1672.. code-block:: cpp
1673
1674 void generic(py::args args, py::kwargs kwargs) {
1675 /// .. do something with args
1676 if (kwargs)
1677 /// .. do something with kwargs
1678 }
1679
1680 /// Binding code
1681 m.def("generic", &generic);
1682
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001683(See ``tests/test_kwargs_and_defaults.cpp``). The class ``py::args``
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001684derives from ``py::list`` and ``py::kwargs`` derives from ``py::dict`` Note
1685that the ``kwargs`` argument is invalid if no keyword arguments were actually
1686provided. Please refer to the other examples for details on how to iterate
1687over these, and on how to cast their entries into C++ objects.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001688
Wenzel Jakob3764e282016-08-01 23:34:48 +02001689.. warning::
1690
1691 Unlike Python, pybind11 does not allow combining normal parameters with the
1692 ``args`` / ``kwargs`` special parameters.
1693
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001694Partitioning code over multiple extension modules
1695=================================================
1696
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001697It's straightforward to split binding code over multiple extension modules,
1698while referencing types that are declared elsewhere. Everything "just" works
1699without any special precautions. One exception to this rule occurs when
1700extending a type declared in another extension module. Recall the basic example
1701from Section :ref:`inheritance`.
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001702
1703.. code-block:: cpp
1704
1705 py::class_<Pet> pet(m, "Pet");
1706 pet.def(py::init<const std::string &>())
1707 .def_readwrite("name", &Pet::name);
1708
1709 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1710 .def(py::init<const std::string &>())
1711 .def("bark", &Dog::bark);
1712
1713Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1714whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1715course that the variable ``pet`` is not available anymore though it is needed
1716to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1717However, it can be acquired as follows:
1718
1719.. code-block:: cpp
1720
1721 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1722
1723 py::class_<Dog>(m, "Dog", pet)
1724 .def(py::init<const std::string &>())
1725 .def("bark", &Dog::bark);
1726
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001727Alternatively, we can rely on the ``base`` tag, which performs an automated
1728lookup of the corresponding Python type. However, this also requires invoking
1729the ``import`` function once to ensure that the pybind11 binding code of the
1730module ``basic`` has been executed.
1731
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001732.. code-block:: cpp
1733
1734 py::module::import("basic");
1735
1736 py::class_<Dog>(m, "Dog", py::base<Pet>())
1737 .def(py::init<const std::string &>())
1738 .def("bark", &Dog::bark);
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001739
Wenzel Jakob978e3762016-04-07 18:00:41 +02001740Naturally, both methods will fail when there are cyclic dependencies.
1741
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001742Note that compiling code which has its default symbol visibility set to
1743*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
1744ability to access types defined in another extension module. Workarounds
1745include changing the global symbol visibility (not recommended, because it will
1746lead unnecessarily large binaries) or manually exporting types that are
1747accessed by multiple extension modules:
1748
1749.. code-block:: cpp
1750
1751 #ifdef _WIN32
1752 # define EXPORT_TYPE __declspec(dllexport)
1753 #else
1754 # define EXPORT_TYPE __attribute__ ((visibility("default")))
1755 #endif
1756
1757 class EXPORT_TYPE Dog : public Animal {
1758 ...
1759 };
1760
1761
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001762Pickling support
1763================
1764
1765Python's ``pickle`` module provides a powerful facility to serialize and
1766de-serialize a Python object graph into a binary data stream. To pickle and
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02001767unpickle C++ classes using pybind11, two additional functions must be provided.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001768Suppose the class in question has the following signature:
1769
1770.. code-block:: cpp
1771
1772 class Pickleable {
1773 public:
1774 Pickleable(const std::string &value) : m_value(value) { }
1775 const std::string &value() const { return m_value; }
1776
1777 void setExtra(int extra) { m_extra = extra; }
1778 int extra() const { return m_extra; }
1779 private:
1780 std::string m_value;
1781 int m_extra = 0;
1782 };
1783
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001784The binding code including the requisite ``__setstate__`` and ``__getstate__`` methods [#f3]_
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001785looks as follows:
1786
1787.. code-block:: cpp
1788
1789 py::class_<Pickleable>(m, "Pickleable")
1790 .def(py::init<std::string>())
1791 .def("value", &Pickleable::value)
1792 .def("extra", &Pickleable::extra)
1793 .def("setExtra", &Pickleable::setExtra)
1794 .def("__getstate__", [](const Pickleable &p) {
1795 /* Return a tuple that fully encodes the state of the object */
1796 return py::make_tuple(p.value(), p.extra());
1797 })
1798 .def("__setstate__", [](Pickleable &p, py::tuple t) {
1799 if (t.size() != 2)
1800 throw std::runtime_error("Invalid state!");
1801
Wenzel Jakobd40885a2016-04-13 13:30:05 +02001802 /* Invoke the in-place constructor. Note that this is needed even
1803 when the object just has a trivial default constructor */
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001804 new (&p) Pickleable(t[0].cast<std::string>());
1805
1806 /* Assign any additional state */
1807 p.setExtra(t[1].cast<int>());
1808 });
1809
1810An instance can now be pickled as follows:
1811
1812.. code-block:: python
1813
1814 try:
1815 import cPickle as pickle # Use cPickle on Python 2.7
1816 except ImportError:
1817 import pickle
1818
1819 p = Pickleable("test_value")
1820 p.setExtra(15)
Wenzel Jakob81e09752016-04-30 23:13:03 +02001821 data = pickle.dumps(p, 2)
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001822
Wenzel Jakob81e09752016-04-30 23:13:03 +02001823Note that only the cPickle module is supported on Python 2.7. The second
1824argument to ``dumps`` is also crucial: it selects the pickle protocol version
18252, since the older version 1 is not supported. Newer versions are also fine—for
1826instance, specify ``-1`` to always use the latest available version. Beware:
1827failure to follow these instructions will cause important pybind11 memory
1828allocation routines to be skipped during unpickling, which will likely lead to
1829memory corruption and/or segmentation faults.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001830
1831.. seealso::
1832
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001833 The file :file:`tests/test_pickling.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001834 that demonstrates how to pickle and unpickle types using pybind11 in more
1835 detail.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001836
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001837.. [#f3] http://docs.python.org/3/library/pickle.html#pickling-class-instances
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001838
1839Generating documentation using Sphinx
1840=====================================
1841
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001842Sphinx [#f4]_ has the ability to inspect the signatures and documentation
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001843strings in pybind11-based extension modules to automatically generate beautiful
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001844documentation in a variety formats. The python_example repository [#f5]_ contains a
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001845simple example repository which uses this approach.
1846
1847There are two potential gotchas when using this approach: first, make sure that
1848the resulting strings do not contain any :kbd:`TAB` characters, which break the
1849docstring parsing routines. You may want to use C++11 raw string literals,
1850which are convenient for multi-line comments. Conveniently, any excess
1851indentation will be automatically be removed by Sphinx. However, for this to
1852work, it is important that all lines are indented consistently, i.e.:
1853
1854.. code-block:: cpp
1855
1856 // ok
1857 m.def("foo", &foo, R"mydelimiter(
1858 The foo function
1859
1860 Parameters
1861 ----------
1862 )mydelimiter");
1863
1864 // *not ok*
1865 m.def("foo", &foo, R"mydelimiter(The foo function
1866
1867 Parameters
1868 ----------
1869 )mydelimiter");
1870
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001871.. [#f4] http://www.sphinx-doc.org
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001872.. [#f5] http://github.com/pybind/python_example
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001873
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001874Evaluating Python expressions from strings and files
1875====================================================
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001876
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001877pybind11 provides the :func:`eval` and :func:`eval_file` functions to evaluate
1878Python expressions and statements. The following example illustrates how they
1879can be used.
1880
1881Both functions accept a template parameter that describes how the argument
1882should be interpreted. Possible choices include ``eval_expr`` (isolated
1883expression), ``eval_single_statement`` (a single statement, return value is
1884always ``none``), and ``eval_statements`` (sequence of statements, return value
1885is always ``none``).
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001886
1887.. code-block:: cpp
1888
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001889 // At beginning of file
1890 #include <pybind11/eval.h>
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001891
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001892 ...
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001893
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001894 // Evaluate in scope of main module
1895 py::object scope = py::module::import("__main__").attr("__dict__");
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001896
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001897 // Evaluate an isolated expression
1898 int result = py::eval("my_variable + 10", scope).cast<int>();
1899
1900 // Evaluate a sequence of statements
1901 py::eval<py::eval_statements>(
1902 "print('Hello')\n"
1903 "print('world!');",
1904 scope);
1905
1906 // Evaluate the statements in an separate Python file on disk
1907 py::eval_file("script.py", scope);