blob: 425b11773868460ffd09e480d5063f70d5dfc1cd [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
Jason Rhinelander64830e32016-08-29 16:58:59 -0400301:func:`PYBIND11_OVERLOAD_NAME` which take a string-valued name argument between
302the *Parent class* and *Name of the function* slots. This is useful when the
303C++ and Python versions of the function have different names, e.g.
304``operator()`` vs ``__call__``.
Wenzel Jakob1e3be732016-05-24 23:42:05 +0200305
306The binding code also needs a few minor adaptations (highlighted):
Wenzel Jakob93296692015-10-13 23:21:54 +0200307
308.. code-block:: cpp
309 :emphasize-lines: 4,6,7
310
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200311 PYBIND11_PLUGIN(example) {
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200312 py::module m("example", "pybind11 example plugin");
Wenzel Jakob93296692015-10-13 23:21:54 +0200313
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200314 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal /* <--- trampoline*/> animal(m, "Animal");
Wenzel Jakob93296692015-10-13 23:21:54 +0200315 animal
Wenzel Jakob93296692015-10-13 23:21:54 +0200316 .def(py::init<>())
317 .def("go", &Animal::go);
318
319 py::class_<Dog>(m, "Dog", animal)
320 .def(py::init<>());
321
322 m.def("call_go", &call_go);
323
324 return m.ptr();
325 }
326
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200327Importantly, pybind11 is made aware of the trampoline trampoline helper class
328by specifying it as the *third* template argument to :class:`class_`. The
329second argument with the unique pointer is simply the default holder type used
330by pybind11. Following this, we are able to define a constructor as usual.
Wenzel Jakob93296692015-10-13 23:21:54 +0200331
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400332Note, however, that the above is sufficient for allowing python classes to
333extend ``Animal``, but not ``Dog``: see ref:`virtual_and_inheritance` for the
334necessary steps required to providing proper overload support for inherited
335classes.
336
Wenzel Jakob93296692015-10-13 23:21:54 +0200337The Python session below shows how to override ``Animal::go`` and invoke it via
338a virtual method call.
339
Wenzel Jakob99279f72016-06-03 11:19:29 +0200340.. code-block:: pycon
Wenzel Jakob93296692015-10-13 23:21:54 +0200341
342 >>> from example import *
343 >>> d = Dog()
344 >>> call_go(d)
345 u'woof! woof! woof! '
346 >>> class Cat(Animal):
347 ... def go(self, n_times):
348 ... return "meow! " * n_times
349 ...
350 >>> c = Cat()
351 >>> call_go(c)
352 u'meow! meow! meow! '
353
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200354Please take a look at the :ref:`macro_notes` before using this feature.
Wenzel Jakobbd986fe2016-05-21 10:48:30 +0200355
Wenzel Jakob93296692015-10-13 23:21:54 +0200356.. seealso::
357
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200358 The file :file:`tests/test_virtual_functions.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400359 example that demonstrates how to override virtual functions using pybind11
360 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200361
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400362.. _virtual_and_inheritance:
363
364Combining virtual functions and inheritance
365===========================================
366
367When combining virtual methods with inheritance, you need to be sure to provide
368an override for each method for which you want to allow overrides from derived
369python classes. For example, suppose we extend the above ``Animal``/``Dog``
370example as follows:
371
372.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200373
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400374 class Animal {
375 public:
376 virtual std::string go(int n_times) = 0;
377 virtual std::string name() { return "unknown"; }
378 };
379 class Dog : public class Animal {
380 public:
381 std::string go(int n_times) override {
382 std::string result;
383 for (int i=0; i<n_times; ++i)
384 result += bark() + " ";
385 return result;
386 }
387 virtual std::string bark() { return "woof!"; }
388 };
389
390then the trampoline class for ``Animal`` must, as described in the previous
391section, override ``go()`` and ``name()``, but in order to allow python code to
392inherit properly from ``Dog``, we also need a trampoline class for ``Dog`` that
393overrides both the added ``bark()`` method *and* the ``go()`` and ``name()``
394methods inherited from ``Animal`` (even though ``Dog`` doesn't directly
395override the ``name()`` method):
396
397.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200398
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400399 class PyAnimal : public Animal {
400 public:
401 using Animal::Animal; // Inherit constructors
402 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Animal, go, n_times); }
403 std::string name() override { PYBIND11_OVERLOAD(std::string, Animal, name, ); }
404 };
405 class PyDog : public Dog {
406 public:
407 using Dog::Dog; // Inherit constructors
408 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Dog, go, n_times); }
409 std::string name() override { PYBIND11_OVERLOAD(std::string, Dog, name, ); }
410 std::string bark() override { PYBIND11_OVERLOAD(std::string, Dog, bark, ); }
411 };
412
413A registered class derived from a pybind11-registered class with virtual
414methods requires a similar trampoline class, *even if* it doesn't explicitly
415declare or override any virtual methods itself:
416
417.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200418
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400419 class Husky : public Dog {};
420 class PyHusky : public Husky {
421 using Dog::Dog; // Inherit constructors
422 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, Husky, go, n_times); }
423 std::string name() override { PYBIND11_OVERLOAD(std::string, Husky, name, ); }
424 std::string bark() override { PYBIND11_OVERLOAD(std::string, Husky, bark, ); }
425 };
426
427There is, however, a technique that can be used to avoid this duplication
428(which can be especially helpful for a base class with several virtual
429methods). The technique involves using template trampoline classes, as
430follows:
431
432.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200433
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400434 template <class AnimalBase = Animal> class PyAnimal : public AnimalBase {
435 using AnimalBase::AnimalBase; // Inherit constructors
436 std::string go(int n_times) override { PYBIND11_OVERLOAD_PURE(std::string, AnimalBase, go, n_times); }
437 std::string name() override { PYBIND11_OVERLOAD(std::string, AnimalBase, name, ); }
438 };
439 template <class DogBase = Dog> class PyDog : public PyAnimal<DogBase> {
440 using PyAnimal<DogBase>::PyAnimal; // Inherit constructors
441 // Override PyAnimal's pure virtual go() with a non-pure one:
442 std::string go(int n_times) override { PYBIND11_OVERLOAD(std::string, DogBase, go, n_times); }
443 std::string bark() override { PYBIND11_OVERLOAD(std::string, DogBase, bark, ); }
444 };
445
446This technique has the advantage of requiring just one trampoline method to be
447declared per virtual method and pure virtual method override. It does,
448however, require the compiler to generate at least as many methods (and
449possibly more, if both pure virtual and overridden pure virtual methods are
450exposed, as above).
451
452The classes are then registered with pybind11 using:
453
454.. code-block:: cpp
Dean Moldovanaebca122016-08-16 01:26:02 +0200455
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400456 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal<>> animal(m, "Animal");
457 py::class_<Dog, std::unique_ptr<Dog>, PyDog<>> dog(m, "Dog");
458 py::class_<Husky, std::unique_ptr<Husky>, PyDog<Husky>> husky(m, "Husky");
459 // ... add animal, dog, husky definitions
460
461Note that ``Husky`` did not require a dedicated trampoline template class at
462all, since it neither declares any new virtual methods nor provides any pure
463virtual method implementations.
464
465With either the repeated-virtuals or templated trampoline methods in place, you
466can now create a python class that inherits from ``Dog``:
467
468.. code-block:: python
469
470 class ShihTzu(Dog):
471 def bark(self):
472 return "yip!"
473
474.. seealso::
475
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200476 See the file :file:`tests/test_virtual_functions.cpp` for complete examples
Jason Rhinelander0ca96e22016-08-05 17:02:33 -0400477 using both the duplication and templated trampoline approaches.
478
Wenzel Jakob9bb97c12016-06-03 11:19:41 +0200479.. _macro_notes:
480
481General notes regarding convenience macros
482==========================================
483
484pybind11 provides a few convenience macros such as
485:func:`PYBIND11_MAKE_OPAQUE` and :func:`PYBIND11_DECLARE_HOLDER_TYPE`, and
486``PYBIND11_OVERLOAD_*``. Since these are "just" macros that are evaluated
487in the preprocessor (which has no concept of types), they *will* get confused
488by commas in a template argument such as ``PYBIND11_OVERLOAD(MyReturnValue<T1,
489T2>, myFunc)``. In this case, the preprocessor assumes that the comma indicates
490the beginnning of the next parameter. Use a ``typedef`` to bind the template to
491another name and use it in the macro to avoid this problem.
492
493
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100494Global Interpreter Lock (GIL)
495=============================
496
497The classes :class:`gil_scoped_release` and :class:`gil_scoped_acquire` can be
498used to acquire and release the global interpreter lock in the body of a C++
499function call. In this way, long-running C++ code can be parallelized using
500multiple Python threads. Taking the previous section as an example, this could
501be realized as follows (important changes highlighted):
502
503.. code-block:: cpp
504 :emphasize-lines: 8,9,33,34
505
506 class PyAnimal : public Animal {
507 public:
508 /* Inherit the constructors */
509 using Animal::Animal;
510
511 /* Trampoline (need one for each virtual function) */
512 std::string go(int n_times) {
513 /* Acquire GIL before calling Python code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100514 py::gil_scoped_acquire acquire;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100515
516 PYBIND11_OVERLOAD_PURE(
517 std::string, /* Return type */
518 Animal, /* Parent class */
519 go, /* Name of function */
520 n_times /* Argument(s) */
521 );
522 }
523 };
524
525 PYBIND11_PLUGIN(example) {
526 py::module m("example", "pybind11 example plugin");
527
Wenzel Jakob86d825f2016-05-26 13:19:27 +0200528 py::class_<Animal, std::unique_ptr<Animal>, PyAnimal> animal(m, "Animal");
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100529 animal
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100530 .def(py::init<>())
531 .def("go", &Animal::go);
532
533 py::class_<Dog>(m, "Dog", animal)
534 .def(py::init<>());
535
536 m.def("call_go", [](Animal *animal) -> std::string {
537 /* Release GIL before calling into (potentially long-running) C++ code */
Wenzel Jakoba4caa852015-12-14 12:39:02 +0100538 py::gil_scoped_release release;
Wenzel Jakobecdd8682015-12-07 18:17:58 +0100539 return call_go(animal);
540 });
541
542 return m.ptr();
543 }
544
Wenzel Jakob93296692015-10-13 23:21:54 +0200545Passing STL data structures
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200546===========================
547
Wenzel Jakob8f4eb002015-10-15 18:13:33 +0200548When including the additional header file :file:`pybind11/stl.h`, conversions
Wenzel Jakob978e3762016-04-07 18:00:41 +0200549between ``std::vector<>``, ``std::list<>``, ``std::set<>``, and ``std::map<>``
550and the Python ``list``, ``set`` and ``dict`` data structures are automatically
551enabled. The types ``std::pair<>`` and ``std::tuple<>`` are already supported
552out of the box with just the core :file:`pybind11/pybind11.h` header.
Wenzel Jakob93296692015-10-13 23:21:54 +0200553
Wenzel Jakobfe342412016-09-06 13:02:29 +0900554The major downside of these implicit conversions is that containers must be
555converted (i.e. copied) on every Python->C++ and C++->Python transition, which
556can have implications on the program semantics and performance. Please read the
557next sections for more details and alternative approaches that avoid this.
Sergey Lyskov75204182016-08-29 22:50:38 -0400558
Wenzel Jakob93296692015-10-13 23:21:54 +0200559.. note::
560
Wenzel Jakobfe342412016-09-06 13:02:29 +0900561 Arbitrary nesting of any of these types is possible.
Wenzel Jakob93296692015-10-13 23:21:54 +0200562
563.. seealso::
564
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200565 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400566 example that demonstrates how to pass STL data types in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +0200567
Wenzel Jakobfe342412016-09-06 13:02:29 +0900568.. _opaque:
569
570Treating STL data structures as opaque objects
571==============================================
572
573pybind11 heavily relies on a template matching mechanism to convert parameters
574and return values that are constructed from STL data types such as vectors,
575linked lists, hash tables, etc. This even works in a recursive manner, for
576instance to deal with lists of hash maps of pairs of elementary and custom
577types, etc.
578
579However, a fundamental limitation of this approach is that internal conversions
580between Python and C++ types involve a copy operation that prevents
581pass-by-reference semantics. What does this mean?
582
583Suppose we bind the following function
584
585.. code-block:: cpp
586
587 void append_1(std::vector<int> &v) {
588 v.push_back(1);
589 }
590
591and call it from Python, the following happens:
592
593.. code-block:: pycon
594
595 >>> v = [5, 6]
596 >>> append_1(v)
597 >>> print(v)
598 [5, 6]
599
600As you can see, when passing STL data structures by reference, modifications
601are not propagated back the Python side. A similar situation arises when
602exposing STL data structures using the ``def_readwrite`` or ``def_readonly``
603functions:
604
605.. code-block:: cpp
606
607 /* ... definition ... */
608
609 class MyClass {
610 std::vector<int> contents;
611 };
612
613 /* ... binding code ... */
614
615 py::class_<MyClass>(m, "MyClass")
616 .def(py::init<>)
617 .def_readwrite("contents", &MyClass::contents);
618
619In this case, properties can be read and written in their entirety. However, an
620``append`` operaton involving such a list type has no effect:
621
622.. code-block:: pycon
623
624 >>> m = MyClass()
625 >>> m.contents = [5, 6]
626 >>> print(m.contents)
627 [5, 6]
628 >>> m.contents.append(7)
629 >>> print(m.contents)
630 [5, 6]
631
632Finally, the involved copy operations can be costly when dealing with very
633large lists. To deal with all of the above situations, pybind11 provides a
634macro named ``PYBIND11_MAKE_OPAQUE(T)`` that disables the template-based
635conversion machinery of types, thus rendering them *opaque*. The contents of
636opaque objects are never inspected or extracted, hence they *can* be passed by
637reference. For instance, to turn ``std::vector<int>`` into an opaque type, add
638the declaration
639
640.. code-block:: cpp
641
642 PYBIND11_MAKE_OPAQUE(std::vector<int>);
643
644before any binding code (e.g. invocations to ``class_::def()``, etc.). This
645macro must be specified at the top level (and outside of any namespaces), since
646it instantiates a partial template overload. If your binding code consists of
647multiple compilation units, it must be present in every file preceding any
648usage of ``std::vector<int>``. Opaque types must also have a corresponding
649``class_`` declaration to associate them with a name in Python, and to define a
650set of available operations, e.g.:
651
652.. code-block:: cpp
653
654 py::class_<std::vector<int>>(m, "IntVector")
655 .def(py::init<>())
656 .def("clear", &std::vector<int>::clear)
657 .def("pop_back", &std::vector<int>::pop_back)
658 .def("__len__", [](const std::vector<int> &v) { return v.size(); })
659 .def("__iter__", [](std::vector<int> &v) {
660 return py::make_iterator(v.begin(), v.end());
661 }, py::keep_alive<0, 1>()) /* Keep vector alive while iterator is used */
662 // ....
663
664The ability to expose STL containers as native Python objects is a fairly
665common request, hence pybind11 also provides an optional header file named
666:file:`pybind11/stl_bind.h` that does exactly this. The mapped containers try
667to match the behavior of their native Python counterparts as much as possible.
668
669The following example showcases usage of :file:`pybind11/stl_bind.h`:
670
671.. code-block:: cpp
672
673 // Don't forget this
674 #include <pybind11/stl_bind.h>
675
676 PYBIND11_MAKE_OPAQUE(std::vector<int>);
677 PYBIND11_MAKE_OPAQUE(std::map<std::string, double>);
678
679 // ...
680
681 // later in binding code:
682 py::bind_vector<std::vector<int>>(m, "VectorInt");
683 py::bind_map<std::map<std::string, double>>(m, "MapStringDouble");
684
685Please take a look at the :ref:`macro_notes` before using the
686``PYBIND11_MAKE_OPAQUE`` macro.
687
688.. seealso::
689
690 The file :file:`tests/test_opaque_types.cpp` contains a complete
691 example that demonstrates how to create and expose opaque types using
692 pybind11 in more detail.
693
694 The file :file:`tests/test_stl_binders.cpp` shows how to use the
695 convenience STL container wrappers.
696
697
Wenzel Jakobb2825952016-04-13 23:33:00 +0200698Binding sequence data types, iterators, the slicing protocol, etc.
699==================================================================
Wenzel Jakob93296692015-10-13 23:21:54 +0200700
701Please refer to the supplemental example for details.
702
703.. seealso::
704
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200705 The file :file:`tests/test_sequences_and_iterators.cpp` contains a
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400706 complete example that shows how to bind a sequence data type, including
707 length queries (``__len__``), iterators (``__iter__``), the slicing
708 protocol and other kinds of useful operations.
Wenzel Jakob93296692015-10-13 23:21:54 +0200709
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200710Return value policies
711=====================
712
Wenzel Jakob93296692015-10-13 23:21:54 +0200713Python and C++ use wildly different ways of managing the memory and lifetime of
714objects managed by them. This can lead to issues when creating bindings for
715functions that return a non-trivial type. Just by looking at the type
716information, it is not clear whether Python should take charge of the returned
717value and eventually free its resources, or if this is handled on the C++ side.
718For this reason, pybind11 provides a several `return value policy` annotations
719that can be passed to the :func:`module::def` and :func:`class_::def`
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100720functions. The default policy is :enum:`return_value_policy::automatic`.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +0200721
Wenzel Jakobbf099582016-08-22 12:52:02 +0200722Return value policies can also be applied to properties, in which case the
723arguments must be passed through the :class:`cpp_function` constructor:
724
725.. code-block:: cpp
726
727 class_<MyClass>(m, "MyClass")
728 def_property("data"
729 py::cpp_function(&MyClass::getData, py::return_value_policy::copy),
730 py::cpp_function(&MyClass::setData)
731 );
732
733The following table provides an overview of the available return value policies:
734
Wenzel Jakobf64feaf2016-04-28 14:33:45 +0200735.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
736
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200737+--------------------------------------------------+----------------------------------------------------------------------------+
738| Return value policy | Description |
739+==================================================+============================================================================+
740| :enum:`return_value_policy::automatic` | This is the default return value policy, which falls back to the policy |
741| | :enum:`return_value_policy::take_ownership` when the return value is a |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200742| | pointer. Otherwise, it uses :enum:`return_value::move` or |
743| | :enum:`return_value::copy` for rvalue and lvalue references, respectively. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200744| | See below for a description of what all of these different policies do. |
745+--------------------------------------------------+----------------------------------------------------------------------------+
746| :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 +0200747| | return value is a pointer. This is the default conversion policy for |
748| | function arguments when calling Python functions manually from C++ code |
749| | (i.e. via handle::operator()). You probably won't need to use this. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200750+--------------------------------------------------+----------------------------------------------------------------------------+
751| :enum:`return_value_policy::take_ownership` | Reference an existing object (i.e. do not create a new copy) and take |
752| | ownership. Python will call the destructor and delete operator when the |
753| | object's reference count reaches zero. Undefined behavior ensues when the |
Wenzel Jakobf53e3002016-06-30 14:59:23 +0200754| | C++ side does the same. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200755+--------------------------------------------------+----------------------------------------------------------------------------+
756| :enum:`return_value_policy::copy` | Create a new copy of the returned object, which will be owned by Python. |
757| | This policy is comparably safe because the lifetimes of the two instances |
758| | are decoupled. |
759+--------------------------------------------------+----------------------------------------------------------------------------+
760| :enum:`return_value_policy::move` | Use ``std::move`` to move the return value contents into a new instance |
761| | that will be owned by Python. This policy is comparably safe because the |
762| | lifetimes of the two instances (move source and destination) are decoupled.|
763+--------------------------------------------------+----------------------------------------------------------------------------+
764| :enum:`return_value_policy::reference` | Reference an existing object, but do not take ownership. The C++ side is |
765| | responsible for managing the object's lifetime and deallocating it when |
766| | it is no longer used. Warning: undefined behavior will ensue when the C++ |
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200767| | side deletes an object that is still referenced and used by Python. |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200768+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakobbf099582016-08-22 12:52:02 +0200769| :enum:`return_value_policy::reference_internal` | Indicates that the lifetime of the return value is tied to the lifetime |
770| | of a parent object, namely the implicit ``this``, or ``self`` argument of |
771| | the called method or property. Internally, this policy works just like |
772| | :enum:`return_value_policy::reference` but additionally applies a |
773| | ``keep_alive<0, 1>`` *call policy* (described in the next section) that |
774| | prevents the parent object from being garbage collected as long as the |
775| | return value is referenced by Python. This is the default policy for |
776| | property getters created via ``def_property``, ``def_readwrite``, etc.) |
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200777+--------------------------------------------------+----------------------------------------------------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +0200778
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200779.. warning::
780
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400781 Code with invalid return value policies might access unitialized memory or
782 free data structures multiple times, which can lead to hard-to-debug
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200783 non-determinism and segmentation faults, hence it is worth spending the
784 time to understand all the different options in the table above.
785
Jason Rhinelanderefc2aa72016-08-10 11:38:33 -0400786One important aspect of the above policies is that they only apply to instances
787which pybind11 has *not* seen before, in which case the policy clarifies
788essential questions about the return value's lifetime and ownership. When
789pybind11 knows the instance already (as identified by its type and address in
Wenzel Jakobfb6aed22016-07-18 20:29:53 +0200790memory), it will return the existing Python object wrapper rather than creating
Wenzel Jakobbf099582016-08-22 12:52:02 +0200791a new copy.
nafur717df752016-06-28 18:07:11 +0200792
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200793.. note::
794
795 The next section on :ref:`call_policies` discusses *call policies* that can be
796 specified *in addition* to a return value policy from the list above. Call
797 policies indicate reference relationships that can involve both return values
798 and parameters of functions.
799
800.. note::
801
802 As an alternative to elaborate call policies and lifetime management logic,
803 consider using smart pointers (see the section on :ref:`smart_pointers` for
804 details). Smart pointers can tell whether an object is still referenced from
805 C++ or Python, which generally eliminates the kinds of inconsistencies that
806 can lead to crashes or undefined behavior. For functions returning smart
807 pointers, it is not necessary to specify a return value policy.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100808
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200809.. _call_policies:
810
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100811Additional call policies
812========================
813
814In addition to the above return value policies, further `call policies` can be
815specified to indicate dependencies between parameters. There is currently just
816one policy named ``keep_alive<Nurse, Patient>``, which indicates that the
817argument with index ``Patient`` should be kept alive at least until the
Wenzel Jakob0b632312016-08-18 10:58:21 +0200818argument with index ``Nurse`` is freed by the garbage collector. Argument
819indices start at one, while zero refers to the return value. For methods, index
820``1`` refers to the implicit ``this`` pointer, while regular arguments begin at
821index ``2``. Arbitrarily many call policies can be specified. When a ``Nurse``
822with value ``None`` is detected at runtime, the call policy does nothing.
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100823
Wenzel Jakob0b632312016-08-18 10:58:21 +0200824This feature internally relies on the ability to create a *weak reference* to
825the nurse object, which is permitted by all classes exposed via pybind11. When
826the nurse object does not support weak references, an exception will be thrown.
827
828Consider the following example: here, the binding code for a list append
829operation ties the lifetime of the newly added element to the underlying
830container:
Wenzel Jakob5f218b32016-01-17 22:36:39 +0100831
832.. code-block:: cpp
833
834 py::class_<List>(m, "List")
835 .def("append", &List::append, py::keep_alive<1, 2>());
836
837.. note::
838
839 ``keep_alive`` is analogous to the ``with_custodian_and_ward`` (if Nurse,
840 Patient != 0) and ``with_custodian_and_ward_postcall`` (if Nurse/Patient ==
841 0) policies from Boost.Python.
842
Wenzel Jakob61587162016-01-18 22:38:52 +0100843.. seealso::
844
Dean Moldovanec0d38e2016-08-13 03:09:52 +0200845 The file :file:`tests/test_keep_alive.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -0400846 that demonstrates using :class:`keep_alive` in more detail.
Wenzel Jakob61587162016-01-18 22:38:52 +0100847
Wenzel Jakob93296692015-10-13 23:21:54 +0200848Implicit type conversions
849=========================
850
851Suppose that instances of two types ``A`` and ``B`` are used in a project, and
Wenzel Jakob8e93df82016-05-01 02:36:58 +0200852that an ``A`` can easily be converted into an instance of type ``B`` (examples of this
Wenzel Jakob93296692015-10-13 23:21:54 +0200853could be a fixed and an arbitrary precision number type).
854
855.. code-block:: cpp
856
857 py::class_<A>(m, "A")
858 /// ... members ...
859
860 py::class_<B>(m, "B")
861 .def(py::init<A>())
862 /// ... members ...
863
864 m.def("func",
865 [](const B &) { /* .... */ }
866 );
867
868To invoke the function ``func`` using a variable ``a`` containing an ``A``
869instance, we'd have to write ``func(B(a))`` in Python. On the other hand, C++
870will automatically apply an implicit type conversion, which makes it possible
871to directly write ``func(a)``.
872
873In this situation (i.e. where ``B`` has a constructor that converts from
874``A``), the following statement enables similar implicit conversions on the
875Python side:
876
877.. code-block:: cpp
878
879 py::implicitly_convertible<A, B>();
880
Wenzel Jakob3eeea6f2016-06-30 18:10:28 +0200881.. note::
882
883 Implicit conversions from ``A`` to ``B`` only work when ``B`` is a custom
884 data type that is exposed to Python via pybind11.
885
Wenzel Jakobf88af0c2016-06-22 13:52:31 +0200886.. _static_properties:
887
888Static properties
889=================
890
891The section on :ref:`properties` discussed the creation of instance properties
892that are implemented in terms of C++ getters and setters.
893
894Static properties can also be created in a similar way to expose getters and
895setters of static class attributes. It is important to note that the implicit
896``self`` argument also exists in this case and is used to pass the Python
897``type`` subclass instance. This parameter will often not be needed by the C++
898side, and the following example illustrates how to instantiate a lambda getter
899function that ignores it:
900
901.. code-block:: cpp
902
903 py::class_<Foo>(m, "Foo")
904 .def_property_readonly_static("foo", [](py::object /* self */) { return Foo(); });
905
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200906Unique pointers
907===============
908
909Given a class ``Example`` with Python bindings, it's possible to return
910instances wrapped in C++11 unique pointers, like so
911
912.. code-block:: cpp
913
914 std::unique_ptr<Example> create_example() { return std::unique_ptr<Example>(new Example()); }
915
916.. code-block:: cpp
917
918 m.def("create_example", &create_example);
919
920In other words, there is nothing special that needs to be done. While returning
921unique pointers in this way is allowed, it is *illegal* to use them as function
922arguments. For instance, the following function signature cannot be processed
923by pybind11.
924
925.. code-block:: cpp
926
927 void do_something_with_example(std::unique_ptr<Example> ex) { ... }
928
929The above signature would imply that Python needs to give up ownership of an
930object that is passed to this function, which is generally not possible (for
931instance, the object might be referenced elsewhere).
932
Wenzel Jakobf7b58742016-04-25 23:04:27 +0200933.. _smart_pointers:
934
Wenzel Jakob93296692015-10-13 23:21:54 +0200935Smart pointers
936==============
937
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200938This section explains how to pass values that are wrapped in "smart" pointer
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200939types with internal reference counting. For the simpler C++11 unique pointers,
940refer to the previous section.
Wenzel Jakob9f0dfce2016-04-06 17:38:18 +0200941
Wenzel Jakobe84f5572016-04-26 23:19:19 +0200942The binding generator for classes, :class:`class_`, takes an optional second
Wenzel Jakob93296692015-10-13 23:21:54 +0200943template type, which denotes a special *holder* type that is used to manage
944references to the object. When wrapping a type named ``Type``, the default
945value of this template parameter is ``std::unique_ptr<Type>``, which means that
946the object is deallocated when Python's reference count goes to zero.
947
Wenzel Jakob1853b652015-10-18 15:38:50 +0200948It is possible to switch to other types of reference counting wrappers or smart
949pointers, which is useful in codebases that rely on them. For instance, the
950following snippet causes ``std::shared_ptr`` to be used instead.
Wenzel Jakob93296692015-10-13 23:21:54 +0200951
952.. code-block:: cpp
953
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100954 py::class_<Example, std::shared_ptr<Example> /* <- holder type */> obj(m, "Example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100955
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100956Note that any particular class can only be associated with a single holder type.
Wenzel Jakob93296692015-10-13 23:21:54 +0200957
Wenzel Jakob1853b652015-10-18 15:38:50 +0200958To enable transparent conversions for functions that take shared pointers as an
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100959argument or that return them, a macro invocation similar to the following must
Wenzel Jakob1853b652015-10-18 15:38:50 +0200960be declared at the top level before any binding code:
961
962.. code-block:: cpp
963
Wenzel Jakobb1b71402015-10-18 16:48:30 +0200964 PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
Wenzel Jakob1853b652015-10-18 15:38:50 +0200965
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100966.. note::
Wenzel Jakob61d67f02015-12-14 12:53:06 +0100967
968 The first argument of :func:`PYBIND11_DECLARE_HOLDER_TYPE` should be a
969 placeholder name that is used as a template parameter of the second
970 argument. Thus, feel free to use any identifier, but use it consistently on
971 both sides; also, don't use the name of a type that already exists in your
972 codebase.
973
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100974One potential stumbling block when using holder types is that they need to be
975applied consistently. Can you guess what's broken about the following binding
976code?
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100977
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100978.. code-block:: cpp
Wenzel Jakob6e213c92015-11-24 23:05:58 +0100979
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100980 class Child { };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100981
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100982 class Parent {
983 public:
984 Parent() : child(std::make_shared<Child>()) { }
985 Child *get_child() { return child.get(); } /* Hint: ** DON'T DO THIS ** */
986 private:
987 std::shared_ptr<Child> child;
988 };
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100989
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100990 PYBIND11_PLUGIN(example) {
991 py::module m("example");
Wenzel Jakob5ef12192015-12-15 17:07:35 +0100992
Wenzel Jakobb2c2c792016-01-17 22:36:40 +0100993 py::class_<Child, std::shared_ptr<Child>>(m, "Child");
994
995 py::class_<Parent, std::shared_ptr<Parent>>(m, "Parent")
996 .def(py::init<>())
997 .def("get_child", &Parent::get_child);
998
999 return m.ptr();
1000 }
1001
1002The following Python code will cause undefined behavior (and likely a
1003segmentation fault).
1004
1005.. code-block:: python
1006
1007 from example import Parent
1008 print(Parent().get_child())
1009
1010The problem is that ``Parent::get_child()`` returns a pointer to an instance of
1011``Child``, but the fact that this instance is already managed by
1012``std::shared_ptr<...>`` is lost when passing raw pointers. In this case,
1013pybind11 will create a second independent ``std::shared_ptr<...>`` that also
1014claims ownership of the pointer. In the end, the object will be freed **twice**
1015since these shared pointers have no way of knowing about each other.
1016
1017There are two ways to resolve this issue:
1018
10191. For types that are managed by a smart pointer class, never use raw pointers
1020 in function arguments or return values. In other words: always consistently
1021 wrap pointers into their designated holder types (such as
1022 ``std::shared_ptr<...>``). In this case, the signature of ``get_child()``
1023 should be modified as follows:
1024
1025.. code-block:: cpp
1026
1027 std::shared_ptr<Child> get_child() { return child; }
1028
10292. Adjust the definition of ``Child`` by specifying
1030 ``std::enable_shared_from_this<T>`` (see cppreference_ for details) as a
1031 base class. This adds a small bit of information to ``Child`` that allows
1032 pybind11 to realize that there is already an existing
1033 ``std::shared_ptr<...>`` and communicate with it. In this case, the
1034 declaration of ``Child`` should look as follows:
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001035
Wenzel Jakob6e213c92015-11-24 23:05:58 +01001036.. _cppreference: http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
1037
Wenzel Jakobb2c2c792016-01-17 22:36:40 +01001038.. code-block:: cpp
1039
1040 class Child : public std::enable_shared_from_this<Child> { };
1041
Wenzel Jakob9bb97c12016-06-03 11:19:41 +02001042
1043Please take a look at the :ref:`macro_notes` before using this feature.
1044
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001045.. seealso::
1046
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001047 The file :file:`tests/test_smart_ptr.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001048 that demonstrates how to work with custom reference-counting holder types
1049 in more detail.
Wenzel Jakob5ef12192015-12-15 17:07:35 +01001050
Wenzel Jakob93296692015-10-13 23:21:54 +02001051.. _custom_constructors:
1052
1053Custom constructors
1054===================
1055
1056The syntax for binding constructors was previously introduced, but it only
1057works when a constructor with the given parameters actually exists on the C++
1058side. To extend this to more general cases, let's take a look at what actually
1059happens under the hood: the following statement
1060
1061.. code-block:: cpp
1062
1063 py::class_<Example>(m, "Example")
1064 .def(py::init<int>());
1065
1066is short hand notation for
1067
1068.. code-block:: cpp
1069
1070 py::class_<Example>(m, "Example")
1071 .def("__init__",
1072 [](Example &instance, int arg) {
1073 new (&instance) Example(arg);
1074 }
1075 );
1076
1077In other words, :func:`init` creates an anonymous function that invokes an
1078in-place constructor. Memory allocation etc. is already take care of beforehand
1079within pybind11.
1080
Nickolai Belakovski63338252016-08-27 11:57:55 -07001081.. _classes_with_non_public_destructors:
1082
1083Classes with non-public destructors
1084===================================
1085
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001086If a class has a private or protected destructor (as might e.g. be the case in
1087a singleton pattern), a compile error will occur when creating bindings via
1088pybind11. The underlying issue is that the ``std::unique_ptr`` holder type that
1089is responsible for managing the lifetime of instances will reference the
1090destructor even if no deallocations ever take place. In order to expose classes
1091with private or protected destructors, it is possible to override the holder
1092type via the second argument to ``class_``. Pybind11 provides a helper class
1093``py::nodelete`` that disables any destructor invocations. In this case, it is
1094crucial that instances are deallocated on the C++ side to avoid memory leaks.
Nickolai Belakovski63338252016-08-27 11:57:55 -07001095
1096.. code-block:: cpp
1097
1098 /* ... definition ... */
1099
1100 class MyClass {
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001101 private:
1102 ~MyClass() { }
Nickolai Belakovski63338252016-08-27 11:57:55 -07001103 };
1104
1105 /* ... binding code ... */
1106
Wenzel Jakob5e4e4772016-08-28 02:03:15 +02001107 py::class_<MyClass, std::unique_ptr<MyClass, py::nodelete>>(m, "MyClass")
Nickolai Belakovski63338252016-08-27 11:57:55 -07001108 .def(py::init<>)
1109
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001110.. _catching_and_throwing_exceptions:
1111
Wenzel Jakob93296692015-10-13 23:21:54 +02001112Catching and throwing exceptions
1113================================
1114
1115When C++ code invoked from Python throws an ``std::exception``, it is
1116automatically converted into a Python ``Exception``. pybind11 defines multiple
1117special exception classes that will map to different types of Python
1118exceptions:
1119
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001120.. tabularcolumns:: |p{0.5\textwidth}|p{0.45\textwidth}|
1121
Wenzel Jakob978e3762016-04-07 18:00:41 +02001122+--------------------------------------+------------------------------+
1123| C++ exception type | Python exception type |
1124+======================================+==============================+
1125| :class:`std::exception` | ``RuntimeError`` |
1126+--------------------------------------+------------------------------+
1127| :class:`std::bad_alloc` | ``MemoryError`` |
1128+--------------------------------------+------------------------------+
1129| :class:`std::domain_error` | ``ValueError`` |
1130+--------------------------------------+------------------------------+
1131| :class:`std::invalid_argument` | ``ValueError`` |
1132+--------------------------------------+------------------------------+
1133| :class:`std::length_error` | ``ValueError`` |
1134+--------------------------------------+------------------------------+
1135| :class:`std::out_of_range` | ``ValueError`` |
1136+--------------------------------------+------------------------------+
1137| :class:`std::range_error` | ``ValueError`` |
1138+--------------------------------------+------------------------------+
1139| :class:`pybind11::stop_iteration` | ``StopIteration`` (used to |
1140| | implement custom iterators) |
1141+--------------------------------------+------------------------------+
1142| :class:`pybind11::index_error` | ``IndexError`` (used to |
1143| | indicate out of bounds |
1144| | accesses in ``__getitem__``, |
1145| | ``__setitem__``, etc.) |
1146+--------------------------------------+------------------------------+
Sergey Lyskova95bde12016-05-08 19:31:55 -04001147| :class:`pybind11::value_error` | ``ValueError`` (used to |
1148| | indicate wrong value passed |
1149| | in ``container.remove(...)`` |
1150+--------------------------------------+------------------------------+
Jason Rhinelander5aa85be2016-08-11 21:22:05 -04001151| :class:`pybind11::key_error` | ``KeyError`` (used to |
1152| | indicate out of bounds |
1153| | accesses in ``__getitem__``, |
1154| | ``__setitem__`` in dict-like |
1155| | objects, etc.) |
1156+--------------------------------------+------------------------------+
Wenzel Jakob978e3762016-04-07 18:00:41 +02001157| :class:`pybind11::error_already_set` | Indicates that the Python |
1158| | exception flag has already |
1159| | been initialized |
1160+--------------------------------------+------------------------------+
Wenzel Jakob93296692015-10-13 23:21:54 +02001161
1162When a Python function invoked from C++ throws an exception, it is converted
1163into a C++ exception of type :class:`error_already_set` whose string payload
1164contains a textual summary.
1165
1166There is also a special exception :class:`cast_error` that is thrown by
1167:func:`handle::call` when the input arguments cannot be converted to Python
1168objects.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001169
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001170Registering custom exception translators
1171========================================
1172
1173If the default exception conversion policy described
1174:ref:`above <catching_and_throwing_exceptions>`
1175is insufficient, pybind11 also provides support for registering custom
1176exception translators.
1177
1178The function ``register_exception_translator(translator)`` takes a stateless
1179callable (e.g. a function pointer or a lambda function without captured
1180variables) with the following call signature: ``void(std::exception_ptr)``.
1181
1182When a C++ exception is thrown, registered exception translators are tried
1183in reverse order of registration (i.e. the last registered translator gets
1184a first shot at handling the exception).
1185
1186Inside the translator, ``std::rethrow_exception`` should be used within
1187a try block to re-throw the exception. A catch clause can then use
1188``PyErr_SetString`` to set a Python exception as demonstrated
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001189in :file:`tests/test_exceptions.cpp`.
Pim Schellart5a7d17f2016-06-17 17:35:59 -04001190
1191This example also demonstrates how to create custom exception types
1192with ``py::exception``.
1193
1194The following example demonstrates this for a hypothetical exception class
1195``MyCustomException``:
1196
1197.. code-block:: cpp
1198
1199 py::register_exception_translator([](std::exception_ptr p) {
1200 try {
1201 if (p) std::rethrow_exception(p);
1202 } catch (const MyCustomException &e) {
1203 PyErr_SetString(PyExc_RuntimeError, e.what());
1204 }
1205 });
1206
1207Multiple exceptions can be handled by a single translator. If the exception is
1208not caught by the current translator, the previously registered one gets a
1209chance.
1210
1211If none of the registered exception translators is able to handle the
1212exception, it is handled by the default converter as described in the previous
1213section.
1214
1215.. note::
1216
1217 You must either call ``PyErr_SetString`` for every exception caught in a
1218 custom exception translator. Failure to do so will cause Python to crash
1219 with ``SystemError: error return without exception set``.
1220
1221 Exceptions that you do not plan to handle should simply not be caught.
1222
1223 You may also choose to explicity (re-)throw the exception to delegate it to
1224 the other existing exception translators.
1225
1226 The ``py::exception`` wrapper for creating custom exceptions cannot (yet)
1227 be used as a ``py::base``.
1228
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001229.. _eigen:
1230
1231Transparent conversion of dense and sparse Eigen data types
1232===========================================================
1233
1234Eigen [#f1]_ is C++ header-based library for dense and sparse linear algebra. Due to
1235its popularity and widespread adoption, pybind11 provides transparent
1236conversion support between Eigen and Scientific Python linear algebra data types.
1237
1238Specifically, when including the optional header file :file:`pybind11/eigen.h`,
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001239pybind11 will automatically and transparently convert
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001240
12411. Static and dynamic Eigen dense vectors and matrices to instances of
1242 ``numpy.ndarray`` (and vice versa).
1243
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012442. Returned matrix expressions such as blocks (including columns or rows) and
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001245 diagonals will be converted to ``numpy.ndarray`` of the expression
1246 values.
1247
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012483. Returned matrix-like objects such as Eigen::DiagonalMatrix or
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001249 Eigen::SelfAdjointView will be converted to ``numpy.ndarray`` containing the
1250 expressed value.
1251
Jason Rhinelanderb68d8fc2016-08-04 16:39:30 -040012524. Eigen sparse vectors and matrices to instances of
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001253 ``scipy.sparse.csr_matrix``/``scipy.sparse.csc_matrix`` (and vice versa).
1254
1255This makes it possible to bind most kinds of functions that rely on these types.
1256One major caveat are functions that take Eigen matrices *by reference* and modify
1257them somehow, in which case the information won't be propagated to the caller.
1258
1259.. code-block:: cpp
1260
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001261 /* The Python bindings of these functions won't replicate
1262 the intended effect of modifying the function arguments */
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001263 void scale_by_2(Eigen::Vector3f &v) {
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -04001264 v *= 2;
1265 }
1266 void scale_by_2(Eigen::Ref<Eigen::MatrixXd> &v) {
1267 v *= 2;
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001268 }
1269
1270To see why this is, refer to the section on :ref:`opaque` (although that
1271section specifically covers STL data types, the underlying issue is the same).
1272The next two sections discuss an efficient alternative for exposing the
1273underlying native Eigen types as opaque objects in a way that still integrates
1274with NumPy and SciPy.
1275
1276.. [#f1] http://eigen.tuxfamily.org
1277
1278.. seealso::
1279
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001280 The file :file:`tests/test_eigen.cpp` contains a complete example that
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001281 shows how to pass Eigen sparse and dense data types in more detail.
1282
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001283Buffer protocol
1284===============
1285
1286Python supports an extremely general and convenient approach for exchanging
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001287data between plugin libraries. Types can expose a buffer view [#f2]_, which
1288provides fast direct access to the raw internal data representation. Suppose we
1289want to bind the following simplistic Matrix class:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001290
1291.. code-block:: cpp
1292
1293 class Matrix {
1294 public:
1295 Matrix(size_t rows, size_t cols) : m_rows(rows), m_cols(cols) {
1296 m_data = new float[rows*cols];
1297 }
1298 float *data() { return m_data; }
1299 size_t rows() const { return m_rows; }
1300 size_t cols() const { return m_cols; }
1301 private:
1302 size_t m_rows, m_cols;
1303 float *m_data;
1304 };
1305
1306The following binding code exposes the ``Matrix`` contents as a buffer object,
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001307making it possible to cast Matrices into NumPy arrays. It is even possible to
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001308completely avoid copy operations with Python expressions like
1309``np.array(matrix_instance, copy = False)``.
1310
1311.. code-block:: cpp
1312
1313 py::class_<Matrix>(m, "Matrix")
1314 .def_buffer([](Matrix &m) -> py::buffer_info {
1315 return py::buffer_info(
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001316 m.data(), /* Pointer to buffer */
1317 sizeof(float), /* Size of one scalar */
1318 py::format_descriptor<float>::format(), /* Python struct-style format descriptor */
1319 2, /* Number of dimensions */
1320 { m.rows(), m.cols() }, /* Buffer dimensions */
1321 { sizeof(float) * m.rows(), /* Strides (in bytes) for each index */
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001322 sizeof(float) }
1323 );
1324 });
1325
1326The snippet above binds a lambda function, which can create ``py::buffer_info``
1327description records on demand describing a given matrix. The contents of
1328``py::buffer_info`` mirror the Python buffer protocol specification.
1329
1330.. code-block:: cpp
1331
1332 struct buffer_info {
1333 void *ptr;
1334 size_t itemsize;
1335 std::string format;
1336 int ndim;
1337 std::vector<size_t> shape;
1338 std::vector<size_t> strides;
1339 };
1340
1341To create a C++ function that can take a Python buffer object as an argument,
1342simply use the type ``py::buffer`` as one of its arguments. Buffers can exist
1343in a great variety of configurations, hence some safety checks are usually
1344necessary in the function body. Below, you can see an basic example on how to
1345define a custom constructor for the Eigen double precision matrix
1346(``Eigen::MatrixXd``) type, which supports initialization from compatible
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001347buffer objects (e.g. a NumPy matrix).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001348
1349.. code-block:: cpp
1350
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001351 /* Bind MatrixXd (or some other Eigen type) to Python */
1352 typedef Eigen::MatrixXd Matrix;
1353
1354 typedef Matrix::Scalar Scalar;
1355 constexpr bool rowMajor = Matrix::Flags & Eigen::RowMajorBit;
1356
1357 py::class_<Matrix>(m, "Matrix")
1358 .def("__init__", [](Matrix &m, py::buffer b) {
Wenzel Jakobe7628532016-05-05 10:04:44 +02001359 typedef Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic> Strides;
Wenzel Jakobe7628532016-05-05 10:04:44 +02001360
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001361 /* Request a buffer descriptor from Python */
1362 py::buffer_info info = b.request();
1363
1364 /* Some sanity checks ... */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001365 if (info.format != py::format_descriptor<Scalar>::format())
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001366 throw std::runtime_error("Incompatible format: expected a double array!");
1367
1368 if (info.ndim != 2)
1369 throw std::runtime_error("Incompatible buffer dimension!");
1370
Wenzel Jakobe7628532016-05-05 10:04:44 +02001371 auto strides = Strides(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001372 info.strides[rowMajor ? 0 : 1] / sizeof(Scalar),
1373 info.strides[rowMajor ? 1 : 0] / sizeof(Scalar));
Wenzel Jakobe7628532016-05-05 10:04:44 +02001374
1375 auto map = Eigen::Map<Matrix, 0, Strides>(
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001376 static_cat<Scalar *>(info.ptr), info.shape[0], info.shape[1], strides);
Wenzel Jakobe7628532016-05-05 10:04:44 +02001377
1378 new (&m) Matrix(map);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001379 });
1380
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001381For reference, the ``def_buffer()`` call for this Eigen data type should look
1382as follows:
1383
1384.. code-block:: cpp
1385
1386 .def_buffer([](Matrix &m) -> py::buffer_info {
1387 return py::buffer_info(
1388 m.data(), /* Pointer to buffer */
1389 sizeof(Scalar), /* Size of one scalar */
1390 /* Python struct-style format descriptor */
Ivan Smirnov5e71e172016-06-26 12:42:34 +01001391 py::format_descriptor<Scalar>::format(),
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001392 /* Number of dimensions */
1393 2,
1394 /* Buffer dimensions */
1395 { (size_t) m.rows(),
1396 (size_t) m.cols() },
1397 /* Strides (in bytes) for each index */
1398 { sizeof(Scalar) * (rowMajor ? m.cols() : 1),
1399 sizeof(Scalar) * (rowMajor ? 1 : m.rows()) }
1400 );
1401 })
1402
1403For a much easier approach of binding Eigen types (although with some
1404limitations), refer to the section on :ref:`eigen`.
1405
Wenzel Jakob93296692015-10-13 23:21:54 +02001406.. seealso::
1407
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001408 The file :file:`tests/test_buffers.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001409 that demonstrates using the buffer protocol with pybind11 in more detail.
Wenzel Jakob93296692015-10-13 23:21:54 +02001410
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001411.. [#f2] http://docs.python.org/3/c-api/buffer.html
Wenzel Jakob978e3762016-04-07 18:00:41 +02001412
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001413NumPy support
1414=============
1415
1416By exchanging ``py::buffer`` with ``py::array`` in the above snippet, we can
1417restrict the function so that it only accepts NumPy arrays (rather than any
Wenzel Jakob978e3762016-04-07 18:00:41 +02001418type of Python object satisfying the buffer protocol).
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001419
1420In many situations, we want to define a function which only accepts a NumPy
Wenzel Jakob93296692015-10-13 23:21:54 +02001421array of a certain data type. This is possible via the ``py::array_t<T>``
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001422template. For instance, the following function requires the argument to be a
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001423NumPy array containing double precision values.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001424
1425.. code-block:: cpp
1426
Wenzel Jakob93296692015-10-13 23:21:54 +02001427 void f(py::array_t<double> array);
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001428
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001429When it is invoked with a different type (e.g. an integer or a list of
1430integers), the binding code will attempt to cast the input into a NumPy array
1431of the requested type. Note that this feature requires the
1432:file:``pybind11/numpy.h`` header to be included.
1433
1434Data in NumPy arrays is not guaranteed to packed in a dense manner;
1435furthermore, entries can be separated by arbitrary column and row strides.
1436Sometimes, it can be useful to require a function to only accept dense arrays
1437using either the C (row-major) or Fortran (column-major) ordering. This can be
1438accomplished via a second template argument with values ``py::array::c_style``
1439or ``py::array::f_style``.
1440
1441.. code-block:: cpp
1442
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001443 void f(py::array_t<double, py::array::c_style | py::array::forcecast> array);
Wenzel Jakobf1032df2016-05-05 10:00:00 +02001444
Wenzel Jakobb47a9de2016-05-19 16:02:09 +02001445The ``py::array::forcecast`` argument is the default value of the second
1446template paramenter, and it ensures that non-conforming arguments are converted
1447into an array satisfying the specified requirements instead of trying the next
1448function overload.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001449
Ivan Smirnov223afe32016-07-02 15:33:04 +01001450NumPy structured types
1451======================
1452
1453In order for ``py::array_t`` to work with structured (record) types, we first need
Ivan Smirnov5412a052016-07-02 16:18:42 +01001454to register the memory layout of the type. This can be done via ``PYBIND11_NUMPY_DTYPE``
Ivan Smirnov223afe32016-07-02 15:33:04 +01001455macro which expects the type followed by field names:
1456
1457.. code-block:: cpp
1458
1459 struct A {
1460 int x;
1461 double y;
1462 };
1463
1464 struct B {
1465 int z;
1466 A a;
1467 };
1468
Ivan Smirnov5412a052016-07-02 16:18:42 +01001469 PYBIND11_NUMPY_DTYPE(A, x, y);
1470 PYBIND11_NUMPY_DTYPE(B, z, a);
Ivan Smirnov223afe32016-07-02 15:33:04 +01001471
1472 /* now both A and B can be used as template arguments to py::array_t */
1473
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001474Vectorizing functions
1475=====================
1476
1477Suppose we want to bind a function with the following signature to Python so
1478that it can process arbitrary NumPy array arguments (vectors, matrices, general
1479N-D arrays) in addition to its normal arguments:
1480
1481.. code-block:: cpp
1482
1483 double my_func(int x, float y, double z);
1484
Wenzel Jakob8f4eb002015-10-15 18:13:33 +02001485After including the ``pybind11/numpy.h`` header, this is extremely simple:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001486
1487.. code-block:: cpp
1488
1489 m.def("vectorized_func", py::vectorize(my_func));
1490
1491Invoking the function like below causes 4 calls to be made to ``my_func`` with
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001492each of the array elements. The significant advantage of this compared to
Wenzel Jakob978e3762016-04-07 18:00:41 +02001493solutions like ``numpy.vectorize()`` is that the loop over the elements runs
1494entirely on the C++ side and can be crunched down into a tight, optimized loop
1495by the compiler. The result is returned as a NumPy array of type
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001496``numpy.dtype.float64``.
1497
Wenzel Jakob99279f72016-06-03 11:19:29 +02001498.. code-block:: pycon
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001499
1500 >>> x = np.array([[1, 3],[5, 7]])
1501 >>> y = np.array([[2, 4],[6, 8]])
1502 >>> z = 3
1503 >>> result = vectorized_func(x, y, z)
1504
1505The scalar argument ``z`` is transparently replicated 4 times. The input
1506arrays ``x`` and ``y`` are automatically converted into the right types (they
1507are of type ``numpy.dtype.int64`` but need to be ``numpy.dtype.int32`` and
1508``numpy.dtype.float32``, respectively)
1509
Wenzel Jakob8e93df82016-05-01 02:36:58 +02001510Sometimes we might want to explicitly exclude an argument from the vectorization
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001511because it makes little sense to wrap it in a NumPy array. For instance,
1512suppose the function signature was
1513
1514.. code-block:: cpp
1515
1516 double my_func(int x, float y, my_custom_type *z);
1517
1518This can be done with a stateful Lambda closure:
1519
1520.. code-block:: cpp
1521
1522 // Vectorize a lambda function with a capture object (e.g. to exclude some arguments from the vectorization)
1523 m.def("vectorized_func",
Wenzel Jakob93296692015-10-13 23:21:54 +02001524 [](py::array_t<int> x, py::array_t<float> y, my_custom_type *z) {
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001525 auto stateful_closure = [z](int x, float y) { return my_func(x, y, z); };
1526 return py::vectorize(stateful_closure)(x, y);
1527 }
1528 );
1529
Wenzel Jakob61587162016-01-18 22:38:52 +01001530In cases where the computation is too complicated to be reduced to
1531``vectorize``, it will be necessary to create and access the buffer contents
1532manually. The following snippet contains a complete example that shows how this
1533works (the code is somewhat contrived, since it could have been done more
1534simply using ``vectorize``).
1535
1536.. code-block:: cpp
1537
1538 #include <pybind11/pybind11.h>
1539 #include <pybind11/numpy.h>
1540
1541 namespace py = pybind11;
1542
1543 py::array_t<double> add_arrays(py::array_t<double> input1, py::array_t<double> input2) {
1544 auto buf1 = input1.request(), buf2 = input2.request();
1545
1546 if (buf1.ndim != 1 || buf2.ndim != 1)
1547 throw std::runtime_error("Number of dimensions must be one");
1548
Ivan Smirnovb6518592016-08-13 13:28:56 +01001549 if (buf1.size != buf2.size)
Wenzel Jakob61587162016-01-18 22:38:52 +01001550 throw std::runtime_error("Input shapes must match");
1551
Ivan Smirnovb6518592016-08-13 13:28:56 +01001552 /* No pointer is passed, so NumPy will allocate the buffer */
1553 auto result = py::array_t<double>(buf1.size);
Wenzel Jakob61587162016-01-18 22:38:52 +01001554
1555 auto buf3 = result.request();
1556
1557 double *ptr1 = (double *) buf1.ptr,
1558 *ptr2 = (double *) buf2.ptr,
1559 *ptr3 = (double *) buf3.ptr;
1560
1561 for (size_t idx = 0; idx < buf1.shape[0]; idx++)
1562 ptr3[idx] = ptr1[idx] + ptr2[idx];
1563
1564 return result;
1565 }
1566
1567 PYBIND11_PLUGIN(test) {
1568 py::module m("test");
1569 m.def("add_arrays", &add_arrays, "Add two NumPy arrays");
1570 return m.ptr();
1571 }
1572
Wenzel Jakob93296692015-10-13 23:21:54 +02001573.. seealso::
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001574
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001575 The file :file:`tests/test_numpy_vectorize.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001576 example that demonstrates using :func:`vectorize` in more detail.
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001577
Wenzel Jakob93296692015-10-13 23:21:54 +02001578Functions taking Python objects as arguments
1579============================================
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001580
Wenzel Jakob93296692015-10-13 23:21:54 +02001581pybind11 exposes all major Python types using thin C++ wrapper classes. These
1582wrapper classes can also be used as parameters of functions in bindings, which
1583makes it possible to directly work with native Python types on the C++ side.
1584For instance, the following statement iterates over a Python ``dict``:
Wenzel Jakob28f98aa2015-10-13 02:57:16 +02001585
Wenzel Jakob93296692015-10-13 23:21:54 +02001586.. code-block:: cpp
1587
1588 void print_dict(py::dict dict) {
1589 /* Easily interact with Python types */
1590 for (auto item : dict)
1591 std::cout << "key=" << item.first << ", "
1592 << "value=" << item.second << std::endl;
1593 }
1594
1595Available types include :class:`handle`, :class:`object`, :class:`bool_`,
Wenzel Jakob27e8e102016-01-17 22:36:37 +01001596:class:`int_`, :class:`float_`, :class:`str`, :class:`bytes`, :class:`tuple`,
Wenzel Jakobf64feaf2016-04-28 14:33:45 +02001597:class:`list`, :class:`dict`, :class:`slice`, :class:`none`, :class:`capsule`,
1598:class:`iterable`, :class:`iterator`, :class:`function`, :class:`buffer`,
1599:class:`array`, and :class:`array_t`.
Wenzel Jakob93296692015-10-13 23:21:54 +02001600
Wenzel Jakob436b7312015-10-20 01:04:30 +02001601In this kind of mixed code, it is often necessary to convert arbitrary C++
1602types to Python, which can be done using :func:`cast`:
1603
1604.. code-block:: cpp
1605
1606 MyClass *cls = ..;
1607 py::object obj = py::cast(cls);
1608
1609The reverse direction uses the following syntax:
1610
1611.. code-block:: cpp
1612
1613 py::object obj = ...;
1614 MyClass *cls = obj.cast<MyClass *>();
1615
1616When conversion fails, both directions throw the exception :class:`cast_error`.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001617It is also possible to call python functions via ``operator()``.
1618
1619.. code-block:: cpp
1620
1621 py::function f = <...>;
1622 py::object result_py = f(1234, "hello", some_instance);
1623 MyClass &result = result_py.cast<MyClass>();
1624
1625The special ``f(*args)`` and ``f(*args, **kwargs)`` syntax is also supported to
1626supply arbitrary argument and keyword lists, although these cannot be mixed
1627with other parameters.
1628
1629.. code-block:: cpp
1630
1631 py::function f = <...>;
1632 py::tuple args = py::make_tuple(1234);
1633 py::dict kwargs;
1634 kwargs["y"] = py::cast(5678);
1635 py::object result = f(*args, **kwargs);
Wenzel Jakob436b7312015-10-20 01:04:30 +02001636
Wenzel Jakob93296692015-10-13 23:21:54 +02001637.. seealso::
1638
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001639 The file :file:`tests/test_python_types.cpp` contains a complete
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001640 example that demonstrates passing native Python types in more detail. The
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001641 file :file:`tests/test_kwargs_and_defaults.cpp` discusses usage
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001642 of ``args`` and ``kwargs``.
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001643
1644Default arguments revisited
1645===========================
1646
1647The section on :ref:`default_args` previously discussed basic usage of default
1648arguments using pybind11. One noteworthy aspect of their implementation is that
1649default arguments are converted to Python objects right at declaration time.
1650Consider the following example:
1651
1652.. code-block:: cpp
1653
1654 py::class_<MyClass>("MyClass")
1655 .def("myFunction", py::arg("arg") = SomeType(123));
1656
1657In this case, pybind11 must already be set up to deal with values of the type
1658``SomeType`` (via a prior instantiation of ``py::class_<SomeType>``), or an
1659exception will be thrown.
1660
1661Another aspect worth highlighting is that the "preview" of the default argument
1662in the function signature is generated using the object's ``__repr__`` method.
1663If not available, the signature may not be very helpful, e.g.:
1664
Wenzel Jakob99279f72016-06-03 11:19:29 +02001665.. code-block:: pycon
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001666
1667 FUNCTIONS
1668 ...
1669 | myFunction(...)
Wenzel Jakob48548ea2016-01-17 22:36:44 +01001670 | Signature : (MyClass, arg : SomeType = <SomeType object at 0x101b7b080>) -> NoneType
Wenzel Jakob2ac50442016-01-17 22:36:35 +01001671 ...
1672
1673The first way of addressing this is by defining ``SomeType.__repr__``.
1674Alternatively, it is possible to specify the human-readable preview of the
1675default argument manually using the ``arg_t`` notation:
1676
1677.. code-block:: cpp
1678
1679 py::class_<MyClass>("MyClass")
1680 .def("myFunction", py::arg_t<SomeType>("arg", SomeType(123), "SomeType(123)"));
1681
Wenzel Jakobc769fce2016-03-03 12:03:30 +01001682Sometimes it may be necessary to pass a null pointer value as a default
1683argument. In this case, remember to cast it to the underlying type in question,
1684like so:
1685
1686.. code-block:: cpp
1687
1688 py::class_<MyClass>("MyClass")
1689 .def("myFunction", py::arg("arg") = (SomeType *) nullptr);
1690
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001691Binding functions that accept arbitrary numbers of arguments and keywords arguments
1692===================================================================================
1693
1694Python provides a useful mechanism to define functions that accept arbitrary
1695numbers of arguments and keyword arguments:
1696
1697.. code-block:: cpp
1698
1699 def generic(*args, **kwargs):
1700 # .. do something with args and kwargs
1701
1702Such functions can also be created using pybind11:
1703
1704.. code-block:: cpp
1705
1706 void generic(py::args args, py::kwargs kwargs) {
1707 /// .. do something with args
1708 if (kwargs)
1709 /// .. do something with kwargs
1710 }
1711
1712 /// Binding code
1713 m.def("generic", &generic);
1714
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001715(See ``tests/test_kwargs_and_defaults.cpp``). The class ``py::args``
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001716derives from ``py::list`` and ``py::kwargs`` derives from ``py::dict`` Note
1717that the ``kwargs`` argument is invalid if no keyword arguments were actually
1718provided. Please refer to the other examples for details on how to iterate
1719over these, and on how to cast their entries into C++ objects.
Wenzel Jakob178c8a82016-05-10 15:59:01 +01001720
Wenzel Jakob3764e282016-08-01 23:34:48 +02001721.. warning::
1722
1723 Unlike Python, pybind11 does not allow combining normal parameters with the
1724 ``args`` / ``kwargs`` special parameters.
1725
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001726Partitioning code over multiple extension modules
1727=================================================
1728
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001729It's straightforward to split binding code over multiple extension modules,
1730while referencing types that are declared elsewhere. Everything "just" works
1731without any special precautions. One exception to this rule occurs when
1732extending a type declared in another extension module. Recall the basic example
1733from Section :ref:`inheritance`.
Wenzel Jakob2dfbade2016-01-17 22:36:37 +01001734
1735.. code-block:: cpp
1736
1737 py::class_<Pet> pet(m, "Pet");
1738 pet.def(py::init<const std::string &>())
1739 .def_readwrite("name", &Pet::name);
1740
1741 py::class_<Dog>(m, "Dog", pet /* <- specify parent */)
1742 .def(py::init<const std::string &>())
1743 .def("bark", &Dog::bark);
1744
1745Suppose now that ``Pet`` bindings are defined in a module named ``basic``,
1746whereas the ``Dog`` bindings are defined somewhere else. The challenge is of
1747course that the variable ``pet`` is not available anymore though it is needed
1748to indicate the inheritance relationship to the constructor of ``class_<Dog>``.
1749However, it can be acquired as follows:
1750
1751.. code-block:: cpp
1752
1753 py::object pet = (py::object) py::module::import("basic").attr("Pet");
1754
1755 py::class_<Dog>(m, "Dog", pet)
1756 .def(py::init<const std::string &>())
1757 .def("bark", &Dog::bark);
1758
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001759Alternatively, we can rely on the ``base`` tag, which performs an automated
1760lookup of the corresponding Python type. However, this also requires invoking
1761the ``import`` function once to ensure that the pybind11 binding code of the
1762module ``basic`` has been executed.
1763
Wenzel Jakob8d862b32016-03-06 13:37:22 +01001764.. code-block:: cpp
1765
1766 py::module::import("basic");
1767
1768 py::class_<Dog>(m, "Dog", py::base<Pet>())
1769 .def(py::init<const std::string &>())
1770 .def("bark", &Dog::bark);
Wenzel Jakobeda978e2016-03-15 15:05:40 +01001771
Wenzel Jakob978e3762016-04-07 18:00:41 +02001772Naturally, both methods will fail when there are cyclic dependencies.
1773
Wenzel Jakob90d2f5e2016-04-11 14:30:11 +02001774Note that compiling code which has its default symbol visibility set to
1775*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
1776ability to access types defined in another extension module. Workarounds
1777include changing the global symbol visibility (not recommended, because it will
1778lead unnecessarily large binaries) or manually exporting types that are
1779accessed by multiple extension modules:
1780
1781.. code-block:: cpp
1782
1783 #ifdef _WIN32
1784 # define EXPORT_TYPE __declspec(dllexport)
1785 #else
1786 # define EXPORT_TYPE __attribute__ ((visibility("default")))
1787 #endif
1788
1789 class EXPORT_TYPE Dog : public Animal {
1790 ...
1791 };
1792
1793
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001794Pickling support
1795================
1796
1797Python's ``pickle`` module provides a powerful facility to serialize and
1798de-serialize a Python object graph into a binary data stream. To pickle and
Wenzel Jakob3d0e6ff2016-04-13 11:48:10 +02001799unpickle C++ classes using pybind11, two additional functions must be provided.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001800Suppose the class in question has the following signature:
1801
1802.. code-block:: cpp
1803
1804 class Pickleable {
1805 public:
1806 Pickleable(const std::string &value) : m_value(value) { }
1807 const std::string &value() const { return m_value; }
1808
1809 void setExtra(int extra) { m_extra = extra; }
1810 int extra() const { return m_extra; }
1811 private:
1812 std::string m_value;
1813 int m_extra = 0;
1814 };
1815
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001816The binding code including the requisite ``__setstate__`` and ``__getstate__`` methods [#f3]_
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001817looks as follows:
1818
1819.. code-block:: cpp
1820
1821 py::class_<Pickleable>(m, "Pickleable")
1822 .def(py::init<std::string>())
1823 .def("value", &Pickleable::value)
1824 .def("extra", &Pickleable::extra)
1825 .def("setExtra", &Pickleable::setExtra)
1826 .def("__getstate__", [](const Pickleable &p) {
1827 /* Return a tuple that fully encodes the state of the object */
1828 return py::make_tuple(p.value(), p.extra());
1829 })
1830 .def("__setstate__", [](Pickleable &p, py::tuple t) {
1831 if (t.size() != 2)
1832 throw std::runtime_error("Invalid state!");
1833
Wenzel Jakobd40885a2016-04-13 13:30:05 +02001834 /* Invoke the in-place constructor. Note that this is needed even
1835 when the object just has a trivial default constructor */
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001836 new (&p) Pickleable(t[0].cast<std::string>());
1837
1838 /* Assign any additional state */
1839 p.setExtra(t[1].cast<int>());
1840 });
1841
1842An instance can now be pickled as follows:
1843
1844.. code-block:: python
1845
1846 try:
1847 import cPickle as pickle # Use cPickle on Python 2.7
1848 except ImportError:
1849 import pickle
1850
1851 p = Pickleable("test_value")
1852 p.setExtra(15)
Wenzel Jakob81e09752016-04-30 23:13:03 +02001853 data = pickle.dumps(p, 2)
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001854
Wenzel Jakob81e09752016-04-30 23:13:03 +02001855Note that only the cPickle module is supported on Python 2.7. The second
1856argument to ``dumps`` is also crucial: it selects the pickle protocol version
18572, since the older version 1 is not supported. Newer versions are also fine—for
1858instance, specify ``-1`` to always use the latest available version. Beware:
1859failure to follow these instructions will cause important pybind11 memory
1860allocation routines to be skipped during unpickling, which will likely lead to
1861memory corruption and/or segmentation faults.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001862
1863.. seealso::
1864
Dean Moldovanec0d38e2016-08-13 03:09:52 +02001865 The file :file:`tests/test_pickling.cpp` contains a complete example
Jason Rhinelander3e2e44f2016-07-18 17:03:37 -04001866 that demonstrates how to pickle and unpickle types using pybind11 in more
1867 detail.
Wenzel Jakob1c329aa2016-04-13 02:37:36 +02001868
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001869.. [#f3] http://docs.python.org/3/library/pickle.html#pickling-class-instances
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001870
1871Generating documentation using Sphinx
1872=====================================
1873
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001874Sphinx [#f4]_ has the ability to inspect the signatures and documentation
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001875strings in pybind11-based extension modules to automatically generate beautiful
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001876documentation in a variety formats. The python_example repository [#f5]_ contains a
Wenzel Jakobef7a9b92016-04-13 18:41:59 +02001877simple example repository which uses this approach.
1878
1879There are two potential gotchas when using this approach: first, make sure that
1880the resulting strings do not contain any :kbd:`TAB` characters, which break the
1881docstring parsing routines. You may want to use C++11 raw string literals,
1882which are convenient for multi-line comments. Conveniently, any excess
1883indentation will be automatically be removed by Sphinx. However, for this to
1884work, it is important that all lines are indented consistently, i.e.:
1885
1886.. code-block:: cpp
1887
1888 // ok
1889 m.def("foo", &foo, R"mydelimiter(
1890 The foo function
1891
1892 Parameters
1893 ----------
1894 )mydelimiter");
1895
1896 // *not ok*
1897 m.def("foo", &foo, R"mydelimiter(The foo function
1898
1899 Parameters
1900 ----------
1901 )mydelimiter");
1902
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001903.. [#f4] http://www.sphinx-doc.org
Wenzel Jakobca8dc082016-06-03 14:24:17 +02001904.. [#f5] http://github.com/pybind/python_example
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001905
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001906Evaluating Python expressions from strings and files
1907====================================================
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001908
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001909pybind11 provides the :func:`eval` and :func:`eval_file` functions to evaluate
1910Python expressions and statements. The following example illustrates how they
1911can be used.
1912
1913Both functions accept a template parameter that describes how the argument
1914should be interpreted. Possible choices include ``eval_expr`` (isolated
1915expression), ``eval_single_statement`` (a single statement, return value is
1916always ``none``), and ``eval_statements`` (sequence of statements, return value
1917is always ``none``).
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001918
1919.. code-block:: cpp
1920
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001921 // At beginning of file
1922 #include <pybind11/eval.h>
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001923
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001924 ...
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001925
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001926 // Evaluate in scope of main module
1927 py::object scope = py::module::import("__main__").attr("__dict__");
Klemens Morgensternc6ad2c42016-06-09 16:10:26 +02001928
Wenzel Jakob0d3fc352016-07-08 10:52:10 +02001929 // Evaluate an isolated expression
1930 int result = py::eval("my_variable + 10", scope).cast<int>();
1931
1932 // Evaluate a sequence of statements
1933 py::eval<py::eval_statements>(
1934 "print('Hello')\n"
1935 "print('world!');",
1936 scope);
1937
1938 // Evaluate the statements in an separate Python file on disk
1939 py::eval_file("script.py", scope);